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