* [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header
@ 2022-04-02 7:11 Sean Zhang
2022-04-02 7:11 ` [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action Sean Zhang
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: Sean Zhang @ 2022-04-02 7:11 UTC (permalink / raw)
Cc: dev
This patch set adds support for modifying ECN fields in IPv4/IPv6
header, and also adds support for modify_filed action in meter.
Jiawei Wang (1):
ethdev: add IPv4/IPv6 ECN header rewrite action
Sean Zhang (3):
common/mlx5: add modify ECN capability check
net/mlx5: add support to modify ECN field
net/mlx5: add modify field support in meter
app/test-pmd/cmdline_flow.c | 3 +-
doc/guides/nics/mlx5.rst | 4 +-
drivers/common/mlx5/mlx5_devx_cmds.c | 3 ++
drivers/common/mlx5/mlx5_devx_cmds.h | 1 +
drivers/common/mlx5/mlx5_prm.h | 62 ++++++++++++++++++++++++-
drivers/net/mlx5/mlx5_flow.c | 5 +-
drivers/net/mlx5/mlx5_flow.h | 2 +
drivers/net/mlx5/mlx5_flow_dv.c | 69 ++++++++++++++++++++++++++--
drivers/net/mlx5/mlx5_flow_meter.c | 2 +-
lib/ethdev/rte_flow.h | 2 +
10 files changed, 143 insertions(+), 10 deletions(-)
--
2.31.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action
2022-04-02 7:11 [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Sean Zhang
@ 2022-04-02 7:11 ` Sean Zhang
2022-06-01 18:51 ` Ferruh Yigit
2022-04-02 7:11 ` [v1 2/4] common/mlx5: add modify ECN capability check Sean Zhang
` (3 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Sean Zhang @ 2022-04-02 7:11 UTC (permalink / raw)
To: Ori Kam, Xiaoyun Li, Aman Singh, Yuying Zhang, Thomas Monjalon,
Ferruh Yigit, Andrew Rybchenko
Cc: dev, Jiawei Wang
From: Jiawei Wang <jiaweiw@nvidia.com>
This patch introduces the IPv4/IPv6 ECN modify field support, and
adds the testpmd CLI commands support.
Usage:
modify_field op set dst_type ipv4_ecn src_type ...
For example:
flow create 0 ingress group 1 pattern eth / ipv4 / end actions
modify_field op set dst_type ipv4_ecn src_type value src_value
0x03 width 2 / queue index 0 / end
Signed-off-by: Jiawei Wang <jiaweiw@nvidia.com>
---
app/test-pmd/cmdline_flow.c | 3 ++-
lib/ethdev/rte_flow.h | 2 ++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index fc4a6d9cca..3250add834 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -795,7 +795,8 @@ static const char *const modify_field_ids[] = {
"tcp_seq_num", "tcp_ack_num", "tcp_flags",
"udp_port_src", "udp_port_dst",
"vxlan_vni", "geneve_vni", "gtp_teid",
- "tag", "mark", "meta", "pointer", "value", NULL
+ "tag", "mark", "meta", "pointer", "value",
+ "ipv4_ecn", "ipv6_ecn", NULL
};
/** Maximum number of subsequent tokens and arguments on the stack. */
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index d8827dd184..1b56f23cba 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -3690,6 +3690,8 @@ enum rte_flow_field_id {
RTE_FLOW_FIELD_META, /**< Metadata value. */
RTE_FLOW_FIELD_POINTER, /**< Memory pointer. */
RTE_FLOW_FIELD_VALUE, /**< Immediate value. */
+ RTE_FLOW_FIELD_IPV4_ECN, /**< IPv4 ECN. */
+ RTE_FLOW_FIELD_IPV6_ECN, /**< IPv6 ECN. */
};
/**
--
2.31.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [v1 2/4] common/mlx5: add modify ECN capability check
2022-04-02 7:11 [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Sean Zhang
2022-04-02 7:11 ` [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action Sean Zhang
@ 2022-04-02 7:11 ` Sean Zhang
2022-06-06 8:05 ` Slava Ovsiienko
2022-04-02 7:11 ` [v1 3/4] net/mlx5: add support to modify ECN field Sean Zhang
` (2 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Sean Zhang @ 2022-04-02 7:11 UTC (permalink / raw)
To: Matan Azrad, Viacheslav Ovsiienko; +Cc: dev
Flag outer_ip_ecn in header modify capabilities properties layout is
added in order to check if the firmware supports modification of ecn
field.
Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
---
drivers/common/mlx5/mlx5_devx_cmds.c | 3 ++
drivers/common/mlx5/mlx5_devx_cmds.h | 1 +
drivers/common/mlx5/mlx5_prm.h | 62 +++++++++++++++++++++++++++-
3 files changed, 65 insertions(+), 1 deletion(-)
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c
index d02ac2a678..72296c1ca3 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.c
+++ b/drivers/common/mlx5/mlx5_devx_cmds.c
@@ -1047,6 +1047,9 @@ mlx5_devx_cmd_query_hca_attr(void *ctx,
attr->flow.tunnel_header_2_3 = MLX5_GET
(flow_table_nic_cap, hcattr,
ft_field_support_2_nic_receive.tunnel_header_2_3);
+ attr->modify_outer_ip_ecn = MLX5_GET
+ (flow_table_nic_cap, hcattr,
+ ft_header_modify_nic_receive.outer_ip_ecn);
attr->pkt_integrity_match = mlx5_devx_query_pkt_integrity_match(hcattr);
attr->inner_ipv4_ihl = MLX5_GET
(flow_table_nic_cap, hcattr,
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
index 1bac18c59d..6e9e23f593 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.h
+++ b/drivers/common/mlx5/mlx5_devx_cmds.h
@@ -256,6 +256,7 @@ struct mlx5_hca_attr {
uint32_t esw_mgr_vport_id_valid:1; /* E-Switch Mgr vport ID is valid. */
uint16_t esw_mgr_vport_id; /* E-Switch Mgr vport ID . */
uint16_t max_wqe_sz_sq;
+ uint32_t modify_outer_ip_ecn:1;
};
/* LAG Context. */
diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h
index 44b18225f6..caaa4c7fb9 100644
--- a/drivers/common/mlx5/mlx5_prm.h
+++ b/drivers/common/mlx5/mlx5_prm.h
@@ -744,6 +744,7 @@ enum mlx5_modification_field {
MLX5_MODI_OUT_TCP_ACK_NUM,
MLX5_MODI_IN_TCP_ACK_NUM = 0x5C,
MLX5_MODI_GTP_TEID = 0x6E,
+ MLX5_MODI_OUT_IP_ECN = 0x73,
};
/* Total number of metadata reg_c's. */
@@ -1884,6 +1885,62 @@ struct mlx5_ifc_roce_caps_bits {
u8 reserved_at_20[0x7e0];
};
+struct mlx5_ifc_ft_fields_support_bits {
+ u8 outer_dmac[0x1];
+ u8 outer_smac[0x1];
+ u8 outer_ether_type[0x1];
+ u8 reserved_at_3[0x1];
+ u8 outer_first_prio[0x1];
+ u8 outer_first_cfi[0x1];
+ u8 outer_first_vid[0x1];
+ u8 reserved_at_7[0x1];
+ u8 outer_second_prio[0x1];
+ u8 outer_second_cfi[0x1];
+ u8 outer_second_vid[0x1];
+ u8 reserved_at_b[0x1];
+ u8 outer_sip[0x1];
+ u8 outer_dip[0x1];
+ u8 outer_frag[0x1];
+ u8 outer_ip_protocol[0x1];
+ u8 outer_ip_ecn[0x1];
+ u8 outer_ip_dscp[0x1];
+ u8 outer_udp_sport[0x1];
+ u8 outer_udp_dport[0x1];
+ u8 outer_tcp_sport[0x1];
+ u8 outer_tcp_dport[0x1];
+ u8 outer_tcp_flags[0x1];
+ u8 outer_gre_protocol[0x1];
+ u8 outer_gre_key[0x1];
+ u8 outer_vxlan_vni[0x1];
+ u8 reserved_at_1a[0x5];
+ u8 source_eswitch_port[0x1];
+ u8 inner_dmac[0x1];
+ u8 inner_smac[0x1];
+ u8 inner_ether_type[0x1];
+ u8 reserved_at_23[0x1];
+ u8 inner_first_prio[0x1];
+ u8 inner_first_cfi[0x1];
+ u8 inner_first_vid[0x1];
+ u8 reserved_at_27[0x1];
+ u8 inner_second_prio[0x1];
+ u8 inner_second_cfi[0x1];
+ u8 inner_second_vid[0x1];
+ u8 reserved_at_2b[0x1];
+ u8 inner_sip[0x1];
+ u8 inner_dip[0x1];
+ u8 inner_frag[0x1];
+ u8 inner_ip_protocol[0x1];
+ u8 inner_ip_ecn[0x1];
+ u8 inner_ip_dscp[0x1];
+ u8 inner_udp_sport[0x1];
+ u8 inner_udp_dport[0x1];
+ u8 inner_tcp_sport[0x1];
+ u8 inner_tcp_dport[0x1];
+ u8 inner_tcp_flags[0x1];
+ u8 reserved_at_37[0x9];
+ u8 reserved_at_40[0x40];
+};
+
/*
* Table 1872 - Flow Table Fields Supported 2 Format
*/
@@ -1923,7 +1980,10 @@ struct mlx5_ifc_flow_table_nic_cap_bits {
flow_table_properties_nic_transmit_rdma;
struct mlx5_ifc_flow_table_prop_layout_bits
flow_table_properties_nic_transmit_sniffer;
- u8 reserved_at_e00[0x600];
+ u8 reserved_at_e00[0x200];
+ struct mlx5_ifc_ft_fields_support_bits
+ ft_header_modify_nic_receive;
+ u8 reserved_at_1080[0x380];
struct mlx5_ifc_ft_fields_support_2_bits
ft_field_support_2_nic_receive;
};
--
2.31.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [v1 3/4] net/mlx5: add support to modify ECN field
2022-04-02 7:11 [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Sean Zhang
2022-04-02 7:11 ` [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action Sean Zhang
2022-04-02 7:11 ` [v1 2/4] common/mlx5: add modify ECN capability check Sean Zhang
@ 2022-04-02 7:11 ` Sean Zhang
2022-06-06 7:17 ` Slava Ovsiienko
2022-04-02 7:11 ` [v1 4/4] net/mlx5: add modify field support in meter Sean Zhang
2022-06-01 18:51 ` [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Ferruh Yigit
4 siblings, 1 reply; 14+ messages in thread
From: Sean Zhang @ 2022-04-02 7:11 UTC (permalink / raw)
To: Matan Azrad, Viacheslav Ovsiienko; +Cc: dev
This patch is to support modify ECN field in IPv4/IPv6 header.
Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_dv.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index 1e9bd63635..e416eb5701 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -1449,6 +1449,9 @@ mlx5_flow_item_field_width(struct rte_eth_dev *dev,
case RTE_FLOW_FIELD_POINTER:
case RTE_FLOW_FIELD_VALUE:
return inherit < 0 ? 0 : inherit;
+ case RTE_FLOW_FIELD_IPV4_ECN:
+ case RTE_FLOW_FIELD_IPV6_ECN:
+ return 2;
default:
MLX5_ASSERT(false);
}
@@ -1826,6 +1829,13 @@ mlx5_flow_field_id_to_modify_info
(meta_count - width)) & meta_mask);
}
break;
+ case RTE_FLOW_FIELD_IPV4_ECN:
+ case RTE_FLOW_FIELD_IPV6_ECN:
+ info[idx] = (struct field_modify_info){1, 0,
+ MLX5_MODI_OUT_IP_ECN};
+ if (mask)
+ mask[idx] = 0x3 >> (2 - width);
+ break;
case RTE_FLOW_FIELD_POINTER:
case RTE_FLOW_FIELD_VALUE:
default:
@@ -4825,6 +4835,7 @@ flow_dv_validate_action_modify_field(struct rte_eth_dev *dev,
int ret = 0;
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_sh_config *config = &priv->sh->config;
+ struct mlx5_hca_attr *hca_attr = &priv->sh->cdev->config.hca_attr;
const struct rte_flow_action_modify_field *action_modify_field =
action->conf;
uint32_t dst_width = mlx5_flow_item_field_width(dev,
@@ -4952,6 +4963,15 @@ flow_dv_validate_action_modify_field(struct rte_eth_dev *dev,
RTE_FLOW_ERROR_TYPE_ACTION, action,
"add and sub operations"
" are not supported");
+ if (action_modify_field->dst.field == RTE_FLOW_FIELD_IPV4_ECN ||
+ action_modify_field->src.field == RTE_FLOW_FIELD_IPV4_ECN ||
+ action_modify_field->dst.field == RTE_FLOW_FIELD_IPV6_ECN ||
+ action_modify_field->src.field == RTE_FLOW_FIELD_IPV6_ECN)
+ if (!hca_attr->modify_outer_ip_ecn &&
+ !attr->transfer && !attr->group)
+ return rte_flow_error_set(error, ENOTSUP,
+ RTE_FLOW_ERROR_TYPE_ACTION, action,
+ "modifications of the ECN for current firmware is not supported");
return (action_modify_field->width / 32) +
!!(action_modify_field->width % 32);
}
--
2.31.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* [v1 4/4] net/mlx5: add modify field support in meter
2022-04-02 7:11 [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Sean Zhang
` (2 preceding siblings ...)
2022-04-02 7:11 ` [v1 3/4] net/mlx5: add support to modify ECN field Sean Zhang
@ 2022-04-02 7:11 ` Sean Zhang
2022-06-06 7:18 ` Slava Ovsiienko
2022-06-01 18:51 ` [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Ferruh Yigit
4 siblings, 1 reply; 14+ messages in thread
From: Sean Zhang @ 2022-04-02 7:11 UTC (permalink / raw)
To: Matan Azrad, Viacheslav Ovsiienko; +Cc: dev
This patch introduces MODIFY_FIELD action support in meter. User can
create meter policy with MODIFY_FIELD action in green/yellow action.
For example:
testpmd> add port meter policy 0 21 g_actions modify_field op set
dst_type ipv4_ecn src_type value src_value 3 width 2 / ...
Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
---
doc/guides/nics/mlx5.rst | 4 +--
drivers/net/mlx5/mlx5_flow.c | 5 ++-
drivers/net/mlx5/mlx5_flow.h | 2 ++
drivers/net/mlx5/mlx5_flow_dv.c | 49 +++++++++++++++++++++++++++---
drivers/net/mlx5/mlx5_flow_meter.c | 2 +-
5 files changed, 54 insertions(+), 8 deletions(-)
diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
index 4805d08a76..b6d51dc7c9 100644
--- a/doc/guides/nics/mlx5.rst
+++ b/doc/guides/nics/mlx5.rst
@@ -443,8 +443,8 @@ Limitations
- yellow: NULL or END.
- RED: DROP / END.
- The only supported meter policy actions:
- - green: QUEUE, RSS, PORT_ID, REPRESENTED_PORT, JUMP, DROP, MARK and SET_TAG.
- - yellow: QUEUE, RSS, PORT_ID, REPRESENTED_PORT, JUMP, DROP, MARK and SET_TAG.
+ - green: QUEUE, RSS, PORT_ID, REPRESENTED_PORT, JUMP, DROP, MODIFY_FIELD, MARK and SET_TAG.
+ - yellow: QUEUE, RSS, PORT_ID, REPRESENTED_PORT, JUMP, DROP, MODIFY_FIELD, MARK and SET_TAG.
- RED: must be DROP.
- Policy actions of RSS for green and yellow should have the same configuration except queues.
- Policy with RSS/queue action is not supported when ``dv_xmeta_en`` enabled.
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 78cb38d42b..52b5463648 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -7867,6 +7867,8 @@ mlx5_flow_destroy_mtr_acts(struct rte_eth_dev *dev,
* Meter policy struct.
* @param[in] action
* Action specification used to create meter actions.
+ * @param[in] attr
+ * Flow rule attributes.
* @param[out] error
* Perform verbose error reporting if not NULL. Initialized in case of
* error only.
@@ -7878,12 +7880,13 @@ int
mlx5_flow_create_mtr_acts(struct rte_eth_dev *dev,
struct mlx5_flow_meter_policy *mtr_policy,
const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_flow_attr *attr,
struct rte_mtr_error *error)
{
const struct mlx5_flow_driver_ops *fops;
fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV);
- return fops->create_mtr_acts(dev, mtr_policy, actions, error);
+ return fops->create_mtr_acts(dev, mtr_policy, actions, attr, error);
}
/**
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index f56115dd11..ed9b9e4876 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -1359,6 +1359,7 @@ typedef int (*mlx5_flow_create_mtr_acts_t)
(struct rte_eth_dev *dev,
struct mlx5_flow_meter_policy *mtr_policy,
const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_flow_attr *attr,
struct rte_mtr_error *error);
typedef void (*mlx5_flow_destroy_mtr_acts_t)
(struct rte_eth_dev *dev,
@@ -2017,6 +2018,7 @@ void mlx5_flow_destroy_mtr_acts(struct rte_eth_dev *dev,
int mlx5_flow_create_mtr_acts(struct rte_eth_dev *dev,
struct mlx5_flow_meter_policy *mtr_policy,
const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_flow_attr *attr,
struct rte_mtr_error *error);
int mlx5_flow_create_policy_rules(struct rte_eth_dev *dev,
struct mlx5_flow_meter_policy *mtr_policy);
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index e416eb5701..a01ba04c3b 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -15579,6 +15579,8 @@ flow_dv_destroy_mtr_policy_acts(struct rte_eth_dev *dev,
* Meter policy struct.
* @param[in] action
* Action specification used to create meter actions.
+ * @param[in] attr
+ * Pointer to the flow attributes.
* @param[out] error
* Perform verbose error reporting if not NULL. Initialized in case of
* error only.
@@ -15590,6 +15592,7 @@ static int
__flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,
struct mlx5_flow_meter_policy *mtr_policy,
const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_flow_attr *attr,
enum mlx5_meter_domain domain,
struct rte_mtr_error *error)
{
@@ -15886,6 +15889,28 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,
action_flags |= MLX5_FLOW_ACTION_JUMP;
break;
}
+ case RTE_FLOW_ACTION_TYPE_MODIFY_FIELD:
+ {
+ if (i >= MLX5_MTR_RTE_COLORS)
+ return -rte_mtr_error_set(error,
+ ENOTSUP,
+ RTE_MTR_ERROR_TYPE_METER_POLICY,
+ NULL,
+ "cannot create policy modify field for this color");
+ if (flow_dv_convert_action_modify_field
+ (dev, mhdr_res, act, attr, &flow_err))
+ return -rte_mtr_error_set(error,
+ ENOTSUP,
+ RTE_MTR_ERROR_TYPE_METER_POLICY,
+ NULL, "cannot setup policy modify field action");
+ if (!mhdr_res->actions_num)
+ return -rte_mtr_error_set(error,
+ ENOTSUP,
+ RTE_MTR_ERROR_TYPE_METER_POLICY,
+ NULL, "cannot find policy modify field action");
+ action_flags |= MLX5_FLOW_ACTION_MODIFY_FIELD;
+ break;
+ }
/*
* No need to check meter hierarchy for Y or R colors
* here since it is done in the validation stage.
@@ -15954,7 +15979,8 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,
RTE_MTR_ERROR_TYPE_METER_POLICY,
NULL, "action type not supported");
}
- if (action_flags & MLX5_FLOW_ACTION_SET_TAG) {
+ if ((action_flags & MLX5_FLOW_ACTION_SET_TAG) ||
+ (action_flags & MLX5_FLOW_ACTION_MODIFY_FIELD)) {
/* create modify action if needed. */
dev_flow.dv.group = 1;
if (flow_dv_modify_hdr_resource_register
@@ -15962,8 +15988,7 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,
return -rte_mtr_error_set(error,
ENOTSUP,
RTE_MTR_ERROR_TYPE_METER_POLICY,
- NULL, "cannot register policy "
- "set tag action");
+ NULL, "cannot register policy set tag/modify field action");
act_cnt->modify_hdr =
dev_flow.handle->dvh.modify_hdr;
}
@@ -15983,6 +16008,8 @@ __flow_dv_create_domain_policy_acts(struct rte_eth_dev *dev,
* Meter policy struct.
* @param[in] action
* Action specification used to create meter actions.
+ * @param[in] attr
+ * Pointer to the flow attributes.
* @param[out] error
* Perform verbose error reporting if not NULL. Initialized in case of
* error only.
@@ -15994,6 +16021,7 @@ static int
flow_dv_create_mtr_policy_acts(struct rte_eth_dev *dev,
struct mlx5_flow_meter_policy *mtr_policy,
const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_flow_attr *attr,
struct rte_mtr_error *error)
{
int ret, i;
@@ -16005,7 +16033,7 @@ flow_dv_create_mtr_policy_acts(struct rte_eth_dev *dev,
MLX5_MTR_SUB_POLICY_NUM_MASK;
if (sub_policy_num) {
ret = __flow_dv_create_domain_policy_acts(dev,
- mtr_policy, actions,
+ mtr_policy, actions, attr,
(enum mlx5_meter_domain)i, error);
/* Cleaning resource is done in the caller level. */
if (ret)
@@ -18176,6 +18204,19 @@ flow_dv_validate_mtr_policy_acts(struct rte_eth_dev *dev,
action_flags[i] |=
MLX5_FLOW_ACTION_METER_WITH_TERMINATED_POLICY;
break;
+ case RTE_FLOW_ACTION_TYPE_MODIFY_FIELD:
+ ret = flow_dv_validate_action_modify_field(dev,
+ action_flags[i], act, attr, &flow_err);
+ if (ret < 0)
+ return -rte_mtr_error_set(error,
+ ENOTSUP,
+ RTE_MTR_ERROR_TYPE_METER_POLICY,
+ NULL, flow_err.message ?
+ flow_err.message :
+ "Modify field action validate check fail");
+ ++actions_n;
+ action_flags[i] |= MLX5_FLOW_ACTION_MODIFY_FIELD;
+ break;
default:
return -rte_mtr_error_set(error, ENOTSUP,
RTE_MTR_ERROR_TYPE_METER_POLICY,
diff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c
index a3d1f2c08d..75672a4cd2 100644
--- a/drivers/net/mlx5/mlx5_flow_meter.c
+++ b/drivers/net/mlx5/mlx5_flow_meter.c
@@ -885,7 +885,7 @@ mlx5_flow_meter_policy_add(struct rte_eth_dev *dev,
}
rte_spinlock_init(&mtr_policy->sl);
ret = mlx5_flow_create_mtr_acts(dev, mtr_policy,
- policy->actions, error);
+ policy->actions, &attr, error);
if (ret)
goto policy_add_err;
if (mtr_policy->is_hierarchy) {
--
2.31.1
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action
2022-04-02 7:11 ` [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action Sean Zhang
@ 2022-06-01 18:51 ` Ferruh Yigit
2022-06-02 5:48 ` Ori Kam
0 siblings, 1 reply; 14+ messages in thread
From: Ferruh Yigit @ 2022-06-01 18:51 UTC (permalink / raw)
To: Sean Zhang, Ori Kam, Xiaoyun Li, Aman Singh, Yuying Zhang,
Thomas Monjalon, Andrew Rybchenko
Cc: dev, Jiawei Wang, Alexander Kozyrev
On 4/2/2022 8:11 AM, Sean Zhang wrote:
> From: Jiawei Wang <jiaweiw@nvidia.com>
>
> This patch introduces the IPv4/IPv6 ECN modify field support, and
> adds the testpmd CLI commands support.
>
> Usage:
> modify_field op set dst_type ipv4_ecn src_type ...
>
> For example:
>
> flow create 0 ingress group 1 pattern eth / ipv4 / end actions
> modify_field op set dst_type ipv4_ecn src_type value src_value
> 0x03 width 2 / queue index 0 / end
>
> Signed-off-by: Jiawei Wang <jiaweiw@nvidia.com>
> ---
> app/test-pmd/cmdline_flow.c | 3 ++-
> lib/ethdev/rte_flow.h | 2 ++
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index fc4a6d9cca..3250add834 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -795,7 +795,8 @@ static const char *const modify_field_ids[] = {
> "tcp_seq_num", "tcp_ack_num", "tcp_flags",
> "udp_port_src", "udp_port_dst",
> "vxlan_vni", "geneve_vni", "gtp_teid",
> - "tag", "mark", "meta", "pointer", "value", NULL
> + "tag", "mark", "meta", "pointer", "value",
> + "ipv4_ecn", "ipv6_ecn", NULL
> };
>
> /** Maximum number of subsequent tokens and arguments on the stack. */
> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> index d8827dd184..1b56f23cba 100644
> --- a/lib/ethdev/rte_flow.h
> +++ b/lib/ethdev/rte_flow.h
> @@ -3690,6 +3690,8 @@ enum rte_flow_field_id {
> RTE_FLOW_FIELD_META, /**< Metadata value. */
> RTE_FLOW_FIELD_POINTER, /**< Memory pointer. */
> RTE_FLOW_FIELD_VALUE, /**< Immediate value. */
> + RTE_FLOW_FIELD_IPV4_ECN, /**< IPv4 ECN. */
> + RTE_FLOW_FIELD_IPV6_ECN, /**< IPv6 ECN. */
> };
>
> /**
cc'ed Alexander.
Patch looks good to me, only perhaps release notes can be updated, what
do you think?
@Ori, @Alex, do you have any objection/comment?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header
2022-04-02 7:11 [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Sean Zhang
` (3 preceding siblings ...)
2022-04-02 7:11 ` [v1 4/4] net/mlx5: add modify field support in meter Sean Zhang
@ 2022-06-01 18:51 ` Ferruh Yigit
2022-06-02 11:44 ` Ferruh Yigit
4 siblings, 1 reply; 14+ messages in thread
From: Ferruh Yigit @ 2022-06-01 18:51 UTC (permalink / raw)
To: Sean Zhang, Matan Azrad, Viacheslav Ovsiienko; +Cc: dev
On 4/2/2022 8:11 AM, Sean Zhang wrote:
> This patch set adds support for modifying ECN fields in IPv4/IPv6
> header, and also adds support for modify_filed action in meter.
>
> Jiawei Wang (1):
> ethdev: add IPv4/IPv6 ECN header rewrite action
>
> Sean Zhang (3):
> common/mlx5: add modify ECN capability check
> net/mlx5: add support to modify ECN field
> net/mlx5: add modify field support in meter
>
To be able to merge it as set, mlx5 driver patches requires driver
maintainer's ack/review.
@Matan, @Slava, can you please check them?
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action
2022-06-01 18:51 ` Ferruh Yigit
@ 2022-06-02 5:48 ` Ori Kam
2022-06-02 11:44 ` Ferruh Yigit
0 siblings, 1 reply; 14+ messages in thread
From: Ori Kam @ 2022-06-02 5:48 UTC (permalink / raw)
To: Ferruh Yigit, Sean Zhang (Networking SW),
Xiaoyun Li, Aman Singh, Yuying Zhang,
NBU-Contact-Thomas Monjalon (EXTERNAL),
Andrew Rybchenko
Cc: dev, Jiawei(Jonny) Wang, Alexander Kozyrev
> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit@xilinx.com>
> Sent: Wednesday, June 1, 2022 9:51 PM
> To: Sean Zhang (Networking SW) <xiazhang@nvidia.com>; Ori Kam <orika@nvidia.com>; Xiaoyun Li
> <xiaoyun.li@intel.com>; Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang
> <yuying.zhang@intel.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) <thomas@monjalon.net>;
> Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> Cc: dev@dpdk.org; Jiawei(Jonny) Wang <jiaweiw@nvidia.com>; Alexander Kozyrev
> <akozyrev@nvidia.com>
> Subject: Re: [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action
>
> On 4/2/2022 8:11 AM, Sean Zhang wrote:
> > From: Jiawei Wang <jiaweiw@nvidia.com>
> >
> > This patch introduces the IPv4/IPv6 ECN modify field support, and
> > adds the testpmd CLI commands support.
> >
> > Usage:
> > modify_field op set dst_type ipv4_ecn src_type ...
> >
> > For example:
> >
> > flow create 0 ingress group 1 pattern eth / ipv4 / end actions
> > modify_field op set dst_type ipv4_ecn src_type value src_value
> > 0x03 width 2 / queue index 0 / end
> >
> > Signed-off-by: Jiawei Wang <jiaweiw@nvidia.com>
> > ---
> > app/test-pmd/cmdline_flow.c | 3 ++-
> > lib/ethdev/rte_flow.h | 2 ++
> > 2 files changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> > index fc4a6d9cca..3250add834 100644
> > --- a/app/test-pmd/cmdline_flow.c
> > +++ b/app/test-pmd/cmdline_flow.c
> > @@ -795,7 +795,8 @@ static const char *const modify_field_ids[] = {
> > "tcp_seq_num", "tcp_ack_num", "tcp_flags",
> > "udp_port_src", "udp_port_dst",
> > "vxlan_vni", "geneve_vni", "gtp_teid",
> > - "tag", "mark", "meta", "pointer", "value", NULL
> > + "tag", "mark", "meta", "pointer", "value",
> > + "ipv4_ecn", "ipv6_ecn", NULL
> > };
> >
> > /** Maximum number of subsequent tokens and arguments on the stack. */
> > diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> > index d8827dd184..1b56f23cba 100644
> > --- a/lib/ethdev/rte_flow.h
> > +++ b/lib/ethdev/rte_flow.h
> > @@ -3690,6 +3690,8 @@ enum rte_flow_field_id {
> > RTE_FLOW_FIELD_META, /**< Metadata value. */
> > RTE_FLOW_FIELD_POINTER, /**< Memory pointer. */
> > RTE_FLOW_FIELD_VALUE, /**< Immediate value. */
> > + RTE_FLOW_FIELD_IPV4_ECN, /**< IPv4 ECN. */
> > + RTE_FLOW_FIELD_IPV6_ECN, /**< IPv6 ECN. */
> > };
> >
> > /**
>
> cc'ed Alexander.
>
> Patch looks good to me, only perhaps release notes can be updated, what
> do you think?
>
> @Ori, @Alex, do you have any objection/comment?
Acked-by: Ori Kam <orika@nvidia.com>
Best,
Ori
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header
2022-06-01 18:51 ` [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Ferruh Yigit
@ 2022-06-02 11:44 ` Ferruh Yigit
2022-06-02 13:13 ` Sean Zhang (Networking SW)
0 siblings, 1 reply; 14+ messages in thread
From: Ferruh Yigit @ 2022-06-02 11:44 UTC (permalink / raw)
To: Sean Zhang, Matan Azrad, Viacheslav Ovsiienko; +Cc: dev
On 6/1/2022 7:51 PM, Ferruh Yigit wrote:
> On 4/2/2022 8:11 AM, Sean Zhang wrote:
>> This patch set adds support for modifying ECN fields in IPv4/IPv6
>> header, and also adds support for modify_filed action in meter.
>>
>> Jiawei Wang (1):
>> ethdev: add IPv4/IPv6 ECN header rewrite action
>>
>> Sean Zhang (3):
>> common/mlx5: add modify ECN capability check
>> net/mlx5: add support to modify ECN field
>> net/mlx5: add modify field support in meter
>>
>
> To be able to merge it as set, mlx5 driver patches requires driver
> maintainer's ack/review.
>
> @Matan, @Slava, can you please check them?
Hi Sean,
ethdev patch is merged to have it in -rc1, driver patches can be handled
separately.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action
2022-06-02 5:48 ` Ori Kam
@ 2022-06-02 11:44 ` Ferruh Yigit
0 siblings, 0 replies; 14+ messages in thread
From: Ferruh Yigit @ 2022-06-02 11:44 UTC (permalink / raw)
To: Ori Kam, Sean Zhang (Networking SW),
Xiaoyun Li, Aman Singh, Yuying Zhang,
NBU-Contact-Thomas Monjalon (EXTERNAL),
Andrew Rybchenko
Cc: dev, Jiawei(Jonny) Wang, Alexander Kozyrev
On 6/2/2022 6:48 AM, Ori Kam wrote:
>
>
>> -----Original Message-----
>> From: Ferruh Yigit <ferruh.yigit@xilinx.com>
>> Sent: Wednesday, June 1, 2022 9:51 PM
>> To: Sean Zhang (Networking SW) <xiazhang@nvidia.com>; Ori Kam <orika@nvidia.com>; Xiaoyun Li
>> <xiaoyun.li@intel.com>; Aman Singh <aman.deep.singh@intel.com>; Yuying Zhang
>> <yuying.zhang@intel.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) <thomas@monjalon.net>;
>> Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>> Cc: dev@dpdk.org; Jiawei(Jonny) Wang <jiaweiw@nvidia.com>; Alexander Kozyrev
>> <akozyrev@nvidia.com>
>> Subject: Re: [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action
>>
>> On 4/2/2022 8:11 AM, Sean Zhang wrote:
>>> From: Jiawei Wang <jiaweiw@nvidia.com>
>>>
>>> This patch introduces the IPv4/IPv6 ECN modify field support, and
>>> adds the testpmd CLI commands support.
>>>
>>> Usage:
>>> modify_field op set dst_type ipv4_ecn src_type ...
>>>
>>> For example:
>>>
>>> flow create 0 ingress group 1 pattern eth / ipv4 / end actions
>>> modify_field op set dst_type ipv4_ecn src_type value src_value
>>> 0x03 width 2 / queue index 0 / end
>>>
>>> Signed-off-by: Jiawei Wang <jiaweiw@nvidia.com>
>>
>> cc'ed Alexander.
>>
>> Patch looks good to me, only perhaps release notes can be updated, what
>> do you think?
>>
>> @Ori, @Alex, do you have any objection/comment?
>
> Acked-by: Ori Kam <orika@nvidia.com>
Applied to dpdk-next-net/main, thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header
2022-06-02 11:44 ` Ferruh Yigit
@ 2022-06-02 13:13 ` Sean Zhang (Networking SW)
0 siblings, 0 replies; 14+ messages in thread
From: Sean Zhang (Networking SW) @ 2022-06-02 13:13 UTC (permalink / raw)
To: Ferruh Yigit, Matan Azrad, Slava Ovsiienko; +Cc: dev
> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit@xilinx.com>
> Sent: Thursday, June 2, 2022 7:45 PM
> To: Sean Zhang (Networking SW) <xiazhang@nvidia.com>; Matan Azrad
> <matan@nvidia.com>; Slava Ovsiienko <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org
> Subject: Re: [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header
>
> External email: Use caution opening links or attachments
>
>
> On 6/1/2022 7:51 PM, Ferruh Yigit wrote:
> > On 4/2/2022 8:11 AM, Sean Zhang wrote:
> >> This patch set adds support for modifying ECN fields in IPv4/IPv6
> >> header, and also adds support for modify_filed action in meter.
> >>
> >> Jiawei Wang (1):
> >> ethdev: add IPv4/IPv6 ECN header rewrite action
> >>
> >> Sean Zhang (3):
> >> common/mlx5: add modify ECN capability check
> >> net/mlx5: add support to modify ECN field
> >> net/mlx5: add modify field support in meter
> >>
> >
> > To be able to merge it as set, mlx5 driver patches requires driver
> > maintainer's ack/review.
> >
> > @Matan, @Slava, can you please check them?
>
> Hi Sean,
>
> ethdev patch is merged to have it in -rc1, driver patches can be handled
> separately.
Got it, thanks. 😊
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [v1 3/4] net/mlx5: add support to modify ECN field
2022-04-02 7:11 ` [v1 3/4] net/mlx5: add support to modify ECN field Sean Zhang
@ 2022-06-06 7:17 ` Slava Ovsiienko
0 siblings, 0 replies; 14+ messages in thread
From: Slava Ovsiienko @ 2022-06-06 7:17 UTC (permalink / raw)
To: Sean Zhang (Networking SW), Matan Azrad; +Cc: dev
> -----Original Message-----
> From: Sean Zhang (Networking SW) <xiazhang@nvidia.com>
> Sent: Saturday, April 2, 2022 10:12
> To: Matan Azrad <matan@nvidia.com>; Slava Ovsiienko
> <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org
> Subject: [v1 3/4] net/mlx5: add support to modify ECN field
>
> This patch is to support modify ECN field in IPv4/IPv6 header.
>
> Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [v1 4/4] net/mlx5: add modify field support in meter
2022-04-02 7:11 ` [v1 4/4] net/mlx5: add modify field support in meter Sean Zhang
@ 2022-06-06 7:18 ` Slava Ovsiienko
0 siblings, 0 replies; 14+ messages in thread
From: Slava Ovsiienko @ 2022-06-06 7:18 UTC (permalink / raw)
To: Sean Zhang (Networking SW), Matan Azrad; +Cc: dev
> -----Original Message-----
> From: Sean Zhang (Networking SW) <xiazhang@nvidia.com>
> Sent: Saturday, April 2, 2022 10:12
> To: Matan Azrad <matan@nvidia.com>; Slava Ovsiienko
> <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org
> Subject: [v1 4/4] net/mlx5: add modify field support in meter
>
> This patch introduces MODIFY_FIELD action support in meter. User can create
> meter policy with MODIFY_FIELD action in green/yellow action.
>
> For example:
>
> testpmd> add port meter policy 0 21 g_actions modify_field op set
> dst_type ipv4_ecn src_type value src_value 3 width 2 / ...
>
> Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: [v1 2/4] common/mlx5: add modify ECN capability check
2022-04-02 7:11 ` [v1 2/4] common/mlx5: add modify ECN capability check Sean Zhang
@ 2022-06-06 8:05 ` Slava Ovsiienko
0 siblings, 0 replies; 14+ messages in thread
From: Slava Ovsiienko @ 2022-06-06 8:05 UTC (permalink / raw)
To: Sean Zhang (Networking SW), Matan Azrad; +Cc: dev
> -----Original Message-----
> From: Sean Zhang (Networking SW) <xiazhang@nvidia.com>
> Sent: Saturday, April 2, 2022 10:12
> To: Matan Azrad <matan@nvidia.com>; Slava Ovsiienko
> <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org
> Subject: [v1 2/4] common/mlx5: add modify ECN capability check
>
> Flag outer_ip_ecn in header modify capabilities properties layout is added in
> order to check if the firmware supports modification of ecn field.
>
> Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2022-06-06 8:05 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-02 7:11 [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Sean Zhang
2022-04-02 7:11 ` [v1 1/4] ethdev: add IPv4/IPv6 ECN header rewrite action Sean Zhang
2022-06-01 18:51 ` Ferruh Yigit
2022-06-02 5:48 ` Ori Kam
2022-06-02 11:44 ` Ferruh Yigit
2022-04-02 7:11 ` [v1 2/4] common/mlx5: add modify ECN capability check Sean Zhang
2022-06-06 8:05 ` Slava Ovsiienko
2022-04-02 7:11 ` [v1 3/4] net/mlx5: add support to modify ECN field Sean Zhang
2022-06-06 7:17 ` Slava Ovsiienko
2022-04-02 7:11 ` [v1 4/4] net/mlx5: add modify field support in meter Sean Zhang
2022-06-06 7:18 ` Slava Ovsiienko
2022-06-01 18:51 ` [v1 0/4] Add support for modifying ECN in IPv4/IPv6 header Ferruh Yigit
2022-06-02 11:44 ` Ferruh Yigit
2022-06-02 13:13 ` Sean Zhang (Networking SW)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).