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:
Adrien Mazarguil 2017-04-26 14:07:21 +02:00 committed by Thomas Monjalon
parent 5ad56ed71f
commit e4840ef268
4 changed files with 101 additions and 0 deletions

View File

@ -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",

View File

@ -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``
^^^^^^^^^^^^^^

View File

@ -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.

View File

@ -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.
*