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:
Rahul Lakkireddy 2018-10-09 14:14:37 +05:30 committed by Ferruh Yigit
parent 0517eea761
commit 9ccc949195
6 changed files with 141 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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