From d6b694e1613fd19f8a77ea177d467a60fda4db1d Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 22 May 2018 15:17:35 +0200 Subject: Add OpenBSD tun driver support --- conn_default.go | 64 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 27 deletions(-) (limited to 'conn_default.go') diff --git a/conn_default.go b/conn_default.go index 739fc83..fc52fbf 100644 --- a/conn_default.go +++ b/conn_default.go @@ -140,35 +140,45 @@ func (bind *NativeBind) Send(buff []byte, endpoint Endpoint) error { return err } -func (bind *NativeBind) SetMark(mark uint32) error { +var fwmarkIoctl int + +func init() { if runtime.GOOS == "freebsd" { - fd4, err1 := bind.ipv4.SyscallConn() - fd6, err2 := bind.ipv6.SyscallConn() - if err1 != nil { - return err1 - } - if err2 != nil { - return err2 - } - err3 := fd4.Control(func(fd uintptr) { - err1 = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, 0x1015 /* unix.SO_USER_COOKIE */, int(mark)) - }) - err4 := fd6.Control(func(fd uintptr) { - err2 = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, 0x1015 /* unix.SO_USER_COOKIE */, int(mark)) - }) - if err1 != nil { - return err1 - } - if err2 != nil { - return err2 - } - if err3 != nil { - return err3 - } - if err4 != nil { - return err4 - } + fwmarkIoctl = 0x1015 /* unix.SO_USER_COOKIE */ + } else if runtime.GOOS == "openbsd" { + fwmarkIoctl = 0x1021 /* unix.SO_RTABLE */ + } +} + +func (bind *NativeBind) SetMark(mark uint32) error { + if fwmarkIoctl == 0 { return nil } + fd4, err1 := bind.ipv4.SyscallConn() + fd6, err2 := bind.ipv6.SyscallConn() + if err1 != nil { + return err1 + } + if err2 != nil { + return err2 + } + err3 := fd4.Control(func(fd uintptr) { + err1 = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, fwmarkIoctl, int(mark)) + }) + err4 := fd6.Control(func(fd uintptr) { + err2 = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, fwmarkIoctl, int(mark)) + }) + if err1 != nil { + return err1 + } + if err2 != nil { + return err2 + } + if err3 != nil { + return err3 + } + if err4 != nil { + return err4 + } return nil } -- cgit v1.2.3-59-g8ed1b