Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/81410/?format=api
http://patches.dpdk.org/api/patches/81410/?format=api", "web_url": "http://patches.dpdk.org/project/dts/patch/1603132315-19498-3-git-send-email-lihongx.ma@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": "<1603132315-19498-3-git-send-email-lihongx.ma@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dts/1603132315-19498-3-git-send-email-lihongx.ma@intel.com", "date": "2020-10-19T18:31:53", "name": "[V1,2/4] framework/packet: use scapy modules instead of local modules", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "85048805600eb3e276b35f8d9f61f09fda8a3d72", "submitter": { "id": 1641, "url": "http://patches.dpdk.org/api/people/1641/?format=api", "name": "Ma, LihongX", "email": "lihongx.ma@intel.com" }, "delegate": null, "mbox": "http://patches.dpdk.org/project/dts/patch/1603132315-19498-3-git-send-email-lihongx.ma@intel.com/mbox/", "series": [ { "id": 13115, "url": "http://patches.dpdk.org/api/series/13115/?format=api", "web_url": "http://patches.dpdk.org/project/dts/list/?series=13115", "date": "2020-10-19T18:31:51", "name": "use scapy modules instead of local modules", "version": 1, "mbox": "http://patches.dpdk.org/series/13115/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/81410/comments/", "check": "pending", "checks": "http://patches.dpdk.org/api/patches/81410/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 DD9CFA04DD;\n\tTue, 20 Oct 2020 04:06:37 +0200 (CEST)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 51A15BC56;\n\tTue, 20 Oct 2020 04:06:36 +0200 (CEST)", "from mga18.intel.com (mga18.intel.com [134.134.136.126])\n by dpdk.org (Postfix) with ESMTP id C0FE2BBF0\n for <dts@dpdk.org>; Tue, 20 Oct 2020 04:06:34 +0200 (CEST)", "from orsmga004.jf.intel.com ([10.7.209.38])\n by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 19 Oct 2020 19:06:34 -0700", "from dpdk-lihong-ub1604.sh.intel.com ([10.67.118.174])\n by orsmga004.jf.intel.com with ESMTP; 19 Oct 2020 19:06:33 -0700" ], "IronPort-SDR": [ "\n MjSrZiU+dY8VtC2aNC/gN0Uv37vA20cMHEYiOolGLbHTj7GeHHSpmVATlE4sq6VFcFDyPdSXtz\n TA1beIE+KQGA==", "\n wkyJ09chLsnaogO0tJW5MpYDZLbKsX0oCJEEO+sYzgLJ8kAh40ZxyI6qfrxOOv/eoHb8PDFJNC\n E0Fl99f7g2xg==" ], "X-IronPort-AV": [ "E=McAfee;i=\"6000,8403,9779\"; a=\"154923991\"", "E=Sophos;i=\"5.77,395,1596524400\"; d=\"scan'208\";a=\"154923991\"", "E=Sophos;i=\"5.77,395,1596524400\"; d=\"scan'208\";a=\"465751279\"" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "X-ExtLoop1": "1", "From": "LihongX Ma <lihongx.ma@intel.com>", "To": "dts@dpdk.org", "Cc": "LihongX Ma <lihongx.ma@intel.com>", "Date": "Tue, 20 Oct 2020 02:31:53 +0800", "Message-Id": "<1603132315-19498-3-git-send-email-lihongx.ma@intel.com>", "X-Mailer": "git-send-email 2.7.4", "In-Reply-To": "<1603132315-19498-1-git-send-email-lihongx.ma@intel.com>", "References": "<1603132315-19498-1-git-send-email-lihongx.ma@intel.com>", "Subject": "[dts] [PATCH V1 2/4] framework/packet: use scapy modules instead of\n\tlocal modules", "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": "- use GRE instead of NVGRE\n - use LLDPDU, LLDPDUManagementAddress instead of LLDP and LLDPManagementAddress\n - as vxlan is the default supported layers, delete the extra import action\n - add api to analysis the scapy string that include NVGRE field, and will use\n GRE instead of it\n\nSigned-off-by: LihongX Ma <lihongx.ma@intel.com>\n---\n framework/packet.py | 49 +++++++++++++++++++++++++++++++++++++++++--------\n 1 file changed, 41 insertions(+), 8 deletions(-)", "diff": "diff --git a/framework/packet.py b/framework/packet.py\nindex a7cd172..44b8e0e 100644\n--- a/framework/packet.py\n+++ b/framework/packet.py\n@@ -51,10 +51,9 @@ sys.path.append(DEP_FOLDER + '/scapy_modules')\n from utils import convert_ip2int\n from utils import convert_int2ip\n \n-scapy_modules_required = {'nvgre': ['NVGRE', 'IPPROTO_NVGRE'],\n- 'gtp': ['GTP_U_Header', 'GTP_PDUSession_ExtensionHeader'],\n- 'lldp': ['LLDP', 'LLDPManagementAddress'], 'Dot1BR': ['Dot1BR'], 'pfcp': ['PFCP'],\n- 'nsh': ['NSH'], 'igmp': ['IGMP'], 'mpls': ['MPLS'], 'sctp': ['SCTP', 'SCTPChunkData'], 'vxlan': ['VXLAN']}\n+scapy_modules_required = {'gtp': ['GTP_U_Header', 'GTP_PDUSession_ExtensionHeader'],\n+ 'lldp': ['LLDPDU', 'LLDPDUManagementAddress'], 'Dot1BR': ['Dot1BR'], 'pfcp': ['PFCP'],\n+ 'nsh': ['NSH'], 'igmp': ['IGMP'], 'mpls': ['MPLS'], 'sctp': ['SCTP', 'SCTPChunkData']}\n local_modules = [m[:-3] for m in os.listdir(DEP_FOLDER + '/scapy_modules') if (m.endswith('.py') and not m.startswith('__'))]\n \n for m in scapy_modules_required:\n@@ -91,6 +90,14 @@ LayersTypes = {\n # ipv4_ext_unknown, ipv6_ext_unknown\n \"L3\": ['ipv4', 'ipv4ihl', 'ipv6', 'ipv4_ext', 'ipv6_ext', 'ipv6_ext2', 'ipv6_frag'],\n \"L4\": ['tcp', 'udp', 'frag', 'sctp', 'icmp', 'nofrag'],\n+ # The NVGRE pkt format is\n+ # <'ether type'=0x0800 'version'=4, 'protocol'=47 'protocol type'=0x6558>\n+ # or\n+ # <'ether type'=0x86DD 'version'=6, 'next header'=47 'protocol type'=0x6558'>\n+ # The GRE pkt format is\n+ # <'ether type'=0x0800 'version'=4, 'protocol'=17 'destination port'=4789>\n+ # or\n+ # <'ether type'=0x86DD 'version'=6, 'next header'=17 'destination port'=4789>\n \"TUNNEL\": ['ip', 'gre', 'vxlan', 'nvgre', 'geneve', 'grenat'],\n \"INNER L2\": ['inner_mac', 'inner_vlan'],\n # inner_ipv4_unknown, inner_ipv6_unknown\n@@ -145,14 +152,14 @@ class scapy(object):\n 'inner_sctp': SCTP(),\n 'inner_icmp': ICMP(),\n \n- 'lldp': LLDP() / LLDPManagementAddress(),\n+ 'lldp': LLDPDU() / LLDPDUManagementAddress(_length=6, _management_address_string_length=6,management_address=':12') / IP(),\n 'ip_frag': IP(frag=5),\n 'ipv6_frag': IPv6(src=\"::1\") / IPv6ExtHdrFragment(),\n 'ip_in_ip': IP() / IP(),\n 'ip_in_ip_frag': IP() / IP(frag=5),\n 'ipv6_in_ip': IP() / IPv6(src=\"::1\"),\n 'ipv6_frag_in_ip': IP() / IPv6(src=\"::1\", nh=44) / IPv6ExtHdrFragment(),\n- 'nvgre': NVGRE(),\n+ 'nvgre': GRE(key_present=1,proto=0x6558,key=0x00000100),\n 'geneve': \"Not Implement\",\n }\n \n@@ -685,8 +692,34 @@ class Packet(object):\n pkts_str = method_pattern.sub(i.strip('<>')+'()', pkts_str, count=1)\n return pkts_str\n \n+ # use the GRE to configure the nvgre package\n+ # the field key last Byte configure the reserved1 of NVGRE, first 3 Bytes configure the TNI value of NVGRE\n+ def transform_nvgre_layer(self, pkt_str):\n+ tni = re.search('TNI\\s*=\\s*(0x)*(\\d*)', pkt_str)\n+ if tni is None:\n+ nvgre = 'GRE(key_present=1,proto=0x6558,key=0x00000100)'\n+ else:\n+ tni = int(tni.group(2))\n+ tni = tni<<8\n+ nvgre = 'GRE(key_present=1,proto=0x6558,key=%d)' % tni\n+ pkt_str = re.sub(r'NVGRE\\(\\)|NVGRE\\(TNI=\\s*(0x)*\\d*\\)', nvgre, pkt_str)\n+ return pkt_str\n+\n+ def gernerator_pkt_str(self):\n+ pkt_str_list = []\n+ for p in self.pktgen.pkts:\n+ if not isinstance(p, str):\n+ p_str = p.command()\n+ else:\n+ p_str = p\n+ # process the NVGRE\n+ if 'NVGRE' in p_str:\n+ p_str = self.transform_nvgre_layer(p_str)\n+ pkt_str_list.append(p_str)\n+ return '[' + ','.join(pkt_str_list) + ']'\n+\n def send_pkt(self, crb, tx_port='', count=1, interval=0, timeout=120):\n- p_str = '[' + ','.join([p.command() if not isinstance(p, str) else p for p in self.pktgen.pkts]) + ']'\n+ p_str = self.gernerator_pkt_str()\n pkts_str = self._recompose_pkts_str(pkts_str=p_str)\n cmd = 'sendp(' + pkts_str + f',iface=\"{tx_port}\",count={count},inter={interval},verbose=False)'\n if crb.name == 'tester':\n@@ -700,7 +733,7 @@ class Packet(object):\n if crb.name != 'tester':\n raise Exception('crb should be tester')\n scapy_session_bg = crb.prepare_scapy_env()\n- p_str = '[' + ','.join([p.command() if not isinstance(p, str) else p for p in self.pktgen.pkts]) + ']'\n+ p_str = self.gernerator_pkt_str()\n pkts_str = self._recompose_pkts_str(pkts_str=p_str)\n cmd = 'sendp(' + pkts_str + f',iface=\"{tx_port}\",count={count},inter={interval},loop={loop},verbose=False)'\n scapy_session_bg.send_command(cmd)\n", "prefixes": [ "V1", "2/4" ] }{ "id": 81410, "url": "