From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id DDC1D1B7BD for ; Wed, 6 Jun 2018 07:33:22 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jun 2018 22:33:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,482,1520924400"; d="scan'208";a="62167568" Received: from shecgisg006.sh.intel.com ([10.239.39.68]) by orsmga001.jf.intel.com with ESMTP; 05 Jun 2018 22:33:21 -0700 Received: from shecgisg006.sh.intel.com (localhost [127.0.0.1]) by shecgisg006.sh.intel.com with ESMTP id w565XKDM022119; Wed, 6 Jun 2018 13:33:20 +0800 Received: (from yufengmx@localhost) by shecgisg006.sh.intel.com with œ id w565XKtN022115; Wed, 6 Jun 2018 13:33:20 +0800 From: yufengx.mo@intel.com To: dts@dpdk.org Cc: yufengmx Date: Wed, 6 Jun 2018 13:33:19 +0800 Message-Id: <1528263200-21939-2-git-send-email-yufengx.mo@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1528263200-21939-1-git-send-email-yufengx.mo@intel.com> References: <1528263200-21939-1-git-send-email-yufengx.mo@intel.com> Subject: [dts] [PATCH V1 1/2] packet_capture: upload test plan X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Jun 2018 05:33:24 -0000 From: yufengmx Packet capture framework feature support packet capturing on dpdk ethernet devices. DPDK provides dpdk-pdump tool under app/pdump directory for packet capturing on dpdk. Signed-off-by: yufengmx --- test_plans/packet_capture_test_plan.rst | 425 ++++++++++++++++++++++++++++++++ 1 file changed, 425 insertions(+) create mode 100644 test_plans/packet_capture_test_plan.rst diff --git a/test_plans/packet_capture_test_plan.rst b/test_plans/packet_capture_test_plan.rst new file mode 100644 index 0000000..de8b636 --- /dev/null +++ b/test_plans/packet_capture_test_plan.rst @@ -0,0 +1,425 @@ +.. Copyright (c) <2010-2018> Intel Corporation + 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. + +================ + packet capture +================ + +Packet capture framework feature support packet capturing on dpdk ethernet +devices. DPDK provides dpdk-pdump tool under app/pdump directory for packet +capturing on dpdk. + +The dpdk-pdump application will act as the secondary process. The EAL thread +polls for packet capture fd. If fd polled matches packet capture fd, it will +initiate packet capture processing. + +The testpmd application will act as the primary process. The primary process +create socket for packet capture connection with the secondary process and +registers socket with packet capture epoll event. Packet capture event will +be polled as part of interrupt thread. + +The primary process creates mempool and two rte_rings for packets duplication +and sharing packet info with the secondary process respectively. + +Upon receiving packet capture event, the primary process receive either +register RX/TX callbacks or remove RX/TX callbacks message from the secondary +process on socket.If packet matches, reference count of packet will be +incremented and enqueued to second rte_ring for the secondary process to use. + +note: DPDK technical document refer to ``/doc/guides/tools/pdump.rst`` + +Prerequisites +============= +* 2x NICs (2 full duplex ports per NIC) plugged into the available slots on a +platform, another two nic ports are linked with cables. + + Connections ports between TESTER and DUT + TESTER DUT + physical link logical link + .--------. .--------. + | portA0 | <----------------------> | portB0 | + | | | | + | portA1 | <----------------------> | portB1 | + | | | | + '--------' | | + ------> | portB2 | + | | | + ------> | portB3 | + '--------' + +note: portB0/portB1 are the binded ports. + portB2/portB3 keep link up status and don't bind to dpdk driver. + Except portB0/portB1, DUT should have other two ports on link up status + +Test cases +========== +The testpmd application act as server process with port-topology chained mode, +the dpdk-pdump act as client process to dump capture packet with different +options setting. Select one port of tester as tx port, another port of tester +as rx port, send different type packets from two ports, check pcap files' +content dumped by scapy and tcpdump to confirm testpmd working correctly, +check pcap files' content dumped by tcpdump and dpdk-pdump to confirm +dpdk-pdump working correctly. + +dpdk-pdump command format +------------------------- +* packet capture framework tool dpdk-pdump command format, parameters inside +the parenthesis represents the mandatory parameters, parameters inside the +square brackets represents optional +parameters:: +./app/dpdk-pdump -- --pdump= +'(port = |device_id = ), +(queue=), +(rx-dev= | tx-dev=), +[ring-size=], +[mbuf-size=], +[total-num-mbufs=]' + +transmission packets' format +---------------------------- +* IP_RAW + [Ether()/IP()/Raw('\0'*60)] +* TCP + [Ether()/IP()/TCP()/Raw('\0'*60)] +* UDP + [Ether()/IP()/UDP()/Raw('\0'*60)] +* SCTP + [Ether()/IP()/SCTP()/Raw('\0'*40)] +* IPv6_TCP + [Ether()/IPv6()/TCP()/Raw('\0'*60)] +* IPv6_UDP + [Ether()/IPv6()/UDP()/Raw('\0'*60)] +* IPv6_SCTP + [Ether()/IP()/IPv6()/SCTP()/Raw('\0'*40)] +* VLAN_UDP + [Ether()/Dot1Q()/IP()/UDP()/Raw('\0'*40)] +* TIMESYNC + [Ether(dst='FF:FF:FF:FF:FF:FF',type=0x88f7)/"\\x00\\x02"] +* ARP + [Ether(dst='FF:FF:FF:FF:FF:FF')/ARP()] +* LLDP + [Ether()/LLDP()/LLDPManagementAddress()] + notice: LLDP()/LLDPManagementAddress() method are in dts/dep/lldp.py + +port configuration +------------------ +* confirm two NICs physical link on a platform: + dut port 0 <---> tester port 0 + dut port 1 <---> tester port 1 + +* Bind two port on DUT: + ./usertools/dpdk_nic_bind.py --bind=igb_uio \ + + +* On dut, use port 0 as rx/tx port. + If dut port 0 rx dump is set, scapy send packet from tester port 0 and + tcpdump dumps tester + port 1's packet. + + If dut port 0 tx dump is set, scapy send packet from tester port 1 and + tcpdump dumps tester + port 0's packet. + +* If using interfaces as dpdk-pdump vdev, prepare two ports on DUT, which + haven't been binded to dpdk and have been in linked status + +Test Case 1: test pdump port +============================ +Test different port type defintion options:: +* port= +* device_id= + +steps: +*. Boot up dpdk's testpmd with chained option: + ./app/testpmd -c 0x6 -n 4 -- -i --port-topology=chained + testpmd> set fwd io + testpmd> start + +*. When test VLAN_UDP type packet transmission, set vlan: + + testpmd> vlan set filter off 1 + testpmd> start + +*. Boot up dpdk-pdump: + ./app/dpdk-pdump -- --pdump ',queue=*,\ + tx-dev=/tmp/pdump-tx.pcap,rx-dev=/tmp/pdump-rx.pcap' + +*. Set up linux's tcpdump to receiver packet on tester: + tcpdump -i -w /tmp/sniff-.pcap + tcpdump -i -w /tmp/sniff-.pcap + +*. Send packet on tester by port 0: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap +file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +*. Send packet on tester by port 1: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap +file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +Test Case 2: test pdump queue +============================= +Capture first queue traffic +test different queue options:: +* first queue: + queue=0 +* all: + queue=* + +steps: +*. Boot up dpdk's testpmd with chained option: + ./app/testpmd -c 0x6 -n 4 -- -i --port-topology=chained + testpmd> set fwd io + testpmd> start + +*. When test VLAN_UDP type packet transmission, set vlan: + + testpmd> vlan set filter off 1 + testpmd> start + +*. Boot up dpdk-pdump: + ./app/dpdk-pdump -- --pdump 'port=0,,\ + tx-dev=/tmp/pdump-tx.pcap,rx-dev=/tmp/pdump-rx.pcap' + +*. Set up linux's tcpdump to receiver packet on tester: + tcpdump -i -w /tmp/sniff-.pcap + tcpdump -i -w /tmp/sniff-.pcap + +*. Send packet on tester by port 0: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +*. Send packet on tester by port 1: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +Test Case 3: test pdump dev pcap +================================ +Dump rx/tx transmission packets into a specified pcap files. +test different dump options:: +* tx-dev=/tmp/pdump-tx.pcap,rx-dev=/tmp/pdump-rx.pcap +* rx-dev=/tmp/pdump-rx.pcap +* tx-dev=/tmp/pdump-tx.pcap + +steps: +*. Boot up dpdk's testpmd with chained option: + ./app/testpmd -c 0x6 -n 4 -- -i --port-topology=chained + testpmd> set fwd io + testpmd> start + +*. When test VLAN_UDP type packet transmission, set vlan: + + testpmd> vlan set filter off 1 + testpmd> start + +*. Boot up dpdk-pdump with pdump options: + ./app/dpdk-pdump -- --pdump 'port=0,queue=*,' + +*. Set up linux's tcpdump to receiver packet on tester: + tcpdump -i -w /tmp/sniff-.pcap + tcpdump -i -w /tmp/sniff-.pcap + +*. Send packet on tester by port 0: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump(ignore when only + set tx-dev). + +*. Send packet on tester by port 1: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump(ignore when only + set rx-dev). + +Test Case 4: test pdump dev iface +================================= +Dump rx/tx transmission packets to a specifed port, which is on link status. +test different dump options:: +* tx-dev=,rx-dev= +* rx-dev= +* tx-dev= + +steps: +*. Boot up dpdk's testpmd with chained option: + ./app/testpmd -c 0x6 -n 4 -- -i --port-topology=chained + testpmd> set fwd io + testpmd> start + +*. When test VLAN_UDP type packet transmission, set vlan: + + testpmd> vlan set filter off 1 + testpmd> start + +*. Boot up dpdk-pdump with pdump options: + ./app/dpdk-pdump -- --pdump 'port=0,queue=*,' + +*. Set up linux's tcpdump to receiver packet on tester: + tcpdump -i -w /tmp/sniff-.pcap + tcpdump -i -w /tmp/sniff-.pcap + +*. Set up linux's tcpdump to receiver packet of dpdk-pdump on Dut:: + when rx-dev is set + + tcpdump -i -w /tmp/pdump-rx.pcap + + when tx-dev is set + + tcpdump -i -w /tmp/pdump-tx.pcap + +*. Send packet on tester by port 0: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump(ignore when only + set tx-dev). + +*. Send packet on tester by port 1: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump(ignore when only + set rx-dev). + +Test Case 5: test pdump ring size +================================= +Test ring size option, set value within 2^[1~27] + +steps: +*. Boot up dpdk's testpmd with chained option: + ./app/testpmd -c 0x6 -n 4 -- -i --port-topology=chained + testpmd> set fwd io + testpmd> start + +*. When test VLAN_UDP type packet transmission, set vlan: + + testpmd> vlan set filter off 1 + testpmd> start + +*. Boot up dpdk-pdump with pdump options: + ./app/dpdk-pdump -- --pdump 'port=0,queue=*,\ + tx-dev=/tmp/pdump-tx.pcap,rx-dev=/tmp/pdump-rx.pcap,ring-size=1024' + +*. Set up linux's tcpdump to receiver packet on tester: + tcpdump -i -w /tmp/sniff-.pcap + tcpdump -i -w /tmp/sniff-.pcap + +*. Send packet on tester by port 0: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +*. Send packet on tester by port 1: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +Test Case 6: test pdump mbuf size +================================= +Test mbuf size option, set value within [252~50000]. min value is decided by +single packet size, max value is decided by test platform memory size. + +steps: +*. Boot up dpdk's testpmd with chained option: + ./app/testpmd -c 0x6 -n 4 -- -i --port-topology=chained + testpmd> set fwd io + testpmd> start + +*. When test VLAN_UDP type packet transmission, set vlan: + + testpmd> vlan set filter off 1 + testpmd> start + +*. Boot up dpdk-pdump with pdump options: + ./app/dpdk-pdump -- --pdump 'port=0,queue=*,\ + tx-dev=/tmp/pdump-tx.pcap,rx-dev=/tmp/pdump-rx.pcap,mbuf-size=2048' + +*. Set up linux's tcpdump to receiver packet on tester: + tcpdump -i -w /tmp/sniff-.pcap + tcpdump -i -w /tmp/sniff-.pcap + +*. Send packet on tester by port 0: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +*. Send packet on tester by port 1: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +Test Case 7: test pdump total num mbufs +======================================= +Test total-num-mbufs option, set value within [1025~65535] + +steps: +*. Boot up dpdk's testpmd with chained option: + ./app/testpmd -c 0x6 -n 4 -- -i --port-topology=chained + testpmd> set fwd io + testpmd> start + +*. When test VLAN_UDP type packet transmission, set vlan: + + testpmd> vlan set filter off 1 + testpmd> start + +*. Boot up dpdk-pdump with pdump options: + ./app/dpdk-pdump -- --pdump 'port=0,queue=*,\ + tx-dev=/tmp/pdump-tx.pcap,rx-dev=/tmp/pdump-rx.pcap,total-num-mbufs=8191' + +*. Set up linux's tcpdump to receiver packet on tester: + tcpdump -i -w /tmp/sniff-.pcap + tcpdump -i -w /tmp/sniff-.pcap + +*. Send packet on tester by port 0: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. + +*. Send packet on tester by port 1: + sendp(, iface=) + +*. Compare pcap file of scapy with the pcap file dumped by tcpdump. Compare pcap + file dumped by dpdk-pdump with pcap files dumped by tcpdump. -- 1.9.3