diff options
| author | Nataliia Solomko <natalirs1985@gmail.com> | 2026-01-16 17:25:43 +0200 |
|---|---|---|
| committer | Nataliia Solomko <natalirs1985@gmail.com> | 2026-01-16 17:42:10 +0200 |
| commit | 2d8076c7db448ff49155641ee49ffc8db7c0b837 (patch) | |
| tree | 73bc9de9302d27215f2530a8c1a231555cc9d533 | |
| parent | 7fea6b6dbbd786bf6a32c496fc70ca9e9b5f8b1f (diff) | |
| download | vyos-1x-2d8076c7db448ff49155641ee49ffc8db7c0b837.tar.gz vyos-1x-2d8076c7db448ff49155641ee49ffc8db7c0b837.zip | |
vpp: T8143: Incorrect mapping in IPFIX for bond interfaces
| -rw-r--r-- | data/config-mode-dependencies/vyos-vpp.json | 1 | ||||
| -rw-r--r-- | interface-definitions/vpp.xml.in | 2 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_vpp.py | 34 | ||||
| -rw-r--r-- | src/conf_mode/vpp_interfaces_bonding.py | 4 | ||||
| -rw-r--r-- | src/conf_mode/vpp_ipfix.py | 3 |
5 files changed, 42 insertions, 2 deletions
diff --git a/data/config-mode-dependencies/vyos-vpp.json b/data/config-mode-dependencies/vyos-vpp.json index 54136f779..9f13c48d6 100644 --- a/data/config-mode-dependencies/vyos-vpp.json +++ b/data/config-mode-dependencies/vyos-vpp.json @@ -23,6 +23,7 @@ "vpp_acl": ["vpp_acl"], "vpp_nat": ["vpp_nat"], "vpp_nat_cgnat": ["vpp_nat_cgnat"], + "vpp_ipfix": ["vpp_ipfix"], "vpp_kernel_interface": ["vpp_kernel-interfaces"] }, "vpp_interfaces_ethernet": { diff --git a/interface-definitions/vpp.xml.in b/interface-definitions/vpp.xml.in index 6a6a1b4f8..099a8a87d 100644 --- a/interface-definitions/vpp.xml.in +++ b/interface-definitions/vpp.xml.in @@ -349,7 +349,7 @@ <node name="ipfix" owner="${vyos_conf_scripts_dir}/vpp_ipfix.py"> <properties> <help>IP Flow Information Export (IPFIX) configuration</help> - <priority>322</priority> + <priority>332</priority> </properties> <children> <tagNode name="collector"> diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py index 1886ac615..a5c7ab873 100755 --- a/smoketest/scripts/cli/test_vpp.py +++ b/smoketest/scripts/cli/test_vpp.py @@ -32,6 +32,7 @@ from vyos.utils.process import rc_cmd from vyos.utils.system import sysctl_read from vyos.system import image from vyos.vpp import VPPControl +from vyos.vpp.utils import vpp_iface_name_transform PROCESS_NAME = 'vpp_main' VPP_CONF = '/run/vpp/vpp.conf' @@ -1655,7 +1656,7 @@ class TestVPP(VyOSUnitTestSHIM.TestCase): self.cli_delete(path_static_arp) - def test_22_vpp_ipfix(self): + def test_22_1_vpp_ipfix(self): base_ipfix = base_path + ['ipfix'] base_collector = base_ipfix + ['collector'] collector_ip = '127.0.0.2' @@ -1742,6 +1743,37 @@ class TestVPP(VyOSUnitTestSHIM.TestCase): len(non_default_exporters), 0, 'Exporters not cleaned up properly' ) + def test_22_2_vpp_ipfix_bond(self): + base_ipfix = base_path + ['ipfix'] + base_bond = base_path + ['interfaces', 'bonding'] + iface_bond = 'bond0' + collector_ip = '127.0.0.2' + collector_src = '127.0.0.1' + + self.cli_set(base_bond + [iface_bond, 'kernel-interface', 'vpptun0']) + self.cli_set(base_bond + [iface_bond, 'member', 'interface', iface_bond]) + + self.cli_set( + base_ipfix + ['collector', collector_ip, 'source-address', collector_src] + ) + self.cli_set(base_ipfix + ['interface', iface_bond]) + self.cli_commit() + + vpp_bond_name = vpp_iface_name_transform(iface_bond) + required_str = f'{vpp_bond_name} ip4 rx tx' + + # Check bonding interface is added to IPFIX + _, out = rc_cmd('sudo vppctl show flowprobe feature') + self.assertIn(required_str, out) + + # Change bonding interface configuration + self.cli_set(base_bond + [iface_bond, 'mode', '802.3ad']) + self.cli_commit() + + # Check interface + _, out = rc_cmd('sudo vppctl show flowprobe feature') + self.assertIn(required_str, out) + if __name__ == '__main__': unittest.main(verbosity=2, failfast=VyOSUnitTestSHIM.TestCase.debug_on()) diff --git a/src/conf_mode/vpp_interfaces_bonding.py b/src/conf_mode/vpp_interfaces_bonding.py index 593f38a84..d25d64eb0 100644 --- a/src/conf_mode/vpp_interfaces_bonding.py +++ b/src/conf_mode/vpp_interfaces_bonding.py @@ -153,6 +153,10 @@ def get_config(config=None) -> dict: if conf.exists(['vpp', 'acl']): set_dependents('vpp_acl', conf) + # IPFIX dependency + if conf.exists(['vpp', 'ipfix']): + set_dependents('vpp_ipfix', conf) + config['ifname'] = ifname return config diff --git a/src/conf_mode/vpp_ipfix.py b/src/conf_mode/vpp_ipfix.py index a6659257c..a23498c99 100644 --- a/src/conf_mode/vpp_ipfix.py +++ b/src/conf_mode/vpp_ipfix.py @@ -19,6 +19,7 @@ from vyos import ConfigError from vyos.config import Config from vyos.vpp.ipfix import IPFIX from vyos.vpp.utils import cli_ifaces_list +from vyos.vpp.utils import vpp_iface_name_transform def get_config(config=None) -> dict: @@ -116,6 +117,7 @@ def apply(config): # Remove interfaces for iface, iface_conf in config.get('effective', {}).get('interface', {}).items(): + iface = vpp_iface_name_transform(iface) direction = iface_conf.get('direction') which = iface_conf.get('flow_variant') i.flowprobe_interface_delete(iface, direction=direction, which=which) @@ -158,6 +160,7 @@ def apply(config): # Interfaces if 'interface' in config: for iface, iface_config in config.get('interface', {}).items(): + iface = vpp_iface_name_transform(iface) direction = iface_config.get('direction') which = iface_config.get('flow_variant') |
