Review findings from verifying the router-blueprints drop against the deployed stack: - router-blueprints/README.md linked docs/router-config-guide.md, which does not exist -- the guide is docs/router-integration.md - router-integration.md still advised --router-port 5000 for lab routers; 1790 is the standard now, the note points at re-applying via cml/proxmox_bmp_config.py instead - verify sections referenced Grafana paths that don't exist in the provisioned UI: 'Base-1001 -> Peers Table' -> Inventory / Peer Detail, and folder 'OBMP-Learning' -> OBMP-Reference - role-route-reflector.cfg: loud caveat block on next-hop-self -- it only rewrites eBGP-learned/local routes (what this lab wants); reflected iBGP routes need 'ibgp policy out enforce-modifications', so on a pure RR the line is a silent no-op - cml/xrd-node-definition.yaml BMP timers synced to the blueprint values (initial-delay 60, refresh 60/30, drop flapping-delay) per the keep-hand-config-and-automation-in-sync rule Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Router Blueprints
Vendor-native configuration fragments that describe what a router must
present for the OpenBMP Docker stack to ingest data from it. Copy, edit
the <PLACEHOLDER> values for your topology, paste.
For the walkthrough (what each ingest path does, in what order to apply, how to verify), see docs/router-integration.md.
Layout
router-blueprints/
├── README.md <- this file
└── iosxr/
├── 00-netconf.cfg <- prerequisite: enable NETCONF/SSH
├── 01-bmp-basic.cfg <- BMP session to the collector
├── 02-bgp-ls.cfg <- BGP-LS export for topology
├── 03-gnmi.cfg <- gNMI streaming telemetry
└── role-route-reflector.cfg <- add-on for RR-role routers
Number-prefixed fragments are applied in order for a fresh router
bring-up. role-*.cfg fragments are additive overlays for routers that
fill a specific role.
Substitutions
Every fragment uses <ANGLE_BRACKET> placeholders. Substitute the
following before pasting:
| Placeholder | What it is |
|---|---|
<ROUTER_FACING_IP> |
ROUTER_FACING_IP in the stack's .env — the address routers target to reach the collector. NOT HOST_IP on WSL (see docs/PORTABILITY-FINDINGS.md finding 4). |
<ROUTER_FACING_PORT> |
ROUTER_FACING_PORT in .env — collector port routers connect to (defaults to 1790, the IANA BMP port). |
<LOCAL_ASN> |
The router's own BGP AS number. |
<ROUTER_LOOPBACK> |
This router's Loopback0 address (also its BGP router-id). |
<RR_LOOPBACK_1/2> |
The two route-reflector loopbacks in this router's AS. |
<ISIS_INSTANCE> |
The router's IS-IS instance tag. |
<MGMT_INTERFACE> |
Interface whose source IP the collector should see. |
<GNMI_USER> |
GNMI_USERNAME in .env — the user Telegraf authenticates as. |
<GNMI_PASS> |
GNMI_PASSWORD in .env. |
<NETCONF_USER> |
IOSXR_NETCONF_USER in .env — user the automation logs in as. |
Vendor scope
IOS-XR only. The four ingest paths themselves (BMP, BGP-LS, gNMI,
NETCONF) are standards, so the behavior the stack expects is
vendor-neutral — see the "Extending to another vendor" section in the
guide. Only the syntax below is IOS-XR-specific; a sibling
router-blueprints/<vendor>/ tree can be added the same way once someone
has an end-to-end deployment to base it on.
Credentials
Credentials come from your stack's .env. There is no shipped default —
whatever you set for IOSXR_NETCONF_USER, IOSXR_NETCONF_PASS,
GNMI_USERNAME, and GNMI_PASSWORD is what the fragments' user creation
blocks must match. Standardize on one account per role (read-only for
gNMI, config-capable for NETCONF) rather than reusing shell logins.