From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 1975A1FF0BC for ; Thu, 29 Oct 2026 15:44:21 +0100 (CET) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 8C2C521259; Thu, 29 Oct 2026 15:44:17 +0100 (CET) From: Hannes Laimer To: pve-devel@lists.proxmox.com Subject: [PATCH docs/manager/network/proxmox{-perl-rs,-ve-rs} v4 0/9] add IPv6 RA / SLAAC support to EVPN zones Date: Thu, 29 Oct 2026 15:43:59 +0100 Message-ID: <20261029144408.2646288-1-h.laimer@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: 1793285051576 X-Spam-Level: 3 Message-ID-Hash: LFZP3LTEUHCL7CHKDXANS5ZVMAXKH5EQ X-Message-ID-Hash: LFZP3LTEUHCL7CHKDXANS5ZVMAXKH5EQ X-MailFrom: h.laimer@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 series adds IPv6 Router Advertisement / SLAAC support to EVPN zones. RA settings sit on the vnet (`vnets.cfg`), per-prefix overrides on the subnet (`subnets.cfg`). Defaults are chosen so that most IPv6 subnets work without explicit per-prefix configuration. It also sets `accept_untracked_na=2` on every EVPN vnet bridge that has an IPv6 subnet, to keep first-packet IPv6 return traffic reliable in the distributed anycast-gateway topology. The commit contains more details. v4: - rebased onto current master - docs rewritten - corrected router lifetime default placeholder - reorder commits v3, thanks @Lukas S!: - validation no longer rejects valid IPv6 subnets: non-/64 prefixes and IPv6 subnets using SNAT are accepted and editable again - improve FRR config generation so a single malformed subnet or a non-member node can no longer break it, and so configured prefix lifetimes are no longer silently dropped - cleaner EVPN gating and better per-prefix defaults, so most IPv6 subnets work without explicit configuration - cleanup UI, only persists meaningful settings - some smaller fixups proxmox-perl-rs: Hannes Laimer (1): pve-rs: sdn: add IPv6 RA builder binding pve-rs/Makefile | 1 + pve-rs/src/bindings/sdn/ipv6_ra.rs | 40 ++++++++++++++++++++++++++++++ pve-rs/src/bindings/sdn/mod.rs | 1 + 3 files changed, 42 insertions(+) create mode 100644 pve-rs/src/bindings/sdn/ipv6_ra.rs proxmox-ve-rs: Hannes Laimer (2): frr: add IPv6 router advertisement support ve-config: sdn: add IPv6 router advertisement settings .../templates/frr.conf.jinja | 1 + .../templates/nd_interfaces.jinja | 28 +++ proxmox-frr/src/ser/mod.rs | 6 + proxmox-frr/src/ser/nd.rs | 56 ++++++ proxmox-frr/src/ser/serializer.rs | 6 +- proxmox-ve-config/src/sdn/config.rs | 146 +++++++++++++++- proxmox-ve-config/src/sdn/mod.rs | 1 + proxmox-ve-config/src/sdn/nd.rs | 131 ++++++++++++++ proxmox-ve-config/tests/nd/main.rs | 164 ++++++++++++++++++ .../nd__explicit_lifetimes_are_preserved.snap | 9 + .../nd__mixed_subnets_under_one_vnet.snap | 14 ++ .../snapshots/nd__no_autoconfig_prefix.snap | 9 + ...sh64_prefix_defaults_to_no_autoconfig.snap | 9 + .../nd__off_link_emits_off_link_modifier.snap | 9 + ...__preferred_lifetime_clamped_to_valid.snap | 9 + ...vel_optional_knobs_are_passed_through.snap | 12 ++ .../nd__slaac_with_default_lifetimes.snap | 9 + 17 files changed, 611 insertions(+), 8 deletions(-) create mode 100644 proxmox-frr-templates/templates/nd_interfaces.jinja create mode 100644 proxmox-frr/src/ser/nd.rs create mode 100644 proxmox-ve-config/src/sdn/nd.rs create mode 100644 proxmox-ve-config/tests/nd/main.rs create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__explicit_lifetimes_are_preserved.snap create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__mixed_subnets_under_one_vnet.snap create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__no_autoconfig_prefix.snap create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__non_slash64_prefix_defaults_to_no_autoconfig.snap create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__off_link_emits_off_link_modifier.snap create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__preferred_lifetime_clamped_to_valid.snap create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__ra_level_optional_knobs_are_passed_through.snap create mode 100644 proxmox-ve-config/tests/nd/snapshots/nd__slaac_with_default_lifetimes.snap pve-manager: Hannes Laimer (1): ui: sdn: add IPv6 RA / SLAAC support www/manager6/form/SDNVnetSelector.js | 2 +- www/manager6/sdn/SubnetEdit.js | 130 ++++++++++++++++- www/manager6/sdn/SubnetView.js | 7 +- www/manager6/sdn/VnetEdit.js | 202 ++++++++++++++++++++++++++- www/manager6/sdn/VnetView.js | 6 +- 5 files changed, 339 insertions(+), 8 deletions(-) pve-network: Hannes Laimer (4): sdn: evpn: derive IP version from CIDR for gateway-less subnets sdn: evpn: accept untracked IPv6 neighbor advertisements sdn: evpn: add IPv6 RA / SLAAC support api: vnets: include the zone type in the vnet list src/PVE/API2/Network/SDN/Vnets.pm | 62 ++++++++++++++ src/PVE/Network/SDN.pm | 1 + src/PVE/Network/SDN/Controllers.pm | 21 ++++- src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 22 ++++- src/PVE/Network/SDN/Controllers/Plugin.pm | 2 +- src/PVE/Network/SDN/SubnetPlugin.pm | 64 ++++++++++++++ src/PVE/Network/SDN/VnetPlugin.pm | 85 +++++++++++++++++++ src/PVE/Network/SDN/Zones/EvpnPlugin.pm | 14 ++- src/PVE/Network/SDN/Zones/Plugin.pm | 6 ++ .../expected_sdn_interfaces | 1 + .../exitnode_snat/expected_sdn_interfaces | 1 + .../exitnodenullroute/expected_sdn_interfaces | 1 + .../evpn/ipv4ipv6/expected_sdn_interfaces | 1 + .../ipv4ipv6nogateway/expected_sdn_interfaces | 1 + .../zones/evpn/ipv6/expected_sdn_interfaces | 1 + .../evpn/ipv6underlay/expected_sdn_interfaces | 1 + .../evpn/slaac/expected_controller_config | 53 ++++++++++++ .../zones/evpn/slaac/expected_sdn_interfaces | 44 ++++++++++ src/test/zones/evpn/slaac/interfaces | 7 ++ src/test/zones/evpn/slaac/sdn_config | 41 +++++++++ 20 files changed, 423 insertions(+), 6 deletions(-) create mode 100644 src/test/zones/evpn/slaac/expected_controller_config create mode 100644 src/test/zones/evpn/slaac/expected_sdn_interfaces create mode 100644 src/test/zones/evpn/slaac/interfaces create mode 100644 src/test/zones/evpn/slaac/sdn_config pve-docs: Hannes Laimer (1): sdn: add IPv6 RA / SLAAC section pvesdn.adoc | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) Summary over all repositories: 46 files changed, 1486 insertions(+), 22 deletions(-) -- Generated by murpp 0.12.0