From 4c22967a81e5e9c64ffee56b2fed786c7644120a Mon Sep 17 00:00:00 2001 From: Naman Sood Date: Mon, 29 Mar 2021 13:34:00 -0400 Subject: [PATCH] wgengine/netstack: reduce calls to netstack AddAddress Signed-off-by: Naman Sood --- wgengine/netstack/netstack.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wgengine/netstack/netstack.go b/wgengine/netstack/netstack.go index 360771cec..56da367fe 100644 --- a/wgengine/netstack/netstack.go +++ b/wgengine/netstack/netstack.go @@ -189,14 +189,18 @@ func (ns *Impl) updateDNS(nm *netmap.NetworkMap) { func (ns *Impl) addSubnetAddress(pn tcpip.NetworkProtocolNumber, ip netaddr.IP) { ns.mu.Lock() ns.connsOpenBySubnetIP[ip]++ + // Only register address into netstack for first concurrent connection. + if ns.connsOpenBySubnetIP[ip] == 1 { + ns.ipstack.AddAddress(nicID, pn, tcpip.Address(ip.IPAddr().IP)) + } ns.mu.Unlock() - ns.ipstack.AddAddress(nicID, pn, tcpip.Address(ip.IPAddr().IP)) } func (ns *Impl) removeSubnetAddress(ip netaddr.IP) { ns.mu.Lock() defer ns.mu.Unlock() ns.connsOpenBySubnetIP[ip]-- + // Only unregister address from netstack after last concurrent connection. if ns.connsOpenBySubnetIP[ip] == 0 { ns.ipstack.RemoveAddress(nicID, tcpip.Address(ip.IPAddr().IP)) delete(ns.connsOpenBySubnetIP, ip)