summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2020-10-27 14:39:34 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-10-27 16:20:09 +0100
commit8ae09213a7ba2520dd4c206c76d1730a55408519 (patch)
tree5b34938e2fe38d0e95d7a2f6ead379a719d07950
parent36dc8b6994514e42fcdf00ba91774148afbefc1c (diff)
tun: use IoctlCtlInfo from golang.org/x/sys/unix on macOS
Direct syscalls using unix.Syscall(unix.SYS_*, ...) are discouraged on macOS and might not be supported in future versions. Switch to use unix.IoctlCtlInfo to get the kernel control info. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--tun/tun_darwin.go26
1 files changed, 6 insertions, 20 deletions
diff --git a/tun/tun_darwin.go b/tun/tun_darwin.go
index f04ace2..c30e733 100644
--- a/tun/tun_darwin.go
+++ b/tun/tun_darwin.go
@@ -20,9 +20,6 @@ import (
const utunControlName = "com.apple.net.utun_control"
-// _CTLIOCGINFO value derived from /usr/include/sys/{kern_control,ioccom}.h
-const _CTLIOCGINFO = (0x40000000 | 0x80000000) | ((100 & 0x1fff) << 16) | uint32(byte('N'))<<8 | 3
-
// sockaddr_ctl specifeid in /usr/include/sys/kern_control.h
type sockaddrCtl struct {
scLen uint8
@@ -130,29 +127,18 @@ func CreateTUN(name string, mtu int) (Device, error) {
return nil, err
}
- var ctlInfo = &struct {
- ctlID uint32
- ctlName [96]byte
- }{}
-
- copy(ctlInfo.ctlName[:], []byte(utunControlName))
-
- _, _, errno := unix.Syscall(
- unix.SYS_IOCTL,
- uintptr(fd),
- uintptr(_CTLIOCGINFO),
- uintptr(unsafe.Pointer(ctlInfo)),
- )
-
- if errno != 0 {
- return nil, fmt.Errorf("_CTLIOCGINFO: %v", errno)
+ ctlInfo := &unix.CtlInfo{}
+ copy(ctlInfo.Name[:], []byte(utunControlName))
+ err = unix.IoctlCtlInfo(fd, ctlInfo)
+ if err != nil {
+ return nil, fmt.Errorf("IoctlGetCtlInfo: %w", err)
}
sc := sockaddrCtl{
scLen: uint8(sockaddrCtlSize),
scFamily: unix.AF_SYSTEM,
ssSysaddr: 2,
- scID: ctlInfo.ctlID,
+ scID: ctlInfo.Id,
scUnit: uint32(ifIndex) + 1,
}