From f6036065083c76fa6ba0aed67ba7c07e5e53c07b Mon Sep 17 00:00:00 2001 From: zsdc Date: Fri, 30 Jun 2023 21:44:51 +0300 Subject: VPP: T1797: Added interfaces reinitialization After an interface is added/removed from VPP, it will be reinitialized, which allows reconfiguring IP addresses on it. Also modified VPP load priority to start before interfaces, and avoid reconfiguration during boot. --- src/conf_mode/vpp.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/conf_mode/vpp.py') diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py index 62ec4c162..dc13f4e60 100755 --- a/src/conf_mode/vpp.py +++ b/src/conf_mode/vpp.py @@ -21,13 +21,11 @@ from pathlib import Path from re import search as re_search, MULTILINE as re_M from vyos.config import Config +from vyos.configdep import set_dependents, call_dependents from vyos.configdict import dict_merge from vyos.configdict import node_changed from vyos.ifconfig import Section -from vyos.ifconfig import EthernetIf -from vyos.ifconfig import interface -from vyos.util import call -from vyos.util import rc_cmd +from vyos.util import call, rc_cmd, boot_configuration_complete from vyos.template import render from vyos.xml import defaults @@ -48,7 +46,6 @@ MIN_TOTAL_MEMORY = 6 def _get_pci_address_by_interface(iface) -> str: - from vyos.util import rc_cmd rc, out = rc_cmd(f'ethtool -i {iface}') # if ethtool command was successful if rc == 0 and out: @@ -87,6 +84,9 @@ def get_config(config=None): 'iface_name': removed_iface, 'iface_pci_addr': pci_address }) + # add an interface to a list of interfaces that need + # to be reinitialized after the commit + set_dependents('ethernet', conf, removed_iface) if not conf.exists(base): return {'removed_ifaces': removed_ifaces} @@ -107,6 +107,9 @@ def get_config(config=None): for iface, iface_config in config['interface'].items(): default_values_iface = defaults(base + ['interface']) config['interface'][iface] = dict_merge(default_values_iface, config['interface'][iface]) + # add an interface to a list of interfaces that need + # to be reinitialized after the commit + set_dependents('ethernet', conf, iface) # Get PCI address auto for iface, iface_config in config['interface'].items(): @@ -186,9 +189,9 @@ def apply(config): if iface not in Section.interfaces(): vpp_control.lcp_pair_add(iface, iface) - # update interface config - #e = EthernetIf(iface) - #e.update(config['other_interfaces'][iface]) + # reinitialize interfaces, but not during the first boot + if boot_configuration_complete(): + call_dependents() if __name__ == '__main__': -- cgit v1.2.3