diff options
| author | Daniil Baturin <daniil@vyos.io> | 2026-01-08 15:18:01 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-08 15:18:01 +0000 |
| commit | fc945ea7ba90d86142984b992bc3e79ddf6b0ece (patch) | |
| tree | 481667f70275d7f6daba64eb77b5d3dcfd9431fb | |
| parent | 041b990ae1662b4ac7fe2fc4b62e1f624f5d6c9a (diff) | |
| parent | a46d27d93a1370a154123ff7161429e2b5798ad2 (diff) | |
| download | vyos-1x-fc945ea7ba90d86142984b992bc3e79ddf6b0ece.tar.gz vyos-1x-fc945ea7ba90d86142984b992bc3e79ddf6b0ece.zip | |
Merge pull request #4920 from natali-rs1985/T7098
T7098: Fix VPP MTU misconfiguration
| -rwxr-xr-x | smoketest/scripts/cli/test_vpp.py | 14 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_ethernet.py | 17 |
2 files changed, 30 insertions, 1 deletions
diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py index 9f67b79c8..1886ac615 100755 --- a/smoketest/scripts/cli/test_vpp.py +++ b/smoketest/scripts/cli/test_vpp.py @@ -118,6 +118,7 @@ class TestVPP(VyOSUnitTestSHIM.TestCase): def test_01_vpp_basic(self): main_core = '0' poll_sleep = '0' + mtu = '2500' # Main core must be verified # expect raise ConfigError @@ -161,6 +162,19 @@ class TestVPP(VyOSUnitTestSHIM.TestCase): required_str = 'lcp route-no-paths off' self.assertIn(required_str, out) + # set interface MTU + self.cli_set(['interfaces', 'ethernet', interface, 'mtu', mtu]) + self.cli_commit() + + # check MTU for the LCP interface pair + _, out = rc_cmd('sudo vppctl show interface') + normalized_out = re.sub(r'\s+', ' ', out) + self.assertIn(f'tap4096 2 up {mtu}/0/0/0', normalized_out) + + # delete mtu settings + self.cli_delete(['interfaces', 'ethernet', interface, 'mtu']) + self.cli_commit() + def test_02_vpp_vxlan(self): vni = '23' interface_vxlan = f'vxlan{vni}' diff --git a/src/conf_mode/interfaces_ethernet.py b/src/conf_mode/interfaces_ethernet.py index a85ccf815..599421c72 100755 --- a/src/conf_mode/interfaces_ethernet.py +++ b/src/conf_mode/interfaces_ethernet.py @@ -46,6 +46,7 @@ from vyos.utils.dict import dict_to_paths_values from vyos.utils.dict import dict_set from vyos.utils.dict import dict_delete from vyos.utils.process import is_systemd_service_running +from vyos.vpp.control_vpp import VPPControl from vyos import ConfigError from vyos import airbag airbag.enable() @@ -437,13 +438,27 @@ def generate(ethernet): def apply(ethernet): if 'frr_dict' in ethernet and not is_systemd_service_running('vyos-configd.service'): FRRender().apply() - e = EthernetIf(ethernet['ifname']) + ifname = ethernet['ifname'] + e = EthernetIf(ifname) if 'deleted' in ethernet: e.remove() else: e.update(ethernet) if 'static_arp' in ethernet: call_dependents() + + # If the interface is managed by the VPP DPDK driver, synchronize runtime + # parameters between Linux and the corresponding VPP LCP interface + if dict_search(f'vpp.settings.interface.{ifname}.driver', ethernet) == 'dpdk': + vpp_api = VPPControl() + # Find LCP pair + lcp_pair = vpp_api.lcp_pair_find(vpp_name_hw=ifname) + lcp_name = lcp_pair.get('vpp_name_kernel') + # Sync MTU to VPP LCP pair interface + if lcp_name: + mtu = e.get_mtu() + vpp_api.set_iface_mtu(lcp_name, mtu) + return None if __name__ == '__main__': |
