From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <shahafs@mellanox.com>
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-eopbgr130079.outbound.protection.outlook.com [40.107.13.79])
 by dpdk.org (Postfix) with ESMTP id C781F1B3BA
 for <dev@dpdk.org>; Thu, 21 Mar 2019 07:04:24 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=b3uqpiBOpwfsnwPg2TiUyh4dlEk4yU7g6g5v2EYYp5k=;
 b=lkZQ7hQSTK/e0p7FvnrAq/uJaEC4O8wulJOL5aAG5asydhjJuq4qXkRKhO89OAlghagR+00bzo4ciZDkjLmKhwB6+3uvcwqLoqjqlCRSWosSRWLTLlQhCBcKKiVQKftEi5mPH5CDoTtU0X42krZzIzG8iT8QEdanFJHBjqFyTfM=
Received: from AM0PR0502MB3795.eurprd05.prod.outlook.com (52.133.45.150) by
 AM0PR0502MB4035.eurprd05.prod.outlook.com (52.133.36.138) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1709.13; Thu, 21 Mar 2019 06:04:15 +0000
Received: from AM0PR0502MB3795.eurprd05.prod.outlook.com
 ([fe80::84f3:7e92:7a51:1003]) by AM0PR0502MB3795.eurprd05.prod.outlook.com
 ([fe80::84f3:7e92:7a51:1003%2]) with mapi id 15.20.1730.013; Thu, 21 Mar 2019
 06:04:15 +0000
From: Shahaf Shuler <shahafs@mellanox.com>
To: Konstantin Ananyev <konstantin.ananyev@intel.com>, "dev@dpdk.org"
 <dev@dpdk.org>
CC: "akhil.goyal@nxp.com" <akhil.goyal@nxp.com>, "olivier.matz@6wind.com"
 <olivier.matz@6wind.com>
Thread-Topic: [dpdk-dev] [PATCH v2 1/7] mbuf: new function to generate raw Tx
 offload value
Thread-Index: AQHU301eRkXiwz4wLkOrnPWxVqiVIaYVmF8w
Date: Thu, 21 Mar 2019 06:04:15 +0000
Message-ID: <AM0PR0502MB379548ABEC4CE329A7AEAC61C3420@AM0PR0502MB3795.eurprd05.prod.outlook.com>
References: <1551381661-21078-1-git-send-email-konstantin.ananyev@intel.com>
 <20190320184655.17004-1-konstantin.ananyev@intel.com>
 <20190320184655.17004-2-konstantin.ananyev@intel.com>
In-Reply-To: <20190320184655.17004-2-konstantin.ananyev@intel.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=shahafs@mellanox.com; 
x-originating-ip: [31.154.10.105]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: eb7ee6c7-c08e-4a1e-b34c-08d6adc30c7b
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);
 SRVR:AM0PR0502MB4035; 
x-ms-traffictypediagnostic: AM0PR0502MB4035:
x-microsoft-antispam-prvs: <AM0PR0502MB4035630B753004D8BF4C9B9AC3420@AM0PR0502MB4035.eurprd05.prod.outlook.com>
x-forefront-prvs: 0983EAD6B2
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(346002)(136003)(396003)(376002)(366004)(189003)(199004)(86362001)(68736007)(486006)(106356001)(6116002)(2906002)(25786009)(6436002)(105586002)(7736002)(14454004)(11346002)(97736004)(305945005)(186003)(229853002)(74316002)(256004)(14444005)(66066001)(446003)(71200400001)(476003)(71190400001)(52536014)(81156014)(102836004)(6246003)(2501003)(5660300002)(9686003)(76176011)(3846002)(8936002)(53936002)(55016002)(478600001)(7696005)(33656002)(54906003)(26005)(81166006)(6506007)(4326008)(110136005)(99286004)(316002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0502MB4035;
 H:AM0PR0502MB3795.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:3; A: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: VU/ib98bbKNCkKFTh9+mu2aNKg+4sWRT2zbf3c3W4wYHf8yvVYdhcsaNesKJ/qbSB5a0UMBGPK1nlRGZRE+b2yKhHmEPufrvUQUItAORYBtQ6cTf71QnS7SbahWHdXanBRzZQC64pV/Fi1l0nnLbaNfZHhqZYK/fRfyoLcLwmXojDfMpswFbL0Dl99gPZ4RPAwmFiZWIjwojvy2kaWbaM1OvUCJegZCc6ykCRSoOgQhoRtISsrhc8xznGaiw8J3y24GBwheYwY/7o73WHqRUCMZ616jk4eeGd9QVZEeH5sIJAkngw4qi0DWdAF0G/sudNDvy4REVhR75M4n232c15ydJBNSa6spa0cPD8P+bOaJHZTvcHnZAw4jGNoNK+zWAoVTfNyQ8zmKKSSlS6la+uSJHD7dJv7t4ahnIcftCC8w=
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: eb7ee6c7-c08e-4a1e-b34c-08d6adc30c7b
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2019 06:04:15.8384 (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-Transport-CrossTenantHeadersStamped: AM0PR0502MB4035
Subject: Re: [dpdk-dev] [PATCH v2 1/7] mbuf: new function to generate raw
	Tx	offload value
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>
X-List-Received-Date: Thu, 21 Mar 2019 06:04:25 -0000

Hi Konstantin,

Wednesday, March 20, 2019 8:47 PM, Konstantin Ananyev:
> Subject: [dpdk-dev] [PATCH v2 1/7] mbuf: new function to generate raw Tx
> offload value
>=20
> Operations to set/update bit-fields often cause compilers to generate
> suboptimal code.
> To help avoid such situation for tx_offload fields:
> introduce new enum for tx_offload bit-fields lengths and offsets, and new
> function to generate raw tx_offload value.
>=20
> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> ---
>  lib/librte_mbuf/rte_mbuf.h | 71
> ++++++++++++++++++++++++++++++++++----
>  1 file changed, 64 insertions(+), 7 deletions(-)
>=20
> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h inde=
x
> d961ccaf6..b967ad17e 100644
> --- a/lib/librte_mbuf/rte_mbuf.h
> +++ b/lib/librte_mbuf/rte_mbuf.h
> @@ -479,6 +479,26 @@ struct rte_mbuf_sched {
>  	uint16_t reserved;   /**< Reserved. */
>  }; /**< Hierarchical scheduler */
>=20
> +/** enum for the tx_offload bit-fields lenghts and offsets. */ enum {
> +	RTE_MBUF_L2_LEN_BITS =3D 7,
> +	RTE_MBUF_L3_LEN_BITS =3D 9,
> +	RTE_MBUF_L4_LEN_BITS =3D 8,
> +	RTE_MBUF_TSO_SEGSZ_BITS =3D 16,
> +	RTE_MBUF_OL3_LEN_BITS =3D 9,
> +	RTE_MBUF_OL2_LEN_BITS =3D 7,
> +	RTE_MBUF_L2_LEN_OFS =3D 0,
> +	RTE_MBUF_L3_LEN_OFS =3D RTE_MBUF_L2_LEN_OFS +
> RTE_MBUF_L2_LEN_BITS,
> +	RTE_MBUF_L4_LEN_OFS =3D RTE_MBUF_L3_LEN_OFS +
> RTE_MBUF_L3_LEN_BITS,
> +	RTE_MBUF_TSO_SEGSZ_OFS =3D RTE_MBUF_L4_LEN_OFS +
> RTE_MBUF_L4_LEN_BITS,
> +	RTE_MBUF_OL3_LEN_OFS =3D RTE_MBUF_TSO_SEGSZ_OFS +
> RTE_MBUF_TSO_SEGSZ_BITS,
> +	RTE_MBUF_OL2_LEN_OFS =3D RTE_MBUF_OL3_LEN_OFS +
> RTE_MBUF_OL3_LEN_BITS,
> +	RTE_MBUF_TXOFLD_UNUSED_OFS =3D
> +		RTE_MBUF_OL2_LEN_OFS + RTE_MBUF_OL2_LEN_BITS,
> +	RTE_MBUF_TXOFLD_UNUSED_BITS =3D
> +		sizeof(uint64_t) * CHAR_BIT -
> RTE_MBUF_TXOFLD_UNUSED_OFS, };
> +
>  /**
>   * The generic rte_mbuf, containing a packet mbuf.
>   */
> @@ -640,19 +660,24 @@ struct rte_mbuf {
>  		uint64_t tx_offload;       /**< combined for easy fetch */
>  		__extension__
>  		struct {
> -			uint64_t l2_len:7;
> +			uint64_t l2_len:RTE_MBUF_L2_LEN_BITS;
>  			/**< L2 (MAC) Header Length for non-tunneling pkt.
>  			 * Outer_L4_len + ... + Inner_L2_len for tunneling
> pkt.
>  			 */
> -			uint64_t l3_len:9; /**< L3 (IP) Header Length. */
> -			uint64_t l4_len:8; /**< L4 (TCP/UDP) Header Length.
> */
> -			uint64_t tso_segsz:16; /**< TCP TSO segment size */
> +			uint64_t l3_len:RTE_MBUF_L3_LEN_BITS;
> +			/**< L3 (IP) Header Length. */
> +			uint64_t l4_len:RTE_MBUF_L4_LEN_BITS;
> +			/**< L4 (TCP/UDP) Header Length. */
> +			uint64_t tso_segsz:RTE_MBUF_TSO_SEGSZ_BITS;
> +			/**< TCP TSO segment size */
>=20
>  			/* fields for TX offloading of tunnels */
> -			uint64_t outer_l3_len:9; /**< Outer L3 (IP) Hdr
> Length. */
> -			uint64_t outer_l2_len:7; /**< Outer L2 (MAC) Hdr
> Length. */
> +			uint64_t outer_l3_len:RTE_MBUF_OL3_LEN_BITS;
> +			/**< Outer L3 (IP) Hdr Length. */
> +			uint64_t outer_l2_len:RTE_MBUF_OL2_LEN_BITS;
> +			/**< Outer L2 (MAC) Hdr Length. */
>=20
> -			/* uint64_t unused:8; */
> +			/* uint64_t
> unused:RTE_MBUF_TXOFLD_UNUSED_BITS; */

I am not sure we want to decide now that this remaining byte is for another=
 Tx offloads.
Maybe it is better to change a bit the rte_mbuf_tx_offload API to receive a=
lso the mbuf and to assign the offload values w/ mask.=20

>  		};
>  	};
>=20
> @@ -2243,6 +2268,38 @@ static inline int rte_pktmbuf_chain(struct
> rte_mbuf *head, struct rte_mbuf *tail
>  	return 0;
>  }
>=20
> +/*
> + * @warning
> + * @b EXPERIMENTAL: This API may change without prior notice.
> + *
> + * For given input values generate raw tx_offload value.
> + * @param il2
> + *   l2_len value.
> + * @param il3
> + *   l3_len value.
> + * @param il4
> + *   l4_len value.
> + * @param tso
> + *   tso_segsz value.
> + * @param ol3
> + *   outer_l3_len value.
> + * @param ol2
> + *   outer_l2_len value.
> + * @return
> + *   raw tx_offload value.
> + */
> +static inline uint64_t
> +rte_mbuf_tx_offload(uint64_t il2, uint64_t il3, uint64_t il4, uint64_t t=
so,
> +	uint64_t ol3, uint64_t ol2)
> +{
> +	return il2 << RTE_MBUF_L2_LEN_OFS |
> +		il3 << RTE_MBUF_L3_LEN_OFS |
> +		il4 << RTE_MBUF_L4_LEN_OFS |
> +		tso << RTE_MBUF_TSO_SEGSZ_OFS |
> +		ol3 << RTE_MBUF_OL3_LEN_OFS |
> +		ol2 << RTE_MBUF_OL2_LEN_OFS;
> +}
> +
>  /**
>   * Validate general requirements for Tx offload in mbuf.
>   *
> --
> 2.17.1

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 dpdk.space (Postfix) with ESMTP id 6A4EEA00E6
	for <public@inbox.dpdk.org>; Thu, 21 Mar 2019 07:04:26 +0100 (CET)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 75FB51B3BC;
	Thu, 21 Mar 2019 07:04:25 +0100 (CET)
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-eopbgr130079.outbound.protection.outlook.com [40.107.13.79])
 by dpdk.org (Postfix) with ESMTP id C781F1B3BA
 for <dev@dpdk.org>; Thu, 21 Mar 2019 07:04:24 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;
 s=selector1;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=b3uqpiBOpwfsnwPg2TiUyh4dlEk4yU7g6g5v2EYYp5k=;
 b=lkZQ7hQSTK/e0p7FvnrAq/uJaEC4O8wulJOL5aAG5asydhjJuq4qXkRKhO89OAlghagR+00bzo4ciZDkjLmKhwB6+3uvcwqLoqjqlCRSWosSRWLTLlQhCBcKKiVQKftEi5mPH5CDoTtU0X42krZzIzG8iT8QEdanFJHBjqFyTfM=
Received: from AM0PR0502MB3795.eurprd05.prod.outlook.com (52.133.45.150) by
 AM0PR0502MB4035.eurprd05.prod.outlook.com (52.133.36.138) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1709.13; Thu, 21 Mar 2019 06:04:15 +0000
Received: from AM0PR0502MB3795.eurprd05.prod.outlook.com
 ([fe80::84f3:7e92:7a51:1003]) by AM0PR0502MB3795.eurprd05.prod.outlook.com
 ([fe80::84f3:7e92:7a51:1003%2]) with mapi id 15.20.1730.013; Thu, 21 Mar 2019
 06:04:15 +0000
From: Shahaf Shuler <shahafs@mellanox.com>
To: Konstantin Ananyev <konstantin.ananyev@intel.com>, "dev@dpdk.org"
 <dev@dpdk.org>
CC: "akhil.goyal@nxp.com" <akhil.goyal@nxp.com>, "olivier.matz@6wind.com"
 <olivier.matz@6wind.com>
Thread-Topic: [dpdk-dev] [PATCH v2 1/7] mbuf: new function to generate raw Tx
 offload value
Thread-Index: AQHU301eRkXiwz4wLkOrnPWxVqiVIaYVmF8w
Date: Thu, 21 Mar 2019 06:04:15 +0000
Message-ID:
 <AM0PR0502MB379548ABEC4CE329A7AEAC61C3420@AM0PR0502MB3795.eurprd05.prod.outlook.com>
References: <1551381661-21078-1-git-send-email-konstantin.ananyev@intel.com>
 <20190320184655.17004-1-konstantin.ananyev@intel.com>
 <20190320184655.17004-2-konstantin.ananyev@intel.com>
In-Reply-To: <20190320184655.17004-2-konstantin.ananyev@intel.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=shahafs@mellanox.com; 
x-originating-ip: [31.154.10.105]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: eb7ee6c7-c08e-4a1e-b34c-08d6adc30c7b
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);
 SRVR:AM0PR0502MB4035; 
x-ms-traffictypediagnostic: AM0PR0502MB4035:
x-microsoft-antispam-prvs: <AM0PR0502MB4035630B753004D8BF4C9B9AC3420@AM0PR0502MB4035.eurprd05.prod.outlook.com>
x-forefront-prvs: 0983EAD6B2
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(346002)(136003)(396003)(376002)(366004)(189003)(199004)(86362001)(68736007)(486006)(106356001)(6116002)(2906002)(25786009)(6436002)(105586002)(7736002)(14454004)(11346002)(97736004)(305945005)(186003)(229853002)(74316002)(256004)(14444005)(66066001)(446003)(71200400001)(476003)(71190400001)(52536014)(81156014)(102836004)(6246003)(2501003)(5660300002)(9686003)(76176011)(3846002)(8936002)(53936002)(55016002)(478600001)(7696005)(33656002)(54906003)(26005)(81166006)(6506007)(4326008)(110136005)(99286004)(316002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR0502MB4035;
 H:AM0PR0502MB3795.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:3; A: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: VU/ib98bbKNCkKFTh9+mu2aNKg+4sWRT2zbf3c3W4wYHf8yvVYdhcsaNesKJ/qbSB5a0UMBGPK1nlRGZRE+b2yKhHmEPufrvUQUItAORYBtQ6cTf71QnS7SbahWHdXanBRzZQC64pV/Fi1l0nnLbaNfZHhqZYK/fRfyoLcLwmXojDfMpswFbL0Dl99gPZ4RPAwmFiZWIjwojvy2kaWbaM1OvUCJegZCc6ykCRSoOgQhoRtISsrhc8xznGaiw8J3y24GBwheYwY/7o73WHqRUCMZ616jk4eeGd9QVZEeH5sIJAkngw4qi0DWdAF0G/sudNDvy4REVhR75M4n232c15ydJBNSa6spa0cPD8P+bOaJHZTvcHnZAw4jGNoNK+zWAoVTfNyQ8zmKKSSlS6la+uSJHD7dJv7t4ahnIcftCC8w=
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: Mellanox.com
X-MS-Exchange-CrossTenant-Network-Message-Id: eb7ee6c7-c08e-4a1e-b34c-08d6adc30c7b
X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2019 06:04:15.8384 (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-Transport-CrossTenantHeadersStamped: AM0PR0502MB4035
Subject: Re: [dpdk-dev] [PATCH v2 1/7] mbuf: new function to generate raw
	Tx	offload value
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>
Message-ID: <20190321060415.hAKz7aIN1-uzKJRZmThGFs-l_Mg47qITkVIRZtslDEM@z>

Hi Konstantin,

Wednesday, March 20, 2019 8:47 PM, Konstantin Ananyev:
> Subject: [dpdk-dev] [PATCH v2 1/7] mbuf: new function to generate raw Tx
> offload value
>=20
> Operations to set/update bit-fields often cause compilers to generate
> suboptimal code.
> To help avoid such situation for tx_offload fields:
> introduce new enum for tx_offload bit-fields lengths and offsets, and new
> function to generate raw tx_offload value.
>=20
> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> ---
>  lib/librte_mbuf/rte_mbuf.h | 71
> ++++++++++++++++++++++++++++++++++----
>  1 file changed, 64 insertions(+), 7 deletions(-)
>=20
> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h inde=
x
> d961ccaf6..b967ad17e 100644
> --- a/lib/librte_mbuf/rte_mbuf.h
> +++ b/lib/librte_mbuf/rte_mbuf.h
> @@ -479,6 +479,26 @@ struct rte_mbuf_sched {
>  	uint16_t reserved;   /**< Reserved. */
>  }; /**< Hierarchical scheduler */
>=20
> +/** enum for the tx_offload bit-fields lenghts and offsets. */ enum {
> +	RTE_MBUF_L2_LEN_BITS =3D 7,
> +	RTE_MBUF_L3_LEN_BITS =3D 9,
> +	RTE_MBUF_L4_LEN_BITS =3D 8,
> +	RTE_MBUF_TSO_SEGSZ_BITS =3D 16,
> +	RTE_MBUF_OL3_LEN_BITS =3D 9,
> +	RTE_MBUF_OL2_LEN_BITS =3D 7,
> +	RTE_MBUF_L2_LEN_OFS =3D 0,
> +	RTE_MBUF_L3_LEN_OFS =3D RTE_MBUF_L2_LEN_OFS +
> RTE_MBUF_L2_LEN_BITS,
> +	RTE_MBUF_L4_LEN_OFS =3D RTE_MBUF_L3_LEN_OFS +
> RTE_MBUF_L3_LEN_BITS,
> +	RTE_MBUF_TSO_SEGSZ_OFS =3D RTE_MBUF_L4_LEN_OFS +
> RTE_MBUF_L4_LEN_BITS,
> +	RTE_MBUF_OL3_LEN_OFS =3D RTE_MBUF_TSO_SEGSZ_OFS +
> RTE_MBUF_TSO_SEGSZ_BITS,
> +	RTE_MBUF_OL2_LEN_OFS =3D RTE_MBUF_OL3_LEN_OFS +
> RTE_MBUF_OL3_LEN_BITS,
> +	RTE_MBUF_TXOFLD_UNUSED_OFS =3D
> +		RTE_MBUF_OL2_LEN_OFS + RTE_MBUF_OL2_LEN_BITS,
> +	RTE_MBUF_TXOFLD_UNUSED_BITS =3D
> +		sizeof(uint64_t) * CHAR_BIT -
> RTE_MBUF_TXOFLD_UNUSED_OFS, };
> +
>  /**
>   * The generic rte_mbuf, containing a packet mbuf.
>   */
> @@ -640,19 +660,24 @@ struct rte_mbuf {
>  		uint64_t tx_offload;       /**< combined for easy fetch */
>  		__extension__
>  		struct {
> -			uint64_t l2_len:7;
> +			uint64_t l2_len:RTE_MBUF_L2_LEN_BITS;
>  			/**< L2 (MAC) Header Length for non-tunneling pkt.
>  			 * Outer_L4_len + ... + Inner_L2_len for tunneling
> pkt.
>  			 */
> -			uint64_t l3_len:9; /**< L3 (IP) Header Length. */
> -			uint64_t l4_len:8; /**< L4 (TCP/UDP) Header Length.
> */
> -			uint64_t tso_segsz:16; /**< TCP TSO segment size */
> +			uint64_t l3_len:RTE_MBUF_L3_LEN_BITS;
> +			/**< L3 (IP) Header Length. */
> +			uint64_t l4_len:RTE_MBUF_L4_LEN_BITS;
> +			/**< L4 (TCP/UDP) Header Length. */
> +			uint64_t tso_segsz:RTE_MBUF_TSO_SEGSZ_BITS;
> +			/**< TCP TSO segment size */
>=20
>  			/* fields for TX offloading of tunnels */
> -			uint64_t outer_l3_len:9; /**< Outer L3 (IP) Hdr
> Length. */
> -			uint64_t outer_l2_len:7; /**< Outer L2 (MAC) Hdr
> Length. */
> +			uint64_t outer_l3_len:RTE_MBUF_OL3_LEN_BITS;
> +			/**< Outer L3 (IP) Hdr Length. */
> +			uint64_t outer_l2_len:RTE_MBUF_OL2_LEN_BITS;
> +			/**< Outer L2 (MAC) Hdr Length. */
>=20
> -			/* uint64_t unused:8; */
> +			/* uint64_t
> unused:RTE_MBUF_TXOFLD_UNUSED_BITS; */

I am not sure we want to decide now that this remaining byte is for another=
 Tx offloads.
Maybe it is better to change a bit the rte_mbuf_tx_offload API to receive a=
lso the mbuf and to assign the offload values w/ mask.=20

>  		};
>  	};
>=20
> @@ -2243,6 +2268,38 @@ static inline int rte_pktmbuf_chain(struct
> rte_mbuf *head, struct rte_mbuf *tail
>  	return 0;
>  }
>=20
> +/*
> + * @warning
> + * @b EXPERIMENTAL: This API may change without prior notice.
> + *
> + * For given input values generate raw tx_offload value.
> + * @param il2
> + *   l2_len value.
> + * @param il3
> + *   l3_len value.
> + * @param il4
> + *   l4_len value.
> + * @param tso
> + *   tso_segsz value.
> + * @param ol3
> + *   outer_l3_len value.
> + * @param ol2
> + *   outer_l2_len value.
> + * @return
> + *   raw tx_offload value.
> + */
> +static inline uint64_t
> +rte_mbuf_tx_offload(uint64_t il2, uint64_t il3, uint64_t il4, uint64_t t=
so,
> +	uint64_t ol3, uint64_t ol2)
> +{
> +	return il2 << RTE_MBUF_L2_LEN_OFS |
> +		il3 << RTE_MBUF_L3_LEN_OFS |
> +		il4 << RTE_MBUF_L4_LEN_OFS |
> +		tso << RTE_MBUF_TSO_SEGSZ_OFS |
> +		ol3 << RTE_MBUF_OL3_LEN_OFS |
> +		ol2 << RTE_MBUF_OL2_LEN_OFS;
> +}
> +
>  /**
>   * Validate general requirements for Tx offload in mbuf.
>   *
> --
> 2.17.1