wgengine/netstack: standardize var names in UpdateNetstackIPs

Updates #cleanup

Signed-off-by: Maisem Ali <maisem@tailscale.com>
pull/10060/head
Maisem Ali 8 months ago committed by Maisem Ali
parent eaf8aa63fc
commit d0f2c0664b

@ -333,7 +333,7 @@ func (ns *Impl) UpdateNetstackIPs(nm *netmap.NetworkMap) {
ns.atomicIsLocalIPFunc.Store(tsaddr.FalseContainsIPFunc()) ns.atomicIsLocalIPFunc.Store(tsaddr.FalseContainsIPFunc())
} }
oldIPs := make(map[netip.Prefix]bool) oldPfx := make(map[netip.Prefix]bool)
for _, protocolAddr := range ns.ipstack.AllAddresses()[nicID] { for _, protocolAddr := range ns.ipstack.AllAddresses()[nicID] {
ap := protocolAddr.AddressWithPrefix ap := protocolAddr.AddressWithPrefix
ip := netaddrIPFromNetstackIP(ap.Address) ip := netaddrIPFromNetstackIP(ap.Address)
@ -343,71 +343,77 @@ func (ns *Impl) UpdateNetstackIPs(nm *netmap.NetworkMap) {
// ours to delete. // ours to delete.
continue continue
} }
oldIPs[netip.PrefixFrom(ip, ap.PrefixLen)] = true p := netip.PrefixFrom(ip, ap.PrefixLen)
oldPfx[p] = true
} }
newIPs := make(map[netip.Prefix]bool) newPfx := make(map[netip.Prefix]bool)
if selfNode.Valid() { if selfNode.Valid() {
for i := range selfNode.Addresses().LenIter() { for i := range selfNode.Addresses().LenIter() {
ipp := selfNode.Addresses().At(i) p := selfNode.Addresses().At(i)
newIPs[ipp] = true newPfx[p] = true
} }
if ns.ProcessSubnets { if ns.ProcessSubnets {
for i := range selfNode.AllowedIPs().LenIter() { for i := range selfNode.AllowedIPs().LenIter() {
ipp := selfNode.AllowedIPs().At(i) p := selfNode.AllowedIPs().At(i)
newIPs[ipp] = true newPfx[p] = true
} }
} }
} }
ipsToBeAdded := make(map[netip.Prefix]bool) pfxToAdd := make(map[netip.Prefix]bool)
for ipp := range newIPs { for p := range newPfx {
if !oldIPs[ipp] { if !oldPfx[p] {
ipsToBeAdded[ipp] = true pfxToAdd[p] = true
} }
} }
ipsToBeRemoved := make(map[netip.Prefix]bool) pfxToRemove := make(map[netip.Prefix]bool)
for ip := range oldIPs { for p := range oldPfx {
if !newIPs[ip] { if !newPfx[p] {
ipsToBeRemoved[ip] = true pfxToRemove[p] = true
} }
} }
ns.mu.Lock() ns.mu.Lock()
for ip := range ns.connsOpenBySubnetIP { for ip := range ns.connsOpenBySubnetIP {
delete(ipsToBeRemoved, netip.PrefixFrom(ip, ip.BitLen())) // TODO(maisem): this looks like a bug, remove or document. It seems as
// though we might end up either leaking the address on the netstack
// NIC, or where we do accounting for connsOpenBySubnetIP from 1 to 0,
// we might end up removing the address from the netstack NIC that was
// still being advertised.
delete(pfxToRemove, netip.PrefixFrom(ip, ip.BitLen()))
} }
ns.mu.Unlock() ns.mu.Unlock()
for ipp := range ipsToBeRemoved { for p := range pfxToRemove {
err := ns.ipstack.RemoveAddress(nicID, tcpip.AddrFromSlice(ipp.Addr().AsSlice())) err := ns.ipstack.RemoveAddress(nicID, tcpip.AddrFromSlice(p.Addr().AsSlice()))
if err != nil { if err != nil {
ns.logf("netstack: could not deregister IP %s: %v", ipp, err) ns.logf("netstack: could not deregister IP %s: %v", p, err)
} else { } else {
ns.logf("[v2] netstack: deregistered IP %s", ipp) ns.logf("[v2] netstack: deregistered IP %s", p)
} }
} }
for ipp := range ipsToBeAdded { for p := range pfxToAdd {
if !ipp.IsValid() { if !p.IsValid() {
ns.logf("netstack: [unexpected] skipping invalid IP (%v/%v)", ipp.Addr(), ipp.Bits()) ns.logf("netstack: [unexpected] skipping invalid IP (%v/%v)", p.Addr(), p.Bits())
continue continue
} }
pa := tcpip.ProtocolAddress{ tcpAddr := tcpip.ProtocolAddress{
AddressWithPrefix: ipPrefixToAddressWithPrefix(ipp), AddressWithPrefix: ipPrefixToAddressWithPrefix(p),
} }
if ipp.Addr().Is6() { if p.Addr().Is6() {
pa.Protocol = ipv6.ProtocolNumber tcpAddr.Protocol = ipv6.ProtocolNumber
} else { } else {
pa.Protocol = ipv4.ProtocolNumber tcpAddr.Protocol = ipv4.ProtocolNumber
} }
var tcpErr tcpip.Error // not error var tcpErr tcpip.Error // not error
tcpErr = ns.ipstack.AddProtocolAddress(nicID, pa, stack.AddressProperties{ tcpErr = ns.ipstack.AddProtocolAddress(nicID, tcpAddr, stack.AddressProperties{
PEB: stack.CanBePrimaryEndpoint, // zero value default PEB: stack.CanBePrimaryEndpoint, // zero value default
ConfigType: stack.AddressConfigStatic, // zero value default ConfigType: stack.AddressConfigStatic, // zero value default
}) })
if tcpErr != nil { if tcpErr != nil {
ns.logf("netstack: could not register IP %s: %v", ipp, tcpErr) ns.logf("netstack: could not register IP %s: %v", p, tcpErr)
} else { } else {
ns.logf("[v2] netstack: registered IP %s", ipp) ns.logf("[v2] netstack: registered IP %s", p)
} }
} }
} }

Loading…
Cancel
Save