diff --git a/interface-definitions/include/version/vpp-version.xml.i b/interface-definitions/include/version/vpp-version.xml.i index 96a69c92fa..205e87916d 100644 --- a/interface-definitions/include/version/vpp-version.xml.i +++ b/interface-definitions/include/version/vpp-version.xml.i @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/interface-definitions/vpp.xml.in b/interface-definitions/vpp.xml.in index c45d89b949..911c6f6682 100644 --- a/interface-definitions/vpp.xml.in +++ b/interface-definitions/vpp.xml.in @@ -561,12 +561,6 @@ XDP settings - - - Unlock multithreading in interrupt and adaptive modes - - - Number of receive queues diff --git a/python/vyos/vpp/control_vpp.py b/python/vyos/vpp/control_vpp.py index 42e7bf6c12..41b4573a57 100644 --- a/python/vyos/vpp/control_vpp.py +++ b/python/vyos/vpp/control_vpp.py @@ -378,7 +378,7 @@ def xdp_iface_create( if mode != 'auto': mode_resolve: dict[str, int] = {'auto': 0, 'copy': 1, 'zero-copy': 2} api_call_args['mode'] = mode_resolve[mode] - if flags == 'no_systcall_lock': + if flags == 'no_syscall_lock': api_call_args['flags'] = 1 return self.__vpp_api_client.api.af_xdp_create_v3(**api_call_args) diff --git a/smoketest/config-tests/vpp b/smoketest/config-tests/vpp index e425689652..46856fe251 100644 --- a/smoketest/config-tests/vpp +++ b/smoketest/config-tests/vpp @@ -44,6 +44,6 @@ set vpp interfaces vxlan vxlan10 source-address '192.0.2.1' set vpp interfaces vxlan vxlan10 vni '10' set vpp settings interface eth1 driver 'dpdk' set vpp settings interface eth2 driver 'dpdk' -set vpp settings interface eth3 driver 'dpdk' +set vpp settings interface eth3 driver 'xdp' set vpp settings interface eth4 driver 'dpdk' set vpp settings unix poll-sleep-usec '12' diff --git a/smoketest/configs/vpp b/smoketest/configs/vpp index 472c2919b7..e334b36bb8 100644 --- a/smoketest/configs/vpp +++ b/smoketest/configs/vpp @@ -112,7 +112,10 @@ vpp { driver "dpdk" } interface eth3 { - driver "dpdk" + driver "xdp" + xdp-options { + no-syscall-lock + } } interface eth4 { driver "dpdk" diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py index 37485bd0d2..03b2fc6735 100755 --- a/smoketest/scripts/cli/test_vpp.py +++ b/smoketest/scripts/cli/test_vpp.py @@ -1101,7 +1101,7 @@ def test_10_vpp_driver_options(self): # DPDK driver expect only dpdk-options and not xdp-options to be set # expect raise ConfigError - self.cli_set(base_interface_path + ['xdp-options', 'no-syscall-lock']) + self.cli_set(base_interface_path + ['xdp-options', 'zero-copy']) with self.assertRaises(ConfigSessionError): self.cli_commit() diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py index 81502c0b44..c4142437bc 100755 --- a/src/conf_mode/vpp.py +++ b/src/conf_mode/vpp.py @@ -107,7 +107,6 @@ 'igb': ['xdp'], 'igc': ['dpdk', 'xdp'], 'ixgbe': ['dpdk', 'xdp'], - 'ixgbevf': ['dpdk'], 'qede': ['dpdk', 'xdp'], 'vmxnet3': ['xdp'], 'virtio_net': ['xdp'], @@ -338,7 +337,10 @@ def get_config(config=None): ) if 'zero-copy' in iface_config['xdp_options']: xdp_api_params['mode'] = 'zero-copy' - if 'zero-copy' in iface_config['xdp_options']: + if iface_config.get('rx_mode') in ('interrupt', 'adaptive') and any( + key in config['settings'].get('cpu', {}) + for key in ('workers', 'corelist_workers') + ): xdp_api_params['flags'] = 'no_syscall_lock' iface_config['xdp_api_params'] = xdp_api_params diff --git a/src/migration-scripts/vpp/1-to-2 b/src/migration-scripts/vpp/1-to-2 new file mode 100644 index 0000000000..822799cc64 --- /dev/null +++ b/src/migration-scripts/vpp/1-to-2 @@ -0,0 +1,34 @@ +# Copyright VyOS maintainers and contributors +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library. If not, see . + +# Delete 'vpp settings interface ethX xdp-options no-syscall-lock' +# since it is set automatically + +from vyos.configtree import ConfigTree + +base = ['vpp', 'settings', 'interface'] + +def migrate(config: ConfigTree) -> None: + if not config.exists(base): + # Nothing to do + return + + for iface_name in config.list_nodes(base): + xdp_options_base = base + [iface_name, 'xdp-options'] + if config.exists(xdp_options_base + ['no-syscall-lock']): + # Delete no-syscall-lock option from configuration + config.delete(xdp_options_base + ['no-syscall-lock']) + if config.exists(xdp_options_base) and len(config.list_nodes(xdp_options_base)) == 0: + config.delete(xdp_options_base)