return 0, fmt.Errorf("failed to get MTU on %s", tun.name)
}
- // convert result to signed 32-bit int
-
- val := binary.LittleEndian.Uint32(ifr[16:20])
- if val >= (1 << 31) {
- return int(val-(1<<31)) - (1 << 31), nil
- }
- return int(val), nil
+ return int(*(*int32)(unsafe.Pointer(&ifr[16]))), nil
}
return 0, fmt.Errorf("failed to get MTU on %s", tun.name)
}
- // convert result to signed 32-bit int
- mtu := ifr.MTU
- if mtu >= (1 << 31) {
- return int(mtu-(1<<31)) - (1 << 31), nil
- }
- return int(mtu), nil
-
+ return int(*(*int32)(unsafe.Pointer(&ifr.MTU))), nil
}
return 0, errors.New("failed to get MTU of TUN device: " + strconv.FormatInt(int64(errno), 10))
}
- // convert result to signed 32-bit int
-
- val := binary.LittleEndian.Uint32(ifr[16:20])
- if val >= (1 << 31) {
- return int(toInt32(val)), nil
- }
- return int(val), nil
+ return int(*(*int32)(unsafe.Pointer(&ifr[16]))), nil
}
func (tun *NativeTun) Name() (string, error) {
return 0, fmt.Errorf("failed to get MTU on %s", tun.name)
}
- // convert result to signed 32-bit int
- mtu := ifr.MTU
- if mtu >= (1 << 31) {
- return int(mtu-(1<<31)) - (1 << 31), nil
- }
- return int(mtu), nil
-
+ return int(*(*int32)(unsafe.Pointer(&ifr.MTU))), nil
}
"net"
"os"
"path"
+ "unsafe"
)
const (
go func(l *UAPIListener) {
event := unix.Kevent_t{
- Ident: uint64(uapi.keventFd),
Filter: unix.EVFILT_VNODE,
Flags: unix.EV_ADD | unix.EV_ENABLE | unix.EV_ONESHOT,
Fflags: unix.NOTE_WRITE,
}
+ // Allow this assignment to work with both the 32-bit and 64-bit version
+ // of the above struct. If you know another way, please submit a patch.
+ *(*uintptr)(unsafe.Pointer(&event.Ident)) = uintptr(uapi.keventFd)
events := make([]unix.Kevent_t, 1)
n := 1
var kerr error