ethdev: support GRE optional fields

Add flow pattern items and header format for matching optional fields
(checksum/key/sequence) in GRE header. And the flags in gre item should
be correspondingly set with the new added items.

Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
Acked-by: Ori Kam <orika@nvidia.com>
This commit is contained in:
Sean Zhang 2022-02-11 03:45:28 +02:00 committed by Ferruh Yigit
parent 7786991fae
commit f61490bdf2
4 changed files with 42 additions and 0 deletions

View File

@ -1106,6 +1106,7 @@ Matches a GRE header.
Item: ``GRE_KEY``
^^^^^^^^^^^^^^^^^
This action is deprecated. Consider `Item: GRE_OPTION`.
Matches a GRE key field.
This should be preceded by item ``GRE``.
@ -1113,6 +1114,22 @@ This should be preceded by item ``GRE``.
- Value to be matched is a big-endian 32 bit integer.
- When this item present it implicitly match K bit in default mask as "1"
Item: ``GRE_OPTION``
^^^^^^^^^^^^^^^^^^^^
Matches a GRE optional fields (checksum/key/sequence).
This should be preceded by item ``GRE``.
- ``checksum``: checksum.
- ``key``: key.
- ``sequence``: sequence.
- The items in GRE_OPTION do not change bit flags(c_bit/k_bit/s_bit) in GRE
item. The bit flags need be set with GRE item by application. When the items
present, the corresponding bits in GRE spec and mask should be set "1" by
application, it means to match specified value of the fields. When the items
no present, but the corresponding bits in GRE spec and mask is "1", it means
to match any value of the fields.
Item: ``FUZZY``
^^^^^^^^^^^^^^^

View File

@ -71,6 +71,11 @@ New Features
- ``rte_ipv6_udptcp_cksum_mbuf()``
- ``rte_ipv6_udptcp_cksum_mbuf_verify()``
* **Added rte_flow support for matching GRE optional fields.**
Added ``gre_option`` item in rte_flow to support checksum/key/sequence
matching in GRE packets.
* **Added new RSS offload types for L2TPv2 in RSS flow.**
Added macro RTE_ETH_RSS_L2TPV2, now L2TPv2 session ID field can be used as

View File

@ -139,6 +139,7 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = {
MK_FLOW_ITEM(META, sizeof(struct rte_flow_item_meta)),
MK_FLOW_ITEM(TAG, sizeof(struct rte_flow_item_tag)),
MK_FLOW_ITEM(GRE_KEY, sizeof(rte_be32_t)),
MK_FLOW_ITEM(GRE_OPTION, sizeof(struct rte_flow_item_gre_opt)),
MK_FLOW_ITEM(GTP_PSC, sizeof(struct rte_flow_item_gtp_psc)),
MK_FLOW_ITEM(PPPOES, sizeof(struct rte_flow_item_pppoe)),
MK_FLOW_ITEM(PPPOED, sizeof(struct rte_flow_item_pppoe)),

View File

@ -37,6 +37,7 @@
#include <rte_gtp.h>
#include <rte_l2tpv2.h>
#include <rte_ppp.h>
#include <rte_gre.h>
#ifdef __cplusplus
extern "C" {
@ -660,6 +661,13 @@ enum rte_flow_item_type {
* See struct rte_flow_item_ppp.
*/
RTE_FLOW_ITEM_TYPE_PPP,
/**
* Matches GRE optional fields.
*
* See struct rte_flow_item_gre_opt.
*/
RTE_FLOW_ITEM_TYPE_GRE_OPTION,
};
/**
@ -1195,6 +1203,17 @@ static const struct rte_flow_item_gre rte_flow_item_gre_mask = {
};
#endif
/**
* RTE_FLOW_ITEM_TYPE_GRE_OPTION.
*
* Matches GRE optional fields in header.
*/
struct rte_flow_item_gre_opt {
struct rte_gre_hdr_opt_checksum_rsvd checksum_rsvd;
struct rte_gre_hdr_opt_key key;
struct rte_gre_hdr_opt_sequence sequence;
};
/**
* RTE_FLOW_ITEM_TYPE_FUZZY
*