-# Copyright (c) 2020 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
# See the License for the specific language governing permissions and
# limitations under the License.
-"""VPP Configuration File Generator library.
-
-TODO: Support initialization with default values,
-so that we do not need to have block of 6 "Add Unix" commands
-in 7 various places of CSIT code.
-"""
+"""VPP Configuration File Generator library."""
import re
self._vpp_logfile = u"/tmp/vpe.log"
# VPP Startup config location
self._vpp_startup_conf = u"/etc/vpp/startup.conf"
- # VPP Startup config backup location
- self._vpp_startup_conf_backup = None
def set_node(self, node, node_key=None):
"""Set DUT node.
self._node = node
self._node_key = node_key
- def set_vpp_logfile(self, logfile):
- """Set VPP logfile location.
-
- :param logfile: VPP logfile location.
- :type logfile: str
- """
- self._vpp_logfile = logfile
-
- def set_vpp_startup_conf_backup(self, backup=u"/etc/vpp/startup.backup"):
- """Set VPP startup configuration backup.
-
- :param backup: VPP logfile location.
- :type backup: str
- """
- self._vpp_startup_conf_backup = backup
-
def get_config_str(self):
"""Get dumped startup configuration in VPP config format.
path = [u"unix", u"cli-listen"]
self.add_config_item(self._nodeconfig, value, path)
+ def add_unix_cli_no_pager(self):
+ """Add UNIX cli-no-pager configuration."""
+ path = [u"unix", u"cli-no-pager"]
+ self.add_config_item(self._nodeconfig, u"", path)
+
def add_unix_gid(self, value=u"vpp"):
"""Add UNIX gid configuration.
path = [u"dpdk", f"dev {device}"]
self.add_config_item(self._nodeconfig, u"", path)
- def add_dpdk_dev_parameter(self, device, parameter, value):
- """Add parameter for DPDK device.
-
- :param device: PCI device (format xxxx:xx:xx.x).
- :param parameter: Parameter name.
- :param value: Parameter value.
- :type device: str
- :type parameter: str
- :type value: str
- """
- if pci_dev_check(device):
- path = [u"dpdk", f"dev {device}", parameter]
- self.add_config_item(self._nodeconfig, value, path)
-
def add_dpdk_cryptodev(self, count):
"""Add DPDK Crypto PCI device configuration.
path = [u"dpdk", cryptodev_config]
self.add_config_item(self._nodeconfig, u"", path)
- def add_dpdk_eth_bond_dev(self, ethbond_id, mode, xmit_policy, *slaves):
- """Add DPDK Eth_bond device configuration.
-
- :param ethbond_id: Eth_bond device ID.
- :param mode: Link bonding mode.
- :param xmit_policy: Transmission policy.
- :param slaves: PCI device(s) to be bonded (format xxxx:xx:xx.x).
- :type ethbond_id: str or int
- :type mode: str or int
- :type xmit_policy: str
- :type slaves: list
- """
- slaves_config = u"slave=" + u",slave=".join(
- slave if pci_dev_check(slave) else u"" for slave in slaves
- )
- ethbond_config = f"vdev eth_bond{ethbond_id}," \
- f"mode={mode}{slaves_config},xmit_policy={xmit_policy}"
- path = [u"dpdk", ethbond_config]
- self.add_config_item(self._nodeconfig, u"", path)
-
def add_dpdk_dev_default_rxq(self, value):
"""Add DPDK dev default rxq configuration.
path = [u"dpdk", u"uio-driver"]
self.add_config_item(self._nodeconfig, value, path)
+ def add_dpdk_max_simd_bitwidth(self, variant=Constants.GRAPH_NODE_VARIANT):
+ """Add DPDK max-simd-bitwidth configuration.
+
+ :param value: Graph node variant default value.
+ :type value: str
+ """
+ if variant == u"icl":
+ value = 512
+ elif variant in [u"skx", u"hsw"]:
+ value = 256
+ else:
+ return
+
+ path = [u"dpdk", u"max-simd-bitwidth"]
+ self.add_config_item(self._nodeconfig, value, path)
+
def add_cpu_main_core(self, value):
"""Add CPU main core configuration.
path = [u"memory", u"main-heap-page-size"]
self.add_config_item(self._nodeconfig, value, path)
+ def add_default_hugepage_size(self, value=Constants.DEFAULT_HUGEPAGE_SIZE):
+ """Add Default Hugepage Size configuration.
+
+ :param value: Hugepage size.
+ :type value: str
+ """
+ path = [u"memory", u"default-hugepage-size"]
+ self.add_config_item(self._nodeconfig, value, path)
+
def add_api_trace(self):
"""Add API trace configuration."""
path = [u"api-trace", u"on"]
path = [u"ip6", u"heap-size"]
self.add_config_item(self._nodeconfig, value, path)
+ def add_ipsec_spd_flow_cache_ipv4_outbound(self, value):
+ """Add IPsec spd flow cache for IP4 outbound.
+
+ :param value: "on" to enable spd flow cache.
+ :type value: str
+ """
+ path = [u"ipsec", u"ipv4-outbound-spd-flow-cache"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ipsec_spd_fast_path_ipv4_outbound(self, value):
+ """Add IPsec spd fast path for IP4 outbound.
+
+ :param value: "on" to enable spd fast path.
+ :type value: str
+ """
+ path = [u"ipsec", u"ipv4-outbound-spd-fast-path"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ipsec_spd_fast_path_num_buckets(self, value):
+ """Add num buckets for IPsec spd fast path.
+
+ :param value: Number of buckets.
+ :type value: int
+ """
+ path = [u"ipsec", u"spd-fast-path-num-buckets"]
+ self.add_config_item(self._nodeconfig, value, path)
+
def add_statseg_size(self, value):
"""Add Stats Heap Size configuration.
path = [u"session", u"enable"]
self.add_config_item(self._nodeconfig, u"", path)
+ def add_session_app_socket_api(self):
+ """Use session app socket api."""
+ path = [u"session", u"use-app-socket-api"]
+ self.add_config_item(self._nodeconfig, u"", path)
+
def add_session_event_queues_memfd_segment(self):
"""Add session event queue memfd segment."""
path = [u"session", u"evt_qs_memfd_seg"]
if filename is None:
filename = self._vpp_startup_conf
- if self._vpp_startup_conf_backup is not None:
- cmd = f"cp {self._vpp_startup_conf} {self._vpp_startup_conf_backup}"
- exec_cmd_no_error(
- self._node, cmd, sudo=True, message=u"Copy config file failed!"
- )
-
cmd = f"echo \"{self._vpp_config}\" | sudo tee {filename}"
exec_cmd_no_error(
self._node, cmd, message=u"Writing config file failed!"
VPPUtil.restart_vpp_service(self._node, self._node_key)
if verify_vpp:
VPPUtil.verify_vpp(self._node)
-
- def restore_config(self):
- """Restore VPP startup.conf from backup."""
- cmd = f"cp {self._vpp_startup_conf_backup} {self._vpp_startup_conf}"
- exec_cmd_no_error(
- self._node, cmd, sudo=True, message=u"Copy config file failed!"
- )