diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-10-25 11:23:17 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-10-26 10:53:05 +0200 |
commit | 074ed9a4a99f4ceceda293cbd7431faeb0bb5600 (patch) | |
tree | 518d36ff2bcc4e58070f6f3be6fdcfdbda097649 /tunnel/addressconfig.go | |
parent | tunnel: convert ips to string for hash table (diff) | |
download | wireguard-windows-074ed9a4a99f4ceceda293cbd7431faeb0bb5600.tar.xz wireguard-windows-074ed9a4a99f4ceceda293cbd7431faeb0bb5600.zip |
tunnel: cleanup IPs when masks don't match
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to '')
-rw-r--r-- | tunnel/addressconfig.go | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/tunnel/addressconfig.go b/tunnel/addressconfig.go index 575185e0..86b82097 100644 --- a/tunnel/addressconfig.go +++ b/tunnel/addressconfig.go @@ -23,18 +23,15 @@ func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, add if len(addresses) == 0 { return } - addrToStr := func(addr *net.IPNet) string { - ip := addr.IP + addrToStr := func(ip *net.IP) string { if ip4 := ip.To4(); ip4 != nil { - ip = ip4 + return string(ip4) } - ones, _ := addr.Mask.Size() - ip = append(ip, byte(ones)) - return string(ip) + return string(*ip) } addrHash := make(map[string]bool, len(addresses)) for i := range addresses { - addrHash[addrToStr(&addresses[i])] = true + addrHash[addrToStr(&addresses[i].IP)] = true } interfaces, err := winipcfg.GetAdaptersAddresses(family, winipcfg.GAAFlagDefault) if err != nil { @@ -46,8 +43,8 @@ func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, add } for address := iface.FirstUnicastAddress; address != nil; address = address.Next { ip := address.Address.IP() - ipnet := net.IPNet{IP: ip, Mask: net.CIDRMask(int(address.OnLinkPrefixLength), 8*len(ip))} - if addrHash[addrToStr(&ipnet)] { + if addrHash[addrToStr(&ip)] { + ipnet := net.IPNet{IP: ip, Mask: net.CIDRMask(int(address.OnLinkPrefixLength), 8*len(ip))} log.Printf("Cleaning up stale address %s from interface ā%sā", ipnet.String(), iface.FriendlyName()) iface.LUID.DeleteIPAddress(ipnet) } |