mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-18 08:16:39 +00:00
Compare commits
3 Commits
zitadel-id
...
fix/lower-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55e351d145 | ||
|
|
f2bcccd64f | ||
|
|
c309917077 |
@@ -33,12 +33,8 @@ func checkChange(ctx context.Context, nexthopv4, nexthopv6 systemops.Nexthop, ca
|
|||||||
return fmt.Errorf("get neighbors: %w", err)
|
return fmt.Errorf("get neighbors: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if n, ok := initialNeighbors[nexthopv4.IP]; ok {
|
neighborv4 = assignNeighbor(nexthopv4, initialNeighbors)
|
||||||
neighborv4 = &n
|
neighborv6 = assignNeighbor(nexthopv6, initialNeighbors)
|
||||||
}
|
|
||||||
if n, ok := initialNeighbors[nexthopv6.IP]; ok {
|
|
||||||
neighborv6 = &n
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
log.Debugf("Network monitor: initial IPv4 neighbor: %v, IPv6 neighbor: %v", neighborv4, neighborv6)
|
log.Debugf("Network monitor: initial IPv4 neighbor: %v, IPv6 neighbor: %v", neighborv4, neighborv6)
|
||||||
|
|
||||||
@@ -58,6 +54,16 @@ func checkChange(ctx context.Context, nexthopv4, nexthopv6 systemops.Nexthop, ca
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func assignNeighbor(nexthop systemops.Nexthop, initialNeighbors map[netip.Addr]systemops.Neighbor) *systemops.Neighbor {
|
||||||
|
if n, ok := initialNeighbors[nexthop.IP]; ok &&
|
||||||
|
n.State != unreachable &&
|
||||||
|
n.State != incomplete &&
|
||||||
|
n.State != tbd {
|
||||||
|
return &n
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func changed(
|
func changed(
|
||||||
nexthopv4 systemops.Nexthop,
|
nexthopv4 systemops.Nexthop,
|
||||||
neighborv4 *systemops.Neighbor,
|
neighborv4 *systemops.Neighbor,
|
||||||
@@ -127,7 +133,7 @@ func neighborChanged(nexthop systemops.Nexthop, neighbor *systemops.Neighbor, ne
|
|||||||
|
|
||||||
// TODO: consider non-local nexthops, e.g. on point-to-point interfaces
|
// TODO: consider non-local nexthops, e.g. on point-to-point interfaces
|
||||||
if n, ok := neighbors[nexthop.IP]; ok {
|
if n, ok := neighbors[nexthop.IP]; ok {
|
||||||
if n.State != reachable && n.State != permanent {
|
if n.State == unreachable || n.State == incomplete {
|
||||||
log.Infof("network monitor: neighbor %s (%s) is not reachable: %s", neighbor.IPAddress, neighbor.LinkLayerAddress, stateFromInt(n.State))
|
log.Infof("network monitor: neighbor %s (%s) is not reachable: %s", neighbor.IPAddress, neighbor.LinkLayerAddress, stateFromInt(n.State))
|
||||||
return true
|
return true
|
||||||
} else if n.InterfaceIndex != neighbor.InterfaceIndex {
|
} else if n.InterfaceIndex != neighbor.InterfaceIndex {
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ import (
|
|||||||
const (
|
const (
|
||||||
DefaultInterval = time.Minute
|
DefaultInterval = time.Minute
|
||||||
|
|
||||||
minInterval = 2 * time.Second
|
minInterval = 2 * time.Second
|
||||||
|
failureInterval = 5 * time.Second
|
||||||
|
|
||||||
addAllowedIP = "add allowed IP %s: %w"
|
addAllowedIP = "add allowed IP %s: %w"
|
||||||
)
|
)
|
||||||
@@ -160,7 +161,12 @@ func (r *Route) startResolver(ctx context.Context) {
|
|||||||
ticker := time.NewTicker(interval)
|
ticker := time.NewTicker(interval)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
|
|
||||||
r.update(ctx)
|
if err := r.update(ctx); err != nil {
|
||||||
|
log.Errorf("Failed to resolve domains for route [%v]: %v", r, err)
|
||||||
|
if interval > failureInterval {
|
||||||
|
ticker.Reset(failureInterval)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@@ -168,17 +174,28 @@ func (r *Route) startResolver(ctx context.Context) {
|
|||||||
log.Debugf("Stopping dynamic route resolver for domains [%v]", r)
|
log.Debugf("Stopping dynamic route resolver for domains [%v]", r)
|
||||||
return
|
return
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
r.update(ctx)
|
if err := r.update(ctx); err != nil {
|
||||||
|
log.Errorf("Failed to resolve domains for route [%v]: %v", r, err)
|
||||||
|
// Use a lower ticker interval if the update fails
|
||||||
|
if interval > failureInterval {
|
||||||
|
ticker.Reset(failureInterval)
|
||||||
|
}
|
||||||
|
} else if interval > failureInterval {
|
||||||
|
// Reset to the original interval if the update succeeds
|
||||||
|
ticker.Reset(interval)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Route) update(ctx context.Context) {
|
func (r *Route) update(ctx context.Context) error {
|
||||||
if resolved, err := r.resolveDomains(); err != nil {
|
if resolved, err := r.resolveDomains(); err != nil {
|
||||||
log.Errorf("Failed to resolve domains for route [%v]: %v", r, err)
|
return fmt.Errorf("resolve domains: %w", err)
|
||||||
} else if err := r.updateDynamicRoutes(ctx, resolved); err != nil {
|
} else if err := r.updateDynamicRoutes(ctx, resolved); err != nil {
|
||||||
log.Errorf("Failed to update dynamic routes for [%v]: %v", r, err)
|
return fmt.Errorf("update dynamic routes: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Route) resolveDomains() (domainMap, error) {
|
func (r *Route) resolveDomains() (domainMap, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user