Status page: what moved, what is missing, and a dark room
The attention strip's names lead to the peer's row, which lights up for a moment. The IPv4 and IPv6 sessions of one neighbour (NAME-v4, NAME-v6) are listed together, joined down the side, the name said once in full. A route count that moved by more than 2% between refreshes carries ▲ or ▼ for two minutes; a row whose state or count changed while the tab was in the background carries ● until it is clicked. A compact mode drops the next hop and session columns, and is remembered by the browser. Colours are variables, with a second set for prefers-color-scheme: dark. A new per-peer `expected_routes` says about how many routes a peer sends when all is well. The daemon only passes it to the API; the page lists an established peer with under half of it as needing attention, a minute after the session came up, with the expected count beside the actual one. An established session with next to no routes looked, until now, exactly like one that was fine. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
7b6547d3c9
commit
277b973f1a
11 files changed
+305
-57
No files matched your search
@@ -233,6 +233,35 @@ message with the subcode Administrative Shutdown to every neighbor. If the
|
||||
`kernel` statement is configured, it then removes its routes from the
|
||||
kernel. See [Kernel Route Installation](@/docs/guides/kernel.md).
|
||||
|
||||
## Expected Route Counts
|
||||
|
||||
An established session with no routes, or with a small fraction of the
|
||||
routes that the neighbor normally advertises, indicates a problem that the
|
||||
session state does not show: a filter on the neighbor's side, an import
|
||||
policy that rejects everything, or a neighbor that has not finished
|
||||
sending its table. The `expected_routes` statement specifies the
|
||||
approximate number of routes that the neighbor advertises in normal
|
||||
operation:
|
||||
|
||||
```textproto
|
||||
peers {
|
||||
name: "transit-a"
|
||||
endpoint { address: "192.0.2.1" }
|
||||
remote_asn: 64496
|
||||
role: PROVIDER
|
||||
expected_routes: 1000000
|
||||
import { max_prefixes: 1200000 }
|
||||
}
|
||||
```
|
||||
|
||||
The status page compares the number of routes accepted from the neighbor
|
||||
with this value. An established session with fewer than half the expected
|
||||
routes is listed under **Needing attention**, with the expected number
|
||||
beside the actual one. The comparison starts one minute after the session
|
||||
is established, so that a neighbor that is still sending its table is not
|
||||
reported. The value does not affect route processing; `max_prefixes` is
|
||||
the limit that Ferrix enforces.
|
||||
|
||||
## Verifying BGP Sessions
|
||||
|
||||
To verify the state of each neighbor, use one of the following:
|
||||
|
||||
@@ -31,7 +31,7 @@ neighbors that are restarting; the kernel not in step with the routing
|
||||
table, or refusing routes; and RPKI data that is missing or about to
|
||||
expire. When nothing needs attention, the line says so. A second line
|
||||
summarizes the normal state: sessions established, routes installed, and
|
||||
the RPKI state.
|
||||
the RPKI state. Each neighbor named in the line is a link to its row.
|
||||
|
||||
Below the status line, the page displays the following information:
|
||||
|
||||
@@ -39,8 +39,12 @@ Below the status line, the page displays the following information:
|
||||
- Each neighbor, with its session state, time established, next hop,
|
||||
session properties, number of accepted routes, rejected announcements,
|
||||
and held routes, and its last error. Neighbors that need attention are
|
||||
listed first; the others are grouped by role. The **problems only**
|
||||
option hides the neighbors that need no attention.
|
||||
listed first; the others are grouped by role. The IPv4 and IPv6 sessions
|
||||
of one neighbor, named `NAME-v4` and `NAME-v6`, are listed together and
|
||||
joined by a bar. The **problems only** option hides the neighbors that
|
||||
need no attention; the **compact** option removes the next hop and
|
||||
session columns, for a small or distant screen, and is remembered by the
|
||||
browser.
|
||||
- RPKI validation: the cache, the RTR version, and the age of the data.
|
||||
- The originated routes.
|
||||
- Kernel route installation: the number of installed routes, the number of
|
||||
@@ -60,7 +64,14 @@ action, such as a session that is down; amber indicates a degraded state,
|
||||
such as held or stale routes; green indicates a function that is operating
|
||||
normally, such as the RPKI cache being synchronized; gray indicates an
|
||||
inactive or expected state, such as a passive neighbor waiting for a
|
||||
connection. Normal values are displayed in black.
|
||||
connection. Normal values are displayed in black. When the operating
|
||||
system or browser requests a dark color scheme, the page uses the same
|
||||
colors on a dark background.
|
||||
|
||||
An established neighbor whose route count is below half of its
|
||||
`expected_routes` value is listed under **Needing attention**, with the
|
||||
expected count beside the actual one. See [Expected Route
|
||||
Counts](@/docs/guides/peers.md#expected-route-counts).
|
||||
|
||||
Properties that repeat on many rows are displayed as glyphs. Table 2 lists
|
||||
them. Point to a glyph to display its meaning.
|
||||
@@ -77,6 +88,8 @@ them. Point to a glyph to display its meaning.
|
||||
| `×N` | After an AS number in an AS path: the AS appears N times in a row (prepending). |
|
||||
| `OTC`, `AA`, `AGG`, `AS4`, `OID`, `CL`, `EXT` | Path attributes without a column of their own: Only to Customer, ATOMIC_AGGREGATE, AGGREGATOR, AS4_PATH, ORIGINATOR_ID, CLUSTER_LIST, and extended communities. |
|
||||
| `✓`, `✗`, `–` | RPKI or ASPA validation state: valid, invalid, or not found. |
|
||||
| `▲`, `▼` | The neighbor's route count rose or fell by more than 2% between the last two refreshes. Displayed for two minutes. |
|
||||
| `●` | The row changed while the browser tab was in the background: the session state changed, or the route count moved by more than 2%. Click the row to clear the mark. |
|
||||
|
||||
An AS path or a list of communities that runs to more than a few lines is
|
||||
displayed shortened, with a **more** control. Click the control, or
|
||||
|
||||
@@ -77,6 +77,7 @@ Statements for a BGP neighbor.
|
||||
| `role` <span class="type">[Role](#role)</span> | None | Specifies the BGP role of the neighbor (RFC 9234). Not permitted for IBGP neighbors. Required for every EBGP neighbor if any `export` statement enables `learned_routes`. |
|
||||
| `require_role` <span class="type">bool</span> | `false` | Rejects the session if the neighbor does not advertise a BGP role. Requires `role`. |
|
||||
| `passive` <span class="type">bool</span> | `false` | Prevents Ferrix from initiating connections to the neighbor. Ferrix accepts connections from the address of `endpoint`; the port of `endpoint` is not used. See [Passive Neighbors](@/docs/guides/peers.md#passive-neighbors). |
|
||||
| `expected_routes` <span class="type">uint32</span> | 0 | Specifies the approximate number of routes that the neighbor advertises in normal operation. The status page marks an established session with fewer than half this number of routes as needing attention. The value does not affect route processing. 0 disables the comparison. See [Expected Route Counts](@/docs/guides/peers.md#expected-route-counts). |
|
||||
| `export` <span class="type">[ExportPolicy](#exportpolicy)</span> | Top-level `export` | Specifies the export policy for the neighbor. Replaces the top-level `export` statement. |
|
||||
| `graceful_restart` <span class="type">[GracefulRestart](#gracefulrestart)</span> | Top-level `graceful_restart` | Specifies graceful restart for the neighbor. Each statement that is set replaces the corresponding top-level statement. |
|
||||
| `route_reflector_client` <span class="type">bool</span> | `false` | Makes the IBGP neighbor a route reflector client: Ferrix advertises to it the routes learned from other IBGP neighbors, and advertises its routes to them. Permitted only for IBGP neighbors. See [Route Reflection](@/docs/guides/passing-routes-on.md#route-reflection). |
|
||||
|
||||
@@ -62,6 +62,7 @@ neighbor:
|
||||
"routes": 1,
|
||||
"rejected_routes": 1,
|
||||
"held_routes": 0,
|
||||
"expected_routes": null,
|
||||
"role": null,
|
||||
"role_confirmed": null,
|
||||
"last_error": null,
|
||||
@@ -84,6 +85,7 @@ neighbor:
|
||||
| `routes` | Number of the neighbor's routes in the routing table. |
|
||||
| `rejected_routes` | Number of the neighbor's routes rejected by its import policy. |
|
||||
| `held_routes` | Number of held routes: routes rejected for a reason that can change without a new UPDATE, such as RPKI validity or next hop resolution. |
|
||||
| `expected_routes` | The `expected_routes` value from the configuration, or `null` if it is not set. |
|
||||
| `role_confirmed` | Whether the neighbor advertised a BGP role that matches the configured role. |
|
||||
| `retry_at_unix` | For a neighbor without a session, the time of the next connection attempt. |
|
||||
| `graceful_restart` | Graceful restart, if both neighbors advertised it: the restart time of the neighbor, whether the N bit is in use (RFC 8538), the address families whose routes are retained, and those for which the neighbor preserved its forwarding state. |
|
||||
|
||||
Reference in new issue
Block a user