* [pve-devel] [PATCH docs/network 0/3] SDN VXLAN IPv6 underlay support
@ 2026-01-16 11:08 Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-network 1/2] sdn: vxlan: make local underlay selection work for IPv6 peers Hannes Laimer
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Hannes Laimer @ 2026-01-16 11:08 UTC (permalink / raw)
To: pve-devel
Adds support for VXLAN zones with an IPv6 uderlay. We don't support dual
stack underlays. So we expect the peers list to be single-family, for
fabrics we prefer IPv6 if the fabrics has both.
pve-network:
Hannes Laimer (2):
sdn: vxlan: make local underlay selection work for IPv6 peers
sdn: vxlan: enforce single address family in peers list
src/PVE/Network/SDN/Zones/Plugin.pm | 72 +++++++++++++++++--
src/PVE/Network/SDN/Zones/VxlanPlugin.pm | 42 +++++++++--
.../vxlan/fabric_ipv4/expected_sdn_interfaces | 26 +++++++
src/test/zones/vxlan/fabric_ipv4/interfaces | 5 ++
src/test/zones/vxlan/fabric_ipv4/sdn_config | 50 +++++++++++++
.../vxlan/fabric_ipv6/expected_sdn_interfaces | 32 +++++++++
src/test/zones/vxlan/fabric_ipv6/interfaces | 5 ++
src/test/zones/vxlan/fabric_ipv6/sdn_config | 54 ++++++++++++++
.../zones/vxlan/ipv6/expected_sdn_interfaces | 15 ++++
src/test/zones/vxlan/ipv6/interfaces | 7 ++
src/test/zones/vxlan/ipv6/sdn_config | 17 +++++
11 files changed, 314 insertions(+), 11 deletions(-)
create mode 100644 src/test/zones/vxlan/fabric_ipv4/expected_sdn_interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv4/interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv4/sdn_config
create mode 100644 src/test/zones/vxlan/fabric_ipv6/expected_sdn_interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv6/interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv6/sdn_config
create mode 100644 src/test/zones/vxlan/ipv6/expected_sdn_interfaces
create mode 100644 src/test/zones/vxlan/ipv6/interfaces
create mode 100644 src/test/zones/vxlan/ipv6/sdn_config
pve-docs:
Hannes Laimer (1):
sdn: vxlan: add short section about underlay address family
vxlan-and-evpn.adoc | 8 ++++++++
1 file changed, 8 insertions(+)
Summary over all repositories:
12 files changed, 322 insertions(+), 11 deletions(-)
--
Generated by git-murpp 0.8.1
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH pve-network 1/2] sdn: vxlan: make local underlay selection work for IPv6 peers
2026-01-16 11:08 [pve-devel] [PATCH docs/network 0/3] SDN VXLAN IPv6 underlay support Hannes Laimer
@ 2026-01-16 11:08 ` Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-network 2/2] sdn: vxlan: enforce single address family in peers list Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-docs 1/1] sdn: vxlan: add short section about underlay address family Hannes Laimer
2 siblings, 0 replies; 4+ messages in thread
From: Hannes Laimer @ 2026-01-16 11:08 UTC (permalink / raw)
To: pve-devel
IPv6 peers couldn't be matched to local underlay addresses, so nodes
would not skip their own peer IP. We need this for VXLAN IPv6 support.
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
src/PVE/Network/SDN/Zones/Plugin.pm | 72 +++++++++++++++++--
.../zones/vxlan/ipv6/expected_sdn_interfaces | 15 ++++
src/test/zones/vxlan/ipv6/interfaces | 7 ++
src/test/zones/vxlan/ipv6/sdn_config | 17 +++++
4 files changed, 104 insertions(+), 7 deletions(-)
create mode 100644 src/test/zones/vxlan/ipv6/expected_sdn_interfaces
create mode 100644 src/test/zones/vxlan/ipv6/interfaces
create mode 100644 src/test/zones/vxlan/ipv6/sdn_config
diff --git a/src/PVE/Network/SDN/Zones/Plugin.pm b/src/PVE/Network/SDN/Zones/Plugin.pm
index 826ebdf..bfa96f7 100644
--- a/src/PVE/Network/SDN/Zones/Plugin.pm
+++ b/src/PVE/Network/SDN/Zones/Plugin.pm
@@ -4,6 +4,7 @@ use strict;
use warnings;
use PVE::Tools qw(run_command);
+use Net::IP qw(ip_is_ipv6);
use PVE::IPRoute2;
use PVE::JSONSchema;
use PVE::Cluster;
@@ -278,14 +279,54 @@ sub del_bridge_fdb {
#helper
+sub _normalize_ip {
+ my ($ip) = @_;
+
+ return undef if !defined($ip);
+ $ip =~ s!/.*$!!;
+ return $ip;
+}
+
+sub _get_iface_addresses {
+ my ($iface_cfg) = @_;
+
+ return () if !$iface_cfg;
+
+ my @addrs;
+ for my $key (qw(address address6)) {
+ my $val = $iface_cfg->{$key};
+ next if !defined($val);
+ if (ref($val) eq 'ARRAY') {
+ push @addrs, @$val;
+ } else {
+ push @addrs, $val;
+ }
+ }
+
+ return @addrs;
+}
+
+sub _address_matches_family {
+ my ($address, $family) = @_;
+
+ my $ip = _normalize_ip($address);
+ return 0 if !defined($ip);
+
+ return ip_is_ipv6($ip) ? $family == 6 : $family == 4;
+}
+
sub get_local_route_ip {
my ($targetip) = @_;
my $ip = undef;
my $interface = undef;
+ my @cmd = ('/sbin/ip');
+ push @cmd, '-6' if ip_is_ipv6($targetip);
+ push @cmd, 'route', 'get', $targetip;
+
run_command(
- ['/sbin/ip', 'route', 'get', $targetip],
+ \@cmd,
outfunc => sub {
if ($_[0] =~ m/src ($PVE::Tools::IPRE)/) {
$ip = $1;
@@ -307,16 +348,33 @@ sub find_local_ip_interface_peers {
#if iface is defined, return ip if exist (if not,try to find it on other ifaces)
if ($iface) {
- my $ip = $ifaces->{$iface}->{address};
- return ($ip, $iface) if $ip;
+ my @iface_addrs = _get_iface_addresses($ifaces->{$iface});
+ if (!@{$peers} && @iface_addrs) {
+ my $ip = _normalize_ip($iface_addrs[0]);
+ return ($ip, $iface) if $ip;
+ }
+ foreach my $address (@{$peers}) {
+ my $family = ip_is_ipv6($address) ? 6 : 4;
+ foreach my $iface_addr (@iface_addrs) {
+ next if !_address_matches_family($iface_addr, $family);
+ my $ip = _normalize_ip($iface_addr);
+ return ($ip, $iface) if $ip;
+ }
+ }
}
#is a local ip member of peers list ?
foreach my $address (@{$peers}) {
- while (my $interface = each %$ifaces) {
- my $ip = $ifaces->{$interface}->{address};
- if ($ip && $ip eq $address) {
- return ($ip, $interface);
+ my $family = ip_is_ipv6($address) ? 6 : 4;
+ my $peer_ip = _normalize_ip($address);
+ next if !defined($peer_ip);
+ foreach my $interface (keys %$ifaces) {
+ foreach my $iface_addr (_get_iface_addresses($ifaces->{$interface})) {
+ next if !_address_matches_family($iface_addr, $family);
+ my $ip = _normalize_ip($iface_addr);
+ if ($ip && $ip eq $peer_ip) {
+ return ($ip, $interface);
+ }
}
}
}
diff --git a/src/test/zones/vxlan/ipv6/expected_sdn_interfaces b/src/test/zones/vxlan/ipv6/expected_sdn_interfaces
new file mode 100644
index 0000000..032ab99
--- /dev/null
+++ b/src/test/zones/vxlan/ipv6/expected_sdn_interfaces
@@ -0,0 +1,15 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan_remoteip 2a08:2200:100:1::11
+ vxlan_remoteip 2a08:2200:100:1::12
+ mtu 1450
diff --git a/src/test/zones/vxlan/ipv6/interfaces b/src/test/zones/vxlan/ipv6/interfaces
new file mode 100644
index 0000000..602179b
--- /dev/null
+++ b/src/test/zones/vxlan/ipv6/interfaces
@@ -0,0 +1,7 @@
+auto vmbr0
+iface vmbr0 inet static
+ address 2a08:2200:100:1::10/64
+ gateway 2a08:2200:100:1::1
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/src/test/zones/vxlan/ipv6/sdn_config b/src/test/zones/vxlan/ipv6/sdn_config
new file mode 100644
index 0000000..484be23
--- /dev/null
+++ b/src/test/zones/vxlan/ipv6/sdn_config
@@ -0,0 +1,17 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => {
+ myzone => {
+ ipam => "pve",
+ type => "vxlan",
+ peers => "2a08:2200:100:1::10,2a08:2200:100:1::11,2a08:2200:100:1::12",
+ },
+ },
+ },
+}
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH pve-network 2/2] sdn: vxlan: enforce single address family in peers list
2026-01-16 11:08 [pve-devel] [PATCH docs/network 0/3] SDN VXLAN IPv6 underlay support Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-network 1/2] sdn: vxlan: make local underlay selection work for IPv6 peers Hannes Laimer
@ 2026-01-16 11:08 ` Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-docs 1/1] sdn: vxlan: add short section about underlay address family Hannes Laimer
2 siblings, 0 replies; 4+ messages in thread
From: Hannes Laimer @ 2026-01-16 11:08 UTC (permalink / raw)
To: pve-devel
We want the underlay to either be IPv4 or IPv6. A dual-stack underlay
adds ambiguity and extra complexity in source selection and validation
without a real use-case.
This includes tests for fabrics, we prefer IPv6 if the fabric offers
both.
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
src/PVE/Network/SDN/Zones/VxlanPlugin.pm | 42 +++++++++++++--
.../vxlan/fabric_ipv4/expected_sdn_interfaces | 26 +++++++++
src/test/zones/vxlan/fabric_ipv4/interfaces | 5 ++
src/test/zones/vxlan/fabric_ipv4/sdn_config | 50 +++++++++++++++++
.../vxlan/fabric_ipv6/expected_sdn_interfaces | 32 +++++++++++
src/test/zones/vxlan/fabric_ipv6/interfaces | 5 ++
src/test/zones/vxlan/fabric_ipv6/sdn_config | 54 +++++++++++++++++++
7 files changed, 210 insertions(+), 4 deletions(-)
create mode 100644 src/test/zones/vxlan/fabric_ipv4/expected_sdn_interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv4/interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv4/sdn_config
create mode 100644 src/test/zones/vxlan/fabric_ipv6/expected_sdn_interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv6/interfaces
create mode 100644 src/test/zones/vxlan/fabric_ipv6/sdn_config
diff --git a/src/PVE/Network/SDN/Zones/VxlanPlugin.pm b/src/PVE/Network/SDN/Zones/VxlanPlugin.pm
index 1db610f..ac006b5 100644
--- a/src/PVE/Network/SDN/Zones/VxlanPlugin.pm
+++ b/src/PVE/Network/SDN/Zones/VxlanPlugin.pm
@@ -4,6 +4,7 @@ use strict;
use warnings;
use PVE::Network::SDN::Zones::Plugin;
use PVE::Tools qw($IPV4RE);
+use Net::IP qw(ip_is_ipv6);
use PVE::INotify;
use PVE::Network::SDN::Controllers::EvpnPlugin;
use PVE::Exception qw(raise raise_param_exc);
@@ -104,15 +105,35 @@ sub generate_sdn_config {
my $current_node = eval { $config->get_node($plugin_config->{fabric}, $local_node) };
die "could not configure VXLAN zone $plugin_config->{id}: $@" if $@;
+ my $all_v6 = 1;
+ my $all_v4 = 1;
+ for my $node (values %$nodes) {
+ $all_v6 = 0 if !$node->{ip6};
+ $all_v4 = 0 if !$node->{ip};
+ }
+
+ # the following checks are not strictly necesarry cause we we shouldn't
+ # even get here if there are nodes on the fabric that don't have an
+ # address on any of the prefixes defined for the fabric
+ my $addr_key;
+ if ($all_v6) {
+ $addr_key = 'ip6';
+ } elsif ($all_v4) {
+ $addr_key = 'ip';
+ } else {
+ die
+ "Fabric $fabric->{id} has no consistent address family for all nodes (need all v6 or all v4)";
+ }
+
die
- "Node $local_node requires an IP in the fabric $fabric->{id} to configure the VXLAN zone $plugin_config->{id}"
- if !$current_node->{ip};
+ "Node $local_node requires a $addr_key address in fabric $fabric->{id} to configure VXLAN zone $plugin_config->{id}"
+ if !$current_node->{$addr_key};
for my $node (values %$nodes) {
- push @peers, $node->{ip} if $node->{ip};
+ push @peers, $node->{$addr_key} if $node->{$addr_key};
}
- $ifaceip = $current_node->{ip};
+ $ifaceip = $current_node->{$addr_key};
} else {
die "neither peers nor fabric configured for VXLAN zone $plugin_config->{id}";
}
@@ -163,6 +184,19 @@ sub on_update_hook {
fabric => "must have exactly one of peers / fabric defined",
});
}
+
+ if ($zone->{peers}) {
+ my @peers = PVE::Tools::split_list($zone->{peers});
+ my $family;
+
+ foreach my $peer (@peers) {
+ my $peer_family = ip_is_ipv6($peer) ? 6 : 4;
+ if (defined($family) && $family != $peer_family) {
+ raise_param_exc({ peers => "must contain only IPv4 or only IPv6 addresses" });
+ }
+ $family = $peer_family;
+ }
+ }
}
sub vnet_update_hook {
diff --git a/src/test/zones/vxlan/fabric_ipv4/expected_sdn_interfaces b/src/test/zones/vxlan/fabric_ipv4/expected_sdn_interfaces
new file mode 100644
index 0000000..3423104
--- /dev/null
+++ b/src/test/zones/vxlan/fabric_ipv4/expected_sdn_interfaces
@@ -0,0 +1,26 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan_remoteip 172.20.3.2
+ vxlan_remoteip 172.20.3.3
+ mtu 1450
+
+auto dummy_test
+iface dummy_test inet static
+ address 172.20.3.1/32
+ link-type dummy
+ ip-forward 1
+
+auto ens18
+iface ens18 inet static
+ address 172.20.3.1/32
+ ip-forward 1
diff --git a/src/test/zones/vxlan/fabric_ipv4/interfaces b/src/test/zones/vxlan/fabric_ipv4/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/src/test/zones/vxlan/fabric_ipv4/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/src/test/zones/vxlan/fabric_ipv4/sdn_config b/src/test/zones/vxlan/fabric_ipv4/sdn_config
new file mode 100644
index 0000000..eaaf3a9
--- /dev/null
+++ b/src/test/zones/vxlan/fabric_ipv4/sdn_config
@@ -0,0 +1,50 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => {
+ myzone => {
+ ipam => "pve",
+ type => "vxlan",
+ fabric => "test",
+ },
+ },
+ },
+ fabrics => {
+ ids => {
+ test => {
+ type => 'openfabric_fabric',
+ id => 'test',
+ ip_prefix => '172.20.3.0/24',
+ },
+ test_localhost => {
+ id => 'test_localhost',
+ type => 'openfabric_node',
+ interfaces => [
+ 'name=ens18',
+ ],
+ ip => '172.20.3.1',
+ },
+ test_node2 => {
+ id => 'test_node2',
+ type => 'openfabric_node',
+ interfaces => [
+ 'name=ens18',
+ ],
+ ip => '172.20.3.2',
+ },
+ test_node3 => {
+ id => 'test_node3',
+ type => 'openfabric_node',
+ interfaces => [
+ 'name=ens18',
+ ],
+ ip => '172.20.3.3',
+ },
+ },
+ },
+}
diff --git a/src/test/zones/vxlan/fabric_ipv6/expected_sdn_interfaces b/src/test/zones/vxlan/fabric_ipv6/expected_sdn_interfaces
new file mode 100644
index 0000000..7351fc9
--- /dev/null
+++ b/src/test/zones/vxlan/fabric_ipv6/expected_sdn_interfaces
@@ -0,0 +1,32 @@
+#version:1
+
+auto myvnet
+iface myvnet
+ bridge_ports vxlan_myvnet
+ bridge_stp off
+ bridge_fd 0
+ mtu 1450
+
+auto vxlan_myvnet
+iface vxlan_myvnet
+ vxlan-id 100
+ vxlan_remoteip fd00::2
+ vxlan_remoteip fd00::3
+ mtu 1450
+
+auto dummy_test
+iface dummy_test inet static
+ address 172.20.3.1/32
+ link-type dummy
+ ip-forward 1
+
+auto dummy_test
+iface dummy_test inet6 static
+ address fd00::1/128
+ link-type dummy
+ ip-forward 1
+
+auto ens18
+iface ens18 inet static
+ address 172.20.3.1/32
+ ip-forward 1
diff --git a/src/test/zones/vxlan/fabric_ipv6/interfaces b/src/test/zones/vxlan/fabric_ipv6/interfaces
new file mode 100644
index 0000000..68b6a88
--- /dev/null
+++ b/src/test/zones/vxlan/fabric_ipv6/interfaces
@@ -0,0 +1,5 @@
+auto vmbr0
+iface vmbr0 inet manual
+ bridge-ports eth0
+ bridge-stp off
+ bridge-fd 0
diff --git a/src/test/zones/vxlan/fabric_ipv6/sdn_config b/src/test/zones/vxlan/fabric_ipv6/sdn_config
new file mode 100644
index 0000000..f463a88
--- /dev/null
+++ b/src/test/zones/vxlan/fabric_ipv6/sdn_config
@@ -0,0 +1,54 @@
+{
+ version => 1,
+ vnets => {
+ ids => {
+ myvnet => { tag => 100, type => "vnet", zone => "myzone" },
+ },
+ },
+ zones => {
+ ids => {
+ myzone => {
+ ipam => "pve",
+ type => "vxlan",
+ fabric => "test",
+ },
+ },
+ },
+ fabrics => {
+ ids => {
+ test => {
+ type => 'openfabric_fabric',
+ id => 'test',
+ ip_prefix => '172.20.3.0/24',
+ ip6_prefix => 'fd00::/64',
+ },
+ test_localhost => {
+ id => 'test_localhost',
+ type => 'openfabric_node',
+ interfaces => [
+ 'name=ens18',
+ ],
+ ip => '172.20.3.1',
+ ip6 => 'fd00::1',
+ },
+ test_node2 => {
+ id => 'test_node2',
+ type => 'openfabric_node',
+ interfaces => [
+ 'name=ens18',
+ ],
+ ip => '172.20.3.2',
+ ip6 => 'fd00::2',
+ },
+ test_node3 => {
+ id => 'test_node3',
+ type => 'openfabric_node',
+ interfaces => [
+ 'name=ens18',
+ ],
+ ip => '172.20.3.3',
+ ip6 => 'fd00::3',
+ },
+ },
+ },
+}
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH pve-docs 1/1] sdn: vxlan: add short section about underlay address family
2026-01-16 11:08 [pve-devel] [PATCH docs/network 0/3] SDN VXLAN IPv6 underlay support Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-network 1/2] sdn: vxlan: make local underlay selection work for IPv6 peers Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-network 2/2] sdn: vxlan: enforce single address family in peers list Hannes Laimer
@ 2026-01-16 11:08 ` Hannes Laimer
2 siblings, 0 replies; 4+ messages in thread
From: Hannes Laimer @ 2026-01-16 11:08 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
vxlan-and-evpn.adoc | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/vxlan-and-evpn.adoc b/vxlan-and-evpn.adoc
index 12bcea9..4349ba9 100644
--- a/vxlan-and-evpn.adoc
+++ b/vxlan-and-evpn.adoc
@@ -19,6 +19,14 @@ Each overlay network is known as a VXLAN Segment and identified by a unique
VXLAN encapsulation add 50bytes overhead, so you need to increase mtu on your host
physical interfaces to 1550 at minimum. (or decrease mtu inside your vms to 1450)
+Underlay address family
+^^^^^^^^^^^^^^^^^^^^^^^
+
+VXLAN underlays are configured either IPv4-only or IPv6-only. Dual-stack
+underlays are not supported; the peer list must be a single address family.
+When using a fabric that provides both IPv4 and IPv6 node addresses, IPv6 is
+preferred.
+
For BUM traffic (broadcast / unknown unicast traffic, multicast),
we have 3 different VXLAN setup modes : multicast, unicast, bgp-evpn
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-01-16 11:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-01-16 11:08 [pve-devel] [PATCH docs/network 0/3] SDN VXLAN IPv6 underlay support Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-network 1/2] sdn: vxlan: make local underlay selection work for IPv6 peers Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-network 2/2] sdn: vxlan: enforce single address family in peers list Hannes Laimer
2026-01-16 11:08 ` [pve-devel] [PATCH pve-docs 1/1] sdn: vxlan: add short section about underlay address family Hannes Laimer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox