ethdev: add MPLS and GRE flow API items

This patch adds MPLS and GRE items to generic rte flow.

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
This commit is contained in:
Beilei Xing 2017-03-30 16:29:51 +08:00 committed by Ferruh Yigit
parent 0c16506e59
commit 7cd048321d
2 changed files with 70 additions and 2 deletions

View File

@ -187,8 +187,8 @@ Pattern item
Pattern items fall in two categories:
- Matching protocol headers and packet data (ANY, RAW, ETH, VLAN, IPV4,
IPV6, ICMP, UDP, TCP, SCTP, VXLAN and so on), usually associated with a
specification structure.
IPV6, ICMP, UDP, TCP, SCTP, VXLAN, MPLS, GRE and so on), usually
associated with a specification structure.
- Matching meta-data or affecting pattern processing (END, VOID, INVERT, PF,
VF, PORT and so on), often without a specification structure.
@ -863,6 +863,23 @@ Matches a VXLAN header (RFC 7348).
- ``rsvd1``: reserved, normally 0x00.
- Default ``mask`` matches VNI only.
Item: ``MPLS``
^^^^^^^^^^^^^^
Matches a MPLS header.
- ``label_tc_s_ttl``: label, TC, Bottom of Stack and TTL.
- Default ``mask`` matches label only.
Item: ``GRE``
^^^^^^^^^^^^^^
Matches a GRE header.
- ``c_rsvd0_ver``: checksum, reserved 0 and version.
- ``protocol``: protocol type.
- Default ``mask`` matches protocol only.
Actions
~~~~~~~

View File

@ -282,6 +282,20 @@ enum rte_flow_item_type {
* See struct rte_flow_item_nvgre.
*/
RTE_FLOW_ITEM_TYPE_NVGRE,
/**
* Matches a MPLS header.
*
* See struct rte_flow_item_mpls.
*/
RTE_FLOW_ITEM_TYPE_MPLS,
/**
* Matches a GRE header.
*
* See struct rte_flow_item_gre.
*/
RTE_FLOW_ITEM_TYPE_GRE,
};
/**
@ -598,6 +612,43 @@ struct rte_flow_item_nvgre {
uint8_t flow_id; /**< Flow ID. */
};
/**
* RTE_FLOW_ITEM_TYPE_MPLS.
*
* Matches a MPLS header.
*/
struct rte_flow_item_mpls {
/**
* Label (20b), TC (3b), Bottom of Stack (1b).
*/
uint8_t label_tc_s[3];
uint8_t ttl; /** Time-to-Live. */
};
/** Default mask for RTE_FLOW_ITEM_TYPE_MPLS. */
static const struct rte_flow_item_mpls rte_flow_item_mpls_mask = {
.label_tc_s = "\xff\xff\xf0",
};
/**
* RTE_FLOW_ITEM_TYPE_GRE.
*
* Matches a GRE header.
*/
struct rte_flow_item_gre {
/**
* Checksum (1b), reserved 0 (12b), version (3b).
* Refer to RFC 2784.
*/
uint16_t c_rsvd0_ver;
uint16_t protocol; /**< Protocol type. */
};
/** Default mask for RTE_FLOW_ITEM_TYPE_GRE. */
static const struct rte_flow_item_gre rte_flow_item_gre_mask = {
.protocol = 0xffff,
};
/**
* Matching pattern item definition.
*