ethdev: add flow API actions to modify TCP/UDP port numbers
Add actions: - SET_TP_SRC - set a new TCP/UDP source port number. - SET_TP_DST - set a new TCP/UDP destination port number. Original work by Shagun Agrawal Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com> Acked-by: Xiaoyu Min <jackmin@mellanox.com> Acked-by: Ori Kam <orika@mellanox.com> Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
This commit is contained in:
parent
0517eea761
commit
9ccc949195
@ -251,6 +251,10 @@ enum index {
|
||||
ACTION_SET_IPV6_SRC_IPV6_SRC,
|
||||
ACTION_SET_IPV6_DST,
|
||||
ACTION_SET_IPV6_DST_IPV6_DST,
|
||||
ACTION_SET_TP_SRC,
|
||||
ACTION_SET_TP_SRC_TP_SRC,
|
||||
ACTION_SET_TP_DST,
|
||||
ACTION_SET_TP_DST_TP_DST,
|
||||
};
|
||||
|
||||
/** Maximum size for pattern in struct rte_flow_item_raw. */
|
||||
@ -828,6 +832,8 @@ static const enum index next_action[] = {
|
||||
ACTION_SET_IPV4_DST,
|
||||
ACTION_SET_IPV6_SRC,
|
||||
ACTION_SET_IPV6_DST,
|
||||
ACTION_SET_TP_SRC,
|
||||
ACTION_SET_TP_DST,
|
||||
ZERO,
|
||||
};
|
||||
|
||||
@ -954,6 +960,18 @@ static const enum index action_set_ipv6_dst[] = {
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index action_set_tp_src[] = {
|
||||
ACTION_SET_TP_SRC_TP_SRC,
|
||||
ACTION_NEXT,
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index action_set_tp_dst[] = {
|
||||
ACTION_SET_TP_DST_TP_DST,
|
||||
ACTION_NEXT,
|
||||
ZERO,
|
||||
};
|
||||
|
||||
static const enum index action_jump[] = {
|
||||
ACTION_JUMP_GROUP,
|
||||
ACTION_NEXT,
|
||||
@ -2574,6 +2592,40 @@ static const struct token token_list[] = {
|
||||
(struct rte_flow_action_set_ipv6, ipv6_addr)),
|
||||
.call = parse_vc_conf,
|
||||
},
|
||||
[ACTION_SET_TP_SRC] = {
|
||||
.name = "set_tp_src",
|
||||
.help = "set a new source port number in the outermost"
|
||||
" TCP/UDP header",
|
||||
.priv = PRIV_ACTION(SET_TP_SRC,
|
||||
sizeof(struct rte_flow_action_set_tp)),
|
||||
.next = NEXT(action_set_tp_src),
|
||||
.call = parse_vc,
|
||||
},
|
||||
[ACTION_SET_TP_SRC_TP_SRC] = {
|
||||
.name = "port",
|
||||
.help = "new source port number to set",
|
||||
.next = NEXT(action_set_tp_src, NEXT_ENTRY(UNSIGNED)),
|
||||
.args = ARGS(ARGS_ENTRY_HTON
|
||||
(struct rte_flow_action_set_tp, port)),
|
||||
.call = parse_vc_conf,
|
||||
},
|
||||
[ACTION_SET_TP_DST] = {
|
||||
.name = "set_tp_dst",
|
||||
.help = "set a new destination port number in the outermost"
|
||||
" TCP/UDP header",
|
||||
.priv = PRIV_ACTION(SET_TP_DST,
|
||||
sizeof(struct rte_flow_action_set_tp)),
|
||||
.next = NEXT(action_set_tp_dst),
|
||||
.call = parse_vc,
|
||||
},
|
||||
[ACTION_SET_TP_DST_TP_DST] = {
|
||||
.name = "port",
|
||||
.help = "new destination port number to set",
|
||||
.next = NEXT(action_set_tp_dst, NEXT_ENTRY(UNSIGNED)),
|
||||
.args = ARGS(ARGS_ENTRY_HTON
|
||||
(struct rte_flow_action_set_tp, port)),
|
||||
.call = parse_vc_conf,
|
||||
},
|
||||
};
|
||||
|
||||
/** Remove and return last entry from argument stack. */
|
||||
|
@ -2148,6 +2148,42 @@ Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be returned.
|
||||
| ``ipv6_addr`` | new IPv6 destination address |
|
||||
+---------------+------------------------------+
|
||||
|
||||
Action: ``SET_TP_SRC``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Set a new source port number in the outermost TCP/UDP header.
|
||||
|
||||
It must be used with a valid RTE_FLOW_ITEM_TYPE_TCP or RTE_FLOW_ITEM_TYPE_UDP
|
||||
flow pattern item. Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be returned.
|
||||
|
||||
.. _table_rte_flow_action_set_tp_src:
|
||||
|
||||
.. table:: SET_TP_SRC
|
||||
|
||||
+----------+-------------------------+
|
||||
| Field | Value |
|
||||
+==========+=========================+
|
||||
| ``port`` | new TCP/UDP source port |
|
||||
+---------------+--------------------+
|
||||
|
||||
Action: ``SET_TP_DST``
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Set a new destination port number in the outermost TCP/UDP header.
|
||||
|
||||
It must be used with a valid RTE_FLOW_ITEM_TYPE_TCP or RTE_FLOW_ITEM_TYPE_UDP
|
||||
flow pattern item. Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be returned.
|
||||
|
||||
.. _table_rte_flow_action_set_tp_dst:
|
||||
|
||||
.. table:: SET_TP_DST
|
||||
|
||||
+----------+------------------------------+
|
||||
| Field | Value |
|
||||
+==========+==============================+
|
||||
| ``port`` | new TCP/UDP destination port |
|
||||
+---------------+-------------------------+
|
||||
|
||||
Negative types
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -66,6 +66,8 @@ New Features
|
||||
|
||||
* Modify source and destination IP addresses in the outermost IPv4/IPv6
|
||||
headers.
|
||||
* Modify source and destination port numbers in the outermost TCP/UDP
|
||||
headers.
|
||||
|
||||
* **Add support to offload more flow match and actions for CXGBE PMD**
|
||||
|
||||
|
@ -3722,6 +3722,16 @@ This section lists supported actions and their attributes, if any.
|
||||
|
||||
- ``ipv6_addr``: New IPv6 destination address.
|
||||
|
||||
- ``of_set_tp_src``: Set a new source port number in the outermost TCP/UDP
|
||||
header.
|
||||
|
||||
- ``port``: New TCP/UDP source port number.
|
||||
|
||||
- ``of_set_tp_dst``: Set a new destination port number in the outermost TCP/UDP
|
||||
header.
|
||||
|
||||
- ``port``: New TCP/UDP destination port number.
|
||||
|
||||
Destroying flow rules
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -131,6 +131,10 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = {
|
||||
sizeof(struct rte_flow_action_set_ipv6)),
|
||||
MK_FLOW_ACTION(SET_IPV6_DST,
|
||||
sizeof(struct rte_flow_action_set_ipv6)),
|
||||
MK_FLOW_ACTION(SET_TP_SRC,
|
||||
sizeof(struct rte_flow_action_set_tp)),
|
||||
MK_FLOW_ACTION(SET_TP_DST,
|
||||
sizeof(struct rte_flow_action_set_tp)),
|
||||
};
|
||||
|
||||
static int
|
||||
|
@ -1546,6 +1546,28 @@ enum rte_flow_action_type {
|
||||
* See struct rte_flow_action_set_ipv6.
|
||||
*/
|
||||
RTE_FLOW_ACTION_TYPE_SET_IPV6_DST,
|
||||
|
||||
/**
|
||||
* Modify source port number in the outermost TCP/UDP header.
|
||||
*
|
||||
* If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_TCP
|
||||
* or RTE_FLOW_ITEM_TYPE_UDP, then the PMD should return a
|
||||
* RTE_FLOW_ERROR_TYPE_ACTION error.
|
||||
*
|
||||
* See struct rte_flow_action_set_tp.
|
||||
*/
|
||||
RTE_FLOW_ACTION_TYPE_SET_TP_SRC,
|
||||
|
||||
/**
|
||||
* Modify destination port number in the outermost TCP/UDP header.
|
||||
*
|
||||
* If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_TCP
|
||||
* or RTE_FLOW_ITEM_TYPE_UDP, then the PMD should return a
|
||||
* RTE_FLOW_ERROR_TYPE_ACTION error.
|
||||
*
|
||||
* See struct rte_flow_action_set_tp.
|
||||
*/
|
||||
RTE_FLOW_ACTION_TYPE_SET_TP_DST,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1939,6 +1961,21 @@ struct rte_flow_action_set_ipv6 {
|
||||
uint8_t ipv6_addr[16];
|
||||
};
|
||||
|
||||
/**
|
||||
* @warning
|
||||
* @b EXPERIMENTAL: this structure may change without prior notice
|
||||
*
|
||||
* RTE_FLOW_ACTION_TYPE_SET_TP_SRC
|
||||
* RTE_FLOW_ACTION_TYPE_SET_TP_DST
|
||||
*
|
||||
* Allows modification of source (RTE_FLOW_ACTION_TYPE_SET_TP_SRC)
|
||||
* and destination (RTE_FLOW_ACTION_TYPE_SET_TP_DST) port numbers
|
||||
* in the specified outermost TCP/UDP header.
|
||||
*/
|
||||
struct rte_flow_action_set_tp {
|
||||
rte_be16_t port;
|
||||
};
|
||||
|
||||
/*
|
||||
* Definition of a single action.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user