From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 9F9011FF0AA for ; Fri, 21 Aug 2026 16:04:34 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id CB5A02167B; Fri, 21 Aug 2026 16:04:19 +0200 (CEST) From: Gabriel Goller To: pve-devel@lists.proxmox.com Subject: [RFC manager/network/proxmox{-ve-rs,-perl-rs} 00/15] SDN VRF support Date: Fri, 21 Aug 2026 16:03:44 +0200 Message-ID: <20260821140404.322081-1-g.goller@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1787321022466 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.973 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: LMJMLYJ76UZKSGGOGLZZC3KSCH7WZ3RR X-Message-ID-Hash: LMJMLYJ76UZKSGGOGLZZC3KSCH7WZ3RR X-MailFrom: g.goller@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: This RFC adds VRF support to SDN zones and fabrics. A simple zone can now use either the default VRF or a dedicated VRF. The simple zone dialog has a checkbox for this and uses the default VRF by default. If the checkbox is disabled, the zone creates a dedicated VRF named `vrf_`. EVPN zones always create a dedicated VRF. BGP and OSPF fabrics can select a zone and run inside its VRF. This is the second iteration. The first iteration added VRFs as a separate SDN object with a distinct GUI subdirectory. This was scrapped because VRFs are an implementation detail and should not be exposed on their own in the GUI. Zones already provide a logical L3 building block and should map to VRFs instead. Route leaking between VRFs partly depends on the following FRR change, so it will come a bit later: https://github.com/FRRouting/frr/pull/22426 As always, thanks to Stefan Hanreich for his help. proxmox-ve-rs: Gabriel Goller (5): frr: add VRF-aware OSPF rendering sdn: add zone references to OSPF and BGP fabrics sdn: generate fabric routing configuration in zone VRFs sdn: fix VRF route-map scoping and zone ID validation tests: fabrics: add test for fabrics in VRFs proxmox-frr-templates/templates/fabricd.jinja | 2 +- .../templates/interface.jinja | 6 +- proxmox-frr-templates/templates/isisd.jinja | 2 +- proxmox-frr-templates/templates/ospfd.jinja | 12 +- .../templates/protocol_routemaps.jinja | 13 ++ proxmox-frr/debian/control | 8 +- proxmox-frr/src/ser/mod.rs | 8 + proxmox-ve-config/src/sdn/fabric/frr.rs | 137 ++++++++---- proxmox-ve-config/src/sdn/fabric/mod.rs | 30 ++- .../src/sdn/fabric/section_config/fabric.rs | 26 ++- .../sdn/fabric/section_config/protocol/bgp.rs | 11 +- .../fabric/section_config/protocol/ospf.rs | 11 +- .../tests/fabric/cfg/vrf/fabrics.cfg | 43 ++++ .../tests/fabric/cfg/vrf/route-maps.cfg | 15 ++ proxmox-ve-config/tests/fabric/helper.rs | 20 ++ proxmox-ve-config/tests/fabric/main.rs | 207 +++++++++++++++++- .../fabric/snapshots/fabric__vrf_pve.snap | 134 ++++++++++++ 17 files changed, 627 insertions(+), 58 deletions(-) create mode 100644 proxmox-ve-config/tests/fabric/cfg/vrf/fabrics.cfg create mode 100644 proxmox-ve-config/tests/fabric/cfg/vrf/route-maps.cfg create mode 100644 proxmox-ve-config/tests/fabric/snapshots/fabric__vrf_pve.snap proxmox-perl-rs: Gabriel Goller (3): pve-rs: fabrics: assign network interfaces to configured VRFs pve-rs: fabrics: make per-fabric status queries VRF-aware pve-rs: fabrics: include VRF routes in aggregate status pve-rs/src/bindings/sdn/fabrics.rs | 301 +++++++++++++++++++---------- pve-rs/src/sdn/status.rs | 19 +- 2 files changed, 207 insertions(+), 113 deletions(-) pve-network: Gabriel Goller (5): sdn: add optional VRFs for simple zones sdn: allow fabrics to use simple zone VRFs sdn: always generate EVPN zone VRFs api: sdn: allow EVPN zones as fabric VRFs api: sdn: disallow BGP fabrics in EVPN zone VRFs src/PVE/API2/Network/SDN/Fabrics/Fabric.pm | 50 ++++++++++++++++--- .../API2/Network/SDN/Fabrics/FabricNode.pm | 18 +++++++ src/PVE/API2/Network/SDN/Zones.pm | 33 ++++++++++++ src/PVE/Network/SDN/Controllers/BgpPlugin.pm | 2 +- src/PVE/Network/SDN/Fabrics.pm | 29 ++++++++++- src/PVE/Network/SDN/Zones.pm | 17 +++++-- src/PVE/Network/SDN/Zones/EvpnPlugin.pm | 35 +++++++------ src/PVE/Network/SDN/Zones/Plugin.pm | 6 +++ src/PVE/Network/SDN/Zones/SimplePlugin.pm | 20 +++++++- .../evpn/vrf-empty/expected_sdn_interfaces | 6 +++ src/test/zones/evpn/vrf-empty/interfaces | 2 + src/test/zones/evpn/vrf-empty/sdn_config | 13 +++++ .../simple/vrf-empty/expected_sdn_interfaces | 5 ++ src/test/zones/simple/vrf-empty/interfaces | 2 + src/test/zones/simple/vrf-empty/sdn_config | 12 +++++ .../zones/simple/vrf/expected_sdn_interfaces | 12 +++++ src/test/zones/simple/vrf/interfaces | 2 + src/test/zones/simple/vrf/sdn_config | 17 +++++++ 18 files changed, 253 insertions(+), 28 deletions(-) create mode 100644 src/test/zones/evpn/vrf-empty/expected_sdn_interfaces create mode 100644 src/test/zones/evpn/vrf-empty/interfaces create mode 100644 src/test/zones/evpn/vrf-empty/sdn_config create mode 100644 src/test/zones/simple/vrf-empty/expected_sdn_interfaces create mode 100644 src/test/zones/simple/vrf-empty/interfaces create mode 100644 src/test/zones/simple/vrf-empty/sdn_config create mode 100644 src/test/zones/simple/vrf/expected_sdn_interfaces create mode 100644 src/test/zones/simple/vrf/interfaces create mode 100644 src/test/zones/simple/vrf/sdn_config pve-manager: Gabriel Goller (2): ui: sdn: add VRF zone selection for fabrics ui: sdn: expose EVPN zones as fabric VRFs www/manager6/form/SDNZoneSelector.js | 16 +++++++++++++++- www/manager6/sdn/fabrics/FabricEdit.js | 18 ++++++++++++++++++ www/manager6/sdn/zones/SimpleEdit.js | 12 +++++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) Summary over all repositories: 40 files changed, 1131 insertions(+), 201 deletions(-) -- Generated by murpp 0.11.0