aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tunnel/addressconfig.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-10-25 11:23:17 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2021-10-26 10:53:05 +0200
commit074ed9a4a99f4ceceda293cbd7431faeb0bb5600 (patch)
tree518d36ff2bcc4e58070f6f3be6fdcfdbda097649 /tunnel/addressconfig.go
parenttunnel: convert ips to string for hash table (diff)
downloadwireguard-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.go15
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)
}