* [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
* 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 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 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
* [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
* 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
* [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
* 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
* [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 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 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 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 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
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).