From 5657c3c1e88d80d4da41e2b592eb961f064b8ddf Mon Sep 17 00:00:00 2001 From: snow flurry Date: Fri, 18 Feb 2022 19:15:16 -0800 Subject: [PATCH] tun_netbsd: update to follow tun_openbsd changes Most of tun_netbsd is from tun_openbsd with some small changes, so we should follow the changes made in tun_openbsd. --- tun/tun_netbsd.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/tun/tun_netbsd.go b/tun/tun_netbsd.go index 9c8a0fe..14fe796 100644 --- a/tun/tun_netbsd.go +++ b/tun/tun_netbsd.go @@ -6,6 +6,7 @@ package tun import ( + "errors" "fmt" "io/ioutil" "net" @@ -130,7 +131,7 @@ func CreateTUN(name string, mtu int) (Device, error) { } else { for ifIndex = 0; ifIndex < 256; ifIndex += 1 { tunfile, err = os.OpenFile(fmt.Sprintf("/dev/tun%d", ifIndex), unix.O_RDWR, 0) - if err == nil || !errorIsEBUSY(err) { + if err == nil || !errors.Is(err, syscall.EBUSY) { break } } @@ -249,19 +250,15 @@ func (tun *NativeTun) Read(buff []byte, offset int) (int, error) { return 0, err default: buff := buff[offset-4:] - // buff := buff[offset:] n, err := tun.tunFile.Read(buff[:]) if n < 4 { return 0, err } return n - 4, err - // return n, err } } func (tun *NativeTun) Write(buff []byte, offset int) (int, error) { - - // reserve space for header buff = buff[offset-4:] @@ -289,15 +286,17 @@ func (tun *NativeTun) Flush() error { } func (tun *NativeTun) Close() error { - var err2 error - err1 := tun.tunFile.Close() - if tun.routeSocket != -1 { - unix.Shutdown(tun.routeSocket, unix.SHUT_RDWR) - err2 = unix.Close(tun.routeSocket) - tun.routeSocket = -1 - } else if tun.events != nil { - close(tun.events) - } + var err1, err2 error + tun.closeOnce.Do(func () { + err1 = tun.tunFile.Close() + if tun.routeSocket != -1 { + unix.Shutdown(tun.routeSocket, unix.SHUT_RDWR) + err2 = unix.Close(tun.routeSocket) + tun.routeSocket = -1 + } else if tun.events != nil { + close(tun.events) + } + }) if err1 != nil { return err1 }