Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/83877/?format=api
http://patches.dpdk.org/api/patches/83877/?format=api", "web_url": "http://patches.dpdk.org/project/dts/patch/20201110061858.5525-2-yufengx.mo@intel.com/", "project": { "id": 3, "url": "http://patches.dpdk.org/api/projects/3/?format=api", "name": "DTS", "link_name": "dts", "list_id": "dts.dpdk.org", "list_email": "dts@dpdk.org", "web_url": "", "scm_url": "git://dpdk.org/tools/dts", "webscm_url": "http://git.dpdk.org/tools/dts/", "list_archive_url": "https://inbox.dpdk.org/dts", "list_archive_url_format": "https://inbox.dpdk.org/dts/{}", "commit_url_format": "" }, "msgid": "<20201110061858.5525-2-yufengx.mo@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/20201110061858.5525-2-yufengx.mo@intel.com", "date": "2020-11-10T06:18:56", "name": "[V6,1/3] flexible_rxd: unify common test content", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "a7b277e0e9381a8362321fd35673acaf3175fe51", "submitter": { "id": 1342, "url": "http://patches.dpdk.org/api/people/1342/?format=api", "name": "Yufen.Mo", "email": "yufengx.mo@intel.com" }, "delegate": { "id": 1248, "url": "http://patches.dpdk.org/api/users/1248/?format=api", "username": "zhaoyanc", "first_name": "Zhaoyan", "last_name": "Chen", "email": "zhaoyan.chen@intel.com" }, "mbox": "http://patches.dpdk.org/project/dts/patch/20201110061858.5525-2-yufengx.mo@intel.com/mbox/", "series": [ { "id": 13765, "url": "http://patches.dpdk.org/api/series/13765/?format=api", "web_url": "http://patches.dpdk.org/project/dts/list/?series=13765", "date": "2020-11-10T06:18:55", "name": "flexible_rxd: add test cases for iavf/mpls", "version": 6, "mbox": "http://patches.dpdk.org/series/13765/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/83877/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/83877/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dts-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 3239FA09D2;\n\tTue, 10 Nov 2020 07:24:06 +0100 (CET)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 98919BC60;\n\tTue, 10 Nov 2020 07:24:04 +0100 (CET)", "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by dpdk.org (Postfix) with ESMTP id B505769A4\n for <dts@dpdk.org>; Tue, 10 Nov 2020 07:24:01 +0100 (CET)", "from fmsmga006.fm.intel.com ([10.253.24.20])\n by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 09 Nov 2020 22:24:00 -0800", "from dpdk-moyufen06.sh.intel.com ([10.67.116.208])\n by fmsmga006.fm.intel.com with ESMTP; 09 Nov 2020 22:23:59 -0800" ], "IronPort-SDR": [ "\n ouHg6fzHCkJwFtZuXsssdTkDIj89K91yUUdtVQoPg8ebmrCVAC8gK57G+zcEumeq0IxynerJBT\n DyLOGgQX6/wQ==", "\n tO2bD+/+brsJmNVD7+L+0UTq32IwOy3INQRBPtLu9F3DpvZzd/4K9jVLtlg4ZTPwTMc2YXl8B5\n Ic/T461xQXZw==" ], "X-IronPort-AV": [ "E=McAfee;i=\"6000,8403,9800\"; a=\"149203856\"", "E=Sophos;i=\"5.77,465,1596524400\"; d=\"scan'208\";a=\"149203856\"", "E=Sophos;i=\"5.77,465,1596524400\"; d=\"scan'208\";a=\"529660539\"" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "X-ExtLoop1": "1", "From": "yufengmx <yufengx.mo@intel.com>", "To": "dts@dpdk.org,\n\thailinx.xu@intel.com", "Cc": "yufengmx <yufengx.mo@intel.com>", "Date": "Tue, 10 Nov 2020 14:18:56 +0800", "Message-Id": "<20201110061858.5525-2-yufengx.mo@intel.com>", "X-Mailer": "git-send-email 2.21.0", "In-Reply-To": "<20201110061858.5525-1-yufengx.mo@intel.com>", "References": "<20201110061858.5525-1-yufengx.mo@intel.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[dts] [PATCH V6 1/3] flexible_rxd: unify common test content", "X-BeenThere": "dts@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "test suite reviews and discussions <dts.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dts/>", "List-Post": "<mailto:dts@dpdk.org>", "List-Help": "<mailto:dts-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>", "Errors-To": "dts-bounces@dpdk.org", "Sender": "\"dts\" <dts-bounces@dpdk.org>" }, "content": "unify common test content.\n\nSigned-off-by: yufengmx <yufengx.mo@intel.com>\n---\n tests/flexible_common.py | 483 +++++++++++++++++++++++++++++++++++++++\n 1 file changed, 483 insertions(+)\n create mode 100644 tests/flexible_common.py", "diff": "diff --git a/tests/flexible_common.py b/tests/flexible_common.py\nnew file mode 100644\nindex 0000000..fa3c64d\n--- /dev/null\n+++ b/tests/flexible_common.py\n@@ -0,0 +1,483 @@\n+# BSD LICENSE\n+#\n+# Copyright(c) 2020 Intel Corporation. All rights reserved.\n+# All rights reserved.\n+#\n+# Redistribution and use in source and binary forms, with or without\n+# modification, are permitted provided that the following conditions\n+# are met:\n+#\n+# * Redistributions of source code must retain the above copyright\n+# notice, this list of conditions and the following disclaimer.\n+# * Redistributions in binary form must reproduce the above copyright\n+# notice, this list of conditions and the following disclaimer in\n+# the documentation and/or other materials provided with the\n+# distribution.\n+# * Neither the name of Intel Corporation nor the names of its\n+# contributors may be used to endorse or promote products derived\n+# from this software without specific prior written permission.\n+#\n+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+\n+import time\n+from packet import Packet\n+from pmd_output import PmdOutput\n+\n+\n+class FlexibleRxdBase(object):\n+\n+ def init_base(self, pci, dst_mac, test_type, dut_index=0):\n+ tester_port_id = self.tester.get_local_port(self.dut_ports[dut_index])\n+ self.__tester_intf = self.tester.get_interface(tester_port_id)\n+ self.__src_mac = self.tester.get_mac(tester_port_id)\n+ self.__dst_mac = dst_mac\n+\n+ self.__app_path = self.dut.apps_name[\"test-pmd\"]\n+ self.__pmdout = PmdOutput(self.dut)\n+ self.__test_type = test_type\n+ self.__pci = pci\n+ self.__pkg_count = 1\n+ self.__is_pmd_on = False\n+\n+ @property\n+ def __is_iavf(self):\n+ return self.__test_type == 'iavf'\n+\n+ @property\n+ def __is_pf(self):\n+ return self.__test_type == 'pf'\n+\n+ def __get_port_option(self, flex_opt='', queue_num=None):\n+ nb_core = 2\n+ num = 4 if self.nic == 'foxville' or self.__is_iavf else 32\n+ queue_num = queue_num if queue_num else num\n+ # port option\n+ port_option = (\n+ '{queue} '\n+ '--portmask=0x1 '\n+ '--nb-cores={nb_core}').format(**{\n+ 'queue': '--rxq={0} --txq={0} '.format(queue_num)\n+ if flex_opt != 'ip_offset' else '',\n+ 'nb_core': nb_core,\n+ })\n+ return port_option\n+\n+ def __check_rxdid(self, rxdid, out):\n+ rxdid = rxdid if isinstance(rxdid, list) else [rxdid]\n+ pat = \"RXDID\\[(\\d+)\\]\"\n+ for rx in rxdid:\n+ if self.__is_pf:\n+ value = re.findall(pat, rx)\n+ if not value:\n+ continue\n+ check_str = \"RXDID : {}\".format(value[0])\n+ self.verify(\n+ check_str in out,\n+ \"rxdid value error, expected rxdid is %s\" % check_str)\n+ else:\n+ self.verify(\n+ rx in out,\n+ \"rxdid value error, expected rxdid is %s\" % rx)\n+\n+ def start_testpmd(self, flex_opt, rxdid, queue_num=None):\n+ \"\"\"\n+ start testpmd\n+ \"\"\"\n+ param_type = 'proto_xtr'\n+ # port option\n+ port_option = self.__get_port_option(flex_opt, queue_num=queue_num)\n+ # start test pmd\n+ out = self.__pmdout.start_testpmd(\n+ \"1S/3C/1T\",\n+ param=port_option,\n+ eal_param='' if self.__is_iavf else '--log-level=\"ice,8\"',\n+ ports=[self.__pci],\n+ port_options={self.__pci: '%s=%s' % (param_type, flex_opt)})\n+ self.__is_pmd_on = True\n+ # check rxdid value correct\n+ self.__check_rxdid(rxdid, out)\n+ # set test pmd command\n+ if flex_opt == 'ip_offset':\n+ cmds = [\n+ 'set verbose 1',\n+ 'start',\n+ ]\n+ else:\n+ cmds = [\n+ \"set verbose 1\",\n+ \"set fwd io\",\n+ \"set promisc all off\",\n+ \"clear port stats all\",\n+ \"start\", ]\n+ [self.dut.send_expect(cmd, \"testpmd> \", 15) for cmd in cmds]\n+\n+ def close_testpmd(self):\n+ if not self.__is_pmd_on:\n+ return\n+ try:\n+ self.__pmdout.quit()\n+ self.__is_pmd_on = False\n+ except Exception as e:\n+ pass\n+\n+ def __send_pkts_and_get_output(self, pkt_str):\n+ pkt = Packet(pkt_str)\n+ pkt.send_pkt(\n+ self.tester,\n+ tx_port=self.__tester_intf,\n+ count=self.__pkg_count,\n+ timeout=30)\n+ time.sleep(0.5)\n+ output = self.dut.get_session_output(timeout=3)\n+ return output\n+\n+ def __verify_common(self, pkts_list, msg=None):\n+ \"\"\"\n+ send MPLS type packet, verify packet ip_offset value correct\n+ param pkts_list:\n+ [send packets list, ip_offset expected value]\n+ \"\"\"\n+ msg = msg if msg else \"ip_offset value error, case test failed\"\n+ for pkt_str, expected_strs in pkts_list:\n+ out = self.__send_pkts_and_get_output(\n+ pkt_str.format(**{\n+ 'src_mac': self.__src_mac,\n+ 'dst_mac': self.__dst_mac}))\n+ # validation results\n+ _expected_strs = [expected_strs] \\\n+ if isinstance(expected_strs, str) else \\\n+ expected_strs\n+ self.verify(all([e in out for e in _expected_strs]), msg)\n+\n+ def check_single_VLAN_fields_in_RXD_8021Q(self):\n+ \"\"\"\n+ Check single VLAN fields in RXD (802.1Q)\n+ \"\"\"\n+ self.start_testpmd(\"vlan\", \"RXDID[17]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\", type=0x8100)/Dot1Q(prio=1,vlan=23)/IP()/UDP()/DNS()'\n+ msg = \"The packet does not carry a VLAN tag.\"\n+ fields_list = [\"vlan\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_single_VLAN_fields_in_RXD_8021ad(self):\n+ \"\"\"\n+ Check single VLAN fields in RXD (802.1ad)\n+ \"\"\"\n+ self.start_testpmd(\"vlan\", \"RXDID[17]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\", type=0x88A8)/Dot1Q(prio=1,vlan=23)/IP()/UDP()/DNS()'\n+ msg = \"stag result is not expected (stag=1:0:23)\"\n+ fields_list = [\"stag=1:0:23\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_double_VLAN_fields_in_RXD_8021Q_1_VLAN_tag(self):\n+ \"\"\"\n+ Check double VLAN fields in RXD (802.1Q) only 1 VLAN tag\n+ \"\"\"\n+ self.start_testpmd(\"vlan\", \"RXDID[17]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\", type=0x9100)/Dot1Q(prio=1,vlan=23)/IP()/UDP()/DNS()'\n+ msg = \"stag result is not expected (stag=1:0:23)\"\n+ fields_list = [\"stag=1:0:23\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_double_VLAN_fields_in_RXD_8021Q_2_VLAN_tag(self):\n+ \"\"\"\n+ Check double VLAN fields in RXD (802.1Q) 2 VLAN tags\n+ \"\"\"\n+ self.start_testpmd(\"vlan\", \"RXDID[17]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\", type=0x9100)/Dot1Q(prio=1,vlan=23)/Dot1Q(prio=4,vlan=56)/IP()/UDP()/DNS()'\n+ msg = \"There are no related fields in the received VLAN packet\"\n+ fields_list = [\"stag=1:0:23\", \"ctag=4:0:56\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_double_VLAN_fields_in_RXD_8021ad(self):\n+ \"\"\"\n+ Check double VLAN fields in RXD (802.1ad)\n+ \"\"\"\n+ self.start_testpmd(\"vlan\", \"RXDID[17]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\", type=0x88A8)/Dot1Q(prio=1,vlan=23)/Dot1Q(prio=4,vlan=56)/IP()/UDP()/DNS()'\n+ msg = \"There are no related fields in the received VLAN packet\"\n+ fields_list = [\"stag=1:0:23\", \"ctag=4:0:56\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_IPv4_fields_in_RXD(self):\n+ \"\"\"\n+ Check IPv4 fields in RXD\n+ \"\"\"\n+ self.start_testpmd(\"ipv4\", \"RXDID[18]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\")/IP(tos=23, ttl=98)/UDP()/Raw(load=\"XXXXXXXXXX\")'\n+ msg = \"There are no related fields in the received IPV4 packet\"\n+ fields_list = [\"ver=4\", \"hdrlen=5\", \"tos=23\", \"ttl=98\", \"proto=17\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_IPv6_fields_in_RXD(self):\n+ \"\"\"\n+ Check IPv6 fields in RXD\n+ \"\"\"\n+ self.start_testpmd(\"ipv6\", \"RXDID[19]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\")/IPv6(tc=12,hlim=34,fl=0x98765)/UDP()/Raw(load=\"XXXXXXXXXX\")'\n+ msg = \"There are no related fields in the received IPV6 packet\"\n+ fields_list = [\n+ \"ver=6\", \"tc=12\", \"flow_hi4=0x9\", \"nexthdr=17\", \"hoplimit=34\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_IPv6_flow_field_in_RXD(self):\n+ \"\"\"\n+ Check IPv6 flow field in RXD\n+ \"\"\"\n+ self.start_testpmd(\"ipv6_flow\", \"RXDID[20]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\")/IPv6(tc=12,hlim=34,fl=0x98765)/UDP()/Raw(load=\"XXXXXXXXXX\")'\n+ msg = \"There are no related fields in the received IPV6_flow packet\"\n+ fields_list = [\"ver=6\", \"tc=12\", \"flow=0x98765\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_TCP_fields_in_IPv4_in_RXD(self):\n+ \"\"\"\n+ Check TCP fields in IPv4 in RXD\n+ \"\"\"\n+ self.start_testpmd(\"tcp\", \"RXDID[21]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\")/IP()/TCP(flags=\"AS\")/Raw(load=\"XXXXXXXXXX\")'\n+ msg = \"There are no related fields in the received TCP packet\"\n+ fields_list = [\"doff=5\", \"flags=AS\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_TCP_fields_in_IPv6_in_RXD(self):\n+ \"\"\"\n+ Check TCP fields in IPv6 in RXD\n+ \"\"\"\n+ self.start_testpmd(\"tcp\", \"RXDID[21]\")\n+ pkts_str = 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\")/IPv6()/TCP(flags=\"S\")/Raw(load=\"XXXXXXXXXX\")'\n+ msg = \"There are no related fields in the received TCP packet\"\n+ fields_list = [\"doff=5\", \"flags=S\"]\n+ self.__verify_common([[pkts_str, fields_list]], msg)\n+\n+ def check_IPv4_IPv6_TCP_fields_in_RXD_on_specific_queues(self):\n+ \"\"\"\n+ Check IPv4, IPv6, TCP fields in RXD on specific queues\n+ \"\"\"\n+ self.start_testpmd(\n+ \"'[(2):ipv4,(3):ipv6,(4):tcp]'\",\n+ [\"RXDID[18]\", \"RXDID[19]\", \"RXDID[22]\"] if self.__is_iavf else\n+ [\"RXDID[18]\", \"RXDID[19]\", \"RXDID[21]\", \"RXDID[22]\"],\n+ 16)\n+ self.dut.send_expect(\n+ \"flow create 0 ingress pattern eth {}/ ipv4 src is 192.168.0.1 dst is 192.168.0.2 tos is 23 ttl is 98 / end actions queue index 2 / end\".format(\n+ '' if self.__is_iavf else \"dst is {} \".format(self.__dst_mac)),\n+ \"created\")\n+ self.dut.send_expect(\n+ \"flow create 0 ingress pattern eth / ipv6 src is 2001::3 dst is 2001::4 tc is 12 / end actions queue index 3 / end\",\n+ \"created\")\n+ # send IPv4\n+ pkts_str = \\\n+ 'Ether(dst=\"{dst_mac}\")/IP(src=\"192.168.0.1\",dst=\"192.168.0.2\",tos=23,ttl=98)/UDP()/Raw(load=\"XXXXXXXXXX\")'\n+ msg1 = \"There are no relevant fields in the received IPv4 packet.\"\n+ fields_list1 = [\"Receive queue=0x2\", \"ver=4\",\n+ \"hdrlen=5\", \"tos=23\", \"ttl=98\", \"proto=17\"]\n+ self.__verify_common([[pkts_str, fields_list1]], msg1)\n+\n+ # send IPv6\n+ pkts_str = \\\n+ 'Ether(src=\"{src_mac}\", dst=\"{dst_mac}\")/IPv6(src=\"2001::3\", dst=\"2001::4\", tc=12, hlim=34,fl=0x98765)/UDP()/Raw(load=\"XXXXXXXXXX\")'\n+ msg2 = \"There are no relevant fields in the received IPv6 packet.\"\n+ fields_list2 = [\n+ \"Receive queue=0x3\",\n+ \"ver=6\",\n+ \"tc=12\",\n+ \"flow_hi4=0x9\",\n+ \"nexthdr=17\",\n+ \"hoplimit=34\"]\n+ self.__verify_common([[pkts_str, fields_list2]], msg2)\n+\n+ # send TCP\n+ self.dut.send_expect(\"flow flush 0\", \"testpmd>\")\n+ self.dut.send_expect(\n+ \"flow create 0 ingress pattern eth {0}/ ipv4 src is 192.168.0.1 dst is 192.168.0.2 / tcp src is 25 dst is 23 / end actions queue index {1} / end\".format(\n+ '' if self.__is_iavf else \"dst is {} \".format(self.__dst_mac),\n+ 4, ),\n+ \"created\")\n+ pkts_str = \\\n+ 'Ether(dst=\"{dst_mac}\")/IP(src=\"192.168.0.1\", dst=\"192.168.0.2\")/TCP(flags=\"AS\", dport=23, sport=25)/Raw(load=\"XXXXXXXXXX\")'\n+ msg3 = \"There are no relevant fields in the received TCP packet.\"\n+ fields_list3 = [\n+ \"Receive queue=0x4\",\n+ \"doff=5\",\n+ \"flags=AS\"]\n+ self.__verify_common([[pkts_str, fields_list3]], msg3)\n+\n+ def check_testpmd_use_different_parameters(self):\n+ \"\"\"\n+ Check testpmd use different parameters start\n+ \"\"\"\n+ param_type = 'proto_xtr'\n+ # port option\n+ port_opt = self.__get_port_option()\n+ # use error parameter Launch testpmd, testpmd can not be started\n+ cmd = (\n+ \"-l 1,2,3 \"\n+ \"-n {mem_channel} \"\n+ \"-w {pci},{param_type}=vxlan \"\n+ \"-- -i \"\n+ \"{port_opt}\").format(**{\n+ 'mem_channel': self.dut.get_memory_channels(),\n+ \"pci\": self.__pci,\n+ \"param_type\": param_type,\n+ \"port_opt\": port_opt,\n+ })\n+ try:\n+ out = self.__pmdout.execute_cmd(self.__app_path + cmd, \"#\")\n+ self.__is_pmd_on = False\n+ except Exception as e:\n+ self.__is_pmd_on = True\n+ expected = \\\n+ \"iavf_lookup_proto_xtr_type(): wrong proto_xtr type, it should be: vlan|ipv4|ipv6|ipv6_flow|tcp|ip_offset\" \\\n+ if self.__is_iavf else \\\n+ \"handle_proto_xtr_arg(): The protocol extraction parameter is wrong : 'vxlan'\"\n+ self.close_testpmd()\n+ self.verify(expected in out, \"case test failed, testpmd started\")\n+ # don't use parameter launch testpmd, testpmd started and rxdid value\n+ # is the default\n+ cmd = (\n+ \"-l 1,2,3 \"\n+ \"-n {mem_channel} \"\n+ \"-w {pci} \"\n+ \"--log-level='ice,8' \"\n+ \"-- -i \"\n+ \"{port_opt}\").format(**{\n+ 'mem_channel': self.dut.get_memory_channels(),\n+ \"pci\": self.__pci,\n+ \"param_type\": param_type,\n+ \"port_opt\": port_opt,\n+ })\n+ out = self.__pmdout.execute_cmd(self.__app_path + cmd, \"testpmd>\")\n+ self.__is_pmd_on = True\n+ self.close_testpmd()\n+ self.__check_rxdid(\"RXDID[22]\", out)\n+\n+ def check_ip_offset_of_ip(self):\n+ \"\"\"\n+ Check ip offset of ip\n+ \"\"\"\n+ self.start_testpmd(\"ip_offset\", \"RXDID[25]\")\n+ pkts_list = [\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=1)/IP()',\n+ 'ip_offset=18'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=18']]\n+ self.__verify_common(pkts_list)\n+\n+ def check_ip_offset_with_vlan(self):\n+ \"\"\"\n+ check ip offset with vlan\n+ \"\"\"\n+ self.start_testpmd(\"ip_offset\", \"RXDID[25]\")\n+ pkts_list = [\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()',\n+ 'ip_offset=22'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=22']]\n+ self.__verify_common(pkts_list)\n+\n+ def check_ip_offset_with_2_vlan_tag(self):\n+ \"\"\"\n+ check offset with 2 vlan tag\n+ \"\"\"\n+ self.start_testpmd(\"ip_offset\", \"RXDID[25]\")\n+ pkts_list = [\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()',\n+ 'ip_offset=26'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=26']]\n+ self.__verify_common(pkts_list)\n+\n+ def check_ip_offset_with_multi_MPLS(self):\n+ \"\"\"\n+ check ip offset with multi MPLS\n+ \"\"\"\n+ self.start_testpmd(\"ip_offset\", \"RXDID[25]\")\n+ pkts_list = [\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=1)/IP()',\n+ 'ip_offset=18'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=22'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=26'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=30'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=34'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=18'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=22'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=26'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=30'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=34']]\n+ self.__verify_common(pkts_list)\n+\n+ def check_ip_offset_with_multi_MPLS_with_vlan_tag(self):\n+ \"\"\"\n+ check ip offset with multi MPLS with vlan tag\n+ \"\"\"\n+ self.start_testpmd(\"ip_offset\", \"RXDID[25]\")\n+ pkts_list = [\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()',\n+ 'ip_offset=22'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=26'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=30'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=34'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=38'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=22'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=26'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=30'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=34'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=38']]\n+ self.__verify_common(pkts_list)\n+\n+ def check_ip_offset_with_multi_MPLS_with_2_vlan_tag(self):\n+ \"\"\"\n+ check ip offset with multi MPLS with 2 vlan tag\n+ \"\"\"\n+ self.start_testpmd(\"ip_offset\", \"RXDID[25]\")\n+ pkts_list = [\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IP()',\n+ 'ip_offset=26'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=30'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=34'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=38'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IP()',\n+ 'ip_offset=42'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=26'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=30'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=34'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=38'],\n+ ['Ether(src=\"{src_mac}\", dst=\"{dst_mac}\",type=0x88A8)/Dot1Q(type=0x8100)/Dot1Q(type=0x8847)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=0)/MPLS(s=1)/IPv6()',\n+ 'ip_offset=42']]\n+ self.__verify_common(pkts_list)\n", "prefixes": [ "V6", "1/3" ] }{ "id": 83877, "url": "