aboutsummaryrefslogtreecommitdiffstats
path: root/wireguard-go-bridge
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-12-11 22:21:33 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2018-12-11 22:25:54 +0100
commit63e67a5e1302ee69f20f66c1644566ee1ff5796b (patch)
treeba212e4e18513643c6756bed1680d9f0fc64539a /wireguard-go-bridge
parentState restoration: Don't create duplicate mainVC and tunnelsListVC (diff)
downloadwireguard-apple-63e67a5e1302ee69f20f66c1644566ee1ff5796b.tar.xz
wireguard-apple-63e67a5e1302ee69f20f66c1644566ee1ff5796b.zip
Revert pure-go network monitoring and add wgSetConfig
This reverts commit 99f0e457c34480f25582d7b4ed509404712c648c and adds a function too. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'wireguard-go-bridge')
-rw-r--r--wireguard-go-bridge/src/api-ios.go101
-rw-r--r--wireguard-go-bridge/wireguard.h1
2 files changed, 18 insertions, 84 deletions
diff --git a/wireguard-go-bridge/src/api-ios.go b/wireguard-go-bridge/src/api-ios.go
index 0fdb3be3..ff7aab2d 100644
--- a/wireguard-go-bridge/src/api-ios.go
+++ b/wireguard-go-bridge/src/api-ios.go
@@ -25,8 +25,6 @@ import (
"os/signal"
"runtime"
"strings"
- "syscall"
- "time"
"unsafe"
)
@@ -48,54 +46,12 @@ func (l *CLogger) Write(p []byte) (int, error) {
return len(p), nil
}
-type DeviceState struct {
- device *Device
- logger *Logger
- endpointsTimer *time.Timer
- endpointsSettings string
-}
-
-var tunnelHandles map[int32]*DeviceState
-
-func listenForRouteChanges() {
- //TODO: replace with NWPathMonitor
- data := make([]byte, os.Getpagesize())
- routeSocket, err := unix.Socket(unix.AF_ROUTE, unix.SOCK_RAW, unix.AF_UNSPEC)
- if err != nil {
- return
- }
- for {
- n, err := unix.Read(routeSocket, data)
- if err != nil {
- if errno, ok := err.(syscall.Errno); ok && errno == syscall.EINTR {
- continue
- }
- return
- }
-
- if n < 4 {
- continue
- }
- for _, deviceState := range tunnelHandles {
- if deviceState.endpointsTimer == nil {
- deviceState.endpointsTimer = time.AfterFunc(time.Second, func() {
- deviceState.endpointsTimer = nil
- bufferedSettings := bufio.NewReadWriter(bufio.NewReader(strings.NewReader(deviceState.endpointsSettings)), bufio.NewWriter(ioutil.Discard))
- deviceState.logger.Info.Println("Setting endpoints for re-resolution due to network change")
- err := ipcSetOperation(deviceState.device, bufferedSettings)
- if err != nil {
- deviceState.logger.Error.Println(err)
- }
- })
- }
- }
- }
-}
+var tunnelHandles map[int32]*Device
func init() {
versionString = C.CString(WireGuardGoVersion)
roamingDisabled = true
- tunnelHandles = make(map[int32]*DeviceState)
+ tunnelHandles = make(map[int32]*Device)
signals := make(chan os.Signal)
signal.Notify(signals, unix.SIGUSR2)
go func() {
@@ -111,7 +67,6 @@ func init() {
}
}
}()
- go listenForRouteChanges()
}
//export wgSetLogger
@@ -119,32 +74,6 @@ func wgSetLogger(loggerFn uintptr) {
loggerFunc = unsafe.Pointer(loggerFn)
}
-func extractEndpointFromSettings(settings string) string {
- var b strings.Builder
- pubkey := ""
- endpoint := ""
- listenPort := "listen_port=0"
- for _, line := range strings.Split(settings, "\n") {
- if strings.HasPrefix(line, "listen_port=") {
- listenPort = line
- } else if strings.HasPrefix(line, "public_key=") {
- if pubkey != "" && endpoint != "" {
- b.WriteString(pubkey + "\n" + endpoint + "\n")
- }
- pubkey = line
- } else if strings.HasPrefix(line, "endpoint=") {
- endpoint = line
- } else if line == "remove=true" {
- pubkey = ""
- endpoint = ""
- }
- }
- if pubkey != "" && endpoint != "" {
- b.WriteString(pubkey + "\n" + endpoint + "\n")
- }
- return listenPort + "\n" + b.String()
-}
-
//export wgTurnOn
func wgTurnOn(ifnameRef string, settings string, tunFd int32) int32 {
interfaceName := string([]byte(ifnameRef))
@@ -184,27 +113,31 @@ func wgTurnOn(ifnameRef string, settings string, tunFd int32) int32 {
if i == math.MaxInt32 {
return -1
}
- tunnelHandles[i] = &DeviceState{
- device: device,
- logger: logger,
- endpointsSettings: extractEndpointFromSettings(settings),
- }
+ tunnelHandles[i] = device
return i
}
//export wgTurnOff
func wgTurnOff(tunnelHandle int32) {
- deviceState, ok := tunnelHandles[tunnelHandle]
+ device, ok := tunnelHandles[tunnelHandle]
if !ok {
return
}
delete(tunnelHandles, tunnelHandle)
- t := deviceState.endpointsTimer
- if t != nil {
- deviceState.endpointsTimer = nil
- t.Stop()
+ device.Close()
+}
+
+//export wgSetConfig
+func wgSetConfig(tunnelHandle int32, settings string) {
+ device, ok := tunnelHandles[tunnelHandle]
+ if !ok {
+ return
+ }
+ bufferedSettings := bufio.NewReadWriter(bufio.NewReader(strings.NewReader(settings)), bufio.NewWriter(ioutil.Discard))
+ err := ipcSetOperation(device, bufferedSettings)
+ if err != nil {
+ device.log.Error.Println(err)
}
- deviceState.device.Close()
}
//export wgVersion
diff --git a/wireguard-go-bridge/wireguard.h b/wireguard-go-bridge/wireguard.h
index 77d16618..54cb9289 100644
--- a/wireguard-go-bridge/wireguard.h
+++ b/wireguard-go-bridge/wireguard.h
@@ -14,6 +14,7 @@ typedef void(*logger_fn_t)(int level, const char *msg);
extern void wgSetLogger(logger_fn_t logger_fn);
extern int wgTurnOn(gostring_t ifname, gostring_t settings, int32_t tun_fd);
extern void wgTurnOff(int handle);
+extern void wgSetConfig(int handle, gostring_t settings);
extern char *wgVersion();
#endif