diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-11-03 17:16:47 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-11-06 14:36:57 +0100 |
commit | 1d87c38aa7897cc62a0f76234d6a6834456105cd (patch) | |
tree | 699ba00efb08cf47f9dbf394390abef8d2470a09 /tunnel/addressconfig.go | |
parent | winipcfg: handle zones and make things use it (diff) | |
download | wireguard-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.go | 19 |
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 |