DPDK patches and discussions
 help / color / mirror / Atom feed
* [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).