* [pve-devel] [PATCH ifupdown2 2/7] update submodule to 3.9.0
2025-04-23 10:45 [pve-devel] [PATCH ifupdown2 0/7] bump to upstream 3.9.0 release Christoph Heiss
2025-04-23 10:45 ` [pve-devel] [PATCH ifupdown2 1/7] gitignore: add dpkg build artifacts Christoph Heiss
@ 2025-04-23 10:45 ` Christoph Heiss
2025-04-23 10:45 ` [pve-devel] [PATCH ifupdown2 3/7] d/changelog: merge in upstream changelog Christoph Heiss
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Christoph Heiss @ 2025-04-23 10:45 UTC (permalink / raw)
To: pve-devel
Allows to drop most upstream patches, expect one for IPv6 SLAAC support
due to being stale/unmerged as of 3.9.0.
Adds a simple patch dropping a line from setup.py, as it tries to
install a non-existing file and would thus otherwise fail the install
step.
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
Our ifupdown2 upstream mirror [0] must also be updated accordingly, of
course. The updated/referenced commit for the submodule points to the
`3.9.0` upstream tag.
[0] https://git.proxmox.com/?p=mirror_ifupdown2.git;a=summary
...y-install-line-for-non-existing-ifup.patch | 29 +++
debian/patches/series | 8 +-
...pport-inet6-auto-and-router-adverti.patch} | 201 +++++++++++-------
...01-addons-ethtool-add-rx-vlan-filter.patch | 43 ----
...-compare-between-remote-ips-and-old_.patch | 33 ---
...waiting-for-stdout-eof-of-etc-networ.patch | 44 ----
.../0001-scheduler-import-traceback.patch | 60 ------
.../upstream/0001-vxlan-fix-vni-filter.patch | 27 ---
debian/rules | 5 +-
ifupdown2 | 2 +-
10 files changed, 164 insertions(+), 288 deletions(-)
create mode 100644 debian/patches/pve/0011-setup-drop-faulty-install-line-for-non-existing-ifup.patch
rename debian/patches/upstream/{0001-add-ipv6-slaac-support-inet6-auto-accept_ra.patch => 0001-add-IPv6-SLAAC-support-inet6-auto-and-router-adverti.patch} (81%)
delete mode 100644 debian/patches/upstream/0001-addons-ethtool-add-rx-vlan-filter.patch
delete mode 100644 debian/patches/upstream/0001-addons-vxlan-fix-compare-between-remote-ips-and-old_.patch
delete mode 100644 debian/patches/upstream/0001-scheduler-avoid-waiting-for-stdout-eof-of-etc-networ.patch
delete mode 100644 debian/patches/upstream/0001-scheduler-import-traceback.patch
delete mode 100644 debian/patches/upstream/0001-vxlan-fix-vni-filter.patch
diff --git a/debian/patches/pve/0011-setup-drop-faulty-install-line-for-non-existing-ifup.patch b/debian/patches/pve/0011-setup-drop-faulty-install-line-for-non-existing-ifup.patch
new file mode 100644
index 0000000..412d1bd
--- /dev/null
+++ b/debian/patches/pve/0011-setup-drop-faulty-install-line-for-non-existing-ifup.patch
@@ -0,0 +1,29 @@
+From b2a05684c6dccab03aba06d9a424f9d79208d922 Mon Sep 17 00:00:00 2001
+From: Christoph Heiss <c.heiss@proxmox.com>
+Date: Fri, 11 Apr 2025 12:43:30 +0200
+Subject: [PATCH] setup: drop faulty install line for non-existing ifupdown2d
+
+This file/executable does not actually exist, seems like a bogus sync
+from internal branches.
+
+Upstream-Bug: https://github.com/CumulusNetworks/ifupdown2/issues/324
+Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index b555c7b2..97fe7003 100755
+--- a/setup.py
++++ b/setup.py
+@@ -30,7 +30,6 @@ def build_deb_package():
+
+
+ if build_deb_package():
+- DATA_FILES.append(('/usr/share/ifupdown2/', ['ifupdown2/ifupdown2d']))
+ DATA_FILES.append(('/usr/share/ifupdown2/sbin/', ['ifupdown2/sbin/start-networking']))
+ else:
+ ENTRY_POINTS = {
+--
+2.48.1
+
diff --git a/debian/patches/series b/debian/patches/series
index 7ae3f0a..23ccbe6 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
+upstream/0001-add-IPv6-SLAAC-support-inet6-auto-and-router-adverti.patch
pve/0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch
pve/0002-add-dummy-mtu-bridgevlanport-modules.patch
pve/0003-don-t-remove-bridge-is-tap-veth-are-still-plugged.patch
@@ -8,9 +9,4 @@ pve/0007-allow-vlan-tag-inside-vxlan-tunnel.patch
pve/0008-lacp-bond-remove-bond-min-links-0-warning.patch
pve/0009-gvgeb-fix-python-interpreter-shebang.patch
pve/0010-main-ignore-dpkg-files-when-running-hook-scripts.patch
-upstream/0001-add-ipv6-slaac-support-inet6-auto-accept_ra.patch
-upstream/0001-addons-ethtool-add-rx-vlan-filter.patch
-upstream/0001-scheduler-import-traceback.patch
-upstream/0001-addons-vxlan-fix-compare-between-remote-ips-and-old_.patch
-upstream/0001-scheduler-avoid-waiting-for-stdout-eof-of-etc-networ.patch
-upstream/0001-vxlan-fix-vni-filter.patch
+pve/0011-setup-drop-faulty-install-line-for-non-existing-ifup.patch
diff --git a/debian/patches/upstream/0001-add-ipv6-slaac-support-inet6-auto-accept_ra.patch b/debian/patches/upstream/0001-add-IPv6-SLAAC-support-inet6-auto-and-router-adverti.patch
similarity index 81%
rename from debian/patches/upstream/0001-add-ipv6-slaac-support-inet6-auto-accept_ra.patch
rename to debian/patches/upstream/0001-add-IPv6-SLAAC-support-inet6-auto-and-router-adverti.patch
index a8d6106..b8095a7 100644
--- a/debian/patches/upstream/0001-add-ipv6-slaac-support-inet6-auto-accept_ra.patch
+++ b/debian/patches/upstream/0001-add-IPv6-SLAAC-support-inet6-auto-and-router-adverti.patch
@@ -1,31 +1,72 @@
-From fd844b0557337e714a7e11ed6c39bc8164709a46 Mon Sep 17 00:00:00 2001
-From: Alexandre Derumier <aderumier@odiso.com>
-Date: Tue, 9 May 2023 17:48:14 +0200
-Subject: add ipv6 slaac support (inet6 auto && accept_ra)
+From b9657e58a6f46dbab25a045ceb52b8a22994a0e3 Mon Sep 17 00:00:00 2001
+From: Christoph Heiss <c.heiss@proxmox.com>
+Date: Fri, 11 Apr 2025 13:57:07 +0200
+Subject: [PATCH] add IPv6 SLAAC support (inet6 auto and router advertisements)
-This should fix a lot of users request in the forum,
-and also fix upgrade from ifupdown1 to ifupdown2 if user have "inet6 auto" in configuration.
-(default on stock debian install, this break pbs install on top of stock debian)
+This should fix a lot of users request in the forum, and also fix
+upgrade from ifupdown1 to ifupdown2 if user have "inet6 auto" in
+configuration. (default on stock debian install, this break pbs install
+on top of stock debian) The current code is buggy if an interface only
+use ipv6.
-upstream pull request:
-
-https://github.com/CumulusNetworks/ifupdown2/pull/259
-Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
+Upstream-Link: https://github.com/CumulusNetworks/ifupdown2/pull/325
+Authored-By: Alexandre Derumier <aderumier@odiso.com>
+Co-Authored-By: Christoph Heiss <c.heiss@proxmox.com>
+Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
+ .gitignore | 9 ++
+ Makefile | 4 +
etc/network/ifupdown2/addons.conf | 2 +
- ifupdown2/addons/address.py | 108 +++++++++++++--
- ifupdown2/addons/auto.py | 168 ++++++++++++++++++++++++
+ ifupdown2/addons/address.py | 114 ++++++++++++++--
+ ifupdown2/addons/auto.py | 164 ++++++++++++++++++++++++
ifupdown2/addons/dhcp.py | 18 +--
ifupdown2/ifupdown/iface.py | 4 +
ifupdown2/ifupdown/networkinterfaces.py | 2 +-
ifupdown2/lib/nlcache.py | 63 ++++++++-
ifupdown2/man/interfaces.5.rst | 9 ++
ifupdown2/nlmanager/nlpacket.py | 24 +++-
- 9 files changed, 372 insertions(+), 26 deletions(-)
+ 11 files changed, 383 insertions(+), 30 deletions(-)
create mode 100644 ifupdown2/addons/auto.py
+diff --git a/.gitignore b/.gitignore
+index 23bc3fa4..d72cbc39 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -26,6 +26,15 @@ wheels/
+ .installed.cfg
+ *.egg
+ MANIFEST
++.pybuild/
++man/
++
++# Debian packaging
++debian/files
++debian/.debhelper/
++debian/*.debhelper
++debian/*.substvars
++debian/ifupdown2
+
+ # PyInstaller
+ # Usually these files are written by a python script from a template
+diff --git a/Makefile b/Makefile
+index e7e2bf4d..cf48426e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -35,8 +35,12 @@ clean-build: ## remove build artifacts
+ rm -fr build/
+ rm -fr dist/
+ rm -fr .eggs/
++ rm -fr .pybuild/
++ rm -fr man/
+ find . -name '*.egg-info' -exec rm -fr {} +
+ find . -name '*.egg' -exec rm -f {} +
++ rm -fr debian/files debian/.debhelper debian/ifupdown2 debian/ifupdown2.substvars
++ find debian -name '*.debhelper' -exec rm -f {} +
+
+ clean-pyc: ## remove Python file artifacts
+ find . -name '*.pyc' -exec rm -f {} +
diff --git a/etc/network/ifupdown2/addons.conf b/etc/network/ifupdown2/addons.conf
-index a8f2317..5a3964d 100644
+index 726d63a0..67de25fe 100644
--- a/etc/network/ifupdown2/addons.conf
+++ b/etc/network/ifupdown2/addons.conf
@@ -15,6 +15,7 @@ pre-up,mstpctl
@@ -36,7 +77,7 @@ index a8f2317..5a3964d 100644
pre-up,address
up,dhcp
up,address
-@@ -30,6 +31,7 @@ pre-down,usercmds
+@@ -28,6 +29,7 @@ pre-down,usercmds
pre-down,vxrd
pre-down,dhcp
down,ppp
@@ -45,32 +86,33 @@ index a8f2317..5a3964d 100644
down,address
down,usercmds
diff --git a/ifupdown2/addons/address.py b/ifupdown2/addons/address.py
-index e71a26f..bb5589e 100644
+index 3d961032..500fdf3b 100644
--- a/ifupdown2/addons/address.py
+++ b/ifupdown2/addons/address.py
-@@ -188,6 +188,19 @@ class address(AddonWithIpBlackList, moduleBase):
- 'default': 'off',
- 'example': ['arp-accept on']
- },
+@@ -194,7 +194,19 @@ class address(AddonWithIpBlackList, moduleBase):
+ "validvals": ['on', 'off', 'yes', 'no', '0', '1'],
+ "default": "no",
+ "aliases": ["disable-ip6"]
+- }
++ },
+ 'accept-ra': {
-+ 'help': 'accept ipv6 router advertisement',
++ 'help': 'Accept IPv6 router advertisements',
+ 'validvals': ['0', '1', '2'],
+ 'default': '0',
+ 'example': ['accept-ra 1']
+ },
+ 'autoconf': {
-+ 'help': 'enable ipv6 slaac autoconfiguration',
++ 'help': 'Enable IPv6 slaac autoconfiguration',
+ 'validvals': ['0', '1'],
+ 'default': '0',
+ 'example': ['autoconf 1']
+ },
-+
}
}
-@@ -256,6 +269,16 @@ class address(AddonWithIpBlackList, moduleBase):
- attr="check_l3_svi_ip_forwarding")
- )
+@@ -272,6 +284,15 @@ class address(AddonWithIpBlackList, moduleBase):
+
+ self.mac_regex = re.compile(r"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$")
+ try:
+ self.default_accept_ra = str(self.sysctl_get('net.ipv6.conf.all.accept_ra'))
@@ -81,11 +123,10 @@ index e71a26f..bb5589e 100644
+ self.default_autoconf = str(self.sysctl_get('net.ipv6.conf.all.autoconf'))
+ except Exception:
+ self.default_autoconf = 1
-+
+
def __policy_get_default_mtu(self):
default_mtu = policymanager.policymanager_api.get_attr_default(
- module_name=self.__class__.__name__,
-@@ -627,21 +650,31 @@ class address(AddonWithIpBlackList, moduleBase):
+@@ -682,21 +703,31 @@ class address(AddonWithIpBlackList, moduleBase):
if force_reapply:
self.__add_ip_addresses_with_attributes(ifaceobj, ifname, user_config_ip_addrs_list)
return
@@ -122,7 +163,15 @@ index e71a26f..bb5589e 100644
self.netlink.addr_del(ifname, addr)
except Exception as e:
self.log_warn(str(e))
-@@ -872,7 +905,9 @@ class address(AddonWithIpBlackList, moduleBase):
+@@ -923,14 +954,15 @@ class address(AddonWithIpBlackList, moduleBase):
+ self._propagate_mtu_to_upper_devs(ifaceobj, self.default_mtu, self.default_mtu_int, ifaceobj_getfunc)
+
+ def _set_bridge_forwarding(self, ifaceobj):
+- """ set ip forwarding to 0 if bridge interface does not have a
+- ip nor svi """
++ """ Disable IP forwarding if bridge interface does not have a IP nor SVI. """
+ ifname = ifaceobj.name
+
netconf_ipv4_forwarding = self.cache.get_netconf_forwarding(socket.AF_INET, ifname)
netconf_ipv6_forwarding = self.cache.get_netconf_forwarding(socket.AF_INET6, ifname)
@@ -133,7 +182,7 @@ index e71a26f..bb5589e 100644
if netconf_ipv4_forwarding:
self.sysctl_write_forwarding_value_to_proc(ifname, "ipv4", 0)
if netconf_ipv6_forwarding:
-@@ -886,6 +921,43 @@ class address(AddonWithIpBlackList, moduleBase):
+@@ -944,6 +976,41 @@ class address(AddonWithIpBlackList, moduleBase):
def sysctl_write_forwarding_value_to_proc(self, ifname, family, value):
self.write_file("/proc/sys/net/%s/conf/%s/forwarding" % (family, ifname), "%s\n" % value)
@@ -142,6 +191,8 @@ index e71a26f..bb5589e 100644
+ if addr_method not in ["auto"]:
+
+ try:
++ sysctl_ifname = '/'.join(ifaceobj.name.split("."))
++
+ running_accept_ra = self.cache.get_link_inet6_accept_ra(ifaceobj)
+ if running_accept_ra == '':
+ running_accept_ra = self.default_accept_ra
@@ -150,9 +201,7 @@ index e71a26f..bb5589e 100644
+ accept_ra = self.default_accept_ra
+
+ if running_accept_ra != accept_ra:
-+ self.sysctl_set('net.ipv6.conf.%s.accept_ra'
-+ %('/'.join(ifaceobj.name.split("."))),
-+ accept_ra)
++ self.sysctl_set(f'net.ipv6.conf.{sysctl_ifname}.accept_ra', accept_ra)
+ self.cache.update_link_inet6_accept_ra(ifaceobj.name, accept_ra)
+
+ running_autoconf = self.cache.get_link_inet6_autoconf(ifaceobj)
@@ -163,9 +212,7 @@ index e71a26f..bb5589e 100644
+ autoconf = self.default_autoconf
+
+ if running_autoconf != autoconf:
-+ self.sysctl_set('net.ipv6.conf.%s.autoconf'
-+ %('/'.join(ifaceobj.name.split("."))),
-+ autoconf)
++ self.sysctl_set(f'net.ipv6.conf.{sysctl_ifname}.autoconf', autoconf)
+ self.cache.update_link_inet6_autoconf(ifaceobj.name, autoconf)
+
+ except Exception as e:
@@ -177,7 +224,16 @@ index e71a26f..bb5589e 100644
def _sysctl_config(self, ifaceobj):
setting_default_value = False
mpls_enable = ifaceobj.get_attr_value_first('mpls-enable');
-@@ -979,6 +1051,8 @@ class address(AddonWithIpBlackList, moduleBase):
+@@ -970,7 +1037,7 @@ class address(AddonWithIpBlackList, moduleBase):
+
+ if (ifaceobj.link_kind & ifaceLinkKind.BRIDGE):
+ self._set_bridge_forwarding(ifaceobj)
+-
++ self._sysctl_slaac(ifaceobj)
+ if not self.syntax_check_sysctls(ifaceobj):
+ return
+ if not self.syntax_check_l3_svi_ip_forward(ifaceobj):
+@@ -1037,6 +1104,8 @@ class address(AddonWithIpBlackList, moduleBase):
ifaceobj.status = ifaceStatus.ERROR
self.logger.error('%s: %s' %(ifaceobj.name, str(e)))
@@ -186,7 +242,7 @@ index e71a26f..bb5589e 100644
def process_mtu(self, ifaceobj, ifaceobj_getfunc):
if ifaceobj.link_privflags & ifaceLinkPrivFlags.OPENVSWITCH:
-@@ -1016,7 +1090,7 @@ class address(AddonWithIpBlackList, moduleBase):
+@@ -1074,7 +1143,7 @@ class address(AddonWithIpBlackList, moduleBase):
# no need to go further during perfmode (boot)
return
@@ -195,7 +251,7 @@ index e71a26f..bb5589e 100644
return
if not user_configured_ipv6_addrgen:
-@@ -1213,7 +1287,7 @@ class address(AddonWithIpBlackList, moduleBase):
+@@ -1330,7 +1399,7 @@ class address(AddonWithIpBlackList, moduleBase):
if not self.cache.link_exists(ifaceobj.name):
return
addr_method = ifaceobj.addr_method
@@ -204,10 +260,11 @@ index e71a26f..bb5589e 100644
if ifaceobj.get_attr_value_first('address-purge')=='no':
addrlist = ifaceobj.get_attr_value('address')
for addr in addrlist or []:
-@@ -1326,6 +1400,22 @@ class address(AddonWithIpBlackList, moduleBase):
+@@ -1450,6 +1519,25 @@ class address(AddonWithIpBlackList, moduleBase):
ifaceobjcurr.update_config_with_status('mpls-enable',
running_mpls_enable,
mpls_enable != running_mpls_enable)
++ return
+
+ accept_ra = ifaceobj.get_attr_value_first('accept-ra')
+ if accept_ra:
@@ -224,10 +281,12 @@ index e71a26f..bb5589e 100644
+ ifaceobjcurr.update_config_with_status('autoconf',
+ running_autoconf,
+ autoconf != running_autoconf)
- return
++
++ return
def query_check_ipv6_addrgen(self, ifaceobj, ifaceobjcurr):
-@@ -1380,7 +1470,7 @@ class address(AddonWithIpBlackList, moduleBase):
+ ipv6_addrgen = ifaceobj.get_attr_value_first('ipv6-addrgen')
+@@ -1517,7 +1605,7 @@ class address(AddonWithIpBlackList, moduleBase):
def _query_check_address(self, ifaceobj, ifaceobjcurr, ifaceobj_getfunc):
""" ifquery-check: attribute: "address" """
@@ -238,15 +297,13 @@ index e71a26f..bb5589e 100644
if ifaceobj_getfunc:
diff --git a/ifupdown2/addons/auto.py b/ifupdown2/addons/auto.py
new file mode 100644
-index 0000000..02e6ca4
+index 00000000..b54becdb
--- /dev/null
+++ b/ifupdown2/addons/auto.py
-@@ -0,0 +1,168 @@
+@@ -0,0 +1,164 @@
+#!/usr/bin/env python3
+#
+
-+import re
-+import time
+import socket
+
+try:
@@ -274,7 +331,7 @@ index 0000000..02e6ca4
+
+
+class auto(Addon, moduleBase):
-+ """ ifupdown2 addon module to configure slaac on inet6 interface """
++ """ ifupdown2 addon module to configure SLAAC on inet6 interfaces """
+
+ def __init__(self, *args, **kargs):
+ Addon.__init__(self)
@@ -291,25 +348,23 @@ index 0000000..02e6ca4
+ def _up(self, ifaceobj):
+
+ if ifaceobj.link_privflags & ifaceLinkPrivFlags.KEEP_LINK_DOWN:
-+ self.logger.info("%s: skipping auto configuration: link-down yes" % ifaceobj.name)
++ self.logger.info(f'{ifaceobj.name}: skipping auto configuration: link-down yes')
+ return
+
+ try:
+ if 'inet6' in ifaceobj.addr_family:
++ sysctl_ifname = '/'.join(ifaceobj.name.split("."))
++
+ running_accept_ra = self.cache.get_link_inet6_accept_ra(ifaceobj)
+ if running_accept_ra != '2':
+ accept_ra = '2'
-+ self.sysctl_set('net.ipv6.conf.%s.accept_ra'
-+ %('/'.join(ifaceobj.name.split("."))),
-+ accept_ra)
++ self.sysctl_set(f'net.ipv6.conf.{sysctl_ifname}.accept_ra', accept_ra)
+ self.cache.update_link_inet6_accept_ra(ifaceobj.name, accept_ra)
+
+ running_autoconf = self.cache.get_link_inet6_autoconf(ifaceobj)
+ if running_autoconf != '1':
+ autoconf = '1'
-+ self.sysctl_set('net.ipv6.conf.%s.autoconf'
-+ %('/'.join(ifaceobj.name.split("."))),
-+ autoconf)
++ self.sysctl_set(f'net.ipv6.conf.{sysctl_ifname}.autoconf', autoconf)
+ self.cache.update_link_inet6_autoconf(ifaceobj.name, autoconf)
+
+ except Exception as e:
@@ -348,7 +403,7 @@ index 0000000..02e6ca4
+ return list(self._run_ops.keys())
+
+ def run(self, ifaceobj, operation, query_ifaceobj=None, **extra_args):
-+ """ run dhcp configuration on the interface object passed as argument
++ """ Run DHCP configuration on the interface object passed as argument.
+
+ Args:
+ **ifaceobj** (object): iface object
@@ -357,12 +412,12 @@ index 0000000..02e6ca4
+ 'query-running'
+
+ Kwargs:
-+ **query_ifaceobj** (object): query check ifaceobject. This is only
++ **query_ifaceobj** (object): Query check ifaceobject. This is only
+ valid when op is 'query-checkcurr'. It is an object same as
-+ ifaceobj, but contains running attribute values and its config
-+ status. The modules can use it to return queried running state
-+ of interfaces. status is success if the running state is same
-+ as user required state in ifaceobj. error otherwise.
++ ifaceobj, but contains current attribute values and its config
++ status. The module can use it to return the queried running
++ state of interfaces. Returns 'SUCCESS' if the running state is
++ the same as user-required state in ifaceobj, 'ERROR' otherwise.
+ """
+ op_handler = self._run_ops.get(operation)
+ if not op_handler:
@@ -397,7 +452,7 @@ index 0000000..02e6ca4
+ if syslog_log_level >= logging.INFO:
+ log_manager.set_level_syslog(logging.INFO)
+
-+ self.logger.info("%s: enabling syslog for auto configuration" % ifaceobj.name)
++ self.logger.info(f'{ifaceobj.name}: enabling syslog for auto configuration')
+
+ try:
+ if operation == 'query-checkcurr':
@@ -411,10 +466,10 @@ index 0000000..02e6ca4
+ elif disable_syslog_on_exit is False:
+ log_manager.set_level_syslog(syslog_log_level)
diff --git a/ifupdown2/addons/dhcp.py b/ifupdown2/addons/dhcp.py
-index a5bf860..22bbdb4 100644
+index 9b2f5f9b..cff81b40 100644
--- a/ifupdown2/addons/dhcp.py
+++ b/ifupdown2/addons/dhcp.py
-@@ -193,20 +193,10 @@ class dhcp(Addon, moduleBase):
+@@ -204,20 +204,10 @@ class dhcp(Addon, moduleBase):
self.logger.info('dhclient6 already running on %s. '
'Not restarting.' % ifaceobj.name)
else:
@@ -440,7 +495,7 @@ index a5bf860..22bbdb4 100644
#make sure the configured interface/link is up.
if timeout > 1:
diff --git a/ifupdown2/ifupdown/iface.py b/ifupdown2/ifupdown/iface.py
-index 07bd067..325e6c3 100644
+index e18b8151..4900a5d3 100644
--- a/ifupdown2/ifupdown/iface.py
+++ b/ifupdown2/ifupdown/iface.py
@@ -289,6 +289,8 @@ class ifaceJsonEncoder(json.JSONEncoder):
@@ -452,7 +507,7 @@ index 07bd067..325e6c3 100644
else:
retifacedict['addr_method'] = o.addr_method
if o.addr_family:
-@@ -843,6 +845,8 @@ class iface():
+@@ -851,6 +853,8 @@ class iface():
# both inet and inet6 addr_family
if addr_method and family == 'inet' and 'dhcp' in addr_method:
addr_method = 'dhcp'
@@ -462,10 +517,10 @@ index 07bd067..325e6c3 100644
addr_method=addr_method,
with_status=with_status,
diff --git a/ifupdown2/ifupdown/networkinterfaces.py b/ifupdown2/ifupdown/networkinterfaces.py
-index 2bebe39..3803590 100644
+index c0c8ad96..37e73140 100644
--- a/ifupdown2/ifupdown/networkinterfaces.py
+++ b/ifupdown2/ifupdown/networkinterfaces.py
-@@ -30,7 +30,7 @@ class networkInterfaces():
+@@ -35,7 +35,7 @@ class networkInterfaces():
""" debian ifupdown /etc/network/interfaces file parser """
_addrfams = {'inet' : ['static', 'manual', 'loopback', 'dhcp', 'dhcp6', 'ppp', 'tunnel'],
@@ -475,7 +530,7 @@ index 2bebe39..3803590 100644
def __init__(self, interfacesfile='/etc/network/interfaces',
diff --git a/ifupdown2/lib/nlcache.py b/ifupdown2/lib/nlcache.py
-index 0b1c6d2..0d2f624 100644
+index e2fd5681..e0235573 100644
--- a/ifupdown2/lib/nlcache.py
+++ b/ifupdown2/lib/nlcache.py
@@ -152,7 +152,7 @@ class _NetlinkCache:
@@ -563,7 +618,7 @@ index 0b1c6d2..0d2f624 100644
try:
with self._cache_lock:
diff --git a/ifupdown2/man/interfaces.5.rst b/ifupdown2/man/interfaces.5.rst
-index 262d726..ca461ea 100644
+index 262d7265..ca461eae 100644
--- a/ifupdown2/man/interfaces.5.rst
+++ b/ifupdown2/man/interfaces.5.rst
@@ -106,6 +106,12 @@ METHODS
@@ -590,7 +645,7 @@ index 262d726..ca461ea 100644
source /etc/network/interfaces.d/*
diff --git a/ifupdown2/nlmanager/nlpacket.py b/ifupdown2/nlmanager/nlpacket.py
-index 8972c76..0090529 100644
+index a2e2b677..65cbb9a9 100644
--- a/ifupdown2/nlmanager/nlpacket.py
+++ b/ifupdown2/nlmanager/nlpacket.py
@@ -1818,6 +1818,15 @@ class AttributeIFLA_AF_SPEC(Attribute):
@@ -633,5 +688,5 @@ index 8972c76..0090529 100644
# nlmanager doesn't support multiple kernel version
--
-2.39.2
+2.48.1
diff --git a/debian/patches/upstream/0001-addons-ethtool-add-rx-vlan-filter.patch b/debian/patches/upstream/0001-addons-ethtool-add-rx-vlan-filter.patch
deleted file mode 100644
index aad6c24..0000000
--- a/debian/patches/upstream/0001-addons-ethtool-add-rx-vlan-filter.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From a087295ba496680b81ecafe72f999d4e9076e737 Mon Sep 17 00:00:00 2001
-From: Alexandre Derumier <aderumier@odiso.com>
-Date: Fri, 23 Jun 2023 09:13:39 +0200
-Subject: [PATCH] addons: ethtool: add rx-vlan-filter
-
-some nic like mellanox connectx don't work well with
-vlan aware bridge && rx-vlan-filter.
-(They are limited in number of vlans in hardware filtering,
-and break with big number of vlans like bridge-vids 2-4096)
-
-Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
----
- ifupdown2/addons/ethtool.py | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/ifupdown2/addons/ethtool.py b/ifupdown2/addons/ethtool.py
-index 2134329..8a79472 100644
---- a/ifupdown2/addons/ethtool.py
-+++ b/ifupdown2/addons/ethtool.py
-@@ -117,6 +117,12 @@ class ethtool(Addon, moduleBase):
- 'validvals': ['on', 'off'],
- 'default': 'varies by interface'
- },
-+ 'rx-vlan-filter': {
-+ 'help': 'RX Vlan Filter',
-+ 'example': ['rx-vlan-filter off'],
-+ 'validvals': ['on', 'off'],
-+ 'default': 'varies by interface'
-+ },
- 'ring-rx': {
- 'help': 'Ring RX Parameter',
- 'example': ['ring-rx 512'],
-@@ -384,6 +390,7 @@ class ethtool(Addon, moduleBase):
- self.do_offload_settings(ifaceobj, 'ufo-offload', 'ufo')
- self.do_offload_settings(ifaceobj, 'tx-offload', 'tx')
- self.do_offload_settings(ifaceobj, 'rx-offload', 'rx')
-+ self.do_offload_settings(ifaceobj, 'rx-vlan-filter', 'rx-vlan-filter')
-
- def _pre_down(self, ifaceobj):
- pass #self._post_up(ifaceobj,operation="_pre_down")
---
-2.39.2
-
diff --git a/debian/patches/upstream/0001-addons-vxlan-fix-compare-between-remote-ips-and-old_.patch b/debian/patches/upstream/0001-addons-vxlan-fix-compare-between-remote-ips-and-old_.patch
deleted file mode 100644
index 0274279..0000000
--- a/debian/patches/upstream/0001-addons-vxlan-fix-compare-between-remote-ips-and-old_.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 0a856df326649e78f5e790e01ddd843ab551e5ba Mon Sep 17 00:00:00 2001
-From: Alexandre Derumier <aderumier@odiso.com>
-Date: Mon, 20 Nov 2023 12:55:11 +0100
-Subject: [PATCH] addons: vxlan: fix compare between remote-ips and
- old_remote_ips
-
-fix regression from
-https://github.com/CumulusNetworks/ifupdown2/commit/35a4278ffb588ddd9e610f9395853ff35923c069
-
-remote-ips can be None (with evpn for example) but old_remote_ips is an empty list.
-So the condition is always matching
-
-Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
----
- ifupdown2/addons/vxlan.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/ifupdown2/addons/vxlan.py b/ifupdown2/addons/vxlan.py
-index 084aec9..e36d40c 100644
---- a/ifupdown2/addons/vxlan.py
-+++ b/ifupdown2/addons/vxlan.py
-@@ -1244,7 +1244,7 @@ class vxlan(Vxlan, moduleBase):
- # purge any removed remote ip
- old_remoteips = self.get_old_remote_ips(ifaceobj.name)
-
-- if vxlan_purge_remotes or remoteips or (remoteips != old_remoteips):
-+ if vxlan_purge_remotes or (isinstance(remoteips,list) and remoteips != old_remoteips):
- # figure out the diff for remotes and do the bridge fdb updates
- # only if provisioned by user and not by an vxlan external
- # controller.
---
-2.39.2
-
diff --git a/debian/patches/upstream/0001-scheduler-avoid-waiting-for-stdout-eof-of-etc-networ.patch b/debian/patches/upstream/0001-scheduler-avoid-waiting-for-stdout-eof-of-etc-networ.patch
deleted file mode 100644
index e377e56..0000000
--- a/debian/patches/upstream/0001-scheduler-avoid-waiting-for-stdout-eof-of-etc-networ.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 1303d9211d82326f7c55d56db13eed66bb1c6535 Mon Sep 17 00:00:00 2001
-From: Friedrich Weber <f.weber@proxmox.com>
-Date: Tue, 26 Sep 2023 13:33:36 +0200
-Subject: [PATCH] scheduler: avoid waiting for stdout eof of /etc/network/
- scripts
-
-Scripts in /etc/network/ are executed using `exec_command` which
-captures stdout by default, and thus waits for stdout end-of-file via
-`Popen.communicate()`. However, this can cause hangs if the network
-script executes a long-running command in the background. Can be
-reproduced by putting the following (executable) script in
-/etc/network/if-up.d/:
-
- #!/bin/sh
- sleep 5&
-
-This script will cause `ifreload -a` to wait for 5 seconds per network
-interface.
-
-To avoid waiting, do not capture stdout when executing /etc/network/
-scripts. This also improves compatibility with ifupdown, which runs
-the above script in the background.
-
-Signed-off-by: Friedrich Weber <f.weber@proxmox.com>
----
- ifupdown2/ifupdown/scheduler.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/ifupdown2/ifupdown/scheduler.py b/ifupdown2/ifupdown/scheduler.py
-index fda6ff2..e4d579f 100644
---- a/ifupdown2/ifupdown/scheduler.py
-+++ b/ifupdown2/ifupdown/scheduler.py
-@@ -142,7 +142,7 @@ class ifaceScheduler():
- for mname in ifupdownobj.script_ops.get(op, []):
- ifupdownobj.logger.debug("%s: %s : running script %s" % (ifacename, op, mname))
- try:
-- utils.exec_command(mname, env=command_env)
-+ utils.exec_command(mname, env=command_env, stdout=False)
- except Exception as e:
- if "permission denied" in str(e).lower():
- ifupdownobj.logger.warning('%s: %s %s' % (ifacename, op, str(e)))
---
-2.39.2
-
diff --git a/debian/patches/upstream/0001-scheduler-import-traceback.patch b/debian/patches/upstream/0001-scheduler-import-traceback.patch
deleted file mode 100644
index 296445d..0000000
--- a/debian/patches/upstream/0001-scheduler-import-traceback.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 4b674a4c722c3e2072cf9e7d6d08195d9da7b698 Mon Sep 17 00:00:00 2001
-From: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
-Date: Mon, 26 Jun 2023 11:14:26 +0200
-Subject: [PATCH] scheduler: import traceback
-
-if a script in /etc/network/ifup.d/ is segfaulting,
-
-on config loading (ifup -a), ifupdown2 is stopping
-
-ifup -a
-"
-info: executing2 /etc/network/if-up.d/postfix
-debug: lo: up : running script /etc/network/if-up.d/resolved
-info: executing2 /etc/network/if-up.d/resolved
-error: name 'traceback' is not defined
-debug: saving state ..
-info: exit status 1
-"
-
-with this fix:
-
-debug: lo: up : running script /etc/network/if-up.d/resolved
-info: executing2 /etc/network/if-up.d/resolved
- File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 325, in run_iface_list
- cls.run_iface_graph(ifupdownobj, ifacename, ops, parent,
- File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 315, in run_iface_graph
- cls.run_iface_list_ops(ifupdownobj, ifaceobjs, ops)
- File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 188, in run_iface_list_ops
- cls.run_iface_op(ifupdownobj, ifaceobj, op,
- File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 150, in run_iface_op
- ifupdownobj.log_error('%s: %s %s' % (ifacename, op, str(e)))
- File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 226, in log_error
- raise Exception(str)
-error: lo : lo: up cmd '/etc/network/if-up.d/resolved' failed: returned -11
-debug: vmbr0: found dependents ['bond0']
-debug: bond0: found dependents ['enp65s0d1', 'enp65s0']
-info: enp65s0d1: running ops ...
-...
-...
-
-Signed-off-by: Alexandre Derumier <alexandre.derumier@groupe-cyllene.com>
----
- ifupdown2/ifupdown/scheduler.py | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/ifupdown2/ifupdown/scheduler.py b/ifupdown2/ifupdown/scheduler.py
-index 154e557..fda6ff2 100644
---- a/ifupdown2/ifupdown/scheduler.py
-+++ b/ifupdown2/ifupdown/scheduler.py
-@@ -9,6 +9,7 @@
-
- import os
- import sys
-+import traceback
-
- from collections import OrderedDict
-
---
-2.39.2
-
diff --git a/debian/patches/upstream/0001-vxlan-fix-vni-filter.patch b/debian/patches/upstream/0001-vxlan-fix-vni-filter.patch
deleted file mode 100644
index 3944dc6..0000000
--- a/debian/patches/upstream/0001-vxlan-fix-vni-filter.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 1707ffa1ceef7f8f444bdb4ad3477700d99feffb Mon Sep 17 00:00:00 2001
-From: Vincent Bernat <vincent@bernat.ch>
-Date: Mon, 4 Sep 2023 18:36:51 +0200
-Subject: [PATCH] addons: vxlan: fix VNI filter on single VXLAN device
-
-In af8d5db22b10909ff06032f1a2acc2f745d1f65b, the transformation of
-`vnis` (list) to `vnisd` (dictionary) left a reference to `vnis` which
-is now undefined. We just remove the line as the conversion from range
-to ints is done earlier in the function.
-
-Signed-off-by: Vincent Bernat <vincent@bernat.ch>
----
- ifupdown2/addons/vxlan.py | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/ifupdown2/addons/vxlan.py b/ifupdown2/addons/vxlan.py
-index 084aec98..3bde50aa 100644
---- a/ifupdown2/addons/vxlan.py
-+++ b/ifupdown2/addons/vxlan.py
-@@ -1049,7 +1049,6 @@ def single_vxlan_device_vni_filter(self, ifaceobj, vxlan_mcast_grp):
- self.logger.error("%s: %s (%s)" %(ifaceobj.name, vlan_vni_map, str(e)))
- return
-
-- vnis_int = utils.ranges_to_ints(vnis)
- self.iproute2.bridge_link_update_vni_filter(ifaceobj.name, vnisd)
-
- def check_and_raise_svd_tvd_errors(self, ifaceobj):
diff --git a/debian/rules b/debian/rules
index cb315fe..491a75c 100755
--- a/debian/rules
+++ b/debian/rules
@@ -4,8 +4,11 @@
export PYBUILD_NAME=ifupdown2
export PYBUILD_INSTALL_ARGS=--install-lib=/usr/share/ --install-scripts=/usr/share/
+# tests are end-to-end and have external dependencies such as test machines
+export PYBUILD_DISABLE=test
+
%:
- dh $@ --with=python3 --buildsystem=pybuild
+ dh $@ --with=python3 --with-systemd --buildsystem=pybuild
override_dh_installman:
./ifupdown2/man/genmanpages.sh ./ifupdown2/man ./man
diff --git a/ifupdown2 b/ifupdown2
index a052254..834bd6d 160000
--- a/ifupdown2
+++ b/ifupdown2
@@ -1 +1 @@
-Subproject commit a0522546b848435115a20eb647f87ade01761a33
+Subproject commit 834bd6db936eb3f55f56a8b565b93b33cda0bae3
--
2.49.0
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* [pve-devel] [RFC PATCH ifupdown2 6/7] d/patches: add patch for adding IPv6 vxlan-local-tunnelip
2025-04-23 10:45 [pve-devel] [PATCH ifupdown2 0/7] bump to upstream 3.9.0 release Christoph Heiss
` (4 preceding siblings ...)
2025-04-23 10:45 ` [pve-devel] [PATCH ifupdown2 5/7] bump version to 3.9.0-1+pmx1 Christoph Heiss
@ 2025-04-23 10:45 ` Christoph Heiss
2025-04-23 10:45 ` [pve-devel] [RFC PATCH ifupdown2 7/7] bump version to 3.9.0-1+pmx2 Christoph Heiss
6 siblings, 0 replies; 8+ messages in thread
From: Christoph Heiss @ 2025-04-23 10:45 UTC (permalink / raw)
To: pve-devel
This patch makes it possible to use an IPv6 address for the local VXLAN
tunnel address.
Upstream-Link: https://github.com/CumulusNetworks/ifupdown2/pull/315
Suggested-by: Stefan Hanreich <s.hanreich@proxmox.com>
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
Stefan suggested the inclusion of this patch, as it's been a fairly
requested features.
Split it off completely from the other changes and marked it as RFC tho,
as upstream still doesn't seem to have decided if the attribute should
be renamed to `vxlan-local-tunnelip6`. Pulling it in now would mean that
we're "stuck" with that name, if we don't want to break users later on,
if the attribute is really renamed.
(Or we could support both styles in that case.)
debian/patches/series | 1 +
...upport-for-IPv6-vxlan-local-tunnelip.patch | 127 ++++++++++++++++++
2 files changed, 128 insertions(+)
create mode 100644 debian/patches/upstream/0002-vxlan-Add-support-for-IPv6-vxlan-local-tunnelip.patch
diff --git a/debian/patches/series b/debian/patches/series
index eab43d8..c74322a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,4 +1,5 @@
upstream/0001-add-IPv6-SLAAC-support-inet6-auto-and-router-adverti.patch
+upstream/0002-vxlan-Add-support-for-IPv6-vxlan-local-tunnelip.patch
pve/0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch
pve/0002-add-dummy-mtu-bridgevlanport-modules.patch
pve/0003-don-t-remove-bridge-is-tap-veth-are-still-plugged.patch
diff --git a/debian/patches/upstream/0002-vxlan-Add-support-for-IPv6-vxlan-local-tunnelip.patch b/debian/patches/upstream/0002-vxlan-Add-support-for-IPv6-vxlan-local-tunnelip.patch
new file mode 100644
index 0000000..84bcd00
--- /dev/null
+++ b/debian/patches/upstream/0002-vxlan-Add-support-for-IPv6-vxlan-local-tunnelip.patch
@@ -0,0 +1,127 @@
+From acd3065a3c509a57be7077c38c19536c78e351f6 Mon Sep 17 00:00:00 2001
+From: Wido den Hollander <wido@widodh.nl>
+Date: Thu, 17 Apr 2025 10:44:44 +0200
+Subject: [PATCH] vxlan: Add support for IPv6 vxlan-local-tunnelip
+
+This commit adds the option to pass an IPv6 address instead of an IPv4 address to use as
+local tunnel IP address. With this change it's possible to use IPv6 as the underlay for
+a VXLAN based network without the need for IPv4.
+
+Upstream-Link: https://github.com/CumulusNetworks/ifupdown2/pull/315
+---
+ ifupdown2/addons/vxlan.py | 12 +++++++-----
+ ifupdown2/lib/iproute2.py | 23 ++++++++++++++++-------
+ 2 files changed, 23 insertions(+), 12 deletions(-)
+
+diff --git a/ifupdown2/addons/vxlan.py b/ifupdown2/addons/vxlan.py
+index 4cab0332..2f9174f8 100644
+--- a/ifupdown2/addons/vxlan.py
++++ b/ifupdown2/addons/vxlan.py
+@@ -51,7 +51,7 @@ class vxlan(Vxlan, moduleBase):
+ },
+ "vxlan-local-tunnelip": {
+ "help": "vxlan local tunnel ip",
+- "validvals": ["<ipv4>"],
++ "validvals": ["<ipv4>", "<ipv6>"],
+ "example": ["vxlan-local-tunnelip 172.16.20.103"]
+ },
+ "vxlan-svcnodeip": {
+@@ -547,7 +547,7 @@ class vxlan(Vxlan, moduleBase):
+
+ if local:
+ try:
+- local = ipnetwork.IPv4Address(local)
++ local = ipnetwork.IPAddress(local)
+
+ if local.initialized_with_prefixlen:
+ self.logger.warning("%s: vxlan-local-tunnelip %s: netmask ignored" % (ifname, local))
+@@ -1182,7 +1182,8 @@ class vxlan(Vxlan, moduleBase):
+ vxlan_physdev,
+ user_request_vxlan_info_data.get(Link.IFLA_VXLAN_PORT),
+ vxlan_vnifilter,
+- vxlan_ttl
++ vxlan_ttl,
++ local.version
+ )
+ elif ifaceobj.link_privflags & ifaceLinkPrivFlags.L3VXI:
+ self.iproute2.link_add_l3vxi(
+@@ -1192,7 +1193,8 @@ class vxlan(Vxlan, moduleBase):
+ group.ip if group else None,
+ vxlan_physdev,
+ user_request_vxlan_info_data.get(Link.IFLA_VXLAN_PORT),
+- vxlan_ttl
++ vxlan_ttl,
++ local.version
+ )
+ else:
+ try:
+@@ -1245,7 +1247,7 @@ class vxlan(Vxlan, moduleBase):
+ if remoteips:
+ try:
+ for remoteip in remoteips:
+- ipnetwork.IPv4Address(remoteip)
++ ipnetwork.IPAddress(remoteip)
+ except Exception as e:
+ self.log_error('%s: vxlan-remoteip: %s' % (ifaceobj.name, str(e)))
+ else:
+diff --git a/ifupdown2/lib/iproute2.py b/ifupdown2/lib/iproute2.py
+index 5f1d6006..d40f51d9 100644
+--- a/ifupdown2/lib/iproute2.py
++++ b/ifupdown2/lib/iproute2.py
+@@ -283,7 +283,12 @@ class IPRoute2(Cache, Requirements):
+
+ ###
+
+- def link_add_single_vxlan(self, link_exists, ifname, ip, group, physdev, port, vnifilter="off", ttl=None):
++ def link_add_single_vxlan(self, link_exists, ifname, ip, group, physdev, port, vnifilter="off", ttl=None, ipversion=4):
++ cmd = []
++
++ if ipversion == 6:
++ cmd.append("-6")
++
+ if link_exists:
+ self.logger.info("updating single vxlan device: %s" % ifname)
+
+@@ -291,11 +296,10 @@ class IPRoute2(Cache, Requirements):
+ # drop the external keyword:
+ # $ ip link set dev vxlan0 type vxlan external local 27.0.0.242 dev ipmr-lo
+ # Error: vxlan: cannot change COLLECT_METADATA flag.
+- cmd = ["link set dev %s type vxlan" % ifname]
++ cmd.append("link set dev %s type vxlan" % ifname)
+ else:
+ self.logger.info("creating single vxlan device: %s" % ifname)
+-
+- cmd = ["link add dev %s type vxlan external" % ifname]
++ cmd.append("link add dev %s type vxlan external" % ifname)
+
+ # when changing local ip, if we specify vnifilter we get:
+ # Error: vxlan: cannot change flag.
+@@ -321,17 +325,22 @@ class IPRoute2(Cache, Requirements):
+ self.__execute_or_batch(utils.ip_cmd, " ".join(cmd))
+ self.__update_cache_after_link_creation(ifname, "vxlan")
+
+- def link_add_l3vxi(self, link_exists, ifname, ip, group, physdev, port, ttl=None):
++ def link_add_l3vxi(self, link_exists, ifname, ip, group, physdev, port, ttl=None, ipversion=4):
+ self.logger.info("creating l3vxi device: %s" % ifname)
+
++ cmd = []
++
++ if ipversion == 6:
++ cmd.append("-6")
++
+ if link_exists:
+ # When updating an SVD we need to use `ip link set` and we have to
+ # drop the external keyword:
+ # $ ip link set dev vxlan0 type vxlan external local 27.0.0.242 dev ipmr-lo
+ # Error: vxlan: cannot change COLLECT_METADATA flag.
+- cmd = ["link set dev %s type vxlan" % ifname]
++ cmd.append("link set dev %s type vxlan" % ifname)
+ else:
+- cmd = ["link add dev %s type vxlan external vnifilter" % ifname]
++ cmd.append("link add dev %s type vxlan external vnifilter" % ifname)
+ # when changing local ip, if we specify vnifilter we get:
+ # Error: vxlan: cannot change flag.
+ # So we are only setting this attribute on vxlan creation
+--
+2.48.1
+
--
2.49.0
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 8+ messages in thread