diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-03 05:20:13 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-04 16:37:11 +0100 |
commit | 68f0721c6a1aea6bb97320ec0cf6b8f7f723603d (patch) | |
tree | 615ff2a882d73f9f8febe94aaaf22cf54c229621 /tun/tun_linux.go | |
parent | b8e85267cf22528a96cefba5f86bac5958ce0c58 (diff) |
tun: import mobile particularities
Diffstat (limited to 'tun/tun_linux.go')
-rw-r--r-- | tun/tun_linux.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tun/tun_linux.go b/tun/tun_linux.go index f808079..c352c1a 100644 --- a/tun/tun_linux.go +++ b/tun/tun_linux.go @@ -443,3 +443,25 @@ func CreateTUNFromFile(file *os.File, mtu int) (TUNDevice, error) { return tun, nil } + +func CreateUnmonitoredTUNFromFD(tunFd int) (TUNDevice, string, error) { + file := os.NewFile(uintptr(tunFd), "/dev/tun") + tun := &NativeTun{ + tunFile: file, + fd: file.Fd(), + events: make(chan TUNEvent, 5), + errors: make(chan error, 5), + nopi: true, + } + var err error + tun.fdCancel, err = rwcancel.NewRWCancel(int(tun.fd)) + if err != nil { + return nil, "", err + } + name, err := tun.Name() + if err != nil { + tun.fdCancel.Cancel() + return nil, "", err + } + return tun, name, nil +} |