aboutsummaryrefslogtreecommitdiffstats
path: root/wireguard-go-bridge/src
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-03 06:12:09 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-03 06:28:07 +0100
commitd7b16ffb1f5de22808f694a85615d2ffbd8492d7 (patch)
tree757e47f703eb959fefa420a24de98aca58000424 /wireguard-go-bridge/src
parentwireguard-go-bridge: update to Go 1.12 (diff)
downloadwireguard-apple-d7b16ffb1f5de22808f694a85615d2ffbd8492d7.tar.xz
wireguard-apple-d7b16ffb1f5de22808f694a85615d2ffbd8492d7.zip
wireguard-go-bridge: use go modules
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--wireguard-go-bridge/api-ios.go (renamed from wireguard-go-bridge/src/api-ios.go)82
-rw-r--r--wireguard-go-bridge/src/queueconstants.go16
-rw-r--r--wireguard-go-bridge/src/tun/api-ios.go46
3 files changed, 32 insertions, 112 deletions
diff --git a/wireguard-go-bridge/src/api-ios.go b/wireguard-go-bridge/api-ios.go
index d3d9201..dd66648 100644
--- a/wireguard-go-bridge/src/api-ios.go
+++ b/wireguard-go-bridge/api-ios.go
@@ -1,4 +1,4 @@
-/* SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2018-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
*/
@@ -18,6 +18,7 @@ import (
"bytes"
"errors"
"golang.org/x/sys/unix"
+ "golang.zx2c4.com/wireguard/device"
"golang.zx2c4.com/wireguard/tun"
"log"
"math"
@@ -45,12 +46,16 @@ func (l *CLogger) Write(p []byte) (int, error) {
return len(p), nil
}
-var tunnelHandles map[int32]*Device
+type tunnelHandle struct {
+ *device.Device
+ *device.Logger
+}
+
+var tunnelHandles = make(map[int32]tunnelHandle)
func init() {
- versionString = C.CString(WireGuardGoVersion)
- roamingDisabled = true
- tunnelHandles = make(map[int32]*Device)
+ versionString = C.CString(device.WireGuardGoVersion)
+ device.RoamingDisabled = true
signals := make(chan os.Signal)
signal.Notify(signals, unix.SIGUSR2)
go func() {
@@ -70,7 +75,7 @@ func init() {
//export wgEnableRoaming
func wgEnableRoaming(enabled bool) {
- roamingDisabled = !enabled
+ device.RoamingDisabled = !enabled
}
//export wgSetLogger
@@ -80,21 +85,26 @@ func wgSetLogger(loggerFn uintptr) {
//export wgTurnOn
func wgTurnOn(settings string, tunFd int32) int32 {
- logger := &Logger{
+ logger := &device.Logger{
Debug: log.New(&CLogger{level: 0}, "", 0),
Info: log.New(&CLogger{level: 1}, "", 0),
Error: log.New(&CLogger{level: 2}, "", 0),
}
- tun, _, err := tun.CreateTUNFromFD(int(tunFd))
+ err := unix.SetNonblock(int(tunFd), true)
+ if err != nil {
+ logger.Error.Println(err)
+ return -1
+ }
+ tun, err := tun.CreateTUNFromFile(os.NewFile(uintptr(tunFd), "/dev/tun"), 0)
if err != nil {
logger.Error.Println(err)
return -1
}
logger.Info.Println("Attaching to interface")
- device := NewDevice(tun, logger)
+ device := device.NewDevice(tun, logger)
- setError := ipcSetOperation(device, bufio.NewReader(strings.NewReader(settings)))
+ setError := device.IpcSetOperation(bufio.NewReader(strings.NewReader(settings)))
if setError != nil {
logger.Error.Println(setError)
return -1
@@ -112,7 +122,7 @@ func wgTurnOn(settings string, tunFd int32) int32 {
if i == math.MaxInt32 {
return -1
}
- tunnelHandles[i] = device
+ tunnelHandles[i] = tunnelHandle{device, logger}
return i
}
@@ -132,10 +142,10 @@ func wgSetConfig(tunnelHandle int32, settings string) int64 {
if !ok {
return 0
}
- err := ipcSetOperation(device, bufio.NewReader(strings.NewReader(settings)))
+ err := device.IpcSetOperation(bufio.NewReader(strings.NewReader(settings)))
if err != nil {
- device.log.Error.Println(err)
- return err.int64
+ device.Error.Println(err)
+ return err.ErrorCode()
}
return 0
}
@@ -148,7 +158,7 @@ func wgGetConfig(tunnelHandle int32) *C.char {
}
settings := new(bytes.Buffer)
writer := bufio.NewWriter(settings)
- err := ipcGetOperation(device, writer)
+ err := device.IpcGetOperation(writer)
if err != nil {
return nil
}
@@ -158,46 +168,18 @@ func wgGetConfig(tunnelHandle int32) *C.char {
//export wgBindInterfaceScope
func wgBindInterfaceScope(tunnelHandle int32, ifscope int32) {
- var operr error
device, ok := tunnelHandles[tunnelHandle]
if !ok {
return
}
- device.log.Info.Printf("Binding sockets to interface %d\n", ifscope)
- bind := device.net.bind.(*NativeBind)
- for bind.ipv4 != nil {
- fd, err := bind.ipv4.SyscallConn()
- if err != nil {
- device.log.Error.Printf("Unable to bind v4 socket to interface:", err)
- break
- }
- err = fd.Control(func(fd uintptr) {
- operr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_BOUND_IF, int(ifscope))
- })
- if err == nil {
- err = operr
- }
- if err != nil {
- device.log.Error.Printf("Unable to bind v4 socket to interface:", err)
- }
- break
+ device.Info.Printf("Binding sockets to interface %d\n", ifscope)
+ err := device.BindSocketToInterface4(uint32(ifscope))
+ if err != nil {
+ device.Error.Printf("Unable to bind v4 socket to interface:", err)
}
- for bind.ipv6 != nil {
- fd, err := bind.ipv6.SyscallConn()
- if err != nil {
- device.log.Error.Printf("Unable to bind v6 socket to interface:", err)
- break
- }
- err = fd.Control(func(fd uintptr) {
- operr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_BOUND_IF, int(ifscope))
- })
- if err == nil {
- err = operr
- }
- if err != nil {
- device.log.Error.Printf("Unable to bind v6 socket to interface:", err)
- }
- break
+ err = device.BindSocketToInterface6(uint32(ifscope))
+ if err != nil {
+ device.Error.Printf("Unable to bind v6 socket to interface:", err)
}
}
diff --git a/wireguard-go-bridge/src/queueconstants.go b/wireguard-go-bridge/src/queueconstants.go
deleted file mode 100644
index 85dfa1e..0000000
--- a/wireguard-go-bridge/src/queueconstants.go
+++ /dev/null
@@ -1,16 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0
- *
- * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved.
- */
-
-package main
-
-/* Fit within memory limits for iOS */
-
-const (
- QueueOutboundSize = 1024
- QueueInboundSize = 1024
- QueueHandshakeSize = 1024
- MaxSegmentSize = 1700
- PreallocatedBuffersPerPool = 1024
-)
diff --git a/wireguard-go-bridge/src/tun/api-ios.go b/wireguard-go-bridge/src/tun/api-ios.go
deleted file mode 100644
index 8d3413e..0000000
--- a/wireguard-go-bridge/src/tun/api-ios.go
+++ /dev/null
@@ -1,46 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0
- *
- * Copyright (C) 2017-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
- */
-
-package tun
-
-import (
- "golang.org/x/sys/unix"
- "net"
- "os"
-)
-
-func CreateTUNFromFD(tunFd int) (TUNDevice, string, error) {
- err := unix.SetNonblock(tunFd, true)
- if err != nil {
- return nil, "", err
- }
- file := os.NewFile(uintptr(tunFd), "/dev/tun")
- tun := &nativeTun{
- tunFile: file,
- events: make(chan TUNEvent, 5),
- errors: make(chan error, 5),
- }
- name, err := tun.Name()
- if err != nil {
- return nil, "", err
- }
- tunIfindex, err := func() (int, error) {
- iface, err := net.InterfaceByName(name)
- if err != nil {
- return -1, err
- }
- return iface.Index, nil
- }()
- if err != nil {
- return nil, "", err
- }
- tun.routeSocket, err = unix.Socket(unix.AF_ROUTE, unix.SOCK_RAW, unix.AF_UNSPEC)
- if err != nil {
- return nil, "", err
- }
- go tun.routineRouteListener(tunIfindex)
-
- return tun, name, nil
-}