From 41ec96c3acb7eadeca3e462f2b2f22d19f819df7 Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 19 May 2026 09:24:08 -0700 Subject: [PATCH] EVPN injector: drop type-5 (collector 2.2.3 mis-decodes it) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Verified against the live collector: EVPN type-2 (MAC/IP) and type-3 (inclusive multicast) parse cleanly onto openbmp.parsed.evpn, but type-5 (IP-prefix) is mis-decoded — the IP prefix corrupts the RD field. inject-evpn.sh now injects only type-2/3; the type-5 limitation is documented in the injector README and roadmap E5. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/ROADMAP.md | 10 ++++++++++ gobgp-evpn/README.md | 11 +++++++++-- gobgp-evpn/inject-evpn.sh | 8 +++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 997ec55..99fac90 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -325,6 +325,16 @@ Recommended: path 2 for fastest EVPN visibility; path 1 if a single unified OpenBMP schema outweighs the extra effort. Either way, then build EVPN dashboards (per-EVI, MAC mobility, RT scoping). +**Status / measured:** the `evpn_rib` table is in place +(`postgres/scripts/007_obmp_evpn.sql`) and a profile-gated `gobgp-evpn` +injector exercises the pipeline. Verified against the running collector +2.2.3: EVPN **type-2 (MAC/IP)** and **type-3 (inclusive multicast)** parse +cleanly onto `openbmp.parsed.evpn`; **type-5 (IP-prefix) is mis-decoded** (the +prefix corrupts the RD field). So a path-1 fork inherits a collector that +only does type-2/3 reliably — another point in favour of path 2 (GoBMP) if +type-5 matters. Next: the `obmp-evpn-consumer` for type-2/3, then the +dashboard. + ### E-scale. PostgreSQL sizing for a full table A full v4+v6 table is ~1.2M prefixes; with attributes and history this is a diff --git a/gobgp-evpn/README.md b/gobgp-evpn/README.md index ed2fa2b..0e4ef57 100644 --- a/gobgp-evpn/README.md +++ b/gobgp-evpn/README.md @@ -34,5 +34,12 @@ docker compose --profile evpn-test stop gobgp-evpn `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. -- EVPN type-5 (IP-prefix) routes require a `gw ` argument in the - GoBGP CLI — see `inject-evpn.sh`. + +## 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). diff --git a/gobgp-evpn/inject-evpn.sh b/gobgp-evpn/inject-evpn.sh index 4c07a9b..2e7c91e 100755 --- a/gobgp-evpn/inject-evpn.sh +++ b/gobgp-evpn/inject-evpn.sh @@ -23,9 +23,11 @@ echo "Injecting EVPN type-3 (inclusive multicast) routes..." "${G[@]}" multicast 10.40.40.251 etag 100 rd 65010:100 rt 65010:100 "${G[@]}" multicast 10.40.40.251 etag 200 rd 65010:200 rt 65010:200 -echo "Injecting EVPN type-5 (IP prefix) routes..." -"${G[@]}" prefix 10.210.10.0/24 gw 10.40.40.251 etag 0 label 10210 rd 65010:210 rt 65010:210 encap vxlan -"${G[@]}" prefix 10.210.20.0/24 gw 10.40.40.251 etag 0 label 10220 rd 65010:220 rt 65010:220 encap vxlan +# NOTE: EVPN type-5 (IP-prefix) routes are intentionally NOT injected. +# The OpenBMP collector 2.2.3 parses type-2 (MAC/IP) and type-3 (multicast) +# cleanly, but mis-decodes the type-5 NLRI — the IP prefix bleeds into the +# RD field (observed RDs like '6154:3523870730'). Type-5 visibility needs a +# newer collector or the GoBMP path — see docs/ROADMAP.md E5. echo echo "Current EVPN RIB on gobgp-evpn:"