Error recovery fixes and routing error rate limiting

- PathBroken handler: convert to async, trigger re-discovery via
  maybe_initiate_lookup(), reset COORDS_PRESENT warmup counter
  (was a stub that only invalidated coord_cache)

- CoordsRequired recovery timing: reset warmup counter in
  handle_lookup_response() when discovery completes for an
  established session, so COORDS_PRESENT packets fire after
  fresh coords are available (not just on CoordsRequired receipt)

- Routing error rate limiting: add RoutingErrorRateLimiter
  (100ms per-destination, matching ICMP PTB pattern) to gate
  send_routing_error() at transit nodes

- Remove root refresh dead code: the 1800s periodic root
  re-announcement in check_tree_state() only propagated to
  depth 1 (sequence-only changes don't cascade). Root loss
  detection relies on link failure propagation which works
  correctly.
This commit is contained in:
Johnathan Corgan
2026-02-17 00:00:04 +00:00
parent 8ca9db7480
commit 3ca2f9500a
8 changed files with 190 additions and 50 deletions
+5 -7
View File
@@ -122,13 +122,12 @@ Controls flood-based node discovery (LookupRequest/LookupResponse).
### Spanning Tree (`node.tree.*`)
Controls tree construction, root announcement, and parent selection.
Controls tree construction and parent selection.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `node.tree.root_refresh_secs` | u64 | `1800` | Root self-announcement interval (30 minutes) |
| `node.tree.announce_min_interval_ms` | u64 | `500` | Per-peer TreeAnnounce rate limit |
| `node.tree.parent_switch_threshold` | usize | `1` | Min depth improvement required to switch parents |
| Parameter | Type | Default | Description |
|----------------------------------------|-------|---------|--------------------------------------------------|
| `node.tree.announce_min_interval_ms` | u64 | `500` | Per-peer TreeAnnounce rate limit |
| `node.tree.parent_switch_threshold` | usize | `1` | Min depth improvement required to switch parents |
### Bloom Filter (`node.bloom.*`)
@@ -293,7 +292,6 @@ node:
timeout_secs: 10
recent_expiry_secs: 10
tree:
root_refresh_secs: 1800
announce_min_interval_ms: 500
parent_switch_threshold: 1
bloom: