New upstream version 18.02
[deb_dpdk.git] / doc / guides / howto / packet_capture_framework.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2017 Intel Corporation.
3
4 DPDK pdump Library and pdump Tool
5 =================================
6
7 This document describes how the Data Plane Development Kit (DPDK) Packet
8 Capture Framework is used for capturing packets on DPDK ports. It is intended
9 for users of DPDK who want to know more about the Packet Capture feature and
10 for those who want to monitor traffic on DPDK-controlled devices.
11
12 The DPDK packet capture framework was introduced in DPDK v16.07. The DPDK
13 packet capture framework consists of the DPDK pdump library and DPDK pdump
14 tool.
15
16
17 Introduction
18 ------------
19
20 The :ref:`librte_pdump <pdump_library>` library provides the APIs required to
21 allow users to initialize the packet capture framework and to enable or
22 disable packet capture. The library works on a client/server model and its
23 usage is recommended for debugging purposes.
24
25 The :ref:`dpdk-pdump <pdump_tool>` tool is developed based on the
26 ``librte_pdump`` library.  It runs as a DPDK secondary process and is capable
27 of enabling or disabling packet capture on DPDK ports. The ``dpdk-pdump`` tool
28 provides command-line options with which users can request enabling or
29 disabling of the packet capture on DPDK ports.
30
31 The application which initializes the packet capture framework will act as a
32 server and the application that enables or disables the packet capture will
33 act as a client. The server sends the Rx and Tx packets from the DPDK ports
34 to the client.
35
36 In DPDK the ``testpmd`` application can be used to initialize the packet
37 capture framework and act as a server, and the ``dpdk-pdump`` tool acts as a
38 client. To view Rx or Tx packets of ``testpmd``, the application should be
39 launched first, and then the ``dpdk-pdump`` tool. Packets from ``testpmd``
40 will be sent to the tool, which then sends them on to the Pcap PMD device and
41 that device writes them to the Pcap file or to an external interface depending
42 on the command-line option used.
43
44 Some things to note:
45
46 * The ``dpdk-pdump`` tool can only be used in conjunction with a primary
47   application which has the packet capture framework initialized already. In
48   dpdk, only ``testpmd`` is modified to initialize packet capture framework,
49   other applications remain untouched. So, if the ``dpdk-pdump`` tool has to
50   be used with any application other than the testpmd, the user needs to
51   explicitly modify that application to call the packet capture framework
52   initialization code. Refer to the ``app/test-pmd/testpmd.c`` code and look
53   for ``pdump`` keyword to see how this is done.
54
55 * The ``dpdk-pdump`` tool depends on the libpcap based PMD which is disabled
56   by default in the build configuration files, owing to an external dependency
57   on the libpcap development files. Once the libpcap development files are
58   installed, the libpcap based PMD can be enabled by setting
59   ``CONFIG_RTE_LIBRTE_PMD_PCAP=y`` and recompiling the DPDK.
60
61
62 Test Environment
63 ----------------
64
65 The overview of using the Packet Capture Framework and the ``dpdk-pdump`` tool
66 for packet capturing on the DPDK port in
67 :numref:`figure_packet_capture_framework`.
68
69 .. _figure_packet_capture_framework:
70
71 .. figure:: img/packet_capture_framework.*
72
73    Packet capturing on a DPDK port using the dpdk-pdump tool.
74
75
76 Configuration
77 -------------
78
79 Modify the DPDK primary application to initialize the packet capture framework
80 as mentioned in the above notes and enable the following config options and
81 build DPDK::
82
83      CONFIG_RTE_LIBRTE_PMD_PCAP=y
84      CONFIG_RTE_LIBRTE_PDUMP=y
85
86
87 Running the Application
88 -----------------------
89
90 The following steps demonstrate how to run the ``dpdk-pdump`` tool to capture
91 Rx side packets on dpdk_port0 in :numref:`figure_packet_capture_framework` and
92 inspect them using ``tcpdump``.
93
94 #. Launch testpmd as the primary application::
95
96      sudo ./app/testpmd -c 0xf0 -n 4 -- -i --port-topology=chained
97
98 #. Launch the pdump tool as follows::
99
100      sudo ./build/app/dpdk-pdump -- \
101           --pdump 'port=0,queue=*,rx-dev=/tmp/capture.pcap'
102
103 #. Send traffic to dpdk_port0 from traffic generator.
104    Inspect packets captured in the file capture.pcap using a tool
105    that can interpret Pcap files, for example tcpdump::
106
107      $tcpdump -nr /tmp/capture.pcap
108      reading from file /tmp/capture.pcap, link-type EN10MB (Ethernet)
109      11:11:36.891404 IP 4.4.4.4.whois++ > 3.3.3.3.whois++: UDP, length 18
110      11:11:36.891442 IP 4.4.4.4.whois++ > 3.3.3.3.whois++: UDP, length 18
111      11:11:36.891445 IP 4.4.4.4.whois++ > 3.3.3.3.whois++: UDP, length 18