From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2467EA0C4E; Thu, 21 Oct 2021 15:18:12 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8E4EE411FE; Thu, 21 Oct 2021 15:18:11 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2070.outbound.protection.outlook.com [40.107.220.70]) by mails.dpdk.org (Postfix) with ESMTP id D14F44118E for ; Thu, 21 Oct 2021 15:18:09 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VuMFbpZa/mfU9n6dWSH3Op6TjXsxcYElCaLtF8ZUcXY6AsPtPqvAgPQ5Ib1xMRa49jaaHWNjuM2Z9KQkrWD6FJkavJ1oSsMN7xOZnYg+RzUgGAGQL573Ps4p7UYJCGqfL4uyxkQgrx9MDVqztjEGivYHxE9T1KBlQwCEblSE3hCaHR9JuIGuE1u243gNf1zJls8Je8zriNg45E4clRL4DaDR0sp7fJX8qNu2vvcylDlj82LdV46G+kd0pXbuSoMhgG+tDVGE9DKBD4hMy87pVIrhd7AKG4tGL1h/1q7oCsbAyxLNHAZWdaDJd1PxeEAvgm6LvExE9Albnj/uBo/GDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0IbBqAkp37IDCIx2pPGtCQaoE3zMT7Yxc7DZR9FaE7A=; b=InDo0ANVJoSgNpsKg9q+0xn+0JiXhKWlr8mIPhxA+j/oJ5bT+1bxX7LFLfPDEnsIVMLXSgS0x1enQ0Spy9xxKPnNGILZIscjhCSL2QmON9kcK9b0oFKkjE8I8ygS6rp6lBbEI/thVNc5k0aCUFiX9i/OK5H/EJGLPQicnbl+tgVUgdTFBFFB8V5OggBE5YxiSQtS7sXt+AyuorNqKiDCSDP3UL/3sYLn0aMj1GEn86IUlaK9vefiYAtC63GuqXqa0oYInmBB+18OHBC+fW5oBQgRn41QU9LCxUj4XPi766UJQTZzU8WZFrhZEH0No/bJ1lT0EeT1avIk2VaBgHdF4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0IbBqAkp37IDCIx2pPGtCQaoE3zMT7Yxc7DZR9FaE7A=; b=j3SbWA/ix3BoqEjMzxcKbNL7YiP2zmPWH0kVXn2gqUkLiGXZQ5CW+gmbUwEtAgJfYg6v0EnbbsCXEin5ihJTAAVbW73+kPKcflVdK+GXr2YsuJpT7VSDyfm2EDpbRpfPXDZMY2yqZ6lRfW/+DHqoG3BnO63oALvY21M8ZchWm1T5KTcbK+dugD0SB9cNK223V5JSrgxqRf1SJGd0tFgAWBzd5zgFPg4TcJFtuiSCw3esymoF6XL0qalq0a3P7xEsV2UqOc+kGRcB2+NkSfA77+r5Ty4unqIKr7+r2nGP7wNiNv8FEDvOPbKrxK2wQ0okVmu4o1lNRDX77ThLuEePkA== Received: from DM8PR12MB5400.namprd12.prod.outlook.com (2603:10b6:8:3b::12) by DM8PR12MB5447.namprd12.prod.outlook.com (2603:10b6:8:36::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4628.16; Thu, 21 Oct 2021 13:18:07 +0000 Received: from DM8PR12MB5400.namprd12.prod.outlook.com ([fe80::d03d:1f75:ca20:6a32]) by DM8PR12MB5400.namprd12.prod.outlook.com ([fe80::d03d:1f75:ca20:6a32%6]) with mapi id 15.20.4628.018; Thu, 21 Oct 2021 13:18:07 +0000 From: Ori Kam To: "Wang, Jie1X" , "dev@dpdk.org" CC: "Yigit, Ferruh" , NBU-Contact-Thomas Monjalon , "andrew.rybchenko@oktetlabs.ru" , "Li, Xiaoyun" , "Yang, SteveX" , "Wu, Jingjing" , "Xing, Beilei" , "Wu, Wenjun1" , "Zhang, Qi Z" Thread-Topic: [PATCH v7 1/3] ethdev: support L2TPv2 and PPP procotol Thread-Index: AQHXxkSelNwe4TbmZ0mPjh8AxdYtJ6vdEg6AgAAQPQCAAEzisA== Date: Thu, 21 Oct 2021 13:18:07 +0000 Message-ID: References: <20211020093224.1410449-1-jie1x.wang@intel.com> <20211021062603.1549268-1-jie1x.wang@intel.com> <20211021062603.1549268-2-jie1x.wang@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3c6ac430-45fb-45db-72ac-08d9949538d7 x-ms-traffictypediagnostic: DM8PR12MB5447: x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:222; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: A2QDMGk8il+D6F+tmntFJBqw7JtMdhXaOpg+LziBvlrHVLEjY4Ly/S31jUAeoDF60BLM9CLlN6uJIht541v+TufPVq1Ugve7EdB0TIEg7SjUUTRBOIo1FBOOC8VsJUllNeYpXmCYHijplPgwpLRl1EJwsDAK40yqJrfJpOsWRywYaEhOjgRm8gL8obvmN3fSDwYILiWo+eXoE+tkQuGMx1P97s+vS0mNoAneLiUuRAA0xExspmFbKx+8VZM8WOVVIRxTFa5lifzzRUMmFC4X30bAJOGYmgkI5hf9/dJgaHgxdcfx/LrYQN2caobd0SE2SU+JkY2uOwZAmYCm+Xwj2UHY7qIWKg1nDzZVuJ2HZ9xO5vbVibW7prBc48RRvHI28whZ5putVKKlGr6+zOe+2Vpd9Rz78upFyUK9TxEkZWcgCC65c5E0xyOTTjuelIHoF0nDB6HSVQUg50VWrUENdmvcypQ7X2I3QGPuG5ih1pDWjN9UzQCunDNLIINlYpetLM9XppW07AyaqPaMIvO+T3NeouOZAZbSsHYjemGdYmBdai+chlIpU3nZrDoHP1+A64lN7iEhmnoj2A3opucQ8Y+nbtIXuuSMjIkLW3EPXHA5EuugWTdOdX1mLd0eRLakLSz1SONhqLmPUYa7JHVvrNTwbO7yl2FB1l7sk84wO403rMl+CnQNAsBhl/Fpknnv0/+BVCfxSlenYvvpxuMGAg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR12MB5400.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(186003)(508600001)(66446008)(66556008)(7696005)(53546011)(6506007)(52536014)(55016002)(83380400001)(316002)(5660300002)(71200400001)(8936002)(9686003)(8676002)(38070700005)(110136005)(122000001)(86362001)(33656002)(38100700002)(66946007)(54906003)(76116006)(2906002)(7416002)(4326008)(66476007)(64756008)(30864003)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?Z5wtG/oPsKyIOjoRR1+m0gF1DZb3ipcEjyH+DVmDwnnQTNYiaNWODTK1zVXw?= =?us-ascii?Q?9rnjz9PzS8zIWCYHwJhEtpMesFeMuyyCYjWMNcrZf57HzNnnViA6xzV5Dr3m?= =?us-ascii?Q?Wvom4laWSKsrTOqAAAEs6eTAlbrcGrr845oAFGvgVyCZVZo46RKCleK3IEIZ?= =?us-ascii?Q?EfcKew+YeJU09IkLNno2tJN+rHj9MskLzNKuUaYeDYFtKnhx2VfL04SaspRk?= =?us-ascii?Q?uWDyrSlMHGr37eQXWVxy+vJK1Fgt4/2BDeaDy80VU3pRPkn2NEqE6tF41Evm?= =?us-ascii?Q?m48S7mrMgj5xZVFtwA0xk9eje7SIJLei1kWAjHU1hJzB+Loa6kagP3DDwDtE?= =?us-ascii?Q?9y+EyNzrWtNq0cnVrICmUYFkIs8k72PlwdO8rTrSG96DbEHsaIJAWpt84vrX?= =?us-ascii?Q?wrOzh4WWUhLrsq0+GAyRPXIFWYxwtRlQgFF0haOdURkFz54fb3kuAHsV+xkh?= =?us-ascii?Q?/tadVWPERnfUaoXcrv2Cq0ZT3u6EYpdMfOLy9CO2rB5WqWHxaoppZYymzw/O?= =?us-ascii?Q?+GYbzGAXwoITO/e5N0bF0gdoTxHb19JOu30S1olZJdcgbOoaCZozPRyLkMJv?= =?us-ascii?Q?YMQd8u47+MQaJ2hp7q3l1+DHnPwKNb7EFC5BMpTRFlmnNoZf3d8Dcg/75Srz?= =?us-ascii?Q?98oOuVypsApxr+SFdyCE1t44deTmWvV6WSnOW8Pxv0SzZthZ1vJlscT2eXzV?= =?us-ascii?Q?/VziQJp5u5Xw5AXCi5f8t4naOWPG4gmwg0ZL54d9Oerd1E/242r8hY6Qkjc7?= =?us-ascii?Q?rNgKyTudH8Q8pwE+sCnH2W2mxeWrpkQM5Utfr7dwQJdkzhxJTYJDJpBzPdl6?= =?us-ascii?Q?V45PJERkglK/K75sKsCNGExn3v4CKmO1d9aqMVKEuCOTUM3f7HFvLZ1jYZCd?= =?us-ascii?Q?ahssopD0rVAFTBa2U+W/QpjO85Lk/a7q1xeEyDryFzluxqmdRVS9baOPzIcC?= =?us-ascii?Q?n1q3Iw5+jG7e4jZyZss01nTlwlO94CBYKhTaKSMZ9Y6vRq7WlDyqgN9D+4JA?= =?us-ascii?Q?E1n7OQLDZCZ9JS1Db/BzXo1NMDV6IGCBaD0JRW6Tw72DuSCZNsQ6suTteTT+?= =?us-ascii?Q?C+9+ProY/DF7vxYDwbdwG3FTax5Jrn42QAdefQ4UV+SZX627OXTMr86HtMRB?= =?us-ascii?Q?ZCTUnt37MZB2U5kXN4MqnUSBw71tnYepIb8oNFYi8zFODh8k8sFEYyJsnGYS?= =?us-ascii?Q?RJNLvbSkVTXJWfxvtsMkSObaWNrwgct+TwE3Jw2TbxzZDslxkGsTdhnwq5J6?= =?us-ascii?Q?yq04NWKa9sYS/IBd7qtgSh613MClFS+Nfs3ZqAXNJz53uPZQGY7sgQYQgSbo?= =?us-ascii?Q?2WLlbRYVj8wBJ8HwTxme/w2hVtufeKpBgitvOTlOagKfV1OCYj/f5X98nM7C?= =?us-ascii?Q?HM4BiVRa9dQvkbiQa34ebkpeu1vOC9s9aawoJkNvGcm2xYA79Tnb5s7tsFEy?= =?us-ascii?Q?pF8SroI7KNcoNSJ7lOzqS52KuoGAoj/UHvSI7ZrsqZxhxHp8IH4OYZ0z/YkG?= =?us-ascii?Q?vz96ARL+nNXF12o=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR12MB5400.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3c6ac430-45fb-45db-72ac-08d9949538d7 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Oct 2021 13:18:07.2346 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: orika@nvidia.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM8PR12MB5447 Subject: Re: [dpdk-dev] [PATCH v7 1/3] ethdev: support L2TPv2 and PPP procotol X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Jie > -----Original Message----- > From: dev On Behalf Of Wang, Jie1X > Sent: Thursday, October 21, 2021 11:41 AM > Subject: Re: [dpdk-dev] [PATCH v7 1/3] ethdev: support L2TPv2 and PPP pro= cotol >=20 >=20 >=20 > > -----Original Message----- > > From: Ori Kam > > Sent: Thursday, October 21, 2021 3:50 PM > > To: Wang, Jie1X ; dev@dpdk.org > > Cc: Yigit, Ferruh ; NBU-Contact-Thomas Monjalon > > ; andrew.rybchenko@oktetlabs.ru; Li, Xiaoyun > > ; Yang, SteveX ; Wu, Jingj= ing > > ; Xing, Beilei ; Wu, Wenj= un1 > > ; Zhang, Qi Z > > Subject: RE: [PATCH v7 1/3] ethdev: support L2TPv2 and PPP procotol > > > > Hi Jie, > > > > > -----Original Message----- > > > From: Jie Wang > > > Sent: Thursday, October 21, 2021 9:26 AM > > > Subject: [PATCH v7 1/3] ethdev: support L2TPv2 and PPP procotol > > > > > > Added flow pattern items and header formats of L2TPv2 and PPP. > > > > > > Signed-off-by: Wenjun Wu > > > Signed-off-by: Jie Wang > > > --- > > > doc/api/doxy-api-index.md | 2 + > > > doc/guides/nics/features/default.ini | 2 + > > > doc/guides/nics/features/iavf.ini | 2 + > > > doc/guides/prog_guide/rte_flow.rst | 25 +++ > > > doc/guides/rel_notes/release_21_11.rst | 4 + > > > lib/ethdev/rte_flow.c | 2 + > > > lib/ethdev/rte_flow.h | 65 +++++++ > > > lib/net/meson.build | 2 + > > > lib/net/rte_l2tpv2.h | 234 +++++++++++++++++++++++= ++ > > > lib/net/rte_ppp.h | 34 ++++ > > > 10 files changed, 372 insertions(+) > > > create mode 100644 lib/net/rte_l2tpv2.h create mode 100644 > > > lib/net/rte_ppp.h > > > > > > diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md > > > index 1992107a03..42db196afe 100644 > > > --- a/doc/api/doxy-api-index.md > > > +++ b/doc/api/doxy-api-index.md > > > @@ -121,6 +121,8 @@ The public API headers are grouped by topics: > > > [VXLAN] (@ref rte_vxlan.h), > > > [Geneve] (@ref rte_geneve.h), > > > [eCPRI] (@ref rte_ecpri.h) > > > + [L2TPv2] (@ref rte_l2tpv2.h) > > > + [PPP] (@ref rte_ppp.h) > > > > > > - **QoS**: > > > [metering] (@ref rte_meter.h), > > > diff --git a/doc/guides/nics/features/default.ini > > > b/doc/guides/nics/features/default.ini > > > index 09914b1ad3..8e6a28c419 100644 > > > --- a/doc/guides/nics/features/default.ini > > > +++ b/doc/guides/nics/features/default.ini > > > @@ -110,6 +110,7 @@ ipv4 =3D > > > ipv6 =3D > > > ipv6_ext =3D > > > ipv6_frag_ext =3D > > > +l2tpv2 =3D > > > l2tpv3oip =3D > > > mark =3D > > > meta =3D > > > @@ -121,6 +122,7 @@ pfcp =3D > > > phy_port =3D > > > port_id =3D > > > port_representor =3D > > > +ppp =3D > > > pppoed =3D > > > pppoes =3D > > > pppoe_proto_id =3D > > > diff --git a/doc/guides/nics/features/iavf.ini > > > b/doc/guides/nics/features/iavf.ini > > > index d00ca934c3..a916275b88 100644 > > > --- a/doc/guides/nics/features/iavf.ini > > > +++ b/doc/guides/nics/features/iavf.ini > > > @@ -50,8 +50,10 @@ icmp6 =3D Y > > > ipv4 =3D Y > > > ipv6 =3D Y > > > ipv6_frag_ext =3D Y > > > +l2tpv2 =3D Y > > > l2tpv3oip =3D Y > > > pfcp =3D Y > > > +ppp =3D Y > > > sctp =3D Y > > > tcp =3D Y > > > udp =3D Y > > > diff --git a/doc/guides/prog_guide/rte_flow.rst > > > b/doc/guides/prog_guide/rte_flow.rst > > > index aeba374182..a2169517c3 100644 > > > --- a/doc/guides/prog_guide/rte_flow.rst > > > +++ b/doc/guides/prog_guide/rte_flow.rst > > > @@ -1573,6 +1573,31 @@ rte_flow_flex_item_create() routine. > > > as padded with trailing zeroes up to full configured length, both = for > > > value and mask. > > > > > > +Item: ``L2TPV2`` > > > +^^^^^^^^^^^^^^^^^^^ > > > + > > > +Matches a L2TPv2 header. > > > + > > > +- ``flags_version``: flags(12b), version(4b). > > > +- ``length``: total length of the message. > > > +- ``tunnel_id``: identifier for the control connection. > > > +- ``session_id``: identifier for a session within a tunnel. > > > +- ``ns``: sequence number for this date or control message. > > > +- ``nr``: sequence number expected in the next control message to be > > received. > > > +- ``offset_size``: offset of payload data. > > > +- ``offset_padding``: offset padding, variable length. > > > +- Default ``mask`` matches flags_version only. > > > + > > > +Item: ``PPP`` > > > +^^^^^^^^^^^^^^^^^^^ > > > + > > > +Matches a PPP header. > > > + > > > +- ``addr``: PPP address. > > > +- ``ctrl``: PPP control. > > > +- ``proto_id``: PPP protocol identifier. > > > +- Default ``mask`` matches addr, ctrl, proto_id. > > > + > > > Actions > > > ~~~~~~~ > > > > > > diff --git a/doc/guides/rel_notes/release_21_11.rst > > > b/doc/guides/rel_notes/release_21_11.rst > > > index 041383ee2a..283770131c 100644 > > > --- a/doc/guides/rel_notes/release_21_11.rst > > > +++ b/doc/guides/rel_notes/release_21_11.rst > > > @@ -105,6 +105,10 @@ New Features > > > > > > Added an ethdev API which can help users get device configuration. > > > > > > +* **Added L2TPv2 and PPP protocol support in rte_flow.** > > > + > > > + Added flow pattern items and header formats of L2TPv2 and PPP prot= ocol. > > > + > > > * **Updated AF_XDP PMD.** > > > > > > * Disabled secondary process support. > > > diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index > > > bcf0513b3c..d268784532 100644 > > > --- a/lib/ethdev/rte_flow.c > > > +++ b/lib/ethdev/rte_flow.c > > > @@ -156,6 +156,8 @@ static const struct rte_flow_desc_data > > rte_flow_desc_item[] =3D { > > > MK_FLOW_ITEM(REPRESENTED_PORT, sizeof(struct > > rte_flow_item_ethdev)), > > > MK_FLOW_ITEM_FN(FLEX, sizeof(struct rte_flow_item_flex), > > > rte_flow_item_flex_conv), > > > + MK_FLOW_ITEM(L2TPV2, sizeof(struct rte_flow_item_l2tpv2)), > > > + MK_FLOW_ITEM(PPP, sizeof(struct rte_flow_item_ppp)), > > > }; > > > > > > /** Generate flow_action[] entry. */ > > > diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index > > > 64ed7f2618..300e99e16b 100644 > > > --- a/lib/ethdev/rte_flow.h > > > +++ b/lib/ethdev/rte_flow.h > > > @@ -35,6 +35,8 @@ > > > #include > > > #include > > > #include > > > +#include > > > +#include > > > > > > #ifdef __cplusplus > > > extern "C" { > > > @@ -644,6 +646,20 @@ enum rte_flow_item_type { > > > * @see struct rte_flow_item_flex. > > > */ > > > RTE_FLOW_ITEM_TYPE_FLEX, > > > + > > > + /** > > > + * Matches L2TPv2 Header. > > > + * > > > + * See struct rte_flow_item_l2tpv2. > > > + */ > > > + RTE_FLOW_ITEM_TYPE_L2TPV2, > > > + > > > + /** > > > + * Matches PPP Header. > > > + * > > > + * See struct rte_flow_item_ppp. > > > + */ > > > + RTE_FLOW_ITEM_TYPE_PPP, > > > }; > > > > > > /** > > > @@ -1900,6 +1916,55 @@ static const struct rte_flow_item_ethdev > > > rte_flow_item_ethdev_mask =3D { }; #endif > > > > > > +/** > > > + * @warning > > > + * @b EXPERIMENTAL: this structure may change without prior notice > > > + * RTE_FLOW_ITEM_TYPE_L2TPV2 > > > + * > > > + * Matches L2TPv2 Header > > > + */ > > > +struct rte_flow_item_l2tpv2 { > > > + struct rte_l2tpv2_combined_msg_hdr hdr; }; > > > + > > > +/** Default mask for RTE_FLOW_ITEM_TYPE_L2TPV2. */ #ifndef > > > +__cplusplus static const struct rte_flow_item_l2tpv2 > > > +rte_flow_item_l2tpv2_mask =3D { > > > + /* > > > + * flags and version bit mask > > > + * 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 > > > + * T L x x S x O P x x x x V V V V > > > + */ > > > + .hdr =3D { > > > + .common =3D { > > > + .flags_version =3D RTE_BE16(0xcb0f), > > > + }, > > > + }, > > > +}; > > > +#endif > > > + > > > +/** > > > + * @warning > > > + * @b EXPERIMENTAL: this structure may change without prior notice > > > + * RTE_FLOW_ITEM_TYPE_PPP > > > + * > > > + * Matches PPP Header > > > + */ > > > +struct rte_flow_item_ppp { > > > + struct rte_ppp_hdr hdr; > > > +}; > > > + > > > +/** Default mask for RTE_FLOW_ITEM_TYPE_PPP. */ #ifndef __cplusplus > > > +static const struct rte_flow_item_ppp rte_flow_item_ppp_mask =3D { > > > + .hdr =3D { > > > + .addr =3D 0xff, > > > + .ctrl =3D 0xff, > > > + .proto_id =3D RTE_BE16(0xffff), > > > + } > > > +}; > > > +#endif > > > + > > > /** > > > * Matching pattern item definition. > > > * > > > diff --git a/lib/net/meson.build b/lib/net/meson.build index > > > a4e395e9c5..e899846578 100644 > > > --- a/lib/net/meson.build > > > +++ b/lib/net/meson.build > > > @@ -19,6 +19,8 @@ headers =3D files( > > > 'rte_higig.h', > > > 'rte_ecpri.h', > > > 'rte_geneve.h', > > > + 'rte_l2tpv2.h', > > > + 'rte_ppp.h', > > > ) > > > > > > sources =3D files( > > > diff --git a/lib/net/rte_l2tpv2.h b/lib/net/rte_l2tpv2.h new file mod= e > > > 100644 index 0000000000..18ea759ff4 > > > --- /dev/null > > > +++ b/lib/net/rte_l2tpv2.h > > > @@ -0,0 +1,234 @@ > > > +/* SPDX-License-Identifier: BSD-3-Clause > > > + * Copyright 2021 Mellanox Technologies, Ltd */ > > > + > > > +#ifndef _RTE_L2TPV2_H_ > > > +#define _RTE_L2TPV2_H_ > > > + > > > +/** > > > + * @file > > > + * > > > + * L2TP header: > > > + * > > > + * `-0--------------------1----------------2-------------------3` > > > + * > > > + * `-0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1= ` > > > + * > > > + * > > > +`+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+` > > > + * > > > + * `|T|L|x|x|S|x|O|P|x|x|x|x|--Ver--|-----------Length > > > +(opt)--------|` > > > + * > > > + * > > > +`+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+` > > > + * > > > + * `|-----------Tunnel ID-----------|-----------Session > > > +ID----------|` > > > + * > > > + * > > > +`+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+` > > > + * > > > + * `|-----------Ns (opt)------------|-----------Nr > > > +(opt)------------|` > > > + * > > > + * > > > +`+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+` > > > + * > > > + * `|---------Offset Size (opt)-----|---------Offset pad... (opt)` > > > + * > > > + * > > > +`+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+` > > > + * > > > + * The Type (T) bit indicates the type of message. It is set to 0 fo= r > > > +a data > > > + * message and 1 for a control message. > > > + * > > > + * If the Length (L) bit is 1, the Length field is present. This bit > > > +MUST be > > > + * set to 1 for control messages. > > > + * > > > + * The x bits are reserved for future extensions. All reserved bits > > > +MUST > > > + * be set to 0 on outgoing messages and ignored on incoming messages= . > > > + * > > > + * If the Sequence (S) bit is set to 1 the Ns and Nr fields are pres= ent. > > > + * The S bit MUST be set to 1 for control messages. > > > + * > > > + * If the Offset (O) bit is 1, the Offset Size field is present. The > > > +O > > > + * bit MUST be set to 0 for control messages. > > > + * > > > + * If the Priority (P) bit is 1, this data message should receive > > > + * preferential treatment in its local queuing and transmission. > > > + * The P bit MUST be set to 0 for control messages. > > > + * > > > + * Ver MUST be 2, indicating the version of the L2TP data message he= ader. > > > + * > > > + * The Length field indicates the total length of the message in oct= ets. > > > + * > > > + * Tunnel ID indicates the identifier for the control connection. > > > + * > > > + * Session ID indicates the identifier for a session within a tunnel= . > > > + * > > > + * Ns indicates the sequence number for this data or control message= . > > > + * > > > + * Nr indicates the sequence number expected in the next control > > > +message > > > + * to be received. > > > + * > > > + * The Offset Size field, if present, specifies the number of octets > > > + * past the L2TP header at which the payload data is expected to sta= rt. > > > + * Actual data within the offset padding is undefined. If the offset > > > + * field is present, the L2TP header ends after the last octet of th= e > > > + * offset padding. > > > + */ > > > + > > > +#include > > > +#include > > > + > > > +#ifdef __cplusplus > > > +extern "C" { > > > +#endif > > > + > > > +/** > > > + * L2TPv2 Common Header > > > + */ > > > +RTE_STD_C11 > > > +struct rte_l2tpv2_common_hdr { > > > + union { > > > + /** header flags and protocol version */ > > > + rte_be16_t flags_version; > > > + struct { > > > +#if RTE_BYTE_ORDER =3D=3D RTE_LITTLE_ENDIAN > > > + rte_be16_t t:1; /**< message Type */ > > > + rte_be16_t l:1; /**< length option bit */ > > > + rte_be16_t res1:2; /**< reserved */ > > > + rte_be16_t s:1; /**< ns/nr option bit */ > > > + rte_be16_t res2:1; /**< reserved */ > > > + rte_be16_t o:1; /**< offset option bit */ > > > + rte_be16_t p:1; /**< priority option bit */ > > > + rte_be16_t res3:4; /**< reserved */ > > > + rte_be16_t ver:4; /**< protocol version */ > > > +#elif RTE_BYTE_ORDER =3D=3D RTE_BIG_ENDIAN > > > + rte_be16_t ver:4; /**< protocol version */ > > > + rte_be16_t res3:4; /**< reserved */ > > > + rte_be16_t p:1; /**< priority option bit */ > > > + rte_be16_t o:1; /**< offset option bit */ > > > + rte_be16_t res2:1; /**< reserved */ > > > + rte_be16_t s:1; /**< ns/nr option bit */ > > > + rte_be16_t res1:2; /**< reserved */ > > > + rte_be16_t l:1; /**< length option bit */ > > > + rte_be16_t t:1; /**< message Type */ > > > +#endif > > > + }; > > > + }; > > > +}; > > > + > > > +/** > > > + * L2TPv2 message Header contains all options(length, ns, nr, > > > + * offset size, offset padding). > > > + */ > > > +struct rte_l2tpv2_msg_with_all_options { > > > + rte_be16_t length; /**< length(16) */ > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > + rte_be16_t ns; /**< Ns(16) */ > > > + rte_be16_t nr; /**< Nr(16) */ > > > + rte_be16_t offset_size; /**< offset size(16) */ > > > + uint8_t *offset_padding; /**< offset padding(variable length) */ > > > +}; > > > + > > > +/** > > > + * L2TPv2 message Header contains all options except length(ns, nr, > > > + * offset size, offset padding). > > > + */ > > > +struct rte_l2tpv2_msg_without_length { > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > + rte_be16_t ns; /**< Ns(16) */ > > > + rte_be16_t nr; /**< Nr(16) */ > > > + rte_be16_t offset_size; /**< offset size(16) */ > > > + uint8_t *offset_padding; /**< offset padding(variable length) */ > > > +}; > > > + > > > +/** > > > + * L2TPv2 message Header contains all options except ns_nr(length, > > > + * offset size, offset padding). > > > + * Ns and Nr MUST be toghter. > > > + */ > > > +struct rte_l2tpv2_msg_without_ns_nr { > > > + rte_be16_t length; /**< length(16) */ > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > + rte_be16_t offset_size; /**< offset size(16) */ > > > + uint8_t *offset_padding; /**< offset padding(variable length) */ > > > +}; > > > + > > > +/** > > > + * L2TPv2 message Header contains all options except ns_nr(length, n= s, nr). > > > + * offset size and offset padding MUST be toghter. > > > + */ > > > +struct rte_l2tpv2_msg_without_offset { > > > + rte_be16_t length; /**< length(16) */ > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > + rte_be16_t ns; /**< Ns(16) */ > > > + rte_be16_t nr; /**< Nr(16) */ > > > +}; > > > > Why not packed? > > > > > + > > > +/** > > > + * L2TPv2 message Header contains options offset size and offset pad= ding. > > > + */ > > > +struct rte_l2tpv2_msg_with_offset { > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > + rte_be16_t offset_size; /**< offset size(16) */ > > > + uint8_t *offset_padding; /**< offset padding(variable length) */ > > > +}; > > > + > > > +/** > > > + * L2TPv2 message Header contains options ns and nr. > > > + */ > > > +struct rte_l2tpv2_msg_with_ns_nr { > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > + rte_be16_t ns; /**< Ns(16) */ > > > + rte_be16_t nr; /**< Nr(16) */ > > > +}; > > > > Why not packed? Same for all structs. > > > > > Hi Ori, >=20 > Do you mean I should pack Ns/Nr into a structure as a field? And pack off= set size/offset padding into > another structure? >=20 I mean all the structures are defining protocols so I think they should be = in packet format, just like most of other protocol and even the ppp protocol. > > > + > > > +/** > > > + * L2TPv2 message Header contains option length. > > > + */ > > > +struct rte_l2tpv2_msg_with_length { > > > + rte_be16_t length; /**< length(16) */ > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > +}; > > > + > > > +/** > > > + * L2TPv2 message Header without all options. > > > + */ > > > +struct rte_l2tpv2_msg_without_all_options { > > > + rte_be16_t tunnel_id; /**< tunnel ID(16) */ > > > + rte_be16_t session_id; /**< session ID(16) */ > > > +}; > > > + > > > +/** > > > + * L2TPv2 Combined Message Header Format: Common Header + Options *= / > > > +RTE_STD_C11 > > > +struct rte_l2tpv2_combined_msg_hdr { > > > + struct rte_l2tpv2_common_hdr common; /**< common header */ > > > + union { > > > + /** header with all options */ > > > + struct rte_l2tpv2_msg_with_all_options type0; > > > + /** header with all options except length */ > > > + struct rte_l2tpv2_msg_without_length type1; > > > + /** header with all options except ns/nr */ > > > + struct rte_l2tpv2_msg_without_ns_nr type2; > > > + /** header with all options except offset */ > > > + struct rte_l2tpv2_msg_without_offset type3; > > > + /** header with offset options */ > > > + struct rte_l2tpv2_msg_with_offset type4; > > > + /** header with ns/nr options */ > > > + struct rte_l2tpv2_msg_with_ns_nr type5; > > > + /** header with length option */ > > > + struct rte_l2tpv2_msg_with_length type6; > > > + /** header without all options */ > > > + struct rte_l2tpv2_msg_without_all_options type7; > > > + }; > > > +}; > > > + > > > +#ifdef __cplusplus > > > +} > > > +#endif > > > + > > > +#endif /* _RTE_L2TPV2_H_ */ > > > diff --git a/lib/net/rte_ppp.h b/lib/net/rte_ppp.h new file mode > > > 100644 index 0000000000..2a53cd969f > > > --- /dev/null > > > +++ b/lib/net/rte_ppp.h > > > @@ -0,0 +1,34 @@ > > > +/* SPDX-License-Identifier: BSD-3-Clause > > > + * Copyright 2021 Mellanox Technologies, Ltd */ > > > + > > > +#ifndef _RTE_PPP_H_ > > > +#define _RTE_PPP_H_ > > > + > > > +/** > > > + * @file > > > + * > > > + * PPP headers definition. > > > + */ > > > + > > > +#include > > > +#include > > > + > > > +#ifdef __cplusplus > > > +extern "C" { > > > +#endif > > > + > > > +/** > > > + * PPP Header > > > + */ > > > +struct rte_ppp_hdr { > > > + uint8_t addr; /**< PPP address(8) */ > > > + uint8_t ctrl; /**< PPP control(8) */ > > > + rte_be16_t proto_id; /**< PPP protocol identifier(16) */ } > > > +__rte_packed; > > > + > > > +#ifdef __cplusplus > > > +} > > > +#endif > > > + > > > +#endif /* _RTE_PPP_H_ */ > > > -- > > > 2.25.1 > > > > Best, > > Ori