Keep the path attributes of rejected routes, and show them
A rejected route was recorded with its prefix, reason and AS path, which is not enough to tell why a neighbor sent it: whether a /32 is a blackhole request, which communities a leaked route carries, which network marked it Only to Customer. Each recorded rejection now keeps the attributes of the UPDATE it came in, without the NLRI of MP_REACH_NLRI and MP_UNREACH_NLRI, and its next hop. The attributes are copied once per UPDATE, only when a route of it is rejected, and shared by its rejected routes. A route rejected later, when the RPKI data changes, has the attributes it was stored with. /api/routes/rejected gives them as `summary` and `attributes`, as for received routes, and the status page shows them under "show" in each row of the refused routes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e1d819d629
commit
bd674002a2
7 files changed
+166
-29
No files matched your search
@@ -250,6 +250,20 @@ async fn test_refused_routes_can_be_seen_and_counted() -> Result<()> {
|
||||
row("10.0.0.0/8", "bogon prefix", "[3333]"),
|
||||
]
|
||||
);
|
||||
// And with all its attributes, as for a route that was taken, to see
|
||||
// what came along with it.
|
||||
let latest = &record["recent"][0];
|
||||
assert_eq!(latest["summary"]["next_hop"], "192.0.2.1");
|
||||
assert_eq!(latest["summary"]["origin"], "IGP");
|
||||
assert_eq!(
|
||||
latest["summary"]["as_path"],
|
||||
serde_json::json!([3333, 2121])
|
||||
);
|
||||
assert_eq!(
|
||||
latest["attributes"].as_array().map(Vec::len),
|
||||
Some(3),
|
||||
"ORIGIN, AS_PATH and NEXT_HOP: {latest}"
|
||||
);
|
||||
// Asked for by peer, by name or by address.
|
||||
for peer in ["refused-demo", "127.0.0.1"] {
|
||||
let one: Value = get(&format!("/api/routes/rejected?peer={peer}"))
|
||||
|
||||
Reference in new issue
Block a user