xref: /dpdk/doc/guides/howto/packet_capture_framework.rst (revision 25d11a86c56d50947af33d0b79ede622809bd8b9)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2017 Intel Corporation.
3
4DPDK pdump Library and pdump Tool
5=================================
6
7This document describes how the Data Plane Development Kit (DPDK) Packet
8Capture Framework is used for capturing packets on DPDK ports. It is intended
9for users of DPDK who want to know more about the Packet Capture feature and
10for those who want to monitor traffic on DPDK-controlled devices.
11
12The DPDK packet capture framework was introduced in DPDK v16.07. The DPDK
13packet capture framework consists of the DPDK pdump library and DPDK pdump
14tool.
15
16
17Introduction
18------------
19
20The :ref:`librte_pdump <pdump_library>` library provides the APIs required to
21allow users to initialize the packet capture framework and to enable or
22disable packet capture. The library works on a client/server model and its
23usage is recommended for debugging purposes.
24
25The :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
27of enabling or disabling packet capture on DPDK ports. The ``dpdk-pdump`` tool
28provides command-line options with which users can request enabling or
29disabling of the packet capture on DPDK ports.
30
31The application which initializes the packet capture framework will act as a
32server and the application that enables or disables the packet capture will
33act as a client. The server sends the Rx and Tx packets from the DPDK ports
34to the client.
35
36In DPDK the ``testpmd`` application can be used to initialize the packet
37capture framework and act as a server, and the ``dpdk-pdump`` tool acts as a
38client. To view Rx or Tx packets of ``testpmd``, the application should be
39launched first, and then the ``dpdk-pdump`` tool. Packets from ``testpmd``
40will be sent to the tool, which then sends them on to the Pcap PMD device and
41that device writes them to the Pcap file or to an external interface depending
42on the command-line option used.
43
44Some 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
62Test Environment
63----------------
64
65The overview of using the Packet Capture Framework and the ``dpdk-pdump`` tool
66for 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
76Configuration
77-------------
78
79Modify the DPDK primary application to initialize the packet capture framework
80as mentioned in the above notes and enable the following config options and
81build DPDK::
82
83     CONFIG_RTE_LIBRTE_PMD_PCAP=y
84     CONFIG_RTE_LIBRTE_PDUMP=y
85
86
87Running the Application
88-----------------------
89
90The following steps demonstrate how to run the ``dpdk-pdump`` tool to capture
91Rx side packets on dpdk_port0 in :numref:`figure_packet_capture_framework` and
92inspect 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
112