Refactor route handling to use RouteWithResourceId for improved state management

This commit is contained in:
Hakan Sariman
2025-03-07 18:43:49 +03:00
parent de3b5c78d7
commit 54d0591833
4 changed files with 19 additions and 8 deletions
+2 -2
View File
@@ -109,7 +109,7 @@ type LocalPeerState struct {
PubKey string
KernelInterface bool
FQDN string
Routes map[string]struct{}
Routes map[RouteWithResourceId]struct{}
}
// Clone returns a copy of the LocalPeerState
@@ -372,7 +372,7 @@ func (d *Status) CheckRoutes(src, dst netip.Addr) (srcMatchedPeerIP string, dstM
// check local peer routes.
if d.localPeer.Routes != nil {
for route := range d.localPeer.Routes {
prefix, err := netip.ParsePrefix(route)
prefix, err := netip.ParsePrefix(route.Route)
if err != nil {
log.Debugf("failed to parse route %s: %v", route, err)
continue
@@ -104,7 +104,10 @@ func (m *serverRouter) removeFromServerNetwork(route *route.Route) error {
delete(m.routes, route.ID)
state := m.statusRecorder.GetLocalPeerState()
delete(state.Routes, route.Network.String())
delete(state.Routes, peer.RouteWithResourceId{
Route: route.Network.String(),
ResourceId: route.GetResourceID(),
})
m.statusRecorder.UpdateLocalPeerState(state)
return nil
@@ -133,14 +136,17 @@ func (m *serverRouter) addToServerNetwork(route *route.Route) error {
state := m.statusRecorder.GetLocalPeerState()
if state.Routes == nil {
state.Routes = map[string]struct{}{}
state.Routes = map[peer.RouteWithResourceId]struct{}{}
}
routeStr := route.Network.String()
if route.IsDynamic() {
routeStr = route.Domains.SafeString()
}
state.Routes[routeStr] = struct{}{}
state.Routes[peer.RouteWithResourceId{
Route: routeStr,
ResourceId: route.GetResourceID(),
}] = struct{}{}
m.statusRecorder.UpdateLocalPeerState(state)