From: yufengmx <yufengx.mo@intel.com> To: dts@dpdk.org, lijuan.tu@intel.com Cc: yufengmx <yufengx.mo@intel.com> Subject: [dts] [PATCH V1 12/27] framework/pktgen: enable ixNetwork Date: Mon, 25 Jan 2021 16:43:59 +0800 Message-ID: <20210125084414.8503-13-yufengx.mo@intel.com> (raw) In-Reply-To: <20210125084414.8503-1-yufengx.mo@intel.com> parse pcap file/scapy Packet layers content. Signed-off-by: yufengmx <yufengx.mo@intel.com> --- framework/ixia_network/packet_parser.py | 93 +++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 framework/ixia_network/packet_parser.py diff --git a/framework/ixia_network/packet_parser.py b/framework/ixia_network/packet_parser.py new file mode 100644 index 00000000..6bb0e2f3 --- /dev/null +++ b/framework/ixia_network/packet_parser.py @@ -0,0 +1,93 @@ +# BSD LICENSE +# +# Copyright(c) 2010-2021 Intel Corporation. All rights reserved. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +import os +from collections import OrderedDict + +from scapy.all import conf +from scapy.packet import NoPayload +from scapy.packet import Packet as scapyPacket +from scapy.fields import ConditionalField +from scapy.utils import rdpcap + + +class PacketParser(object): + ''' parse packet full layers information ''' + + def __init__(self): + self.packetLayers = OrderedDict() + self.framesize = 64 + + def _parse_packet_layer(self, pkt_object): + ''' parse one packet every layers' fields and value ''' + if pkt_object is None: + return + + self.packetLayers[pkt_object.name] = OrderedDict() + for curfield in pkt_object.fields_desc: + if isinstance(curfield, ConditionalField) and \ + not curfield._evalcond(pkt_object): + continue + field_value = pkt_object.getfieldval(curfield.name) + if isinstance(field_value, scapyPacket) or (curfield.islist and + curfield.holds_packets and type(field_value) is list): + continue + repr_value = curfield.i2repr(pkt_object, field_value) + if isinstance(repr_value, str): + repr_value = repr_value.replace(os.linesep, + os.linesep + " " * (len(curfield.name) + 4)) + self.packetLayers[pkt_object.name][curfield.name] = repr_value + + if isinstance(pkt_object.payload, NoPayload): + return + else: + self._parse_packet_layer(pkt_object.payload) + + def _parse_pcap(self, pcapFile, number=0): + ''' parse one packet content ''' + self.packetLayers = OrderedDict() + pcap_pkts = [] + if isinstance(pcapFile, str): + if os.path.exists(pcapFile) is False: + warning = "{0} is not exist !".format(pcapFile) + raise Exception(warning) + pcap_pkts = rdpcap(pcapFile) + else: + pcap_pkts = pcapFile + # parse packets' every layers and fields + if len(pcap_pkts) == 0: + warning = "{0} is empty".format(pcapFile) + raise Exception(warning) + elif number >= len(pcap_pkts): + warning = "{0} is missing No.{1} packet".format(pcapFile, number) + raise Exception(warning) + else: + self._parse_packet_layer(pcap_pkts[number]) + self.framesize = len(pcap_pkts[number]) + 4 -- 2.21.0
next prev parent reply other threads:[~2021-01-25 8:51 UTC|newest] Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-25 8:43 [dts] [PATCH V1 00/27] dts: enable IxNetwork and enhance perf testing yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 01/27] framework/pktgen: return trex tx stats yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 02/27] framework/pktgen: return throughput " yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 03/27] " yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 04/27] conf/pktgen: enable ixNetwork yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 05/27] " yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 06/27] conf/l3fwd: add packet types comment yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 07/27] conf/testpmd: testpmd perf config yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 08/27] framework/pktgen: enable ixNetwork yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 09/27] " yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 10/27] " yufengmx 2021-01-25 8:43 ` [dts] [PATCH V1 11/27] " yufengmx 2021-01-25 8:43 ` yufengmx [this message] 2021-01-25 8:44 ` [dts] [PATCH V1 13/27] conf/pktgen: " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 14/27] framework/pktgen: " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 15/27] " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 16/27] " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 17/27] " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 18/27] tests/perf_test: rename l3fwd_base module yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 19/27] tests/perf_test: cover testpmd testing scenario yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 20/27] tests/perf_test: save rfc2544 expected throughput yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 21/27] tests/l3fwd_em: update script yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 22/27] tests/lpm_ipv4_rfc2544: " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 23/27] tests/l3fwd_lpm_ipv4: " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 24/27] tests/l3fwd_lpm_ipv6: " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 25/27] tests/l3fwd: " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 26/27] tests/vf_l3fwd_kernelpf: " yufengmx 2021-01-25 8:44 ` [dts] [PATCH V1 27/27] tests/testpmd_perf: upload script yufengmx 2021-02-19 7:02 ` [dts] [PATCH V1 00/27] dts: enable IxNetwork and enhance perf testing Tu, Lijuan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210125084414.8503-13-yufengx.mo@intel.com \ --to=yufengx.mo@intel.com \ --cc=dts@dpdk.org \ --cc=lijuan.tu@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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