add the ability to remove routes associated with domain

This commit is contained in:
Kevin Liang 2024-03-19 20:45:06 +00:00
parent 26fba734a7
commit db01cc62e0
3 changed files with 21 additions and 2 deletions

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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
}