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

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

View File

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

View File

@@ -619,7 +619,7 @@ func seedFromStatus(a *anonymize.Anonymizer, status *peer.FullStatus) {
}
for route := range status.LocalPeerState.Routes {
a.AnonymizeRoute(route)
a.AnonymizeRoute(route.Route)
}
for _, nsGroup := range status.NSGroupStates {

View File

@@ -11,7 +11,6 @@ import (
"time"
"github.com/cenkalti/backoff/v4"
"golang.org/x/exp/maps"
"google.golang.org/protobuf/types/known/durationpb"
log "github.com/sirupsen/logrus"
@@ -803,13 +802,19 @@ func toProtoFullStatus(fullStatus peer.FullStatus) *proto.FullStatus {
pbFullStatus.SignalState.Error = err.Error()
}
localState := fullStatus.LocalPeerState.Clone()
var routesSlice []string
for route := range localState.Routes {
routesSlice = append(routesSlice, route.Route)
}
pbFullStatus.LocalPeerState.IP = fullStatus.LocalPeerState.IP
pbFullStatus.LocalPeerState.PubKey = fullStatus.LocalPeerState.PubKey
pbFullStatus.LocalPeerState.KernelInterface = fullStatus.LocalPeerState.KernelInterface
pbFullStatus.LocalPeerState.Fqdn = fullStatus.LocalPeerState.FQDN
pbFullStatus.LocalPeerState.RosenpassPermissive = fullStatus.RosenpassState.Permissive
pbFullStatus.LocalPeerState.RosenpassEnabled = fullStatus.RosenpassState.Enabled
pbFullStatus.LocalPeerState.Networks = maps.Keys(fullStatus.LocalPeerState.Routes)
pbFullStatus.LocalPeerState.Networks = routesSlice
pbFullStatus.NumberOfForwardingRules = int32(fullStatus.NumOfForwardingRules)
for _, peerState := range fullStatus.Peers {