summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2026-01-16 17:25:43 +0200
committerNataliia Solomko <natalirs1985@gmail.com>2026-01-16 17:42:10 +0200
commit2d8076c7db448ff49155641ee49ffc8db7c0b837 (patch)
tree73bc9de9302d27215f2530a8c1a231555cc9d533
parent7fea6b6dbbd786bf6a32c496fc70ca9e9b5f8b1f (diff)
downloadvyos-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.json1
-rw-r--r--interface-definitions/vpp.xml.in2
-rwxr-xr-xsmoketest/scripts/cli/test_vpp.py34
-rw-r--r--src/conf_mode/vpp_interfaces_bonding.py4
-rw-r--r--src/conf_mode/vpp_ipfix.py3
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')