DPDK
17.11.10
|
#include <rte_arp.h>
#include <rte_ether.h>
#include <rte_icmp.h>
#include <rte_ip.h>
#include <rte_sctp.h>
#include <rte_tcp.h>
#include <rte_udp.h>
#include <rte_byteorder.h>
#include <rte_esp.h>
Go to the source code of this file.
Data Structures | |
struct | rte_flow_attr |
struct | rte_flow_item_any |
struct | rte_flow_item_vf |
struct | rte_flow_item_port |
struct | rte_flow_item_raw |
struct | rte_flow_item_eth |
struct | rte_flow_item_vlan |
struct | rte_flow_item_ipv4 |
struct | rte_flow_item_ipv6 |
struct | rte_flow_item_icmp |
struct | rte_flow_item_udp |
struct | rte_flow_item_tcp |
struct | rte_flow_item_sctp |
struct | rte_flow_item_vxlan |
struct | rte_flow_item_e_tag |
struct | rte_flow_item_nvgre |
struct | rte_flow_item_mpls |
struct | rte_flow_item_gre |
struct | rte_flow_item_fuzzy |
struct | rte_flow_item_gtp |
struct | rte_flow_item_esp |
struct | rte_flow_item |
struct | rte_flow_action_mark |
struct | rte_flow_action_queue |
struct | rte_flow_query_count |
struct | rte_flow_action_dup |
struct | rte_flow_action_rss |
struct | rte_flow_action_vf |
struct | rte_flow_action_meter |
struct | rte_flow_action_security |
struct | rte_flow_action |
struct | rte_flow_error |
struct | rte_flow_desc |
Functions | |
int | rte_flow_validate (uint16_t port_id, const struct rte_flow_attr *attr, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], struct rte_flow_error *error) |
struct rte_flow * | rte_flow_create (uint16_t port_id, const struct rte_flow_attr *attr, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], struct rte_flow_error *error) |
int | rte_flow_destroy (uint16_t port_id, struct rte_flow *flow, struct rte_flow_error *error) |
int | rte_flow_flush (uint16_t port_id, struct rte_flow_error *error) |
int | rte_flow_query (uint16_t port_id, struct rte_flow *flow, enum rte_flow_action_type action, void *data, struct rte_flow_error *error) |
int | rte_flow_isolate (uint16_t port_id, int set, struct rte_flow_error *error) |
int | rte_flow_error_set (struct rte_flow_error *error, int code, enum rte_flow_error_type type, const void *cause, const char *message) |
size_t | rte_flow_copy (struct rte_flow_desc *fd, size_t len, const struct rte_flow_attr *attr, const struct rte_flow_item *items, const struct rte_flow_action *actions) |
RTE generic flow API
This interface provides the ability to program packet matching and associated actions in hardware through flow rules.
Definition in file rte_flow.h.
enum rte_flow_item_type |
Matching pattern item types.
Pattern items fall in two categories:
See the description of individual types for more information. Those marked with [META] fall into the second category.
Enumerator | |
---|---|
RTE_FLOW_ITEM_TYPE_END |
[META] End marker for item lists. Prevents further processing of items, thereby ending the pattern. No associated specification structure. |
RTE_FLOW_ITEM_TYPE_VOID |
[META] Used as a placeholder for convenience. It is ignored and simply discarded by PMDs. No associated specification structure. |
RTE_FLOW_ITEM_TYPE_INVERT |
[META] Inverted matching, i.e. process packets that do not match the pattern. No associated specification structure. |
RTE_FLOW_ITEM_TYPE_ANY |
Matches any protocol in place of the current layer, a single ANY may also stand for several protocol layers. See struct rte_flow_item_any. |
RTE_FLOW_ITEM_TYPE_PF |
[META] Matches packets addressed to the physical function of the device. If the underlying device function differs from the one that would normally receive the matched traffic, specifying this item prevents it from reaching that device unless the flow rule contains a PF action. Packets are not duplicated between device instances by default. No associated specification structure. |
RTE_FLOW_ITEM_TYPE_VF |
[META] Matches packets addressed to a virtual function ID of the device. If the underlying device function differs from the one that would normally receive the matched traffic, specifying this item prevents it from reaching that device unless the flow rule contains a VF action. Packets are not duplicated between device instances by default. See struct rte_flow_item_vf. |
RTE_FLOW_ITEM_TYPE_PORT |
[META] Matches packets coming from the specified physical port of the underlying device. The first PORT item overrides the physical port normally associated with the specified DPDK input port (port_id). This item can be provided several times to match additional physical ports. See struct rte_flow_item_port. |
RTE_FLOW_ITEM_TYPE_RAW |
Matches a byte string of a given length at a given offset. See struct rte_flow_item_raw. |
RTE_FLOW_ITEM_TYPE_ETH |
Matches an Ethernet header. See struct rte_flow_item_eth. |
RTE_FLOW_ITEM_TYPE_VLAN |
Matches an 802.1Q/ad VLAN tag. See struct rte_flow_item_vlan. |
RTE_FLOW_ITEM_TYPE_IPV4 |
Matches an IPv4 header. See struct rte_flow_item_ipv4. |
RTE_FLOW_ITEM_TYPE_IPV6 |
Matches an IPv6 header. See struct rte_flow_item_ipv6. |
RTE_FLOW_ITEM_TYPE_ICMP |
Matches an ICMP header. See struct rte_flow_item_icmp. |
RTE_FLOW_ITEM_TYPE_UDP |
Matches a UDP header. See struct rte_flow_item_udp. |
RTE_FLOW_ITEM_TYPE_TCP |
Matches a TCP header. See struct rte_flow_item_tcp. |
RTE_FLOW_ITEM_TYPE_SCTP |
Matches a SCTP header. See struct rte_flow_item_sctp. |
RTE_FLOW_ITEM_TYPE_VXLAN |
Matches a VXLAN header. See struct rte_flow_item_vxlan. |
RTE_FLOW_ITEM_TYPE_E_TAG |
Matches a E_TAG header. See struct rte_flow_item_e_tag. |
RTE_FLOW_ITEM_TYPE_NVGRE |
Matches a NVGRE header. See struct rte_flow_item_nvgre. |
RTE_FLOW_ITEM_TYPE_MPLS |
Matches a MPLS header. See struct rte_flow_item_mpls. |
RTE_FLOW_ITEM_TYPE_GRE |
Matches a GRE header. See struct rte_flow_item_gre. |
RTE_FLOW_ITEM_TYPE_FUZZY |
[META] Fuzzy pattern match, expect faster than default. This is for device that support fuzzy matching option. Usually a fuzzy matching is fast but the cost is accuracy. See struct rte_flow_item_fuzzy. |
RTE_FLOW_ITEM_TYPE_GTP |
Matches a GTP header. Configure flow for GTP packets. See struct rte_flow_item_gtp. |
RTE_FLOW_ITEM_TYPE_GTPC |
Matches a GTP header. Configure flow for GTP-C packets. See struct rte_flow_item_gtp. |
RTE_FLOW_ITEM_TYPE_GTPU |
Matches a GTP header. Configure flow for GTP-U packets. See struct rte_flow_item_gtp. |
RTE_FLOW_ITEM_TYPE_ESP |
Matches a ESP header. See struct rte_flow_item_esp. |
Definition at line 120 of file rte_flow.h.
enum rte_flow_action_type |
Action types.
Each possible action is represented by a type. Some have associated configuration structures. Several actions combined in a list can be affected to a flow rule. That list is not ordered.
They fall in three categories:
When several actions are combined in a flow rule, they should all have different types (e.g. dropping a packet twice is not possible).
Only the last action of a given type is taken into account. PMDs still perform error checking on the entire list.
Note that PASSTHRU is the only action able to override a terminating rule.
Enumerator | |
---|---|
RTE_FLOW_ACTION_TYPE_END |
[META] End marker for action lists. Prevents further processing of actions, thereby ending the list. No associated configuration structure. |
RTE_FLOW_ACTION_TYPE_VOID |
[META] Used as a placeholder for convenience. It is ignored and simply discarded by PMDs. No associated configuration structure. |
RTE_FLOW_ACTION_TYPE_PASSTHRU |
Leaves packets up for additional processing by subsequent flow rules. This is the default when a rule does not contain a terminating action, but can be specified to force a rule to become non-terminating. No associated configuration structure. |
RTE_FLOW_ACTION_TYPE_MARK |
[META] Attaches an integer value to packets and sets PKT_RX_FDIR and PKT_RX_FDIR_ID mbuf flags. See struct rte_flow_action_mark. |
RTE_FLOW_ACTION_TYPE_FLAG |
[META] Flags packets. Similar to MARK without a specific value; only sets the PKT_RX_FDIR mbuf flag. No associated configuration structure. |
RTE_FLOW_ACTION_TYPE_QUEUE |
Assigns packets to a given queue index. See struct rte_flow_action_queue. |
RTE_FLOW_ACTION_TYPE_DROP |
Drops packets. PASSTHRU overrides this action if both are specified. No associated configuration structure. |
RTE_FLOW_ACTION_TYPE_COUNT |
[META] Enables counters for this rule. These counters can be retrieved and reset through rte_flow_query(), see struct rte_flow_query_count. No associated configuration structure. |
RTE_FLOW_ACTION_TYPE_DUP |
Duplicates packets to a given queue index. This is normally combined with QUEUE, however when used alone, it is actually similar to QUEUE + PASSTHRU. See struct rte_flow_action_dup. |
RTE_FLOW_ACTION_TYPE_RSS |
Similar to QUEUE, except RSS is additionally performed on packets to spread them among several queues according to the provided parameters. See struct rte_flow_action_rss. |
RTE_FLOW_ACTION_TYPE_PF |
Redirects packets to the physical function (PF) of the current device. No associated configuration structure. |
RTE_FLOW_ACTION_TYPE_VF |
Redirects packets to the virtual function (VF) of the current device with the specified ID. See struct rte_flow_action_vf. |
RTE_FLOW_ACTION_TYPE_METER |
Traffic metering and policing (MTR). See struct rte_flow_action_meter. See file rte_mtr.h for MTR object configuration. |
RTE_FLOW_ACTION_TYPE_SECURITY |
Redirects packets to security engine of current device for security processing as specified by security session. See struct rte_flow_action_security. |
Definition at line 883 of file rte_flow.h.
enum rte_flow_error_type |
Verbose error types.
Most of them provide the type of the object referenced by struct rte_flow_error.cause.
Definition at line 1175 of file rte_flow.h.
int rte_flow_validate | ( | uint16_t | port_id, |
const struct rte_flow_attr * | attr, | ||
const struct rte_flow_item | pattern[], | ||
const struct rte_flow_action | actions[], | ||
struct rte_flow_error * | error | ||
) |
Check whether a flow rule can be created on a given port.
The flow rule is validated for correctness and whether it could be accepted by the device given sufficient resources. The rule is checked against the current device mode and queue configuration. The flow rule may also optionally be validated against existing flow rules and device resources. This function has no effect on the target device.
The returned value is guaranteed to remain valid only as long as no successful calls to rte_flow_create() or rte_flow_destroy() are made in the meantime and no device parameter affecting flow rules in any way are modified, due to possible collisions or resource limitations (although in such cases EINVAL should not be returned).
port_id | Port identifier of Ethernet device. | |
[in] | attr | Flow rule attributes. |
[in] | pattern | Pattern specification (list terminated by the END pattern item). |
[in] | actions | Associated actions (list terminated by the END action). |
[out] | error | Perform verbose error reporting if not NULL. PMDs initialize this structure in case of error only. |
-ENOSYS: underlying device does not support this functionality.
-EINVAL: unknown or invalid rule specification.
-ENOTSUP: valid but unsupported rule specification (e.g. partial bit-masks are unsupported).
-EEXIST: collision with an existing rule. Only returned if device supports flow rule collision checking and there was a flow rule collision. Not receiving this return code is no guarantee that creating the rule will not fail due to a collision.
-ENOMEM: not enough memory to execute the function, or if the device supports resource validation, resource limitation on the device.
-EBUSY: action cannot be performed due to busy device resources, may succeed if the affected queues or even the entire port are in a stopped state (see rte_eth_dev_rx_queue_stop() and rte_eth_dev_stop()).
struct rte_flow* rte_flow_create | ( | uint16_t | port_id, |
const struct rte_flow_attr * | attr, | ||
const struct rte_flow_item | pattern[], | ||
const struct rte_flow_action | actions[], | ||
struct rte_flow_error * | error | ||
) |
Create a flow rule on a given port.
port_id | Port identifier of Ethernet device. | |
[in] | attr | Flow rule attributes. |
[in] | pattern | Pattern specification (list terminated by the END pattern item). |
[in] | actions | Associated actions (list terminated by the END action). |
[out] | error | Perform verbose error reporting if not NULL. PMDs initialize this structure in case of error only. |
int rte_flow_destroy | ( | uint16_t | port_id, |
struct rte_flow * | flow, | ||
struct rte_flow_error * | error | ||
) |
Destroy a flow rule on a given port.
Failure to destroy a flow rule handle may occur when other flow rules depend on it, and destroying it would result in an inconsistent state.
This function is only guaranteed to succeed if handles are destroyed in reverse order of their creation.
port_id | Port identifier of Ethernet device. | |
flow | Flow rule handle to destroy. | |
[out] | error | Perform verbose error reporting if not NULL. PMDs initialize this structure in case of error only. |
int rte_flow_flush | ( | uint16_t | port_id, |
struct rte_flow_error * | error | ||
) |
Destroy all flow rules associated with a port.
In the unlikely event of failure, handles are still considered destroyed and no longer valid but the port must be assumed to be in an inconsistent state.
port_id | Port identifier of Ethernet device. | |
[out] | error | Perform verbose error reporting if not NULL. PMDs initialize this structure in case of error only. |
int rte_flow_query | ( | uint16_t | port_id, |
struct rte_flow * | flow, | ||
enum rte_flow_action_type | action, | ||
void * | data, | ||
struct rte_flow_error * | error | ||
) |
Query an existing flow rule.
This function allows retrieving flow-specific data such as counters. Data is gathered by special actions which must be present in the flow rule definition.
port_id | Port identifier of Ethernet device. | |
flow | Flow rule handle to query. | |
action | Action type to query. | |
[in,out] | data | Pointer to storage for the associated query data type. |
[out] | error | Perform verbose error reporting if not NULL. PMDs initialize this structure in case of error only. |
int rte_flow_isolate | ( | uint16_t | port_id, |
int | set, | ||
struct rte_flow_error * | error | ||
) |
Restrict ingress traffic to the defined flow rules.
Isolated mode guarantees that all ingress traffic comes from defined flow rules only (current and future).
Besides making ingress more deterministic, it allows PMDs to safely reuse resources otherwise assigned to handle the remaining traffic, such as global RSS configuration settings, VLAN filters, MAC address entries, legacy filter API rules and so on in order to expand the set of possible flow rule types.
Calling this function as soon as possible after device initialization, ideally before the first call to rte_eth_dev_configure(), is recommended to avoid possible failures due to conflicting settings.
Once effective, leaving isolated mode may not be possible depending on PMD implementation.
Additionally, the following functionality has no effect on the underlying port and may return errors such as ENOTSUP ("not supported"):
port_id | Port identifier of Ethernet device. | |
set | Nonzero to enter isolated mode, attempt to leave it otherwise. | |
[out] | error | Perform verbose error reporting if not NULL. PMDs initialize this structure in case of error only. |
int rte_flow_error_set | ( | struct rte_flow_error * | error, |
int | code, | ||
enum rte_flow_error_type | type, | ||
const void * | cause, | ||
const char * | message | ||
) |
Initialize flow error structure.
[out] | error | Pointer to flow error structure (may be NULL). |
code | Related error code (rte_errno). | |
type | Cause field and error types. | |
cause | Object responsible for the error. | |
message | Human-readable error message. |
size_t rte_flow_copy | ( | struct rte_flow_desc * | fd, |
size_t | len, | ||
const struct rte_flow_attr * | attr, | ||
const struct rte_flow_item * | items, | ||
const struct rte_flow_action * | actions | ||
) |
Copy an rte_flow rule description.
[in] | fd | Flow rule description. |
[in] | len | Total size of allocated data for the flow description. |
[in] | attr | Flow rule attributes. |
[in] | items | Pattern specification (list terminated by the END pattern item). |
[in] | actions | Associated actions (list terminated by the END action). |
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_ANY.
Definition at line 366 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_VF.
Definition at line 395 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_PORT.
Definition at line 426 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_RAW.
Definition at line 461 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_ETH.
Definition at line 484 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_VLAN.
Definition at line 506 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_IPV4.
Definition at line 525 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_IPV6.
Definition at line 546 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_ICMP.
Definition at line 569 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_UDP.
Definition at line 588 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_TCP.
Definition at line 607 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_SCTP.
Definition at line 626 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_VXLAN.
Definition at line 648 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_E_TAG.
Definition at line 673 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_NVGRE.
Definition at line 698 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_MPLS.
Definition at line 718 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_GRE.
Definition at line 739 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_FUZZY.
Definition at line 767 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_GTP.
Definition at line 792 of file rte_flow.h.
|
static |
Default mask for RTE_FLOW_ITEM_TYPE_ESP.
Definition at line 808 of file rte_flow.h.