Files
tun2socks/internal/dev/tun/tun_linux.go
2020-11-05 20:49:31 +08:00

44 lines
702 B
Go

package tun
import (
"io"
"syscall"
"gvisor.dev/gvisor/pkg/tcpip/link/fdbased"
"gvisor.dev/gvisor/pkg/tcpip/link/rawfile"
"gvisor.dev/gvisor/pkg/tcpip/link/tun"
"gvisor.dev/gvisor/pkg/tcpip/stack"
)
type closeFunc func() error
func (f closeFunc) Close() error {
return f()
}
func Open(name string) (ep stack.LinkEndpoint, c io.Closer, err error) {
var fd int
fd, err = tun.Open(name)
if err != nil {
return
}
var mtu uint32
mtu, err = rawfile.GetMTU(name)
if err != nil {
return
}
ep, err = fdbased.New(&fdbased.Options{
FDs: []int{fd},
MTU: mtu,
EthernetHeader: false,
})
c = closeFunc(func() error {
return syscall.Close(fd)
})
return
}