From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 4D2B0A0487
	for <public@inbox.dpdk.org>; Wed,  3 Jul 2019 08:30:35 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 2992A326D;
	Wed,  3 Jul 2019 08:30:35 +0200 (CEST)
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-eopbgr80058.outbound.protection.outlook.com [40.107.8.58])
 by dpdk.org (Postfix) with ESMTP id 2650628EE
 for <dev@dpdk.org>; Wed,  3 Jul 2019 08:30:33 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;
 s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=PyBxIPFTY3q2sstxqDrL8ktuQPzKUDZ97hUUZW6yESk=;
 b=SuXN7TpX36K5kJbaC0PUyljrhaGIo3PdX2hhas9c5r/GgnUNbM8WLLy0qRCzbAoQDpfB56OopsfOm9juzDj8ymWJI6TFMRV6XZjrU3ct5S2hTNc54ZD6IlofKI1c1HWexSu6GrqNuZaT457L9+k698yyPN7LvFCdwVzbRNisHhA=
Received: from AM4PR05MB3265.eurprd05.prod.outlook.com (10.171.188.154) by
 AM4PR05MB3282.eurprd05.prod.outlook.com (10.171.187.159) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2032.20; Wed, 3 Jul 2019 06:30:30 +0000
Received: from AM4PR05MB3265.eurprd05.prod.outlook.com
 ([fe80::1442:fc4d:41ad:29d2]) by AM4PR05MB3265.eurprd05.prod.outlook.com
 ([fe80::1442:fc4d:41ad:29d2%5]) with mapi id 15.20.2032.019; Wed, 3 Jul 2019
 06:30:30 +0000
From: Slava Ovsiienko <viacheslavo@mellanox.com>
To: Dekel Peled <dekelp@mellanox.com>, Adrien Mazarguil
 <adrien.mazarguil@6wind.com>, "wenzhuo.lu@intel.com" <wenzhuo.lu@intel.com>,
 "jingjing.wu@intel.com" <jingjing.wu@intel.com>,
 "bernard.iremonger@intel.com" <bernard.iremonger@intel.com>, Yongseok Koh
 <yskoh@mellanox.com>, Shahaf Shuler <shahafs@mellanox.com>,
 "arybchenko@solarflare.com" <arybchenko@solarflare.com>, Raslan Darawsheh
 <rasland@mellanox.com>
CC: "dev@dpdk.org" <dev@dpdk.org>, Ori Kam <orika@mellanox.com>
Thread-Topic: [PATCH v10 3/3] net/mlx5: update modify header using Direct Verbs
Thread-Index: AQHVMOTltSro3IpWDEyQZycQBUudmqa4b76w
Date: Wed, 3 Jul 2019 06:30:29 +0000
Message-ID: <AM4PR05MB3265EE3513299E571521777AD2FB0@AM4PR05MB3265.eurprd05.prod.outlook.com>
References: <1553177917-43297-1-git-send-email-dekelp@mellanox.com>
 <cover.1562078184.git.dekelp@mellanox.com>
 <a6bde8a76159d5fcfcfe8839fd9225509551dc5a.1562078184.git.dekelp@mellanox.com>
In-Reply-To: <a6bde8a76159d5fcfcfe8839fd9225509551dc5a.1562078184.git.dekelp@mellanox.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=viacheslavo@mellanox.com; 
x-originating-ip: [95.67.35.250]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 49c4f043-f53a-4d19-a61b-08d6ff7ff1ba
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:AM4PR05MB3282; 
x-ms-traffictypediagnostic: AM4PR05MB3282:
x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr
x-microsoft-antispam-prvs: <AM4PR05MB32823B8A49950724A3F1E4AED2FB0@AM4PR05MB3282.eurprd05.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-forefront-prvs: 00872B689F
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(366004)(396003)(376002)(346002)(136003)(13464003)(199004)(189003)(26005)(76176011)(25786009)(5660300002)(478600001)(6246003)(54906003)(107886003)(2501003)(7736002)(76116006)(476003)(446003)(30864003)(186003)(6636002)(110136005)(52536014)(9686003)(11346002)(229853002)(86362001)(15650500001)(2906002)(2201001)(4326008)(7696005)(66556008)(305945005)(64756008)(66476007)(66446008)(33656002)(66946007)(99286004)(71200400001)(53546011)(53936002)(74316002)(14444005)(316002)(66066001)(8936002)(55016002)(256004)(8676002)(6116002)(3846002)(68736007)(6436002)(71190400001)(81156014)(14454004)(486006)(73956011)(6506007)(102836004)(81166006);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB3282;
 H:AM4PR05MB3265.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: mellanox.com does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 1Y7hkcsUhybhMwsd8FMQkmQrbNZCdag5t297N3zZLwF+Hn3NJ5azdEMTLk2FmXXsfDTrubnfAiBuhHLHVVN9Ss53+axJuixR+j9F5NoSb8FwHpmeVLfBlKHwR41G3P8J43Q3Dov3GBCAT+NZnFrSmmYlnlDJQjUWb17QxxsDzSB3RbUFGrhINvy/R6Avg9ShJw5SbhPzl2Tz3eALnssd97TMfR13XrbTLSV9o6f0Kd2hk2igj4GVDcr9z5DrWXMEdI74nhNFgh5V/KMYMXPM84AJyC9cZhGxrEVNPnu35laSrSLqeezXGwiEVCZAZIgaiOwmj2FZeyg8ut7mKj4R8JME3gA6vHbgKVZuHr47x2YwUbJAa28lf1ol/xM2NkQYPsEtFC+Jx21M7RURA4N3baVbWwhy1XdzhYTkCMBMz5U=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: Mellanox.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 49c4f043-f53a-4d19-a61b-08d6ff7ff1ba
X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jul 2019 06:30:29.9175 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: viacheslavo@mellanox.com
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3282
Subject: Re: [dpdk-dev] [PATCH v10 3/3] net/mlx5: update modify header using
	Direct Verbs
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

> -----Original Message-----
> From: Dekel Peled <dekelp@mellanox.com>
> Sent: Tuesday, July 2, 2019 17:44
> To: Adrien Mazarguil <adrien.mazarguil@6wind.com>;
> wenzhuo.lu@intel.com; jingjing.wu@intel.com;
> bernard.iremonger@intel.com; Yongseok Koh <yskoh@mellanox.com>;
> Shahaf Shuler <shahafs@mellanox.com>; Slava Ovsiienko
> <viacheslavo@mellanox.com>; arybchenko@solarflare.com
> Cc: dev@dpdk.org; Ori Kam <orika@mellanox.com>
> Subject: [PATCH v10 3/3] net/mlx5: update modify header using Direct Verb=
s
>=20
> This patch implements additional actions of packet header
> modifications.
>=20
> Add actions:
> - INC_TCP_SEQ - Increase sequence number in the outermost TCP header.
> - DEC_TCP_SEQ - Decrease sequence number in the outermost TCP header.
> - INC_TCP_ACK - Increase acknowledgment number in the outermost TCP
> 		header.
> - DEC_TCP_ACK - Decrease acknowledgment number in the outermost TCP
> 		header.
>=20
> Original work by Xiaoyu Min.
>=20
> Signed-off-by: Dekel Peled <dekelp@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>

> ---
>  doc/guides/rel_notes/release_19_08.rst |   7 +
>  drivers/net/mlx5/mlx5_flow.h           |  10 +-
>  drivers/net/mlx5/mlx5_flow_dv.c        | 237
> +++++++++++++++++++++++++++++++++
>  drivers/net/mlx5/mlx5_prm.h            |  12 ++
>  4 files changed, 265 insertions(+), 1 deletion(-)
>=20
> diff --git a/doc/guides/rel_notes/release_19_08.rst
> b/doc/guides/rel_notes/release_19_08.rst
> index 3da2667..450d22f 100644
> --- a/doc/guides/rel_notes/release_19_08.rst
> +++ b/doc/guides/rel_notes/release_19_08.rst
> @@ -74,6 +74,13 @@ New Features
>=20
>    * Enabled Tx outer/inner L3/L4 checksum offload.
>=20
> +* **Updated Mellanox mlx5 driver.**
> +
> +  Updated Mellanox mlx5 driver with new features and improvements,
> including:
> +
> +  * Updated the packet header modification feature. Added support of TCP
> header
> +    sequence number and acknowledgment number modification.
> +
>  * **Updated Solarflare network PMD.**
>=20
>    Updated the Solarflare ``sfc_efx`` driver with changes including:
> diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
> index b665420..dc4a56a 100644
> --- a/drivers/net/mlx5/mlx5_flow.h
> +++ b/drivers/net/mlx5/mlx5_flow.h
> @@ -114,6 +114,10 @@
>  #define MLX5_FLOW_ACTION_NVGRE_DECAP (1u << 25)
>  #define MLX5_FLOW_ACTION_RAW_ENCAP (1u << 26)
>  #define MLX5_FLOW_ACTION_RAW_DECAP (1u << 27)
> +#define MLX5_FLOW_ACTION_INC_TCP_SEQ (1u << 28)
> +#define MLX5_FLOW_ACTION_DEC_TCP_SEQ (1u << 29)
> +#define MLX5_FLOW_ACTION_INC_TCP_ACK (1u << 30)
> +#define MLX5_FLOW_ACTION_DEC_TCP_ACK (1u << 31)
>=20
>  #define MLX5_FLOW_FATE_ACTIONS \
>  	(MLX5_FLOW_ACTION_DROP | MLX5_FLOW_ACTION_QUEUE | \
> @@ -140,7 +144,11 @@
>  				      MLX5_FLOW_ACTION_SET_TTL | \
>  				      MLX5_FLOW_ACTION_DEC_TTL | \
>  				      MLX5_FLOW_ACTION_SET_MAC_SRC | \
> -				      MLX5_FLOW_ACTION_SET_MAC_DST)
> +				      MLX5_FLOW_ACTION_SET_MAC_DST | \
> +				      MLX5_FLOW_ACTION_INC_TCP_SEQ | \
> +				      MLX5_FLOW_ACTION_DEC_TCP_SEQ | \
> +				      MLX5_FLOW_ACTION_INC_TCP_ACK | \
> +				      MLX5_FLOW_ACTION_DEC_TCP_ACK)
>=20
>  #ifndef IPPROTO_MPLS
>  #define IPPROTO_MPLS 137
> diff --git a/drivers/net/mlx5/mlx5_flow_dv.c
> b/drivers/net/mlx5/mlx5_flow_dv.c
> index 933ad0b..8f64182 100644
> --- a/drivers/net/mlx5/mlx5_flow_dv.c
> +++ b/drivers/net/mlx5/mlx5_flow_dv.c
> @@ -136,6 +136,8 @@ struct field_modify_info modify_udp[] =3D {
>  struct field_modify_info modify_tcp[] =3D {
>  	{2, 0, MLX5_MODI_OUT_TCP_SPORT},
>  	{2, 2, MLX5_MODI_OUT_TCP_DPORT},
> +	{4, 4, MLX5_MODI_OUT_TCP_SEQ_NUM},
> +	{4, 8, MLX5_MODI_OUT_TCP_ACK_NUM},
>  	{0, 0, 0},
>  };
>=20
> @@ -561,6 +563,96 @@ struct field_modify_info modify_tcp[] =3D {
>  }
>=20
>  /**
> + * Convert modify-header increment/decrement TCP Sequence number
> + * to DV specification.
> + *
> + * @param[in,out] resource
> + *   Pointer to the modify-header resource.
> + * @param[in] action
> + *   Pointer to action specification.
> + * @param[out] error
> + *   Pointer to the error structure.
> + *
> + * @return
> + *   0 on success, a negative errno value otherwise and rte_errno is set=
.
> + */
> +static int
> +flow_dv_convert_action_modify_tcp_seq
> +			(struct mlx5_flow_dv_modify_hdr_resource
> *resource,
> +			 const struct rte_flow_action *action,
> +			 struct rte_flow_error *error)
> +{
> +	const rte_be32_t *conf =3D (const rte_be32_t *)(action->conf);
> +	uint64_t value =3D rte_be_to_cpu_32(*conf);
> +	struct rte_flow_item item;
> +	struct rte_flow_item_tcp tcp;
> +	struct rte_flow_item_tcp tcp_mask;
> +
> +	memset(&tcp, 0, sizeof(tcp));
> +	memset(&tcp_mask, 0, sizeof(tcp_mask));
> +	if (action->type =3D=3D RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ)
> +		/*
> +		 * The HW has no decrement operation, only increment
> operation.
> +		 * To simulate decrement X from Y using increment operation
> +		 * we need to add UINT32_MAX X times to Y.
> +		 * Each adding of UINT32_MAX decrements Y by 1.
> +		 */
> +		value *=3D UINT32_MAX;
> +	tcp.hdr.sent_seq =3D rte_cpu_to_be_32((uint32_t)value);
> +	tcp_mask.hdr.sent_seq =3D RTE_BE32(UINT32_MAX);
> +	item.type =3D RTE_FLOW_ITEM_TYPE_TCP;
> +	item.spec =3D &tcp;
> +	item.mask =3D &tcp_mask;
> +	return flow_dv_convert_modify_action(&item, modify_tcp,
> resource,
> +
> MLX5_MODIFICATION_TYPE_ADD, error);
> +}
> +
> +/**
> + * Convert modify-header increment/decrement TCP Acknowledgment
> number
> + * to DV specification.
> + *
> + * @param[in,out] resource
> + *   Pointer to the modify-header resource.
> + * @param[in] action
> + *   Pointer to action specification.
> + * @param[out] error
> + *   Pointer to the error structure.
> + *
> + * @return
> + *   0 on success, a negative errno value otherwise and rte_errno is set=
.
> + */
> +static int
> +flow_dv_convert_action_modify_tcp_ack
> +			(struct mlx5_flow_dv_modify_hdr_resource
> *resource,
> +			 const struct rte_flow_action *action,
> +			 struct rte_flow_error *error)
> +{
> +	const rte_be32_t *conf =3D (const rte_be32_t *)(action->conf);
> +	uint64_t value =3D rte_be_to_cpu_32(*conf);
> +	struct rte_flow_item item;
> +	struct rte_flow_item_tcp tcp;
> +	struct rte_flow_item_tcp tcp_mask;
> +
> +	memset(&tcp, 0, sizeof(tcp));
> +	memset(&tcp_mask, 0, sizeof(tcp_mask));
> +	if (action->type =3D=3D RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK)
> +		/*
> +		 * The HW has no decrement operation, only increment
> operation.
> +		 * To simulate decrement X from Y using increment operation
> +		 * we need to add UINT32_MAX X times to Y.
> +		 * Each adding of UINT32_MAX decrements Y by 1.
> +		 */
> +		value *=3D UINT32_MAX;
> +	tcp.hdr.recv_ack =3D rte_cpu_to_be_32((uint32_t)value);
> +	tcp_mask.hdr.recv_ack =3D RTE_BE32(UINT32_MAX);
> +	item.type =3D RTE_FLOW_ITEM_TYPE_TCP;
> +	item.spec =3D &tcp;
> +	item.mask =3D &tcp_mask;
> +	return flow_dv_convert_modify_action(&item, modify_tcp,
> resource,
> +
> MLX5_MODIFICATION_TYPE_ADD, error);
> +}
> +
> +/**
>   * Validate META item.
>   *
>   * @param[in] dev
> @@ -1668,6 +1760,96 @@ struct field_modify_info modify_tcp[] =3D {
>  }
>=20
>  /**
> + * Validate the modify-header actions of increment/decrement
> + * TCP Sequence-number.
> + *
> + * @param[in] action_flags
> + *   Holds the actions detected until now.
> + * @param[in] action
> + *   Pointer to the modify action.
> + * @param[in] item_flags
> + *   Holds the items detected.
> + * @param[out] error
> + *   Pointer to error structure.
> + *
> + * @return
> + *   0 on success, a negative errno value otherwise and rte_errno is set=
.
> + */
> +static int
> +flow_dv_validate_action_modify_tcp_seq(const uint64_t action_flags,
> +				       const struct rte_flow_action *action,
> +				       const uint64_t item_flags,
> +				       struct rte_flow_error *error)
> +{
> +	int ret =3D 0;
> +
> +	ret =3D flow_dv_validate_action_modify_hdr(action_flags, action,
> error);
> +	if (!ret) {
> +		if (!(item_flags & MLX5_FLOW_LAYER_OUTER_L4_TCP))
> +			return rte_flow_error_set(error, EINVAL,
> +
> RTE_FLOW_ERROR_TYPE_ACTION,
> +						  NULL, "no TCP item in"
> +						  " pattern");
> +		if ((action->type =3D=3D RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ
> &&
> +			(action_flags &
> MLX5_FLOW_ACTION_DEC_TCP_SEQ)) ||
> +		    (action->type =3D=3D RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ
> &&
> +			(action_flags &
> MLX5_FLOW_ACTION_INC_TCP_SEQ)))
> +			return rte_flow_error_set(error, EINVAL,
> +
> RTE_FLOW_ERROR_TYPE_ACTION,
> +						  NULL,
> +						  "cannot decrease and
> increase"
> +						  " TCP sequence number"
> +						  " at the same time");
> +	}
> +	return ret;
> +}
> +
> +/**
> + * Validate the modify-header actions of increment/decrement
> + * TCP Acknowledgment number.
> + *
> + * @param[in] action_flags
> + *   Holds the actions detected until now.
> + * @param[in] action
> + *   Pointer to the modify action.
> + * @param[in] item_flags
> + *   Holds the items detected.
> + * @param[out] error
> + *   Pointer to error structure.
> + *
> + * @return
> + *   0 on success, a negative errno value otherwise and rte_errno is set=
.
> + */
> +static int
> +flow_dv_validate_action_modify_tcp_ack(const uint64_t action_flags,
> +				       const struct rte_flow_action *action,
> +				       const uint64_t item_flags,
> +				       struct rte_flow_error *error)
> +{
> +	int ret =3D 0;
> +
> +	ret =3D flow_dv_validate_action_modify_hdr(action_flags, action,
> error);
> +	if (!ret) {
> +		if (!(item_flags & MLX5_FLOW_LAYER_OUTER_L4_TCP))
> +			return rte_flow_error_set(error, EINVAL,
> +
> RTE_FLOW_ERROR_TYPE_ACTION,
> +						  NULL, "no TCP item in"
> +						  " pattern");
> +		if ((action->type =3D=3D RTE_FLOW_ACTION_TYPE_INC_TCP_ACK
> &&
> +			(action_flags &
> MLX5_FLOW_ACTION_DEC_TCP_ACK)) ||
> +		    (action->type =3D=3D RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK
> &&
> +			(action_flags &
> MLX5_FLOW_ACTION_INC_TCP_ACK)))
> +			return rte_flow_error_set(error, EINVAL,
> +
> RTE_FLOW_ERROR_TYPE_ACTION,
> +						  NULL,
> +						  "cannot decrease and
> increase"
> +						  " TCP acknowledgment
> number"
> +						  " at the same time");
> +	}
> +	return ret;
> +}
> +
> +/**
>   * Validate the modify-header TTL actions.
>   *
>   * @param[in] action_flags
> @@ -2416,6 +2598,40 @@ struct field_modify_info modify_tcp[] =3D {
>  			++actions_n;
>  			action_flags |=3D MLX5_FLOW_ACTION_JUMP;
>  			break;
> +		case RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ:
> +		case RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ:
> +			ret =3D flow_dv_validate_action_modify_tcp_seq
> +
> 	(action_flags,
> +								 actions,
> +								 item_flags,
> +								 error);
> +			if (ret < 0)
> +				return ret;
> +			/* Count all modify-header actions as one action. */
> +			if (!(action_flags &
> MLX5_FLOW_MODIFY_HDR_ACTIONS))
> +				++actions_n;
> +			action_flags |=3D actions->type =3D=3D
> +
> 	RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ ?
> +
> 	MLX5_FLOW_ACTION_INC_TCP_SEQ :
> +
> 	MLX5_FLOW_ACTION_DEC_TCP_SEQ;
> +			break;
> +		case RTE_FLOW_ACTION_TYPE_INC_TCP_ACK:
> +		case RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK:
> +			ret =3D flow_dv_validate_action_modify_tcp_ack
> +
> 	(action_flags,
> +								 actions,
> +								 item_flags,
> +								 error);
> +			if (ret < 0)
> +				return ret;
> +			/* Count all modify-header actions as one action. */
> +			if (!(action_flags &
> MLX5_FLOW_MODIFY_HDR_ACTIONS))
> +				++actions_n;
> +			action_flags |=3D actions->type =3D=3D
> +
> 	RTE_FLOW_ACTION_TYPE_INC_TCP_ACK ?
> +
> 	MLX5_FLOW_ACTION_INC_TCP_ACK :
> +
> 	MLX5_FLOW_ACTION_DEC_TCP_ACK;
> +			break;
>  		default:
>  			return rte_flow_error_set(error, ENOTSUP,
>=20
> RTE_FLOW_ERROR_TYPE_ACTION,
> @@ -3895,6 +4111,27 @@ struct field_modify_info modify_tcp[] =3D {
>  				return -rte_errno;
>  			action_flags |=3D MLX5_FLOW_ACTION_SET_TTL;
>  			break;
> +		case RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ:
> +		case RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ:
> +			if (flow_dv_convert_action_modify_tcp_seq(&res,
> actions,
> +								  error))
> +				return -rte_errno;
> +			action_flags |=3D actions->type =3D=3D
> +
> 	RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ ?
> +					MLX5_FLOW_ACTION_INC_TCP_SEQ
> :
> +
> 	MLX5_FLOW_ACTION_DEC_TCP_SEQ;
> +			break;
> +
> +		case RTE_FLOW_ACTION_TYPE_INC_TCP_ACK:
> +		case RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK:
> +			if (flow_dv_convert_action_modify_tcp_ack(&res,
> actions,
> +								  error))
> +				return -rte_errno;
> +			action_flags |=3D actions->type =3D=3D
> +
> 	RTE_FLOW_ACTION_TYPE_INC_TCP_ACK ?
> +					MLX5_FLOW_ACTION_INC_TCP_ACK
> :
> +
> 	MLX5_FLOW_ACTION_DEC_TCP_ACK;
> +			break;
>  		case RTE_FLOW_ACTION_TYPE_END:
>  			actions_end =3D true;
>  			if (action_flags &
> MLX5_FLOW_MODIFY_HDR_ACTIONS) {
> diff --git a/drivers/net/mlx5/mlx5_prm.h b/drivers/net/mlx5/mlx5_prm.h
> index 1a19958..7482383 100644
> --- a/drivers/net/mlx5/mlx5_prm.h
> +++ b/drivers/net/mlx5/mlx5_prm.h
> @@ -347,6 +347,18 @@ enum mlx5_modification_field {
>  	MLX5_MODI_IN_IPV6_HOPLIMIT,
>  	MLX5_MODI_META_DATA_REG_A,
>  	MLX5_MODI_META_DATA_REG_B =3D 0x50,
> +	MLX5_MODI_META_REG_C_0,
> +	MLX5_MODI_META_REG_C_1,
> +	MLX5_MODI_META_REG_C_2,
> +	MLX5_MODI_META_REG_C_3,
> +	MLX5_MODI_META_REG_C_4,
> +	MLX5_MODI_META_REG_C_5,
> +	MLX5_MODI_META_REG_C_6,
> +	MLX5_MODI_META_REG_C_7,
> +	MLX5_MODI_OUT_TCP_SEQ_NUM,
> +	MLX5_MODI_IN_TCP_SEQ_NUM,
> +	MLX5_MODI_OUT_TCP_ACK_NUM,
> +	MLX5_MODI_IN_TCP_ACK_NUM =3D 0x5C,
>  };
>=20
>  /* Modification sub command. */
> --
> 1.8.3.1