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 439BE1FF0B2 for ; Fri, 25 Sep 2026 15:41:03 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id E3C772170A; Fri, 25 Sep 2026 15:40:58 +0200 (CEST) From: Hannes Laimer To: pve-devel@lists.proxmox.com Subject: [PATCH pve-network] sdn: zones: vxlan: set the local tunnel address explicitly Date: Fri, 25 Sep 2026 15:40:50 +0200 Message-ID: <20260925134050.754528-1-h.laimer@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1790343652497 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.469 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: BDVM7M4V3P7ENAPSOTFV22MYY2NJSLNO X-Message-ID-Hash: BDVM7M4V3P7ENAPSOTFV22MYY2NJSLNO 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: The plugin already determines which peer address is the node's own, but only uses it to leave the node out of the remote list and never writes it as vxlan-local-tunnelip. ifupdown2 applies the first local tunnel address it processes in a run to every vxlan interface without one, so a VXLAN zone next to an EVPN zone inherits the EVPN zone's address, at creation and on reload as an in-place change of the live device. With both zones on one underlay the two addresses are the same. With separate underlays the zone's VTEP address lands on the EVPN underlay, FRR advertises the VNI with it and installs forwarding entries toward the peers there, and the zone's traffic moves onto the EVPN underlay. Signed-off-by: Hannes Laimer --- reproduce: (order doesnt matter, it's either create or live-update) - setup EVPN zone with vnet - setup vxlan zone with vnet both have their own underlay network. -> `ip -d link show vxlan_vxnet`, the vxlan interface has the EVPN ip assigned as local tunnel endpoint -> ping between two guests on the vxlan zone travels over the evpn underlay src/PVE/Network/SDN/Zones/VxlanPlugin.pm | 1 + src/test/zones/vxlan/basic/expected_sdn_interfaces | 1 + src/test/zones/vxlan/ipv6/expected_sdn_interfaces | 1 + src/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces | 1 + src/test/zones/vxlan/vxlanport/expected_sdn_interfaces | 1 + 5 files changed, 5 insertions(+) diff --git a/src/PVE/Network/SDN/Zones/VxlanPlugin.pm b/src/PVE/Network/SDN/Zones/VxlanPlugin.pm index a408261..8eb7e1c 100644 --- a/src/PVE/Network/SDN/Zones/VxlanPlugin.pm +++ b/src/PVE/Network/SDN/Zones/VxlanPlugin.pm @@ -126,6 +126,7 @@ sub generate_sdn_config { #vxlan interface my @iface_config = (); push @iface_config, "vxlan-id $tag"; + push @iface_config, "vxlan-local-tunnelip $ifaceip" if $ifaceip; for my $address (sort @peers) { next if $address eq $ifaceip; diff --git a/src/test/zones/vxlan/basic/expected_sdn_interfaces b/src/test/zones/vxlan/basic/expected_sdn_interfaces index 7b73c3e..ed6869d 100644 --- a/src/test/zones/vxlan/basic/expected_sdn_interfaces +++ b/src/test/zones/vxlan/basic/expected_sdn_interfaces @@ -10,6 +10,7 @@ iface myvnet auto vxlan_myvnet iface vxlan_myvnet vxlan-id 100 + vxlan-local-tunnelip 192.168.0.1 vxlan_remoteip 192.168.0.2 vxlan_remoteip 192.168.0.3 mtu 1450 diff --git a/src/test/zones/vxlan/ipv6/expected_sdn_interfaces b/src/test/zones/vxlan/ipv6/expected_sdn_interfaces index 032ab99..14354f6 100644 --- a/src/test/zones/vxlan/ipv6/expected_sdn_interfaces +++ b/src/test/zones/vxlan/ipv6/expected_sdn_interfaces @@ -10,6 +10,7 @@ iface myvnet auto vxlan_myvnet iface vxlan_myvnet vxlan-id 100 + vxlan-local-tunnelip 2a08:2200:100:1::10 vxlan_remoteip 2a08:2200:100:1::11 vxlan_remoteip 2a08:2200:100:1::12 mtu 1450 diff --git a/src/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces b/src/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces index 55cdf9c..e6331d2 100644 --- a/src/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces +++ b/src/test/zones/vxlan/vlanawarevnet/expected_sdn_interfaces @@ -12,6 +12,7 @@ iface myvnet auto vxlan_myvnet iface vxlan_myvnet vxlan-id 100 + vxlan-local-tunnelip 192.168.0.1 vxlan_remoteip 192.168.0.2 vxlan_remoteip 192.168.0.3 mtu 1450 diff --git a/src/test/zones/vxlan/vxlanport/expected_sdn_interfaces b/src/test/zones/vxlan/vxlanport/expected_sdn_interfaces index 572550a..a3147b6 100644 --- a/src/test/zones/vxlan/vxlanport/expected_sdn_interfaces +++ b/src/test/zones/vxlan/vxlanport/expected_sdn_interfaces @@ -10,6 +10,7 @@ iface myvnet auto vxlan_myvnet iface vxlan_myvnet vxlan-id 100 + vxlan-local-tunnelip 192.168.0.1 vxlan_remoteip 192.168.0.2 vxlan_remoteip 192.168.0.3 vxlan-port 6000 -- 2.47.3