summaryrefslogtreecommitdiffstats
path: root/tun
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2020-10-27 14:39:35 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2020-10-27 16:20:09 +0100
commite6b7c4eef3f914c8657ca02676e48f61e8bf3ed8 (patch)
tree9f8f2f2cca3e0cea74c1d8e83915b84ecc0a772b /tun
parenttun: use IoctlCtlInfo from golang.org/x/sys/unix on macOS (diff)
downloadwireguard-go-e6b7c4eef3f914c8657ca02676e48f61e8bf3ed8.tar.xz
wireguard-go-e6b7c4eef3f914c8657ca02676e48f61e8bf3ed8.zip
tun: use Ioctl{Get,Set}IfreqMTU 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.Ioctl{Get,Set}IfreqMTU to get and set an interface's MTU. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'tun')
-rw-r--r--tun/tun_darwin.go45
1 files changed, 10 insertions, 35 deletions
diff --git a/tun/tun_darwin.go b/tun/tun_darwin.go
index c30e733..54021c5 100644
--- a/tun/tun_darwin.go
+++ b/tun/tun_darwin.go
@@ -298,11 +298,6 @@ func (tun *NativeTun) Close() error {
}
func (tun *NativeTun) setMTU(n int) error {
-
- // open datagram socket
-
- var fd int
-
fd, err := unix.Socket(
unix.AF_INET,
unix.SOCK_DGRAM,
@@ -315,29 +310,18 @@ func (tun *NativeTun) setMTU(n int) error {
defer unix.Close(fd)
- // do ioctl call
-
- var ifr [32]byte
- copy(ifr[:], tun.name)
- *(*uint32)(unsafe.Pointer(&ifr[unix.IFNAMSIZ])) = uint32(n)
- _, _, errno := unix.Syscall(
- unix.SYS_IOCTL,
- uintptr(fd),
- uintptr(unix.SIOCSIFMTU),
- uintptr(unsafe.Pointer(&ifr[0])),
- )
-
- if errno != 0 {
- return fmt.Errorf("failed to set MTU on %s", tun.name)
+ var ifr unix.IfreqMTU
+ copy(ifr.Name[:], tun.name)
+ ifr.MTU = int32(n)
+ err = unix.IoctlSetIfreqMTU(fd, &ifr)
+ if err != nil {
+ return fmt.Errorf("failed to set MTU on %s: %w", tun.name, err)
}
return nil
}
func (tun *NativeTun) MTU() (int, error) {
-
- // open datagram socket
-
fd, err := unix.Socket(
unix.AF_INET,
unix.SOCK_DGRAM,
@@ -350,19 +334,10 @@ func (tun *NativeTun) MTU() (int, error) {
defer unix.Close(fd)
- // do ioctl call
-
- var ifr [64]byte
- copy(ifr[:], tun.name)
- _, _, errno := unix.Syscall(
- unix.SYS_IOCTL,
- uintptr(fd),
- uintptr(unix.SIOCGIFMTU),
- uintptr(unsafe.Pointer(&ifr[0])),
- )
- if errno != 0 {
- return 0, fmt.Errorf("failed to get MTU on %s", tun.name)
+ ifr, err := unix.IoctlGetIfreqMTU(fd, tun.name)
+ if err != nil {
+ return 0, fmt.Errorf("failed to get MTU on %s: %w", tun.name, err)
}
- return int(*(*int32)(unsafe.Pointer(&ifr[16]))), nil
+ return int(ifr.MTU), nil
}