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 0762D42B39; Thu, 18 May 2023 11:15:25 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D413340E25; Thu, 18 May 2023 11:15:24 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 100CF4014F for ; Thu, 18 May 2023 11:15:22 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 34I965Zg024724; Thu, 18 May 2023 02:15:21 -0700 Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2105.outbound.protection.outlook.com [104.47.70.105]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3qmyexbevg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 18 May 2023 02:15:21 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Bf3odjkDxiYMqVCGcdYBHwMf+X4yaUnbG5zmDPFX3OlYLDl0thrv+G1R59aUYpRMC3ReGSlHGLpVapxNK2wVgviX4jx5sUhOpDZbzDNgicTpbCiszh16iPOw0WEBvL1Ef92Y/2h9HrZrOHofVqIWiMdYKjuszkI6EP2oKwIX43SMm663pD8lkNCif6KpwN1tMS7Vq1w7zpAirU3ZEIaw6nBlx3RiGdq8KNsWLtjJgwmRuBWlFpfr9NAwCoghw36EanP+7bXnmAPujExfOLnysUhoWb7j1HwwjxpRJ9RL1NQh2LKyjFbFeZAcmazd1MiUa7FFiwMrokDxUBRkMBiZxA== 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=+RLfCf4S6aMmasmb8yxg2LGDuBj0AlKs1Eu5NqZ480c=; b=K+bDbaDr/WgVdz5EnthqNCsImfOtDdTf38Vry/MJQd4ptARIvyVvj7OAOHR6zMmaomAmjfcnyQW6OL/1W5+8fOELh1Yn9dG9GMQXwXGx/mkWCo3YYHZn/5/7OYldou3YzCbryQ6DdwSxatgdxqZhQ7HsAM6P/1qzYKb8Ad5r674QfXt2VY7LfTOYqENYZWeKYO6XX41VLySDjR1O8vAIYFSn1DSMUCRY1B8kEHR2oNE5F4qMp1fAVqiRojCN/N3Pwz3T+Myno+r2QAXPUFWXF995m1M7mhzR4GtK5SEYJzmv4xEkJtKustsfz1OnhgGw8bzYmlJuf657OFRr77evVQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+RLfCf4S6aMmasmb8yxg2LGDuBj0AlKs1Eu5NqZ480c=; b=Ts5Yt5BGVUO2JbhpZA46/gWZ612knfVb17qNxe8HUua7MXm6gk46fUgcQ8xfV6FHP8keVjNreyz1R8Kqyzl298IibukjAOHuBvBMWEcK/GBxd9uzXSOOxqB0EhRAW9MWqc4tkjEij/5WxZxj2C0+8D8HE4ULMLJ1ThCERlC85x4= Received: from CO6PR18MB4484.namprd18.prod.outlook.com (2603:10b6:5:359::9) by DS0PR18MB5524.namprd18.prod.outlook.com (2603:10b6:8:167::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.17; Thu, 18 May 2023 09:15:18 +0000 Received: from CO6PR18MB4484.namprd18.prod.outlook.com ([fe80::831b:85d2:9a45:8489]) by CO6PR18MB4484.namprd18.prod.outlook.com ([fe80::831b:85d2:9a45:8489%6]) with mapi id 15.20.6411.019; Thu, 18 May 2023 09:15:18 +0000 From: Akhil Goyal To: Anoob Joseph , Thomas Monjalon , Jerin Jacob Kollanukkaran , Konstantin Ananyev , Bernard Iremonger CC: Hemant Agrawal , =?iso-8859-1?Q?Mattias_R=F6nnblom?= , Kiran Kumar Kokkilagadda , Volodymyr Fialko , "dev@dpdk.org" , Olivier Matz Subject: RE: [PATCH v2 12/22] pdcp: add control PDU handling Thread-Topic: [PATCH v2 12/22] pdcp: add control PDU handling Thread-Index: AQHZbvkoy9MdU5KpUEGO4BLeFDqvda9f5yjQ Date: Thu, 18 May 2023 09:15:18 +0000 Message-ID: References: <20221222092522.1628-1-anoobj@marvell.com> <20230414174512.642-1-anoobj@marvell.com> <20230414174512.642-13-anoobj@marvell.com> In-Reply-To: <20230414174512.642-13-anoobj@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-rorf: true x-dg-ref: =?iso-8859-1?Q?PG1ldGE+PGF0IG5tPSJib2R5LnR4dCIgcD0iYzpcdXNlcnNcZ2FraGlsXG?= =?iso-8859-1?Q?FwcGRhdGFccm9hbWluZ1wwOWQ4NDliNi0zMmQzLTRhNDAtODVlZS02Yjg0?= =?iso-8859-1?Q?YmEyOWUzNWJcbXNnc1xtc2ctN2ZlY2NmYTItZjU1Yy0xMWVkLWEwOTMtOT?= =?iso-8859-1?Q?RlNmY3NjYxOTA3XGFtZS10ZXN0XDdmZWNjZmEzLWY1NWMtMTFlZC1hMDkz?= =?iso-8859-1?Q?LTk0ZTZmNzY2MTkwN2JvZHkudHh0IiBzej0iMTUwNTgiIHQ9IjEzMzI4OD?= =?iso-8859-1?Q?c0OTE2MzA4NzIwMSIgaD0iUnYzUUVicXJJWTkxQ041c2V4L2dvanBlcFFr?= =?iso-8859-1?Q?PSIgaWQ9IiIgYmw9IjAiIGJvPSIxIiBjaT0iY0FBQUFFUkhVMVJTUlVGTk?= =?iso-8859-1?Q?NnVUFBTWdNQUFCaEJXeENhWW5aQVIxblY4YitPRFkrSFdkWHh2NDROajRV?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhBQUFBQllEQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUVBQVFFQkFBQUE0K1V0REFDQUFRQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFKNEFBQUJoQUdRQVpBQnlBR1VBY3dCekFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUFBbmdBQU?= =?iso-8859-1?Q?FHTUFkUUJ6QUhRQWJ3QnRBRjhBY0FCbEFISUFjd0J2QUc0QUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFDQUFBQUFBQ2VBQUFBWXdCMUFI?= =?iso-8859-1?Q?TUFkQUJ2QUcwQVh3QndBR2dBYndCdUFHVUFiZ0IxQUcwQVlnQmxBSElBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUJBQUFBQUFBQUFBSUFBQUFBQUo0QUFBQmpBSFVBY3dCMEFHOE?= =?iso-8859-1?Q?FiUUJmQUhNQWN3QnVBRjhBWkFCaEFITUFhQUJmQUhZQU1BQXlBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFB?= x-dg-refone: =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdBQUFBQUFuZ0?= =?iso-8859-1?Q?FBQUdNQWRRQnpBSFFBYndCdEFGOEFjd0J6QUc0QVh3QnJBR1VBZVFCM0FH?= =?iso-8859-1?Q?OEFjZ0JrQUhNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUNBQUFBQUFDZUFBQUFZd0Ix?= =?iso-8859-1?Q?QUhNQWRBQnZBRzBBWHdCekFITUFiZ0JmQUc0QWJ3QmtBR1VBYkFCcEFHME?= =?iso-8859-1?Q?FhUUIwQUdVQWNnQmZBSFlBTUFBeUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQkFBQUFBQUFBQUFJQUFBQUFBSjRBQUFCakFIVUFjd0IwQU?= =?iso-8859-1?Q?c4QWJRQmZBSE1BY3dCdUFGOEFjd0J3QUdFQVl3QmxBRjhBZGdBd0FESUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUVBQUFBQUFBQUFBZ0FBQUFBQW5nQUFBR1FBYkFCd0FGOEFjd0JyQUhr?= =?iso-8859-1?Q?QWNBQmxBRjhBWXdCb0FHRUFkQUJmQUcwQVpRQnpBSE1BWVFCbkFHVUFYd0?= =?iso-8859-1?Q?IyQURBQU1nQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFB?= =?iso-8859-1?Q?QUFBQUFBQ0FBQUFBQUNlQUFBQVpBQnNBSEFBWHdCekFHd0FZUUJqQUdzQV?= =?iso-8859-1?Q?h3QmpBR2dBWVFCMEFGOEFiUUJsQUhNQWN3QmhBR2NBWlFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFB?= x-dg-reftwo: =?iso-8859-1?Q?QUFBQUFBQUFBQUFCQUFBQUFBQUFBQUlBQUFBQUFKNEFBQUJrQUd3QWNBQm?= =?iso-8859-1?Q?ZBSFFBWlFCaEFHMEFjd0JmQUc4QWJnQmxBR1FBY2dCcEFIWUFaUUJmQUdZ?= =?iso-8859-1?Q?QWFRQnNBR1VBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBRUFBQUFBQUFBQUFnQUFBQUFBbmdBQUFHVUFiUUJoQUdrQWJBQmZB?= =?iso-8859-1?Q?R0VBWkFCa0FISUFaUUJ6QUhNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQVFB?= =?iso-8859-1?Q?QUFBQUFBQUFDQUFBQUFBQ2VBQUFBYlFCaEFISUFkZ0JsQUd3QVh3QndBSE?= =?iso-8859-1?Q?lBYndCcUFHVUFZd0IwQUY4QWJnQmhBRzBBWlFCekFGOEFjZ0JsQUhNQWRB?= =?iso-8859-1?Q?QnlBR2tBWXdCMEFHVUFaQUJmQUdFQWJBQnZBRzRBWlFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQU?= =?iso-8859-1?Q?FBSUFBQUFBQUo0QUFBQnRBR0VBY2dCMkFHVUFiQUJmQUhBQWNnQnZBR29B?= =?iso-8859-1?Q?WlFCakFIUUFYd0J1QUdFQWJRQmxBSE1BWHdCeUFHVUFjd0IwQUhJQWFRQm?= =?iso-8859-1?Q?pBSFFBWlFCa0FGOEFhQUJsQUhnQVl3QnZBR1FBWlFCekFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdBQUFB?= =?iso-8859-1?Q?QUFuZ0FBQUcwQVlRQnlBSFlBWlFCc0FHd0FYd0JoQUhJQWJRQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUNBQUFBQUFDZUFBQU?= =?iso-8859-1?Q?FiUUJoQUhJQWRnQmxBR3dBYkFCZkFIQUFjZ0J2QUdvQVpRQmpBSFFBWHdC?= =?iso-8859-1?Q?akFHOEFaQUJsQUhNQUFBQUFBQUFB?= x-dg-refthree: =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQU?= =?iso-8859-1?Q?FBQUFJQUFBQUFBSjRBQUFCdEFHRUFjZ0IyQUdVQWJBQnNBRjhBY0FCeUFH?= =?iso-8859-1?Q?OEFhZ0JsQUdNQWRBQmZBR01BYndCa0FHVUFjd0JmQUdRQWFRQmpBSFFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0FB?= =?iso-8859-1?Q?QUFBQW5nQUFBRzBBWVFCeUFIWUFaUUJzQUd3QVh3QndBSElBYndCcUFHVU?= =?iso-8859-1?Q?FZd0IwQUY4QWJnQmhBRzBBWlFCekFGOEFjZ0JsQUhNQWRBQnlBR2tBWXdC?= =?iso-8859-1?Q?MEFHVUFaQUJmQUcwQVlRQnlBSFlBWlFCc0FHd0FBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQ0FBQUFBQUNlQU?= =?iso-8859-1?Q?FBQWJRQmhBSElBZGdCbEFHd0FiQUJmQUhBQWNnQnZBR29BWlFCakFIUUFY?= =?iso-8859-1?Q?d0J1QUdFQWJRQmxBSE1BWHdCeUFHVUFjd0IwQUhJQWFRQmpBSFFBWlFCa0?= =?iso-8859-1?Q?FGOEFiUUJoQUhJQWRnQmxBR3dBYkFCZkFHOEFjZ0JmQUdFQWNnQnRBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUlBQUFBQUFKNEFBQUJ0QUdF?= =?iso-8859-1?Q?QWNnQjJBR1VBYkFCc0FGOEFkQUJsQUhJQWJRQnBBRzRBZFFCekFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBRUFBQUFBQUFBQUFnQUFBQUFBbmdBQUFHMEFZUUJ5QUhZQV?= =?iso-8859-1?Q?pRQnNBR3dBWHdCM0FHOEFjZ0JrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU?= =?iso-8859-1?Q?FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?= =?iso-8859-1?Q?QUFBQUFBQUFBQUFBQUFBQUFBQUFB?= x-dg-reffour: QUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFDQUFBQUFBQT0iLz48L21ldGE+ x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO6PR18MB4484:EE_|DS0PR18MB5524:EE_ x-ms-office365-filtering-correlation-id: 8ea298f4-81ce-41af-ddd6-08db57806649 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UdgaRH/T05k8RPOtXvWYz++2nrqGwrFKhS+5lqlPLgmXnQLbamO8wytu7pQCBfBVSC/i66s+6++rMsekmk4E6OK4UdxpMCIDw87B87kmLcqE0Ee0pN93rRaQ8zmHOIYDAoBvIgat1le2wMXbvoWGYq47nUJDTPP4vPp7+1f02vxRcPsRNTWvuQ6xn+KuFTFBIv+0YaqQofElYRc7iZs6+Js3iD0Q3oVhpcQ8pseNcUPJZjc/xo7ehUey72LbzhuDMVYqyV3wBNMq8GG6colzSV09esMPGA4SHCRdJII+F8tNC78wOq0ynOhOhjZd4rmkrtY+OA0Ub8vIhcqgY11OLDRuvWPV0QphvQbCwk1K+E2jQemVP1Mmb4+xeDmSUUGdTmVV+8rCYRNVXWaWxOYQQG8DhqcjetEkEV3gJtDDa0BnEYAE09pYpasZd2xqfHpajelYl+k91UiC5qzfoaC8z7yhBl1Yy5lMXhA3OaOEPpxtjB5TUMpt3lPKbIGWVMI4PdVG4my1F3FJVTUSG2fejndcHnkS/BO2pVYxLoJZcvJZhp9GTaYz2oGW+RlDE8IQ5p4Po/WlNqW2VEMMIGJL1EPLEibXxD6oWM3MoQuN+l/QczmDoRCsJdpY6mDpPJZL x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR18MB4484.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(376002)(136003)(396003)(346002)(39860400002)(366004)(451199021)(7696005)(83380400001)(55236004)(71200400001)(110136005)(478600001)(54906003)(186003)(6506007)(9686003)(26005)(8936002)(30864003)(5660300002)(8676002)(52536014)(41300700001)(33656002)(122000001)(38100700002)(66556008)(66476007)(4326008)(66446008)(2906002)(66946007)(76116006)(64756008)(55016003)(316002)(38070700005)(86362001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?qJ1IFzaxz7VsPOiVLY2LntLAtH3v2pwIItj94QDsISpDv6hOvaMo8PR76m?= =?iso-8859-1?Q?DNaTnvqAOYHcRuCrRRx02/uU6c62dMsMF74LfJmM4KkGp3Cl1p+Br9sqJP?= =?iso-8859-1?Q?czU3w5Z5EK4z3Ozk0Sr5K0RkxpgqMZCyPZNL06Nep7nvuZXecuEDO5Tq+L?= =?iso-8859-1?Q?IUVCfCIFLaeFy+ZWQ7Tmrkloc50/H8fkwBvpJUX1RZN9IhAAeMlxR9HPmg?= =?iso-8859-1?Q?Io8IUXwNtBprrh+/mLTCjfgq9UMCCumKhlfkTePmuAIsPFknJkXkGvpG0l?= =?iso-8859-1?Q?nxQVpZ1px5xhNOYBxkBZv/Uix8NdXqKf50I1AVjj8hFSYz8qV29Tb4W7SS?= =?iso-8859-1?Q?tDWb0UPNhd29E5wwKYMOD6WZn3PHKuIISDWh+u7tEJGXGFZwBKOIJufsxY?= =?iso-8859-1?Q?4gvBeRjb2hj/uqsQWgy0HdCxOflaN4CyFkCy8ilz7V3FEYA5aP2eGhB7d8?= =?iso-8859-1?Q?MYpgHChyTyEOk5Xz/qffNrA2eJV7FaYSvFVtRTANc4tVJeXjrWQFzt6ti9?= =?iso-8859-1?Q?dZWO1iKI6Lpfv5llzXhHKKRKXcaHLyNyx6E+9ocHjcFYf0yJV5hjVvAWzu?= =?iso-8859-1?Q?0/bRIbb4A8pevxIjF7EirueSvlMFnAh36Y2ehIxphbZP4ySY800gZmjdR+?= =?iso-8859-1?Q?1sVD/TG35imw5qRXKFlNt/L6Ff244/EyU/6uMCxOHaYd6DUjfsLW2GtRFS?= =?iso-8859-1?Q?XklkQpNzPgTuKpyzf3ebHU9n0GSR8wJViGwb4VjSOvt5Zr8zbx6h9a3rJN?= =?iso-8859-1?Q?R+Op2LXINvTkiZcsI85pZhmktl+SwF97rJE4em9Qtfx3L4sasMPN+25+yB?= =?iso-8859-1?Q?VjAfNJWp66cELCy2B2SUQTWpYPAAVfm4NxI3nnsDnHoZZoVpY+Ml6pjgrp?= =?iso-8859-1?Q?/4rgmQL23XOSPlX3sqOOx6JkON/zaN5Vlh1lIhLBTDUk8/4j1ieYkyg6RF?= =?iso-8859-1?Q?XnaA5xv/Am5mybpDSDCHjJLkfNiG6VM5o9CK2yXRgdgqNM4JIYTWLP5/Tf?= =?iso-8859-1?Q?+guEh13lKkdD/4MdYgfTxR6K0gX3AdxQ5+8x30pimRdP08nWlFgcW6dpxm?= =?iso-8859-1?Q?x6eWpb5in3vaSciB7sepQUYuEPhDvGXuIW+rW3oNUK+yg1Trnlx5SfcEcB?= =?iso-8859-1?Q?qeGLdQ2Ac2JyAB/XZKy7GpJwnn89qyzupGBRW+LOAYr5ID0Z/voqVwl3x1?= =?iso-8859-1?Q?J9G4aWrk5DwCYqGQGfH7R7yhg+xqypL6G02ekb9u4L08J+zPxxt+e6goAG?= =?iso-8859-1?Q?kRImJVZSvgPmnRY6jpuChzs3qjYjAfiujS3MaJkNT3VGV2aWTUdDWJtf1F?= =?iso-8859-1?Q?Wnw0EzVC5adg3fmpHHnS23llSpdG6OWhVY9jE/+ZC++C33kC7T2DKQ3uOu?= =?iso-8859-1?Q?G2UPB7Z+Zs2jmmmvJTzSbHLFwQXU1BEPT3GRCtPe0FIDuNUcPXzUnJ2UEV?= =?iso-8859-1?Q?WStv5fsv/B4u/UkkPeI7p6ILWEop0qjyDIDHXXgtSrGgfKdw0khxrEM4eJ?= =?iso-8859-1?Q?h/MX/sUHtoiShvtTpOFw+oCZrCJM6Jd4zTtoiitlmoAnBDoSGaajeeef1z?= =?iso-8859-1?Q?wT8tmlG5Z+EskcMasg5wsmec+WLN/mTqB4kP+C7C5aNmkYHy32DM2Go+Pm?= =?iso-8859-1?Q?2YnFHtFDAMOlGDaiVS1qsEjaOl2k2uOSoG?= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO6PR18MB4484.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ea298f4-81ce-41af-ddd6-08db57806649 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 May 2023 09:15:18.6277 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: p2zk/Ig1Z/uHhHx6LHA7HERTo3oJvgr+5oyWectAbYDTkmE5eV9Z1ZauqRKokqA/p5puR2sKHPyFWCNh8KBX2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR18MB5524 X-Proofpoint-GUID: S5Mi1v_sJqtN3TjJaMaD4GLiHarNBgww X-Proofpoint-ORIG-GUID: S5Mi1v_sJqtN3TjJaMaD4GLiHarNBgww X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-05-18_07,2023-05-17_02,2023-02-09_01 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 > Subject: [PATCH v2 12/22] pdcp: add control PDU handling >=20 > Add control PDU handling and implement status report generation. Status > report generation works only when RX_DELIV =3D RX_NEXT. >=20 > Signed-off-by: Anoob Joseph > Signed-off-by: Volodymyr Fialko > --- > app/test/test_pdcp.c | 1 + Separate out test app changes from library changes. > doc/guides/prog_guide/pdcp_lib.rst | 10 +++++++ > lib/pdcp/meson.build | 2 ++ > lib/pdcp/pdcp_cnt.c | 29 ++++++++++++++++++ > lib/pdcp/pdcp_cnt.h | 14 +++++++++ > lib/pdcp/pdcp_ctrl_pdu.c | 46 +++++++++++++++++++++++++++++ > lib/pdcp/pdcp_ctrl_pdu.h | 15 ++++++++++ > lib/pdcp/pdcp_entity.h | 15 ++++++++-- > lib/pdcp/pdcp_process.c | 13 +++++++++ > lib/pdcp/rte_pdcp.c | 47 +++++++++++++++++++++++++++++- > lib/pdcp/rte_pdcp.h | 31 ++++++++++++++++++++ > lib/pdcp/version.map | 2 ++ > 12 files changed, 222 insertions(+), 3 deletions(-) > create mode 100644 lib/pdcp/pdcp_cnt.c > create mode 100644 lib/pdcp/pdcp_cnt.h > create mode 100644 lib/pdcp/pdcp_ctrl_pdu.c > create mode 100644 lib/pdcp/pdcp_ctrl_pdu.h >=20 > diff --git a/app/test/test_pdcp.c b/app/test/test_pdcp.c > index fc49947ba2..4ecb4d9572 100644 > --- a/app/test/test_pdcp.c > +++ b/app/test/test_pdcp.c > @@ -415,6 +415,7 @@ create_test_conf_from_index(const int index, struct > pdcp_test_conf *conf) >=20 > conf->entity.sess_mpool =3D ts_params->sess_pool; > conf->entity.cop_pool =3D ts_params->cop_pool; > + conf->entity.ctr_pdu_pool =3D ts_params->mbuf_pool; > conf->entity.pdcp_xfrm.bearer =3D pdcp_test_bearer[index]; > conf->entity.pdcp_xfrm.en_ordering =3D 0; > conf->entity.pdcp_xfrm.remove_duplicates =3D 0; > diff --git a/doc/guides/prog_guide/pdcp_lib.rst > b/doc/guides/prog_guide/pdcp_lib.rst > index abd874f2cc..f23360dfc3 100644 > --- a/doc/guides/prog_guide/pdcp_lib.rst > +++ b/doc/guides/prog_guide/pdcp_lib.rst > @@ -67,6 +67,15 @@ Data PDUs are regular packets submitted by upper layer= s > for transmission to > other end. Such packets would need to be ciphered and authenticated base= d on > the entity configuration. >=20 > +PDCP packet processing API for control PDU > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + > +Control PDUs are used in PDCP as a communication channel between > transmitting > +and receiving entities. When upper layer request for operations such > +re-establishment, receiving PDCP entity need to prepare a status report = and > +send it to the other end. The API ``pdcp_ctrl_pdu_status_gen`` allows > +application to request the same. pdcp_ctrl_pdu_status_gen() - Is this a user visible API? I believe it is no= t exposed. How can application request that? > + > PDCP packet processing API for data PDU > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >=20 > @@ -228,6 +237,7 @@ Supported features > - Uplink & downlink traffic > - HFN increment > - IV generation as required per algorithm > +- Control PDU generation >=20 > Supported ciphering algorithms > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > diff --git a/lib/pdcp/meson.build b/lib/pdcp/meson.build > index 08679b743a..75d476bf6d 100644 > --- a/lib/pdcp/meson.build > +++ b/lib/pdcp/meson.build > @@ -8,7 +8,9 @@ if is_windows > endif >=20 > sources =3D files( > + 'pdcp_cnt.c', pdcp_cnt seems to be something related to count. And it is not related to this patch probably. > 'pdcp_crypto.c', > + 'pdcp_ctrl_pdu.c', > 'pdcp_process.c', > 'rte_pdcp.c', > ) > diff --git a/lib/pdcp/pdcp_cnt.c b/lib/pdcp/pdcp_cnt.c > new file mode 100644 > index 0000000000..c9b952184b > --- /dev/null > +++ b/lib/pdcp/pdcp_cnt.c > @@ -0,0 +1,29 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(C) 2023 Marvell. > + */ > + > +#include > + > +#include "pdcp_cnt.h" > +#include "pdcp_entity.h" > + > +int > +pdcp_cnt_ring_create(struct rte_pdcp_entity *en, const struct > rte_pdcp_entity_conf *conf) > +{ > + struct entity_priv_dl_part *en_priv_dl; > + uint32_t window_sz; > + > + if (en =3D=3D NULL || conf =3D=3D NULL) > + return -EINVAL; > + > + if (conf->pdcp_xfrm.pkt_dir =3D=3D RTE_SECURITY_PDCP_UPLINK) > + return 0; > + > + en_priv_dl =3D entity_dl_part_get(en); > + window_sz =3D pdcp_window_size_get(conf->pdcp_xfrm.sn_size); > + > + RTE_SET_USED(window_sz); > + RTE_SET_USED(en_priv_dl); > + > + return 0; > +} > diff --git a/lib/pdcp/pdcp_cnt.h b/lib/pdcp/pdcp_cnt.h > new file mode 100644 > index 0000000000..bbda478b55 > --- /dev/null > +++ b/lib/pdcp/pdcp_cnt.h > @@ -0,0 +1,14 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(C) 2023 Marvell. > + */ > + > +#ifndef PDCP_CNT_H > +#define PDCP_CNT_H > + > +#include > + > +#include "pdcp_entity.h" > + > +int pdcp_cnt_ring_create(struct rte_pdcp_entity *en, const struct > rte_pdcp_entity_conf *conf); > + > +#endif /* PDCP_CNT_H */ > diff --git a/lib/pdcp/pdcp_ctrl_pdu.c b/lib/pdcp/pdcp_ctrl_pdu.c > new file mode 100644 > index 0000000000..feb05fd863 > --- /dev/null > +++ b/lib/pdcp/pdcp_ctrl_pdu.c > @@ -0,0 +1,46 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(C) 2023 Marvell. > + */ > + > +#include > +#include > +#include > + > +#include "pdcp_ctrl_pdu.h" > +#include "pdcp_entity.h" > + > +static __rte_always_inline void > +pdcp_hdr_fill(struct rte_pdcp_up_ctrl_pdu_hdr *pdu_hdr, uint32_t rx_deli= v) > +{ > + pdu_hdr->d_c =3D RTE_PDCP_PDU_TYPE_CTRL; > + pdu_hdr->pdu_type =3D RTE_PDCP_CTRL_PDU_TYPE_STATUS_REPORT; > + pdu_hdr->r =3D 0; > + pdu_hdr->fmc =3D rte_cpu_to_be_32(rx_deliv); > +} > + > +int > +pdcp_ctrl_pdu_status_gen(struct entity_priv *en_priv, struct rte_mbuf *m= ) > +{ > + struct rte_pdcp_up_ctrl_pdu_hdr *pdu_hdr; > + uint32_t rx_deliv; > + int pdu_sz; > + > + if (!en_priv->flags.is_status_report_required) > + return -EINVAL; > + > + pdu_sz =3D sizeof(struct rte_pdcp_up_ctrl_pdu_hdr); > + > + rx_deliv =3D en_priv->state.rx_deliv; > + > + /* Zero missing PDUs - status report contains only FMC */ > + if (rx_deliv >=3D en_priv->state.rx_next) { > + pdu_hdr =3D (struct rte_pdcp_up_ctrl_pdu_hdr > *)rte_pktmbuf_append(m, pdu_sz); > + if (pdu_hdr =3D=3D NULL) > + return -ENOMEM; > + pdcp_hdr_fill(pdu_hdr, rx_deliv); > + > + return 0; > + } > + > + return -ENOTSUP; > +} > diff --git a/lib/pdcp/pdcp_ctrl_pdu.h b/lib/pdcp/pdcp_ctrl_pdu.h > new file mode 100644 > index 0000000000..a2424fbd10 > --- /dev/null > +++ b/lib/pdcp/pdcp_ctrl_pdu.h > @@ -0,0 +1,15 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(C) 2023 Marvell. > + */ > + > +#ifndef PDCP_CTRL_PDU_H > +#define PDCP_CTRL_PDU_H > + > +#include > + > +#include "pdcp_entity.h" > + > +int > +pdcp_ctrl_pdu_status_gen(struct entity_priv *en_priv, struct rte_mbuf *m= ); > + > +#endif /* PDCP_CTRL_PDU_H */ > diff --git a/lib/pdcp/pdcp_entity.h b/lib/pdcp/pdcp_entity.h > index 3108795977..7b7e7f69dd 100644 > --- a/lib/pdcp/pdcp_entity.h > +++ b/lib/pdcp/pdcp_entity.h > @@ -109,6 +109,13 @@ union cipher_iv_partial { > uint64_t u64[2]; > }; >=20 > +struct pdcp_cnt_bitmap { > + /** Number of entries that can be stored. */ > + uint32_t size; > + /** Bitmap of the count values already received.*/ > + struct rte_bitmap *bmp; > +}; This pdcp_cnt_bitmap is not related to control PDU. Right? I believe the patch split is not proper here. > + > /* > * Layout of PDCP entity: [rte_pdcp_entity] [entity_priv] [entity_dl/ul] > */ > @@ -136,9 +143,13 @@ struct entity_priv { > uint64_t is_ul_entity : 1; > /** Is NULL auth. */ > uint64_t is_null_auth : 1; > + /** Is status report required.*/ > + uint64_t is_status_report_required : 1; > } flags; > /** Crypto op pool. */ > struct rte_mempool *cop_pool; > + /** Control PDU pool. */ > + struct rte_mempool *ctr_pdu_pool; > /** PDCP header size. */ > uint8_t hdr_sz; > /** PDCP AAD size. For AES-CMAC, additional message is prepended for > the operation. */ > @@ -148,8 +159,8 @@ struct entity_priv { > }; >=20 > struct entity_priv_dl_part { > - /* NOTE: when in-order-delivery is supported, post PDCP packets would > need to cached. */ > - uint8_t dummy; > + /** PDCP would need to track the count values that are already > received.*/ > + struct pdcp_cnt_bitmap bitmap; > }; >=20 > struct entity_priv_ul_part { > diff --git a/lib/pdcp/pdcp_process.c b/lib/pdcp/pdcp_process.c > index 9c1a5e0669..267b3b7723 100644 > --- a/lib/pdcp/pdcp_process.c > +++ b/lib/pdcp/pdcp_process.c > @@ -1157,6 +1157,19 @@ pdcp_entity_priv_populate(struct entity_priv > *en_priv, const struct rte_pdcp_ent > if (a_xfrm !=3D NULL && a_xfrm->auth.algo =3D=3D > RTE_CRYPTO_AUTH_NULL) > en_priv->flags.is_null_auth =3D 1; >=20 > + /** > + * flags.is_status_report_required > + * > + * Indicate whether status report is required. > + */ > + if (conf->status_report_required) { > + /** Status report is required only for DL entities. */ > + if (conf->pdcp_xfrm.pkt_dir !=3D > RTE_SECURITY_PDCP_DOWNLINK) > + return -EINVAL; > + > + en_priv->flags.is_status_report_required =3D 1; > + } > + > /** > * hdr_sz > * > diff --git a/lib/pdcp/rte_pdcp.c b/lib/pdcp/rte_pdcp.c > index 8914548dbd..5cd3f5ca31 100644 > --- a/lib/pdcp/rte_pdcp.c > +++ b/lib/pdcp/rte_pdcp.c > @@ -6,7 +6,9 @@ > #include > #include >=20 > +#include "pdcp_cnt.h" > #include "pdcp_crypto.h" > +#include "pdcp_ctrl_pdu.h" > #include "pdcp_entity.h" > #include "pdcp_process.h" >=20 > @@ -34,7 +36,7 @@ rte_pdcp_entity_establish(const struct > rte_pdcp_entity_conf *conf) > struct entity_priv *en_priv; > int ret, entity_size; >=20 > - if (conf =3D=3D NULL || conf->cop_pool =3D=3D NULL) { > + if (conf =3D=3D NULL || conf->cop_pool =3D=3D NULL || conf->ctr_pdu_poo= l =3D=3D > NULL) { > rte_errno =3D -EINVAL; > return NULL; > } > @@ -79,6 +81,7 @@ rte_pdcp_entity_establish(const struct > rte_pdcp_entity_conf *conf) > en_priv->state.rx_deliv =3D conf->count; > en_priv->state.tx_next =3D conf->count; > en_priv->cop_pool =3D conf->cop_pool; > + en_priv->ctr_pdu_pool =3D conf->ctr_pdu_pool; >=20 > /* Setup crypto session */ > ret =3D pdcp_crypto_sess_create(entity, conf); > @@ -89,6 +92,10 @@ rte_pdcp_entity_establish(const struct > rte_pdcp_entity_conf *conf) > if (ret) > goto crypto_sess_destroy; >=20 > + ret =3D pdcp_cnt_ring_create(entity, conf); > + if (ret) > + goto crypto_sess_destroy; > + > return entity; >=20 > crypto_sess_destroy: > @@ -136,3 +143,41 @@ rte_pdcp_entity_suspend(struct rte_pdcp_entity > *pdcp_entity, >=20 > return 0; > } > + > +struct rte_mbuf * > +rte_pdcp_control_pdu_create(struct rte_pdcp_entity *pdcp_entity, > + enum rte_pdcp_ctrl_pdu_type type) > +{ > + struct entity_priv *en_priv; > + struct rte_mbuf *m; > + int ret; > + > + if (pdcp_entity =3D=3D NULL) { > + rte_errno =3D -EINVAL; rte_errno should be positive values. > + return NULL; > + } > + > + en_priv =3D entity_priv_get(pdcp_entity); > + > + m =3D rte_pktmbuf_alloc(en_priv->ctr_pdu_pool); > + if (m =3D=3D NULL) { > + rte_errno =3D -ENOMEM; > + return NULL; > + } > + > + switch (type) { > + case RTE_PDCP_CTRL_PDU_TYPE_STATUS_REPORT: > + ret =3D pdcp_ctrl_pdu_status_gen(en_priv, m); > + break; > + default: > + ret =3D -ENOTSUP; > + } > + > + if (ret) { > + rte_pktmbuf_free(m); > + rte_errno =3D ret; > + return NULL; > + } > + > + return m; > +} > diff --git a/lib/pdcp/rte_pdcp.h b/lib/pdcp/rte_pdcp.h > index 54f88e3fd3..d2db25d7d9 100644 > --- a/lib/pdcp/rte_pdcp.h > +++ b/lib/pdcp/rte_pdcp.h > @@ -16,6 +16,7 @@ > #include > #include > #include > +#include > #include >=20 > #ifdef __cplusplus > @@ -78,6 +79,8 @@ struct rte_pdcp_entity_conf { > struct rte_mempool *sess_mpool; > /** Crypto op pool.*/ > struct rte_mempool *cop_pool; > + /** Mbuf pool to be used for allocating control PDUs.*/ > + struct rte_mempool *ctr_pdu_pool; Please use same prefix for all control pdu stuff. I see cnt, ctr, ctrl, control is being used. I think "control" for top level API and "ctrl" for parameters should be fin= e. > /** > * 32 bit count value (HFN + SN) to be used for the first packet. > * pdcp_xfrm.hfn would be ignored as the HFN would be derived from > this value. > @@ -91,6 +94,15 @@ struct rte_pdcp_entity_conf { > uint8_t dev_id; > /** Reverse direction during IV generation. Can be used to simulate UE > crypto processing.*/ > bool reverse_iv_direction; > + /** > + * Status report required (specified in TS 38.331). > + * > + * If PDCP entity is configured to send a PDCP status report, the upper > layer application > + * may request a receiving PDCP entity to generate a PDCP status report > using > + * ``rte_pdcp_ctrl_pdu_create``. In addition, PDCP status reports may b= e > generated during > + * operations such as entity re-establishment. > + */ > + bool status_report_required; rte_pdcp_ctrl_pdu_create -> rte_pdcp_control_pdu_create Please specify that a PDU will be generated for status report. Otherwise, it seems some structure would be returned for status report But there is no mention of that. This will avoid confusion. > }; > /* >8 End of structure rte_pdcp_entity_conf. */ >=20 > @@ -169,6 +181,25 @@ int > rte_pdcp_entity_suspend(struct rte_pdcp_entity *pdcp_entity, > struct rte_mbuf *out_mb[]); >=20 > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice > + * > + * Create control PDU packet of the `type` specified. > + * > + * @param pdcp_entity > + * Pointer to the PDCP entity for which the control PDU need to be gen= erated. > + * @param type > + * Type of control PDU to be generated. > + * @return > + * - Control PDU generated, in case of success. > + * - NULL in case of failure. rte_errno will be set to error code. > + */ > +__rte_experimental > +struct rte_mbuf * > +rte_pdcp_control_pdu_create(struct rte_pdcp_entity *pdcp_entity, > + enum rte_pdcp_ctrl_pdu_type type); > + > /** > * @warning > * @b EXPERIMENTAL: this API may change without prior notice > diff --git a/lib/pdcp/version.map b/lib/pdcp/version.map > index f9ff30600a..d0cf338e1f 100644 > --- a/lib/pdcp/version.map > +++ b/lib/pdcp/version.map > @@ -6,6 +6,8 @@ EXPERIMENTAL { > rte_pdcp_entity_release; > rte_pdcp_entity_suspend; >=20 > + rte_pdcp_control_pdu_create; > + > rte_pdcp_pkt_post_process; > rte_pdcp_pkt_pre_process; >=20 > -- > 2.25.1