ethdev: add GTP items to support flow API
This patch adds GTP, GTPC and GTPU items for generic flow API, and also exposes item fields through the flow command. Signed-off-by: Beilei Xing <beilei.xing@intel.com> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> Acked-by: Jingjing Wu <jingjing.wu@intel.com> Reviewed-by: Seán Harte <seanbh@gmail.com>
This commit is contained in:
parent
e163c18a15
commit
576f459eb2
@ -171,6 +171,10 @@ enum index {
|
|||||||
ITEM_GRE_PROTO,
|
ITEM_GRE_PROTO,
|
||||||
ITEM_FUZZY,
|
ITEM_FUZZY,
|
||||||
ITEM_FUZZY_THRESH,
|
ITEM_FUZZY_THRESH,
|
||||||
|
ITEM_GTP,
|
||||||
|
ITEM_GTP_TEID,
|
||||||
|
ITEM_GTPC,
|
||||||
|
ITEM_GTPU,
|
||||||
|
|
||||||
/* Validate/create actions. */
|
/* Validate/create actions. */
|
||||||
ACTIONS,
|
ACTIONS,
|
||||||
@ -451,6 +455,9 @@ static const enum index next_item[] = {
|
|||||||
ITEM_MPLS,
|
ITEM_MPLS,
|
||||||
ITEM_GRE,
|
ITEM_GRE,
|
||||||
ITEM_FUZZY,
|
ITEM_FUZZY,
|
||||||
|
ITEM_GTP,
|
||||||
|
ITEM_GTPC,
|
||||||
|
ITEM_GTPU,
|
||||||
ZERO,
|
ZERO,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -588,6 +595,12 @@ static const enum index item_gre[] = {
|
|||||||
ZERO,
|
ZERO,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const enum index item_gtp[] = {
|
||||||
|
ITEM_GTP_TEID,
|
||||||
|
ITEM_NEXT,
|
||||||
|
ZERO,
|
||||||
|
};
|
||||||
|
|
||||||
static const enum index next_action[] = {
|
static const enum index next_action[] = {
|
||||||
ACTION_END,
|
ACTION_END,
|
||||||
ACTION_VOID,
|
ACTION_VOID,
|
||||||
@ -1421,6 +1434,33 @@ static const struct token token_list[] = {
|
|||||||
.args = ARGS(ARGS_ENTRY(struct rte_flow_item_fuzzy,
|
.args = ARGS(ARGS_ENTRY(struct rte_flow_item_fuzzy,
|
||||||
thresh)),
|
thresh)),
|
||||||
},
|
},
|
||||||
|
[ITEM_GTP] = {
|
||||||
|
.name = "gtp",
|
||||||
|
.help = "match GTP header",
|
||||||
|
.priv = PRIV_ITEM(GTP, sizeof(struct rte_flow_item_gtp)),
|
||||||
|
.next = NEXT(item_gtp),
|
||||||
|
.call = parse_vc,
|
||||||
|
},
|
||||||
|
[ITEM_GTP_TEID] = {
|
||||||
|
.name = "teid",
|
||||||
|
.help = "tunnel endpoint identifier",
|
||||||
|
.next = NEXT(item_gtp, NEXT_ENTRY(UNSIGNED), item_param),
|
||||||
|
.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gtp, teid)),
|
||||||
|
},
|
||||||
|
[ITEM_GTPC] = {
|
||||||
|
.name = "gtpc",
|
||||||
|
.help = "match GTP header",
|
||||||
|
.priv = PRIV_ITEM(GTPC, sizeof(struct rte_flow_item_gtp)),
|
||||||
|
.next = NEXT(item_gtp),
|
||||||
|
.call = parse_vc,
|
||||||
|
},
|
||||||
|
[ITEM_GTPU] = {
|
||||||
|
.name = "gtpu",
|
||||||
|
.help = "match GTP header",
|
||||||
|
.priv = PRIV_ITEM(GTPU, sizeof(struct rte_flow_item_gtp)),
|
||||||
|
.next = NEXT(item_gtp),
|
||||||
|
.call = parse_vc,
|
||||||
|
},
|
||||||
|
|
||||||
/* Validate/create actions. */
|
/* Validate/create actions. */
|
||||||
[ACTIONS] = {
|
[ACTIONS] = {
|
||||||
|
@ -952,6 +952,9 @@ static const struct {
|
|||||||
MK_FLOW_ITEM(MPLS, sizeof(struct rte_flow_item_mpls)),
|
MK_FLOW_ITEM(MPLS, sizeof(struct rte_flow_item_mpls)),
|
||||||
MK_FLOW_ITEM(GRE, sizeof(struct rte_flow_item_gre)),
|
MK_FLOW_ITEM(GRE, sizeof(struct rte_flow_item_gre)),
|
||||||
MK_FLOW_ITEM(FUZZY, sizeof(struct rte_flow_item_fuzzy)),
|
MK_FLOW_ITEM(FUZZY, sizeof(struct rte_flow_item_fuzzy)),
|
||||||
|
MK_FLOW_ITEM(GTP, sizeof(struct rte_flow_item_gtp)),
|
||||||
|
MK_FLOW_ITEM(GTPC, sizeof(struct rte_flow_item_gtp)),
|
||||||
|
MK_FLOW_ITEM(GTPU, sizeof(struct rte_flow_item_gtp)),
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Compute storage space needed by item specification. */
|
/** Compute storage space needed by item specification. */
|
||||||
|
@ -955,6 +955,23 @@ Usage example, fuzzy match a TCPv4 packets:
|
|||||||
| 4 | END |
|
| 4 | END |
|
||||||
+-------+----------+
|
+-------+----------+
|
||||||
|
|
||||||
|
Item: ``GTP``, ``GTPC``, ``GTPU``
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Matches a GTPv1 header.
|
||||||
|
|
||||||
|
Note: GTP, GTPC and GTPU use the same structure. GTPC and GTPU item
|
||||||
|
are defined for a user-friendly API when creating GTP-C and GTP-U
|
||||||
|
flow rules.
|
||||||
|
|
||||||
|
- ``v_pt_rsv_flags``: version (3b), protocol type (1b), reserved (1b),
|
||||||
|
extension header flag (1b), sequence number flag (1b), N-PDU number
|
||||||
|
flag (1b).
|
||||||
|
- ``msg_type``: message type.
|
||||||
|
- ``msg_len``: message length.
|
||||||
|
- ``teid``: tunnel endpoint identifier.
|
||||||
|
- Default ``mask`` matches teid only.
|
||||||
|
|
||||||
Actions
|
Actions
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
|
@ -2721,6 +2721,10 @@ This section lists supported pattern items and their attributes, if any.
|
|||||||
|
|
||||||
- ``thresh {unsigned}``: accuracy threshold.
|
- ``thresh {unsigned}``: accuracy threshold.
|
||||||
|
|
||||||
|
- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
|
||||||
|
|
||||||
|
- ``teid {unsigned}``: tunnel endpoint identifier.
|
||||||
|
|
||||||
Actions list
|
Actions list
|
||||||
^^^^^^^^^^^^
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
|
@ -309,6 +309,33 @@ enum rte_flow_item_type {
|
|||||||
* See struct rte_flow_item_fuzzy.
|
* See struct rte_flow_item_fuzzy.
|
||||||
*/
|
*/
|
||||||
RTE_FLOW_ITEM_TYPE_FUZZY,
|
RTE_FLOW_ITEM_TYPE_FUZZY,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matches a GTP header.
|
||||||
|
*
|
||||||
|
* Configure flow for GTP packets.
|
||||||
|
*
|
||||||
|
* See struct rte_flow_item_gtp.
|
||||||
|
*/
|
||||||
|
RTE_FLOW_ITEM_TYPE_GTP,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matches a GTP header.
|
||||||
|
*
|
||||||
|
* Configure flow for GTP-C packets.
|
||||||
|
*
|
||||||
|
* See struct rte_flow_item_gtp.
|
||||||
|
*/
|
||||||
|
RTE_FLOW_ITEM_TYPE_GTPC,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matches a GTP header.
|
||||||
|
*
|
||||||
|
* Configure flow for GTP-U packets.
|
||||||
|
*
|
||||||
|
* See struct rte_flow_item_gtp.
|
||||||
|
*/
|
||||||
|
RTE_FLOW_ITEM_TYPE_GTPU,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -734,6 +761,31 @@ static const struct rte_flow_item_fuzzy rte_flow_item_fuzzy_mask = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RTE_FLOW_ITEM_TYPE_GTP.
|
||||||
|
*
|
||||||
|
* Matches a GTPv1 header.
|
||||||
|
*/
|
||||||
|
struct rte_flow_item_gtp {
|
||||||
|
/**
|
||||||
|
* Version (3b), protocol type (1b), reserved (1b),
|
||||||
|
* Extension header flag (1b),
|
||||||
|
* Sequence number flag (1b),
|
||||||
|
* N-PDU number flag (1b).
|
||||||
|
*/
|
||||||
|
uint8_t v_pt_rsv_flags;
|
||||||
|
uint8_t msg_type; /**< Message type. */
|
||||||
|
rte_be16_t msg_len; /**< Message length. */
|
||||||
|
rte_be32_t teid; /**< Tunnel endpoint identifier. */
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Default mask for RTE_FLOW_ITEM_TYPE_GTP. */
|
||||||
|
#ifndef __cplusplus
|
||||||
|
static const struct rte_flow_item_gtp rte_flow_item_gtp_mask = {
|
||||||
|
.teid = RTE_BE32(0xffffffff),
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Matching pattern item definition.
|
* Matching pattern item definition.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user