summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2026-01-08 15:18:01 +0000
committerGitHub <noreply@github.com>2026-01-08 15:18:01 +0000
commitfc945ea7ba90d86142984b992bc3e79ddf6b0ece (patch)
tree481667f70275d7f6daba64eb77b5d3dcfd9431fb
parent041b990ae1662b4ac7fe2fc4b62e1f624f5d6c9a (diff)
parenta46d27d93a1370a154123ff7161429e2b5798ad2 (diff)
downloadvyos-1x-fc945ea7ba90d86142984b992bc3e79ddf6b0ece.tar.gz
vyos-1x-fc945ea7ba90d86142984b992bc3e79ddf6b0ece.zip
Merge pull request #4920 from natali-rs1985/T7098
T7098: Fix VPP MTU misconfiguration
-rwxr-xr-xsmoketest/scripts/cli/test_vpp.py14
-rwxr-xr-xsrc/conf_mode/interfaces_ethernet.py17
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__':