From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.tuxdriver.com (charlotte.tuxdriver.com [70.61.120.58]) by dpdk.org (Postfix) with ESMTP id 1DA652906 for ; Sat, 11 Jun 2016 01:23:28 +0200 (CEST) Received: from rrcs-98-101-115-194.midsouth.biz.rr.com ([98.101.115.194] helo=localhost) by smtp.tuxdriver.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.63) (envelope-from ) id 1bBVlo-0002Y3-Lj; Fri, 10 Jun 2016 19:23:26 -0400 Date: Fri, 10 Jun 2016 19:23:20 -0400 From: Neil Horman To: Reshma Pattan Cc: dev@dpdk.org Message-ID: <20160610232319.GA8258@neilslaptop.think-freely.org> References: <1465487895-5870-1-git-send-email-reshma.pattan@intel.com> <1465575534-23605-1-git-send-email-reshma.pattan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1465575534-23605-1-git-send-email-reshma.pattan@intel.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Spam-Score: -1.0 (-) X-Spam-Status: No Subject: Re: [dpdk-dev] [PATCH v8 0/8] add packet capture framework 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, 10 Jun 2016 23:23:28 -0000 On Fri, Jun 10, 2016 at 05:18:46PM +0100, Reshma Pattan wrote: > This patch set include below changes > > 1)Changes to librte_ether. > 2)A new library librte_pdump added for packet capture framework. > 3)A new app/pdump tool added for packet capturing. > 4)Test pmd changes done to initialize packet capture framework. > 5)Documentation update. > > 1)librte_pdump > ============== > To support packet capturing on dpdk Ethernet devices, a new library librte_pdump > is added.Users can develop their own packet capturing application using new library APIs. > > Operation: > ---------- > The librte_pdump provides APIs to support packet capturing on dpdk Ethernet devices. > Library provides APIs to initialize the packet capture framework, enable/disable > the packet capture and uninitialize the packet capture framework. > > The librte_pdump library works on a client/server model. The server is responsible for enabling or > disabling the packet capture and the clients are responsible for requesting the enabling or disabling of > the packet capture. > > The packet capture framework, as part of its initialization, creates the pthread and the server socket in > the pthread. The application that calls the framework initialization will have the server socket created, > either under the path that the application has passed or under the default path i.e. either ''/var/run'' for > root user or ''$HOME'' for non root user. > > Applications that request enabling or disabling of the packet capture will have the client socket created either under > the ''/var/run/'' for root users or ''$HOME'' for not root users to send the requests to the server. > The server socket will listen for client requests for enabling or disabling the packet capture. > > Applications using below APIs need to pass port/device_id, queue, mempool and > ring parameters. Library uses user provided ring and mempool to mirror the rx/tx > packets of the port for users. Users need to dequeue the rings and write the packets > to vdev(pcap/tuntap) to view the packets using any standard tools. > > Note: > Mempool and Ring should be mc/mp supportable. > Mempool mbuf size should be big enough to handle the rx/tx packets of a port. > > APIs: > ----- > rte_pdump_init() > rte_pdump_enable() > rte_pdump_enable_by_deviceid() > rte_pdump_disable() > rte_pdump_disable_by_deviceid() > rte_pdump_uninit() > rte_pdump_set_socket_dir() > > 2)app/pdump tool > ================ > Tool app/pdump is designed based on librte_pdump for packet capturing in DPDK. > This tool by default runs as secondary process, and provides the support for > the command line options for packet capture. > > ./build/app/dpdk_pdump -- > --pdump '(port= | device_id=), > (queue=), > (rx-dev= | > tx-dev=), > [ring-size=], > [mbuf-size=], > [total-num-mbufs=]' > > Parameters inside the parenthesis represents the mandatory parameters. > Parameters inside the square brackets represents optional parameters. > User has to pass on packet capture parameters under --pdump parameters, multiples of > --pdump can be passed to capture packets on different port and queue combinations > > Operation: > ---------- > *Tool parse the user command line arguments, > creates the mempool, ring and the PCAP PMD vdev with 'tx_stream' as either > of the device passed in rx-dev|tx-dev parameters. > > *Then calls the APIs of librte_pdump i.e. rte_pdump_enable()/rte_pdump_enable_by_deviceid() > to enable packet capturing on a specific port/device_id and queue by passing on > port|device_id, queue, mempool and ring info. > > *Tool runs in while loop to dequeue the packets from the ring and write them to pcap device. > > *Tool can be stopped using SIGINT, upon which tool calls > rte_pdump_disable()/rte_pdump_disable_by_deviceid() and free the allocated resources. > > Note: > CONFIG_RTE_LIBRTE_PMD_PCAP flag should be set to yes to compile and run the pdump tool. > > 3)Test-pmd changes > ================== > Changes are done to test-pmd application to initialize/uninitialize the packet capture framework. > So app/pdump tool can be run to see packets of dpdk ports that are used by test-pmd. > > Similarly any application which needs packet capture should call initialize/uninitialize APIs of > librte_pdump and use pdump tool to start the capture. > > 4)Packet capture flow between pdump tool and librte_pdump > ========================================================= > * Pdump tool (Secondary process) requests packet capture > for specific port|device_id and queue combinations. > > *Library in secondary process context creates client socket and communicates > the port|device_id, queue, ring and mempool to server. > > *Library initializes server in primary process 'test-pmd' context and server serves > the client request to enable Ethernet rxtx call-backs for a given port|device_id and queue. > > *Copy the rx/tx packets to passed mempool and enqueue the packets to ring for secondary process. > > *Pdump tool will dequeue the packets from ring and writes them to PCAPMD vdev, > so ultimately packets will be seen on the device that is passed in rx-dev|tx-dev. > > *Once the pdump tool is terminated with SIGINT it will disable the packet capturing. > > *Library receives the disable packet capture request, communicate the info to server, > server will remove the Ethernet rxtx call-backs. > > *Packet capture can be seen using tcpdump command > "tcpdump -ni " (or) "tcpdump –nr " > > 5)Example command line > ====================== > ./build/app/dpdk_pdump -- --pdump 'device_id=0000:02:0.0,queue=*,tx-dev=/tmp/dt-file.pcap,rx-dev=/tmp/dr-file.pcap,ring-size=8192,mbuf-size=2176,total-num-mbufs=32768' --pdump 'device_id=0000:01:00.0,queue=*,rx-dev=/tmp/d-file.pcap,tx-dev=/tmp/d-file.pcap,ring-size=16384,mbuf-size=2176,total-num-mbufs=32768' > > v8: > added server socket argument to rte_pdump_init() API ==> http://dpdk.org/dev/patchwork/patch/13402/ > added rte_pdump_set_socket_dir() API. > updated documentation for new changes. > > v7: > fixed lines over 90 characters. > > v6: > removed below deprecation notice patch from patch set. > http://dpdk.org/dev/patchwork/patch/13372/ > > v5: > addressed code review comments for below patches > http://dpdk.org/dev/patchwork/patch/12955/ > http://dpdk.org/dev/patchwork/patch/12951/ > > v4: > added missing deprecation notice for ABI changes of rte_eth_dev_info structure. > made doc changes as per doc guidelines. > replaced rte_eal_vdev_init with rte_eth_dev_attach in pdump tool. > removed rxtx-dev parameter from pdump tool command line. > > v3: > app/pdump: Moved cleanup code from signal handler to main. > divided librte_ether changes into multiple patches. > example command changed in app/pdump application guide > > v2: > fix compilation issues for 4.8.3 > fix unnecessary #includes > > > Reshma Pattan (8): > librte_ether: protect add/remove of rxtx callbacks with spinlocks > librte_ether: add new api rte_eth_add_first_rx_callback > librte_ether: add new fields to rte_eth_dev_info struct > librte_ether: make rte_eth_dev_get_port_by_name > rte_eth_dev_get_name_by_port public > lib/librte_pdump: add new library for packet capturing support > app/pdump: add pdump tool for packet capturing > app/test-pmd: add pdump initialization uninitialization > doc: update doc for packet capture framework > > MAINTAINERS | 8 + > app/Makefile | 1 + > app/pdump/Makefile | 45 ++ > app/pdump/main.c | 844 +++++++++++++++++++++++++++++ > app/test-pmd/testpmd.c | 6 + > config/common_base | 5 + > doc/guides/prog_guide/index.rst | 1 + > doc/guides/prog_guide/pdump_library.rst | 117 +++++ > doc/guides/rel_notes/release_16_07.rst | 13 + > doc/guides/sample_app_ug/index.rst | 1 + > doc/guides/sample_app_ug/pdump.rst | 122 +++++ > lib/Makefile | 1 + > lib/librte_ether/rte_ethdev.c | 123 +++-- > lib/librte_ether/rte_ethdev.h | 60 +++ > lib/librte_ether/rte_ether_version.map | 9 + > lib/librte_pdump/Makefile | 55 ++ > lib/librte_pdump/rte_pdump.c | 904 ++++++++++++++++++++++++++++++++ > lib/librte_pdump/rte_pdump.h | 208 ++++++++ > lib/librte_pdump/rte_pdump_version.map | 13 + > mk/rte.app.mk | 1 + > 20 files changed, 2493 insertions(+), 44 deletions(-) > create mode 100644 app/pdump/Makefile > create mode 100644 app/pdump/main.c > create mode 100644 doc/guides/prog_guide/pdump_library.rst > create mode 100644 doc/guides/sample_app_ug/pdump.rst > create mode 100644 lib/librte_pdump/Makefile > create mode 100644 lib/librte_pdump/rte_pdump.c > create mode 100644 lib/librte_pdump/rte_pdump.h > create mode 100644 lib/librte_pdump/rte_pdump_version.map > > Acked-by: Konstantin Ananyev > -- > 2.5.0 > > This seems useful, but the pcap pmd already accepts pcap formatted files for input to send using the pcap library. Shouldn't this functionality be integrated with that pmd instead of breaking it out to its own library? Neil