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_FUZZY,
|
||||
ITEM_FUZZY_THRESH,
|
||||
ITEM_GTP,
|
||||
ITEM_GTP_TEID,
|
||||
ITEM_GTPC,
|
||||
ITEM_GTPU,
|
||||
|
||||
/* Validate/create actions. */
|
||||
ACTIONS,
|
||||
@ -451,6 +455,9 @@ static const enum index next_item[] = {
|
||||
ITEM_MPLS,
|
||||
ITEM_GRE,
|
||||
ITEM_FUZZY,
|
||||
ITEM_GTP,
|
||||
ITEM_GTPC,
|
||||
ITEM_GTPU,
|
||||
ZERO,
|
||||
};
|
||||
|
||||
@ -588,6 +595,12 @@ static const enum index item_gre[] = {
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index item_gtp[] = {
|
||||
ITEM_GTP_TEID,
|
||||
ITEM_NEXT,
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index next_action[] = {
|
||||
ACTION_END,
|
||||
ACTION_VOID,
|
||||
@ -1421,6 +1434,33 @@ static const struct token token_list[] = {
|
||||
.args = ARGS(ARGS_ENTRY(struct rte_flow_item_fuzzy,
|
||||
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. */
|
||||
[ACTIONS] = {
|
||||
|
@ -952,6 +952,9 @@ static const struct {
|
||||
MK_FLOW_ITEM(MPLS, sizeof(struct rte_flow_item_mpls)),
|
||||
MK_FLOW_ITEM(GRE, sizeof(struct rte_flow_item_gre)),
|
||||
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. */
|
||||
|
@ -955,6 +955,23 @@ Usage example, fuzzy match a TCPv4 packets:
|
||||
| 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
|
||||
~~~~~~~
|
||||
|
||||
|
@ -2721,6 +2721,10 @@ This section lists supported pattern items and their attributes, if any.
|
||||
|
||||
- ``thresh {unsigned}``: accuracy threshold.
|
||||
|
||||
- ``gtp``, ``gtpc``, ``gtpu``: match GTPv1 header.
|
||||
|
||||
- ``teid {unsigned}``: tunnel endpoint identifier.
|
||||
|
||||
Actions list
|
||||
^^^^^^^^^^^^
|
||||
|
||||
|
@ -309,6 +309,33 @@ enum rte_flow_item_type {
|
||||
* See struct rte_flow_item_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
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user