From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 987E7A04F1; Mon, 6 Jan 2020 06:37:06 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 43FEE1D5B8; Mon, 6 Jan 2020 06:37:06 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 3986F1D5B7 for ; Mon, 6 Jan 2020 06:37:04 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jan 2020 21:37:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,401,1571727600"; d="scan'208";a="245476384" Received: from dpdk-lihong-ub1604.sh.intel.com ([10.67.118.203]) by fmsmga004.fm.intel.com with ESMTP; 05 Jan 2020 21:37:02 -0800 From: lihong To: dts@dpdk.org Cc: lihong Date: Mon, 6 Jan 2020 06:09:59 +0800 Message-Id: <1578262199-13378-1-git-send-email-lihongx.ma@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [dts] [PATCH V1] dep/vxlan: optimization the pkt of vxlan 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" Signed-off-by: lihong --- dep/vxlan.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/dep/vxlan.py b/dep/vxlan.py index d160718..f60f2a1 100644 --- a/dep/vxlan.py +++ b/dep/vxlan.py @@ -6,19 +6,60 @@ Created on Jul 29, 2014 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 vxlanmagic = "0x8" VXLAN_PORT=4789 +_GP_FLAGS = ["R", "R", "R", "A", "R", "R", "D", "R"] class VXLAN(Packet): name = "VXLAN" - fields_desc = [ByteField("flags", 8), - X3BytesField("reserved1", 0), - X3BytesField("vni", 0), - ByteField("reserved2", 0)] + 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: @@ -26,9 +67,13 @@ class VXLAN(Packet): else: return Packet.guess_payload_class(self, payload) - def mysummary(self): - return self.sprintf("VXLAN (vni=%VXLAN.vni%)") - split_layers(UDP, DNS, sport=53) -bind_layers(UDP, VXLAN, dport=VXLAN_PORT) -bind_layers(VXLAN, Ether) +bind_layers(UDP, VXLAN, dport=4789) # RFC standard 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(VXLAN, Ether, {'flags': 0x8}) +bind_layers(VXLAN, Ether, {'flags': 0x88}) +bind_layers(VXLAN, Ether, {'flags': 0xC, 'NextProtocol': 0}, NextProtocol=0) +bind_layers(VXLAN, IP, {'flags': 0xC, 'NextProtocol': 1}, NextProtocol=1) +bind_layers(VXLAN, IPv6, {'flags': 0xC, 'NextProtocol': 2}, NextProtocol=2) +bind_layers(VXLAN, Ether, {'flags': 0xC, 'NextProtocol': 3}, NextProtocol=3) -- 2.7.4