mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-13 00:49:07 +02:00
Move route select/deselect handling from the daemon server into exported routemanager methods (SelectRoutes, DeselectRoutes, SelectAllRoutes, DeselectAllRoutes) so every consumer shares one implementation: v4/v6 exit-pair expansion, exit-node mutual exclusion, and selection triggering. Previously the exit-node exclusivity lived only in the daemon's SelectNetworks RPC, so the Android and iOS bindings could leave two exit nodes selected until the next network map reconciliation. Both bindings now call the shared manager methods and enforce exclusivity at toggle time, matching the desktop behavior.
152 lines
5.0 KiB
Go
152 lines
5.0 KiB
Go
package routemanager
|
|
|
|
import (
|
|
"context"
|
|
|
|
firewall "github.com/netbirdio/netbird/client/firewall/manager"
|
|
"github.com/netbirdio/netbird/client/iface"
|
|
"github.com/netbirdio/netbird/client/internal/listener"
|
|
"github.com/netbirdio/netbird/client/internal/routeselector"
|
|
"github.com/netbirdio/netbird/client/internal/statemanager"
|
|
"github.com/netbirdio/netbird/route"
|
|
)
|
|
|
|
// MockManager is the mock instance of a route manager
|
|
type MockManager struct {
|
|
ClassifyRoutesFunc func(routes []*route.Route) (map[route.ID]*route.Route, route.HAMap)
|
|
UpdateRoutesFunc func(updateSerial uint64, serverRoutes map[route.ID]*route.Route, clientRoutes route.HAMap, useNewDNSRoute bool) error
|
|
TriggerSelectionFunc func(haMap route.HAMap)
|
|
SelectRoutesFunc func(ids []route.NetID, appendRoute bool) error
|
|
DeselectRoutesFunc func(ids []route.NetID) error
|
|
GetRouteSelectorFunc func() *routeselector.RouteSelector
|
|
GetClientRoutesFunc func() route.HAMap
|
|
GetSelectedClientRoutesFunc func() route.HAMap
|
|
GetActiveClientRoutesFunc func() route.HAMap
|
|
GetClientRoutesWithNetIDFunc func() map[route.NetID][]*route.Route
|
|
StopFunc func(manager *statemanager.Manager)
|
|
}
|
|
|
|
func (m *MockManager) Init() error {
|
|
return nil
|
|
}
|
|
|
|
// InitialRouteRange mock implementation of InitialRouteRange from Manager interface
|
|
func (m *MockManager) InitialRouteRange() []string {
|
|
return nil
|
|
}
|
|
|
|
// UpdateRoutes mock implementation of UpdateRoutes from Manager interface
|
|
func (m *MockManager) UpdateRoutes(updateSerial uint64, newRoutes map[route.ID]*route.Route, clientRoutes route.HAMap, useNewDNSRoute bool) error {
|
|
if m.UpdateRoutesFunc != nil {
|
|
return m.UpdateRoutesFunc(updateSerial, newRoutes, clientRoutes, useNewDNSRoute)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ClassifyRoutes mock implementation of ClassifyRoutes from Manager interface
|
|
func (m *MockManager) ClassifyRoutes(routes []*route.Route) (map[route.ID]*route.Route, route.HAMap) {
|
|
if m.ClassifyRoutesFunc != nil {
|
|
return m.ClassifyRoutesFunc(routes)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func (m *MockManager) TriggerSelection(networks route.HAMap) {
|
|
if m.TriggerSelectionFunc != nil {
|
|
m.TriggerSelectionFunc(networks)
|
|
}
|
|
}
|
|
|
|
// SelectRoutes mock implementation of SelectRoutes from Manager interface
|
|
func (m *MockManager) SelectRoutes(ids []route.NetID, appendRoute bool) error {
|
|
if m.SelectRoutesFunc != nil {
|
|
return m.SelectRoutesFunc(ids, appendRoute)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeselectRoutes mock implementation of DeselectRoutes from Manager interface
|
|
func (m *MockManager) DeselectRoutes(ids []route.NetID) error {
|
|
if m.DeselectRoutesFunc != nil {
|
|
return m.DeselectRoutesFunc(ids)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// SelectAllRoutes mock implementation of SelectAllRoutes from Manager interface
|
|
func (m *MockManager) SelectAllRoutes() {
|
|
}
|
|
|
|
// DeselectAllRoutes mock implementation of DeselectAllRoutes from Manager interface
|
|
func (m *MockManager) DeselectAllRoutes() {
|
|
}
|
|
|
|
// GetRouteSelector mock implementation of GetRouteSelector from Manager interface
|
|
func (m *MockManager) GetRouteSelector() *routeselector.RouteSelector {
|
|
if m.GetRouteSelectorFunc != nil {
|
|
return m.GetRouteSelectorFunc()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetClientRoutes mock implementation of GetClientRoutes from the Manager interface
|
|
func (m *MockManager) GetClientRoutes() route.HAMap {
|
|
if m.GetClientRoutesFunc != nil {
|
|
return m.GetClientRoutesFunc()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetSelectedClientRoutes mock implementation of GetSelectedClientRoutes from the Manager interface
|
|
func (m *MockManager) GetSelectedClientRoutes() route.HAMap {
|
|
if m.GetSelectedClientRoutesFunc != nil {
|
|
return m.GetSelectedClientRoutesFunc()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetActiveClientRoutes mock implementation of GetActiveClientRoutes from the Manager interface
|
|
func (m *MockManager) GetActiveClientRoutes() route.HAMap {
|
|
if m.GetActiveClientRoutesFunc != nil {
|
|
return m.GetActiveClientRoutesFunc()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetClientRoutesWithNetID mock implementation of GetClientRoutesWithNetID from Manager interface
|
|
func (m *MockManager) GetClientRoutesWithNetID() map[route.NetID][]*route.Route {
|
|
if m.GetClientRoutesWithNetIDFunc != nil {
|
|
return m.GetClientRoutesWithNetIDFunc()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Start mock implementation of Start from Manager interface
|
|
func (m *MockManager) Start(ctx context.Context, iface *iface.WGIface) {
|
|
}
|
|
|
|
// SetRouteChangeListener mock implementation of SetRouteChangeListener from Manager interface
|
|
func (m *MockManager) SetRouteChangeListener(listener listener.NetworkChangeListener) {
|
|
|
|
}
|
|
|
|
func (m *MockManager) SetFirewall(firewall.Manager) error {
|
|
panic("implement me")
|
|
}
|
|
|
|
// SetDNSForwarderPort mock implementation of SetDNSForwarderPort from Manager interface
|
|
func (m *MockManager) SetDNSForwarderPort(port uint16) {
|
|
}
|
|
|
|
// ReconcilePeerAllowedIPs mock implementation of ReconcilePeerAllowedIPs from Manager interface
|
|
func (m *MockManager) ReconcilePeerAllowedIPs(peerKey string) error {
|
|
return nil
|
|
}
|
|
|
|
// Stop mock implementation of Stop from Manager interface
|
|
func (m *MockManager) Stop(stateManager *statemanager.Manager) {
|
|
if m.StopFunc != nil {
|
|
m.StopFunc(stateManager)
|
|
}
|
|
}
|