test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH V1 0/7] update packet related modules
@ 2020-09-08  3:26 Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 1/7]dep: mv scapy modules to new folder scapy_modules Xiao Qimai
                   ` (7 more replies)
  0 siblings, 8 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

*** BLURB HERE ***

Xiao Qimai (7):
  mv scapy modules to new folder scapy_modules
  add suite log for scapy session
  update packet module for saving sending packet time
  prepare packet send session and update other packet related part
  update argument for stop_send_pkt_bg method
  update argument for stop_send_pkt_bg method
  update argument for stop_send_pkt_bg method

 dep/gtp_v2.py                         | 934 --------------------------
 dep/{ => scapy_modules}/Dot1BR.py     |   2 +-
 dep/{ => scapy_modules}/gtp.py        |  55 +-
 dep/{ => scapy_modules}/igmp.py       |   0
 dep/{ => scapy_modules}/lldp.py       |   2 +-
 dep/{ => scapy_modules}/mpls.py       |   0
 dep/{ => scapy_modules}/nsh.py        |   0
 dep/{ => scapy_modules}/nvgre.py      |   6 +-
 dep/{ => scapy_modules}/pfcp.py       |   0
 dep/{ => scapy_modules}/vxlan.py      |   0
 framework/dts.py                      |   4 +
 framework/packet.py                   | 159 ++---
 framework/tester.py                   |  70 +-
 tests/TestSuite_multiple_pthread.py   |   2 +-
 tests/TestSuite_vf_packet_rxtx.py     |   4 +-
 tests/TestSuite_vf_port_start_stop.py |   2 +-
 16 files changed, 197 insertions(+), 1043 deletions(-)
 delete mode 100644 dep/gtp_v2.py
 rename dep/{ => scapy_modules}/Dot1BR.py (98%)
 rename dep/{ => scapy_modules}/gtp.py (94%)
 rename dep/{ => scapy_modules}/igmp.py (100%)
 rename dep/{ => scapy_modules}/lldp.py (99%)
 rename dep/{ => scapy_modules}/mpls.py (100%)
 rename dep/{ => scapy_modules}/nsh.py (100%)
 rename dep/{ => scapy_modules}/nvgre.py (90%)
 rename dep/{ => scapy_modules}/pfcp.py (100%)
 rename dep/{ => scapy_modules}/vxlan.py (100%)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dts] [PATCH V1 1/7]dep: mv scapy modules to new folder scapy_modules
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
@ 2020-09-08  3:26 ` Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 2/7]framework/dts: add suite log for scapy session Xiao Qimai
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 dep/gtp_v2.py                     | 934 ------------------------------
 dep/{ => scapy_modules}/Dot1BR.py |   2 +-
 dep/{ => scapy_modules}/gtp.py    |  55 +-
 dep/{ => scapy_modules}/igmp.py   |   0
 dep/{ => scapy_modules}/lldp.py   |   2 +-
 dep/{ => scapy_modules}/mpls.py   |   0
 dep/{ => scapy_modules}/nsh.py    |   0
 dep/{ => scapy_modules}/nvgre.py  |   6 +-
 dep/{ => scapy_modules}/pfcp.py   |   0
 dep/{ => scapy_modules}/vxlan.py  |   0
 10 files changed, 51 insertions(+), 948 deletions(-)
 delete mode 100644 dep/gtp_v2.py
 rename dep/{ => scapy_modules}/Dot1BR.py (98%)
 rename dep/{ => scapy_modules}/gtp.py (94%)
 rename dep/{ => scapy_modules}/igmp.py (100%)
 rename dep/{ => scapy_modules}/lldp.py (99%)
 rename dep/{ => scapy_modules}/mpls.py (100%)
 rename dep/{ => scapy_modules}/nsh.py (100%)
 rename dep/{ => scapy_modules}/nvgre.py (90%)
 rename dep/{ => scapy_modules}/pfcp.py (100%)
 rename dep/{ => scapy_modules}/vxlan.py (100%)

diff --git a/dep/gtp_v2.py b/dep/gtp_v2.py
deleted file mode 100644
index 6cffd47b..00000000
--- a/dep/gtp_v2.py
+++ /dev/null
@@ -1,934 +0,0 @@
-# Copyright (C) 2017 Alessio Deiana <adeiana@gmail.com>
-# 2017 Alexis Sultan <alexis.sultan@sfr.com>
-
-# 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 <http://www.gnu.org/licenses/>.
-
-# scapy.contrib.description = GPRS Tunneling Protocol v2 (GTPv2)
-# scapy.contrib.status = loads
-
-import struct
-
-
-from scapy.compat import orb
-from scapy.fields import BitEnumField, BitField, ByteEnumField, ByteField, \
-    ConditionalField, IntField, IPField, LongField, PacketField, \
-    PacketListField, ShortEnumField, ShortField, StrFixedLenField, \
-    StrLenField, ThreeBytesField, XBitField, XIntField, XShortField
-from scapy.packet import bind_layers, Packet, Raw
-from scapy.volatile import RandIP, RandShort
-
-
-from scapy.contrib import gtp
-
-
-RATType = {
-    6: "EUTRAN",
-}
-
-GTPmessageType = {1: "echo_request",
-                     2: "echo_response",
-                     32: "create_session_req",
-                     33: "create_session_res",
-                     34: "modify_bearer_req",
-                     35: "modify_bearer_res",
-                     36: "delete_session_req",
-                     37: "delete_session_res",
-                     70: "downlink_data_notif_failure_indic",
-                     170: "realease_bearers_req",
-                     171: "realease_bearers_res",
-                     176: "downlink_data_notif",
-                     177: "downlink_data_notif_ack",
-                  }
-
-IEType = {1: "IMSI",
-             2: "Cause",
-             3: "Recovery Restart",
-             71: "APN",
-             72: "AMBR",
-             73: "EPS Bearer ID",
-             74: "IPv4",
-             75: "MEI",
-             76: "MSISDN",
-             77: "Indication",
-             78: "Protocol Configuration Options",
-             79: "PAA",
-             80: "Bearer QoS",
-             82: "RAT",
-             83: "Serving Network",
-             86: "ULI",
-             87: "F-TEID",
-             93: "Bearer Context",
-             94: "Charging ID",
-             95: "Charging Characteristics",
-             99: "PDN Type",
-             114: "UE Time zone",
-             126: "Port Number",
-             127: "APN Restriction",
-             128: "Selection Mode",
-             161: "Max MBR/APN-AMBR (MMBR)"
-          }
-
-CauseValues = {
-    16: "Request Accepted",
-}
-
-
-class GTPHeader(Packet):
-    # 3GPP TS 29.060 V9.1.0 (2009-12)
-    # without the version
-    name = "GTP v2 Header"
-    fields_desc = [BitField("version", 2, 3),
-                   BitField("P", 1, 1),
-                   BitField("T", 1, 1),
-                   BitField("SPARE", 0, 1),
-                   BitField("SPARE", 0, 1),
-                   BitField("SPARE", 0, 1),
-                   ByteEnumField("gtp_type", None, GTPmessageType),
-                   ShortField("length", None),
-                   ConditionalField(IntField("teid", 0),
-                                    lambda pkt:pkt.T == 1),
-                   ThreeBytesField("seq", RandShort()),
-                   ByteField("SPARE", 0)
-                   ]
-
-    def post_build(self, p, pay):
-        p += pay
-        if self.length is None:
-            tmp_len = len(p) - 8
-            p = p[:2] + struct.pack("!H", tmp_len) + p[4:]
-        return p
-
-    def hashret(self):
-        return struct.pack("B", self.version) + self.payload.hashret()
-
-    def answers(self, other):
-        return (isinstance(other, GTPHeader) and
-                self.version == other.version and
-                self.payload.answers(other.payload))
-
-
-class IE_IPv4(gtp.IE_Base):
-    name = "IE IPv4"
-    fields_desc = [ByteEnumField("ietype", 74, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   IPField("address", RandIP())]
-
-
-class IE_MEI(gtp.IE_Base):
-    name = "IE MEI"
-    fields_desc = [ByteEnumField("ietype", 75, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   LongField("MEI", 0)]
-
-
-def IE_Dispatcher(s):
-    """Choose the correct Information Element class."""
-
-    # Get the IE type
-    ietype = orb(s[0])
-    cls = ietypecls.get(ietype, Raw)
-
-    # if ietype greater than 128 are TLVs
-    if cls is Raw and ietype > 128:
-        cls = IE_NotImplementedTLV
-
-    return cls(s)
-
-
-class IE_EPSBearerID(gtp.IE_Base):
-    name = "IE EPS Bearer ID"
-    fields_desc = [ByteEnumField("ietype", 73, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   ByteField("EBI", 0)]
-
-
-class IE_RAT(gtp.IE_Base):
-    name = "IE RAT"
-    fields_desc = [ByteEnumField("ietype", 82, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   ByteEnumField("RAT_type", None, RATType)]
-
-
-class IE_ServingNetwork(gtp.IE_Base):
-    name = "IE Serving Network"
-    fields_desc = [ByteEnumField("ietype", 83, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   gtp.TBCDByteField("MCC", "", 2),
-                   gtp.TBCDByteField("MNC", "", 1)]
-
-
-class ULI_RAI(gtp.IE_Base):
-    name = "IE Tracking Area Identity"
-    fields_desc = [
-        gtp.TBCDByteField("MCC", "", 2),
-        # MNC: if the third digit of MCC is 0xf, then the length of
-        # MNC is 1 byte
-        gtp.TBCDByteField("MNC", "", 1),
-        ShortField("LAC", 0),
-        ShortField("RAC", 0)]
-
-
-class ULI_SAI(gtp.IE_Base):
-    name = "IE Tracking Area Identity"
-    fields_desc = [
-        gtp.TBCDByteField("MCC", "", 2),
-        gtp.TBCDByteField("MNC", "", 1),
-        ShortField("LAC", 0),
-        ShortField("SAC", 0)]
-
-
-class ULI_TAI(gtp.IE_Base):
-    name = "IE Tracking Area Identity"
-    fields_desc = [
-        gtp.TBCDByteField("MCC", "", 2),
-        gtp.TBCDByteField("MNC", "", 1),
-        ShortField("TAC", 0)]
-
-
-class ULI_ECGI(gtp.IE_Base):
-    name = "IE E-UTRAN Cell Identifier"
-    fields_desc = [
-        gtp.TBCDByteField("MCC", "", 2),
-        gtp.TBCDByteField("MNC", "", 1),
-        BitField("SPARE", 0, 4),
-        BitField("ECI", 0, 28)]
-
-
-class IE_ULI(gtp.IE_Base):
-    name = "IE ULI"
-    fields_desc = [ByteEnumField("ietype", 86, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("SPARE", 0, 2),
-                   BitField("LAI_Present", 0, 1),
-                   BitField("ECGI_Present", 0, 1),
-                   BitField("TAI_Present", 0, 1),
-                   BitField("RAI_Present", 0, 1),
-                   BitField("SAI_Present", 0, 1),
-                   BitField("CGI_Present", 0, 1),
-                   ConditionalField(
-        PacketField("SAI", 0, ULI_SAI), lambda pkt: bool(pkt.SAI_Present)),
-        ConditionalField(
-        PacketField("RAI", 0, ULI_RAI), lambda pkt: bool(pkt.RAI_Present)),
-        ConditionalField(
-        PacketField("TAI", 0, ULI_TAI), lambda pkt: bool(pkt.TAI_Present)),
-        ConditionalField(PacketField("ECGI", 0, ULI_ECGI),
-                         lambda pkt: bool(pkt.ECGI_Present))]
-
-
-class IE_FTEID(gtp.IE_Base):
-    name = "IE F-TEID"
-    fields_desc = [ByteEnumField("ietype", 87, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("ipv4_present", 0, 1),
-                   BitField("ipv6_present", 0, 1),
-                   BitField("InterfaceType", 0, 6),
-                   XIntField("GRE_Key", 0),
-                   ConditionalField(
-        IPField("ipv4", RandIP()), lambda pkt: pkt.ipv4_present),
-        ConditionalField(XBitField("ipv6", "2001::", 128),
-                         lambda pkt: pkt.ipv6_present)]
-
-
-class IE_BearerContext(gtp.IE_Base):
-    name = "IE Bearer Context"
-    fields_desc = [ByteEnumField("ietype", 93, IEType),
-                   ShortField("length", 0),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   PacketListField("IE_list", None, IE_Dispatcher,
-                                   length_from=lambda pkt: pkt.length)]
-
-
-class IE_NotImplementedTLV(gtp.IE_Base):
-    name = "IE not implemented"
-    fields_desc = [ByteEnumField("ietype", 0, IEType),
-                   ShortField("length", None),
-                   StrLenField("data", "", length_from=lambda x: x.length)]
-
-
-class IE_IMSI(gtp.IE_Base):
-    name = "IE IMSI"
-    fields_desc = [ByteEnumField("ietype", 1, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   gtp.TBCDByteField("IMSI", "33607080910",
-                                     length_from=lambda x: x.length)]
-
-
-class IE_Cause(gtp.IE_Base):
-    name = "IE Cause"
-    fields_desc = [ByteEnumField("ietype", 2, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   ByteEnumField("Cause", 1, CauseValues),
-                   BitField("SPARE", 0, 5),
-                   BitField("PCE", 0, 1),
-                   BitField("BCE", 0, 1),
-                   BitField("CS", 0, 1)]
-
-
-class IE_RecoveryRestart(gtp.IE_Base):
-    name = "IE Recovery Restart"
-    fields_desc = [ByteEnumField("ietype", 3, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   ByteField("restart_counter", 0)]
-
-
-class IE_APN(gtp.IE_Base):
-    name = "IE APN"
-    fields_desc = [ByteEnumField("ietype", 71, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   gtp.APNStrLenField("APN", "internet",
-                                      length_from=lambda x: x.length)]
-
-
-class IE_AMBR(gtp.IE_Base):
-    name = "IE AMBR"
-    fields_desc = [ByteEnumField("ietype", 72, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   IntField("AMBR_Uplink", 0),
-                   IntField("AMBR_Downlink", 0)]
-
-
-class IE_MSISDN(gtp.IE_Base):
-    name = "IE MSISDN"
-    fields_desc = [ByteEnumField("ietype", 76, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   gtp.TBCDByteField("digits", "33123456789",
-                                     length_from=lambda x: x.length)]
-
-
-class IE_Indication(gtp.IE_Base):
-    name = "IE Cause"
-    fields_desc = [ByteEnumField("ietype", 77, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("DAF", 0, 1),
-                   BitField("DTF", 0, 1),
-                   BitField("HI", 0, 1),
-                   BitField("DFI", 0, 1),
-                   BitField("OI", 0, 1),
-                   BitField("ISRSI", 0, 1),
-                   BitField("ISRAI", 0, 1),
-                   BitField("SGWCI", 0, 1),
-                   BitField("SQCI", 0, 1),
-                   BitField("UIMSI", 0, 1),
-                   BitField("CFSI", 0, 1),
-                   BitField("CRSI", 0, 1),
-                   BitField("PS", 0, 1),
-                   BitField("PT", 0, 1),
-                   BitField("SI", 0, 1),
-                   BitField("MSV", 0, 1),
-
-                   ConditionalField(
-                       BitField("RetLoc", 0, 1), lambda pkt: pkt.length > 2),
-                   ConditionalField(
-                       BitField("PBIC", 0, 1), lambda pkt: pkt.length > 2),
-                   ConditionalField(
-                       BitField("SRNI", 0, 1), lambda pkt: pkt.length > 2),
-                   ConditionalField(
-                       BitField("S6AF", 0, 1), lambda pkt: pkt.length > 2),
-                   ConditionalField(
-                       BitField("S4AF", 0, 1), lambda pkt: pkt.length > 2),
-                   ConditionalField(
-                       BitField("MBMDT", 0, 1), lambda pkt: pkt.length > 2),
-                   ConditionalField(
-                       BitField("ISRAU", 0, 1), lambda pkt: pkt.length > 2),
-                   ConditionalField(
-                       BitField("CCRSI", 0, 1), lambda pkt: pkt.length > 2),
-
-                   ConditionalField(
-        BitField("CPRAI", 0, 1), lambda pkt: pkt.length > 3),
-        ConditionalField(
-        BitField("ARRL", 0, 1), lambda pkt: pkt.length > 3),
-        ConditionalField(
-        BitField("PPOFF", 0, 1), lambda pkt: pkt.length > 3),
-        ConditionalField(
-        BitField("PPON", 0, 1), lambda pkt: pkt.length > 3),
-        ConditionalField(
-        BitField("PPSI", 0, 1), lambda pkt: pkt.length > 3),
-        ConditionalField(
-        BitField("CSFBI", 0, 1), lambda pkt: pkt.length > 3),
-        ConditionalField(
-        BitField("CLII", 0, 1), lambda pkt: pkt.length > 3),
-        ConditionalField(
-        BitField("CPSR", 0, 1), lambda pkt: pkt.length > 3),
-
-    ]
-
-
-PDN_TYPES = {
-    1: "IPv4",
-    2: "IPv6",
-    3: "IPv4/IPv6",
-}
-
-PCO_OPTION_TYPES = {
-    3: "IPv4",
-    129: "Primary DNS Server IP address",
-    130: "Primary NBNS Server IP address",
-    131: "Secondary DNS Server IP address",
-    132: "Secondary NBNS Server IP address",
-}
-
-
-class PCO_Option(Packet):
-    def extract_padding(self, pkt):
-        return "", pkt
-
-
-class PCO_IPv4(PCO_Option):
-    name = "IPv4"
-    fields_desc = [ByteEnumField("type", None, PCO_OPTION_TYPES),
-                   ByteField("length", 0),
-                   IPField("address", RandIP())]
-
-
-class PCO_Primary_DNS(PCO_Option):
-    name = "Primary DNS Server IP Address"
-    fields_desc = [ByteEnumField("type", None, PCO_OPTION_TYPES),
-                   ByteField("length", 0),
-                   IPField("address", RandIP())]
-
-
-class PCO_Primary_NBNS(PCO_Option):
-    name = "Primary DNS Server IP Address"
-    fields_desc = [ByteEnumField("type", None, PCO_OPTION_TYPES),
-                   ByteField("length", 0),
-                   IPField("address", RandIP())]
-
-
-class PCO_Secondary_DNS(PCO_Option):
-    name = "Secondary DNS Server IP Address"
-    fields_desc = [ByteEnumField("type", None, PCO_OPTION_TYPES),
-                   ByteField("length", 0),
-                   IPField("address", RandIP())]
-
-
-class PCO_Secondary_NBNS(PCO_Option):
-    name = "Secondary NBNS Server IP Address"
-    fields_desc = [ByteEnumField("type", None, PCO_OPTION_TYPES),
-                   ByteField("length", 0),
-                   IPField("address", RandIP())]
-
-
-PCO_PROTOCOL_TYPES = {
-    0x0001: 'P-CSCF IPv6 Address Request',
-    0x0003: 'DNS Server IPv6 Address Request',
-    0x0005: 'MS Support of Network Requested Bearer Control indicator',
-    0x000a: 'IP Allocation via NAS',
-    0x000d: 'DNS Server IPv4 Address Request',
-    0x000c: 'P-CSCF IPv4 Address Request',
-    0x0010: 'IPv4 Link MTU Request',
-    0x8021: 'IPCP',
-    0xc023: 'Password Authentication Protocol',
-    0xc223: 'Challenge Handshake Authentication Protocol',
-}
-
-PCO_OPTION_CLASSES = {
-    3: PCO_IPv4,
-    129: PCO_Primary_DNS,
-    130: PCO_Primary_NBNS,
-    131: PCO_Secondary_DNS,
-    132: PCO_Secondary_NBNS,
-}
-
-
-def PCO_option_dispatcher(s):
-    """Choose the correct PCO element."""
-    option = orb(s[0])
-
-    cls = PCO_OPTION_CLASSES.get(option, Raw)
-    return cls(s)
-
-
-def len_options(pkt):
-    return pkt.length - 4 if pkt.length else 0
-
-
-class PCO_P_CSCF_IPv6_Address_Request(PCO_Option):
-    name = "PCO PCO-P CSCF IPv6 Address Request"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   ConditionalField(XBitField("address",
-                                              "2001:db8:0:42::", 128),
-                                    lambda pkt: pkt.length)]
-
-
-class PCO_DNS_Server_IPv6(PCO_Option):
-    name = "PCO DNS Server IPv6 Address Request"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   ConditionalField(XBitField("address",
-                                              "2001:db8:0:42::", 128),
-                                    lambda pkt: pkt.length)]
-
-
-class PCO_SOF(PCO_Option):
-    name = "PCO MS Support of Network Requested Bearer Control indicator"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   ]
-
-
-class PCO_PPP(PCO_Option):
-    name = "PPP IP Control Protocol"
-    fields_desc = [ByteField("Code", 0),
-                   ByteField("Identifier", 0),
-                   ShortField("length", 0),
-                   PacketListField("Options", None, PCO_option_dispatcher,
-                                   length_from=len_options)]
-
-    def extract_padding(self, pkt):
-        return "", pkt
-
-
-class PCO_IP_Allocation_via_NAS(PCO_Option):
-    name = "PCO IP Address allocation via NAS Signaling"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   PacketListField("Options", None, PCO_option_dispatcher,
-                                   length_from=len_options)]
-
-
-class PCO_P_CSCF_IPv4_Address_Request(PCO_Option):
-    name = "PCO PCO-P CSCF IPv4 Address Request"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   ConditionalField(IPField("address", RandIP()),
-                                    lambda pkt: pkt.length)]
-
-
-class PCO_DNS_Server_IPv4(PCO_Option):
-    name = "PCO DNS Server IPv4 Address Request"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   ConditionalField(IPField("address", RandIP()),
-                                    lambda pkt: pkt.length)]
-
-
-class PCO_IPv4_Link_MTU_Request(PCO_Option):
-    name = "PCO IPv4 Link MTU Request"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   ConditionalField(ShortField("MTU_size", 1500),
-                                    lambda pkt: pkt.length)]
-
-
-class PCO_IPCP(PCO_Option):
-    name = "PCO Internet Protocol Control Protocol"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   PacketField("PPP", None, PCO_PPP)]
-
-
-class PCO_PPP_Auth(PCO_Option):
-    name = "PPP Password Authentication Protocol"
-    fields_desc = [ByteField("Code", 0),
-                   ByteField("Identifier", 0),
-                   ShortField("length", 0),
-                   ByteField("PeerID_length", 0),
-                   ConditionalField(StrFixedLenField(
-                       "PeerID",
-                       "",
-                       length_from=lambda pkt: pkt.PeerID_length),
-                       lambda pkt: pkt.PeerID_length),
-                   ByteField("Password_length", 0),
-                   ConditionalField(
-                       StrFixedLenField(
-                           "Password",
-                           "",
-                           length_from=lambda pkt: pkt.Password_length),
-                       lambda pkt: pkt.Password_length)]
-
-
-class PCO_PasswordAuthentificationProtocol(PCO_Option):
-    name = "PCO Password Authentication Protocol"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   PacketField("PPP", None, PCO_PPP_Auth)]
-
-
-class PCO_PPP_Challenge(PCO_Option):
-    name = "PPP Password Authentication Protocol"
-    fields_desc = [ByteField("Code", 0),
-                   ByteField("Identifier", 0),
-                   ShortField("length", 0),
-                   ByteField("value_size", 0),
-                   ConditionalField(StrFixedLenField(
-                       "value", "",
-                       length_from=lambda pkt: pkt.value_size),
-                       lambda pkt: pkt.value_size),
-                   ConditionalField(StrFixedLenField(
-                       "name", "",
-                       length_from=lambda pkt: pkt.length - pkt.value_size - 5),  # noqa: E501
-                       lambda pkt: pkt.length)]
-
-
-class PCO_ChallengeHandshakeAuthenticationProtocol(PCO_Option):
-    name = "PCO Password Authentication Protocol"
-    fields_desc = [ShortEnumField("type", None, PCO_PROTOCOL_TYPES),
-                   ByteField("length", 0),
-                   PacketField("PPP", None, PCO_PPP_Challenge)]
-
-
-PCO_PROTOCOL_CLASSES = {
-    0x0001: PCO_P_CSCF_IPv6_Address_Request,
-    0x0003: PCO_DNS_Server_IPv6,
-    0x0005: PCO_SOF,
-    0x000a: PCO_IP_Allocation_via_NAS,
-    0x000c: PCO_P_CSCF_IPv4_Address_Request,
-    0x000d: PCO_DNS_Server_IPv4,
-    0x0010: PCO_IPv4_Link_MTU_Request,
-    0x8021: PCO_IPCP,
-    0xc023: PCO_PasswordAuthentificationProtocol,
-    0xc223: PCO_ChallengeHandshakeAuthenticationProtocol,
-}
-
-
-def PCO_protocol_dispatcher(s):
-    """Choose the correct PCO element."""
-    proto_num = orb(s[0]) * 256 + orb(s[1])
-    cls = PCO_PROTOCOL_CLASSES.get(proto_num, Raw)
-    return cls(s)
-
-
-class IE_PCO(gtp.IE_Base):
-    name = "IE Protocol Configuration Options"
-    fields_desc = [ByteEnumField("ietype", 78, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("Extension", 0, 1),
-                   BitField("SPARE", 0, 4),
-                   BitField("PPP", 0, 3),
-                   PacketListField("Protocols", None, PCO_protocol_dispatcher,
-                                   length_from=lambda pkt: pkt.length - 1)]
-
-
-class IE_PAA(gtp.IE_Base):
-    name = "IE PAA"
-    fields_desc = [ByteEnumField("ietype", 79, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("SPARE", 0, 5),
-                   BitEnumField("PDN_type", None, 3, PDN_TYPES),
-                   ConditionalField(
-                       ByteField("ipv6_prefix_length", 8),
-                       lambda pkt: pkt.PDN_type in (2, 3)),
-                   ConditionalField(
-                       XBitField("ipv6", "2001:db8:0:42::", 128),
-                       lambda pkt: pkt.PDN_type in (2, 3)),
-                   ConditionalField(
-                       IPField("ipv4", 0), lambda pkt: pkt.PDN_type in (1, 3)),
-                   ]
-
-
-class IE_Bearer_QoS(gtp.IE_Base):
-    name = "IE Bearer Quality of Service"
-    fields_desc = [ByteEnumField("ietype", 80, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("SPARE", 0, 1),
-                   BitField("PCI", 0, 1),
-                   BitField("PriorityLevel", 0, 4),
-                   BitField("SPARE", 0, 1),
-                   BitField("PVI", 0, 1),
-                   ByteField("QCI", 0),
-                   BitField("MaxBitRateForUplink", 0, 40),
-                   BitField("MaxBitRateForDownlink", 0, 40),
-                   BitField("GuaranteedBitRateForUplink", 0, 40),
-                   BitField("GuaranteedBitRateForDownlink", 0, 40)]
-
-
-class IE_ChargingID(gtp.IE_Base):
-    name = "IE Charging ID"
-    fields_desc = [ByteEnumField("ietype", 94, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   IntField("ChargingID", 0)]
-
-
-class IE_ChargingCharacteristics(gtp.IE_Base):
-    name = "IE Charging ID"
-    fields_desc = [ByteEnumField("ietype", 95, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   XShortField("ChargingCharacteristric", 0)]
-
-
-class IE_PDN_type(gtp.IE_Base):
-    name = "IE PDN Type"
-    fields_desc = [ByteEnumField("ietype", 99, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("SPARE", 0, 5),
-                   BitEnumField("PDN_type", None, 3, PDN_TYPES)]
-
-
-class IE_UE_Timezone(gtp.IE_Base):
-    name = "IE UE Time zone"
-    fields_desc = [ByteEnumField("ietype", 114, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   ByteField("Timezone", 0),
-                   ByteField("DST", 0)]
-
-
-class IE_Port_Number(gtp.IE_Base):
-    name = "IE Port Number"
-    fields_desc = [ByteEnumField("ietype", 126, IEType),
-                   ShortField("length", 2),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   ShortField("PortNumber", RandShort())]
-
-
-class IE_APN_Restriction(gtp.IE_Base):
-    name = "IE APN Restriction"
-    fields_desc = [ByteEnumField("ietype", 127, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   ByteField("APN_Restriction", 0)]
-
-
-class IE_SelectionMode(gtp.IE_Base):
-    name = "IE Selection Mode"
-    fields_desc = [ByteEnumField("ietype", 128, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   BitField("SPARE", 0, 6),
-                   BitField("SelectionMode", 0, 2)]
-
-
-class IE_MMBR(gtp.IE_Base):
-    name = "IE Max MBR/APN-AMBR (MMBR)"
-    fields_desc = [ByteEnumField("ietype", 72, IEType),
-                   ShortField("length", None),
-                   BitField("CR_flag", 0, 4),
-                   BitField("instance", 0, 4),
-                   IntField("uplink_rate", 0),
-                   IntField("downlink_rate", 0)]
-
-
-ietypecls = {1: IE_IMSI,
-             2: IE_Cause,
-             3: IE_RecoveryRestart,
-             71: IE_APN,
-             72: IE_AMBR,
-             73: IE_EPSBearerID,
-             74: IE_IPv4,
-             75: IE_MEI,
-             76: IE_MSISDN,
-             77: IE_Indication,
-             78: IE_PCO,
-             79: IE_PAA,
-             80: IE_Bearer_QoS,
-             82: IE_RAT,
-             83: IE_ServingNetwork,
-             86: IE_ULI,
-             87: IE_FTEID,
-             93: IE_BearerContext,
-             94: IE_ChargingID,
-             95: IE_ChargingCharacteristics,
-             99: IE_PDN_type,
-             114: IE_UE_Timezone,
-             126: IE_Port_Number,
-             127: IE_APN_Restriction,
-             128: IE_SelectionMode,
-             161: IE_MMBR}
-
-#
-# GTPv2 Commands
-# 3GPP TS 29.060 V9.1.0 (2009-12)
-#
-
-
-class GTPV2Command(Packet):
-    fields_desc = [PacketListField("IE_list", None, IE_Dispatcher)]
-
-
-class GTPV2EchoRequest(GTPV2Command):
-    name = "GTPv2 Echo Request"
-
-
-class GTPV2EchoResponse(GTPV2Command):
-    name = "GTPv2 Echo Response"
-
-
-class GTPV2CreateSessionRequest(GTPV2Command):
-    name = "GTPv2 Create Session Request"
-
-
-class GTPV2CreateSessionResponse(GTPV2Command):
-    name = "GTPv2 Create Session Response"
-
-
-class GTPV2DeleteSessionRequest(GTPV2Command):
-    name = "GTPv2 Delete Session Request"
-
-
-class GTPV2DeleteSessionResponse(GTPV2Command):
-    name = "GTPv2 Delete Session Request"
-
-
-class GTPV2ModifyBearerCommand(GTPV2Command):
-    name = "GTPv2 Modify Bearer Command"
-
-
-class GTPV2ModifyBearerFailureNotification(GTPV2Command):
-    name = "GTPv2 Modify Bearer Command"
-
-
-class GTPV2DownlinkDataNotifFailureIndication(GTPV2Command):
-    name = "GTPv2 Downlink Data Notification Failure Indication"
-
-
-class GTPV2ModifyBearerRequest(GTPV2Command):
-    name = "GTPv2 Modify Bearer Request"
-
-
-class GTPV2ModifyBearerResponse(GTPV2Command):
-    name = "GTPv2 Modify Bearer Response"
-
-
-class GTPV2UpdateBearerRequest(GTPV2Command):
-    name = "GTPv2 Update Bearer Request"
-
-
-class GTPV2UpdateBearerResponse(GTPV2Command):
-    name = "GTPv2 Update Bearer Response"
-
-
-class GTPV2DeleteBearerRequest(GTPV2Command):
-    name = "GTPv2 Delete Bearer Request"
-
-
-class GTPV2SuspendNotification(GTPV2Command):
-    name = "GTPv2 Suspend Notification"
-
-
-class GTPV2SuspendAcknowledge(GTPV2Command):
-    name = "GTPv2 Suspend Acknowledge"
-
-
-class GTPV2ResumeNotification(GTPV2Command):
-    name = "GTPv2 Resume Notification"
-
-
-class GTPV2ResumeAcknowledge(GTPV2Command):
-    name = "GTPv2 Resume Acknowledge"
-
-
-class GTPV2DeleteBearerResponse(GTPV2Command):
-    name = "GTPv2 Delete Bearer Response"
-
-
-class GTPV2CreateIndirectDataForwardingTunnelRequest(GTPV2Command):
-    name = "GTPv2 Create Indirect Data Forwarding Tunnel Request"
-
-
-class GTPV2CreateIndirectDataForwardingTunnelResponse(GTPV2Command):
-    name = "GTPv2 Create Indirect Data Forwarding Tunnel Response"
-
-
-class GTPV2DeleteIndirectDataForwardingTunnelRequest(GTPV2Command):
-    name = "GTPv2 Delete Indirect Data Forwarding Tunnel Request"
-
-
-class GTPV2DeleteIndirectDataForwardingTunnelResponse(GTPV2Command):
-    name = "GTPv2 Delete Indirect Data Forwarding Tunnel Response"
-
-
-class GTPV2ReleaseBearerRequest(GTPV2Command):
-    name = "GTPv2 Release Bearer Request"
-
-
-class GTPV2ReleaseBearerResponse(GTPV2Command):
-    name = "GTPv2 Release Bearer Response"
-
-
-class GTPV2DownlinkDataNotif(GTPV2Command):
-    name = "GTPv2 Download Data Notification"
-
-
-class GTPV2DownlinkDataNotifAck(GTPV2Command):
-    name = "GTPv2 Download Data Notification Acknowledgment"
-
-
-bind_layers(GTPHeader, GTPV2EchoRequest, gtp_type=1, T=0)
-bind_layers(GTPHeader, GTPV2EchoResponse, gtp_type=2, T=0)
-bind_layers(GTPHeader, GTPV2CreateSessionRequest, gtp_type=32)
-bind_layers(GTPHeader, GTPV2CreateSessionResponse, gtp_type=33)
-bind_layers(GTPHeader, GTPV2ModifyBearerRequest, gtp_type=34)
-bind_layers(GTPHeader, GTPV2ModifyBearerResponse, gtp_type=35)
-bind_layers(GTPHeader, GTPV2DeleteSessionRequest, gtp_type=36)
-bind_layers(GTPHeader, GTPV2DeleteSessionResponse, gtp_type=37)
-bind_layers(GTPHeader, GTPV2ModifyBearerCommand, gtp_type=64)
-bind_layers(GTPHeader, GTPV2ModifyBearerFailureNotification, gtp_type=65)
-bind_layers(GTPHeader, GTPV2DownlinkDataNotifFailureIndication, gtp_type=70)
-bind_layers(GTPHeader, GTPV2UpdateBearerRequest, gtp_type=97)
-bind_layers(GTPHeader, GTPV2UpdateBearerResponse, gtp_type=98)
-bind_layers(GTPHeader, GTPV2DeleteBearerRequest, gtp_type=99)
-bind_layers(GTPHeader, GTPV2DeleteBearerResponse, gtp_type=100)
-bind_layers(GTPHeader, GTPV2SuspendNotification, gtp_type=162)
-bind_layers(GTPHeader, GTPV2SuspendAcknowledge, gtp_type=163)
-bind_layers(GTPHeader, GTPV2ResumeNotification, gtp_type=164)
-bind_layers(GTPHeader, GTPV2ResumeAcknowledge, gtp_type=165)
-bind_layers(
-    GTPHeader, GTPV2CreateIndirectDataForwardingTunnelRequest, gtp_type=166)
-bind_layers(
-    GTPHeader, GTPV2CreateIndirectDataForwardingTunnelResponse, gtp_type=167)
-bind_layers(
-    GTPHeader, GTPV2DeleteIndirectDataForwardingTunnelRequest, gtp_type=168)
-bind_layers(
-    GTPHeader, GTPV2DeleteIndirectDataForwardingTunnelResponse, gtp_type=169)
-bind_layers(GTPHeader, GTPV2ReleaseBearerRequest, gtp_type=170)
-bind_layers(GTPHeader, GTPV2ReleaseBearerResponse, gtp_type=171)
-bind_layers(GTPHeader, GTPV2DownlinkDataNotif, gtp_type=176)
-bind_layers(GTPHeader, GTPV2DownlinkDataNotifAck, gtp_type=177)
diff --git a/dep/Dot1BR.py b/dep/scapy_modules/Dot1BR.py
similarity index 98%
rename from dep/Dot1BR.py
rename to dep/scapy_modules/Dot1BR.py
index cc3c01f4..4a681ad1 100644
--- a/dep/Dot1BR.py
+++ b/dep/scapy_modules/Dot1BR.py
@@ -17,7 +17,7 @@ from scapy.data import ETHER_TYPES
 class Dot1BR(Packet):
     name = "802.1BR"
     aliastypes = [ Ether ]
-    fields_desc =  [ 
+    fields_desc =  [
                      BitField("EPCP", 0, 3),
                      BitField("EEDI", 0, 1),
                      BitField("IngressECIDbase", 0, 12),
diff --git a/dep/gtp.py b/dep/scapy_modules/gtp.py
similarity index 94%
rename from dep/gtp.py
rename to dep/scapy_modules/gtp.py
index 76f5e8e4..df101c62 100644
--- a/dep/gtp.py
+++ b/dep/scapy_modules/gtp.py
@@ -1,3 +1,5 @@
+#! /usr/bin/env python
+
 # Copyright (C) 2018 Leonardo Monteiro <decastromonteiro@gmail.com>
 #               2017 Alexis Sultan    <alexis.sultan@sfr.com>
 #               2017 Alessio Deiana <adeiana@gmail.com>
@@ -9,7 +11,7 @@
 # scapy.contrib.description = GPRS Tunneling Protocol (GTP)
 # scapy.contrib.status = loads
 
-
+from __future__ import absolute_import
 import struct
 
 
@@ -20,9 +22,11 @@ from scapy.fields import BitEnumField, BitField, ByteEnumField, ByteField, \
     IPField, PacketListField, ShortField, StrFixedLenField, StrLenField, \
     XBitField, XByteField, XIntField
 from scapy.layers.inet import IP, UDP
-from scapy.layers.inet6 import IP6Field
+from scapy.layers.inet6 import IPv6, IP6Field
+from scapy.layers.ppp import PPP
 from scapy.modules.six.moves import range
-from scapy.packet import bind_layers, Packet, Raw
+from scapy.packet import bind_layers, bind_bottom_up, bind_top_down, \
+    Packet, Raw
 from scapy.volatile import RandInt, RandIP, RandNum, RandString
 
 
@@ -144,6 +148,7 @@ ExtensionHeadersTypes = {
     1: "Reserved",
     2: "Reserved",
     64: "UDP Port",
+    133: "PDU Session Container",
     192: "PDCP PDU Number",
     193: "Reserved",
     194: "Reserved"
@@ -196,6 +201,19 @@ class GTP_UDPPort_ExtensionHeader(GTP_ExtensionHeader):
                    ByteEnumField("next_ex", 0, ExtensionHeadersTypes), ]
 
 
+class GTP_PDUSession_ExtensionHeader(GTP_ExtensionHeader):
+    fields_desc = [ByteField("length", 0x02),
+                   BitField("pdu_type", 0, 4),
+                   BitField("spare0", 0, 4),
+                   BitField("ppp", 0, 1),
+                   BitField("rqi", 0, 1),
+                   BitField("qos_flow", 0, 6),
+                   BitField("ppi", 0, 3),
+                   BitField("spare1", 0, 5),
+                   BitField("reserved", 0, 24),
+                   ByteEnumField("next_ex", 0, ExtensionHeadersTypes), ]
+
+
 class GTP_PDCP_PDU_ExtensionHeader(GTP_ExtensionHeader):
     fields_desc = [ByteField("length", 0x01),
                    ShortField("pdcp_pdu", None),
@@ -252,6 +270,19 @@ class GTP_U_Header(GTPHeader):
     # encapsulated in G-PDUs. A G-PDU is a packet including a GTP-U header and a T-PDU. The Path Protocol  # noqa: E501
     # defines the path and the GTP-U header defines the tunnel. Several tunnels may be multiplexed on a single path.  # noqa: E501
 
+    def guess_payload_class(self, payload):
+        # Snooped from Wireshark
+        # https://github.com/boundary/wireshark/blob/07eade8124fd1d5386161591b52e177ee6ea849f/epan/dissectors/packet-gtp.c#L8195  # noqa: E501
+        if self.gtp_type == 255:
+            sub_proto = orb(payload[0])
+            if sub_proto >= 0x45 and sub_proto <= 0x4e:
+                return IP
+            elif (sub_proto & 0xf0) == 0x60:
+                return IPv6
+            else:
+                return PPP
+        return GTPHeader.guess_payload_class(self, payload)
+
 
 # Some gtp_types have to be associated with a certain type of header
 GTPforcedTypes = {
@@ -706,7 +737,8 @@ class IE_ExtensionHeaderList(IE_Base):
     name = "Extension Header List"
     fields_desc = [ByteEnumField("ietype", 141, IEType),
                    FieldLenField("length", None, length_of="extension_headers"),  # noqa: E501
-                   FieldListField("extension_headers", [64, 192], ByteField("", 0))]  # noqa: E501
+                   #FieldListField("extension_headers", [64, 192], ByteField("", 0))]  # noqa: E501
+                   FieldListField("extension_headers", [64, 133, 192], ByteField("", 0))]  # noqa: E501
 
 
 class IE_NotImplementedTLV(Packet):
@@ -885,8 +917,9 @@ class GTPmorethan1500(Packet):
 
 
 # Bind GTP-C
-bind_layers(UDP, GTPHeader, dport=2123)
-bind_layers(UDP, GTPHeader, sport=2123)
+bind_bottom_up(UDP, GTPHeader, dport=2123)
+bind_bottom_up(UDP, GTPHeader, sport=2123)
+bind_layers(UDP, GTPHeader, dport=2123, sport=2123)
 bind_layers(GTPHeader, GTPEchoRequest, gtp_type=1, S=1)
 bind_layers(GTPHeader, GTPEchoResponse, gtp_type=2, S=1)
 bind_layers(GTPHeader, GTPCreatePDPContextRequest, gtp_type=16)
@@ -898,10 +931,14 @@ bind_layers(GTPHeader, GTPDeletePDPContextResponse, gtp_type=21)
 bind_layers(GTPHeader, GTPPDUNotificationRequest, gtp_type=27)
 bind_layers(GTPHeader, GTPSupportedExtensionHeadersNotification, gtp_type=31, S=1)  # noqa: E501
 bind_layers(GTPHeader, GTP_UDPPort_ExtensionHeader, next_ex=64, E=1)
+bind_layers(GTPHeader, GTP_PDUSession_ExtensionHeader, next_ex=133, E=1)
 bind_layers(GTPHeader, GTP_PDCP_PDU_ExtensionHeader, next_ex=192, E=1)
 
 # Bind GTP-U
-bind_layers(UDP, GTP_U_Header, dport=2152)
-bind_layers(UDP, GTP_U_Header, sport=2152)
+bind_bottom_up(UDP, GTP_U_Header, dport=2152)
+bind_bottom_up(UDP, GTP_U_Header, sport=2152)
+bind_layers(UDP, GTP_U_Header, dport=2152, sport=2152)
 bind_layers(GTP_U_Header, GTPErrorIndication, gtp_type=26, S=1)
-bind_layers(GTP_U_Header, IP, gtp_type=255)
+bind_top_down(GTP_U_Header, IP, gtp_type=255)
+bind_top_down(GTP_U_Header, IPv6, gtp_type=255)
+bind_top_down(GTP_U_Header, PPP, gtp_type=255)
diff --git a/dep/igmp.py b/dep/scapy_modules/igmp.py
similarity index 100%
rename from dep/igmp.py
rename to dep/scapy_modules/igmp.py
diff --git a/dep/lldp.py b/dep/scapy_modules/lldp.py
similarity index 99%
rename from dep/lldp.py
rename to dep/scapy_modules/lldp.py
index faa3b4d0..8eb8beaf 100644
--- a/dep/lldp.py
+++ b/dep/scapy_modules/lldp.py
@@ -89,7 +89,7 @@ class LLDPOrgSpecGeneric(LLDPGeneric):
     fields_desc = [BitField("type", 127, 7),
                    BitFieldLenField("length", None, 9, length_of="value"),
                    X3BytesField("oui", 0),
-                   ByteField("subtype", 0), 
+                   ByteField("subtype", 0),
                    StrLenField("value", "", length_from=lambda x: x.length - 4)]
 
 
diff --git a/dep/mpls.py b/dep/scapy_modules/mpls.py
similarity index 100%
rename from dep/mpls.py
rename to dep/scapy_modules/mpls.py
diff --git a/dep/nsh.py b/dep/scapy_modules/nsh.py
similarity index 100%
rename from dep/nsh.py
rename to dep/scapy_modules/nsh.py
diff --git a/dep/nvgre.py b/dep/scapy_modules/nvgre.py
similarity index 90%
rename from dep/nvgre.py
rename to dep/scapy_modules/nvgre.py
index a3fcf49b..8cb9a87a 100644
--- a/dep/nvgre.py
+++ b/dep/scapy_modules/nvgre.py
@@ -1,5 +1,5 @@
 ## This file is part of Scapy
-## 
+##
 ## Copyright (C) Min Cao <min.cao@intel.com>
 
 """
@@ -27,8 +27,8 @@ class NVGRE(Packet):
                    X3BytesField("TNI", 1),
                    ByteField("reserved1", 0)]
 
-    def mysummary(self):          
-        return self.sprintf("NVGRE (tni=%NVGRE.tni%)") 
+    def mysummary(self):
+        return self.sprintf("NVGRE (tni=%NVGRE.tni%)")
 
 
 bind_layers(NVGRE, Ether, protocoltype=0x6558)
diff --git a/dep/pfcp.py b/dep/scapy_modules/pfcp.py
similarity index 100%
rename from dep/pfcp.py
rename to dep/scapy_modules/pfcp.py
diff --git a/dep/vxlan.py b/dep/scapy_modules/vxlan.py
similarity index 100%
rename from dep/vxlan.py
rename to dep/scapy_modules/vxlan.py
-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dts] [PATCH V1 2/7]framework/dts: add suite log for scapy session
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 1/7]dep: mv scapy modules to new folder scapy_modules Xiao Qimai
@ 2020-09-08  3:26 ` Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 3/7]framework/packet: update packet module for saving sending packet time Xiao Qimai
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 framework/dts.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/framework/dts.py b/framework/dts.py
index 2d86bc35..2a657e53 100644
--- a/framework/dts.py
+++ b/framework/dts.py
@@ -265,6 +265,10 @@ def dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname):
     """
     log_handler.config_suite(test_classname, 'dts')
     tester.logger.config_suite(test_classname, 'tester')
+    if hasattr(tester, 'logger_alt'):
+        tester.logger_alt.config_suite(test_classname, 'tester')
+    if hasattr(tester, 'logger_scapy'):
+        tester.logger_scapy.config_suite(test_classname, 'tester')
 
     for dutobj in duts:
         dutobj.logger.config_suite(test_classname, 'dut')
-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dts] [PATCH V1 3/7]framework/packet: update packet module for saving sending packet time
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 1/7]dep: mv scapy modules to new folder scapy_modules Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 2/7]framework/dts: add suite log for scapy session Xiao Qimai
@ 2020-09-08  3:26 ` Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 4/7]framework/tester: prepare packet send session and update other packet related part Xiao Qimai
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 framework/packet.py | 159 +++++++++++++++++++++++---------------------
 1 file changed, 83 insertions(+), 76 deletions(-)

diff --git a/framework/packet.py b/framework/packet.py
index 603840b4..6a306cba 100644
--- a/framework/packet.py
+++ b/framework/packet.py
@@ -34,35 +34,54 @@ Base on scapy(python program for packet manipulation)
 """
 
 from socket import AF_INET6
+from importlib import import_module
 from scapy.all import *
-from scapy.layers.sctp import SCTP, SCTPChunkData
-
 # load extension layers
 exec_file = os.path.realpath(__file__)
 DTS_PATH = exec_file.replace('/framework/packet.py', '')
 # exec_file might be .pyc file, if so, remove 'c'.
 TMP_PATH = DTS_PATH[:-1] + '/output/tmp/pcap/' if exec_file.endswith('.pyc') else DTS_PATH + '/output/tmp/pcap/'
-
 if not os.path.exists(TMP_PATH):
     os.system('mkdir -p %s' % TMP_PATH)
+
 DEP_FOLDER = DTS_PATH + '/dep'
 sys.path.append(DEP_FOLDER)
-
-from vxlan import VXLAN
-from nvgre import NVGRE, IPPROTO_NVGRE
-from scapy.contrib.gtp import *
-from lldp import LLDP, LLDPManagementAddress
-from Dot1BR import Dot1BR
-from nsh import NSH
-from mpls import MPLS
-from igmp import IGMP
-from pfcp import PFCP
+sys.path.append(DEP_FOLDER + '/scapy_modules')
 
 from utils import convert_ip2int
 from utils import convert_int2ip
 
-# for saving command history
-from utils import get_backtrace_object
+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']}
+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:
+    if m in local_modules:
+        module = import_module(m)
+        for clazz in scapy_modules_required[m]:
+            locals().update({clazz: getattr(module, clazz)})
+    else:
+        if m == 'sctp':
+            module = import_module(f'scapy.layers.{m}')
+            for clazz in scapy_modules_required[m]:
+                locals().update({clazz: getattr(module, clazz)})
+        else:
+            module = import_module(f'scapy.contrib.{m}')
+            for clazz in scapy_modules_required[m]:
+                locals().update({clazz: getattr(module, clazz)})
+
+def get_scapy_module_impcmd():
+    cmd_li = list()
+    for m in scapy_modules_required:
+        if m in local_modules:
+            cmd_li.append(f'from {m} import {",".join(scapy_modules_required[m])}')
+        else:
+            cmd_li.append(f'from scapy.contirb.{m} import {",".join(scapy_modules_required[m])}')
+    return ';'.join(cmd_li)
+
+SCAPY_IMP_CMD = get_scapy_module_impcmd()
 
 # packet generator type should be configured later
 PACKETGEN = "scapy"
@@ -139,7 +158,7 @@ class scapy(object):
 
     def __init__(self):
         self.pkt = None
-        self.pkts = []
+        self.pkts = list()
 
     def append_pkts(self):
         self.pkts.append(self.pkt)
@@ -329,7 +348,7 @@ class scapy(object):
         pkt_layer.vni = vni
 
     def nsh(self, pkt_layer, ver=0, oam=0, critical=0, reserved=0, len=0, mdtype=1, nextproto=3,
-            nsp=0x0, nsi=1, npc= 0x0, nsc= 0x0, spc= 0x0, ssc= 0x0):
+            nsp=0x0, nsi=1, npc=0x0, nsc=0x0, spc=0x0, ssc=0x0):
         pkt_layer.Ver = ver
         pkt_layer.OAM = oam
         pkt_layer.Critical = critical
@@ -354,7 +373,6 @@ class scapy(object):
 
 
 class Packet(object):
-
     """
     Module for config/create packet
     Based on scapy module
@@ -469,8 +487,7 @@ class Packet(object):
         layer_li = [re.sub('\(.*?\)', '', i) for i in scapy_str.split('/')]
         self.pkt_type = '_'.join(layer_li)
         self._load_pkt_layers()
-        pkt = eval(scapy_str)
-        self.pktgen.assign_pkt(pkt)
+        self.pktgen.assign_pkt(scapy_str)
 
     def append_pkt(self, args=None, **kwargs):
         """
@@ -641,67 +658,58 @@ class Packet(object):
             self.pktgen.pkts.append(i)
         return p
 
-    def _send_pkt(self, crb, tx_port='', count=1, send_bg=False, loop=0, inter=0, timeout=15):
+    def send_pkt_bg_with_pcapfile(self, crb, tx_port='', count=1, loop=0, inter=0):
         """
-
+        send packet background with a pcap file, got an advantage in sending a large number of packets
         :param crb: session or crb object
         :param tx_port: ether to send packet
         :param count: send times
-        :param send_bg: send packet background
         :param loop: send packet in a loop
-        :param inter: interval time
-        :return: None
+        :param inter: interval time per packet
+        :return: send session
         """
-        # save pkts to local pcap file, then copy to remote tester tmp directory
-
-        time_stamp = str(time.time())
-        pcap_file = 'scapy_{}.pcap'.format(tx_port) + time_stamp
-        self.save_pcapfile(crb, pcap_file)
-        scapy_cmd = 'scapy_{}.cmd'.format(tx_port) + time_stamp
-        cmd_str = 'from scapy.all import *\np=rdpcap("%s")\nprint("packet ready for sending...")\nfor i in p:\n\tprint(i.command())\nsendp(p, iface="%s", count=%d, loop=%d, inter=%0.3f,  verbose=False)' % (
-            crb.tmp_file + pcap_file, tx_port, count, loop, inter)
-        # write send cmd file to local tmp directory then copy to remote tester tmp folder
-        with open(TMP_PATH + scapy_cmd, 'w') as f:
-            f.write(cmd_str)
-        crb.session.copy_file_to(TMP_PATH + scapy_cmd, crb.tmp_file)
-
-        if send_bg:  # if send_bg create a new session to execute send action
-            session_prefix = 'scapy_bg_session'
-            scapy_session = crb.create_session(session_prefix + time_stamp)
-            scapy_session.send_command('python3 %s' % crb.tmp_file + scapy_cmd)
+        if crb.name != 'tester':
+            raise Exception('crb should be tester')
+        wrpcap('_', self.pktgen.pkts)
+        file_path = '/tmp/%s.pcap' % tx_port
+        scapy_session_bg = crb.prepare_scapy_env()
+        scapy_session_bg.copy_file_to('_', file_path)
+        scapy_session_bg.send_expect('pkts = rdpcap("%s")' % file_path, '>>> ')
+        scapy_session_bg.send_command('sendp(pkts, iface="%s",count=%s,loop=%s,inter=%s)' % (tx_port, count, loop, inter))
+        return scapy_session_bg
+
+    def _recompose_pkts_str(self, pkts_str):
+        method_pattern = re.compile('<.+?>')
+        method_li = method_pattern.findall(pkts_str)
+        for i in method_li:
+            pkts_str = method_pattern.sub(i.strip('<>')+'()', pkts_str, count=1)
+        return pkts_str
+
+    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]) + ']'
+        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':
+            crb.scapy_session.send_expect(cmd, '>>> ', timeout=timeout)
+        elif crb.name.startswith("tester_scapy"):
+            crb.send_expect(cmd, '>>> ', timeout=timeout)
         else:
-            crb.send_expect('python3 %s' % crb.tmp_file + scapy_cmd, '# ', timeout=timeout)
-        return crb.tmp_file + scapy_cmd
-
-    def send_pkt(self, crb, tx_port='', count=1, interval=0, timeout=15):
-        self._send_pkt(crb, tx_port, count, inter=interval, timeout=timeout)
-
-    def send_pkt_bg(self, crb, tx_port='', count=-1, loop=1, interval=0, timeout=3):
-        return self._send_pkt(crb, tx_port=tx_port, count=count, send_bg=True, loop=loop, inter=interval,
-                              timeout=timeout)
-
-    def stop_send_pkt_bg(self, crb, filenames):
+            raise Exception("crb should be tester\'s session and initialized")
+
+    def send_pkt_bg(self, crb, tx_port='', count=-1, interval=0, loop=1):
+        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]) + ']'
+        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)
+        return scapy_session_bg
+
+    @staticmethod
+    def stop_send_pkt_bg(session):
         # stop sending action
-        pids = []
-        if isinstance(filenames, list):
-            for file in filenames:
-                out = crb.send_expect('ps -ef |grep %s|grep -v grep' % file, expected='# ')
-                try:
-                    pids.append(re.search('\d+', out).group())
-                except AttributeError as e:
-                    print((e, ' :%s not killed' % file))
-        else:
-            out = crb.send_expect('ps -ef |grep %s|grep -v grep' % filenames, expected='# ')
-            try:
-                pids.append(re.search('\d+', out).group())
-            except AttributeError as e:
-                print((e, ' :%s not killed' % filenames))
-        pid = ' '.join(pids)
-        if pid:
-            crb.send_expect('kill -9 %s' % pid, expected='# ')
-        for i in crb.sessions:
-            if i.name.startswith('scapy_bg_session'):
-                crb.destroy_session(i)
+        session.send_expect('^C', '>>> ')
 
     def check_layer_config(self):
         """
@@ -835,7 +843,8 @@ class Packet(object):
 
         if 'inner' in layer:
             layer = layer[6:]
-
+        if isinstance(self.pktgen.pkt, str):
+            raise Exception('string type packet not support config layer')
         pkt_layer = self.pktgen.pkt.getlayer(idx)
         layer_conf = getattr(self.pktgen, layer)
         setattr(self, 'configured_layer_%s' % layer, True)
@@ -1081,10 +1090,8 @@ def strip_pktload(pkt=None, layer="L2", p_index=0):
 ###############################################################################
 ###############################################################################
 if __name__ == "__main__":
-
     pkt = Packet('Ether(type=0x894f)/NSH(Len=0x6,NextProto=0x0,NSP=0x000002,NSI=0xff)')
     sendp(pkt, iface='lo')
-    pkt.config_layer('ipv4', {'dst': '192.168.8.8'})
     pkt.append_pkt(pkt_type='IPv6_TCP', pkt_len=100)
     pkt.append_pkt(pkt_type='TCP', pkt_len=100)
     pkt.config_layer('tcp', config={'flags': 'A'})
-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dts] [PATCH V1 4/7]framework/tester: prepare packet send session and update other packet related part
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
                   ` (2 preceding siblings ...)
  2020-09-08  3:26 ` [dts] [PATCH V1 3/7]framework/packet: update packet module for saving sending packet time Xiao Qimai
@ 2020-09-08  3:26 ` Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 5/7]tests/TestSuite_multiple_pthread: update argument for stop_send_pkt_bg method Xiao Qimai
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 framework/tester.py | 70 +++++++++++++++++++++++++++++++++++----------
 1 file changed, 55 insertions(+), 15 deletions(-)

diff --git a/framework/tester.py b/framework/tester.py
index f55818e3..ca179b28 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -46,9 +46,9 @@ import random
 from utils import GREEN, convert_int2ip, convert_ip2int
 from exception import ParameterInvalidException
 from multiprocessing import Process
-
 from pktgen import getPacketGenerator
 from config import PktgenConf
+from packet import SCAPY_IMP_CMD
 
 class Tester(Crb):
 
@@ -64,6 +64,7 @@ class Tester(Crb):
 
     def __init__(self, crb, serializer):
         self.NAME = 'tester'
+        self.scapy_session = None
         super(Tester, self).__init__(crb, serializer, self.NAME)
 
         self.bgProcIsRunning = False
@@ -75,11 +76,34 @@ class Tester(Crb):
         self.re_run_time = 0
         self.pktgen = None
         self.ixia_packet_gen = None
+        self.tmp_scapy_module_dir = '/tmp/dep'
+        # prepare for scapy env
+        self.scapy_sessions_li = list()
+        self.scapy_session = self.prepare_scapy_env()
         self.tmp_file = '/tmp/tester/'
         out = self.send_expect('ls -d %s' % self.tmp_file, '# ', verify=True)
         if out == 2:
             self.send_expect('mkdir -p %s' % self.tmp_file, '# ')
 
+    def prepare_scapy_env(self):
+        session_name = 'tester_scapy' if not self.scapy_sessions_li else f'tester_scapy_{random.random()}'
+        session = self.create_session(session_name)
+        self.scapy_sessions_li.append(session)
+        session.send_expect('scapy', '>>> ')
+        file_dir = os.path.dirname(__file__).split(os.path.sep)
+        lib_path = os.path.sep.join(file_dir[:-1]) + '/dep/scapy_modules/'
+        exists_flag = self.alt_session.session.send_expect(f'ls {self.tmp_scapy_module_dir}', '# ', verify=True)
+        if exists_flag == 2:
+            self.alt_session.session.send_expect(f'mkdir -p {self.tmp_scapy_module_dir}', '# ', verify=True)
+        scapy_modules_path = [lib_path+i for i in os.listdir(lib_path) if i.endswith('.py')]
+        path = ' '.join(scapy_modules_path)
+        session.copy_file_to(src=path, dst=self.tmp_scapy_module_dir)
+        session.session.send_expect(f"sys.path.append('{self.tmp_scapy_module_dir}')", ">>> ")
+
+        out = session.session.send_expect(SCAPY_IMP_CMD, '>>> ')
+        if 'ImportError' in out:
+            session.logger.warning(f'entering import error: {out}')
+        return session
 
     def init_ext_gen(self):
         """
@@ -688,7 +712,7 @@ class Tester(Crb):
         Callable function for parallel processes
         """
         print(GREEN("Transmitting and sniffing packets, please wait few minutes..."))
-        return pkt.send_pkt_bg(crb=self, tx_port=intf, count=send_times, loop=0, interval=interval)
+        return pkt.send_pkt_bg_with_pcapfile(crb=self, tx_port=intf, count=send_times, loop=0, inter=interval)
 
     def check_random_pkts(self, portList, pktnum=2000, interval=0.01, allow_miss=True, seq_check=False, params=None):
         """
@@ -716,22 +740,28 @@ class Tester(Crb):
             inst = module.start_tcpdump(self, rxIntf, count=pktnum,
                                         filters=[{'layer': 'network', 'config': {'srcport': '65535'}},
                                                  {'layer': 'network', 'config': {'dstport': '65535'}}])
-
             rx_inst[rxport] = inst
-        filenames = []
+        bg_sessions = list()
         for txport, _ in portList:
             txIntf = self.get_interface(txport)
-            filenames.append(self.parallel_transmit_ptks(pkt=tx_pkts[txport], intf=txIntf, send_times=1, interval=interval))
+            bg_sessions.append(self.parallel_transmit_ptks(pkt=tx_pkts[txport], intf=txIntf, send_times=1, interval=interval))
         # Verify all packets
         sleep(interval * pktnum + 1)
-        flag = True
-        while flag:
-            for i in filenames:
-                flag = self.send_expect('ps -ef |grep %s|grep -v grep' % i, expected='# ')
-                if flag:
+        timeout = 60
+        for i in bg_sessions:
+            while timeout:
+                try:
+                    i.send_expect('', '>>> ', timeout=1)
+                except Exception as e:
+                    print(e)
                     self.logger.info('wait for the completion of sending pkts...')
-                    sleep(1.5)
+                    timeout -= 1
                     continue
+                else:
+                    break
+            else:
+                self.logger.info('exceeded timeout, force to stop background packet sending to avoid dead loop')
+                pkt_c.stop_send_pkt_bg(i)
         prev_id = -1
         for txport, rxport in portList:
             p = module.stop_and_load_tcpdump_packets(rx_inst[rxport])
@@ -814,7 +844,9 @@ class Tester(Crb):
         Kill all scapy process or DPDK application on tester.
         """
         if not self.has_external_traffic_generator():
-            self.alt_session.send_expect('killall scapy 2>/dev/null; echo tester', '# ', 5)
+            out = self.session.send_command('')
+            if '>>>' in out:
+                self.session.send_expect('quit()', '# ', timeout=3)
         if killall:
             super(Tester, self).kill_all()
 
@@ -833,12 +865,20 @@ class Tester(Crb):
                 self.ixia_packet_gen.close()
                 self.ixia_packet_gen = None
 
-        if self.session:
-            self.session.close()
-            self.session = None
+        if self.scapy_sessions_li:
+            for i in self.scapy_sessions_li:
+                if i.session.isalive():
+                    i.session.send_expect("^c", ">>> ", timeout=2)
+                    i.session.send_expect("^d", "#", timeout=2)
+                    i.session.close()
+            self.scapy_sessions_li.clear()
+
         if self.alt_session:
             self.alt_session.close()
             self.alt_session = None
+        if self.session:
+            self.session.close()
+            self.session = None
 
     def crb_exit(self):
         """
-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dts] [PATCH V1 5/7]tests/TestSuite_multiple_pthread: update argument for stop_send_pkt_bg method
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
                   ` (3 preceding siblings ...)
  2020-09-08  3:26 ` [dts] [PATCH V1 4/7]framework/tester: prepare packet send session and update other packet related part Xiao Qimai
@ 2020-09-08  3:26 ` Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 6/7]tests/TestSuite_vf_packet_rxtx: " Xiao Qimai
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 tests/TestSuite_multiple_pthread.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/TestSuite_multiple_pthread.py b/tests/TestSuite_multiple_pthread.py
index 83ab7bd7..694993a6 100644
--- a/tests/TestSuite_multiple_pthread.py
+++ b/tests/TestSuite_multiple_pthread.py
@@ -229,7 +229,7 @@ class TestMultiplePthread(TestCase):
         Run after each test case.
         """
         if len(self.send_sessions) != 0:
-            self.pkt.stop_send_pkt_bg(self.tester, self.send_sessions)
+            self.pkt.stop_send_pkt_bg(self.send_sessions)
         self.dut.kill_all()
 
     def tear_down_all(self):
-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dts] [PATCH V1 6/7]tests/TestSuite_vf_packet_rxtx: update argument for stop_send_pkt_bg method
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
                   ` (4 preceding siblings ...)
  2020-09-08  3:26 ` [dts] [PATCH V1 5/7]tests/TestSuite_multiple_pthread: update argument for stop_send_pkt_bg method Xiao Qimai
@ 2020-09-08  3:26 ` Xiao Qimai
  2020-09-08  3:26 ` [dts] [PATCH V1 7/7]tests/TestSuite_vf_port_start_stop: " Xiao Qimai
  2020-09-08  7:26 ` [dts] [PATCH V1 0/7] update packet related modules Xiao, QimaiX
  7 siblings, 0 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 tests/TestSuite_vf_packet_rxtx.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/TestSuite_vf_packet_rxtx.py b/tests/TestSuite_vf_packet_rxtx.py
index a5963054..e8cdb112 100644
--- a/tests/TestSuite_vf_packet_rxtx.py
+++ b/tests/TestSuite_vf_packet_rxtx.py
@@ -287,7 +287,7 @@ class TestVfPacketRxtx(TestCase):
         dst_mac = pmd0_vf0_mac
         self.vm0_testpmd.execute_cmd('clear port stats all')
         pkt = Packet("Ether(dst='%s', src='%s')/IP(len=46)" % (dst_mac, self.tester.get_mac(tx_port)))
-        filename = pkt.send_pkt_bg(crb=self.tester, tx_port=self.tester.get_interface(tx_port), loop=1)
+        session_bg = pkt.send_pkt_bg(crb=self.tester, tx_port=self.tester.get_interface(tx_port), loop=1)
 
         #vf port stop/start can trigger reset action
         for num in range(1000):
@@ -296,7 +296,7 @@ class TestVfPacketRxtx(TestCase):
             self.vm1_testpmd.execute_cmd('port start all')
             time.sleep(0.1)
 
-        pkt.stop_send_pkt_bg(self.tester, filename)
+        pkt.stop_send_pkt_bg(session_bg)
 
         pmd0_vf0_stats = self.vm0_testpmd.get_pmd_stats(port_id_0)
         pmd0_vf1_stats = self.vm0_testpmd.get_pmd_stats(port_id_1)
-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dts] [PATCH V1 7/7]tests/TestSuite_vf_port_start_stop: update argument for stop_send_pkt_bg method
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
                   ` (5 preceding siblings ...)
  2020-09-08  3:26 ` [dts] [PATCH V1 6/7]tests/TestSuite_vf_packet_rxtx: " Xiao Qimai
@ 2020-09-08  3:26 ` Xiao Qimai
  2020-09-08  7:26 ` [dts] [PATCH V1 0/7] update packet related modules Xiao, QimaiX
  7 siblings, 0 replies; 11+ messages in thread
From: Xiao Qimai @ 2020-09-08  3:26 UTC (permalink / raw)
  To: dts; +Cc: Xiao Qimai

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 tests/TestSuite_vf_port_start_stop.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/TestSuite_vf_port_start_stop.py b/tests/TestSuite_vf_port_start_stop.py
index 933b1e2d..a55900c3 100644
--- a/tests/TestSuite_vf_port_start_stop.py
+++ b/tests/TestSuite_vf_port_start_stop.py
@@ -182,7 +182,7 @@ class TestVfPortStartStop(TestCase):
     def tear_down(self):
 
         if self.send_pks_session:
-            self.pkts.stop_send_pkt_bg(self.tester, self.send_pks_session)
+            self.pkts.stop_send_pkt_bg(self.send_pks_session)
         if self.setup_1pf_2vf_1vm_env_flag == 1:
             self.destroy_1pf_2vf_1vm_env()
 
-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [dts] [PATCH V1 0/7] update packet related modules
  2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
                   ` (6 preceding siblings ...)
  2020-09-08  3:26 ` [dts] [PATCH V1 7/7]tests/TestSuite_vf_port_start_stop: " Xiao Qimai
@ 2020-09-08  7:26 ` Xiao, QimaiX
  2020-09-10  8:21   ` Chen, Zhaoyan
  7 siblings, 1 reply; 11+ messages in thread
From: Xiao, QimaiX @ 2020-09-08  7:26 UTC (permalink / raw)
  To: dts

Tested-by: Xiao, Qimai <qimaix.xiao@intel.com>

Regards,
Xiao Qimai

> -----Original Message-----
> From: Xiao, QimaiX <qimaix.xiao@intel.com>
> Sent: Tuesday, September 8, 2020 11:27 AM
> To: dts@dpdk.org
> Cc: Xiao, QimaiX <qimaix.xiao@intel.com>
> Subject: [dts][PATCH V1 0/7] update packet related modules
> 
> *** BLURB HERE ***
> 
> Xiao Qimai (7):
>   mv scapy modules to new folder scapy_modules
>   add suite log for scapy session
>   update packet module for saving sending packet time
>   prepare packet send session and update other packet related part
>   update argument for stop_send_pkt_bg method
>   update argument for stop_send_pkt_bg method
>   update argument for stop_send_pkt_bg method
> 
>  dep/gtp_v2.py                         | 934 --------------------------
>  dep/{ => scapy_modules}/Dot1BR.py     |   2 +-
>  dep/{ => scapy_modules}/gtp.py        |  55 +-
>  dep/{ => scapy_modules}/igmp.py       |   0
>  dep/{ => scapy_modules}/lldp.py       |   2 +-
>  dep/{ => scapy_modules}/mpls.py       |   0
>  dep/{ => scapy_modules}/nsh.py        |   0
>  dep/{ => scapy_modules}/nvgre.py      |   6 +-
>  dep/{ => scapy_modules}/pfcp.py       |   0
>  dep/{ => scapy_modules}/vxlan.py      |   0
>  framework/dts.py                      |   4 +
>  framework/packet.py                   | 159 ++---
>  framework/tester.py                   |  70 +-
>  tests/TestSuite_multiple_pthread.py   |   2 +-
>  tests/TestSuite_vf_packet_rxtx.py     |   4 +-
>  tests/TestSuite_vf_port_start_stop.py |   2 +-
>  16 files changed, 197 insertions(+), 1043 deletions(-)  delete mode 100644
> dep/gtp_v2.py  rename dep/{ => scapy_modules}/Dot1BR.py (98%)  rename
> dep/{ => scapy_modules}/gtp.py (94%)  rename dep/{ =>
> scapy_modules}/igmp.py (100%)  rename dep/{ => scapy_modules}/lldp.py
> (99%)  rename dep/{ => scapy_modules}/mpls.py (100%)  rename dep/{ =>
> scapy_modules}/nsh.py (100%)  rename dep/{ => scapy_modules}/nvgre.py
> (90%)  rename dep/{ => scapy_modules}/pfcp.py (100%)  rename dep/{ =>
> scapy_modules}/vxlan.py (100%)
> 
> --
> 2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [dts] [PATCH V1 0/7] update packet related modules
  2020-09-08  7:26 ` [dts] [PATCH V1 0/7] update packet related modules Xiao, QimaiX
@ 2020-09-10  8:21   ` Chen, Zhaoyan
  2020-09-15  8:25     ` Tu, Lijuan
  0 siblings, 1 reply; 11+ messages in thread
From: Chen, Zhaoyan @ 2020-09-10  8:21 UTC (permalink / raw)
  To: Xiao, QimaiX, dts; +Cc: Chen, Zhaoyan

Acked-by: Zhaoyan Chen <zhaoyan.chen@intel.com>



Regards,
Zhaoyan Chen

> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Xiao, QimaiX
> Sent: Tuesday, September 8, 2020 3:26 PM
> To: dts@dpdk.org
> Subject: Re: [dts] [PATCH V1 0/7] update packet related modules
> 
> Tested-by: Xiao, Qimai <qimaix.xiao@intel.com>
> 
> Regards,
> Xiao Qimai
> 
> > -----Original Message-----
> > From: Xiao, QimaiX <qimaix.xiao@intel.com>
> > Sent: Tuesday, September 8, 2020 11:27 AM
> > To: dts@dpdk.org
> > Cc: Xiao, QimaiX <qimaix.xiao@intel.com>
> > Subject: [dts][PATCH V1 0/7] update packet related modules
> >
> > *** BLURB HERE ***
> >
> > Xiao Qimai (7):
> >   mv scapy modules to new folder scapy_modules
> >   add suite log for scapy session
> >   update packet module for saving sending packet time
> >   prepare packet send session and update other packet related part
> >   update argument for stop_send_pkt_bg method
> >   update argument for stop_send_pkt_bg method
> >   update argument for stop_send_pkt_bg method
> >
> >  dep/gtp_v2.py                         | 934 --------------------------
> >  dep/{ => scapy_modules}/Dot1BR.py     |   2 +-
> >  dep/{ => scapy_modules}/gtp.py        |  55 +-
> >  dep/{ => scapy_modules}/igmp.py       |   0
> >  dep/{ => scapy_modules}/lldp.py       |   2 +-
> >  dep/{ => scapy_modules}/mpls.py       |   0
> >  dep/{ => scapy_modules}/nsh.py        |   0
> >  dep/{ => scapy_modules}/nvgre.py      |   6 +-
> >  dep/{ => scapy_modules}/pfcp.py       |   0
> >  dep/{ => scapy_modules}/vxlan.py      |   0
> >  framework/dts.py                      |   4 +
> >  framework/packet.py                   | 159 ++---
> >  framework/tester.py                   |  70 +-
> >  tests/TestSuite_multiple_pthread.py   |   2 +-
> >  tests/TestSuite_vf_packet_rxtx.py     |   4 +-
> >  tests/TestSuite_vf_port_start_stop.py |   2 +-
> >  16 files changed, 197 insertions(+), 1043 deletions(-)  delete mode
> > 100644 dep/gtp_v2.py  rename dep/{ => scapy_modules}/Dot1BR.py (98%)
> > rename dep/{ => scapy_modules}/gtp.py (94%)  rename dep/{ =>
> > scapy_modules}/igmp.py (100%)  rename dep/{ => scapy_modules}/lldp.py
> > (99%)  rename dep/{ => scapy_modules}/mpls.py (100%)  rename dep/{ =>
> > scapy_modules}/nsh.py (100%)  rename dep/{ => scapy_modules}/nvgre.py
> > (90%)  rename dep/{ => scapy_modules}/pfcp.py (100%)  rename dep/{ =>
> > scapy_modules}/vxlan.py (100%)
> >
> > --
> > 2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [dts] [PATCH V1 0/7] update packet related modules
  2020-09-10  8:21   ` Chen, Zhaoyan
@ 2020-09-15  8:25     ` Tu, Lijuan
  0 siblings, 0 replies; 11+ messages in thread
From: Tu, Lijuan @ 2020-09-15  8:25 UTC (permalink / raw)
  To: Chen, Zhaoyan, Xiao, QimaiX, dts; +Cc: Chen, Zhaoyan

> > > Subject: [dts][PATCH V1 0/7] update packet related modules
> > >
> > > *** BLURB HERE ***
> > >
> > > Xiao Qimai (7):
> > >   mv scapy modules to new folder scapy_modules
> > >   add suite log for scapy session
> > >   update packet module for saving sending packet time
> > >   prepare packet send session and update other packet related part
> > >   update argument for stop_send_pkt_bg method
> > >   update argument for stop_send_pkt_bg method
> > >   update argument for stop_send_pkt_bg method
> >
> > Tested-by: Xiao, Qimai <qimaix.xiao@intel.com>
>
> Acked-by: Zhaoyan Chen <zhaoyan.chen@intel.com>

Applied

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2020-09-15  8:26 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-08  3:26 [dts] [PATCH V1 0/7] update packet related modules Xiao Qimai
2020-09-08  3:26 ` [dts] [PATCH V1 1/7]dep: mv scapy modules to new folder scapy_modules Xiao Qimai
2020-09-08  3:26 ` [dts] [PATCH V1 2/7]framework/dts: add suite log for scapy session Xiao Qimai
2020-09-08  3:26 ` [dts] [PATCH V1 3/7]framework/packet: update packet module for saving sending packet time Xiao Qimai
2020-09-08  3:26 ` [dts] [PATCH V1 4/7]framework/tester: prepare packet send session and update other packet related part Xiao Qimai
2020-09-08  3:26 ` [dts] [PATCH V1 5/7]tests/TestSuite_multiple_pthread: update argument for stop_send_pkt_bg method Xiao Qimai
2020-09-08  3:26 ` [dts] [PATCH V1 6/7]tests/TestSuite_vf_packet_rxtx: " Xiao Qimai
2020-09-08  3:26 ` [dts] [PATCH V1 7/7]tests/TestSuite_vf_port_start_stop: " Xiao Qimai
2020-09-08  7:26 ` [dts] [PATCH V1 0/7] update packet related modules Xiao, QimaiX
2020-09-10  8:21   ` Chen, Zhaoyan
2020-09-15  8:25     ` Tu, Lijuan

test suite reviews and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.dpdk.org/dts/0 dts/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dts dts/ http://inbox.dpdk.org/dts \
		dts@dpdk.org
	public-inbox-index dts

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dts


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git