@@ -33,7 +33,6 @@ import (
33
33
"golang.org/x/sys/unix"
34
34
"net"
35
35
"os"
36
- "time"
37
36
"unsafe"
38
37
)
39
38
@@ -53,12 +52,7 @@ type ifreqFlags struct {
53
52
54
53
func open (name string , mtu uint ) (* tunInterface , error ) {
55
54
const In6AddrGenModeNone = "1"
56
- f , err := os .OpenFile (tunCloneDevice , os .O_RDWR , 0 )
57
- if err != nil {
58
- return nil , err
59
- }
60
-
61
- err = f .SetDeadline (time.Time {})
55
+ f , err := unix .Open (tunCloneDevice , unix .O_RDWR , 0 )
62
56
if err != nil {
63
57
return nil , err
64
58
}
@@ -75,6 +69,7 @@ func open(name string, mtu uint) (*tunInterface, error) {
75
69
}
76
70
77
71
ifName := string (bytes .TrimRight (tunFlags .name [:], "\000 " ))
72
+ unix .SetNonblock (f , true )
78
73
79
74
// prevent auto-assigned link local IPv6 address when the interface is brought up
80
75
// https://www.toradex.com/community/questions/16932/ipv6-addrconfnetdev-up-eth0-link-is-not-ready.html
@@ -96,13 +91,13 @@ func open(name string, mtu uint) (*tunInterface, error) {
96
91
return nil , err
97
92
}
98
93
sock := os .NewFile (uintptr (fd ), "raw" )
99
- if err = ioctl (sock , unix .SIOCSIFMTU , uintptr (unsafe .Pointer (& tunFlags ))); err != nil {
94
+ if err = ioctl (int ( sock . Fd ()) , unix .SIOCSIFMTU , uintptr (unsafe .Pointer (& tunFlags ))); err != nil {
100
95
return nil , err
101
96
}
102
97
103
98
iFace , err := net .InterfaceByName (ifName )
104
99
tun := & tunInterface {
105
- dev : f ,
100
+ dev : os . NewFile ( uintptr ( f ), string ( tunFlags . name [:])) ,
106
101
iFace : iFace ,
107
102
}
108
103
@@ -191,8 +186,8 @@ func closeNetlink(conn *netlink.Conn) {
191
186
}
192
187
}
193
188
194
- func ioctl (f * os. File , request uint32 , argp uintptr ) error {
195
- _ , _ , errno := unix .Syscall (unix .SYS_IOCTL , f . Fd ( ), uintptr (request ), argp )
189
+ func ioctl (f int , request uint32 , argp uintptr ) error {
190
+ _ , _ , errno := unix .Syscall (unix .SYS_IOCTL , uintptr ( f ), uintptr (request ), argp )
196
191
if errno != 0 {
197
192
return fmt .Errorf ("ioctl failed with '%s'" , errno )
198
193
}
0 commit comments