get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/82694/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 82694,
    "url": "http://patches.dpdk.org/api/patches/82694/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/1603921655-27071-3-git-send-email-lihongx.ma@intel.com/",
    "project": {
        "id": 3,
        "url": "http://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<1603921655-27071-3-git-send-email-lihongx.ma@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/1603921655-27071-3-git-send-email-lihongx.ma@intel.com",
    "date": "2020-10-28T21:47:34",
    "name": "[V1,2/3] dep: remove local scapy module gtp",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "77b1f76ef8ede114c70dbb4cc0c75932d7565b8d",
    "submitter": {
        "id": 1641,
        "url": "http://patches.dpdk.org/api/people/1641/?format=api",
        "name": "Ma, LihongX",
        "email": "lihongx.ma@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dts/patch/1603921655-27071-3-git-send-email-lihongx.ma@intel.com/mbox/",
    "series": [
        {
            "id": 13441,
            "url": "http://patches.dpdk.org/api/series/13441/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=13441",
            "date": "2020-10-28T21:47:32",
            "name": "use scapy gtp instead of local gtp",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/13441/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/82694/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/82694/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dts-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 28C05A04B5;\n\tThu, 29 Oct 2020 06:22:27 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 1DDD272E3;\n\tThu, 29 Oct 2020 06:22:26 +0100 (CET)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n by dpdk.org (Postfix) with ESMTP id 2CD6D72E7\n for <dts@dpdk.org>; Thu, 29 Oct 2020 06:22:22 +0100 (CET)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 28 Oct 2020 22:22:21 -0700",
            "from dpdk-lihong-ub1604.sh.intel.com ([10.67.118.174])\n by fmsmga004.fm.intel.com with ESMTP; 28 Oct 2020 22:22:20 -0700"
        ],
        "IronPort-SDR": [
            "\n nSr6hjAZhrfgTepcroALWLdicWi5UpYg0dE9EzwHkABBaLuX5arzqO1fatWwA0VWjP2sWW6fqg\n FkyyADvnzu+Q==",
            "\n llz6SGuvazhLNAsxmPRoNNI0HuRfXJQzbIlLBFh06ecVe/AgoJGPIHnrrudiFrzEE1kfVhOHRb\n iA9HAL89YNFg=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9788\"; a=\"165791744\"",
            "E=Sophos;i=\"5.77,429,1596524400\"; d=\"scan'208\";a=\"165791744\"",
            "E=Sophos;i=\"5.77,429,1596524400\"; d=\"scan'208\";a=\"351290890\""
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "LihongX Ma <lihongx.ma@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "LihongX Ma <lihongx.ma@intel.com>",
        "Date": "Thu, 29 Oct 2020 05:47:34 +0800",
        "Message-Id": "<1603921655-27071-3-git-send-email-lihongx.ma@intel.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1603921655-27071-1-git-send-email-lihongx.ma@intel.com>",
        "References": "<1603921655-27071-1-git-send-email-lihongx.ma@intel.com>",
        "Subject": "[dts] [PATCH V1 2/3] dep: remove local scapy module gtp",
        "X-BeenThere": "dts@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "test suite reviews and discussions <dts.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dts/>",
        "List-Post": "<mailto:dts@dpdk.org>",
        "List-Help": "<mailto:dts-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dts-bounces@dpdk.org",
        "Sender": "\"dts\" <dts-bounces@dpdk.org>"
    },
    "content": "use scapy module gtp instead of local gtp module\n\nSigned-off-by: LihongX Ma <lihongx.ma@intel.com>\n---\n dep/scapy_modules/gtp.py | 944 -----------------------------------------------\n 1 file changed, 944 deletions(-)\n delete mode 100644 dep/scapy_modules/gtp.py",
    "diff": "diff --git a/dep/scapy_modules/gtp.py b/dep/scapy_modules/gtp.py\ndeleted file mode 100644\nindex df101c6..0000000\n--- a/dep/scapy_modules/gtp.py\n+++ /dev/null\n@@ -1,944 +0,0 @@\n-#! /usr/bin/env python\n-\n-# Copyright (C) 2018 Leonardo Monteiro <decastromonteiro@gmail.com>\n-#               2017 Alexis Sultan    <alexis.sultan@sfr.com>\n-#               2017 Alessio Deiana <adeiana@gmail.com>\n-#               2014 Guillaume Valadon <guillaume.valadon@ssi.gouv.fr>\n-#               2012 ffranz <ffranz@iniqua.com>\n-##\n-# This program is published under a GPLv2 license\n-\n-# scapy.contrib.description = GPRS Tunneling Protocol (GTP)\n-# scapy.contrib.status = loads\n-\n-from __future__ import absolute_import\n-import struct\n-\n-\n-from scapy.compat import chb, orb\n-from scapy.error import warning\n-from scapy.fields import BitEnumField, BitField, ByteEnumField, ByteField, \\\n-    ConditionalField, FieldLenField, FieldListField, FlagsField, IntField, \\\n-    IPField, PacketListField, ShortField, StrFixedLenField, StrLenField, \\\n-    XBitField, XByteField, XIntField\n-from scapy.layers.inet import IP, UDP\n-from scapy.layers.inet6 import IPv6, IP6Field\n-from scapy.layers.ppp import PPP\n-from scapy.modules.six.moves import range\n-from scapy.packet import bind_layers, bind_bottom_up, bind_top_down, \\\n-    Packet, Raw\n-from scapy.volatile import RandInt, RandIP, RandNum, RandString\n-\n-\n-# GTP Data types\n-\n-RATType = {\n-    1: \"UTRAN\",\n-    2: \"GETRAN\",\n-    3: \"WLAN\",\n-    4: \"GAN\",\n-    5: \"HSPA\"\n-}\n-\n-GTPmessageType = {1: \"echo_request\",\n-                  2: \"echo_response\",\n-                  16: \"create_pdp_context_req\",\n-                  17: \"create_pdp_context_res\",\n-                  18: \"update_pdp_context_req\",\n-                  19: \"update_pdp_context_resp\",\n-                  20: \"delete_pdp_context_req\",\n-                  21: \"delete_pdp_context_res\",\n-                  26: \"error_indication\",\n-                  27: \"pdu_notification_req\",\n-                  31: \"supported_extension_headers_notification\",\n-                  254: \"end_marker\",\n-                  255: \"g_pdu\"}\n-\n-IEType = {1: \"Cause\",\n-             2: \"IMSI\",\n-             3: \"RAI\",\n-             4: \"TLLI\",\n-             5: \"P_TMSI\",\n-             8: \"IE_ReorderingRequired\",\n-          14: \"Recovery\",\n-          15: \"SelectionMode\",\n-          16: \"TEIDI\",\n-          17: \"TEICP\",\n-          19: \"TeardownInd\",\n-          20: \"NSAPI\",\n-          26: \"ChargingChrt\",\n-          27: \"TraceReference\",\n-          28: \"TraceType\",\n-          127: \"ChargingId\",\n-          128: \"EndUserAddress\",\n-          131: \"AccessPointName\",\n-          132: \"ProtocolConfigurationOptions\",\n-          133: \"GSNAddress\",\n-          134: \"MSInternationalNumber\",\n-          135: \"QoS\",\n-          148: \"CommonFlags\",\n-          149: \"APNRestriction\",\n-          151: \"RatType\",\n-          152: \"UserLocationInformation\",\n-          153: \"MSTimeZone\",\n-          154: \"IMEI\",\n-          181: \"MSInfoChangeReportingAction\",\n-          184: \"BearerControlMode\",\n-          191: \"EvolvedAllocationRetentionPriority\",\n-          255: \"PrivateExtention\"}\n-\n-CauseValues = {0: \"Request IMSI\",\n-               1: \"Request IMEI\",\n-               2: \"Request IMSI and IMEI\",\n-               3: \"No identity needed\",\n-               4: \"MS Refuses\",\n-               5: \"MS is not GPRS Responding\",\n-               128: \"Request accepted\",\n-               129: \"New PDP type due to network preference\",\n-               130: \"New PDP type due to single address bearer only\",\n-               192: \"Non-existent\",\n-               193: \"Invalid message format\",\n-               194: \"IMSI not known\",\n-               195: \"MS is GPRS Detached\",\n-               196: \"MS is not GPRS Responding\",\n-               197: \"MS Refuses\",\n-               198: \"Version not supported\",\n-               199: \"No resources available\",\n-               200: \"Service not supported\",\n-               201: \"Mandatory IE incorrect\",\n-               202: \"Mandatory IE missing\",\n-               203: \"Optional IE incorrect\",\n-               204: \"System failure\",\n-               205: \"Roaming restriction\",\n-               206: \"P-TMSI Signature mismatch\",\n-               207: \"GPRS connection suspended\",\n-               208: \"Authentication failure\",\n-               209: \"User authentication failed\",\n-               210: \"Context not found\",\n-               211: \"All dynamic PDP addresses are occupied\",\n-               212: \"No memory is available\",\n-               213: \"Reallocation failure\",\n-               214: \"Unknown mandatory extension header\",\n-               215: \"Semantic error in the TFT operation\",\n-               216: \"Syntactic error in TFT operation\",\n-               217: \"Semantic errors in packet filter(s)\",\n-               218: \"Syntactic errors in packet filter(s)\",\n-               219: \"Missing or unknown APN\",\n-               220: \"Unknown PDP address or PDP type\",\n-               221: \"PDP context without TFT already activated\",\n-               222: \"APN access denied : no subscription\",\n-               223: \"APN Restriction type incompatibility with currently active PDP Contexts\",  # noqa: E501\n-               224: \"MS MBMS Capabilities Insufficient\",\n-               225: \"Invalid Correlation : ID\",\n-               226: \"MBMS Bearer Context Superseded\",\n-               227: \"Bearer Control Mode violation\",\n-               228: \"Collision with network initiated request\"}\n-\n-Selection_Mode = {11111100: \"MS or APN\",\n-                  11111101: \"MS\",\n-                  11111110: \"NET\",\n-                  11111111: \"FutureUse\"}\n-\n-TrueFalse_value = {254: \"False\",\n-                   255: \"True\"}\n-\n-# http://www.arib.or.jp/IMT-2000/V720Mar09/5_Appendix/Rel8/29/29281-800.pdf\n-ExtensionHeadersTypes = {\n-    0: \"No more extension headers\",\n-    1: \"Reserved\",\n-    2: \"Reserved\",\n-    64: \"UDP Port\",\n-    133: \"PDU Session Container\",\n-    192: \"PDCP PDU Number\",\n-    193: \"Reserved\",\n-    194: \"Reserved\"\n-}\n-\n-\n-class TBCDByteField(StrFixedLenField):\n-\n-    def i2h(self, pkt, val):\n-        return val\n-\n-    def m2i(self, pkt, val):\n-        ret = []\n-        for v in val:\n-            byte = orb(v)\n-            left = byte >> 4\n-            right = byte & 0xf\n-            if left == 0xf:\n-                ret.append(TBCD_TO_ASCII[right:right + 1])\n-            else:\n-                ret += [TBCD_TO_ASCII[right:right + 1], TBCD_TO_ASCII[left:left + 1]]  # noqa: E501\n-        return b\"\".join(ret)\n-\n-    def i2m(self, pkt, val):\n-        val = str(val)\n-        ret_string = \"\"\n-        for i in range(0, len(val), 2):\n-            tmp = val[i:i + 2]\n-            if len(tmp) == 2:\n-                ret_string += chr(int(tmp[1] + tmp[0], 16))\n-            else:\n-                ret_string += chr(int(\"F\" + tmp[0], 16))\n-        return ret_string\n-\n-\n-TBCD_TO_ASCII = b\"0123456789*#abc\"\n-\n-\n-class GTP_ExtensionHeader(Packet):\n-    @classmethod\n-    def dispatch_hook(cls, _pkt=None, *args, **kargs):\n-        if _pkt is None:\n-            return GTP_UDPPort_ExtensionHeader\n-        return cls\n-\n-\n-class GTP_UDPPort_ExtensionHeader(GTP_ExtensionHeader):\n-    fields_desc = [ByteField(\"length\", 0x40),\n-                   ShortField(\"udp_port\", None),\n-                   ByteEnumField(\"next_ex\", 0, ExtensionHeadersTypes), ]\n-\n-\n-class GTP_PDUSession_ExtensionHeader(GTP_ExtensionHeader):\n-    fields_desc = [ByteField(\"length\", 0x02),\n-                   BitField(\"pdu_type\", 0, 4),\n-                   BitField(\"spare0\", 0, 4),\n-                   BitField(\"ppp\", 0, 1),\n-                   BitField(\"rqi\", 0, 1),\n-                   BitField(\"qos_flow\", 0, 6),\n-                   BitField(\"ppi\", 0, 3),\n-                   BitField(\"spare1\", 0, 5),\n-                   BitField(\"reserved\", 0, 24),\n-                   ByteEnumField(\"next_ex\", 0, ExtensionHeadersTypes), ]\n-\n-\n-class GTP_PDCP_PDU_ExtensionHeader(GTP_ExtensionHeader):\n-    fields_desc = [ByteField(\"length\", 0x01),\n-                   ShortField(\"pdcp_pdu\", None),\n-                   ByteEnumField(\"next_ex\", 0, ExtensionHeadersTypes), ]\n-\n-\n-class GTPHeader(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP-C Header\"\n-    fields_desc = [BitField(\"version\", 1, 3),\n-                   BitField(\"PT\", 1, 1),\n-                   BitField(\"reserved\", 0, 1),\n-                   BitField(\"E\", 0, 1),\n-                   BitField(\"S\", 0, 1),\n-                   BitField(\"PN\", 0, 1),\n-                   ByteEnumField(\"gtp_type\", None, GTPmessageType),\n-                   ShortField(\"length\", None),\n-                   IntField(\"teid\", 0),\n-                   ConditionalField(XBitField(\"seq\", 0, 16), lambda pkt:pkt.E == 1 or pkt.S == 1 or pkt.PN == 1),  # noqa: E501\n-                   ConditionalField(ByteField(\"npdu\", 0), lambda pkt:pkt.E == 1 or pkt.S == 1 or pkt.PN == 1),  # noqa: E501\n-                   ConditionalField(ByteEnumField(\"next_ex\", 0, ExtensionHeadersTypes), lambda pkt:pkt.E == 1 or pkt.S == 1 or pkt.PN == 1), ]  # noqa: E501\n-\n-    def post_build(self, p, pay):\n-        p += pay\n-        if self.length is None:\n-            tmp_len = len(p) - 8\n-            p = p[:2] + struct.pack(\"!H\", tmp_len) + p[4:]\n-        return p\n-\n-    def hashret(self):\n-        return struct.pack(\"B\", self.version) + self.payload.hashret()\n-\n-    def answers(self, other):\n-        return (isinstance(other, GTPHeader) and\n-                self.version == other.version and\n-                self.payload.answers(other.payload))\n-\n-    @classmethod\n-    def dispatch_hook(cls, _pkt=None, *args, **kargs):\n-        if _pkt and len(_pkt) >= 1:\n-            if (orb(_pkt[0]) >> 5) & 0x7 == 2:\n-                from . import gtp_v2\n-                return gtp_v2.GTPHeader\n-        if _pkt and len(_pkt) >= 8:\n-            _gtp_type = orb(_pkt[1:2])\n-            return GTPforcedTypes.get(_gtp_type, GTPHeader)\n-        return cls\n-\n-\n-class GTP_U_Header(GTPHeader):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP-U Header\"\n-    # GTP-U protocol is used to transmit T-PDUs between GSN pairs (or between an SGSN and an RNC in UMTS),  # noqa: E501\n-    # encapsulated in G-PDUs. A G-PDU is a packet including a GTP-U header and a T-PDU. The Path Protocol  # noqa: E501\n-    # defines the path and the GTP-U header defines the tunnel. Several tunnels may be multiplexed on a single path.  # noqa: E501\n-\n-    def guess_payload_class(self, payload):\n-        # Snooped from Wireshark\n-        # https://github.com/boundary/wireshark/blob/07eade8124fd1d5386161591b52e177ee6ea849f/epan/dissectors/packet-gtp.c#L8195  # noqa: E501\n-        if self.gtp_type == 255:\n-            sub_proto = orb(payload[0])\n-            if sub_proto >= 0x45 and sub_proto <= 0x4e:\n-                return IP\n-            elif (sub_proto & 0xf0) == 0x60:\n-                return IPv6\n-            else:\n-                return PPP\n-        return GTPHeader.guess_payload_class(self, payload)\n-\n-\n-# Some gtp_types have to be associated with a certain type of header\n-GTPforcedTypes = {\n-    16: GTPHeader,\n-    17: GTPHeader,\n-    18: GTPHeader,\n-    19: GTPHeader,\n-    20: GTPHeader,\n-    21: GTPHeader,\n-    26: GTP_U_Header,\n-    27: GTPHeader,\n-    254: GTP_U_Header,\n-    255: GTP_U_Header\n-}\n-\n-\n-class GTPEchoRequest(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Echo Request\"\n-\n-    def hashret(self):\n-        return struct.pack(\"H\", self.seq)\n-\n-\n-class IE_Base(Packet):\n-\n-    def extract_padding(self, pkt):\n-        return \"\", pkt\n-\n-\n-class IE_Cause(IE_Base):\n-    name = \"Cause\"\n-    fields_desc = [ByteEnumField(\"ietype\", 1, IEType),\n-                   ByteEnumField(\"CauseValue\", None, CauseValues)]\n-\n-\n-class IE_IMSI(IE_Base):\n-    name = \"IMSI - Subscriber identity of the MS\"\n-    fields_desc = [ByteEnumField(\"ietype\", 2, IEType),\n-                   TBCDByteField(\"imsi\", str(RandNum(0, 999999999999999)), 8)]\n-\n-\n-class IE_Routing(IE_Base):\n-    name = \"Routing Area Identity\"\n-    fields_desc = [ByteEnumField(\"ietype\", 3, IEType),\n-                   TBCDByteField(\"MCC\", \"\", 2),\n-                   # MNC: if the third digit of MCC is 0xf,\n-                   # then the length of MNC is 1 byte\n-                   TBCDByteField(\"MNC\", \"\", 1),\n-                   ShortField(\"LAC\", None),\n-                   ByteField(\"RAC\", None)]\n-\n-\n-class IE_ReorderingRequired(IE_Base):\n-    name = \"Recovery\"\n-    fields_desc = [ByteEnumField(\"ietype\", 8, IEType),\n-                   ByteEnumField(\"reordering_required\", 254, TrueFalse_value)]\n-\n-\n-class IE_Recovery(IE_Base):\n-    name = \"Recovery\"\n-    fields_desc = [ByteEnumField(\"ietype\", 14, IEType),\n-                   ByteField(\"restart_counter\", 24)]\n-\n-\n-class IE_SelectionMode(IE_Base):\n-    # Indicates the origin of the APN in the message\n-    name = \"Selection Mode\"\n-    fields_desc = [ByteEnumField(\"ietype\", 15, IEType),\n-                   BitEnumField(\"SelectionMode\", \"MS or APN\",\n-                                8, Selection_Mode)]\n-\n-\n-class IE_TEIDI(IE_Base):\n-    name = \"Tunnel Endpoint Identifier Data\"\n-    fields_desc = [ByteEnumField(\"ietype\", 16, IEType),\n-                   XIntField(\"TEIDI\", RandInt())]\n-\n-\n-class IE_TEICP(IE_Base):\n-    name = \"Tunnel Endpoint Identifier Control Plane\"\n-    fields_desc = [ByteEnumField(\"ietype\", 17, IEType),\n-                   XIntField(\"TEICI\", RandInt())]\n-\n-\n-class IE_Teardown(IE_Base):\n-    name = \"Teardown Indicator\"\n-    fields_desc = [ByteEnumField(\"ietype\", 19, IEType),\n-                   ByteEnumField(\"indicator\", \"True\", TrueFalse_value)]\n-\n-\n-class IE_NSAPI(IE_Base):\n-    # Identifies a PDP context in a mobility management context specified by TEICP  # noqa: E501\n-    name = \"NSAPI\"\n-    fields_desc = [ByteEnumField(\"ietype\", 20, IEType),\n-                   XBitField(\"sparebits\", 0x0000, 4),\n-                   XBitField(\"NSAPI\", RandNum(0, 15), 4)]\n-\n-\n-class IE_ChargingCharacteristics(IE_Base):\n-    # Way of informing both the SGSN and GGSN of the rules for\n-    name = \"Charging Characteristics\"\n-    fields_desc = [ByteEnumField(\"ietype\", 26, IEType),\n-                   # producing charging information based on operator configured triggers.  # noqa: E501\n-                   #    0000 .... .... .... : spare\n-                   #    .... 1... .... .... : normal charging\n-                   #    .... .0.. .... .... : prepaid charging\n-                   #    .... ..0. .... .... : flat rate charging\n-                   #    .... ...0 .... .... : hot billing charging\n-                   #    .... .... 0000 0000 : reserved\n-                   XBitField(\"Ch_ChSpare\", None, 4),\n-                   XBitField(\"normal_charging\", None, 1),\n-                   XBitField(\"prepaid_charging\", None, 1),\n-                   XBitField(\"flat_rate_charging\", None, 1),\n-                   XBitField(\"hot_billing_charging\", None, 1),\n-                   XBitField(\"Ch_ChReserved\", 0, 8)]\n-\n-\n-class IE_TraceReference(IE_Base):\n-    # Identifies a record or a collection of records for a particular trace.\n-    name = \"Trace Reference\"\n-    fields_desc = [ByteEnumField(\"ietype\", 27, IEType),\n-                   XBitField(\"Trace_reference\", None, 16)]\n-\n-\n-class IE_TraceType(IE_Base):\n-    # Indicates the type of the trace\n-    name = \"Trace Type\"\n-    fields_desc = [ByteEnumField(\"ietype\", 28, IEType),\n-                   XBitField(\"Trace_type\", None, 16)]\n-\n-\n-class IE_ChargingId(IE_Base):\n-    name = \"Charging ID\"\n-    fields_desc = [ByteEnumField(\"ietype\", 127, IEType),\n-                   XIntField(\"Charging_id\", RandInt())]\n-\n-\n-class IE_EndUserAddress(IE_Base):\n-    # Supply protocol specific information of the external packet\n-    name = \"End User Address\"\n-    fields_desc = [ByteEnumField(\"ietype\", 128, IEType),\n-                   #         data network accessed by the GGPRS subscribers.\n-                   #            - Request\n-                   #                1    Type (1byte)\n-                   #                2-3    Length (2bytes) - value 2\n-                   #                4    Spare + PDP Type Organization\n-                   #                5    PDP Type Number\n-                   #            - Response\n-                   #                6-n    PDP Address\n-                   ShortField(\"length\", 2),\n-                   BitField(\"SPARE\", 15, 4),\n-                   BitField(\"PDPTypeOrganization\", 1, 4),\n-                   XByteField(\"PDPTypeNumber\", None),\n-                   ConditionalField(IPField(\"PDPAddress\", RandIP()),\n-                                    lambda pkt: pkt.length == 6 or pkt.length == 22),  # noqa: E501\n-                   ConditionalField(IP6Field(\"IPv6_PDPAddress\", '::1'),\n-                                    lambda pkt: pkt.length == 18 or pkt.length == 22)]  # noqa: E501\n-\n-\n-class APNStrLenField(StrLenField):\n-    # Inspired by DNSStrField\n-    def m2i(self, pkt, s):\n-        ret_s = b\"\"\n-        tmp_s = s\n-        while tmp_s:\n-            tmp_len = orb(tmp_s[0]) + 1\n-            if tmp_len > len(tmp_s):\n-                warning(\"APN prematured end of character-string (size=%i, remaining bytes=%i)\" % (tmp_len, len(tmp_s)))  # noqa: E501\n-            ret_s += tmp_s[1:tmp_len]\n-            tmp_s = tmp_s[tmp_len:]\n-            if len(tmp_s):\n-                ret_s += b\".\"\n-        s = ret_s\n-        return s\n-\n-    def i2m(self, pkt, s):\n-        s = b\"\".join(chb(len(x)) + x for x in s.split(\".\"))\n-        return s\n-\n-\n-class IE_AccessPointName(IE_Base):\n-    # Sent by SGSN or by GGSN as defined in 3GPP TS 23.060\n-    name = \"Access Point Name\"\n-    fields_desc = [ByteEnumField(\"ietype\", 131, IEType),\n-                   ShortField(\"length\", None),\n-                   APNStrLenField(\"APN\", \"nternet\", length_from=lambda x: x.length)]  # noqa: E501\n-\n-    def post_build(self, p, pay):\n-        if self.length is None:\n-            tmp_len = len(p) - 3\n-            p = p[:2] + struct.pack(\"!B\", tmp_len) + p[3:]\n-        return p\n-\n-\n-class IE_ProtocolConfigurationOptions(IE_Base):\n-    name = \"Protocol Configuration Options\"\n-    fields_desc = [ByteEnumField(\"ietype\", 132, IEType),\n-                   ShortField(\"length\", 4),\n-                   StrLenField(\"Protocol_Configuration\", \"\",\n-                               length_from=lambda x: x.length)]\n-\n-\n-class IE_GSNAddress(IE_Base):\n-    name = \"GSN Address\"\n-    fields_desc = [ByteEnumField(\"ietype\", 133, IEType),\n-                   ShortField(\"length\", 4),\n-                   IPField(\"address\", RandIP())]\n-\n-\n-class IE_MSInternationalNumber(IE_Base):\n-    name = \"MS International Number\"\n-    fields_desc = [ByteEnumField(\"ietype\", 134, IEType),\n-                   ShortField(\"length\", None),\n-                   FlagsField(\"flags\", 0x91, 8, [\"Extension\", \"\", \"\", \"International Number\", \"\", \"\", \"\", \"ISDN numbering\"]),  # noqa: E501\n-                   TBCDByteField(\"digits\", \"33607080910\", length_from=lambda x: x.length - 1)]  # noqa: E501\n-\n-\n-class QoS_Profile(IE_Base):\n-    name = \"QoS profile\"\n-    fields_desc = [ByteField(\"qos_ei\", 0),\n-                   ByteField(\"length\", None),\n-                   XBitField(\"spare\", 0x00, 2),\n-                   XBitField(\"delay_class\", 0x000, 3),\n-                   XBitField(\"reliability_class\", 0x000, 3),\n-                   XBitField(\"peak_troughput\", 0x0000, 4),\n-                   BitField(\"spare\", 0, 1),\n-                   XBitField(\"precedence_class\", 0x000, 3),\n-                   XBitField(\"spare\", 0x000, 3),\n-                   XBitField(\"mean_troughput\", 0x00000, 5),\n-                   XBitField(\"traffic_class\", 0x000, 3),\n-                   XBitField(\"delivery_order\", 0x00, 2),\n-                   XBitField(\"delivery_of_err_sdu\", 0x000, 3),\n-                   ByteField(\"max_sdu_size\", None),\n-                   ByteField(\"max_bitrate_up\", None),\n-                   ByteField(\"max_bitrate_down\", None),\n-                   XBitField(\"redidual_ber\", 0x0000, 4),\n-                   XBitField(\"sdu_err_ratio\", 0x0000, 4),\n-                   XBitField(\"transfer_delay\", 0x00000, 5),\n-                   XBitField(\"traffic_handling_prio\", 0x000, 3),\n-                   ByteField(\"guaranteed_bit_rate_up\", None),\n-                   ByteField(\"guaranteed_bit_rate_down\", None)]\n-\n-\n-class IE_QoS(IE_Base):\n-    name = \"QoS\"\n-    fields_desc = [ByteEnumField(\"ietype\", 135, IEType),\n-                   ShortField(\"length\", None),\n-                   ByteField(\"allocation_retention_prioiry\", 1),\n-\n-                   ConditionalField(XBitField(\"spare\", 0x00, 2),\n-                                    lambda pkt: pkt.length > 1),\n-                   ConditionalField(XBitField(\"delay_class\", 0x000, 3),\n-                                    lambda pkt: pkt.length > 1),\n-                   ConditionalField(XBitField(\"reliability_class\", 0x000, 3),\n-                                    lambda pkt: pkt.length > 1),\n-\n-                   ConditionalField(XBitField(\"peak_troughput\", 0x0000, 4),\n-                                    lambda pkt: pkt.length > 2),\n-                   ConditionalField(BitField(\"spare\", 0, 1),\n-                                    lambda pkt: pkt.length > 2),\n-                   ConditionalField(XBitField(\"precedence_class\", 0x000, 3),\n-                                    lambda pkt: pkt.length > 2),\n-\n-                   ConditionalField(XBitField(\"spare\", 0x000, 3),\n-                                    lambda pkt: pkt.length > 3),\n-                   ConditionalField(XBitField(\"mean_troughput\", 0x00000, 5),\n-                                    lambda pkt: pkt.length > 3),\n-\n-                   ConditionalField(XBitField(\"traffic_class\", 0x000, 3),\n-                                    lambda pkt: pkt.length > 4),\n-                   ConditionalField(XBitField(\"delivery_order\", 0x00, 2),\n-                                    lambda pkt: pkt.length > 4),\n-                   ConditionalField(XBitField(\"delivery_of_err_sdu\", 0x000, 3),\n-                                    lambda pkt: pkt.length > 4),\n-\n-                   ConditionalField(ByteField(\"max_sdu_size\", None),\n-                                    lambda pkt: pkt.length > 5),\n-                   ConditionalField(ByteField(\"max_bitrate_up\", None),\n-                                    lambda pkt: pkt.length > 6),\n-                   ConditionalField(ByteField(\"max_bitrate_down\", None),\n-                                    lambda pkt: pkt.length > 7),\n-\n-                   ConditionalField(XBitField(\"redidual_ber\", 0x0000, 4),\n-                                    lambda pkt: pkt.length > 8),\n-                   ConditionalField(XBitField(\"sdu_err_ratio\", 0x0000, 4),\n-                                    lambda pkt: pkt.length > 8),\n-                   ConditionalField(XBitField(\"transfer_delay\", 0x00000, 6),\n-                                    lambda pkt: pkt.length > 9),\n-                   ConditionalField(XBitField(\"traffic_handling_prio\",\n-                                              0x000,\n-                                              2),\n-                                    lambda pkt: pkt.length > 9),\n-\n-                   ConditionalField(ByteField(\"guaranteed_bit_rate_up\", None),\n-                                    lambda pkt: pkt.length > 10),\n-                   ConditionalField(ByteField(\"guaranteed_bit_rate_down\",\n-                                              None),\n-                                    lambda pkt: pkt.length > 11),\n-\n-                   ConditionalField(XBitField(\"spare\", 0x000, 3),\n-                                    lambda pkt: pkt.length > 12),\n-                   ConditionalField(BitField(\"signaling_indication\", 0, 1),\n-                                    lambda pkt: pkt.length > 12),\n-                   ConditionalField(XBitField(\"source_stats_desc\", 0x0000, 4),\n-                                    lambda pkt: pkt.length > 12),\n-\n-                   ConditionalField(ByteField(\"max_bitrate_down_ext\", None),\n-                                    lambda pkt: pkt.length > 13),\n-                   ConditionalField(ByteField(\"guaranteed_bitrate_down_ext\",\n-                                              None),\n-                                    lambda pkt: pkt.length > 14),\n-                   ConditionalField(ByteField(\"max_bitrate_up_ext\", None),\n-                                    lambda pkt: pkt.length > 15),\n-                   ConditionalField(ByteField(\"guaranteed_bitrate_up_ext\",\n-                                              None),\n-                                    lambda pkt: pkt.length > 16),\n-                   ConditionalField(ByteField(\"max_bitrate_down_ext2\", None),\n-                                    lambda pkt: pkt.length > 17),\n-                   ConditionalField(ByteField(\"guaranteed_bitrate_down_ext2\",\n-                                              None),\n-                                    lambda pkt: pkt.length > 18),\n-                   ConditionalField(ByteField(\"max_bitrate_up_ext2\", None),\n-                                    lambda pkt: pkt.length > 19),\n-                   ConditionalField(ByteField(\"guaranteed_bitrate_up_ext2\",\n-                                              None),\n-                                    lambda pkt: pkt.length > 20)]\n-\n-\n-class IE_CommonFlags(IE_Base):\n-    name = \"Common Flags\"\n-    fields_desc = [ByteEnumField(\"ietype\", 148, IEType),\n-                   ShortField(\"length\", None),\n-                   BitField(\"dual_addr_bearer_fl\", 0, 1),\n-                   BitField(\"upgrade_qos_supported\", 0, 1),\n-                   BitField(\"nrsn\", 0, 1),\n-                   BitField(\"no_qos_nego\", 0, 1),\n-                   BitField(\"mbms_cnting_info\", 0, 1),\n-                   BitField(\"ran_procedure_ready\", 0, 1),\n-                   BitField(\"mbms_service_type\", 0, 1),\n-                   BitField(\"prohibit_payload_compression\", 0, 1)]\n-\n-\n-class IE_APNRestriction(IE_Base):\n-    name = \"APN Restriction\"\n-    fields_desc = [ByteEnumField(\"ietype\", 149, IEType),\n-                   ShortField(\"length\", 1),\n-                   ByteField(\"restriction_type_value\", 0)]\n-\n-\n-class IE_RATType(IE_Base):\n-    name = \"Rat Type\"\n-    fields_desc = [ByteEnumField(\"ietype\", 151, IEType),\n-                   ShortField(\"length\", 1),\n-                   ByteEnumField(\"RAT_Type\", None, RATType)]\n-\n-\n-class IE_UserLocationInformation(IE_Base):\n-    name = \"User Location Information\"\n-    fields_desc = [ByteEnumField(\"ietype\", 152, IEType),\n-                   ShortField(\"length\", None),\n-                   ByteField(\"type\", 1),\n-                   # Only type 1 is currently supported\n-                   TBCDByteField(\"MCC\", \"\", 2),\n-                   # MNC: if the third digit of MCC is 0xf, then the length of MNC is 1 byte  # noqa: E501\n-                   TBCDByteField(\"MNC\", \"\", 1),\n-                   ShortField(\"LAC\", None),\n-                   ShortField(\"SAC\", None)]\n-\n-\n-class IE_MSTimeZone(IE_Base):\n-    name = \"MS Time Zone\"\n-    fields_desc = [ByteEnumField(\"ietype\", 153, IEType),\n-                   ShortField(\"length\", None),\n-                   ByteField(\"timezone\", 0),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   XBitField(\"daylight_saving_time\", 0x00, 2)]\n-\n-\n-class IE_IMEI(IE_Base):\n-    name = \"IMEI\"\n-    fields_desc = [ByteEnumField(\"ietype\", 154, IEType),\n-                   ShortField(\"length\", None),\n-                   TBCDByteField(\"IMEI\", \"\", length_from=lambda x: x.length)]\n-\n-\n-class IE_MSInfoChangeReportingAction(IE_Base):\n-    name = \"MS Info Change Reporting Action\"\n-    fields_desc = [ByteEnumField(\"ietype\", 181, IEType),\n-                   ShortField(\"length\", 1),\n-                   ByteField(\"Action\", 0)]\n-\n-\n-class IE_DirectTunnelFlags(IE_Base):\n-    name = \"Direct Tunnel Flags\"\n-    fields_desc = [ByteEnumField(\"ietype\", 182, IEType),\n-                   ShortField(\"length\", 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"EI\", 0, 1),\n-                   BitField(\"GCSI\", 0, 1),\n-                   BitField(\"DTI\", 0, 1)]\n-\n-\n-class IE_BearerControlMode(IE_Base):\n-    name = \"Bearer Control Mode\"\n-    fields_desc = [ByteEnumField(\"ietype\", 184, IEType),\n-                   ShortField(\"length\", 1),\n-                   ByteField(\"bearer_control_mode\", 0)]\n-\n-\n-class IE_EvolvedAllocationRetentionPriority(IE_Base):\n-    name = \"Evolved Allocation/Retention Priority\"\n-    fields_desc = [ByteEnumField(\"ietype\", 191, IEType),\n-                   ShortField(\"length\", 1),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"PCI\", 0, 1),\n-                   XBitField(\"PL\", 0x0000, 4),\n-                   BitField(\"Spare\", 0, 1),\n-                   BitField(\"PVI\", 0, 1)]\n-\n-\n-class IE_CharginGatewayAddress(IE_Base):\n-    name = \"Chargin Gateway Address\"\n-    fields_desc = [ByteEnumField(\"ietype\", 251, IEType),\n-                   ShortField(\"length\", 4),\n-                   ConditionalField(IPField(\"ipv4_address\", \"127.0.0.1\"),\n-                                    lambda\n-                                    pkt: pkt.length == 4),\n-                   ConditionalField(IP6Field(\"ipv6_address\", \"::1\"), lambda\n-                                    pkt: pkt.length == 16)]\n-\n-\n-class IE_PrivateExtension(IE_Base):\n-    name = \"Private Extension\"\n-    fields_desc = [ByteEnumField(\"ietype\", 255, IEType),\n-                   ShortField(\"length\", 1),\n-                   ByteField(\"extension identifier\", 0),\n-                   StrLenField(\"extention_value\", \"\",\n-                               length_from=lambda x: x.length)]\n-\n-\n-class IE_ExtensionHeaderList(IE_Base):\n-    name = \"Extension Header List\"\n-    fields_desc = [ByteEnumField(\"ietype\", 141, IEType),\n-                   FieldLenField(\"length\", None, length_of=\"extension_headers\"),  # noqa: E501\n-                   #FieldListField(\"extension_headers\", [64, 192], ByteField(\"\", 0))]  # noqa: E501\n-                   FieldListField(\"extension_headers\", [64, 133, 192], ByteField(\"\", 0))]  # noqa: E501\n-\n-\n-class IE_NotImplementedTLV(Packet):\n-    name = \"IE not implemented\"\n-    fields_desc = [ByteEnumField(\"ietype\", 0, IEType),\n-                   ShortField(\"length\", None),\n-                   StrLenField(\"data\", \"\", length_from=lambda x: x.length)]\n-\n-    def extract_padding(self, pkt):\n-        return \"\", pkt\n-\n-\n-ietypecls = {1: IE_Cause,\n-             2: IE_IMSI,\n-             3: IE_Routing,\n-             8: IE_ReorderingRequired,\n-             14: IE_Recovery,\n-             15: IE_SelectionMode,\n-             16: IE_TEIDI,\n-             17: IE_TEICP,\n-             19: IE_Teardown,\n-             20: IE_NSAPI,\n-             26: IE_ChargingCharacteristics,\n-             27: IE_TraceReference,\n-             28: IE_TraceType,\n-             127: IE_ChargingId,\n-             128: IE_EndUserAddress,\n-             131: IE_AccessPointName,\n-             132: IE_ProtocolConfigurationOptions,\n-             133: IE_GSNAddress,\n-             134: IE_MSInternationalNumber,\n-             135: IE_QoS,\n-             141: IE_ExtensionHeaderList,\n-             148: IE_CommonFlags,\n-             149: IE_APNRestriction,\n-             151: IE_RATType,\n-             152: IE_UserLocationInformation,\n-             153: IE_MSTimeZone,\n-             154: IE_IMEI,\n-             181: IE_MSInfoChangeReportingAction,\n-             182: IE_DirectTunnelFlags,\n-             184: IE_BearerControlMode,\n-             191: IE_EvolvedAllocationRetentionPriority,\n-             251: IE_CharginGatewayAddress,\n-             255: IE_PrivateExtension}\n-\n-\n-def IE_Dispatcher(s):\n-    \"\"\"Choose the correct Information Element class.\"\"\"\n-    if len(s) < 1:\n-        return Raw(s)\n-    # Get the IE type\n-    ietype = orb(s[0])\n-    cls = ietypecls.get(ietype, Raw)\n-\n-    # if ietype greater than 128 are TLVs\n-    if cls == Raw and ietype & 128 == 128:\n-        cls = IE_NotImplementedTLV\n-    return cls(s)\n-\n-\n-class GTPEchoResponse(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Echo Response\"\n-    fields_desc = [PacketListField(\"IE_list\", [], IE_Dispatcher)]\n-\n-    def hashret(self):\n-        return struct.pack(\"H\", self.seq)\n-\n-    def answers(self, other):\n-        return self.seq == other.seq\n-\n-\n-class GTPCreatePDPContextRequest(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Create PDP Context Request\"\n-    fields_desc = [PacketListField(\"IE_list\", [IE_TEIDI(), IE_NSAPI(), IE_GSNAddress(),  # noqa: E501\n-                                               IE_GSNAddress(),\n-                                               IE_NotImplementedTLV(ietype=135, length=15, data=RandString(15))],  # noqa: E501\n-                                   IE_Dispatcher)]\n-\n-    def hashret(self):\n-        return struct.pack(\"H\", self.seq)\n-\n-\n-class GTPCreatePDPContextResponse(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Create PDP Context Response\"\n-    fields_desc = [PacketListField(\"IE_list\", [], IE_Dispatcher)]\n-\n-    def hashret(self):\n-        return struct.pack(\"H\", self.seq)\n-\n-    def answers(self, other):\n-        return self.seq == other.seq\n-\n-\n-class GTPUpdatePDPContextRequest(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Update PDP Context Request\"\n-    fields_desc = [PacketListField(\"IE_list\", [\n-        IE_Cause(),\n-        IE_Recovery(),\n-        IE_TEIDI(),\n-        IE_TEICP(),\n-        IE_ChargingId(),\n-        IE_ProtocolConfigurationOptions(),\n-        IE_GSNAddress(),\n-        IE_GSNAddress(),\n-        IE_GSNAddress(),\n-        IE_GSNAddress(),\n-        IE_QoS(),\n-        IE_CharginGatewayAddress(),\n-        IE_CharginGatewayAddress(),\n-        IE_CommonFlags(),\n-        IE_APNRestriction(),\n-        IE_BearerControlMode(),\n-        IE_MSInfoChangeReportingAction(),\n-        IE_EvolvedAllocationRetentionPriority(),\n-        IE_PrivateExtension()],\n-        IE_Dispatcher)]\n-\n-    def hashret(self):\n-        return struct.pack(\"H\", self.seq)\n-\n-\n-class GTPUpdatePDPContextResponse(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Update PDP Context Response\"\n-    fields_desc = [PacketListField(\"IE_list\", None, IE_Dispatcher)]\n-\n-    def hashret(self):\n-        return struct.pack(\"H\", self.seq)\n-\n-\n-class GTPErrorIndication(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Error Indication\"\n-    fields_desc = [PacketListField(\"IE_list\", [], IE_Dispatcher)]\n-\n-\n-class GTPDeletePDPContextRequest(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Delete PDP Context Request\"\n-    fields_desc = [PacketListField(\"IE_list\", [], IE_Dispatcher)]\n-\n-\n-class GTPDeletePDPContextResponse(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP Delete PDP Context Response\"\n-    fields_desc = [PacketListField(\"IE_list\", [], IE_Dispatcher)]\n-\n-\n-class GTPPDUNotificationRequest(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP PDU Notification Request\"\n-    fields_desc = [PacketListField(\"IE_list\", [IE_IMSI(),\n-                                               IE_TEICP(TEICI=RandInt()),\n-                                               IE_EndUserAddress(PDPTypeNumber=0x21),  # noqa: E501\n-                                               IE_AccessPointName(),\n-                                               IE_GSNAddress(address=\"127.0.0.1\"),  # noqa: E501\n-                                               ], IE_Dispatcher)]\n-\n-\n-class GTPSupportedExtensionHeadersNotification(Packet):\n-    name = \"GTP Supported Extension Headers Notification\"\n-    fields_desc = [PacketListField(\"IE_list\", [IE_ExtensionHeaderList(),\n-                                               ], IE_Dispatcher)]\n-\n-\n-class GTPmorethan1500(Packet):\n-    # 3GPP TS 29.060 V9.1.0 (2009-12)\n-    name = \"GTP More than 1500\"\n-    fields_desc = [ByteEnumField(\"IE_Cause\", \"Cause\", IEType),\n-                   BitField(\"IE\", 1, 12000), ]\n-\n-\n-# Bind GTP-C\n-bind_bottom_up(UDP, GTPHeader, dport=2123)\n-bind_bottom_up(UDP, GTPHeader, sport=2123)\n-bind_layers(UDP, GTPHeader, dport=2123, sport=2123)\n-bind_layers(GTPHeader, GTPEchoRequest, gtp_type=1, S=1)\n-bind_layers(GTPHeader, GTPEchoResponse, gtp_type=2, S=1)\n-bind_layers(GTPHeader, GTPCreatePDPContextRequest, gtp_type=16)\n-bind_layers(GTPHeader, GTPCreatePDPContextResponse, gtp_type=17)\n-bind_layers(GTPHeader, GTPUpdatePDPContextRequest, gtp_type=18)\n-bind_layers(GTPHeader, GTPUpdatePDPContextResponse, gtp_type=19)\n-bind_layers(GTPHeader, GTPDeletePDPContextRequest, gtp_type=20)\n-bind_layers(GTPHeader, GTPDeletePDPContextResponse, gtp_type=21)\n-bind_layers(GTPHeader, GTPPDUNotificationRequest, gtp_type=27)\n-bind_layers(GTPHeader, GTPSupportedExtensionHeadersNotification, gtp_type=31, S=1)  # noqa: E501\n-bind_layers(GTPHeader, GTP_UDPPort_ExtensionHeader, next_ex=64, E=1)\n-bind_layers(GTPHeader, GTP_PDUSession_ExtensionHeader, next_ex=133, E=1)\n-bind_layers(GTPHeader, GTP_PDCP_PDU_ExtensionHeader, next_ex=192, E=1)\n-\n-# Bind GTP-U\n-bind_bottom_up(UDP, GTP_U_Header, dport=2152)\n-bind_bottom_up(UDP, GTP_U_Header, sport=2152)\n-bind_layers(UDP, GTP_U_Header, dport=2152, sport=2152)\n-bind_layers(GTP_U_Header, GTPErrorIndication, gtp_type=26, S=1)\n-bind_top_down(GTP_U_Header, IP, gtp_type=255)\n-bind_top_down(GTP_U_Header, IPv6, gtp_type=255)\n-bind_top_down(GTP_U_Header, PPP, gtp_type=255)\n",
    "prefixes": [
        "V1",
        "2/3"
    ]
}