The stack side is portable; the router side had no reference material -- a
new operator standing up OBMP has no guide for what to configure on their
devices to feed it. Adds two artifacts, both vendor-neutral in intent,
IOS-XR-specific in syntax:
docs/router-integration.md
Multi-path tour of the four ingest paths (BMP, BGP-LS, gNMI,
NETCONF) with a bring-up checklist and cross-references. The BMP
section is deliberately thin -- it hands off to docs/router-bmp-config.md
for the address-selection, port-choice, and RR-scope activation
detail already covered there.
router-blueprints/iosxr/*.cfg
Copy-paste config fragments, one per ingest path plus a
role-route-reflector overlay. All values are <PLACEHOLDER>
substitutions -- no hardcoded IPs, no lab-gear names. Fragments
align to the ROUTER_FACING_IP / ROUTER_FACING_PORT convention
introduced in docs/router-bmp-config.md.
router-blueprints/README.md
Substitution legend + layout, cross-links to PORTABILITY-FINDINGS.md
finding 4 (why routers can't target HOST_IP on WSL).
Also appends the multi-path guide link to the Greenfield deploy section
in README.md so router-side integration is discoverable from the top.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
61 lines
3.2 KiB
Markdown
61 lines
3.2 KiB
Markdown
# 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-config-guide.md](../docs/router-config-guide.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](../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.
|