From 4db1ea47293881e2f469ff75ccd91d062604c841 Mon Sep 17 00:00:00 2001 From: Kevin Liang Date: Wed, 20 Mar 2024 17:08:21 +0000 Subject: [PATCH] make routes from corp presisting and update with the list of route change on corp --- appc/appconnector.go | 19 ++++++++++++++++--- client/tailscale/localclient.go | 2 +- ipn/ipnlocal/local.go | 3 ++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/appc/appconnector.go b/appc/appconnector.go index dcc56d989..0b7fba2de 100644 --- a/appc/appconnector.go +++ b/appc/appconnector.go @@ -11,7 +11,6 @@ package appc import ( "context" - "fmt" "net/netip" "slices" "strings" @@ -168,12 +167,26 @@ func (e *AppConnector) updateRoutes(routes []netip.Prefix) { return } + routeInfo := e.routeAdvertiser.ReadRouteInfoFromStore() + oldCorp := routeInfo.Corp + var toRemove []netip.Prefix + for _, ipp := range oldCorp { + if slices.Contains(routes, ipp) { + continue + } + toRemove = append(toRemove, ipp) + } + if err := e.routeAdvertiser.UnadvertiseRoute(toRemove...); err != nil { + e.logf("failed to unadvertise old routes: %v: %v", routes, err) + } + routeInfo.Corp = routes + if err := e.routeAdvertiser.AdvertiseRoute(routes...); err != nil { e.logf("failed to advertise routes: %v: %v", routes, err) return } - var toRemove []netip.Prefix + toRemove = toRemove[:0] nextRoute: for _, r := range routes { @@ -193,6 +206,7 @@ nextRoute: } e.controlRoutes = routes + e.routeAdvertiser.UpdateRoutesInfoToStore(routeInfo) } // Domains returns the currently configured domain list. @@ -343,7 +357,6 @@ func (e *AppConnector) ObserveDNSResponse(res []byte) { routeInfo.UpdateRoutesInDiscoveredForDomain(domain, routesToUpdate) e.routeAdvertiser.UpdateRoutesInfoToStore(routeInfo) - fmt.Println("Appc DNS lookup", routeInfo) e.scheduleAdvertisement(domain, toAdvertise...) } } diff --git a/client/tailscale/localclient.go b/client/tailscale/localclient.go index 08bb7e58a..c93490c39 100644 --- a/client/tailscale/localclient.go +++ b/client/tailscale/localclient.go @@ -727,7 +727,7 @@ func (lc *LocalClient) EditPrefs(ctx context.Context, mp *ipn.MaskedPrefs) (*ipn if err != nil { return nil, err } - fmt.Println(decodeJSON[*ipn.Prefs](body)) + fmt.Println(decodeJSON[*ipn.Prefs](body)) // Kevin debug return decodeJSON[*ipn.Prefs](body) } diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 8c18ec054..8a73a1209 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -5988,6 +5988,7 @@ func coveredRouteRangeNoDefault(finalRoutes []netip.Prefix, ipp netip.Prefix) bo // UnadvertiseRoute implements the appc.RouteAdvertiser interface. It removes // a route advertisement if one is present in the existing routes. func (b *LocalBackend) UnadvertiseRoute(toRemove ...netip.Prefix) error { + fmt.Println("We are unadvertising routes: ", toRemove) currentRoutes := b.Prefs().AdvertiseRoutes().AsSlice() finalRoutes := currentRoutes[:0] @@ -5997,7 +5998,7 @@ func (b *LocalBackend) UnadvertiseRoute(toRemove ...netip.Prefix) error { } finalRoutes = append(finalRoutes, ipp) } - + fmt.Println("We are advertising these routes in unadvertising routes: ", finalRoutes) _, err := b.EditPrefs(&ipn.MaskedPrefs{ Prefs: ipn.Prefs{ AdvertiseRoutes: finalRoutes,