mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2025-10-08 18:20:41 +08:00
44 lines
702 B
Go
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
|
|
}
|