Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 3.9.0 #318

Open
wants to merge 133 commits into
base: master
Choose a base branch
from
Open

Version 3.9.0 #318

wants to merge 133 commits into from

Conversation

julienfortin
Copy link
Contributor

  • New: ifreload: new --diff cli argument: only reload delta between /e/n/i
  • New: Support for Per-VLAN Rapid Spanning Tree attributes:
    mstpctl-pvrst-mode (on/off): Enable/disable PVRST mode
    mstpctl-vlan-priority (range 4096-32768)
    mstpctl-vlan-hello (range 1-10)
    mstpctl-vlan-fdelay (range 4-30)
    mstpctl-vlan-maxage (range 6-40)
    mstpctl-port-vlan-path-cost (range 1-200000000)
    mstpctl-port-vlan-priority (range 0-240)
  • New: Get default mac address from policy file as 'address' iface_default
  • New: Enable per vlan snooping when config mcqv4src
  • New: Add vxlan hopping filter
  • New: Add support for setting mac addresses via iface_defaults policy
  • New: Reset mac address on switch port when 'hwaddress' is removed from eni
  • New: Policy "dhclient_no_wait_on_reload": dhclient won't wait (default off)
  • Fix: Bring DHCP config down if link-down yes is set
  • Fix: Various code cleanups (SonarQube)
  • Fix: Macvlan/VRR: set accept_dad=0 before link up
  • Fix: Flush DHCP lease on boot up
  • Fix: Disable persistent debug log for ifquery
  • Fix:
  • Fix: Vxlan clear last fdb entry when remoteip is removed from user config
  • Fix: Vxlan reset local and group ip when removed from user config
  • Fix: Re-applying link-speed to reset link-lanes to default when removed
  • Fix: Missing json import in networkinterfaces.py and vxlan.py
  • Fix: Nlmanager Invalid operation on null-like value range_flag
  • Deprecated: remove bridge-hashel default value

julienfortin and others added 30 commits October 30, 2024 21:38
Default MAC addresses can now be defined as iface_default policy

$ cat /var/lib/ifupdown2/policy.d/mac.json
{
  "address": {
    "iface_defaults": {
      "swp1": {"hwaddress": "7a:43:9e:c0:e0:42"}
    }
  }
}

The usecase being, how to revert to a base mac once the hwaddress
attribute is removed from ENI.

Signed-off-by: Julien Fortin <[email protected]>
In diff mode SVI won't be processed if their config hasn't changed.
We need to do a specific fdb check during bridge processing and purge
stale macs.

This commit includes an incremental fix by Scott Laffer:
Fix logic in bridge stale perm fdb handling not to delete VRR vlan entries

In the scenario where only a bridge interface is up'd (i.e. it's the only
thing in the run queue in a diff-based apply), permanent fdb entries for
VRR interfaces were being incorrectly marked as stale and deleted from the fdb.

This patch updates the logic to not only match the bridge's own MAC address
but any permanent entry on the bridge device itself.

Signed-off-by: Julien Fortin <[email protected]>
When a switch port is enslaved to a bond we don't manage its
mac address anymore - all port have the same mac.

Signed-off-by: Julien Fortin <[email protected]>
…plied when it is part of a bond

Changing bond member port mac addr should not get applied when it is part of a bond

Problem description: Changing the hwaddress of a bond slave is not updating the bond interface's hwaddress.

Fix description: Block changing the hwaddress of a bond slave

Testcases covered:

1. change the hwaddress of an existing bond slave through nvue
2. Edit the eni file to add the port in bridge, see the hwaddress set through ifquery and 'ip link show', remove the port from bridge and add it to bond interface and change the hwaddress. do 'ifreload -a' and ifquery displays the changed hwaddress but 'ip link show' displays the older hwaddress and so does the bond intf.

Signed-off-by: Julien Fortin <[email protected]>
…l in e/n/i stanza is rendered with values like "none"

Signed-off-by: Julien Fortin <[email protected]>
Previous commit 4cfd51f broke test_bridge7_macvlans which is using
mac address with single digit segments: 42:38:39:FF:0:1

The regex is also compiled and moved to init to only do it once.

Signed-off-by: Julien Fortin <[email protected]>
DAD must be disabled on macvlan/VRR interfaces as they share the
same MAC (and thus link-local IPv6 address).

The sysctl accept_dad must be set to 0 before setting the link UP
otherwise DAD might trigger before we reset the sysctl to 0.

Signed-off-by: Andy Roulin <[email protected]>
Signed-off-by: Julien Fortin <[email protected]>
if the interface is down we won't be able to get the speed
skip the speed check

Signed-off-by: Julien Fortin <[email protected]>
The bond slave speed check has been causing issues over the past few months
It is not critical to have it so I prefer to remove it for now.

Signed-off-by: Julien Fortin <[email protected]>
…sion ^_?([A-Z_][a-zA-Z0-9]*|[a-z_][a-z0-9_]*)$.

Signed-off-by: Julien Fortin <[email protected]>
IFLA_BR_MCAST_HASH_ELASTICITY:
Set multicast database hash elasticity, It is the maximum chain length in the
multicast hash table. This attribute is deprecated and the value is always 16.

Signed-off-by: Julien Fortin <[email protected]>
If the policy is enabled (true/false) dhclient wont wait (-nw)
(except in case of networking restart or reboot)

Signed-off-by: Julien Fortin <[email protected]>
…egular expression ^[_a-z][a-z0-9_]*$.

Signed-off-by: Julien Fortin <[email protected]>
Issue: 3364956

Signed-off-by: Julien Fortin <[email protected]>
Default route is missing after the dhcp interface is cycled through link-down yes/no
This requires a full dhcp down-up cycle as well.

Signed-off-by: Julien Fortin <[email protected]>
…h is already caught.

ImportError is the parent classs of ModuleNotFoundError

Signed-off-by: Julien Fortin <[email protected]>
@julienfortin
Copy link
Contributor Author

@aderumier @sohorx @svenauhagen @BarbarossaTM @wido @lachbaer @vincentbernat @virtualized-human @lawli3t @jkklemm @OlivierB @itzwam @tomvil @moepman

FYI, here is version 3.9.0 (about 100 commits, fixes and new features). I will keep it in the dev branch for a few weeks if you guys want to test it. The goal is to merge it to master in Jan 2025.

Version 3.10 will have some of the community PRs.

@aderumier
Copy link
Contributor

oh this is huge :)

I'll try to take time to test it next month. Perfect time for debian13 (and proxmox 9 ;)

@virtualized-human
Copy link

i will start compiling it and deploy it to my current setup

@virtualized-human
Copy link

@julienfortin

when building the depedencys where not right from the readme.md:

e.g.

======================================================================
ERROR: tests.test_l3 (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests.test_l3
Traceback (most recent call last):
  File "/usr/lib/python3.10/unittest/loader.py", line 436, in _find_test_path
    module = self._get_module_from_name(name)
  File "/usr/lib/python3.10/unittest/loader.py", line 377, in _get_module_from_name
    __import__(name)
  File "/home/jaromir/Nextcloud/cloud.virtualized.app/Dokumente/GIT/github.com/virtualized-human/ifupdown2/.pybuild/cpython3_3.10_ifupdown2/build/tests/test_l3.py", line 1, in <module>
    from .conftest import ENI, assert_identical_json
  File "/home/jaromir/Nextcloud/cloud.virtualized.app/Dokumente/GIT/github.com/virtualized-human/ifupdown2/.pybuild/cpython3_3.10_ifupdown2/build/tests/conftest.py", line 11, in <module>
    from scp import SCPClient
ModuleNotFoundError: No module named 'scp'


----------------------------------------------------------------------
Ran 3 tests in 0.000s

fix: install python3-scp

also python3-pytest seems to be new as well as deepdiff and some others.

the installation command is e.g. apt install python3-deepdiff python3-scp python3-pytest python3-coverage but it may be some more depedencys that are not in readme?

Also im currently running into annother problem when using make deb to build a .deb file:

error: can't copy 'ifupdown2/ifupdown2d': doesn't exist or not a regular file

while compiling. It seems that the path is wrong. it does not exist in reality and also not in the repo.

@julienfortin
Copy link
Contributor Author

@virtualized-human thanks for the feedback, i will look into that!

@julienfortin
Copy link
Contributor Author

@virtualized-human please give it another try, i have updated debian/rules to ignore tests during the build.

@virtualized-human
Copy link

debian/rules:20: *** Missing separator.  Conclusion.
dpkg-buildpackage: error: subprocess fakeroot debian/rules clean returned exit status 2
debuild: fatal error in line 1182:
dpkg-buildpackage -rfakeroot -us -uc -ui -b failed
make: *** [Makefile:96: deb] error 29

@julienfortin

@virtualized-human
Copy link

i commented out

#override_dh_auto_test:
#       @echo "Skipping tests during the build process."

in the debian/rules file and now it seems to work (the build).

@julienfortin
Copy link
Contributor Author

The debian/rules files requires tabs and not spaces, for some reason my IDE replaces the tab with spaces before i pushed the commit. It should be good now.

@virtualized-human
Copy link

i pulled the last release it still drops the same error

@virtualized-human
Copy link

#!/usr/bin/make -f

#export DH_VERBOSE=1
export PYBUILD_NAME=ifupdown2
export PYBUILD_INSTALL_ARGS=--install-lib=/usr/share/ --install-scripts=/usr/share/

%:
	dh $@ --with=python3 --with systemd --buildsystem=pybuild

override_dh_installman:
	./ifupdown2/man/genmanpages.sh ./ifupdown2/man ./man
	dh_installman

override_dh_install:
	dh_install
	mkdir -p debian/ifupdown2/lib/systemd/system/
	install --mode=644 debian/[email protected] debian/ifupdown2/lib/systemd/system/

override_dh_auto_test:
       @echo "Skipping tests during the build process."

override_dh_systemd_start:
	dh_systemd_start --name=networking --no-start

override_dh_systemd_enable:
	dh_systemd_enable --name=networking

override_dh_compress:
	dh_compress -X.py

@virtualized-human
Copy link

well i think the ide pushed wrong aigan. i replaced it with the right tab char and it works

@virtualized-human
Copy link

yea its fine now :D

@virtualized-human virtualized-human mentioned this pull request Jan 24, 2025
@virtualized-human
Copy link

@julienfortin vrf seems not to work, i have the issue on 3.9.0 (in testing currently for me) and also for 3.3.0 with debian 12 systems, the file /etc/iproute2/rt_tables.d/ifupdown2_vrf_map.conf exist but does not get updated by ifupdown2.

/etc/iproute2/rt_tables.d/ifupdown2_vrf_map.conf:

# This file is autogenerated by ifupdown2.
# It contains the vrf name to table mapping.
# Reserved table range 1001 5000

interfaces config:

root@vrrp-test1:~# cat /etc/network/interfaces.d/50-cloud-init
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
auto lo
iface lo inet loopback
    dns-nameservers 9.9.9.9 149.112.112.112 2620:fe::fe

auto eth0
iface eth0 inet static
    address 45.132.96.83/32
    gateway 45.132.96.1
    vrf-table auto
    vrf blue

here is debuging:

 ifdown eth0; ifup -d eth0





debug: args = Namespace(all=False, iflist=['eth0'], verbose=False, debug=True, quiet=False, CLASS=None, withdepends=False, perfmode=False, nocache=False, excludepats=None, interfacesfile=None, interfacesfileformat='native', type=None, syntaxcheck=False, skipupperifaces=False, force=False, syslog=False, systemd=False, noact=False, printdependency=None, noaddons=False, version=None, lockfile='/run/network/.lock', nldebug=False)
debug: creating ifupdown object ..
info: requesting link dump
info: requesting address dump
info: requesting netconf dump
debug: nlcache: reset errorq
debug: {'enable_persistent_debug_logging': 'yes', 'use_daemon': 'no', 'template_enable': '1', 'template_engine': 'mako', 'template_lookuppath': '/etc/network/ifupdown2/templates', 'default_interfaces_configfile': '/etc/network/interfaces', 'disable_cli_interfacesfile': '0', 'addon_syntax_check': '0', 'addon_scripts_support': '1', 'addon_python_modules_support': '1', 'multiple_vlan_aware_bridge_support': '0', 'ifquery_check_success_str': 'pass', 'ifquery_check_error_str': 'fail', 'ifquery_check_unknown_str': '', 'ifquery_ifacename_expand_range': '0', 'link_master_slave': '0', 'delay_admin_state_change': '0', 'ifreload_down_changed': '0', 'addr_config_squash': '0', 'ifaceobj_squash': '0', 'adjust_logical_dev_mtu': '1', 'state_dir': '/var/tmp/network/', 'no_repeats': {'bridge-vlan-aware': 'yes'}}
info: loading builtin modules from ['/usr/share/ifupdown2/addons']
info: module openvswitch not loaded (module init failed: no /usr/bin/ovs-vsctl found)
info: module openvswitch_port not loaded (module init failed: no /usr/bin/ovs-vsctl found)
info: module ppp not loaded (module init failed: no /usr/bin/pon found)
info: module batman_adv not loaded (module init failed: no /usr/sbin/batctl found)
debug: bridge: using reserved vlan range (0, 0)
debug: bridge: init: warn_on_untagged_bridge_absence=False
debug: bridge: init: vxlan_bridge_default_igmp_snooping=None
debug: bridge: init: arp_nd_suppress_only_on_vxlan=False
debug: bridge: init: bridge_always_up_dummy_brport=None
info: executing /sbin/sysctl net.bridge.bridge-allow-multiple-vlans
debug: bridge: init: multiple vlans allowed True
info: executing lsb_release -a
info: module mstpctl not loaded (module init failed: no /sbin/mstpctl found)
info: executing /bin/ip rule show
info: executing /bin/ip -6 rule show

info: address: using default mtu 1500
info: address: max_mtu undefined
debug: policy: default_loopback_scope set to None
info: executing /usr/sbin/ip vrf id
info: mgmt vrf_context = False
debug: dhclient: dhclient_retry_on_failure set to 0
info: executing /bin/ip addr help
info: address metric support: OK
info: module ppp not loaded (module init failed: no /usr/bin/pon found)
info: module mstpctl not loaded (module init failed: no /sbin/mstpctl found)
info: module batman_adv not loaded (module init failed: no /usr/sbin/batctl found)
info: module openvswitch_port not loaded (module init failed: no /usr/bin/ovs-vsctl found)
info: module openvswitch not loaded (module init failed: no /usr/bin/ovs-vsctl found)
info: looking for user scripts under /etc/network
info: loading scripts under /etc/network/if-pre-up.d ...
info: loading scripts under /etc/network/if-up.d ...
info: loading scripts under /etc/network/if-post-up.d ...
info: loading scripts under /etc/network/if-pre-down.d ...
info: loading scripts under /etc/network/if-down.d ...
info: loading scripts under /etc/network/if-post-down.d ...
info: using mgmt iface default prefix eth
info: processing interfaces file /etc/network/interfaces
debug: processing sourced line ..'source /etc/network/interfaces.d/*'
info: processing interfaces file /etc/network/interfaces.d/50-cloud-init
debug: eth0: marking interface with mgmt flag
debug: scheduling '['pre-up', 'up', 'post-up']' for ['eth0']
debug: dependency graph {
        lo : []
        eth0 : []
}
debug: full run queue: ['eth0']
info: eth0: running ops ...
info: executing mstpctl clearmodepvrst
debug: mstpctl clearmodepvrst failed: cmd 'mstpctl clearmodepvrst' failed ([Errno 2] No such file or directory: 'mstpctl')
debug: eth0: pre-up : running module xfrm
debug: eth0: pre-up : running module link
debug: eth0: pre-up : running module bond
debug: eth0: pre-up : running module vlan
debug: eth0: pre-up : running module vxlan
debug: eth0: pre-up : running module usercmds
debug: eth0: pre-up : running module bridge
debug: eth0: pre-up : running module bridgevlan
debug: eth0: pre-up : running module tunnel
debug: eth0: pre-up : running module vrf
info: vrf: syncing table map to /etc/iproute2/rt_tables.d/ifupdown2_vrf_map.conf
info: vrf: dumping iproute2_vrf_map
info: {}
debug:   File "/usr/sbin/ifup", line 142, in <module>
    sys.exit(main())
   File "/usr/sbin/ifup", line 130, in main
    return stand_alone()
   File "/usr/sbin/ifup", line 109, in stand_alone
    status = ifupdown2.main()
   File "/usr/share/ifupdown2/ifupdown/main.py", line 82, in main
    self.handlers.get(self.op)(self.args)
   File "/usr/share/ifupdown2/ifupdown/main.py", line 197, in run_up
    ifupdown_handle.up(['pre-up', 'up', 'post-up'],
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1832, in up
    ret = self._sched_ifaces(filtered_ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1558, in _sched_ifaces
    ifaceScheduler.sched_ifaces(self, ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 615, in sched_ifaces
    cls.run_iface_list(ifupdownobj, run_queue, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 338, in run_iface_list
    cls.run_iface_graph(ifupdownobj, ifacename, ops, parent,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 323, in run_iface_graph
    cls.run_iface_list_ops(ifupdownobj, ifaceobjs, ops)
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 199, in run_iface_list_ops
    cls.run_iface_op(ifupdownobj, ifaceobj, op,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 119, in run_iface_op
    m.run(ifaceobj, op,
   File "/usr/share/ifupdown2/addons/vrf.py", line 1143, in run
    op_handler(self, ifaceobj, ifaceobj_getfunc=ifaceobj_getfunc)
   File "/usr/share/ifupdown2/addons/vrf.py", line 880, in _up
    self._up_vrf_dev(ifaceobj, vrf_table, True, ifaceobj_getfunc)
   File "/usr/share/ifupdown2/addons/vrf.py", line 780, in _up_vrf_dev
    vrf_table = self._create_vrf_dev(ifaceobj, vrf_table)
   File "/usr/share/ifupdown2/addons/vrf.py", line 748, in _create_vrf_dev
    self.log_error('unable to get vrf table id', ifaceobj)
   File "/usr/share/ifupdown2/ifupdownaddons/modulebase.py", line 126, in log_error
    stack = traceback.format_stack()
debug: NoneType: None
debug:   File "/usr/sbin/ifup", line 142, in <module>
    sys.exit(main())
   File "/usr/sbin/ifup", line 130, in main
    return stand_alone()
   File "/usr/sbin/ifup", line 109, in stand_alone
    status = ifupdown2.main()
   File "/usr/share/ifupdown2/ifupdown/main.py", line 82, in main
    self.handlers.get(self.op)(self.args)
   File "/usr/share/ifupdown2/ifupdown/main.py", line 197, in run_up
    ifupdown_handle.up(['pre-up', 'up', 'post-up'],
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1832, in up
    ret = self._sched_ifaces(filtered_ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1558, in _sched_ifaces
    ifaceScheduler.sched_ifaces(self, ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 615, in sched_ifaces
    cls.run_iface_list(ifupdownobj, run_queue, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 338, in run_iface_list
    cls.run_iface_graph(ifupdownobj, ifacename, ops, parent,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 323, in run_iface_graph
    cls.run_iface_list_ops(ifupdownobj, ifaceobjs, ops)
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 199, in run_iface_list_ops
    cls.run_iface_op(ifupdownobj, ifaceobj, op,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 119, in run_iface_op
    m.run(ifaceobj, op,
   File "/usr/share/ifupdown2/addons/vrf.py", line 1143, in run
    op_handler(self, ifaceobj, ifaceobj_getfunc=ifaceobj_getfunc)
   File "/usr/share/ifupdown2/addons/vrf.py", line 880, in _up
    self._up_vrf_dev(ifaceobj, vrf_table, True, ifaceobj_getfunc)
   File "/usr/share/ifupdown2/addons/vrf.py", line 782, in _up_vrf_dev
    self.log_error('%s: %s' %(ifaceobj.name, str(e)), ifaceobj)
   File "/usr/share/ifupdown2/ifupdownaddons/modulebase.py", line 126, in log_error
    stack = traceback.format_stack()
debug: Traceback (most recent call last):
  File "/usr/share/ifupdown2/addons/vrf.py", line 780, in _up_vrf_dev
    vrf_table = self._create_vrf_dev(ifaceobj, vrf_table)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/share/ifupdown2/addons/vrf.py", line 748, in _create_vrf_dev
    self.log_error('unable to get vrf table id', ifaceobj)
  File "/usr/share/ifupdown2/ifupdownaddons/modulebase.py", line 133, in log_error
    raise ModuleBaseException(msg)
ifupdownaddons.modulebase.ModuleBaseException: unable to get vrf table id
debug:   File "/usr/sbin/ifup", line 142, in <module>
    sys.exit(main())
   File "/usr/sbin/ifup", line 130, in main
    return stand_alone()
   File "/usr/sbin/ifup", line 109, in stand_alone
    status = ifupdown2.main()
   File "/usr/share/ifupdown2/ifupdown/main.py", line 82, in main
    self.handlers.get(self.op)(self.args)
   File "/usr/share/ifupdown2/ifupdown/main.py", line 197, in run_up
    ifupdown_handle.up(['pre-up', 'up', 'post-up'],
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1832, in up
    ret = self._sched_ifaces(filtered_ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1558, in _sched_ifaces
    ifaceScheduler.sched_ifaces(self, ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 615, in sched_ifaces
    cls.run_iface_list(ifupdownobj, run_queue, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 338, in run_iface_list
    cls.run_iface_graph(ifupdownobj, ifacename, ops, parent,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 323, in run_iface_graph
    cls.run_iface_list_ops(ifupdownobj, ifaceobjs, ops)
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 199, in run_iface_list_ops
    cls.run_iface_op(ifupdownobj, ifaceobj, op,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 119, in run_iface_op
    m.run(ifaceobj, op,
   File "/usr/share/ifupdown2/addons/vrf.py", line 1143, in run
    op_handler(self, ifaceobj, ifaceobj_getfunc=ifaceobj_getfunc)
   File "/usr/share/ifupdown2/addons/vrf.py", line 911, in _up
    self.log_error(str(e), ifaceobj)
   File "/usr/share/ifupdown2/ifupdownaddons/modulebase.py", line 126, in log_error
    stack = traceback.format_stack()
debug: Traceback (most recent call last):
  File "/usr/share/ifupdown2/addons/vrf.py", line 780, in _up_vrf_dev
    vrf_table = self._create_vrf_dev(ifaceobj, vrf_table)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/share/ifupdown2/addons/vrf.py", line 748, in _create_vrf_dev
    self.log_error('unable to get vrf table id', ifaceobj)
  File "/usr/share/ifupdown2/ifupdownaddons/modulebase.py", line 133, in log_error
    raise ModuleBaseException(msg)
ifupdownaddons.modulebase.ModuleBaseException: unable to get vrf table id

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/share/ifupdown2/addons/vrf.py", line 880, in _up
    self._up_vrf_dev(ifaceobj, vrf_table, True, ifaceobj_getfunc)
  File "/usr/share/ifupdown2/addons/vrf.py", line 782, in _up_vrf_dev
    self.log_error('%s: %s' %(ifaceobj.name, str(e)), ifaceobj)
  File "/usr/share/ifupdown2/ifupdownaddons/modulebase.py", line 133, in log_error
    raise ModuleBaseException(msg)
ifupdownaddons.modulebase.ModuleBaseException: eth0: unable to get vrf table id
error: eth0: unable to get vrf table id
debug: eth0: pre-up : running module ethtool
debug: eth0: pre-up : running module address
info: executing /sbin/sysctl net.mpls.conf.eth0.input=0
debug: eth0: up : running module dhcp
debug: eth0: up : running module address
info: executing /bin/ip route replace table blue default via 45.132.96.1 proto kernel dev eth0 onlink
debug:   File "/usr/sbin/ifup", line 142, in <module>
    sys.exit(main())
   File "/usr/sbin/ifup", line 130, in main
    return stand_alone()
   File "/usr/sbin/ifup", line 109, in stand_alone
    status = ifupdown2.main()
   File "/usr/share/ifupdown2/ifupdown/main.py", line 82, in main
    self.handlers.get(self.op)(self.args)
   File "/usr/share/ifupdown2/ifupdown/main.py", line 197, in run_up
    ifupdown_handle.up(['pre-up', 'up', 'post-up'],
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1832, in up
    ret = self._sched_ifaces(filtered_ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/ifupdownmain.py", line 1558, in _sched_ifaces
    ifaceScheduler.sched_ifaces(self, ifacenames, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 615, in sched_ifaces
    cls.run_iface_list(ifupdownobj, run_queue, ops,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 338, in run_iface_list
    cls.run_iface_graph(ifupdownobj, ifacename, ops, parent,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 323, in run_iface_graph
    cls.run_iface_list_ops(ifupdownobj, ifaceobjs, ops)
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 199, in run_iface_list_ops
    cls.run_iface_op(ifupdownobj, ifaceobj, op,
   File "/usr/share/ifupdown2/ifupdown/scheduler.py", line 119, in run_iface_op
    m.run(ifaceobj, op,
   File "/usr/share/ifupdown2/addons/address.py", line 1652, in run
    op_handler(self, ifaceobj,
   File "/usr/share/ifupdown2/addons/address.py", line 1239, in _up
    self._add_delete_gateway(ifaceobj, gateways, prev_gw)
   File "/usr/share/ifupdown2/addons/address.py", line 781, in _add_delete_gateway
    self.log_error('%s: %s' % (ifaceobj.name, str(e)))
   File "/usr/share/ifupdown2/ifupdownaddons/modulebase.py", line 126, in log_error
    stack = traceback.format_stack()
debug: Traceback (most recent call last):
  File "/usr/share/ifupdown2/addons/address.py", line 779, in _add_delete_gateway
    self.iproute2.route_add_gateway(ifaceobj.name, add_gw, vrf, metric, onlink=self.l3_intf_default_gateway_set_onlink)
  File "/usr/share/ifupdown2/lib/iproute2.py", line 894, in route_add_gateway
    utils.exec_command(cmd)
  File "/usr/share/ifupdown2/ifupdown/utils.py", line 437, in exec_command
    return cls._execute_subprocess(shlex.split(cmd),
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/share/ifupdown2/ifupdown/utils.py", line 415, in _execute_subprocess
    raise UtilsException(cls._format_error(cmd,
ifupdown.utils.UtilsException: cmd '/bin/ip route replace table blue default via 45.132.96.1 proto kernel dev eth0 onlink' failed: returned 255 (Error: argument "blue" is wrong: "table" value is invalid

)
error: eth0: cmd '/bin/ip route replace table blue default via 45.132.96.1 proto kernel dev eth0 onlink' failed: returned 255 (Error: argument "blue" is wrong: "table" value is invalid

)
debug: eth0: up : running module addressvirtual
debug: eth0: up : running module usercmds
debug: eth0: up : running script /etc/network/if-up.d/000resolvconf
info: executing /etc/network/if-up.d/000resolvconf
debug: eth0: post-up : running module usercmds
debug: eth0: statemanager sync state pre-up
debug: saving state ..
info: exit status 1 in 0:00:00.658036

iproute2 version:

||/ Name           Version      Architecture Description
+++-==============-============-============-====================================
ii  iproute2       6.1.0-3      amd64        networking and traffic control tools

@virtualized-human
Copy link

virtualized-human commented Jan 24, 2025

without onlink (/24 subnet instead of /32) it doesnt work to btw.
image
image

it is also possible that the wrong configuration is involved, I have found little information on this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants