ethdev: fix incomplete items in flow API
E-Tag and NVGRE pattern items have been added hastily without updating
documentation nor testpmd.
This commit also adds default masks for these items based on the ixgbe
implementation.
Fixes: 99e7003831
("net/ixgbe: parse L2 tunnel filter")
Cc: stable@dpdk.org
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
This commit is contained in:
parent
5ad56ed71f
commit
e4840ef268
@ -159,6 +159,10 @@ enum index {
|
||||
ITEM_SCTP_CKSUM,
|
||||
ITEM_VXLAN,
|
||||
ITEM_VXLAN_VNI,
|
||||
ITEM_E_TAG,
|
||||
ITEM_E_TAG_GRP_ECID_B,
|
||||
ITEM_NVGRE,
|
||||
ITEM_NVGRE_TNI,
|
||||
ITEM_MPLS,
|
||||
ITEM_MPLS_LABEL,
|
||||
ITEM_GRE,
|
||||
@ -436,6 +440,8 @@ static const enum index next_item[] = {
|
||||
ITEM_TCP,
|
||||
ITEM_SCTP,
|
||||
ITEM_VXLAN,
|
||||
ITEM_E_TAG,
|
||||
ITEM_NVGRE,
|
||||
ITEM_MPLS,
|
||||
ITEM_GRE,
|
||||
ZERO,
|
||||
@ -544,6 +550,18 @@ static const enum index item_vxlan[] = {
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index item_e_tag[] = {
|
||||
ITEM_E_TAG_GRP_ECID_B,
|
||||
ITEM_NEXT,
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index item_nvgre[] = {
|
||||
ITEM_NVGRE_TNI,
|
||||
ITEM_NEXT,
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index item_mpls[] = {
|
||||
ITEM_MPLS_LABEL,
|
||||
ITEM_NEXT,
|
||||
@ -1297,6 +1315,34 @@ static const struct token token_list[] = {
|
||||
.next = NEXT(item_vxlan, NEXT_ENTRY(UNSIGNED), item_param),
|
||||
.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_vxlan, vni)),
|
||||
},
|
||||
[ITEM_E_TAG] = {
|
||||
.name = "e_tag",
|
||||
.help = "match E-Tag header",
|
||||
.priv = PRIV_ITEM(E_TAG, sizeof(struct rte_flow_item_e_tag)),
|
||||
.next = NEXT(item_e_tag),
|
||||
.call = parse_vc,
|
||||
},
|
||||
[ITEM_E_TAG_GRP_ECID_B] = {
|
||||
.name = "grp_ecid_b",
|
||||
.help = "GRP and E-CID base",
|
||||
.next = NEXT(item_e_tag, NEXT_ENTRY(UNSIGNED), item_param),
|
||||
.args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_e_tag,
|
||||
rsvd_grp_ecid_b,
|
||||
"\x3f\xff")),
|
||||
},
|
||||
[ITEM_NVGRE] = {
|
||||
.name = "nvgre",
|
||||
.help = "match NVGRE header",
|
||||
.priv = PRIV_ITEM(NVGRE, sizeof(struct rte_flow_item_nvgre)),
|
||||
.next = NEXT(item_nvgre),
|
||||
.call = parse_vc,
|
||||
},
|
||||
[ITEM_NVGRE_TNI] = {
|
||||
.name = "tni",
|
||||
.help = "virtual subnet ID",
|
||||
.next = NEXT(item_nvgre, NEXT_ENTRY(UNSIGNED), item_param),
|
||||
.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_nvgre, tni)),
|
||||
},
|
||||
[ITEM_MPLS] = {
|
||||
.name = "mpls",
|
||||
.help = "match MPLS header",
|
||||
|
@ -863,6 +863,32 @@ Matches a VXLAN header (RFC 7348).
|
||||
- ``rsvd1``: reserved, normally 0x00.
|
||||
- Default ``mask`` matches VNI only.
|
||||
|
||||
Item: ``E_TAG``
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Matches an IEEE 802.1BR E-Tag header.
|
||||
|
||||
- ``tpid``: tag protocol identifier (0x893F)
|
||||
- ``epcp_edei_in_ecid_b``: E-Tag control information (E-TCI), E-PCP (3b),
|
||||
E-DEI (1b), ingress E-CID base (12b).
|
||||
- ``rsvd_grp_ecid_b``: reserved (2b), GRP (2b), E-CID base (12b).
|
||||
- ``in_ecid_e``: ingress E-CID ext.
|
||||
- ``ecid_e``: E-CID ext.
|
||||
- Default ``mask`` simultaneously matches GRP and E-CID base.
|
||||
|
||||
Item: ``NVGRE``
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Matches a NVGRE header (RFC 7637).
|
||||
|
||||
- ``c_k_s_rsvd0_ver``: checksum (1b), undefined (1b), key bit (1b),
|
||||
sequence number (1b), reserved 0 (9b), version (3b). This field must have
|
||||
value 0x2000 according to RFC 7637.
|
||||
- ``protocol``: protocol type (0x6558).
|
||||
- ``tni``: virtual subnet ID.
|
||||
- ``flow_id``: flow ID.
|
||||
- Default ``mask`` matches TNI only.
|
||||
|
||||
Item: ``MPLS``
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
@ -2537,6 +2537,14 @@ This section lists supported pattern items and their attributes, if any.
|
||||
|
||||
- ``vni {unsigned}``: VXLAN identifier.
|
||||
|
||||
- ``e_tag``: match IEEE 802.1BR E-Tag header.
|
||||
|
||||
- ``grp_ecid_b {unsigned}``: GRP and E-CID base.
|
||||
|
||||
- ``nvgre``: match NVGRE header.
|
||||
|
||||
- ``tni {unsigned}``: virtual subnet ID.
|
||||
|
||||
- ``mpls``: match MPLS header.
|
||||
|
||||
- ``label {unsigned}``: MPLS label.
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include <rte_sctp.h>
|
||||
#include <rte_tcp.h>
|
||||
#include <rte_udp.h>
|
||||
#include <rte_byteorder.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -620,6 +621,19 @@ struct rte_flow_item_e_tag {
|
||||
uint8_t ecid_e; /**< E-CID ext. */
|
||||
};
|
||||
|
||||
/** Default mask for RTE_FLOW_ITEM_TYPE_E_TAG. */
|
||||
#ifndef __cplusplus
|
||||
static const struct rte_flow_item_e_tag rte_flow_item_e_tag_mask = {
|
||||
#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
|
||||
.rsvd_grp_ecid_b = 0x3fff,
|
||||
#elif RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
|
||||
.rsvd_grp_ecid_b = 0xff3f,
|
||||
#else
|
||||
#error Unsupported endianness.
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
* RTE_FLOW_ITEM_TYPE_NVGRE.
|
||||
*
|
||||
@ -638,6 +652,13 @@ struct rte_flow_item_nvgre {
|
||||
uint8_t flow_id; /**< Flow ID. */
|
||||
};
|
||||
|
||||
/** Default mask for RTE_FLOW_ITEM_TYPE_NVGRE. */
|
||||
#ifndef __cplusplus
|
||||
static const struct rte_flow_item_nvgre rte_flow_item_nvgre_mask = {
|
||||
.tni = "\xff\xff\xff",
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
* RTE_FLOW_ITEM_TYPE_MPLS.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user