aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-02-22 02:08:52 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2021-02-22 15:28:04 +0100
commitd9e89d18d219f8af09cddf7b002729ed6eaeadb6 (patch)
treeaa2709b096fb89d921b5ac15406b8e68c66326b5
parentbuild: port to arm64 (diff)
downloadwireguard-windows-d9e89d18d219f8af09cddf7b002729ed6eaeadb6.tar.xz
wireguard-windows-d9e89d18d219f8af09cddf7b002729ed6eaeadb6.zip
tunnel: new bind object handling
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--go.mod12
-rw-r--r--go.sum20
-rw-r--r--tunnel/defaultroutemonitor.go16
-rw-r--r--tunnel/interfacewatcher.go10
-rw-r--r--tunnel/service.go6
5 files changed, 31 insertions, 33 deletions
diff --git a/go.mod b/go.mod
index ac8314b1..2572ca1b 100644
--- a/go.mod
+++ b/go.mod
@@ -4,12 +4,12 @@ go 1.16
require (
github.com/lxn/walk v0.0.0-20210112085537-c389da54e794
- github.com/lxn/win v0.0.0-20201111105847-2a20daff6a55
- golang.org/x/crypto v0.0.0-20210218145215-b8e89b74b9df
- golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect
- golang.org/x/sys v0.0.0-20210218145245-beda7e5e158e
- golang.org/x/text v0.3.5
- golang.zx2c4.com/wireguard v0.0.0-20210217211927-8bf4204d2ea3
+ github.com/lxn/win v0.0.0-20210218163916-a377121e959e
+ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
+ golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d
+ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43
+ golang.org/x/text v0.3.6-0.20210220033129-8f690f22cf1c
+ golang.zx2c4.com/wireguard v0.0.0-20210222142647-219296a1e787
)
replace (
diff --git a/go.sum b/go.sum
index 30af4381..9c0ba931 100644
--- a/go.sum
+++ b/go.sum
@@ -1,28 +1,28 @@
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.0.0-20210218145215-b8e89b74b9df h1:y7QZzfUiTwWam+xBn29Ulb8CBwVN5UdzmMDavl9Whlw=
-golang.org/x/crypto v0.0.0-20210218145215-b8e89b74b9df/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
+golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
-golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d h1:1aflnvSoWWLI2k/dMUAl5lvU1YO4Mb4hz0gh+1rjcxU=
+golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210105210732-16f7687f5001/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210218145245-beda7e5e158e h1:f5mksnk+hgXHnImpZoWj64ja99j9zV7YUgrVG95uFE4=
-golang.org/x/sys v0.0.0-20210218145245-beda7e5e158e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43 h1:SgQ6LNaYJU0JIuEHv9+s6EbhSCwYeAf5Yvj6lpYlqAE=
+golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
-golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6-0.20210220033129-8f690f22cf1c h1:SW/oilbeWd6f32u3ZvuYGqZ+wivcp//I3Dy/gByk7Wk=
+golang.org/x/text v0.3.6-0.20210220033129-8f690f22cf1c/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.zx2c4.com/wireguard v0.0.0-20210217211927-8bf4204d2ea3 h1:1TprVg/dTRUXeAsC6hY1gqxwYiFVIVQd3CCeLVwmeaM=
-golang.zx2c4.com/wireguard v0.0.0-20210217211927-8bf4204d2ea3/go.mod h1:LofpIKqPJNvHiwKXuzsBshJCTe7IgRAz3iizquljFDk=
+golang.zx2c4.com/wireguard v0.0.0-20210222142647-219296a1e787 h1:zrctiUlt4hD1sgxBYrG5CAjobVhpdxnUXy+qyWWLR1w=
+golang.zx2c4.com/wireguard v0.0.0-20210222142647-219296a1e787/go.mod h1:LofpIKqPJNvHiwKXuzsBshJCTe7IgRAz3iizquljFDk=
golang.zx2c4.com/wireguard/windows v0.0.0-20210121140954-e7fc19d483bd h1:kAUzMAITME2MCtrXBaUa9P4tndiXGWO674k9gn6ZR28=
golang.zx2c4.com/wireguard/windows v0.0.0-20210121140954-e7fc19d483bd/go.mod h1:Y+FYqVFaQO6a+1uigm0N0GiuaZrLEaBxEiJ8tfH9sMQ=
golang.zx2c4.com/wireguard/windows v0.0.0-20210203225805-358658953538 h1:4QShzjqAmuoTMDIiormkQzuVDBqbK1E8yjoo9bspbkk=
diff --git a/tunnel/defaultroutemonitor.go b/tunnel/defaultroutemonitor.go
index ed1fd201..aa0db675 100644
--- a/tunnel/defaultroutemonitor.go
+++ b/tunnel/defaultroutemonitor.go
@@ -11,13 +11,13 @@ import (
"time"
"golang.org/x/sys/windows"
+
"golang.zx2c4.com/wireguard/conn"
- "golang.zx2c4.com/wireguard/device"
"golang.zx2c4.com/wireguard/tun"
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
)
-func bindSocketRoute(family winipcfg.AddressFamily, device *device.Device, ourLUID winipcfg.LUID, lastLUID *winipcfg.LUID, lastIndex *uint32, blackholeWhenLoop bool) error {
+func bindSocketRoute(family winipcfg.AddressFamily, binder conn.BindSocketToInterface, ourLUID winipcfg.LUID, lastLUID *winipcfg.LUID, lastIndex *uint32, blackholeWhenLoop bool) error {
r, err := winipcfg.GetIPForwardTable2(family)
if err != nil {
return err
@@ -51,21 +51,17 @@ func bindSocketRoute(family winipcfg.AddressFamily, device *device.Device, ourLU
*lastLUID = luid
*lastIndex = index
blackhole := blackholeWhenLoop && index == 0
- bind, _ := device.Bind().(conn.BindSocketToInterface)
- if bind == nil {
- return nil
- }
if family == windows.AF_INET {
log.Printf("Binding v4 socket to interface %d (blackhole=%v)", index, blackhole)
- return bind.BindSocketToInterface4(index, blackhole)
+ return binder.BindSocketToInterface4(index, blackhole)
} else if family == windows.AF_INET6 {
log.Printf("Binding v6 socket to interface %d (blackhole=%v)", index, blackhole)
- return bind.BindSocketToInterface6(index, blackhole)
+ return binder.BindSocketToInterface6(index, blackhole)
}
return nil
}
-func monitorDefaultRoutes(family winipcfg.AddressFamily, device *device.Device, autoMTU bool, blackholeWhenLoop bool, tun *tun.NativeTun) ([]winipcfg.ChangeCallback, error) {
+func monitorDefaultRoutes(family winipcfg.AddressFamily, binder conn.BindSocketToInterface, autoMTU bool, blackholeWhenLoop bool, tun *tun.NativeTun) ([]winipcfg.ChangeCallback, error) {
var minMTU uint32
if family == windows.AF_INET {
minMTU = 576
@@ -77,7 +73,7 @@ func monitorDefaultRoutes(family winipcfg.AddressFamily, device *device.Device,
lastIndex := ^uint32(0)
lastMTU := uint32(0)
doIt := func() error {
- err := bindSocketRoute(family, device, ourLUID, &lastLUID, &lastIndex, blackholeWhenLoop)
+ err := bindSocketRoute(family, binder, ourLUID, &lastLUID, &lastIndex, blackholeWhenLoop)
if err != nil {
return err
}
diff --git a/tunnel/interfacewatcher.go b/tunnel/interfacewatcher.go
index 80406874..e12e5929 100644
--- a/tunnel/interfacewatcher.go
+++ b/tunnel/interfacewatcher.go
@@ -11,7 +11,7 @@ import (
"golang.org/x/sys/windows"
- "golang.zx2c4.com/wireguard/device"
+ "golang.zx2c4.com/wireguard/conn"
"golang.zx2c4.com/wireguard/tun"
"golang.zx2c4.com/wireguard/windows/conf"
@@ -31,7 +31,7 @@ type interfaceWatcherEvent struct {
type interfaceWatcher struct {
errors chan interfaceWatcherError
- device *device.Device
+ binder conn.BindSocketToInterface
conf *conf.Config
tun *tun.NativeTun
@@ -101,7 +101,7 @@ func (iw *interfaceWatcher) setup(family winipcfg.AddressFamily) {
var err error
log.Printf("Monitoring default %s routes", ipversion)
- *changeCallbacks, err = monitorDefaultRoutes(family, iw.device, iw.conf.Interface.MTU == 0, hasDefaultRoute(family, iw.conf.Peers), iw.tun)
+ *changeCallbacks, err = monitorDefaultRoutes(family, iw.binder, iw.conf.Interface.MTU == 0, hasDefaultRoute(family, iw.conf.Peers), iw.tun)
if err != nil {
iw.errors <- interfaceWatcherError{services.ErrorBindSocketsToDefaultRoutes, err}
return
@@ -142,11 +142,11 @@ func watchInterface() (*interfaceWatcher, error) {
return iw, nil
}
-func (iw *interfaceWatcher) Configure(device *device.Device, conf *conf.Config, tun *tun.NativeTun) {
+func (iw *interfaceWatcher) Configure(binder conn.BindSocketToInterface, conf *conf.Config, tun *tun.NativeTun) {
iw.setupMutex.Lock()
defer iw.setupMutex.Unlock()
- iw.device, iw.conf, iw.tun = device, conf, tun
+ iw.binder, iw.conf, iw.tun = binder, conf, tun
for _, event := range iw.storedEvents {
if event.luid == winipcfg.LUID(iw.tun.LUID()) {
iw.setup(event.family)
diff --git a/tunnel/service.go b/tunnel/service.go
index 36825665..63cd243f 100644
--- a/tunnel/service.go
+++ b/tunnel/service.go
@@ -17,6 +17,7 @@ import (
"golang.org/x/sys/windows"
"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/mgr"
+ "golang.zx2c4.com/wireguard/conn"
"golang.zx2c4.com/wireguard/device"
"golang.zx2c4.com/wireguard/ipc"
"golang.zx2c4.com/wireguard/tun"
@@ -195,7 +196,8 @@ func (service *tunnelService) Execute(args []string, r <-chan svc.ChangeRequest,
}
log.Println("Creating interface instance")
- dev = device.NewDevice(wintun, &device.Logger{log.Printf, log.Printf})
+ bind := conn.NewDefaultBind()
+ dev = device.NewDevice(wintun, bind, &device.Logger{log.Printf, log.Printf})
log.Println("Setting interface configuration")
uapi, err = ipc.UAPIListen(config.Name)
@@ -212,7 +214,7 @@ func (service *tunnelService) Execute(args []string, r <-chan svc.ChangeRequest,
log.Println("Bringing peers up")
dev.Up()
- watcher.Configure(dev, config, nativeTun)
+ watcher.Configure(bind.(conn.BindSocketToInterface), config, nativeTun)
log.Println("Listening for UAPI requests")
go func() {