mirror of
https://github.com/netbirdio/netbird.git
synced 2024-11-30 03:54:35 +01:00
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
|
package static
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
log "github.com/sirupsen/logrus"
|
||
|
|
||
|
"github.com/netbirdio/netbird/client/internal/routemanager/refcounter"
|
||
|
"github.com/netbirdio/netbird/route"
|
||
|
)
|
||
|
|
||
|
type Route struct {
|
||
|
route *route.Route
|
||
|
routeRefCounter *refcounter.RouteRefCounter
|
||
|
allowedIPsRefcounter *refcounter.AllowedIPsRefCounter
|
||
|
}
|
||
|
|
||
|
func NewRoute(rt *route.Route, routeRefCounter *refcounter.RouteRefCounter, allowedIPsRefCounter *refcounter.AllowedIPsRefCounter) *Route {
|
||
|
return &Route{
|
||
|
route: rt,
|
||
|
routeRefCounter: routeRefCounter,
|
||
|
allowedIPsRefcounter: allowedIPsRefCounter,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Route route methods
|
||
|
func (r *Route) String() string {
|
||
|
return r.route.Network.String()
|
||
|
}
|
||
|
|
||
|
func (r *Route) AddRoute(context.Context) error {
|
||
|
_, err := r.routeRefCounter.Increment(r.route.Network, nil)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (r *Route) RemoveRoute() error {
|
||
|
_, err := r.routeRefCounter.Decrement(r.route.Network)
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (r *Route) AddAllowedIPs(peerKey string) error {
|
||
|
if ref, err := r.allowedIPsRefcounter.Increment(r.route.Network, peerKey); err != nil {
|
||
|
return fmt.Errorf("add allowed IP %s: %w", r.route.Network, err)
|
||
|
} else if ref.Count > 1 && ref.Out != peerKey {
|
||
|
log.Warnf("Prefix [%s] is already routed by peer [%s]. HA routing disabled",
|
||
|
r.route.Network,
|
||
|
ref.Out,
|
||
|
)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (r *Route) RemoveAllowedIPs() error {
|
||
|
_, err := r.allowedIPsRefcounter.Decrement(r.route.Network)
|
||
|
return err
|
||
|
}
|