From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2AD42A0508; Wed, 6 Apr 2022 17:09:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C756A428CA; Wed, 6 Apr 2022 17:08:00 +0200 (CEST) Received: from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20]) by mails.dpdk.org (Postfix) with ESMTP id A409142880 for ; Wed, 6 Apr 2022 17:07:56 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lb.pantheon.sk (Postfix) with ESMTP id 091B1184FE8; Wed, 6 Apr 2022 17:07:55 +0200 (CEST) X-Virus-Scanned: amavisd-new at siecit.sk Received: from lb.pantheon.sk ([127.0.0.1]) by localhost (lb.pantheon.sk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vumwAUb2iIJR; Wed, 6 Apr 2022 17:07:54 +0200 (CEST) Received: from entguard.lab.pantheon.local (unknown [46.229.239.141]) by lb.pantheon.sk (Postfix) with ESMTP id DA4B7184FF2; Wed, 6 Apr 2022 17:07:49 +0200 (CEST) From: =?UTF-8?q?Juraj=20Linke=C5=A1?= To: thomas@monjalon.net, david.marchand@redhat.com, Honnappa.Nagarahalli@arm.com, ohilyard@iol.unh.edu, lijuan.tu@intel.com Cc: dev@dpdk.org, =?UTF-8?q?Juraj=20Linke=C5=A1?= Subject: [RFC PATCH v1 13/13] dts: merge DTS framework/settings.py to DPDK Date: Wed, 6 Apr 2022 15:07:42 +0000 Message-Id: <20220406150742.2914878-14-juraj.linkes@pantheon.tech> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220406150742.2914878-1-juraj.linkes@pantheon.tech> References: <20220406150742.2914878-1-juraj.linkes@pantheon.tech> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org --- dts/framework/settings.py | 391 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 dts/framework/settings.py diff --git a/dts/framework/settings.py b/dts/framework/settings.py new file mode 100644 index 0000000000..14aac9e01a --- /dev/null +++ b/dts/framework/settings.py @@ -0,0 +1,391 @@ +# BSD LICENSE +# +# Copyright(c) 2010-2021 Intel Corporation. All rights reserved. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" +Folders for framework running environment. +""" +import os +import re +import socket +import sys + +FOLDERS = { + "Framework": "framework", + "Testscripts": "tests", + "Configuration": "conf", + "Depends": "dep", + "Output": "output", + "NicDriver": "nics", +} + +""" +Nics and its identifiers supported by the framework. +""" +NICS = { + "kawela": "8086:10e8", + "kawela_2": "8086:10c9", + "kawela_4": "8086:1526", + "bartonhills": "8086:150e", + "powerville": "8086:1521", + "powerville_vf": "8086:1520", + "ophir": "8086:105e", + "niantic": "8086:10fb", + "niantic_vf": "8086:10ed", + "ironpond": "8086:151c", + "twinpond": "8086:1528", + "twinpond_vf": "8086:1515", + "twinville": "8086:1512", + "sageville": "8086:1563", + "sageville_vf": "8086:1565", + "sagepond": "8086:15ad", + "sagepond_vf": "8086:15a8", + "magnolia_park": "8086:15ce", + "hartwell": "8086:10d3", + "82545EM": "8086:100f", + "82540EM": "8086:100e", + "springville": "8086:1533", + "springfountain": "8086:154a", + "virtio": "1af4:1000", + "avoton": "8086:1f41", + "avoton2c5": "8086:1f45", + "I217V": "8086:153b", + "I217LM": "8086:153a", + "I218V": "8086:1559", + "I218LM": "8086:155a", + "fortville_eagle": "8086:1572", + "fortville_spirit": "8086:1583", + "fortville_spirit_single": "8086:1584", + "fortpark": "8086:374c", + "fortpark_1g": "8086:37d1", + "fortpark_TLV": "8086:37d0", + "fortpark_BASE-T": "8086:37d2", + "fortpark_TLV_vf": "8086:37cd", + "fvl10g_vf": "8086:154c", + "ConnectX3_MT4103": "15b3:1007", + "ConnectX4_MT4115": "15b3:1013", + "ConnectX4_LX_MT4117": "15b3:1015", + "ConnectX5_MT4119": "15b3:1017", + "ConnectX5_MT4121": "15b3:1019", + "fortville_25g": "8086:158b", + "cavium_a034": "177d:a034", + "cavium_0011": "177d:0011", + "fortvile_bdw_de": "8086:15ac", + "cavium_a063": "177d:a063", + "cavium_a064": "177d:a064", + "columbiaville_100g": "8086:1592", + "columbiaville_25g": "8086:1593", + "columbiaville_25gx2": "8086:159b", + "columbiaville_vf": "8086:1889", + "fastlinq_ql45000": "1077:1656", + "fastlinq_ql45000_vf": "1077:1664", + "fastlinq_ql41000": "1077:8070", + "fastlinq_ql41000_vf": "1077:8090", + "carlsville": "8086:15ff", + "hi1822": "19e5:1822", + "foxville": "8086:15f2", + "brcm_57414": "14e4:16d7", + "brcm_P2100G": "14e4:1750", +} + +DRIVERS = { + "kawela": "igb", + "kawela_2": "igb", + "kawela_4": "igb", + "bartonhills": "igb", + "powerville": "igb", + "powerville_vf": "igbvf", + "ophir": "igb", + "niantic": "ixgbe", + "niantic_vf": "ixgbevf", + "ironpond": "ixgbe", + "twinpond": "ixgbe", + "twinpond_vf": "ixgbevf", + "twinville": "ixgbe", + "sageville": "ixgbe", + "sageville_vf": "ixgbevf", + "sagepond": "ixgbe", + "sagepond_vf": "ixgbevf", + "magnolia_park": "ixgbe", + "hartwell": "igb", + "82545EM": "igb", + "82540EM": "igb", + "springville": "igb", + "springfountain": "ixgbe", + "virtio": "virtio-pci", + "avoton": "igb", + "avoton2c5": "igb", + "I217V": "igb", + "I217LM": "igb", + "I218V": "igb", + "I218LM": "igb", + "fortville_eagle": "i40e", + "fortville_spirit": "i40e", + "fortville_spirit_single": "i40e", + "fortpark": "i40e", + "fortpark_1g": "i40e", + "fortpark_TLV": "i40e", + "fortpark_BASE-T": "i40e", + "fortpark_TLV_vf": "iavf", + "fvl10g_vf": "iavf", + "ConnectX3_MT4103": "mlx4_core", + "ConnectX4_MT4115": "mlx5_core", + "ConnectX4_LX_MT4117": "mlx5_core", + "ConnectX5_MT4119": "mlx5_core", + "ConnectX5_MT4121": "mlx5_core", + "fortville_25g": "i40e", + "cavium_a034": "thunder-nicvf", + "cavium_0011": "thunder-nicvf", + "fortvile_bdw_de": "ixgbe", + "cavium_a063": "octeontx2-nicpf", + "cavium_a064": "octeontx2-nicvf", + "columbiaville_100g": "ice", + "columbiaville_25g": "ice", + "columbiaville_25gx2": "ice", + "columbiaville_vf": "iavf", + "fastlinq_ql45000": "qede", + "fastlinq_ql41000": "qede", + "fastlinq_ql45000_vf": "qede", + "fastlinq_ql41000_vf": "qede", + "carlsville": "i40e", + "hi1822": "hinic", + "foxville": "igc", + "brcm_57414": "bnxt_en", + "brcm_P2100G": "bnxt_en", +} + +""" +List used to translate scapy packets into Ixia TCL commands. +""" +SCAPY2IXIA = ["Ether", "Dot1Q", "IP", "IPv6", "TCP", "UDP", "SCTP"] + +USERNAME = "root" + +# A user used to test functionality for a non-root user +UNPRIVILEGED_USERNAME = "dtsunprivilegedtester" + +""" +Helpful header sizes. +""" +HEADER_SIZE = { + "eth": 18, + "ip": 20, + "ipv6": 40, + "udp": 8, + "tcp": 20, + "vxlan": 8, +} +""" +dpdk send protocol packet size. +""" +PROTOCOL_PACKET_SIZE = { + "lldp": [110, 100], +} + +""" +Default session timeout. +""" +TIMEOUT = 15 + + +""" +Global macro for dts. +""" +PKTGEN = "pktgen" +PKTGEN_DPDK = "dpdk" +PKTGEN_TREX = "trex" +PKTGEN_IXIA = "ixia" +PKTGEN_IXIA_NETWORK = "ixia_network" +PKTGEN_GRP = frozenset([PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK]) +""" +The log name seperater. +""" +LOG_NAME_SEP = "." + +""" +Section name for suite level configuration +""" +SUITE_SECTION_NAME = "suite" + +""" +DTS global environment variable +""" +DTS_ENV_PAT = r"DTS_*" +PERF_SETTING = "DTS_PERF_ONLY" +FUNC_SETTING = "DTS_FUNC_ONLY" +HOST_DRIVER_SETTING = "DTS_HOST_DRIVER" +HOST_DRIVER_MODE_SETTING = "DTS_HOST_DRIVER_MODE" +HOST_NIC_SETTING = "DTS_HOST_NIC" +HOST_SHARED_LIB_SETTING = "DTS_HOST_SHARED_LIB" +HOST_SHARED_LIB_PATH = "DTS_HOST_SHARED_LIB_PATH" +DEBUG_SETTING = "DTS_DEBUG_ENABLE" +DEBUG_CASE_SETTING = "DTS_DEBUGCASE_ENABLE" +DPDK_RXMODE_SETTING = "DTS_DPDK_RXMODE" +DTS_ERROR_ENV = "DTS_RUNNING_ERROR" +DTS_CFG_FOLDER = "DTS_CFG_FOLDER" +DTS_PARALLEL_SETTING = "DTS_PARALLEL_ENABLE" +UPDATE_EXPECTED = "DTS_UPDATE_EXPECTED_ENABLE" + + +""" +DTS global error table +""" +DTS_ERR_TBL = { + "GENERIC_ERR": 1, + "DPDK_BUILD_ERR": 2, + "DUT_SETUP_ERR": 3, + "TESTER_SETUP_ERR": 4, + "SUITE_SETUP_ERR": 5, + "SUITE_EXECUTE_ERR": 6, + "PARALLEL_EXECUTE_ERR": 7, +} + + +def get_nic_name(type): + """ + strip nic code name by nic type + """ + for name, nic_type in list(NICS.items()): + if nic_type == type: + return name + return "Unknown" + + +def get_nic_driver(pci_id): + """ + Return linux driver for specified pci device + """ + try: + driver = DRIVERS[{NICS[key]: key for key in NICS}[pci_id]] + except Exception as e: + driver = None + return driver + + +def get_netdev(crb, pci): + for port in crb.ports_info: + if pci == port["pci"]: + return port["port"] + if "vfs_port" in list(port.keys()): + for vf in port["vfs_port"]: + if pci == vf.pci: + return vf + + return None + + +def get_host_ip(address): + ip_reg = r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}" + m = re.match(ip_reg, address) + if m: + return address + else: + try: + result = socket.gethostbyaddr(address) + return result[2][0] + except: + print("couldn't look up %s" % address) + return "" + + +def save_global_setting(key, value): + """ + Save DTS global setting + """ + if re.match(DTS_ENV_PAT, key): + env_key = key + else: + env_key = "DTS_" + key + + os.environ[env_key] = value + + +def load_global_setting(key): + """ + Load DTS global setting + """ + if re.match(DTS_ENV_PAT, key): + env_key = key + else: + env_key = "DTS_" + key + + if env_key in list(os.environ.keys()): + return os.environ[env_key] + else: + return "" + + +def report_error(error): + """ + Report error when error occurred + """ + if error in list(DTS_ERR_TBL.keys()): + os.environ[DTS_ERROR_ENV] = error + else: + os.environ[DTS_ERROR_ENV] = "GENERIC_ERR" + + +def exit_error(): + """ + Set system exit value when error occurred + """ + if DTS_ERROR_ENV in list(os.environ.keys()): + ret_val = DTS_ERR_TBL[os.environ[DTS_ERROR_ENV]] + sys.exit(ret_val) + else: + sys.exit(0) + + +def accepted_nic(pci_id): + """ + Return True if the pci_id is a known NIC card in the settings file and if + it is selected in the execution file, otherwise it returns False. + """ + nic = load_global_setting(HOST_NIC_SETTING) + if pci_id not in list(NICS.values()): + return False + + if nic == "any": + return True + + else: + if pci_id == NICS[nic]: + return True + + return False + + +""" +The root path of framework configs. +""" +dts_cfg_folder = load_global_setting(DTS_CFG_FOLDER) +if dts_cfg_folder != "": + CONFIG_ROOT_PATH = dts_cfg_folder +else: + CONFIG_ROOT_PATH = "./conf" -- 2.20.1