From patchwork Mon Oct 19 18:31:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ma, LihongX" X-Patchwork-Id: 81409 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4B8CBA04DC; Tue, 20 Oct 2020 04:06:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2CDF7BC4E; Tue, 20 Oct 2020 04:06:36 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id D953ABBF0 for ; Tue, 20 Oct 2020 04:06:32 +0200 (CEST) IronPort-SDR: hGhoDSeD8T+C3CmgOdV9URnDo9Ifbot+1ASfjcWsu+zhmOhwzPkeAp1fgzvwcfXuzXWf6zIvjq sX+hlI7Bf4aw== X-IronPort-AV: E=McAfee;i="6000,8403,9779"; a="154923988" X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="154923988" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2020 19:06:32 -0700 IronPort-SDR: Vf2pkivqJDvT+b8Y+jhIpcjGzF9Yp1Iow4PcYkGd/nSe8vbHwRm2XjO+YTdS31NO5hxYDaOIkb abZcr+zsNNKg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="465751263" Received: from dpdk-lihong-ub1604.sh.intel.com ([10.67.118.174]) by orsmga004.jf.intel.com with ESMTP; 19 Oct 2020 19:06:30 -0700 From: LihongX Ma To: dts@dpdk.org Cc: LihongX Ma Date: Tue, 20 Oct 2020 02:31:52 +0800 Message-Id: <1603132315-19498-2-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 1/4] dep: remove the scapy modules in dep X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" - use scapy module igmp instead of local module igmp - use scapy module lldp instead of local module lldp - use scapy module mpls instead of local module mpls - use scapy module nsh instead of local module nsh - use scapy module gre instead of local module nvgre - use scapy module vxlan instead of local module vxlan Signed-off-by: LihongX Ma --- dep/scapy_modules/igmp.py | 164 ------------------------------ dep/scapy_modules/lldp.py | 242 --------------------------------------------- dep/scapy_modules/mpls.py | 24 ----- dep/scapy_modules/nsh.py | 67 ------------- dep/scapy_modules/nvgre.py | 37 ------- dep/scapy_modules/vxlan.py | 92 ----------------- 6 files changed, 626 deletions(-) delete mode 100644 dep/scapy_modules/igmp.py delete mode 100644 dep/scapy_modules/lldp.py delete mode 100644 dep/scapy_modules/mpls.py delete mode 100644 dep/scapy_modules/nsh.py delete mode 100644 dep/scapy_modules/nvgre.py delete mode 100644 dep/scapy_modules/vxlan.py diff --git a/dep/scapy_modules/igmp.py b/dep/scapy_modules/igmp.py deleted file mode 100644 index 5cbf9c0..0000000 --- a/dep/scapy_modules/igmp.py +++ /dev/null @@ -1,164 +0,0 @@ -#! /usr/bin/env python - -# This file is part of Scapy -# Scapy is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# any later version. -# -# Scapy is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Scapy. If not, see . - -# flake8: noqa: E501 - -# scapy.contrib.description = Internet Group Management Protocol v1/v2 (IGMP/IGMPv2) -# scapy.contrib.status = loads - -from __future__ import print_function -from scapy.compat import chb, orb -from scapy.error import warning -from scapy.fields import ByteEnumField, ByteField, IPField, XShortField -from scapy.layers.inet import IP, IPOption_Router_Alert -from scapy.layers.l2 import Ether, getmacbyip -from scapy.packet import bind_layers, Packet -from scapy.utils import atol, checksum - - -def isValidMCAddr(ip): - """convert dotted quad string to long and check the first octet""" - FirstOct = atol(ip) >> 24 & 0xFF - return (FirstOct >= 224) and (FirstOct <= 239) - - -class IGMP(Packet): - """IGMP Message Class for v1 and v2. - -This class is derived from class Packet. You need call "igmpize()" -so the packet is transformed according the RFC when sent. -a=Ether(src="00:01:02:03:04:05") -b=IP(src="1.2.3.4") -c=IGMP(type=0x12, gaddr="224.2.3.4") -x = a/b/c -x[IGMP].igmpize() -sendp(a/b/c, iface="en0") - - Parameters: - type IGMP type field, 0x11, 0x12, 0x16 or 0x17 - mrcode Maximum Response time (zero for v1) - gaddr Multicast Group Address 224.x.x.x/4 - -See RFC2236, Section 2. Introduction for definitions of proper -IGMPv2 message format http://www.faqs.org/rfcs/rfc2236.html - - """ - name = "IGMP" - - igmptypes = {0x11: "Group Membership Query", - 0x12: "Version 1 - Membership Report", - 0x16: "Version 2 - Membership Report", - 0x17: "Leave Group"} - - fields_desc = [ByteEnumField("type", 0x11, igmptypes), - ByteField("mrcode", 20), - XShortField("chksum", None), - IPField("gaddr", "0.0.0.0")] - - def post_build(self, p, pay): - """Called implicitly before a packet is sent to compute and place IGMP checksum. - - Parameters: - self The instantiation of an IGMP class - p The IGMP message in hex in network byte order - pay Additional payload for the IGMP message - """ - p += pay - if self.chksum is None: - ck = checksum(p) - p = p[:2] + chb(ck >> 8) + chb(ck & 0xff) + p[4:] - return p - - @classmethod - def dispatch_hook(cls, _pkt=None, *args, **kargs): - if _pkt and len(_pkt) >= 4: - from scapy.contrib.igmpv3 import IGMPv3 - if orb(_pkt[0]) in [0x22, 0x30, 0x31, 0x32]: - return IGMPv3 - if orb(_pkt[0]) == 0x11 and len(_pkt) >= 12: - return IGMPv3 - return IGMP - - def igmpize(self): - """Called to explicitly fixup the packet according to the IGMP RFC - - The rules are: - General: - 1. the Max Response time is meaningful only in Membership Queries and should be zero - IP: - 1. Send General Group Query to 224.0.0.1 (all systems) - 2. Send Leave Group to 224.0.0.2 (all routers) - 3a.Otherwise send the packet to the group address - 3b.Send reports/joins to the group address - 4. ttl = 1 (RFC 2236, section 2) - 5. send the packet with the router alert IP option (RFC 2236, section 2) - Ether: - 1. Recalculate destination - - Returns: - True The tuple ether/ip/self passed all check and represents - a proper IGMP packet. - False One of more validation checks failed and no fields - were adjusted. - - The function will examine the IGMP message to assure proper format. - Corrections will be attempted if possible. The IP header is then properly - adjusted to ensure correct formatting and assignment. The Ethernet header - is then adjusted to the proper IGMP packet format. - """ - gaddr = self.gaddr if hasattr(self, "gaddr") and self.gaddr else "0.0.0.0" # noqa: E501 - underlayer = self.underlayer - if self.type not in [0x11, 0x30]: # General Rule 1 # noqa: E501 - self.mrcode = 0 - if isinstance(underlayer, IP): - if (self.type == 0x11): - if (gaddr == "0.0.0.0"): - underlayer.dst = "224.0.0.1" # IP rule 1 # noqa: E501 - elif isValidMCAddr(gaddr): - underlayer.dst = gaddr # IP rule 3a # noqa: E501 - else: - warning("Invalid IGMP Group Address detected !") - return False - elif ((self.type == 0x17) and isValidMCAddr(gaddr)): - underlayer.dst = "224.0.0.2" # IP rule 2 # noqa: E501 - elif ((self.type == 0x12) or (self.type == 0x16)) and (isValidMCAddr(gaddr)): # noqa: E501 - underlayer.dst = gaddr # IP rule 3b # noqa: E501 - else: - warning("Invalid IGMP Type detected !") - return False - if not any(isinstance(x, IPOption_Router_Alert) for x in underlayer.options): # noqa: E501 - underlayer.options.append(IPOption_Router_Alert()) - underlayer.ttl = 1 # IP rule 4 - _root = self.firstlayer() - if _root.haslayer(Ether): - # Force recalculate Ether dst - _root[Ether].dst = getmacbyip(underlayer.dst) # Ether rule 1 # noqa: E501 - from scapy.contrib.igmpv3 import IGMPv3 - if isinstance(self, IGMPv3): - self.encode_maxrespcode() - return True - - def mysummary(self): - """Display a summary of the IGMP object.""" - if isinstance(self.underlayer, IP): - return self.underlayer.sprintf("IGMP: %IP.src% > %IP.dst% %IGMP.type% %IGMP.gaddr%") # noqa: E501 - else: - return self.sprintf("IGMP %IGMP.type% %IGMP.gaddr%") - - -bind_layers(IP, IGMP, frag=0, - proto=2, - ttl=1) diff --git a/dep/scapy_modules/lldp.py b/dep/scapy_modules/lldp.py deleted file mode 100644 index 8eb8bea..0000000 --- a/dep/scapy_modules/lldp.py +++ /dev/null @@ -1,242 +0,0 @@ -#!/usr/bin/env python -## This file is part of Scapy -## See http://www.secdev.org/projects/scapy for more informations -## Copyright (C) Philippe Biondi -## This program is published under a GPLv2 license - -## Copyright (c) 2011 Jochen Bartl - -""" -LLDP (Link Layer Discovery Protocol) -""" - -from scapy.packet import * -from scapy.fields import * -from scapy.layers.l2 import Ether -from scapy.layers.inet6 import IP6Field - -_LLDP_tlv_cls = {0: "LLDPDUEnd", - 1: "LLDPChassisId", - 2: "LLDPPortId", - 3: "LLDPTTL", - 4: "LLDPPortDescription", - 5: "LLDPSystemName", - 6: "LLDPSystemDescription", - 7: "LLDPSystemCapabilities", - 8: "LLDPManagementAddress", - 127: "LLDPOrganizationalSpecific"} - -_LLDP_tlv_types = {0: "End of LLDPDU", - 1: "Chassis Id", - 2: "Port Id", - 3: "Time to Live", - 4: "Port Description", - 5: "System Name", - 6: "System Description", - 7: "System Capabilities", - 8: "Management Address", - 127: "Organization Specific"} - - -# (oui, subtype) -# 0x0080c2 - IEEE 802.1 -# 0x00120f - IEEE 802.3 -_LLDPOrgSpec_tlv_cls = {(0x0080c2, 0x01): "LLDPDot1PortVlanId", - } - - -def _LLDPGuessPacketClass(p=None, **kargs): - if p is None: - return LLDPGeneric(**kargs) - - cls = Raw - - if len(p) >= 2: - t = struct.unpack("!B", p[0])[0] - t = (0xfe & t) >> 1 - - if t != 127: - clsname = _LLDP_tlv_cls.get(t, "LLDPGeneric") - else: - oui = struct.unpack("!I", "\x00" + p[2:5])[0] - subtype = struct.unpack("!B", p[5])[0] - clsname = _LLDPOrgSpec_tlv_cls.get((oui, subtype), "LLDPOrgSpecGeneric") - - cls = globals()[clsname] - - return cls(p, **kargs) - - -class LLDPGeneric(Packet): - name = "LLDP Generic TLV" - fields_desc = [BitField("type", 1, 7), - BitFieldLenField("length", None, 9, length_of="value"), - StrLenField("value", "", length_from=lambda x: x.length)] - - def guess_payload_class(self, p): - return Padding - - def post_build(self, p, pay): - if self.length is None: - l = len(p) - 2 - p = chr((self.type << 1) ^ (l >> 8)).encode() + chr(l & 0xff).encode() + p[2:] - - return p+pay - - -class LLDPOrgSpecGeneric(LLDPGeneric): - name = "LLDP Org Spec Generic TLV" - fields_desc = [BitField("type", 127, 7), - BitFieldLenField("length", None, 9, length_of="value"), - X3BytesField("oui", 0), - ByteField("subtype", 0), - StrLenField("value", "", length_from=lambda x: x.length - 4)] - - -class LLDPDUEnd(LLDPGeneric): - name = "End of LLDPDU" - fields_desc = [BitField("type", 0, 7), - BitField("length", 0, 9)] - - -_LLDPChassisId_Subtypes = {0: "Reserved", - 1: "Chassis component", - 2: "Interface alias", - 3: "Port component", - 4: "MAC address", - 5: "Network address", - 6: "Interface name", - 7: "Locally assigned"} - - -class LLDPChassisId(LLDPGeneric): - name = "LLDP Chassis" - fields_desc = [BitField("type", 1, 7), - BitField("length", None, 9), - ByteEnumField("subtype", 4, _LLDPChassisId_Subtypes), - ConditionalField(MACField("macaddr", "00:11:22:33:44:55"), lambda pkt: pkt.subtype == 4), - # TODO Subtype 5, IPv4 / IPv6 - # Catch-all field for undefined subtypes - ConditionalField(StrLenField("value", "", length_from=lambda x: x.length - 1), - lambda pkt: pkt.subtype not in [4])] - - -_LLDPPortId_Subtypes = {0: "Reserved", - 1: "Interface alias", - 2: "Port component", - 3: "MAC address", - 4: "Network address", - 5: "Interface name", - 6: "Agent circuit ID", - 7: "Locally assigned"} - - -class LLDPPortId(LLDPGeneric): - name = "LLDP PortId" - fields_desc = [BitField("type", 2, 7), - BitField("length", None, 9), - ByteEnumField("subtype", 3, _LLDPPortId_Subtypes), - ConditionalField(MACField("macaddr", "00:11:22:33:44:55"), lambda pkt: pkt.subtype == 3), - # TODO Subtype 4, IPv4 / IPv6 - # Catch-all field for undefined subtypes - ConditionalField(StrLenField("value", "", length_from=lambda x: x.length - 1), - lambda pkt: pkt.subtype not in [3])] - - -class LLDPTTL(LLDPGeneric): - name = "LLDP TTL" - fields_desc = [BitField("type", 3, 7), - BitField("length", None, 9), - ShortField("seconds", 120)] - - -class LLDPPortDescription(LLDPGeneric): - name = "LLDP Port Description" - type = 4 - value = "FastEthernet0/1" - - -class LLDPSystemName(LLDPGeneric): - name = "LLDP System Name" - type = 5 - value = "Scapy" - - -class LLDPSystemDescription(LLDPGeneric): - name = "LLDP System Description" - type = 6 - value = "Scapy" - - -_LLDPSystemCapabilities = ["other", "repeater", "bridge", "wlanap", "router", "telephone", "docsiscable", "stationonly"] - - -class LLDPSystemCapabilities(LLDPGeneric): - name = "LLDP System Capabilities" - fields_desc = [BitField("type", 7, 7), - BitField("length", None, 9), - # Available capabilities - FlagsField("capabilities", 0, 16, _LLDPSystemCapabilities), - # Enabled capabilities - FlagsField("enabled", 0, 16, _LLDPSystemCapabilities)] - - -_LLDPManagementAddress_Subtype = {1: "IPv4", - 2: "IPv6", - 6: "802" - } - -_LLDPManagementAddress_IfSubtype = {1: "Unknown", - 2: "ifIndex", - 3: "System Port Number" - } - - -class LLDPManagementAddress(LLDPGeneric): - name = "LLDP Management Address" - fields_desc = [BitField("type", 8, 7), - BitField("length", None, 9), - ByteField("addrlen", None), - ByteEnumField("addrsubtype", 1, _LLDPManagementAddress_Subtype), - ConditionalField(IPField("ipaddr", "192.168.0.1"), lambda pkt: pkt.addrsubtype == 1), - ConditionalField(IP6Field("ip6addr", "2001:db8::1"), lambda pkt: pkt.addrsubtype == 2), - ConditionalField(MACField("macaddr", "00:11:22:33:44:55"), lambda pkt: pkt.addrsubtype == 6), - ConditionalField(StrLenField("addrval", "", length_from=lambda x: x.addrlen - 1), - lambda pkt: pkt.addrsubtype not in [1, 2, 6]), - ByteEnumField("ifsubtype", 2, _LLDPManagementAddress_IfSubtype), - IntField("ifnumber", 0), - FieldLenField("oidlen", None, length_of="oid", fmt="B"), - StrLenField("oid", "", length_from=lambda x: x.oidlen)] - - def post_build(self, p, pay): - # TODO Remove redundant code. LLDPGeneric.post_build() - if self.length is None: - l = len(p) - 2 - p = chr((self.type << 1) ^ (l >> 8)).encode() + chr(l & 0xff).encode() + p[2:] - - if self.addrlen is None: - addrlen = len(p) - 2 - 8 - len(self.oid) + 1 - p = p[:2] + struct.pack("B", addrlen) + p[3:] - - return p+pay - - -_LLDPDot1Subtype = {1: "Port VLAN Id"} - - -class LLDPDot1PortVlanId(LLDPOrgSpecGeneric): - name = "LLDP IEEE 802.1 Port VLAN Id" - fields_desc = [BitField("type", 127, 7), - BitField("length", None, 9), - # TODO: XThreeBytesEnumField - X3BytesField("oui", 0x0080c2), - ByteEnumField("subtype", 0x01, _LLDPDot1Subtype), - ShortField("vlan", 1)] - - -class LLDP(Packet): - name ="LLDP" - fields_desc = [PacketListField("tlvlist", [], _LLDPGuessPacketClass)] - - -bind_layers(Ether, LLDP, type=0x88cc) diff --git a/dep/scapy_modules/mpls.py b/dep/scapy_modules/mpls.py deleted file mode 100644 index 0b37bba..0000000 --- a/dep/scapy_modules/mpls.py +++ /dev/null @@ -1,24 +0,0 @@ -from scapy.packet import Packet, bind_layers, Padding -from scapy.fields import BitField,ByteField -from scapy.layers.inet import IP -from scapy.layers.inet6 import IPv6 -from scapy.layers.l2 import Ether, GRE - -class MPLS(Packet): - name = "MPLS" - fields_desc = [ BitField("label", 3, 20), - BitField("cos", 0, 3), - BitField("s", 1, 1), - ByteField("ttl", 0) ] - - def guess_payload_class(self, payload): - if len(payload) >= 1: - ip_version = (ord(payload[0]) >> 4) & 0xF - if ip_version == 4: - return IP - elif ip_version == 6: - return IPv6 - return Padding - -bind_layers(Ether, MPLS, type=0x8847) -bind_layers(GRE, MPLS, proto=0x8847) diff --git a/dep/scapy_modules/nsh.py b/dep/scapy_modules/nsh.py deleted file mode 100644 index 2e249c9..0000000 --- a/dep/scapy_modules/nsh.py +++ /dev/null @@ -1,67 +0,0 @@ -from scapy.packet import * -from scapy.fields import * -from scapy.layers.inet import Ether, IP -from scapy.layers.inet6 import IPv6 -from vxlan import VXLAN -from mpls import MPLS - - -class Metadata(Packet): - name = 'NSH metadata' - fields_desc = [XIntField('value', 0)] - - -class NSHTLV(Packet): - "NSH MD-type 2 - Variable Length Context Headers" - name = "NSHTLV" - fields_desc = [ - ShortField('Class', 0), - BitField('Critical', 0, 1), - BitField('Type', 0, 7), - BitField('Reserved', 0, 3), - BitField('Len', 0, 5), - PacketListField('Metadata', None, XIntField, count_from='Len') - ] - - -class NSH(Packet): - """Network Service Header. - NSH MD-type 1 if there is no ContextHeaders""" - name = "NSH" - - fields_desc = [ - BitField('Ver', 0, 2), - BitField('OAM', 0, 1), - BitField('Critical', 0, 1), - BitField('Reserved', 0, 6), - BitField('Len', 0, 6), - ByteEnumField('MDType', 1, {1: 'Fixed Length', - 2: 'Variable Length'}), - ByteEnumField('NextProto', 3, {1: 'IPv4', - 2: 'IPv6', - 3: 'Ethernet', - 4: 'NSH', - 5: 'MPLS'}), - X3BytesField('NSP', 0), - ByteField('NSI', 1), - ConditionalField(XIntField('NPC', 0), lambda pkt: pkt.MDType == 1), - ConditionalField(XIntField('NSC', 0), lambda pkt: pkt.MDType == 1), - ConditionalField(XIntField('SPC', 0), lambda pkt: pkt.MDType == 1), - ConditionalField(XIntField('SSC', 0), lambda pkt: pkt.MDType == 1), - ConditionalField(PacketListField("ContextHeaders", None, - NSHTLV, count_from="Length"), - lambda pkt: pkt.MDType == 2) - ] - - def mysummary(self): - return self.sprintf("NSP: %NSP% - NSI: %NSI%") - - -bind_layers(Ether, NSH, {'type': 0x894F}, type=0x894F) -bind_layers(VXLAN, NSH, {'flags': 0xC, 'NextProtocol': 4}, NextProtocol=4) - -bind_layers(NSH, IP, {'NextProto': 1}, NextProto=1) -bind_layers(NSH, IPv6, {'NextProto': 2}, NextProto=2) -bind_layers(NSH, Ether, {'NextProto': 3}, NextProto=3) -bind_layers(NSH, NSH, {'NextProto': 4}, NextProto=4) -bind_layers(NSH, MPLS, {'NextProto': 5}, NextProto=5) diff --git a/dep/scapy_modules/nvgre.py b/dep/scapy_modules/nvgre.py deleted file mode 100644 index 8cb9a87..0000000 --- a/dep/scapy_modules/nvgre.py +++ /dev/null @@ -1,37 +0,0 @@ -## This file is part of Scapy -## -## Copyright (C) Min Cao - -""" -NVGRE (Network Virtual GRE). -""" - -from scapy.packet import * -from scapy.fields import * -from scapy.layers.inet import UDP,IP -from scapy.layers.inet6 import IPv6 -from scapy.layers.l2 import Ether -from scapy.layers.l2 import GRE - -IPPROTO_NVGRE=47 - -class NVGRE(Packet): - name = "Network Virtual GRE" - fields_desc = [BitField("c", 0, 1), - BitField("r", 0, 1), - BitField("k", 1, 1), - BitField("s", 0, 1), - BitField("reserved0", 0, 9), - BitField("ver", 0, 3), - XShortField("protocoltype", 0x6558), - X3BytesField("TNI", 1), - ByteField("reserved1", 0)] - - def mysummary(self): - return self.sprintf("NVGRE (tni=%NVGRE.tni%)") - - -bind_layers(NVGRE, Ether, protocoltype=0x6558) -# fix conflict of GRE and NVGRE -bind_layers(IP, NVGRE, frag=0, proto=IPPROTO_NVGRE) - diff --git a/dep/scapy_modules/vxlan.py b/dep/scapy_modules/vxlan.py deleted file mode 100644 index c2661d6..0000000 --- a/dep/scapy_modules/vxlan.py +++ /dev/null @@ -1,92 +0,0 @@ -''' -Created on Jul 29, 2014 - -@author: yliu86 -''' -from scapy.packet import * -from scapy.fields import * -from scapy.layers.inet import UDP, IP -from scapy.layers.inet6 import IPv6 -from scapy.layers.dns import DNS -from scapy.layers.l2 import Ether - -XLAN_PORT=4789 - -VXLAN_PORT=4789 -_GP_FLAGS = ["R", "R", "R", "A", "R", "R", "D", "R"] - -class VXLAN(Packet): - name = "VXLAN" - fields_desc = [ - FlagsField("flags", 0x8, 8, - ['OAM', 'R', 'NextProtocol', 'Instance', - 'V1', 'V2', 'R', 'G']), - ConditionalField( - ShortField("reserved0", 0), - lambda pkt: pkt.flags & 0x04, - ), - ConditionalField( - ByteEnumField('NextProtocol', 0, - {0: 'NotDefined', - 1: 'IPv4', - 2: 'IPv6', - 3: 'Ethernet', - 4: 'NSH'}), - lambda pkt: pkt.flags & 0x04, - ), - ConditionalField( - X3BytesField("reserved1", 0x000000), - lambda pkt: (not pkt.flags & 0x80) and (not pkt.flags & 0x04), - ), - ConditionalField( - FlagsField("gpflags", 0x0, 8, _GP_FLAGS), - lambda pkt: pkt.flags & 0x80, - ), - ConditionalField( - ShortField("gpid", 0), - lambda pkt: pkt.flags & 0x80, - ), - X3BytesField("vni", 0), - XByteField("reserved2", 0x00), - ] - - # Use default linux implementation port - overload_fields = { - UDP: {'dport': 8472}, - } - - def mysummary(self): - if self.flags & 0x80: - return self.sprintf("VXLAN (vni=%VXLAN.vni% gpid=%VXLAN.gpid%)") - else: - return self.sprintf("VXLAN (vni=%VXLAN.vni%)") - - def guess_payload_class(self, payload): - if self.flag == vxlanmagic: - return VXLAN - else: - return Packet.guess_payload_class(self, payload) - -bind_layers(UDP, VXLAN, dport=4789) # RFC standard vxlan port -bind_layers(UDP, VXLAN, dport=4790) # RFC standard vxlan-gpe port -bind_layers(UDP, VXLAN, dport=6633) # New IANA assigned port for use with NSH -bind_layers(UDP, VXLAN, dport=8472) # Linux implementation port -bind_layers(UDP, VXLAN, dport=48879) # Cisco ACI -bind_layers(UDP, VXLAN, sport=4789) -bind_layers(UDP, VXLAN, sport=4790) -bind_layers(UDP, VXLAN, sport=6633) -bind_layers(UDP, VXLAN, sport=8472) -# By default, set both ports to the RFC standard -bind_layers(UDP, VXLAN, sport=4789, dport=4789) - -# Dissection -bind_bottom_up(VXLAN, Ether, NextProtocol=0) -bind_bottom_up(VXLAN, IP, NextProtocol=1) -bind_bottom_up(VXLAN, IPv6, NextProtocol=2) -bind_bottom_up(VXLAN, Ether, NextProtocol=3) -bind_bottom_up(VXLAN, Ether, NextProtocol=None) -# Build -bind_top_down(VXLAN, Ether, flags=12, NextProtocol=0) -bind_top_down(VXLAN, IP, flags=12, NextProtocol=1) -bind_top_down(VXLAN, IPv6, flags=12, NextProtocol=2) -bind_top_down(VXLAN, Ether, flags=12, NextProtocol=3) From patchwork Mon Oct 19 18:31:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ma, LihongX" X-Patchwork-Id: 81410 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id DD9CFA04DD; Tue, 20 Oct 2020 04:06:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 51A15BC56; Tue, 20 Oct 2020 04:06:36 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id C0FE2BBF0 for ; Tue, 20 Oct 2020 04:06:34 +0200 (CEST) IronPort-SDR: MjSrZiU+dY8VtC2aNC/gN0Uv37vA20cMHEYiOolGLbHTj7GeHHSpmVATlE4sq6VFcFDyPdSXtz TA1beIE+KQGA== X-IronPort-AV: E=McAfee;i="6000,8403,9779"; a="154923991" X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="154923991" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2020 19:06:34 -0700 IronPort-SDR: wkyJ09chLsnaogO0tJW5MpYDZLbKsX0oCJEEO+sYzgLJ8kAh40ZxyI6qfrxOOv/eoHb8PDFJNC E0Fl99f7g2xg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="465751279" Received: from dpdk-lihong-ub1604.sh.intel.com ([10.67.118.174]) by orsmga004.jf.intel.com with ESMTP; 19 Oct 2020 19:06:33 -0700 From: LihongX Ma To: dts@dpdk.org Cc: LihongX Ma 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 local modules X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" - use GRE instead of NVGRE - use LLDPDU, LLDPDUManagementAddress instead of LLDP and LLDPManagementAddress - as vxlan is the default supported layers, delete the extra import action - add api to analysis the scapy string that include NVGRE field, and will use GRE instead of it Signed-off-by: LihongX Ma --- framework/packet.py | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/framework/packet.py b/framework/packet.py index a7cd172..44b8e0e 100644 --- a/framework/packet.py +++ b/framework/packet.py @@ -51,10 +51,9 @@ sys.path.append(DEP_FOLDER + '/scapy_modules') from utils import convert_ip2int from utils import convert_int2ip -scapy_modules_required = {'nvgre': ['NVGRE', 'IPPROTO_NVGRE'], - 'gtp': ['GTP_U_Header', 'GTP_PDUSession_ExtensionHeader'], - 'lldp': ['LLDP', 'LLDPManagementAddress'], 'Dot1BR': ['Dot1BR'], 'pfcp': ['PFCP'], - 'nsh': ['NSH'], 'igmp': ['IGMP'], 'mpls': ['MPLS'], 'sctp': ['SCTP', 'SCTPChunkData'], 'vxlan': ['VXLAN']} +scapy_modules_required = {'gtp': ['GTP_U_Header', 'GTP_PDUSession_ExtensionHeader'], + 'lldp': ['LLDPDU', 'LLDPDUManagementAddress'], 'Dot1BR': ['Dot1BR'], 'pfcp': ['PFCP'], + 'nsh': ['NSH'], 'igmp': ['IGMP'], 'mpls': ['MPLS'], 'sctp': ['SCTP', 'SCTPChunkData']} local_modules = [m[:-3] for m in os.listdir(DEP_FOLDER + '/scapy_modules') if (m.endswith('.py') and not m.startswith('__'))] for m in scapy_modules_required: @@ -91,6 +90,14 @@ LayersTypes = { # ipv4_ext_unknown, ipv6_ext_unknown "L3": ['ipv4', 'ipv4ihl', 'ipv6', 'ipv4_ext', 'ipv6_ext', 'ipv6_ext2', 'ipv6_frag'], "L4": ['tcp', 'udp', 'frag', 'sctp', 'icmp', 'nofrag'], + # The NVGRE pkt format is + # <'ether type'=0x0800 'version'=4, 'protocol'=47 'protocol type'=0x6558> + # or + # <'ether type'=0x86DD 'version'=6, 'next header'=47 'protocol type'=0x6558'> + # The GRE pkt format is + # <'ether type'=0x0800 'version'=4, 'protocol'=17 'destination port'=4789> + # or + # <'ether type'=0x86DD 'version'=6, 'next header'=17 'destination port'=4789> "TUNNEL": ['ip', 'gre', 'vxlan', 'nvgre', 'geneve', 'grenat'], "INNER L2": ['inner_mac', 'inner_vlan'], # inner_ipv4_unknown, inner_ipv6_unknown @@ -145,14 +152,14 @@ class scapy(object): 'inner_sctp': SCTP(), 'inner_icmp': ICMP(), - 'lldp': LLDP() / LLDPManagementAddress(), + 'lldp': LLDPDU() / LLDPDUManagementAddress(_length=6, _management_address_string_length=6,management_address=':12') / IP(), 'ip_frag': IP(frag=5), 'ipv6_frag': IPv6(src="::1") / IPv6ExtHdrFragment(), 'ip_in_ip': IP() / IP(), 'ip_in_ip_frag': IP() / IP(frag=5), 'ipv6_in_ip': IP() / IPv6(src="::1"), 'ipv6_frag_in_ip': IP() / IPv6(src="::1", nh=44) / IPv6ExtHdrFragment(), - 'nvgre': NVGRE(), + 'nvgre': GRE(key_present=1,proto=0x6558,key=0x00000100), 'geneve': "Not Implement", } @@ -685,8 +692,34 @@ class Packet(object): pkts_str = method_pattern.sub(i.strip('<>')+'()', pkts_str, count=1) return pkts_str + # use the GRE to configure the nvgre package + # the field key last Byte configure the reserved1 of NVGRE, first 3 Bytes configure the TNI value of NVGRE + def transform_nvgre_layer(self, pkt_str): + tni = re.search('TNI\s*=\s*(0x)*(\d*)', pkt_str) + if tni is None: + nvgre = 'GRE(key_present=1,proto=0x6558,key=0x00000100)' + else: + tni = int(tni.group(2)) + tni = tni<<8 + nvgre = 'GRE(key_present=1,proto=0x6558,key=%d)' % tni + pkt_str = re.sub(r'NVGRE\(\)|NVGRE\(TNI=\s*(0x)*\d*\)', nvgre, pkt_str) + return pkt_str + + def gernerator_pkt_str(self): + pkt_str_list = [] + for p in self.pktgen.pkts: + if not isinstance(p, str): + p_str = p.command() + else: + p_str = p + # process the NVGRE + if 'NVGRE' in p_str: + p_str = self.transform_nvgre_layer(p_str) + pkt_str_list.append(p_str) + return '[' + ','.join(pkt_str_list) + ']' + def send_pkt(self, crb, tx_port='', count=1, interval=0, timeout=120): - p_str = '[' + ','.join([p.command() if not isinstance(p, str) else p for p in self.pktgen.pkts]) + ']' + p_str = self.gernerator_pkt_str() pkts_str = self._recompose_pkts_str(pkts_str=p_str) cmd = 'sendp(' + pkts_str + f',iface="{tx_port}",count={count},inter={interval},verbose=False)' if crb.name == 'tester': @@ -700,7 +733,7 @@ class Packet(object): if crb.name != 'tester': raise Exception('crb should be tester') scapy_session_bg = crb.prepare_scapy_env() - p_str = '[' + ','.join([p.command() if not isinstance(p, str) else p for p in self.pktgen.pkts]) + ']' + p_str = self.gernerator_pkt_str() pkts_str = self._recompose_pkts_str(pkts_str=p_str) cmd = 'sendp(' + pkts_str + f',iface="{tx_port}",count={count},inter={interval},loop={loop},verbose=False)' scapy_session_bg.send_command(cmd) From patchwork Mon Oct 19 18:31:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ma, LihongX" X-Patchwork-Id: 81411 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8530CA04DC; Tue, 20 Oct 2020 04:06:39 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7E91ABC6C; Tue, 20 Oct 2020 04:06:38 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id EF441BC6A for ; Tue, 20 Oct 2020 04:06:36 +0200 (CEST) IronPort-SDR: iQShK6qrfJAY4eEPtTxfNtpXTAUt/AXX4bxRkBApYU41OhHg3VCWmyRPquviTk3J7Q5C6tP3FD 8aEAEADp2glQ== X-IronPort-AV: E=McAfee;i="6000,8403,9779"; a="154923995" X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="154923995" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2020 19:06:36 -0700 IronPort-SDR: qd68xHmixRmQFFXJAiv2MgJA8Buwx5XRekSx6Ymafk6mnS7nZQPVvTn6NzAmsSaqbgPvTujUaA SskVuKmpIZpA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="465751299" Received: from dpdk-lihong-ub1604.sh.intel.com ([10.67.118.174]) by orsmga004.jf.intel.com with ESMTP; 19 Oct 2020 19:06:35 -0700 From: LihongX Ma To: dts@dpdk.org Cc: LihongX Ma Date: Tue, 20 Oct 2020 02:31:54 +0800 Message-Id: <1603132315-19498-4-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 3/4] tests: use scapy modules vxlan instead of local modules X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" - modify the import path of vxlan layers Signed-off-by: LihongX Ma --- tests/TestSuite_cloud_filter.py | 5 ++--- tests/TestSuite_generic_flow_api.py | 27 --------------------------- tests/TestSuite_vxlan.py | 2 +- tests/TestSuite_vxlan_sample.py | 2 +- 4 files changed, 4 insertions(+), 32 deletions(-) diff --git a/tests/TestSuite_cloud_filter.py b/tests/TestSuite_cloud_filter.py index 3723e57..abc474f 100644 --- a/tests/TestSuite_cloud_filter.py +++ b/tests/TestSuite_cloud_filter.py @@ -46,11 +46,10 @@ from settings import HEADER_SIZE from packet import Packet from scapy.layers.inet import UDP, IP +from scapy.layers.vxlan import VXLAN from scapy.packet import split_layers, bind_layers -from vxlan import VXLAN -from vxlan import VXLAN_PORT - +VXLAN_PORT = 4789 CLOUD_PORT = 8472 split_layers(UDP, VXLAN, dport=VXLAN_PORT) bind_layers(UDP, VXLAN, dport=CLOUD_PORT) diff --git a/tests/TestSuite_generic_flow_api.py b/tests/TestSuite_generic_flow_api.py index da061fe..1660669 100644 --- a/tests/TestSuite_generic_flow_api.py +++ b/tests/TestSuite_generic_flow_api.py @@ -148,19 +148,6 @@ class TestGeneric_flow_api(TestCase): time.sleep(2) self.vf_flag = 0 - def load_module(self, module=""): - """ - Load vxlan or nvgre module to scapy. - """ - # load vxlan module to scapy - cwd = os.getcwd() - dir_module = cwd + r'/' + 'dep' - self.tester.scapy_append('sys.path.append("%s")' % dir_module) - if module == "vxlan": - self.tester.scapy_append("from vxlan import VXLAN") - elif module == "nvgre": - self.tester.scapy_append('from nvgre import NVGRE') - def verify_result(self, pf_vf, expect_rxpkts, expect_queue, verify_mac): """ verify the packet to the expected queue or be dropped @@ -322,12 +309,6 @@ class TestGeneric_flow_api(TestCase): self.dut.send_expect(flow_cmd, "created") rule_created = 1 - # Enable vxlan packet sending - if "VXLAN" in flow_pkt: - self.load_module("vxlan") - elif "NVGRE" in flow_pkt: - self.load_module("nvgre") - # The rule is created successfully, so send the consistent packet. self.sendpkt(pktstr=flow_pkt) cur_mac = re.search("dst='(\S\S:\S\S:\S\S:\S\S:\S\S:\S\S)'", flow_pkt) @@ -2290,21 +2271,17 @@ class TestGeneric_flow_api(TestCase): extrapkt_rulenum = self.all_flows_process(basic_flow_actions) extra_packet = extrapkt_rulenum['extrapacket'] - self.load_module("vxlan") self.sendpkt('Ether(dst="%s")/IP()/UDP()/VXLAN()/Ether(dst="%s")/Dot1Q(vlan=11)/IP()/TCP()/Raw("x" * 20)' % (self.outer_mac, self.inner_mac)) self.verify_result("pf", expect_rxpkts="1", expect_queue=extrapkt_rulenum['queue'][0], verify_mac=self.outer_mac) - self.load_module("vxlan") self.sendpkt('Ether(dst="%s")/IP()/UDP()/VXLAN(vni=5)/Ether(dst="%s")/IP()/TCP()/Raw("x" * 20)' % (self.outer_mac, self.wrong_mac)) self.verify_result("pf", expect_rxpkts="1", expect_queue="0", verify_mac=self.outer_mac) - self.load_module("vxlan") self.sendpkt('Ether(dst="%s")/IP()/UDP()/VXLAN(vni=%s)/Ether(dst="%s")/Dot1Q(vlan=%s)/IP()/TCP()/Raw("x" * 20)' % ( self.outer_mac, extra_packet[5]['vni'], self.wrong_mac, extra_packet[5]['invlan'])) self.verify_result("vf0", expect_rxpkts="1", expect_queue="0", verify_mac=self.outer_mac) - self.load_module("vxlan") self.sendpkt('Ether(dst="%s")/IP()/UDP()/VXLAN(vni=%s)/Ether(dst="%s")/IP()/TCP()/Raw("x" * 20)' % ( self.wrong_mac, extra_packet[6]['vni'], self.inner_mac)) self.verify_result("vf1", expect_rxpkts="0", expect_queue="NULL", verify_mac=self.wrong_mac) @@ -2356,22 +2333,18 @@ class TestGeneric_flow_api(TestCase): extrapkt_rulenum = self.all_flows_process(basic_flow_actions) extra_packet = extrapkt_rulenum['extrapacket'] - self.load_module("nvgre") self.sendpkt('Ether(dst="%s")/IP()/NVGRE()/Ether(dst="%s")/Dot1Q(vlan=1)/IP()/TCP()/Raw("x" * 20)' % (self.outer_mac, self.inner_mac)) self.verify_result("pf", expect_rxpkts="1", expect_queue=extrapkt_rulenum['queue'][0], verify_mac=self.outer_mac) - self.load_module("nvgre") self.sendpkt('Ether(dst="%s")/IP()/NVGRE(TNI=%s)/Ether(dst="%s")/IP()/TCP()/Raw("x" * 20)' % ( self.outer_mac, extra_packet[4]['tni'], self.wrong_mac)) self.verify_result("pf", expect_rxpkts="1", expect_queue="0", verify_mac=self.outer_mac) - self.load_module("nvgre") self.sendpkt('Ether(dst="%s")/IP()/NVGRE(TNI=%s)/Ether(dst="%s")/Dot1Q(vlan=%s)/IP()/TCP()/Raw("x" * 20)' % ( self.outer_mac, extra_packet[5]['tni'], self.wrong_mac, extra_packet[5]['invlan'])) self.verify_result("vf0", expect_rxpkts="1", expect_queue="0", verify_mac=self.outer_mac) - self.load_module("nvgre") self.sendpkt('Ether(dst="%s")/IP()/NVGRE(TNI=%s)/Ether(dst="%s")/IP()/TCP()/Raw("x" * 20)' % ( self.wrong_mac, extra_packet[6]['tni'], self.inner_mac)) self.verify_result("vf1", expect_rxpkts="0", expect_queue="NULL", verify_mac=self.wrong_mac) diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py index 2db3549..eb324fb 100644 --- a/tests/TestSuite_vxlan.py +++ b/tests/TestSuite_vxlan.py @@ -48,7 +48,7 @@ from scapy.utils import wrpcap, rdpcap from scapy.layers.inet import Ether, IP, TCP, UDP from scapy.layers.inet6 import IPv6 from scapy.layers.l2 import Dot1Q -from vxlan import VXLAN +from scapy.layers.vxlan import VXLAN from scapy.layers.sctp import SCTP, SCTPChunkData from scapy.sendrecv import sniff from scapy.config import conf diff --git a/tests/TestSuite_vxlan_sample.py b/tests/TestSuite_vxlan_sample.py index feaad14..92253bb 100644 --- a/tests/TestSuite_vxlan_sample.py +++ b/tests/TestSuite_vxlan_sample.py @@ -54,7 +54,7 @@ from scapy.utils import wrpcap, rdpcap from scapy.layers.inet import Ether, IP, TCP, UDP from scapy.layers.inet6 import IPv6 from scapy.layers.l2 import Dot1Q -from vxlan import VXLAN +from scapy.layers.vxlan import VXLAN from scapy.layers.sctp import SCTP, SCTPChunkData from scapy.sendrecv import sniff from scapy.config import conf From patchwork Mon Oct 19 18:31:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ma, LihongX" X-Patchwork-Id: 81412 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B8B98A04DC; Tue, 20 Oct 2020 04:06:41 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B222ABBF0; Tue, 20 Oct 2020 04:06:40 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id D9213BBE4 for ; Tue, 20 Oct 2020 04:06:38 +0200 (CEST) IronPort-SDR: ihHI7bHPJA1rMQN6oviiCCciosIntwWxxsRsOLidRIxQnlf/lW3RKsNQtIp+Atr9w/A72BQoa4 39Oh5BuOua0Q== X-IronPort-AV: E=McAfee;i="6000,8403,9779"; a="154924000" X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="154924000" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Oct 2020 19:06:38 -0700 IronPort-SDR: 5YaHAF3ZwIYiZZwKfztucRsu6tmFIvcK9u6CihzuDsY6RObbQeK3bG0CiVnWGFqFp8KusX5C16 bw6HTHJcvs+Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,395,1596524400"; d="scan'208";a="465751318" Received: from dpdk-lihong-ub1604.sh.intel.com ([10.67.118.174]) by orsmga004.jf.intel.com with ESMTP; 19 Oct 2020 19:06:37 -0700 From: LihongX Ma To: dts@dpdk.org Cc: LihongX Ma Date: Tue, 20 Oct 2020 02:31:55 +0800 Message-Id: <1603132315-19498-5-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 4/4] tests: use scapy modules gre instead of local modules nvgre X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" - remove the import of nvgre - use GRE instead of nvgre in some suite that send pkt by self Signed-off-by: LihongX Ma --- tests/TestSuite_ipgre.py | 7 +------ tests/TestSuite_nvgre.py | 9 ++++----- tests/TestSuite_tso.py | 14 +------------- 3 files changed, 6 insertions(+), 24 deletions(-) diff --git a/tests/TestSuite_ipgre.py b/tests/TestSuite_ipgre.py index 743c7ab..5e7750c 100644 --- a/tests/TestSuite_ipgre.py +++ b/tests/TestSuite_ipgre.py @@ -44,7 +44,7 @@ import re import time import os -from packet import Packet, NVGRE, IPPROTO_NVGRE +from packet import Packet from scapy.utils import wrpcap, rdpcap from scapy.packet import split_layers,bind_layers @@ -80,7 +80,6 @@ class TestIpgre(TestCase): self.tester_iface = self.tester.get_interface(tester_port) self.tester_iface_mac = self.tester.get_mac(tester_port) self.initialize_port_config() - self.re_bind_nvgre_to_gre() def initialize_port_config(self): self.outer_mac_src = '00:00:10:00:00:00' @@ -142,10 +141,6 @@ class TestIpgre(TestCase): wrpcap("/tmp/ref_pkt.pcap", pkt.pktgen.pkt) time.sleep(1) - def re_bind_nvgre_to_gre(self): - split_layers(IP, NVGRE, frag=0, proto=IPPROTO_NVGRE) - bind_layers(IP, GRE, frag=0, proto=IPPROTO_NVGRE) - def get_chksums(self, pcap=None): """ get chksum values of Outer and Inner packet L3&L4 diff --git a/tests/TestSuite_nvgre.py b/tests/TestSuite_nvgre.py index 306a89d..ce02a85 100644 --- a/tests/TestSuite_nvgre.py +++ b/tests/TestSuite_nvgre.py @@ -48,9 +48,8 @@ from socket import AF_INET6 from scapy.utils import struct, socket, wrpcap, rdpcap from scapy.layers.inet import Ether, IP, TCP, UDP from scapy.layers.inet6 import IPv6 -from scapy.layers.l2 import Dot1Q +from scapy.layers.l2 import Dot1Q, GRE from scapy.layers.sctp import SCTP, SCTPChunkData -from nvgre import NVGRE from scapy.sendrecv import sniff from scapy.config import conf from scapy.route import * @@ -307,7 +306,7 @@ class NvgreTestConfig(object): GRE package: outer/GRE header/inner """ if self.outer_ip_proto == 47: - self.pkt = outer / NVGRE() / inner + self.pkt = outer / GRE(key_present=1,proto=0x6558,key=0x00000100) / inner else: self.pkt = outer / ("X" * self.payload_size) @@ -332,8 +331,8 @@ class NvgreTestConfig(object): if payload.guess_payload_class(payload).name == "IP": chk_sums['outer_ip'] = hex(payload[IP].chksum) - if pkts[0].haslayer(NVGRE) == 1: - inner = pkts[0][NVGRE] + if pkts[0].haslayer(GRE) == 1: + inner = pkts[0][GRE] if inner.haslayer(IP) == 1: chk_sums['inner_ip'] = hex(inner[IP].chksum) if inner[IP].proto == 6: diff --git a/tests/TestSuite_tso.py b/tests/TestSuite_tso.py index e7b4a8c..d0c67d4 100644 --- a/tests/TestSuite_tso.py +++ b/tests/TestSuite_tso.py @@ -101,16 +101,6 @@ class TestTSO(TestCase): """ pass - def load_module(self): - """ - Load vxlan or nvgre module to scapy. - """ - cwd = os.getcwd() - dir_module = cwd + r'/' + 'dep' + '/scapy_modules' - self.tester.scapy_append('sys.path.append("%s")' % dir_module) - self.tester.scapy_append("from vxlan import VXLAN") - self.tester.scapy_append('from nvgre import NVGRE') - def tcpdump_start_sniffing(self, ifaces=[]): """ Starts tcpdump in the background to sniff the tester interface where @@ -347,7 +337,6 @@ class TestTSO(TestCase): for loading_size in self.loading_sizes: # Vxlan test self.tcpdump_start_sniffing([tx_interface, rx_interface]) - self.load_module() out = self.dut.send_expect("clear port stats all", "testpmd> ", 120) self.tester.scapy_append('sendp([Ether(dst="%s",src="52:00:00:00:00:00")/IP(src="192.168.1.1",dst="192.168.1.2")/UDP(sport=1021,dport=4789)/VXLAN()/Ether(dst="%s",src="52:00:00:00:00:00")/IP(src="192.168.1.1",dst="192.168.1.2")/TCP(sport=1021,dport=1021)/("X"*%s)], iface="%s")' % (mac, mac, loading_size, tx_interface)) out = self.tester.scapy_execute() @@ -371,9 +360,8 @@ class TestTSO(TestCase): for loading_size in self.loading_sizes: # Nvgre test self.tcpdump_start_sniffing([tx_interface, rx_interface]) - self.load_module() out = self.dut.send_expect("clear port stats all", "testpmd> ", 120) - self.tester.scapy_append('sendp([Ether(dst="%s",src="52:00:00:00:00:00")/IP(src="192.168.1.1",dst="192.168.1.2",proto=47)/NVGRE()/Ether(dst="%s",src="52:00:00:00:00:00")/IP(src="192.168.1.1",dst="192.168.1.2")/TCP(sport=1021,dport=1021)/("X"*%s)], iface="%s")' % (mac, mac, loading_size, tx_interface)) + self.tester.scapy_append('sendp([Ether(dst="%s",src="52:00:00:00:00:00")/IP(src="192.168.1.1",dst="192.168.1.2",proto=47)/GRE(key_present=1,proto=0x6558,key=0x00001000)/Ether(dst="%s",src="52:00:00:00:00:00")/IP(src="192.168.1.1",dst="192.168.1.2")/TCP(sport=1021,dport=1021)/("X"*%s)], iface="%s")' % (mac, mac, loading_size, tx_interface)) out = self.tester.scapy_execute() out = self.dut.send_expect("show port stats all", "testpmd> ", 120) print(out)