From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 6D14EC66C for ; Fri, 29 Jan 2016 14:10:54 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP; 29 Jan 2016 05:10:53 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,364,1449561600"; d="scan'208";a="643480827" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by FMSMGA003.fm.intel.com with ESMTP; 29 Jan 2016 05:10:53 -0800 Received: from sivswdev02.ir.intel.com (sivswdev02.ir.intel.com [10.237.217.46]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id u0TDAqBU008901 for ; Fri, 29 Jan 2016 13:10:52 GMT Received: from sivswdev02.ir.intel.com (localhost [127.0.0.1]) by sivswdev02.ir.intel.com with ESMTP id u0TDAqAj027129 for ; Fri, 29 Jan 2016 13:10:52 GMT Received: (from reshmapa@localhost) by sivswdev02.ir.intel.com with id u0TDAqej027125 for dev@dpdk.org; Fri, 29 Jan 2016 13:10:52 GMT From: Reshma Pattan To: dev@dpdk.org Date: Fri, 29 Jan 2016 13:10:47 +0000 Message-Id: <1454073052-27025-1-git-send-email-reshma.pattan@intel.com> X-Mailer: git-send-email 1.7.4.1 Subject: [dpdk-dev] [PATCH 0/5] add dpdk packet capture support for tcpdump X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jan 2016 13:10:55 -0000 This patch set include design to capture dpdk port packets for tcpdump. This patch set include test-pmd changes to verify patch set given in Dependencies 1. Current patch set is dependent on below patch set. Below patch set must be applied before applying current patch set. Dependencies 1: http://dpdk.org/dev/patchwork/patch/9750/ http://dpdk.org/dev/patchwork/patch/9751/ http://dpdk.org/dev/patchwork/patch/9752/ Dependencies 2: Patches 2/5 and 3/5 of current patch set contains pcap based design. So to run and compile these patches, libpcap must be installed and pcap config option should be set to yes i.e. CONFIG_RTE_LIBRTE_PMD_PCAP=y. packet capture flow for tcpdump: ================================ Part of design is implemented in secondary process (proc_info.c) and some part in primary process (eal_interrupt.c). Communication between both the processes is provided using socket and rte_ring. [Secondary process:] *Changes are included in patch 3/5 *User should request packet capture via proc_info app command line with port, queue and src ip filter information. Note: As initial development basic src filter option only provided. *proc_info sends port, queue and src ip filter information to primary along with register rx tx cbs message. *proc_info creates two pcap devices for writing ingress and egress packets of port and queue. *Runs in a while loop, dequeue packets sent by primary over shared rte_ring and writes to respective pcap files. [Primary Process]: *Changes are included in patch 4/5. *Create rte_rings and mempool used for communicating packets with secondary. *Create socket, waits on socket for message from secondary. *Upon receiving the register rx tx cbs message, registers rte_eth_rxtx_callbacks for receiving ingress and egress packets of given port and queue. *RX callback: Gets packet, apply src ip filter, for matched packets, duplicate packets will be created from mempool and new duplicated packets will be enqueued to rte_ring for secondary to dequeue and write to pcap. *TX callback: Gets packets, apply src ip filter, for matched packets increments reference counter of the packet, enqueue to other rte_ring for secondary to dequeue and write to pcap. [Secondary Process]: *When secondary is terminated with ctrl+c, secondary sends remove rx tx cbs message to primary. *[Primary Process]: *When primary receives remove rx tx cbs message should take care of removing registered rxtx callbacks. Users who wish to view packets can run "tcpdump -r RX_pcap.pcap/TX_pcap.pcap" to view packets of interest. Running the changes: =================== 1)Start any primary sample application. ex:sudo ./examples/rxtx_callbacks/build/rxtx_callbacks -c 0x2 -n 2 2)Start proc_info(runs as secondary process by default)application with new parameters for tcpdump. ex: sudo ./build/app/proc_info/dpdk_proc_info -c 0x4 -n 2 -- -p 0x3 --tcpdump '(0,0)(1,0)' --src-ip-filter="2.2.2.2" 3)Start traffic from traffic generator. 4)Now you can view ingress and egress packets of dpdk ports matching src-ip-filter written to /tmp/RX_pcap.pcap and /tmp/TX_pcap.pcap respectively. 5)Stop the secondary process using ctrl+c and rerun it and packet capturing should resume again. Note: Writing to PCAP files will be stopped once the folder size where pcap files exists reaches its max value. Reshma Pattan (5): app/test-pmd: fix nb_rxq and np_txq checks drivers/net/pcap: add public api to create pcap device app/proc_info: add tcpdump support in secondary process lib/librte_eal: add tcpdump support in primary process doc: enhanced doc for tcpdump feature app/proc_info/main.c | 454 ++++++++++++++++++++++- app/test-pmd/cmdline.c | 11 +- app/test-pmd/parameters.c | 14 +- app/test-pmd/testpmd.c | 19 +- doc/guides/prog_guide/env_abstraction_layer.rst | 29 ++- doc/guides/sample_app_ug/proc_info.rst | 34 ++- drivers/net/pcap/Makefile | 4 +- drivers/net/pcap/rte_eth_pcap.c | 156 +++++++- drivers/net/pcap/rte_eth_pcap.h | 87 +++++ drivers/net/pcap/rte_pmd_pcap_version.map | 8 + lib/librte_eal/linuxapp/eal/Makefile | 5 +- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 376 +++++++++++++++++++- 12 files changed, 1155 insertions(+), 42 deletions(-) create mode 100644 drivers/net/pcap/rte_eth_pcap.h -- 1.7.4.1