* [PATCH pve-network] sdn: zones: vxlan: set the local tunnel address explicitly
@ 2026-09-25 13:40 Hannes Laimer
2026-10-08 8:59 ` Gabriel Goller
0 siblings, 1 reply; 3+ messages in thread
From: Hannes Laimer @ 2026-09-25 13:40 UTC (permalink / raw)
To: pve-devel
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 <h.laimer@proxmox.com>
---
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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH pve-network] sdn: zones: vxlan: set the local tunnel address explicitly
2026-09-25 13:40 [PATCH pve-network] sdn: zones: vxlan: set the local tunnel address explicitly Hannes Laimer
@ 2026-10-08 8:59 ` Gabriel Goller
2026-10-08 9:12 ` Hannes Laimer
0 siblings, 1 reply; 3+ messages in thread
From: Gabriel Goller @ 2026-10-08 8:59 UTC (permalink / raw)
To: Hannes Laimer; +Cc: pve-devel
Ah, duplicate to
https://lore.proxmox.com/pve-devel/20260702143349.252142-1-g.goller@proxmox.com/
Sorry didn't notice this earlier. Not sure if the extra check in my patch is needed.
On 25.09.2026 15:40, Hannes Laimer wrote:
> 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 <h.laimer@proxmox.com>
> ---
> 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
>
>
>
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH pve-network] sdn: zones: vxlan: set the local tunnel address explicitly
2026-10-08 8:59 ` Gabriel Goller
@ 2026-10-08 9:12 ` Hannes Laimer
0 siblings, 0 replies; 3+ messages in thread
From: Hannes Laimer @ 2026-10-08 9:12 UTC (permalink / raw)
To: Gabriel Goller; +Cc: pve-devel
On 2026-10-08 10:59, Gabriel Goller wrote:
> Ah, duplicate to
> https://lore.proxmox.com/pve-devel/20260702143349.252142-1-g.goller@proxmox.com/
>
ohh, I could have search the mail archive as well :)
> Sorry didn't notice this earlier. Not sure if the extra check in my patch is needed.
>
if `find_local_ip_interfaces_peers` return no ip, it could technically,
and the check doesn't hurt
> On 25.09.2026 15:40, Hannes Laimer wrote:
>> 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 <h.laimer@proxmox.com>
>> ---
>> 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
>>
>>
>>
>>
>>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-08 9:12 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-25 13:40 [PATCH pve-network] sdn: zones: vxlan: set the local tunnel address explicitly Hannes Laimer
2026-10-08 8:59 ` Gabriel Goller
2026-10-08 9:12 ` Hannes Laimer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox