aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tunnel/addressconfig.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-11-03 17:16:47 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2021-11-06 14:36:57 +0100
commit1d87c38aa7897cc62a0f76234d6a6834456105cd (patch)
tree699ba00efb08cf47f9dbf394390abef8d2470a09 /tunnel/addressconfig.go
parentwinipcfg: handle zones and make things use it (diff)
downloadwireguard-windows-1d87c38aa7897cc62a0f76234d6a6834456105cd.tar.xz
wireguard-windows-1d87c38aa7897cc62a0f76234d6a6834456105cd.zip
tunnel: add routes even when no corresponding address
Apparently this works now, but it didn't used to. Reported-by: Christoph Loesch <wireguard-mail@chil.at> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r--tunnel/addressconfig.go19
1 files changed, 3 insertions, 16 deletions
diff --git a/tunnel/addressconfig.go b/tunnel/addressconfig.go
index 3068fdbb..5248ef8e 100644
--- a/tunnel/addressconfig.go
+++ b/tunnel/addressconfig.go
@@ -62,24 +62,11 @@ startOver:
estimatedRouteCount += len(peer.AllowedIPs)
}
routes := make(map[winipcfg.RouteData]bool, estimatedRouteCount)
- addresses := make([]netip.Prefix, len(conf.Interface.Addresses))
- var haveV4Address, haveV6Address bool
- for i, addr := range conf.Interface.Addresses {
- addresses[i] = addr
- if addr.Addr().Is4() {
- haveV4Address = true
- } else if addr.Addr().Is6() {
- haveV6Address = true
- }
- }
foundDefault4 := false
foundDefault6 := false
for _, peer := range conf.Peers {
for _, allowedip := range peer.AllowedIPs {
- if (allowedip.Addr().Is4() && !haveV4Address) || (allowedip.Addr().Is6() && !haveV6Address) {
- continue
- }
route := winipcfg.RouteData{
Destination: allowedip.Masked(),
Metric: 0,
@@ -114,10 +101,10 @@ startOver:
}
}
- err = luid.SetIPAddressesForFamily(family, addresses)
+ err = luid.SetIPAddressesForFamily(family, conf.Interface.Addresses)
if err == windows.ERROR_OBJECT_ALREADY_EXISTS {
- cleanupAddressesOnDisconnectedInterfaces(family, addresses)
- err = luid.SetIPAddressesForFamily(family, addresses)
+ cleanupAddressesOnDisconnectedInterfaces(family, conf.Interface.Addresses)
+ err = luid.SetIPAddressesForFamily(family, conf.Interface.Addresses)
}
if err == windows.ERROR_NOT_FOUND && retryOnFailure {
goto startOver