+ CORE_DUMP_DIR = "/tmp"
+
+ # Perf stat events (comma separated).
+ PERF_STAT_EVENTS = get_str_from_env(
+ "PERF_STAT_EVENTS",
+ "cpu-clock,context-switches,cpu-migrations,page-faults,"
+ "cycles,instructions,branches,branch-misses,L1-icache-load-misses")
+
+ # Equivalent to ~0 used in vpp code
+ BITWISE_NON_ZERO = 0xffffffff
+
+ # Default path to VPP API socket.
+ SOCKSVR_PATH = "/run/vpp/api.sock"
+
+ # Default path to VPP CLI socket.
+ SOCKCLI_PATH = "/run/vpp/cli.sock"
+
+ # Default path to VPP API Stats socket.
+ SOCKSTAT_PATH = "/run/vpp/stats.sock"
+
+ # This MTU value is used to force VPP to fragment 1518B packet into two.
+ MTU_FOR_FRAGMENTATION = 1043
+
+ # Number of trials to execute in MRR test.
+ PERF_TRIAL_MULTIPLICITY = get_int_from_env("PERF_TRIAL_MULTIPLICITY", 10)
+
+ # Duration [s] of one trial in MRR test.
+ PERF_TRIAL_DURATION = get_float_from_env("PERF_TRIAL_DURATION", 1.0)
+
+ # Whether to use latency streams in main search trials.
+ PERF_USE_LATENCY = get_pessimistic_bool_from_env("PERF_USE_LATENCY")
+
+ # Duration of one latency-specific trial in NDRPDR test.
+ PERF_TRIAL_LATENCY_DURATION = get_float_from_env(
+ "PERF_TRIAL_LATENCY_DURATION", 5.0)
+
+ # For some testbeds TG takes longer than usual to start sending traffic.
+ # This constant [s] allows longer wait, without affecting
+ # the approximate duration. For example, use 0.098 for AWS.
+ PERF_TRIAL_STL_DELAY = get_float_from_env("PERF_TRIAL_STL_DELAY", 0.0)
+
+ # ASTF usually needs a different value for the delay.
+ PERF_TRIAL_ASTF_DELAY = get_float_from_env(
+ "PERF_TRIAL_ASTF_DELAY", 0.112
+ )
+
+ # Number of data frames in TPUT transaction, used both by TCP and UDP.
+ # The value should be 33 to keep historic continuity for UDP TPUT tests,
+ # but we are limited by TRex window of 48 KiB, so for 9000B tests
+ # it means we can send only 5 full data frames in a burst.
+ # https://github.com/cisco-system-traffic-generator/
+ # trex-core/blob/v2.88/src/44bsd/tcp_var.h#L896-L903
+ ASTF_N_DATA_FRAMES = get_int_from_env("ASTF_N_DATA_FRAMES", 5)
+
+ # Extended debug (incl. vpp packet trace, linux perf stat, ...).
+ # Full list is available as suite variable (__init__.robot) or is
+ # override by test.
+ EXTENDED_DEBUG = get_pessimistic_bool_from_env("EXTENDED_DEBUG")
+
+ # UUID string of DUT1 /tmp volume created outside of the
+ # DUT1 docker in case of vpp-device test. ${EMPTY} value means that
+ # /tmp directory is inside the DUT1 docker.
+ DUT1_UUID = get_str_from_env("DUT1_UUID", "")
+
+ # Global "kill switch" for CRC checking during runtime.
+ FAIL_ON_CRC_MISMATCH = get_pessimistic_bool_from_env(
+ "FAIL_ON_CRC_MISMATCH"
+ )
+
+ # Default IP4 prefix length (if not defined in topology file)
+ DEFAULT_IP4_PREFIX_LENGTH = "24"
+
+ # Maximum number of interfaces in a data path
+ DATAPATH_INTERFACES_MAX = 100
+
+ # Mapping from NIC name to its bps limit.
+ NIC_NAME_TO_BPS_LIMIT = {
+ "Intel-X710": 10000000000,
+ "Intel-XL710": 24500000000,
+ "Intel-XXV710": 24500000000,
+ "Intel-E810XXV": 24500000000,
+ "Intel-E822CQ": 24500000000,
+ "Intel-E823C": 24500000000,
+ "Intel-E810CQ": 100000000000,
+ "Mellanox-CX556A": 100000000000,
+ "Mellanox-CX6DX": 100000000000,
+ "Mellanox-CX7VEAT": 200000000000,
+ "Amazon-Nitro-50G": 10000000000,
+ "Amazon-Nitro-100G": 10000000000,
+ "Amazon-Nitro-200G": 16000000000,
+ "virtual": 100000000,
+ }
+
+ # Mapping from NIC name to its pps limit.
+ NIC_NAME_TO_PPS_LIMIT = {
+ "Intel-X710": 14880952,
+ "Intel-XL710": 18750000,
+ "Intel-XXV710": 18750000,
+ "Intel-E810XXV": 29000000,
+ "Intel-E822CQ": 29000000,
+ "Intel-E823C": 29000000,
+ "Intel-E810CQ": 58500000,
+ "Mellanox-CX556A": 148809523,
+ "Mellanox-CX6DX": 148809523,
+ "Mellanox-CX7VEAT": 297619046,
+ "Amazon-Nitro-50G": 1500000,
+ "Amazon-Nitro-100G": 3000000,
+ "Amazon-Nitro-200G": 6000000,
+ "virtual": 14880952,
+ }
+
+ # Suite file names use codes for NICs.
+ NIC_NAME_TO_CODE = {
+ "Intel-X710": "10ge2p1x710",
+ "Intel-XL710": "40ge2p1xl710",
+ "Intel-XXV710": "25ge2p1xxv710",
+ "Intel-E810XXV": "25ge2p1e810xxv",
+ "Intel-E822CQ": "25ge2p1e822cq",
+ "Intel-E823C": "25ge2p1e823c",
+ "Intel-E810CQ": "100ge2p1e810cq",
+ "Amazon-Nitro-50G": "50ge1p1ena",
+ "Amazon-Nitro-100G": "100ge1p1ena",
+ "Amazon-Nitro-200G": "200ge1p1ena",
+ "Mellanox-CX556A": "100ge2p1cx556a",
+ "Mellanox-CX6DX": "100ge2p1cx6dx",
+ "Mellanox-CX7VEAT": "200ge2p1cx7veat",
+ "Mellanox-CX7VEAT": "200ge6p3cx7veat",
+ "virtual": "1ge1p82540em",
+ }
+ NIC_CODE_TO_NAME = {
+ "10ge2p1x710": "Intel-X710",
+ "40ge2p1xl710": "Intel-XL710",
+ "25ge2p1xxv710": "Intel-XXV710",
+ "25ge2p1e810xxv": "Intel-E810XXV",
+ "25ge2p1e822cq": "Intel-E822CQ",
+ "25ge2p1e823c": "Intel-E823C",
+ "100ge2p1e810cq": "Intel-E810CQ",
+ "50ge1p1ena": "Amazon-Nitro-50G",
+ "100ge1p1ena": "Amazon-Nitro-100G",
+ "200ge1p1ena": "Amazon-Nitro-200G",
+ "100ge2p1cx556a": "Mellanox-CX556A",
+ "100ge2p1cx6dx": "Mellanox-CX6DX",
+ "200ge2p1cx7veat": "Mellanox-CX7VEAT",
+ "200ge6p3cx7veat": "Mellanox-CX7VEAT",
+ "1ge1p82540em": "virtual",
+ }
+
+ # Shortened lowercase NIC model name, useful for presentation.
+ NIC_CODE_TO_SHORT_NAME = {
+ "10ge2p1x710": "x710",
+ "40ge2p1xl710": "xl710",
+ "25ge2p1xxv710": "xxv710",
+ "25ge2p1e810xxv": "e810xxv",
+ "25ge2p1e822cq": "e822cq",
+ "25ge2p1e823c": "e823c",
+ "100ge2p1e810cq": "e810cq",
+ "50ge1p1ena": "ena",
+ "100ge1p1ena": "ena100",
+ "200ge1p1ena": "ena200",
+ "100ge2p1cx556a": "cx556a",
+ "100ge2p1cx6dx": "cx6dx",
+ "200ge2p1cx7veat": "cx7veat",
+ "200ge6p3cx7veat": "cx7veat",
+ "1ge1p82540em": "82540em",
+ }
+
+ # Not each driver is supported by each NIC.
+ NIC_NAME_TO_DRIVER = {
+ "Intel-X710": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-XL710": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-XXV710": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E810XXV": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E822CQ": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E823C": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E810CQ": ["vfio-pci", "avf", "af_xdp"],
+ "Amazon-Nitro-50G": ["vfio-pci"],
+ "Amazon-Nitro-100G": ["vfio-pci"],
+ "Amazon-Nitro-200G": ["vfio-pci"],
+ "Mellanox-CX556A": ["rdma-core", "mlx5_core", "af_xdp"],
+ "Mellanox-CX6DX": ["rdma-core", "mlx5_core", "af_xdp"],
+ "Mellanox-CX7VEAT": ["rdma-core", "mlx5_core", "af_xdp"],
+ "virtual": ["vfio-pci"],
+ }
+
+ # Each driver needs different plugin to work.
+ NIC_DRIVER_TO_PLUGINS = {
+ "vfio-pci": "dpdk_plugin.so",
+ "avf": "avf_plugin.so",
+ "rdma-core": "rdma_plugin.so",
+ "mlx5_core": "dpdk_plugin.so",
+ "af_xdp": "af_xdp_plugin.so",
+ }
+
+ # Tags to differentiate tests for different NIC driver.
+ NIC_DRIVER_TO_TAG = {
+ "vfio-pci": "DRV_VFIO_PCI",
+ "avf": "DRV_AVF",
+ "rdma-core": "DRV_RDMA_CORE",
+ "mlx5_core": "DRV_MLX5_CORE",
+ "af_xdp": "DRV_AF_XDP",
+ }
+
+ # Suite names have to be different, add prefix.
+ NIC_DRIVER_TO_SUITE_PREFIX = {
+ "vfio-pci": "",
+ "avf": "avf-",
+ "rdma-core": "rdma-",
+ "mlx5_core": "mlx5-",
+ "af_xdp": "af-xdp-",
+ }
+
+ # Number of virtual functions of physical nic.
+ NIC_DRIVER_TO_VFS = {
+ "vfio-pci": "nic_vfs}= | 0",
+ "avf": "nic_vfs}= | 1",
+ "rdma-core": "nic_vfs}= | 0",
+ "mlx5_core": "nic_vfs}= | 0",
+ "af_xdp": "nic_vfs}= | 0",
+ }
+
+ # Number of physical interfaces of physical nic.
+ NIC_CODE_TO_PFS = {
+ "10ge2p1x710": "nic_pfs}= | 2",
+ "40ge2p1xl710": "nic_pfs}= | 2",
+ "25ge2p1xxv710": "nic_pfs}= | 2",
+ "25ge2p1e810xxv": "nic_pfs}= | 2",
+ "25ge2p1e822cq": "nic_pfs}= | 2",
+ "25ge2p1e823c": "nic_pfs}= | 2",
+ "100ge2p1e810cq": "nic_pfs}= | 2",
+ "50ge1p1ena": "nic_pfs}= | 2",
+ "100ge1p1ena": "nic_pfs}= | 2",
+ "200ge1p1ena": "nic_pfs}= | 2",
+ "100ge2p1cx556a": "nic_pfs}= | 2",
+ "100ge2p1cx6dx": "nic_pfs}= | 2",
+ "200ge2p1cx7veat": "nic_pfs}= | 2",
+ "200ge6p3cx7veat": "nic_pfs}= | 6",
+ "1ge1p82540em": "nic_pfs}= | 2",
+ }
+
+ NIC_CODE_TO_CORESCALE = {
+ "10ge2p1x710": 1,
+ "40ge2p1xl710": 1,
+ "25ge2p1xxv710": 1,
+ "25ge2p1e810xxv": 1,
+ "25ge2p1e822cq": 1,
+ "25ge2p1e823c": 1,
+ "100ge2p1e810cq": 1,
+ "50ge1p1ena": 1,
+ "100ge1p1ena": 1,
+ "200ge1p1ena": 1,
+ "100ge2p1cx556a": 1,
+ "100ge2p1cx6dx": 1,
+ "200ge2p1cx7veat": 1,
+ "200ge6p3cx7veat": 3,
+ "1ge1p82540em": 1,
+ }
+
+ # Not each driver is supported by each NIC.
+ DPDK_NIC_NAME_TO_DRIVER = {
+ "Intel-X710": ["vfio-pci"],
+ "Intel-XL710": ["vfio-pci"],
+ "Intel-XXV710": ["vfio-pci"],
+ "Intel-E810XXV": ["vfio-pci"],
+ "Intel-E822CQ": ["vfio-pci"],
+ "Intel-E823C": ["vfio-pci"],
+ "Intel-E810CQ": ["vfio-pci"],
+ "Amazon-Nitro-50G": ["vfio-pci"],
+ "Amazon-Nitro-100G": ["vfio-pci"],
+ "Amazon-Nitro-200G": ["vfio-pci"],
+ "Mellanox-CX556A": ["mlx5_core"],
+ "Mellanox-CX6DX": ["mlx5_core"],
+ "Mellanox-CX7VEAT": ["mlx5_core"],
+ "virtual": ["vfio-pci"],
+ }
+
+ # Tags to differentiate tests for different NIC driver.
+ DPDK_NIC_DRIVER_TO_TAG = {
+ "vfio-pci": "DRV_VFIO_PCI",
+ "mlx5_core": "DRV_MLX5_CORE",
+ }
+
+ # Suite names have to be different, add prefix.
+ DPDK_NIC_DRIVER_TO_SUITE_PREFIX = {
+ "vfio-pci": "",
+ "mlx5_core": "mlx5-",
+ }
+
+ # Some identifiers constructed from suite names
+ # have to be independent of NIC driver used.
+ # In order to remove or reject the NIC driver part,
+ # it is useful to have a list of such prefixes precomputed.
+ FORBIDDEN_SUITE_PREFIX_LIST = [
+ prefix for prefix in NIC_DRIVER_TO_SUITE_PREFIX.values() if prefix
+ ]
+ FORBIDDEN_SUITE_PREFIX_LIST += [
+ prefix for prefix in DPDK_NIC_DRIVER_TO_SUITE_PREFIX.values() if prefix
+ ]
+
+ # TODO CSIT-1481: Crypto HW should be read from topology file instead.
+ NIC_NAME_TO_CRYPTO_HW = {
+ "Intel-E810CQ": "HW_4xxx",
+ "Intel-E822CQ": "HW_C4xxx",
+ "Intel-E823C": "HW_C4xxx",
+ "Intel-X710": "HW_DH895xcc",
+ "Intel-XL710": "HW_DH895xcc",
+ }
+
+ DEVICE_TYPE_TO_KEYWORD = {
+ "scapy": None
+ }
+
+ PERF_TYPE_TO_KEYWORD = {
+ "mrr": "Traffic should pass with maximum rate",
+ "ndrpdr": "Find NDR and PDR intervals using optimized search",
+ "soak": "Find critical load using PLRsearch",
+ }
+
+ PERF_TYPE_TO_SUITE_DOC_VER = {
+ "mrr": u'''fication:** In MaxReceivedRate tests TG sends traffic at \\
+| ... | line rate and reports total received packets over trial period. \\''',
+ "ndrpdr": u'''rification:** TG finds and reports throughput NDR (Non \\
+| ... | Drop Rate) with zero packet loss tolerance and throughput PDR \\
+| ... | (Partial Drop Rate) with non-zero packet loss tolerance (LT) \\
+| ... | expressed in percentage of packets transmitted. NDR and PDR are \\
+| ... | discovered for different Ethernet L2 frame sizes using MLRsearch \\
+| ... | library.''',
+ "soak": u'''rification:** TG sends traffic at dynamically computed \\
+| ... | rate as PLRsearch algorithm gathers data and improves its estimate \\
+| ... | of a rate at which a prescribed small fraction of packets \\
+| ... | would be lost. After set time, the serarch stops \\
+| ... | and the algorithm reports its current estimate. \\''',
+ }
+
+ PERF_TYPE_TO_TEMPLATE_DOC_VER = {
+ "mrr": u'''Measure MaxReceivedRate for ${frame_size}B frames \\
+| | ... | using burst trials throughput test. \\''',
+ "ndrpdr": "Measure NDR and PDR values using MLRsearch algorithm.",
+ "soak": "Estimate critical rate using PLRsearch algorithm. \\",
+ }