From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id CBC3B95B5 for ; Fri, 12 Feb 2016 15:57:27 +0100 (CET) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP; 12 Feb 2016 06:57:26 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,436,1449561600"; d="scan'208";a="901553436" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga001.fm.intel.com with ESMTP; 12 Feb 2016 06:57:26 -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 u1CEvPEm010335 for ; Fri, 12 Feb 2016 14:57:25 GMT Received: from sivswdev02.ir.intel.com (localhost [127.0.0.1]) by sivswdev02.ir.intel.com with ESMTP id u1CEvPVj025959 for ; Fri, 12 Feb 2016 14:57:25 GMT Received: (from reshmapa@localhost) by sivswdev02.ir.intel.com with id u1CEvP9b025955 for dev@dpdk.org; Fri, 12 Feb 2016 14:57:25 GMT From: Reshma Pattan To: dev@dpdk.org Date: Fri, 12 Feb 2016 14:57:20 +0000 Message-Id: <1455289045-25915-1-git-send-email-reshma.pattan@intel.com> X-Mailer: git-send-email 1.7.4.1 Subject: [dpdk-dev] [PATCH v2 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, 12 Feb 2016 14:57:28 -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. v2: * extended nb_rxq/nb_txq check to other fwd modes along with rx_only and tx_only. * changed some of the global variables to static in proc_info/main.c and eal_interrupts.c. * release notes updated. 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: update doc for tcpdump feature app/proc_info/main.c | 451 +++++++++++++++++++++++++- app/test-pmd/cmdline.c | 11 +- app/test-pmd/parameters.c | 14 +- app/test-pmd/testpmd.c | 28 ++- doc/guides/rel_notes/release_16_04.rst | 9 +- 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 | 375 +++++++++++++++++++++- 11 files changed, 1105 insertions(+), 43 deletions(-) create mode 100644 drivers/net/pcap/rte_eth_pcap.h -- 1.7.4.1