Sam b480615ca2 BMP port 1790 everywhere: parameterize the published collector port (finding 12)
Decision landed: routers target 1790 (IANA BMP port); the collector keeps
listening on 5000 in-container. One .env variable now drives every hop:

- compose publishes ${ROUTER_FACING_PORT:-1790}:5000 (was hardcoded 5000:5000)
- gobgpd.conf.tmpl (+ evpn) gains __BMP_PORT__; setup.sh renders it from
  ROUTER_FACING_PORT -- gobgp is host-networked, so it must chase the
  published port or the full-table feeder silently breaks
- deploy.sh + scripts/wsl-portproxy.ps1: the WSL side now publishes the
  router-facing port itself, so the portproxy forwards the same port
  end-to-end instead of down-mapping to 5000
- cml/proxmox_bmp_config.py reads ROUTER_FACING_IP/PORT from .env (HOST_IP
  fallback for pre-key .envs); xrd-node-definition.yaml baked port -> 1790
- .env.example documents ROUTER_FACING_IP/PORT; docs updated, finding 12
  closed on the repo side (routers still on 5000 need a config re-apply)

Verified live: collector republished 0.0.0.0:1790->5000, gobgp BMP session
Up to HOST_IP:1790 with the RIB dump flowing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 16:33:52 -07:00
..

gobgp-evpn — modular EVPN test-route injector

A profile-gated, non-production GoBGP instance for exercising the EVPN ingestion pipeline (roadmap E5). The CML IOS-XR lab cannot originate EVPN routes, so this container synthesises them.

What it does

gobgp-evpn runs GoBGP with no BGP peers, BMP-exporting its local RIB (route-monitoring-policy = local-rib) to the OpenBMP collector. Routes injected with inject-evpn.sh are parsed by the collector and published to the openbmp.parsed.evpn Kafka topic, where the EVPN consumer picks them up and writes the evpn_rib table.

Usage

# start the injector (not started by a normal `docker compose up`)
docker compose --profile evpn-test up -d gobgp-evpn

# push synthetic type-2 / type-3 / type-5 EVPN routes
bash gobgp-evpn/inject-evpn.sh

# inspect what GoBGP holds
docker exec obmp-gobgp-evpn gobgp global rib -a evpn

# stop it when done testing
docker compose --profile evpn-test stop gobgp-evpn

Notes

  • Local AS 65010, router-id 10.40.40.251 — distinct from the production gobgp global-table feed (AS 65001).
  • It is not part of the default stack: the evpn-test Compose profile keeps it out of production and lets it be started/stopped on demand.

Collector type-5 limitation

The OpenBMP collector 2.2.3 parses EVPN type-2 (MAC/IP) and type-3 (inclusive multicast) cleanly, but mis-decodes type-5 (IP-prefix): the IP prefix bleeds into the RD field on the openbmp.parsed.evpn topic (observed garbage RDs such as 6154:3523870730). inject-evpn.sh therefore injects only type-2 and type-3. Full type-5 support needs a newer collector or the GoBMP path — see docs/ROADMAP.md Track E (E5).