[dts] [PATCH V1 1/2] packet_capture: upload test plan

yufengx.mo at intel.com yufengx.mo at intel.com
Wed Jun 6 07:33:19 CEST 2018


From: yufengmx <yufengx.mo at intel.com>


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 <yufengx.mo at intel.com>
---
 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 = <port_id> |device_id = <pci address>), 
+(queue=<queue number>),  
+(rx-dev=<iface/path to pcap file> | tx-dev=<iface/path to pcap file>), 
+[ring-size=<size>], 
+[mbuf-size=<size>], 
+[total-num-mbufs=<size>]'
+
+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 <dut port 0 pci address> \ 
+  <dut port 1 pci address>
+
+* 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=<dut port id>
+* device_id=<dut pci address>
+
+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 option>,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 <rx port name> -w /tmp/sniff-<rx port name>.pcap
+	tcpdump -i <tx port name> -w /tmp/sniff-<tx port name>.pcap
+
+*. Send packet on tester by port 0:
+   sendp(<packet format>, iface=<port 0 name>)
+
+*. 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(<packet format>, iface=<port 1 name>)
+
+*. 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,<queue option>,\
+    tx-dev=/tmp/pdump-tx.pcap,rx-dev=/tmp/pdump-rx.pcap'
+
+*. Set up linux's tcpdump to receiver packet on tester:
+	tcpdump -i <rx port name> -w /tmp/sniff-<rx port name>.pcap
+	tcpdump -i <tx port name> -w /tmp/sniff-<tx port name>.pcap
+
+*. Send packet on tester by port 0:
+    sendp(<packet format>, iface=<port 0 name>)
+
+*. 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(<packet format>, iface=<port 1 name>)
+
+*. 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=*,<dump object>'
+
+*. Set up linux's tcpdump to receiver packet on tester:
+	tcpdump -i <rx port name> -w /tmp/sniff-<rx port name>.pcap
+	tcpdump -i <tx port name> -w /tmp/sniff-<tx port name>.pcap
+
+*. Send packet on tester by port 0:
+    sendp(<packet format>, iface=<port 0 name>)
+
+*. 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(<packet format>, iface=<port 1 name>)
+
+*. 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=<dut tx port name>,rx-dev=<dut rx port name>
+* rx-dev=<dut rx port name>
+* tx-dev=<dut tx port name>
+
+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=*,<dump object>'
+
+*. Set up linux's tcpdump to receiver packet on tester:
+	tcpdump -i <rx port name> -w /tmp/sniff-<rx port name>.pcap
+	tcpdump -i <tx port name> -w /tmp/sniff-<tx port name>.pcap
+
+*. Set up linux's tcpdump to receiver packet of dpdk-pdump on Dut::
+	when rx-dev is set
+	
+	tcpdump -i <dut rx port name> -w /tmp/pdump-rx.pcap
+	
+	when tx-dev is set
+	
+	tcpdump -i <dut tx port name> -w /tmp/pdump-tx.pcap
+
+*. Send packet on tester by port 0:
+    sendp(<packet format>, iface=<port 0 name>)
+
+*. 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(<packet format>, iface=<port 1 name>)
+
+*. 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 <rx port name> -w /tmp/sniff-<rx port name>.pcap
+	tcpdump -i <tx port name> -w /tmp/sniff-<tx port name>.pcap
+
+*. Send packet on tester by port 0:
+    sendp(<packet format>, iface=<port 0 name>)
+
+*. 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(<packet format>, iface=<port 1 name>)
+
+*. 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 <rx port name> -w /tmp/sniff-<rx port name>.pcap
+	tcpdump -i <tx port name> -w /tmp/sniff-<tx port name>.pcap
+
+*. Send packet on tester by port 0:
+    sendp(<packet format>, iface=<port 0 name>)
+
+*. 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(<packet format>, iface=<port 1 name>)
+
+*. 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 <rx port name> -w /tmp/sniff-<rx port name>.pcap
+	tcpdump -i <tx port name> -w /tmp/sniff-<tx port name>.pcap
+
+*. Send packet on tester by port 0:
+    sendp(<packet format>, iface=<port 0 name>)
+
+*. 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(<packet format>, iface=<port 1 name>)
+
+*. 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



More information about the dts mailing list