Conversation
There was a problem hiding this comment.
Pull request overview
Adds EVPN MAC-VRF (VLAN-based) support to the BIRD daemon integration by transforming VLAN EVPN RTs into BIRD syntax and introducing an EVPN config module/template, with small BGP template updates to enable EVPN AF sessions.
Changes:
- Add RT transformation helper and apply it to VLAN EVPN import/export RT lists for BIRD rendering.
- Introduce a new BIRD EVPN module template and register it in the BIRD daemon config map/features.
- Extend BIRD BGP templates to declare the EVPN table and emit per-neighbor EVPN AF configuration when requested.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| netsim/devices/bird.py | Adds RT transformation helper and applies it to VRF + VLAN EVPN RT lists. |
| netsim/daemons/bird/evpn.j2 | New EVPN module rendering VLAN (MAC-VRF) and VRF transit-VNI EVPN protocol stanzas. |
| netsim/daemons/bird/bgp.macros.j2 | Updates BGP protocol naming and adds optional EVPN AF block per neighbor. |
| netsim/daemons/bird/bgp.j2 | Declares evpntab when any EVPN-enabled neighbor exists. |
| netsim/daemons/bird.yml | Registers the EVPN module config output and advertises EVPN/VXLAN capability. |
| | Arista EOS | ✅ | ✅ | ✅ | ✅ | | ||
| | Aruba AOS-CX | ✅ | ✅ | ✅ | ✅ | | ||
| | BIRD | ❌ | ❌ | ❌ | ✅ | | ||
| | BIRD | ❌ | ✅ | ❌ | ✅ | |
There was a problem hiding this comment.
BIRD does support BFD for BGP, unrelated to this PR
| table evpntab; | ||
| import all; | ||
| export all; | ||
| {% if n.type == 'ebgp' %} |
There was a problem hiding this comment.
if 'ebgp' in n.type to include confed_ebgp
There was a problem hiding this comment.
Of course. Fixed.
That's what happens when you blindly copy other people's code 🤷🏻♂️
| {% if 'router_id' in bgp %} | ||
| router id {{ bgp.router_id }}; | ||
| {% endif %} | ||
| {% for n in bgp.neighbors|default([]) if n.evpn|default(false) %} |
There was a problem hiding this comment.
if bgp.neighbors|default([])|selectattr('evpn','defined')
There was a problem hiding this comment.
You love making Jinja2 resemble Perl, right? 😜
There was a problem hiding this comment.
How could youI forget about confederated EVPN EBGP scenarios ;)
_Confederated EBGP EVPN designs are not an absolute inevitability for most networks, but they become highly compelling at massive scale because they bridge the gap between the limitations of pure IBGP and pure EBGP:
The Problem: Pure IBGP scales poorly due to the massive CPU/memory burden placed on Route Reflectors by EVPN's chatty control plane. Pure EBGP scales well but strips or alters critical BGP attributes (like Next-Hop) at AS boundaries, which breaks advanced EVPN features like ESI multi-homing and seamless data-plane tunneling.
The Solution: BGP Confederations break a massive network into small, manageable internal sub-ASns. This provides the scalability and blast-radius isolation of EBGP while natively preserving the internal routing attributes of IBGP.
Ultimately, while unnecessary for standard enterprises, the design is functionally driven by the need to scale EVPN's massive control plane across hyperscale or multi-site data centers without breaking its underlying architecture._
You're absolutely right. What a mistake 😂
Where did you get this wonderful pile of BS? |
Based on #3475 by @jbemmel