2017-12-19 15:49:03 +00:00
|
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# Copyright(c) 2010-2017 Intel Corporation
|
2012-09-04 12:54:00 +00:00
|
|
|
|
|
|
|
include $(RTE_SDK)/mk/rte.vars.mk
|
|
|
|
|
2018-07-11 21:44:54 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_KVARGS) += librte_kvargs
|
2020-04-30 16:01:34 +00:00
|
|
|
DIRS-y += librte_telemetry
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_EAL) += librte_eal
|
2020-04-30 16:01:34 +00:00
|
|
|
DEPDIRS-librte_eal := librte_kvargs librte_telemetry
|
2017-10-26 10:06:08 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_PCI) += librte_pci
|
|
|
|
DEPDIRS-librte_pci := librte_eal
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_RING) += librte_ring
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_ring := librte_eal
|
2019-04-03 23:20:13 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_STACK) += librte_stack
|
|
|
|
DEPDIRS-librte_stack := librte_eal
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_MEMPOOL) += librte_mempool
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_mempool := librte_eal librte_ring
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_MBUF) += librte_mbuf
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_mbuf := librte_eal librte_mempool
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_TIMER) += librte_timer
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_timer := librte_eal
|
2014-06-04 18:08:36 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_CFGFILE) += librte_cfgfile
|
2019-07-18 17:18:11 +00:00
|
|
|
DEPDIRS-librte_cfgfile := librte_eal
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += librte_cmdline
|
2019-07-05 17:16:20 +00:00
|
|
|
DEPDIRS-librte_cmdline := librte_eal librte_net
|
2018-04-26 21:25:59 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_ETHER) += librte_ethdev
|
|
|
|
DEPDIRS-librte_ethdev := librte_net librte_eal librte_mempool librte_ring
|
|
|
|
DEPDIRS-librte_ethdev += librte_mbuf
|
|
|
|
DEPDIRS-librte_ethdev += librte_kvargs
|
2018-12-20 12:16:08 +00:00
|
|
|
DEPDIRS-librte_ethdev += librte_meter
|
2018-01-11 19:23:18 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_BBDEV) += librte_bbdev
|
|
|
|
DEPDIRS-librte_bbdev := librte_eal librte_mempool librte_mbuf
|
2015-11-25 13:25:12 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += librte_cryptodev
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_cryptodev := librte_eal librte_mempool librte_ring librte_mbuf
|
|
|
|
DEPDIRS-librte_cryptodev += librte_kvargs
|
2017-10-25 15:07:23 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_SECURITY) += librte_security
|
|
|
|
DEPDIRS-librte_security := librte_eal librte_mempool librte_ring librte_mbuf
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_security += librte_ethdev
|
2017-10-25 15:07:23 +00:00
|
|
|
DEPDIRS-librte_security += librte_cryptodev
|
2018-04-27 13:23:54 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += librte_compressdev
|
|
|
|
DEPDIRS-librte_compressdev := librte_eal librte_mempool librte_ring librte_mbuf
|
|
|
|
DEPDIRS-librte_compressdev += librte_kvargs
|
regexdev: introduce API
As RegEx usage become more used by DPDK applications, for example:
* Next Generation Firewalls (NGFW)
* Deep Packet and Flow Inspection (DPI)
* Intrusion Prevention Systems (IPS)
* DDoS Mitigation
* Network Monitoring
* Data Loss Prevention (DLP)
* Smart NICs
* Grammar based content processing
* URL, spam and adware filtering
* Advanced auditing and policing of user/application security policies
* Financial data mining - parsing of streamed financial feeds
* Application recognition.
* Dmemory introspection.
* Natural Language Processing (NLP)
* Sentiment Analysis.
* Big data database acceleration.
* Computational storage.
Number of PMD providers started to work on HW implementation,
along side with SW implementations.
This lib adds the support for those kind of devices.
The RegEx Device API is composed of two parts:
- The application-oriented RegEx API that includes functions to setup
a RegEx device (configure it, setup its queue pairs and start it),
update the rule database and so on.
- The driver-oriented RegEx API that exports a function allowing
a RegEx poll Mode Driver (PMD) to simultaneously register itself as
a RegEx device driver.
RegEx device components and definitions:
+-----------------+
| |
| o---------+ rte_regexdev_[en|de]queue_burst()
| PCRE based o------+ | |
| RegEx pattern | | | +--------+ |
| matching engine o------+--+--o | | +------+
| | | | | queue |<==o===>|Core 0|
| o----+ | | | pair 0 | | |
| | | | | +--------+ +------+
+-----------------+ | | |
^ | | | +--------+
| | | | | | +------+
| | +--+--o queue |<======>|Core 1|
Rule|Database | | | pair 1 | | |
+------+----------+ | | +--------+ +------+
| Group 0 | | |
| +-------------+ | | | +--------+ +------+
| | Rules 0..n | | | | | | |Core 2|
| +-------------+ | | +--o queue |<======>| |
| Group 1 | | | pair 2 | +------+
| +-------------+ | | +--------+
| | Rules 0..n | | |
| +-------------+ | | +--------+
| Group 2 | | | | +------+
| +-------------+ | | | queue |<======>|Core n|
| | Rules 0..n | | +-------o pair n | | |
| +-------------+ | +--------+ +------+
| Group n |
| +-------------+ |<-------rte_regexdev_rule_db_update()
| | | |<-------rte_regexdev_rule_db_compile_activate()
| | Rules 0..n | |<-------rte_regexdev_rule_db_import()
| +-------------+ |------->rte_regexdev_rule_db_export()
+-----------------+
RegEx: A regular expression is a concise and flexible means for matching
strings of text, such as particular characters, words, or patterns of
characters. A common abbreviation for this is â~@~\RegExâ~@~].
RegEx device: A hardware or software-based implementation of RegEx
device API for PCRE based pattern matching syntax and semantics.
PCRE RegEx syntax and semantics specification:
http://regexkit.sourceforge.net/Documentation/pcre/pcrepattern.html
RegEx queue pair: Each RegEx device should have one or more queue pair to
transmit a burst of pattern matching request and receive a burst of
receive the pattern matching response. The pattern matching
request/response embedded in *rte_regex_ops* structure.
Rule: A pattern matching rule expressed in PCRE RegEx syntax along with
Match ID and Group ID to identify the rule upon the match.
Rule database: The RegEx device accepts regular expressions and converts
them into a compiled rule database that can then be used to scan data.
Compilation allows the device to analyze the given pattern(s) and
pre-determine how to scan for these patterns in an optimized fashion that
would be far too expensive to compute at run-time. A rule database
contains a set of rules that compiled in device specific binary form.
Match ID or Rule ID: A unique identifier provided at the time of rule
creation for the application to identify the rule upon match.
Group ID: Group of rules can be grouped under one group ID to enable
rule isolation and effective pattern matching. A unique group identifier
provided at the time of rule creation for the application to identify
the rule upon match.
Scan: A pattern matching request through *enqueue* API.
It may possible that a given RegEx device may not support all the
features
of PCRE. The application may probe unsupported features through
struct rte_regexdev_info::pcre_unsup_flags
By default, all the functions of the RegEx Device API exported by a PMD
are lock-free functions which assume to not be invoked in parallel on
different logical cores to work on the same target object. For instance,
the dequeue function of a PMD cannot be invoked in parallel on two logical
cores to operates on same RegEx queue pair. Of course, this function
can be invoked in parallel by different logical core on different queue
pair. It is the responsibility of the upper level application to
enforce this rule.
In all functions of the RegEx API, the RegEx device is
designated by an integer >= 0 named the device identifier *dev_id*
At the RegEx driver level, RegEx devices are represented by a generic
data structure of type *rte_regexdev*.
RegEx devices are dynamically registered during the PCI/SoC device
probing phase performed at EAL initialization time.
When a RegEx device is being probed, a *rte_regexdev* structure and
a new device identifier are allocated for that device. Then, the
regexdev_init() function supplied by the RegEx driver matching the
probed device is invoked to properly initialize the device.
The role of the device init function consists of resetting the hardware
or software RegEx driver implementations.
If the device init operation is successful, the correspondence between
the device identifier assigned to the new device and its associated
*rte_regexdev* structure is effectively registered.
Otherwise, both the *rte_regexdev* structure and the device identifier
are freed.
The functions exported by the application RegEx API to setup a device
designated by its device identifier must be invoked in the following
order:
- rte_regexdev_configure()
- rte_regexdev_queue_pair_setup()
- rte_regexdev_start()
Then, the application can invoke, in any order, the functions
exported by the RegEx API to enqueue pattern matching job, dequeue
pattern matching response, get the stats, update the rule database,
get/set device attributes and so on
If the application wants to change the configuration (i.e. call
rte_regexdev_configure() or rte_regexdev_queue_pair_setup()), it must
call rte_regexdev_stop() first to stop the device and then do the
reconfiguration before calling rte_regexdev_start() again. The enqueue and
dequeue functions should not be invoked when the device is stopped.
Finally, an application can close a RegEx device by invoking the
rte_regexdev_close() function.
Each function of the application RegEx API invokes a specific function
of the PMD that controls the target device designated by its device
identifier.
For this purpose, all device-specific functions of a RegEx driver are
supplied through a set of pointers contained in a generic structure of
type *regexdev_ops*.
The address of the *regexdev_ops* structure is stored in the
*rte_regexdev* structure by the device init function of the RegEx driver,
which is invoked during the PCI/SoC device probing phase, as explained
earlier.
In other words, each function of the RegEx API simply retrieves the
*rte_regexdev* structure associated with the device identifier and
performs an indirect invocation of the corresponding driver function
supplied in the *regexdev_ops* structure of the *rte_regexdev*
structure.
For performance reasons, the address of the fast-path functions of the
RegEx driver is not contained in the *regexdev_ops* structure.
Instead, they are directly stored at the beginning of the *rte_regexdev*
structure to avoid an extra indirect memory access during their
invocation.
RTE RegEx device drivers do not use interrupts for enqueue or dequeue
operation. Instead, RegEx drivers export Poll-Mode enqueue and dequeue
functions to applications.
The *enqueue* operation submits a burst of RegEx pattern matching
request to the RegEx device and the *dequeue* operation gets a burst of
pattern matching response for the ones submitted through *enqueue*
operation.
Typical application utilisation of the RegEx device API will follow the
following programming flow.
- rte_regexdev_configure()
- rte_regexdev_queue_pair_setup()
- rte_regexdev_rule_db_update() Needs to invoke if precompiled rule
database not
provided in rte_regexdev_config::rule_db for rte_regexdev_configure()
and/or application needs to update rule database.
- rte_regexdev_rule_db_compile_activate() Needs to invoke if
rte_regexdev_rule_db_update function was used.
- Create or reuse exiting mempool for *rte_regex_ops* objects.
- rte_regexdev_start()
- rte_regexdev_enqueue_burst()
- rte_regexdev_dequeue_burst()
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Signed-off-by: Ori Kam <orika@mellanox.com>
2020-07-06 17:36:46 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_REGEXDEV) += librte_regexdev
|
|
|
|
DEPDIRS-librte_regexdev := librte_eal librte_mbuf
|
2016-12-06 01:51:46 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_EVENTDEV) += librte_eventdev
|
2018-05-09 08:17:58 +00:00
|
|
|
DEPDIRS-librte_eventdev := librte_eal librte_ring librte_ethdev librte_hash \
|
|
|
|
librte_mempool librte_timer librte_cryptodev
|
rawdev: introduce raw device library
Each device in DPDK has a type associated with it - ethernet, crypto,
event etc. This patch introduces 'rawdevice' which is a generic
type of device, not currently handled out-of-the-box by DPDK.
A device which can be scanned on an installed bus (pci, fslmc, ...)
or instantiated through devargs, can be interfaced using
standardized APIs just like other standardized devices.
This library introduces an API set which can be plugged on the
northbound side to the application layer, and on the southbound side
to the driver layer.
The APIs of rawdev library exposes some generic operations which can
enable configuration and I/O with the raw devices. Using opaque
data (pointer) as API arguments, library allows a high flexibility
for application and driver implementation.
This patch introduces basic device operations like start, stop, reset,
queue and info support.
Subsequent patches would introduce other operations like buffer
enqueue/dequeue and firmware support.
Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
2018-01-31 09:13:09 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_RAWDEV) += librte_rawdev
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_rawdev := librte_eal librte_ethdev
|
2014-10-08 18:54:59 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_VHOST) += librte_vhost
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_vhost := librte_eal librte_mempool librte_mbuf librte_ethdev \
|
2020-06-26 14:04:31 +00:00
|
|
|
librte_net librte_hash librte_cryptodev
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_HASH) += librte_hash
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_hash := librte_eal librte_ring
|
2017-01-17 22:23:51 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_EFD) += librte_efd
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_efd := librte_eal librte_ring librte_hash
|
2019-11-01 15:21:34 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_RIB) += librte_rib
|
|
|
|
DEPDIRS-librte_rib := librte_eal librte_mempool
|
2019-11-01 15:21:38 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_FIB) += librte_fib
|
|
|
|
DEPDIRS-librte_fib := librte_eal librte_rib
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_LPM) += librte_lpm
|
2018-09-18 10:57:09 +00:00
|
|
|
DEPDIRS-librte_lpm := librte_eal librte_hash
|
2014-06-13 11:26:50 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_ACL) += librte_acl
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_acl := librte_eal
|
2017-10-04 03:12:19 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_MEMBER) += librte_member
|
|
|
|
DEPDIRS-librte_member := librte_eal librte_hash
|
2012-09-04 12:54:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_NET) += librte_net
|
2017-04-05 20:49:49 +00:00
|
|
|
DEPDIRS-librte_net := librte_mbuf librte_eal
|
2014-05-28 17:32:35 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += librte_ip_frag
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_ip_frag := librte_eal librte_mempool librte_mbuf librte_ethdev
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_ip_frag += librte_hash
|
lib/gro: add Generic Receive Offload API framework
Generic Receive Offload (GRO) is a widely used SW-based offloading
technique to reduce per-packet processing overhead. It gains
performance by reassembling small packets into large ones. This
patchset is to support GRO in DPDK. To support GRO, this patch
implements a GRO API framework.
To enable more flexibility to applications, DPDK GRO is implemented as
a user library. Applications explicitly use the GRO library to merge
small packets into large ones. DPDK GRO provides two reassembly modes.
One is called lightweight mode, the other is called heavyweight mode.
If applications want to merge packets in a simple way and the number
of packets is relatively small, they can use the lightweight mode.
If applications need more fine-grained controls, they can choose the
heavyweight mode.
rte_gro_reassemble_burst is the main reassembly API which is used in
lightweight mode and processes N packets at a time. For applications,
performing GRO in lightweight mode is simple. They just need to invoke
rte_gro_reassemble_burst. Applications can get GROed packets as soon as
rte_gro_reassemble_burst returns.
rte_gro_reassemble is the main reassembly API which is used in
heavyweight mode and tries to merge N inputted packets with the packets
in GRO reassembly tables. For applications, performing GRO in heavyweight
mode is relatively complicated. Before performing GRO, applications need
to create a GRO context object, which keeps reassembly tables of
desired GRO types, by rte_gro_ctx_create. Then applications can use
rte_gro_reassemble to merge packets. The GROed packets are in the
reassembly tables of the GRO context object. If applications want to get
them, applications need to manually flush them by flush API.
Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Reviewed-by: Jianfeng Tan <jianfeng.tan@intel.com>
2017-07-09 05:46:44 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_GRO) += librte_gro
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_gro := librte_eal librte_mbuf librte_ethdev librte_net
|
2015-02-24 16:33:23 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_JOBSTATS) += librte_jobstats
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_jobstats := librte_eal
|
2017-03-30 21:00:57 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_METRICS) += librte_metrics
|
2020-04-30 16:01:21 +00:00
|
|
|
DEPDIRS-librte_metrics := librte_eal librte_ethdev
|
2020-04-30 16:01:23 +00:00
|
|
|
ifeq ($(CONFIG_RTE_LIBRTE_TELEMETRY),y)
|
|
|
|
DEPDIRS-librte_metrics += librte_telemetry
|
|
|
|
endif
|
2017-03-30 21:00:59 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_BITRATE) += librte_bitratestats
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_bitratestats := librte_eal librte_metrics librte_ethdev
|
2017-03-30 21:01:01 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_LATENCY_STATS) += librte_latencystats
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_latencystats := librte_eal librte_metrics librte_ethdev librte_mbuf
|
2013-06-03 00:00:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_POWER) += librte_power
|
2018-10-26 12:38:24 +00:00
|
|
|
DEPDIRS-librte_power := librte_eal librte_timer
|
2013-06-03 00:00:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_METER) += librte_meter
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_meter := librte_eal
|
2017-10-24 17:28:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_FLOW_CLASSIFY) += librte_flow_classify
|
|
|
|
DEPDIRS-librte_flow_classify := librte_net librte_table librte_acl
|
2013-06-03 00:00:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_SCHED) += librte_sched
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_sched := librte_eal librte_mempool librte_mbuf librte_net
|
|
|
|
DEPDIRS-librte_sched += librte_timer
|
2014-05-29 10:12:14 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += librte_distributor
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_distributor := librte_eal librte_mbuf librte_ethdev
|
2014-06-04 18:08:19 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_PORT) += librte_port
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_port := librte_eal librte_mempool librte_mbuf librte_ethdev
|
2019-11-06 14:43:20 +00:00
|
|
|
DEPDIRS-librte_port += librte_ip_frag librte_sched librte_eventdev
|
2017-03-30 12:32:28 +00:00
|
|
|
ifeq ($(CONFIG_RTE_LIBRTE_KNI),y)
|
|
|
|
DEPDIRS-librte_port += librte_kni
|
|
|
|
endif
|
2014-06-04 18:08:27 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_TABLE) += librte_table
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_table := librte_eal librte_mempool librte_mbuf
|
2017-03-30 12:32:28 +00:00
|
|
|
DEPDIRS-librte_table += librte_port librte_lpm librte_hash
|
|
|
|
ifeq ($(CONFIG_RTE_LIBRTE_ACL),y)
|
|
|
|
DEPDIRS-librte_table += librte_acl
|
|
|
|
endif
|
2014-06-04 18:08:35 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) += librte_pipeline
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_pipeline := librte_eal librte_mempool librte_mbuf
|
|
|
|
DEPDIRS-librte_pipeline += librte_table librte_port
|
2015-02-18 14:58:13 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_REORDER) += librte_reorder
|
2017-03-24 13:21:31 +00:00
|
|
|
DEPDIRS-librte_reorder := librte_eal librte_mempool librte_mbuf
|
pdump: add new library for packet capture
The librte_pdump library provides a framework for
packet capturing in dpdk. The library provides set of
APIs to initialize the packet capture framework, to
enable or disable the packet capture, and to uninitialize
it.
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.
Enabling APIs are supported with port, queue, ring and
mempool parameters. Applications should pass on this information
to get the packets from the dpdk ports.
For enabling requests from applications, library creates the client
request containing the mempool, ring, port and queue information and
sends the request to the server. After receiving the request, server
registers the Rx and Tx callbacks for all the port and queues.
After the callbacks registration, registered callbacks will get the
Rx and Tx packets. Packets then will be copied to the new mbufs that
are allocated from the user passed mempool. These new mbufs then will
be enqueued to the application passed ring. Applications need to dequeue
the mbufs from the rings and direct them to the devices like
pcap vdev for viewing the packets outside of the dpdk
using the packet capture tools.
For disabling requests, library creates the client request containing
the port and queue information and sends the request to the server.
After receiving the request, server removes the Rx and Tx callback
for all the port and queues.
Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
2016-06-15 14:06:22 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_PDUMP) += librte_pdump
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_pdump := librte_eal librte_mempool librte_mbuf librte_ethdev
|
gso: add Generic Segmentation Offload API framework
Generic Segmentation Offload (GSO) is a SW technique to split large
packets into small ones. Akin to TSO, GSO enables applications to
operate on large packets, thus reducing per-packet processing overhead.
To enable more flexibility to applications, DPDK GSO is implemented
as a standalone library. Applications explicitly use the GSO library
to segment packets. To segment a packet requires two steps. The first
is to set proper flags to mbuf->ol_flags, where the flags are the same
as that of TSO. The second is to call the segmentation API,
rte_gso_segment(). This patch introduces the GSO API framework to DPDK.
rte_gso_segment() splits an input packet into small ones in each
invocation. The GSO library refers to these small packets generated
by rte_gso_segment() as GSO segments. Each of the newly-created GSO
segments is organized as a two-segment MBUF, where the first segment is a
standard MBUF, which stores a copy of packet header, and the second is an
indirect MBUF which points to a section of data in the input packet.
rte_gso_segment() reduces the refcnt of the input packet by 1. Therefore,
when all GSO segments are freed, the input packet is freed automatically.
Additionally, since each GSO segment has multiple MBUFs (i.e. 2 MBUFs),
the driver of the interface which the GSO segments are sent to should
support to transmit multi-segment packets.
The GSO framework clears the PKT_TX_TCP_SEG flag for both the input
packet, and all produced GSO segments in the event of success, since
segmentation in hardware is no longer required at that point.
Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
2017-10-07 14:56:39 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_GSO) += librte_gso
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_gso := librte_eal librte_mbuf librte_ethdev librte_net
|
2017-10-12 16:04:21 +00:00
|
|
|
DEPDIRS-librte_gso += librte_mempool
|
2018-05-10 10:23:03 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_BPF) += librte_bpf
|
|
|
|
DEPDIRS-librte_bpf := librte_eal librte_mempool librte_mbuf librte_ethdev
|
2019-01-10 21:06:28 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_IPSEC) += librte_ipsec
|
2019-06-24 13:39:58 +00:00
|
|
|
DEPDIRS-librte_ipsec := librte_eal librte_mbuf librte_cryptodev librte_security \
|
2020-04-16 11:25:17 +00:00
|
|
|
librte_net librte_hash
|
2019-05-01 03:54:16 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_RCU) += librte_rcu
|
2020-04-22 03:30:03 +00:00
|
|
|
DEPDIRS-librte_rcu := librte_eal librte_ring
|
2012-09-04 12:54:00 +00:00
|
|
|
|
2020-04-11 14:14:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_GRAPH) += librte_graph
|
|
|
|
DEPDIRS-librte_graph := librte_eal
|
|
|
|
|
2020-04-11 14:14:14 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_NODE) += librte_node
|
|
|
|
DEPDIRS-librte_node := librte_graph librte_lpm librte_ethdev librte_mbuf
|
|
|
|
|
2019-03-06 16:22:39 +00:00
|
|
|
ifeq ($(CONFIG_RTE_EXEC_ENV_LINUX),y)
|
2012-12-19 23:00:00 +00:00
|
|
|
DIRS-$(CONFIG_RTE_LIBRTE_KNI) += librte_kni
|
|
|
|
endif
|
2018-04-26 21:25:59 +00:00
|
|
|
DEPDIRS-librte_kni := librte_eal librte_mempool librte_mbuf librte_ethdev
|
2017-12-12 18:39:56 +00:00
|
|
|
DEPDIRS-librte_kni += librte_pci
|
2012-12-19 23:00:00 +00:00
|
|
|
|
2012-09-04 12:54:00 +00:00
|
|
|
include $(RTE_SDK)/mk/rte.subdir.mk
|