-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
The message "Expected route object in RIPE matches BGP origin, but non-matching objects exist in other IRRs" is not included in the "Explanation of different messages" table.
There seem to be a few others missing, they all come from:
irrexplorer/irrexplorer/api/report.py
Lines 8 to 62 in aeb6f6b
| def enrich_prefix_summaries_with_report(prefix_summaries: List[PrefixSummary]): | |
| """ | |
| Given a list of PrefixSummary objects, enriches them with reporting info. | |
| This fills the messages attribute by calling the info/warning/danger methods. | |
| To help, PrefixSummary has quite a few properties for simpler access to data, | |
| which are extensively used. | |
| """ | |
| for s in prefix_summaries: | |
| # Detect superfluous route objects | |
| if not s.bgp_origins and s.irr_origins: | |
| s.info("Route objects exist, but prefix not seen in DFZ") | |
| if not s.bgp_origins and s.rpki_origins and s.rpki_origins != {0}: | |
| s.info("RPKI ROA exists, but prefix not seen in DFZ") | |
| # Detect route objects in unexpected IRR | |
| if s.irr_expected_rir and s.irr_routes and not s.irr_routes_expected_rir: | |
| s.warning( | |
| f"Expected route object in {s.irr_expected_rir}, but only found in other IRRs" | |
| ) | |
| # Check route objects against origins | |
| if s.bgp_origins - s.irr_origins: | |
| if s.bgp_origins.intersection(s.irr_origins): | |
| s.danger("No route objects for some DFZ origins") | |
| else: | |
| s.danger("No route objects match DFZ origin") | |
| elif s.irr_routes_expected_rir and s.bgp_origins - s.irr_origins_expected_rir: | |
| s.danger( | |
| f"Expected route object in {s.irr_expected_rir}, but BGP origin does not " | |
| f"match. Objects from other IRRs do match BGP origin" | |
| ) | |
| elif s.irr_origins_not_expected_rir and s.bgp_origins - s.irr_origins_not_expected_rir: | |
| s.warning( | |
| f"Expected route object in {s.irr_expected_rir} matches BGP origin, " | |
| f"but non-matching objects exist in other IRRs" | |
| ) | |
| elif len(s.irr_origins) > 1 and len(s.bgp_origins) == 1: | |
| s.warning("Multiple route objects exist with different origins, but DFZ only has one") | |
| # Detect RPKI situation | |
| if s.rpki_origins and s.bgp_origins - s.rpki_origins: | |
| s.danger("RPKI origin does not match BGP origin") | |
| if any([r.rpki_status == RPKIStatus.invalid for r in s.irr_routes_all]): | |
| s.danger("RPKI-invalid route objects found") | |
| elif s.irr_routes and all( | |
| [r.rpki_status == RPKIStatus.not_found for r in s.irr_routes_all] | |
| ): | |
| s.info("No (covering) RPKI ROA found for route objects") | |
| for name, special_use_prefix in SPECIAL_USE_SPACE: | |
| if s.prefix.overlaps(special_use_prefix): | |
| s.danger(f"Overlaps with {name} special use prefix {special_use_prefix}") | |
| s.finalise_status() |
Spotted by @baknu
Metadata
Metadata
Assignees
Labels
No labels