| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- //go:build android
- package tun
- import (
- "context"
- "strconv"
- "github.com/xtls/xray-core/common/errors"
- "github.com/xtls/xray-core/common/platform"
- "golang.org/x/sys/unix"
- "gvisor.dev/gvisor/pkg/tcpip/link/fdbased"
- "gvisor.dev/gvisor/pkg/tcpip/stack"
- )
- type AndroidTun struct {
- tunFd int
- options TunOptions
- }
- // DefaultTun implements Tun
- var _ Tun = (*AndroidTun)(nil)
- // DefaultTun implements GVisorTun
- var _ GVisorTun = (*AndroidTun)(nil)
- // NewTun builds new tun interface handler
- func NewTun(options TunOptions) (Tun, error) {
- fd, err := strconv.Atoi(platform.NewEnvFlag(platform.TunFdKey).GetValue(func() string { return "0" }))
- errors.LogInfo(context.Background(), "read Android Tun Fd ", fd, err)
- err = unix.SetNonblock(fd, true)
- if err != nil {
- _ = unix.Close(fd)
- return nil, err
- }
- return &AndroidTun{
- tunFd: fd,
- options: options,
- }, nil
- }
- func (t *AndroidTun) Start() error {
- return nil
- }
- func (t *AndroidTun) Close() error {
- return nil
- }
- func (t *AndroidTun) newEndpoint() (stack.LinkEndpoint, error) {
- return fdbased.New(&fdbased.Options{
- FDs: []int{t.tunFd},
- MTU: t.options.MTU,
- RXChecksumOffload: true,
- })
- }
|