public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Hannes Laimer <h.laimer@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: superseded: [PATCH docs/manager/network/proxmox{-ve-rs,-perl-rs} v4 0/7] sdn: add BGP fabric
Date: Wed, 13 May 2026 20:43:17 +0200	[thread overview]
Message-ID: <60e09f2b-ef95-4127-bce8-6093a73c4c08@proxmox.com> (raw)
In-Reply-To: <20260512141305.199664-1-h.laimer@proxmox.com>

superseded-by:
https://lore.proxmox.com/pve-devel/20260513184213.506775-1-h.laimer@proxmox.com/T/#t

On 2026-05-12 16:12, Hannes Laimer wrote:
> This patch series adds BGP as a third fabric protocol alongside OpenFabric and
> OSPF. It targets eBGP unnumbered underlays where each node has a unique ASN and
> peers over physical interfaces without IP assignment on fabric links.
> 
> ## Dependencies
> 
> This series is based on the route-maps, evpn-rework, wireguard, and
> ospf-route-dist series ([3]-[6]).
> 
> ## eBGP underlay
> 
> Each node gets its own ASN (e.g. 65001, 65002, 65003) and peers with its
> neighbors using 'remote-as external' on unnumbered interfaces. The fabric
> peer-group is named after the fabric ID and uses BFD when enabled.
> 
> ## EVPN overlay
> 
> When the EVPN controller references a BGP fabric, VTEP sessions are iBGP,
> consistent with how EVPN operates on OSPF and OpenFabric fabrics. The per-node
> ASN is applied via 'local-as' on the underlay neighbor group.
> 
> ## Single BGP process
> 
> FRR allows only one BGP instance per VRF, so the fabric underlay and the EVPN
> overlay coexist in one 'router bgp' instance. The fabric generates its own
> BgpRouter and merges into the existing one via merge_fabric(), appending
> neighbor groups and address families without overwriting EVPN settings.
> 
> ## IPv6-only support
> 
> For nodes with only an IPv6 address, the BGP router-id (which must be a 32-bit
> value) is derived from the IPv6 address using FNV-1a hashing.
> 
> ### Testing results for hash collisions
> Scattered /64           n=1000       unique=1000       collisions=0      worst=1
> Scattered /64           n=10000      unique=10000      collisions=0      worst=1
> Scattered /64           n=100000     unique=99997      collisions=3      worst=2
> Sequential /64          n=1000       unique=1000       collisions=0      worst=1
> Sequential /64          n=10000      unique=10000      collisions=0      worst=1
> Sequential /64          n=100000     unique=100000     collisions=0      worst=1
> Spaced /64 (step 256)   n=1000       unique=1000       collisions=0      worst=1
> Spaced /64 (step 256)   n=10000      unique=10000      collisions=0      worst=1
> Spaced /64 (step 256)   n=100000     unique=100000     collisions=0      worst=1
> Sparse multi-/48        n=1000       unique=1000       collisions=0      worst=1
> Sparse multi-/48        n=10000      unique=10000      collisions=0      worst=1
> Sparse multi-/48        n=100000     unique=100000     collisions=0      worst=1
> 
> Only the random assignment in a /64 prefix caused a tiny amount of collisions,
> and having 100k routers with randomly assigned IPs is not really typical. So
> FNV-1a does seem like a good choice here. (generally I'm open to alternative
> approaches for getting router-ids on nodes with no ipv4 ips)
> 
> 
> Thanks a lot @Stefan for the base of this series!
> 
> 
> v4:
>  - split route-map: `pve_bgp` (zebra `ip protocol bgp` filter) for set-src +
>    catch-all, `pve_bgp_<id>_in` (per-fabric peer-inbound) for filtering
>  - added `accept-ra 0` and `ip6-forward 1` on BGP fabric interfaces
>  - dropped v3's patch 6/8 (EVPN underlay prefix check)
>  - dropped the `router_id` field references. With prefixes always
>    present, the router-id is always derivable
>  - rebase onto the latest versions of the
>    route-maps[3]/wireguard[4]/evpn[5]/ospf-route-dist[6] series
> 
> 
> v3, thanks @Gabriel and @Stefan for the (mostly off-list) feedback on v2!:
>  - fixed exit-node routing: moved the set-src route-map from `ip
>    protocol bgp` to the fabric peer-group's inbound direction, so EVPN
>    VRF imports aren't dropped by the filter's implicit deny
>  - renamed the route-map to be per-fabric (pve_bgp_<id>)
>  - added optional router_id field on BGP nodes (required when the fabric
>    has no prefix), enabling prefix-less BGP fabrics
>  - dropped the per-node ASN uniqueness check
>  - ui: show `router_id` field only when the fabric has no prefix
> 
> 
> v2, thanks @Gabriel and @Stefan for the (off-list) feedback on v1!:
>  - switched EVPN overlay from eBGP to iBGP
>  - rebased onto Stefan's evpn[1]/route-maps[2] series
>  - made LocalAsSettings fields pub (needed for Rust-side construction)
>  - added router-id collision validation for IPv6-only nodes
>  - added docs section
> 
> [1] https://lore.proxmox.com/pve-devel/20260414163315.419384-1-s.hanreich@proxmox.com/
> [2] https://lore.proxmox.com/pve-devel/20260401143957.386809-1-s.hanreich@proxmox.com/
> 
> [3] https://lore.proxmox.com/pve-devel/20260511090202.60323-1-s.hanreich@proxmox.com/
> [4] https://lore.proxmox.com/pve-devel/20260507124008.417223-1-s.hanreich@proxmox.com/
> [5] https://lore.proxmox.com/pve-devel/20260504162501.425135-1-s.hanreich@proxmox.com/
> [6] https://lore.proxmox.com/pve-devel/20260504163157.429628-1-s.hanreich@proxmox.com/
> 
> 
> proxmox-ve-rs:
> 
> Stefan Hanreich (1):
>   sdn: fabric: add BGP protocol support
> 
>  proxmox-frr/src/ser/bgp.rs                    |  87 ++++-
>  proxmox-ve-config/src/sdn/fabric/frr.rs       | 304 ++++++++++++++++-
>  proxmox-ve-config/src/sdn/fabric/mod.rs       | 169 +++++++++-
>  .../src/sdn/fabric/section_config/fabric.rs   |  22 ++
>  .../src/sdn/fabric/section_config/mod.rs      |  21 +-
>  .../src/sdn/fabric/section_config/node.rs     |  21 ++
>  .../sdn/fabric/section_config/protocol/bgp.rs | 317 ++++++++++++++++++
>  .../sdn/fabric/section_config/protocol/mod.rs |   1 +
>  .../tests/fabric/cfg/bgp_default/fabrics.cfg  |  17 +
>  .../fabric/cfg/bgp_ipv6_only/fabrics.cfg      |  17 +
>  proxmox-ve-config/tests/fabric/main.rs        | 119 ++++++-
>  .../snapshots/fabric__bgp_default_pve.snap    |  36 ++
>  .../snapshots/fabric__bgp_default_pve1.snap   |  35 ++
>  .../snapshots/fabric__bgp_ipv6_only_pve.snap  |  37 ++
>  .../snapshots/fabric__bgp_ipv6_only_pve1.snap |  36 ++
>  .../fabric__bgp_merge_with_evpn_pve.snap      |  42 +++
>  16 files changed, 1268 insertions(+), 13 deletions(-)
>  create mode 100644 proxmox-ve-config/src/sdn/fabric/section_config/protocol/bgp.rs
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/bgp_default/fabrics.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/cfg/bgp_ipv6_only/fabrics.cfg
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__bgp_default_pve.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__bgp_default_pve1.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__bgp_ipv6_only_pve.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__bgp_ipv6_only_pve1.snap
>  create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__bgp_merge_with_evpn_pve.snap
> 
> 
> proxmox-perl-rs:
> 
> Hannes Laimer (1):
>   sdn: fabrics: add BGP status endpoints
> 
> Stefan Hanreich (1):
>   sdn: fabrics: add BGP config generation
> 
>  pve-rs/src/bindings/sdn/fabrics.rs | 123 ++++++++++++++++++++++++++++-
>  pve-rs/src/sdn/status.rs           | 106 ++++++++++++++++++++++++-
>  2 files changed, 225 insertions(+), 4 deletions(-)
> 
> 
> pve-network:
> 
> Hannes Laimer (2):
>   sdn: fabrics: register bgp as a fabric protocol type
>   test: evpn: add integration test for EVPN over BGP fabric
> 
>  src/PVE/Network/SDN/Fabrics.pm                | 62 +++++++++++++-
>  src/PVE/Network/SDN/RouteMaps.pm              | 15 ++++
>  .../bgp_fabric/expected_controller_config     | 73 ++++++++++++++++
>  .../evpn/bgp_fabric/expected_sdn_interfaces   | 60 +++++++++++++
>  src/test/zones/evpn/bgp_fabric/interfaces     |  6 ++
>  src/test/zones/evpn/bgp_fabric/sdn_config     | 85 +++++++++++++++++++
>  6 files changed, 300 insertions(+), 1 deletion(-)
>  create mode 100644 src/test/zones/evpn/bgp_fabric/expected_controller_config
>  create mode 100644 src/test/zones/evpn/bgp_fabric/expected_sdn_interfaces
>  create mode 100644 src/test/zones/evpn/bgp_fabric/interfaces
>  create mode 100644 src/test/zones/evpn/bgp_fabric/sdn_config
> 
> 
> pve-manager:
> 
> Hannes Laimer (1):
>   ui: sdn: add BGP fabric support
> 
>  www/manager6/Makefile                         |  3 +
>  www/manager6/sdn/FabricsView.js               | 12 ++++
>  www/manager6/sdn/fabrics/FabricEdit.js        | 12 +++-
>  www/manager6/sdn/fabrics/NodeEdit.js          |  1 +
>  www/manager6/sdn/fabrics/bgp/FabricEdit.js    | 67 +++++++++++++++++++
>  .../sdn/fabrics/bgp/InterfacePanel.js         | 15 +++++
>  www/manager6/sdn/fabrics/bgp/NodeEdit.js      | 23 +++++++
>  7 files changed, 130 insertions(+), 3 deletions(-)
>  create mode 100644 www/manager6/sdn/fabrics/bgp/FabricEdit.js
>  create mode 100644 www/manager6/sdn/fabrics/bgp/InterfacePanel.js
>  create mode 100644 www/manager6/sdn/fabrics/bgp/NodeEdit.js
> 
> 
> pve-docs:
> 
> Hannes Laimer (1):
>   sdn: add bgp fabric section
> 
>  pvesdn.adoc | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 96 insertions(+)
> 
> 
> Summary over all repositories:
>   32 files changed, 2019 insertions(+), 21 deletions(-)
> 





      parent reply	other threads:[~2026-05-13 18:43 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12 14:12 [PATCH docs/manager/network/proxmox{-ve-rs,-perl-rs} v4 0/7] sdn: add BGP fabric Hannes Laimer
2026-05-12 14:12 ` [PATCH proxmox-ve-rs v4 1/7] sdn: fabric: add BGP protocol support Hannes Laimer
2026-05-13 12:29   ` Stefan Hanreich
2026-05-13 13:00     ` Hannes Laimer
2026-05-12 14:13 ` [PATCH proxmox-perl-rs v4 2/7] sdn: fabrics: add BGP config generation Hannes Laimer
2026-05-12 14:13 ` [PATCH proxmox-perl-rs v4 3/7] sdn: fabrics: add BGP status endpoints Hannes Laimer
2026-05-13 12:33   ` Stefan Hanreich
2026-05-13 13:02     ` Hannes Laimer
2026-05-12 14:13 ` [PATCH pve-network v4 4/7] sdn: fabrics: register bgp as a fabric protocol type Hannes Laimer
2026-05-12 14:13 ` [PATCH pve-network v4 5/7] test: evpn: add integration test for EVPN over BGP fabric Hannes Laimer
2026-05-12 14:13 ` [PATCH pve-manager v4 6/7] ui: sdn: add BGP fabric support Hannes Laimer
2026-05-13 12:38   ` Stefan Hanreich
2026-05-12 14:13 ` [PATCH pve-docs v4 7/7] sdn: add bgp fabric section Hannes Laimer
2026-05-13 12:39 ` [PATCH docs/manager/network/proxmox{-ve-rs,-perl-rs} v4 0/7] sdn: add BGP fabric Stefan Hanreich
2026-05-13 18:43 ` Hannes Laimer [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=60e09f2b-ef95-4127-bce8-6093a73c4c08@proxmox.com \
    --to=h.laimer@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal