X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FVppConfigGenerator.py;h=437386d81d165900c65c6245ffe9d021bbe0f60b;hp=9a117626ea16f021fe8e9804cfd36e1523ef2ad0;hb=HEAD;hpb=9b28d46b56183770b8b354467f469c7fe5d7f19d diff --git a/resources/libraries/python/VppConfigGenerator.py b/resources/libraries/python/VppConfigGenerator.py index 9a117626ea..4191c0eed2 100644 --- a/resources/libraries/python/VppConfigGenerator.py +++ b/resources/libraries/python/VppConfigGenerator.py @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Cisco and/or its affiliates. +# Copyright (c) 2024 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: @@ -21,7 +21,7 @@ from resources.libraries.python.topology import NodeType from resources.libraries.python.topology import Topology from resources.libraries.python.VPPUtil import VPPUtil -__all__ = [u"VppConfigGenerator"] +__all__ = ["VppConfigGenerator", "VppInitConfig"] def pci_dev_check(pci_dev): @@ -49,17 +49,17 @@ class VppConfigGenerator: def __init__(self): """Initialize library.""" # VPP Node to apply configuration on - self._node = u"" + self._node = "" # Topology node key - self._node_key = u"" + self._node_key = "" # VPP Configuration self._nodeconfig = dict() # Serialized VPP Configuration - self._vpp_config = u"" + self._vpp_config = "" # VPP Service name - self._vpp_service_name = u"vpp" + self._vpp_service_name = "vpp" # VPP Startup config location - self._vpp_startup_conf = u"/etc/vpp/startup.conf" + self._vpp_startup_conf = "/etc/vpp/startup.conf" def set_node(self, node, node_key=None): """Set DUT node. @@ -70,9 +70,9 @@ class VppConfigGenerator: :type node_key: str :raises RuntimeError: If Node type is not DUT. """ - if node[u"type"] != NodeType.DUT: + if node["type"] != NodeType.DUT: raise RuntimeError( - u"Startup config can only be applied to DUTnode." + "Startup config can only be applied to DUTnode." ) self._node = node self._node_key = node_key @@ -102,8 +102,8 @@ class VppConfigGenerator: if path[0] not in config: config[path[0]] = dict() elif isinstance(config[path[0]], str): - config[path[0]] = dict() if config[path[0]] == u"" \ - else {config[path[0]]: u""} + config[path[0]] = dict() if config[path[0]] == "" \ + else {config[path[0]]: ""} self.add_config_item(config[path[0]], value, path[1:]) def dump_config(self, obj, level=-1): @@ -115,7 +115,7 @@ class VppConfigGenerator: :type level: int :returns: nothing """ - indent = u" " + indent = " " if level >= 0: self._vpp_config += f"{level * indent}{{\n" if isinstance(obj, dict): @@ -137,50 +137,50 @@ class VppConfigGenerator: :param value: Log file. :type value: str """ - path = [u"unix", u"log"] + path = ["unix", "log"] self.add_config_item(self._nodeconfig, value, path) - def add_unix_cli_listen(self, value=u"/run/vpp/cli.sock"): + def add_unix_cli_listen(self, value="/run/vpp/cli.sock"): """Add UNIX cli-listen configuration. :param value: CLI listen address and port or path to CLI socket. :type value: str """ - path = [u"unix", u"cli-listen"] + path = ["unix", "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) + path = ["unix", "cli-no-pager"] + self.add_config_item(self._nodeconfig, "", path) - def add_unix_gid(self, value=u"vpp"): + def add_unix_gid(self, value="vpp"): """Add UNIX gid configuration. :param value: Gid. :type value: str """ - path = [u"unix", u"gid"] + path = ["unix", "gid"] self.add_config_item(self._nodeconfig, value, path) def add_unix_nodaemon(self): """Add UNIX nodaemon configuration.""" - path = [u"unix", u"nodaemon"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["unix", "nodaemon"] + self.add_config_item(self._nodeconfig, "", path) def add_unix_coredump(self): """Add UNIX full-coredump configuration.""" - path = [u"unix", u"full-coredump"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["unix", "full-coredump"] + self.add_config_item(self._nodeconfig, "", path) def add_unix_exec(self, value): """Add UNIX exec configuration.""" - path = [u"unix", u"exec"] + path = ["unix", "exec"] self.add_config_item(self._nodeconfig, value, path) def add_socksvr(self, socket=Constants.SOCKSVR_PATH): """Add socksvr configuration.""" - path = [u"socksvr", u"socket-name"] + path = ["socksvr", "socket-name"] self.add_config_item(self._nodeconfig, socket, path) def add_graph_node_variant(self, variant=Constants.GRAPH_NODE_VARIANT): @@ -189,39 +189,48 @@ class VppConfigGenerator: :param value: Graph node variant default value. :type value: str """ - if variant == u"": + if variant == "": return - variant_list = [u"hsw", u"skx", u"icl"] + variant_list = ["hsw", "skx", "icl"] if variant not in variant_list: raise ValueError("Invalid graph node variant value") - path = [u"node", u"default", u"variant"] + path = ["node", "default", "variant"] self.add_config_item(self._nodeconfig, variant, path) - def add_api_segment_gid(self, value=u"vpp"): - """Add API-SEGMENT gid configuration. + def add_api_segment_gid(self, value="vpp"): + """Add api-segment gid configuration. :param value: Gid. :type value: str """ - path = [u"api-segment", u"gid"] + path = ["api-segment", "gid"] self.add_config_item(self._nodeconfig, value, path) def add_api_segment_global_size(self, value): - """Add API-SEGMENT global-size configuration. + """Add api-segment global-size configuration. :param value: Global size. :type value: str """ - path = [u"api-segment", u"global-size"] + path = ["api-segment", "global-size"] + self.add_config_item(self._nodeconfig, value, path) + + def add_api_segment_prefix(self, value="vpp"): + """Add api-segment prefix configuration. + + :param value: Gid. + :type value: str + """ + path = ["api-segment", "prefix"] self.add_config_item(self._nodeconfig, value, path) def add_api_segment_api_size(self, value): - """Add API-SEGMENT api-size configuration. + """Add api-segment api-size configuration. :param value: API size. :type value: str """ - path = [u"api-segment", u"api-size"] + path = ["api-segment", "api-size"] self.add_config_item(self._nodeconfig, value, path) def add_buffers_per_numa(self, value): @@ -230,7 +239,7 @@ class VppConfigGenerator: :param value: Number of buffers allocated. :type value: int """ - path = [u"buffers", u"buffers-per-numa"] + path = ["buffers", "buffers-per-numa"] self.add_config_item(self._nodeconfig, value, path) def add_buffers_default_data_size(self, value): @@ -239,7 +248,7 @@ class VppConfigGenerator: :param value: Buffers data-size allocated. :type value: int """ - path = [u"buffers", u"default data-size"] + path = ["buffers", "default data-size"] self.add_config_item(self._nodeconfig, value, path) def add_dpdk_dev(self, *devices): @@ -250,21 +259,26 @@ class VppConfigGenerator: """ for device in devices: if pci_dev_check(device): - path = [u"dpdk", f"dev {device}"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["dpdk", f"dev {device}"] + self.add_config_item(self._nodeconfig, "", path) - def add_dpdk_cryptodev(self, count): + def add_dpdk_cryptodev(self, count, num_rx_queues=1): """Add DPDK Crypto PCI device configuration. :param count: Number of HW crypto devices to add. + :param num_rx_queues: Number of RX queues per QAT interface. :type count: int - """ - cryptodev = Topology.get_cryptodev(self._node) - for i in range(count): - cryptodev_config = re.sub(r"\d.\d$", f"1.{str(i)}", cryptodev) - path = [u"dpdk", f"dev {cryptodev_config}"] - self.add_config_item(self._nodeconfig, u"", path) - self.add_dpdk_uio_driver(u"vfio-pci") + :type num_rx_queues: int + """ + cryptodevs = Topology.get_cryptodev(self._node) + for device in cryptodevs.values(): + for i in range(int(count/len(cryptodevs))): + numvfs = device["numvfs"] + computed = f"{(i+1)//numvfs}.{(i+1)%numvfs}" + addr = re.sub(r"\d.\d$", computed, device["pci_address"]) + path = ["dpdk", f"dev {addr}", "num-rx-queues"] + self.add_config_item(self._nodeconfig, num_rx_queues, path) + self.add_dpdk_uio_driver("vfio-pci") def add_dpdk_sw_cryptodev(self, sw_pmd_type, socket_id, count): """Add DPDK SW Crypto device configuration. @@ -279,8 +293,8 @@ class VppConfigGenerator: for _ in range(count): cryptodev_config = f"vdev cryptodev_{sw_pmd_type}_pmd," \ f"socket_id={str(socket_id)}" - path = [u"dpdk", cryptodev_config] - self.add_config_item(self._nodeconfig, u"", path) + path = ["dpdk", cryptodev_config] + self.add_config_item(self._nodeconfig, "", path) def add_dpdk_dev_default_rxq(self, value): """Add DPDK dev default rxq configuration. @@ -288,7 +302,7 @@ class VppConfigGenerator: :param value: Default number of rxqs. :type value: str """ - path = [u"dpdk", u"dev default", u"num-rx-queues"] + path = ["dpdk", "dev default", "num-rx-queues"] self.add_config_item(self._nodeconfig, value, path) def add_dpdk_dev_default_txq(self, value): @@ -297,7 +311,7 @@ class VppConfigGenerator: :param value: Default number of txqs. :type value: str """ - path = [u"dpdk", u"dev default", u"num-tx-queues"] + path = ["dpdk", "dev default", "num-tx-queues"] self.add_config_item(self._nodeconfig, value, path) def add_dpdk_dev_default_rxd(self, value): @@ -306,7 +320,7 @@ class VppConfigGenerator: :param value: Default number of rxds. :type value: str """ - path = [u"dpdk", u"dev default", u"num-rx-desc"] + path = ["dpdk", "dev default", "num-rx-desc"] self.add_config_item(self._nodeconfig, value, path) def add_dpdk_dev_default_txd(self, value): @@ -315,22 +329,27 @@ class VppConfigGenerator: :param value: Default number of txds. :type value: str """ - path = [u"dpdk", u"dev default", u"num-tx-desc"] + path = ["dpdk", "dev default", "num-tx-desc"] self.add_config_item(self._nodeconfig, value, path) + def add_dpdk_dev_default_tso(self): + """Add DPDK dev default tso configuration.""" + path = [u"dpdk", u"dev default", u"tso"] + self.add_config_item(self._nodeconfig, "on", path) + def add_dpdk_log_level(self, value): """Add DPDK log-level configuration. :param value: Log level. :type value: str """ - path = [u"dpdk", u"log-level"] + path = ["dpdk", "log-level"] self.add_config_item(self._nodeconfig, value, path) def add_dpdk_no_pci(self): """Add DPDK no-pci.""" - path = [u"dpdk", u"no-pci"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["dpdk", "no-pci"] + self.add_config_item(self._nodeconfig, "", path) def add_dpdk_uio_driver(self, value=None): """Add DPDK uio-driver configuration. @@ -342,7 +361,7 @@ class VppConfigGenerator: """ if value is None: value = Topology.get_uio_driver(self._node) - path = [u"dpdk", u"uio-driver"] + path = ["dpdk", "uio-driver"] self.add_config_item(self._nodeconfig, value, path) def add_dpdk_max_simd_bitwidth(self, variant=Constants.GRAPH_NODE_VARIANT): @@ -351,23 +370,28 @@ class VppConfigGenerator: :param value: Graph node variant default value. :type value: str """ - if variant == u"icl": + if variant == "icl": value = 512 - elif variant in [u"skx", u"hsw"]: + elif variant in ["skx", "hsw"]: value = 256 else: return - path = [u"dpdk", u"max-simd-bitwidth"] + path = ["dpdk", "max-simd-bitwidth"] self.add_config_item(self._nodeconfig, value, path) + def add_dpdk_enable_tcp_udp_checksum(self): + """Add DPDK enable-tcp-udp-checksum configuration.""" + path = [u"dpdk", u"enable-tcp-udp-checksum"] + self.add_config_item(self._nodeconfig, u"", path) + def add_cpu_main_core(self, value): """Add CPU main core configuration. :param value: Main core option. :type value: str """ - path = [u"cpu", u"main-core"] + path = ["cpu", "main-core"] self.add_config_item(self._nodeconfig, value, path) def add_cpu_corelist_workers(self, value): @@ -376,7 +400,7 @@ class VppConfigGenerator: :param value: Corelist-workers option. :type value: str """ - path = [u"cpu", u"corelist-workers"] + path = ["cpu", "corelist-workers"] self.add_config_item(self._nodeconfig, value, path) def add_main_heap_size(self, value): @@ -385,7 +409,7 @@ class VppConfigGenerator: :param value: Amount of heap. :type value: str """ - path = [u"memory", u"main-heap-size"] + path = ["memory", "main-heap-size"] self.add_config_item(self._nodeconfig, value, path) def add_main_heap_page_size(self, value): @@ -394,7 +418,7 @@ class VppConfigGenerator: :param value: Heap page size. :type value: str """ - path = [u"memory", u"main-heap-page-size"] + path = ["memory", "main-heap-page-size"] self.add_config_item(self._nodeconfig, value, path) def add_default_hugepage_size(self, value=Constants.DEFAULT_HUGEPAGE_SIZE): @@ -403,13 +427,13 @@ class VppConfigGenerator: :param value: Hugepage size. :type value: str """ - path = [u"memory", u"default-hugepage-size"] + path = ["memory", "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"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["api-trace", "on"] + self.add_config_item(self._nodeconfig, "", path) def add_ip6_hash_buckets(self, value): """Add IP6 hash buckets configuration. @@ -417,7 +441,7 @@ class VppConfigGenerator: :param value: Number of IP6 hash buckets. :type value: str """ - path = [u"ip6", u"hash-buckets"] + path = ["ip6", "hash-buckets"] self.add_config_item(self._nodeconfig, value, path) def add_ip6_heap_size(self, value): @@ -426,7 +450,7 @@ class VppConfigGenerator: :param value: IP6 Heapsize amount. :type value: str """ - path = [u"ip6", u"heap-size"] + path = ["ip6", "heap-size"] self.add_config_item(self._nodeconfig, value, path) def add_ipsec_spd_flow_cache_ipv4_inbound(self, value): @@ -435,7 +459,7 @@ class VppConfigGenerator: :param value: "on" to enable spd flow cache. :type value: str """ - path = [u"ipsec", u"ipv4-inbound-spd-flow-cache"] + path = ["ipsec", "ipv4-inbound-spd-flow-cache"] self.add_config_item(self._nodeconfig, value, path) def add_ipsec_spd_flow_cache_ipv4_outbound(self, value): @@ -444,7 +468,7 @@ class VppConfigGenerator: :param value: "on" to enable spd flow cache. :type value: str """ - path = [u"ipsec", u"ipv4-outbound-spd-flow-cache"] + path = ["ipsec", "ipv4-outbound-spd-flow-cache"] self.add_config_item(self._nodeconfig, value, path) def add_ipsec_spd_fast_path_ipv4_inbound(self, value): @@ -462,7 +486,7 @@ class VppConfigGenerator: :param value: "on" to enable spd fast path. :type value: str """ - path = [u"ipsec", u"ipv4-outbound-spd-fast-path"] + path = ["ipsec", "ipv4-outbound-spd-fast-path"] self.add_config_item(self._nodeconfig, value, path) def add_ipsec_spd_fast_path_num_buckets(self, value): @@ -471,7 +495,7 @@ class VppConfigGenerator: :param value: Number of buckets. :type value: int """ - path = [u"ipsec", u"spd-fast-path-num-buckets"] + path = ["ipsec", "spd-fast-path-num-buckets"] self.add_config_item(self._nodeconfig, value, path) def add_statseg_size(self, value): @@ -480,7 +504,7 @@ class VppConfigGenerator: :param value: Stats heapsize amount. :type value: str """ - path = [u"statseg", u"size"] + path = ["statseg", "size"] self.add_config_item(self._nodeconfig, value, path) def add_statseg_page_size(self, value): @@ -489,7 +513,7 @@ class VppConfigGenerator: :param value: Stats heapsize amount. :type value: str """ - path = [u"statseg", u"page-size"] + path = ["statseg", "page-size"] self.add_config_item(self._nodeconfig, value, path) def add_statseg_per_node_counters(self, value): @@ -498,7 +522,7 @@ class VppConfigGenerator: :param value: "on" to switch the counters on. :type value: str """ - path = [u"statseg", u"per-node-counters"] + path = ["statseg", "per-node-counters"] self.add_config_item(self._nodeconfig, value, path) def add_plugin(self, state, *plugins): @@ -510,27 +534,27 @@ class VppConfigGenerator: :type plugins: list """ for plugin in plugins: - path = [u"plugins", f"plugin {plugin}", state] - self.add_config_item(self._nodeconfig, u" ", path) + path = ["plugins", f"plugin {plugin}", state] + self.add_config_item(self._nodeconfig, " ", path) def add_dpdk_no_multi_seg(self): """Add DPDK no-multi-seg configuration.""" - path = [u"dpdk", u"no-multi-seg"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["dpdk", "no-multi-seg"] + self.add_config_item(self._nodeconfig, "", path) def add_dpdk_no_tx_checksum_offload(self): """Add DPDK no-tx-checksum-offload configuration.""" - path = [u"dpdk", u"no-tx-checksum-offload"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["dpdk", "no-tx-checksum-offload"] + self.add_config_item(self._nodeconfig, "", path) - def add_nat(self, value=u"deterministic"): + def add_nat(self, value="deterministic"): """Add NAT mode configuration. :param value: NAT mode. :type value: str """ - path = [u"nat", value] - self.add_config_item(self._nodeconfig, u"", path) + path = ["nat", value] + self.add_config_item(self._nodeconfig, "", path) def add_nat_max_translations_per_thread(self, value): """Add NAT max. translations per thread number configuration. @@ -538,21 +562,21 @@ class VppConfigGenerator: :param value: NAT mode. :type value: str """ - path = [u"nat", u"max translations per thread"] + path = ["nat", "max translations per thread"] self.add_config_item(self._nodeconfig, value, path) def add_nsim_poll_main_thread(self): """Add NSIM poll-main-thread configuration.""" - path = [u"nsim", u"poll-main-thread"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["nsim", "poll-main-thread"] + self.add_config_item(self._nodeconfig, "", path) - def add_tcp_congestion_control_algorithm(self, value=u"cubic"): + def add_tcp_congestion_control_algorithm(self, value="cubic"): """Add TCP congestion control algorithm. :param value: The congestion control algorithm to use. Example: cubic :type value: str """ - path = [u"tcp", u"cc-algo"] + path = ["tcp", "cc-algo"] self.add_config_item(self._nodeconfig, value, path) def add_tcp_preallocated_connections(self, value): @@ -561,7 +585,7 @@ class VppConfigGenerator: :param value: The number of pre-allocated connections. :type value: int """ - path = [u"tcp", u"preallocated-connections"] + path = ["tcp", "preallocated-connections"] self.add_config_item(self._nodeconfig, value, path) def add_tcp_preallocated_half_open_connections(self, value): @@ -570,23 +594,28 @@ class VppConfigGenerator: :param value: The number of pre-allocated half open connections. :type value: int """ - path = [u"tcp", u"preallocated-half-open-connections"] + path = ["tcp", "preallocated-half-open-connections"] self.add_config_item(self._nodeconfig, value, path) + def add_tcp_tso(self): + """Add TCP tso configuration.""" + path = [u"tcp", u"tso"] + self.add_config_item(self._nodeconfig, u"", path) + def add_session_enable(self): """Add session enable.""" - path = [u"session", u"enable"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["session", "enable"] + self.add_config_item(self._nodeconfig, "", 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) + path = ["session", "use-app-socket-api"] + self.add_config_item(self._nodeconfig, "", path) def add_session_event_queues_memfd_segment(self): """Add session event queue memfd segment.""" - path = [u"session", u"evt_qs_memfd_seg"] - self.add_config_item(self._nodeconfig, u"", path) + path = ["session", "evt_qs_memfd_seg"] + self.add_config_item(self._nodeconfig, "", path) def add_session_event_queue_length(self, value): """Add session event queue length. @@ -594,7 +623,7 @@ class VppConfigGenerator: :param value: Session event queue length. :type value: int """ - path = [u"session", u"event-queue-length"] + path = ["session", "event-queue-length"] self.add_config_item(self._nodeconfig, value, path) def add_session_event_queues_segment_size(self, value): @@ -603,7 +632,7 @@ class VppConfigGenerator: :param value: Session event queue segment size. :type value: str """ - path = [u"session", u"evt_qs_seg_size"] + path = ["session", "evt_qs_seg_size"] self.add_config_item(self._nodeconfig, value, path) def add_session_preallocated_sessions(self, value): @@ -612,7 +641,7 @@ class VppConfigGenerator: :param value: Number of pre-allocated sessions. :type value: int """ - path = [u"session", u"preallocated-sessions"] + path = ["session", "preallocated-sessions"] self.add_config_item(self._nodeconfig, value, path) def add_session_v4_session_table_buckets(self, value): @@ -621,7 +650,7 @@ class VppConfigGenerator: :param value: Number of v4 session table buckets. :type value: int """ - path = [u"session", u"v4-session-table-buckets"] + path = ["session", "v4-session-table-buckets"] self.add_config_item(self._nodeconfig, value, path) def add_session_v4_session_table_memory(self, value): @@ -630,7 +659,7 @@ class VppConfigGenerator: :param value: Size of v4 session table memory. :type value: str """ - path = [u"session", u"v4-session-table-memory"] + path = ["session", "v4-session-table-memory"] self.add_config_item(self._nodeconfig, value, path) def add_session_v4_halfopen_table_buckets(self, value): @@ -639,7 +668,7 @@ class VppConfigGenerator: :param value: Number of v4 halfopen table buckets. :type value: int """ - path = [u"session", u"v4-halfopen-table-buckets"] + path = ["session", "v4-halfopen-table-buckets"] self.add_config_item(self._nodeconfig, value, path) def add_session_v4_halfopen_table_memory(self, value): @@ -648,7 +677,7 @@ class VppConfigGenerator: :param value: Size of v4 halfopen table memory. :type value: str """ - path = [u"session", u"v4-halfopen-table-memory"] + path = ["session", "v4-halfopen-table-memory"] self.add_config_item(self._nodeconfig, value, path) def add_session_local_endpoints_table_buckets(self, value): @@ -657,7 +686,7 @@ class VppConfigGenerator: :param value: Number of local endpoints table buckets. :type value: int """ - path = [u"session", u"local-endpoints-table-buckets"] + path = ["session", "local-endpoints-table-buckets"] self.add_config_item(self._nodeconfig, value, path) def add_session_local_endpoints_table_memory(self, value): @@ -666,7 +695,31 @@ class VppConfigGenerator: :param value: Size of local endpoints table memory. :type value: str """ - path = [u"session", u"local-endpoints-table-memory"] + path = ["session", "local-endpoints-table-memory"] + self.add_config_item(self._nodeconfig, value, path) + + def add_session_use_dma(self): + """Add session use-dma configuration.""" + path = [u"session", u"use-dma"] + self.add_config_item(self._nodeconfig, u"", path) + + def add_dma_dev(self, devices): + """Add DMA devices configuration. + + :param devices: DMA devices or work queues. + :type devices: list + """ + for device in devices: + path = ["dsa", f"dev {device}"] + self.add_config_item(self._nodeconfig, "", path) + + def add_logging_default_syslog_log_level(self, value="debug"): + """Add default logging level for syslog. + + :param value: Log level. + :type value: str + """ + path = ["logging", "default-syslog-log-level"] self.add_config_item(self._nodeconfig, value, path) def write_config(self, filename=None): @@ -685,7 +738,7 @@ class VppConfigGenerator: cmd = f"echo \"{self._vpp_config}\" | sudo tee {filename}" exec_cmd_no_error( - self._node, cmd, message=u"Writing config file failed!" + self._node, cmd, message="Writing config file failed!" ) def apply_config(self, filename=None, verify_vpp=True): @@ -704,3 +757,40 @@ class VppConfigGenerator: VPPUtil.restart_vpp_service(self._node, self._node_key) if verify_vpp: VPPUtil.verify_vpp(self._node) + + +class VppInitConfig: + """VPP Initial Configuration.""" + @staticmethod + def init_vpp_startup_configuration_on_all_duts(nodes): + """Apply initial VPP startup configuration on all DUTs. + + :param nodes: Nodes in the topology. + :type nodes: dict + """ + huge_size = Constants.DEFAULT_HUGEPAGE_SIZE + for node in nodes.values(): + if node["type"] == NodeType.DUT: + vpp_config = VppConfigGenerator() + vpp_config.set_node(node) + vpp_config.add_unix_log() + vpp_config.add_unix_cli_listen() + vpp_config.add_unix_cli_no_pager() + vpp_config.add_unix_gid() + vpp_config.add_unix_coredump() + vpp_config.add_socksvr(socket=Constants.SOCKSVR_PATH) + vpp_config.add_main_heap_size("2G") + vpp_config.add_main_heap_page_size(huge_size) + vpp_config.add_default_hugepage_size(huge_size) + vpp_config.add_statseg_size("2G") + vpp_config.add_statseg_page_size(huge_size) + vpp_config.add_statseg_per_node_counters("on") + vpp_config.add_plugin("disable", "default") + vpp_config.add_plugin("enable", "dpdk_plugin.so") + vpp_config.add_dpdk_dev( + *[node["interfaces"][interface].get("pci_address") \ + for interface in node["interfaces"]] + ) + vpp_config.add_ip6_hash_buckets(2000000) + vpp_config.add_ip6_heap_size("4G") + vpp_config.apply_config()