diff options
Diffstat (limited to 'app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go')
-rw-r--r-- | app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go index 24a0eaec..74a0c97f 100644 --- a/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go +++ b/app/tools/libwg-go/src/git.zx2c4.com/wireguard-go/api-android.go @@ -85,6 +85,7 @@ func wgTurnOn(ifnameRef string, tun_fd int32, settings string) int32 { } device.Up() + device.net.bind.(*NativeBind).clearSourceOnAllRouteChanges = true logger.Info.Println("Device started") var i int32 @@ -121,18 +122,7 @@ func wgGetSocketV4(tunnelHandle int32) int32 { if !ok { return -1 } - fd := int32(-1) - conn, err := native.ipv4.SyscallConn() - if err != nil { - return -1 - } - err = conn.Control(func(f uintptr) { - fd = int32(f) - }) - if err != nil { - return -1 - } - return fd + return int32(native.sock4) } //export wgGetSocketV6 @@ -145,18 +135,41 @@ func wgGetSocketV6(tunnelHandle int32) int32 { if !ok { return -1 } - fd := int32(-1) - conn, err := native.ipv6.SyscallConn() - if err != nil { - return -1 + return int32(native.sock6) +} + +//export wgPutSocketV4 +func wgPutSocketV4(tunnelHandle int32) { + device, ok := tunnelHandles[tunnelHandle] + if !ok { + return } - err = conn.Control(func(f uintptr) { - fd = int32(f) - }) - if err != nil { - return -1 + native, ok := device.net.bind.(*NativeBind) + if !ok { + return + } + fwmark, err := unix.GetsockoptInt(native.sock6, unix.SOL_SOCKET, unix.SO_MARK) + if err == nil { + native.lastMark = uint32(fwmark) + device.net.fwmark = uint32(fwmark) + } +} + +//export wgPutSocketV6 +func wgPutSocketV6(tunnelHandle int32) { + device, ok := tunnelHandles[tunnelHandle] + if !ok { + return + } + native, ok := device.net.bind.(*NativeBind) + if !ok { + return + } + fwmark, err := unix.GetsockoptInt(native.sock6, unix.SOL_SOCKET, unix.SO_MARK) + if err == nil { + native.lastMark = uint32(fwmark) + device.net.fwmark = uint32(fwmark) } - return fd } func main() {} |