From db01cc62e0aea08dbaba3571fb04d71ce18a8e22 Mon Sep 17 00:00:00 2001 From: Kevin Liang Date: Tue, 19 Mar 2024 20:45:06 +0000 Subject: [PATCH] add the ability to remove routes associated with domain --- appc/appconnector.go | 17 +++++++++++++++++ ipn/ipnlocal/local.go | 2 ++ ipn/prefs.go | 4 ++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/appc/appconnector.go b/appc/appconnector.go index cb11eeafe..dcc56d989 100644 --- a/appc/appconnector.go +++ b/appc/appconnector.go @@ -111,6 +111,10 @@ func (e *AppConnector) updateDomains(domains []string) { defer e.mu.Unlock() var oldDomains map[string][]netip.Addr + var oldDiscovered map[string]ipn.DatedRoute + routeInfo := e.routeAdvertiser.ReadRouteInfoFromStore() + + oldDiscovered, routeInfo.Discovered = routeInfo.Discovered, make(map[string]ipn.DatedRoute, len(domains)) oldDomains, e.domains = e.domains, make(map[string][]netip.Addr, len(domains)) e.wildcards = e.wildcards[:0] for _, d := range domains { @@ -123,7 +127,9 @@ func (e *AppConnector) updateDomains(domains []string) { continue } e.domains[d] = oldDomains[d] + routeInfo.Discovered[d] = oldDiscovered[d] delete(oldDomains, d) + delete(oldDiscovered, d) } // Ensure that still-live wildcards addresses are preserved as well. @@ -135,6 +141,17 @@ func (e *AppConnector) updateDomains(domains []string) { } } } + + for d, dr := range oldDiscovered { + for _, wc := range e.wildcards { + if dnsname.HasSuffix(d, wc) { + routeInfo.Discovered[d] = dr + break + } + } + } + + e.routeAdvertiser.UpdateRoutesInfoToStore(routeInfo) e.logf("handling domains: %v and wildcards: %v", xmaps.Keys(e.domains), e.wildcards) } diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index b3fc22cae..8c18ec054 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -3562,6 +3562,8 @@ func (b *LocalBackend) reconfigAppConnectorLocked(nm *netmap.NetworkMap, prefs i slices.SortFunc(routes, func(i, j netip.Prefix) int { return i.Addr().Compare(j.Addr()) }) domains = slices.Compact(domains) routes = slices.Compact(routes) + fmt.Println("Connector Kevin: ", domains) + fmt.Println("Connector Kevin: ", routes) b.appConnector.UpdateDomainsAndRoutes(domains, routes) } diff --git a/ipn/prefs.go b/ipn/prefs.go index 3a8566617..8bd667121 100644 --- a/ipn/prefs.go +++ b/ipn/prefs.go @@ -962,8 +962,8 @@ type RouteInfo struct { func (r RouteInfo) UpdateRoutesInDiscoveredForDomain(domain string, addrs []netip.Prefix) { newDatedRoutes := make(DatedRoute) - _, hasKey := r.Discovered[domain] - if !hasKey { + val, hasKey := r.Discovered[domain] + if !hasKey || val == nil { r.Discovered[domain] = addAddrsToDatedRoute(newDatedRoutes, addrs) return }