From 1d87c38aa7897cc62a0f76234d6a6834456105cd Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 3 Nov 2021 17:16:47 +0100 Subject: tunnel: add routes even when no corresponding address Apparently this works now, but it didn't used to. Reported-by: Christoph Loesch Signed-off-by: Jason A. Donenfeld --- tunnel/addressconfig.go | 19 +++---------------- 1 file 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 -- cgit v1.2.3-59-g8ed1b