Show a cover letter.

GET /api/covers/126100/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 126100,
    "url": "http://patches.dpdk.org/api/covers/126100/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/cover/20230414174512.642-1-anoobj@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230414174512.642-1-anoobj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230414174512.642-1-anoobj@marvell.com",
    "date": "2023-04-14T17:44:50",
    "name": "[v2,00/22] lib: add pdcp protocol",
    "submitter": {
        "id": 1205,
        "url": "http://patches.dpdk.org/api/people/1205/?format=api",
        "name": "Anoob Joseph",
        "email": "anoobj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/cover/20230414174512.642-1-anoobj@marvell.com/mbox/",
    "series": [
        {
            "id": 27723,
            "url": "http://patches.dpdk.org/api/series/27723/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=27723",
            "date": "2023-04-14T17:44:50",
            "name": "lib: add pdcp protocol",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/27723/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/covers/126100/comments/",
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 2BD8142943;\n\tFri, 14 Apr 2023 19:45:25 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 05D7C410FA;\n\tFri, 14 Apr 2023 19:45:25 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com\n [67.231.156.173])\n by mails.dpdk.org (Postfix) with ESMTP id 7334A410F6\n for <dev@dpdk.org>; Fri, 14 Apr 2023 19:45:23 +0200 (CEST)",
            "from pps.filterd (m0045851.ppops.net [127.0.0.1])\n by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id\n 33EGUdJo026903; Fri, 14 Apr 2023 10:45:22 -0700",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3py646s6g3-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Fri, 14 Apr 2023 10:45:21 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48;\n Fri, 14 Apr 2023 10:45:19 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend\n Transport; Fri, 14 Apr 2023 10:45:19 -0700",
            "from BG-LT92004.corp.innovium.com (unknown [10.28.161.183])\n by maili.marvell.com (Postfix) with ESMTP id 668983F7083;\n Fri, 14 Apr 2023 10:45:14 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=fYh9mJpC7WpglaM1YslFYFIOz7ei9smiOLqhvT0/ouw=;\n b=jrQK1AZ++lzW644a7/ak851xmfr4ebh5ZM/K2O9ooJLaZKA5ZluCpB55T+lE2m03vahs\n KTC6v+g9BafrYel63HFMCh9r6hY2jDbUUOko7OBXYIKT81eqGtuS8F7dBWJZkyYas1KE\n WCC/wGFnqGV/tBNesYB2QXBrZBPKw2my32cNpGdF1u6WvR+VDbBZpRJwWztFZwVyK9pS\n +BsuqZRt6ysz0ocPbNg3+/SZ6N7G4UP/ay2BF2g1wtYe6Ol+X60gdELkVZ9n9EsgWHXA\n 9CQk+RcgzsEHa97eFsbr6rHf7dsbURml4lkVD7QKDW63NOT/SOLNFqNxWyAdU3D1zEnR /g==",
        "From": "Anoob Joseph <anoobj@marvell.com>",
        "To": "Thomas Monjalon <thomas@monjalon.net>, Akhil Goyal <gakhil@marvell.com>,\n Jerin Jacob <jerinj@marvell.com>, Konstantin Ananyev\n <konstantin.v.ananyev@yandex.ru>, Bernard Iremonger\n <bernard.iremonger@intel.com>",
        "CC": "Hemant Agrawal <hemant.agrawal@nxp.com>,\n =?utf-8?q?Mattias_R=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>,\n \"Kiran Kumar K\" <kirankumark@marvell.com>,\n Volodymyr Fialko <vfialko@marvell.com>, <dev@dpdk.org>,\n Olivier Matz <olivier.matz@6wind.com>",
        "Subject": "[PATCH v2 00/22] lib: add pdcp protocol",
        "Date": "Fri, 14 Apr 2023 23:14:50 +0530",
        "Message-ID": "<20230414174512.642-1-anoobj@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20221222092522.1628-1-anoobj@marvell.com>",
        "References": "<20221222092522.1628-1-anoobj@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "5T4Euxjrm353A-2bSVXNQwnyteK7Nx9J",
        "X-Proofpoint-ORIG-GUID": "5T4Euxjrm353A-2bSVXNQwnyteK7Nx9J",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22\n definitions=2023-04-14_10,2023-04-14_01,2023-02-09_01",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <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>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Add Packet Data Convergence Protocol (PDCP) processing library.\n\nThe library is similar to lib_ipsec which provides IPsec processing\ncapabilities in DPDK.\n\nPDCP would involve roughly the following operations,\n1. Transfer of user plane data\n2. Transfer of control plane data\n3. Header compression\n4. Uplink data compression\n5. Ciphering and integrity protection\n\nPDCP library provides following control path APIs that is used to\nconfigure various PDCP entities,\n1. rte_pdcp_entity_establish()\n2. rte_pdcp_entity_suspend()\n3. rte_pdcp_entity_release()\n\nPDCP process is split into 2 parts. One before crypto processing\n(rte_pdcp_pkt_pre_process()) and one after crypto processing\n(rte_pdcp_pkt_post_process()). Since cryptodev dequeue can return crypto\noperations belonging to multiple entities, rte_pdcp_pkt_crypto_group()\nis added to help grouping crypto operations belonging to same entity.\n\nSimilar to lib IPsec, lib PDCP would allow application to use same API\nsequence while leveraging protocol offload features enabled by rte_security\nlibrary. Lib PDCP would internally change the handles registered for\n*pre_process* and *post_process* based on features enabled in the entity.\n\nLib PDCP would create the required sessions on the device provided in entity to\nminimize the application requirements. Also, the crypto_op allocation and free\nwould also be done internally by lib PDCP to allow the library to create\ncrypto ops as required for the input packets. For example, when control PDUs are\nreceived, no cryptodev enqueue-dequeue is expected for the same and lib PDCP\nis expected to handle it differently.\n\nLib PDCP utilizes reorder library for implementing in-order delivery. It\nutilizes bitmap library for implementing status reports and track the COUNT\nvalue of the packets received. To allow application to choose timer\nimplementation of choice, lib PDCP allows application to configure handles that\ncan be used for starting & stopping timers. Upon expiry, application can call\ncorresponding PDCP API(``rte_pdcp_t_reordering_expiry_handle``) for handling the\nevent. Unit tests are added to verify both rte_timer based timers as well as\nrte_eventdev based timers.\n\nPDCP tracks the sequence number of the received packets and during events such\nas re-establishment, it is required to generate reports and transmit to the\npeer. This series introduces ``rte_pdcp_control_pdu_create`` for handling\ncontrol PDU generation.\n\nChanges in v2:\n- Added control PDU handling\n- Added t-Reordering timer\n- Added in-order delivery\n- Added status PDU generation\n- Rebased on top of new features added in reorder library\n- Split base patch\n- Increased test coverage\n- Improved thread safety\n\nChanges from RFC\n- Implementation for all APIs covering basic control plane & user plane packets\n- Unit test leveraging existing PDCP vectors available in test_cryptodev\n- Unit test performing both UL & DL operations to verify various protocol\n  features\n- Updated documentation\n\nSample application sequence:\n\n\tstruct rte_mbuf **out_mb, *pkts[MAX_BURST_SIZE];\n\tstruct rte_crypto_op *cop[MAX_BURST_SIZE];\n\tstruct rte_pdcp_group grp[MAX_BURST_SIZE];\n\tstruct rte_pdcp_entity *pdcp_entity;\n\tint nb_max_out_mb, ret, nb_grp;\n\n\t/* Create PDCP entity */\n\tpdcp_entity = rte_pdcp_entity_establish(&conf);\n\n\t/**\n\t * Allocate buffer for holding mbufs returned during PDCP suspend,\n\t * release & post-process APIs.\n\t */\n\n\t/* Max packets that can be cached in entity + burst size */\n\tnb_max_out_mb = pdcp_entity->max_pkt_cache + 1;\n\tout_mb = rte_malloc(NULL, nb_max_out_mb * sizeof(uintptr_t), 0);\n\tif (out_mb == NULL) {\n\t\t/* Handle error */\n\t}\n\n\twhile (1) {\n\t\t/* Receive packet and form mbuf */\n\n\t\t/**\n\t\t * Prepare packets for crypto operation. Following operations\n\t\t * would be done,\n\t\t *\n\t\t * Transmitting entity/UL (only data PDUs):\n\t\t *  - Perform compression\n\t\t *  - Assign sequence number\n\t\t *  - Add PDCP header\n\t\t *  - Create & prepare crypto_op\n\t\t *  - Prepare IV for crypto operation (auth_gen, encrypt)\n\t\t *  - Save original PDCP SDU (during PDCP re-establishment,\n\t\t *    unconfirmed PDCP SDUs need to crypto processed again and\n\t\t *    transmitted/re-transmitted)\n\t\t *\n\t\t *  Receiving entity/DL:\n\t\t *  - Any control PDUs received would be processed and\n\t\t *    appropriate actions taken. If data PDU, continue.\n\t\t *  - Determine sequence number (based on HFN & per packet SN)\n\t\t *  - Prepare crypto_op\n\t\t *  - Prepare IV for crypto operation (decrypt, auth_verify)\n\t\t */\n\t\tnb_success = rte_pdcp_pkt_pre_process(pdcp_entity, pkts, cop,\n\t\t\t\t\t\t      nb_rx, &nb_err);\n\t\tif (nb_err != 0) {\n\t\t\t/* Handle error packets */\n\t\t}\n\n\t\tif ((rte_cryptodev_enqueue_burst(dev_id, qp_id, cop, nb_success)\n\t\t\t\t!= nb_success) {\n\t\t\t/* Retry for enqueue failure packets */\n\t\t}\n\n\t\t...\n\n\t\tret = rte_cryptodev_dequeue_burst(dev_id, qp_id, cop,\n\t\t\t\t\t\t  MAX_BURST_SIZE);\n\t\tif (ret == 0)\n\t\t\tcontinue;\n\n\t\t/**\n\t\t * Received a burst of completed crypto ops from cryptodev. It\n\t\t * may belong to various entities. Group similar ones together\n\t\t * for entity specific post-processing.\n\t\t */\n\n\t\t/**\n\t\t * Groups similar entities together. Frees crypto op and based\n\t\t * on crypto_op status, set mbuf->ol_flags which would be\n\t\t * checked in rte_pdcp_pkt_post_process().\n\t\t */\n\t\tnb_grp = rte_pdcp_pkt_crypto_group(cop, pkts, grp, ret);\n\n\t\tfor (i = 0; i != nb_grp; i++) {\n\n\t\t\t/**\n\t\t\t * Post process packets after crypto completion.\n\t\t\t * Following operations would be done,\n\t\t\t *\n\t\t\t *  Transmitting entity/UL:\n\t\t\t *  - Check crypto result\n\t\t\t *\n\t\t\t *  Receiving entity/DL:\n\t\t\t *  - Check crypto operation status\n\t\t\t *  - Check for duplication (if yes, drop duplicate)\n\t\t\t *  - Perform decompression\n\t\t\t *  - Trim PDCP header\n\t\t\t *  - Hold packet (SDU) for in-order delivery (return\n\t\t\t *    completed packets as and when sequence is\n\t\t\t *    completed)\n\t\t\t *  - If not in sequence, cache the packet and start\n\t\t\t *    t-Reordering timer. When timer expires, the\n\t\t\t *    packets need to delivered to upper layers (not\n\t\t\t *    treated as error packets).\n\t\t\t */\n\t\t\tnb_success = rte_pdcp_pkt_post_process(grp[i].id.ptr,\n\t\t\t\t\t\t\t       grp[i].m, out_mb,\n\t\t\t\t\t\t\t       grp[i].cnt,\n\t\t\t\t\t\t\t       &nb_err);\n\t\t\tif (nb_err != 0) {\n\t\t\t\t/* Handle error packets */\n\t\t\t}\n\n\t\t\t/* Perform additional operations */\n\n\t\t\t/**\n\t\t\t * Tranmitting entity/UL\n\t\t\t * - If duplication is enabled, duplicate PDCP PDUs\n\t\t\t * - When lower layers confirm reception of a PDCP PDU,\n\t\t\t *   it should be communicated to PDCP layer so that\n\t\t\t *   PDCP can drop the corresponding SDU\n\t\t\t */\n\t\t}\n\t}\n\nSample output from unit test executed on crypto_cn10k PMD(summary):\n\n~# DPDK_TEST=pdcp_autotest ./dpdk-test --log-level=7\n<snip>\n + ------------------------------------------------------- +\n + Test Suite Summary : PDCP Unit Test Suite\n + ------------------------------------------------------- +\n + Known vector cases : 109/160 passed, 0/160 skipped, 0/160 failed, 51/160 unsupported\n + PDCP combined mode : 1/1 passed, 0/1 skipped, 0/1 failed, 0/1 unsupported\n + PDCP HFN/SN : 4/4 passed, 0/4 skipped, 0/4 failed, 0/4 unsupported\n + PDCP reorder : 5/5 passed, 0/5 skipped, 0/5 failed, 0/5 unsupported\n + PDCP status report : 9/9 passed, 0/9 skipped, 0/9 failed, 0/9 unsupported\n + ------------------------------------------------------- +\n + Sub Testsuites Total :      5\n + Sub Testsuites Skipped :    0\n + Sub Testsuites Passed :     5\n + Sub Testsuites Failed :     0\n + ------------------------------------------------------- +\n + Tests Total :       179\n + Tests Skipped :      0\n + Tests Executed :    179\n + Tests Unsupported:  51\n + Tests Passed :      128\n + Tests Failed :       0\n + ------------------------------------------------------- +\nTest OK\n\n\nAnoob Joseph (10):\n  lib: add pdcp protocol\n  pdcp: add pre and post-process\n  pdcp: add packet group\n  pdcp: add crypto session create and destroy\n  pdcp: add pre and post process for UL\n  pdcp: add pre and post process for DL\n  pdcp: add IV generation routines\n  app/test: add lib pdcp tests\n  doc: add PDCP library guide\n  pdcp: add control PDU handling\n\nVolodymyr Fialko (12):\n  net: add PDCP header\n  test/pdcp: pdcp HFN tests in combined mode\n  pdcp: implement t-Reordering and packet buffering\n  test/pdcp: add in-order delivery cases\n  pdcp: add timer callback handlers\n  pdcp: add timer expiry handle\n  test/pdcp: add timer expiry cases\n  test/pdcp: add timer restart case\n  pdcp: add support for status report\n  pdcp: allocate reorder buffer alongside with entity\n  pdcp: add thread safe processing\n  test/pdcp: add PDCP status report cases\n\n app/test/meson.build                          |    1 +\n app/test/test_cryptodev.h                     |    3 +\n app/test/test_pdcp.c                          | 1923 +++++++++++++++++\n doc/api/doxy-api-index.md                     |    4 +-\n doc/api/doxy-api.conf.in                      |    1 +\n .../img/pdcp_functional_overview.svg          |    1 +\n doc/guides/prog_guide/index.rst               |    1 +\n doc/guides/prog_guide/pdcp_lib.rst            |  285 +++\n lib/meson.build                               |    1 +\n lib/net/meson.build                           |    1 +\n lib/net/rte_pdcp_hdr.h                        |  140 ++\n lib/pdcp/meson.build                          |   21 +\n lib/pdcp/pdcp_cnt.c                           |  164 ++\n lib/pdcp/pdcp_cnt.h                           |   24 +\n lib/pdcp/pdcp_crypto.c                        |  237 ++\n lib/pdcp/pdcp_crypto.h                        |   21 +\n lib/pdcp/pdcp_ctrl_pdu.c                      |   72 +\n lib/pdcp/pdcp_ctrl_pdu.h                      |   16 +\n lib/pdcp/pdcp_entity.h                        |  306 +++\n lib/pdcp/pdcp_process.c                       | 1379 ++++++++++++\n lib/pdcp/pdcp_process.h                       |   13 +\n lib/pdcp/pdcp_reorder.c                       |   20 +\n lib/pdcp/pdcp_reorder.h                       |   68 +\n lib/pdcp/rte_pdcp.c                           |  261 +++\n lib/pdcp/rte_pdcp.h                           |  369 ++++\n lib/pdcp/rte_pdcp_group.h                     |  125 ++\n lib/pdcp/version.map                          |   17 +\n 27 files changed, 5473 insertions(+), 1 deletion(-)\n create mode 100644 app/test/test_pdcp.c\n create mode 100644 doc/guides/prog_guide/img/pdcp_functional_overview.svg\n create mode 100644 doc/guides/prog_guide/pdcp_lib.rst\n create mode 100644 lib/net/rte_pdcp_hdr.h\n create mode 100644 lib/pdcp/meson.build\n create mode 100644 lib/pdcp/pdcp_cnt.c\n create mode 100644 lib/pdcp/pdcp_cnt.h\n create mode 100644 lib/pdcp/pdcp_crypto.c\n create mode 100644 lib/pdcp/pdcp_crypto.h\n create mode 100644 lib/pdcp/pdcp_ctrl_pdu.c\n create mode 100644 lib/pdcp/pdcp_ctrl_pdu.h\n create mode 100644 lib/pdcp/pdcp_entity.h\n create mode 100644 lib/pdcp/pdcp_process.c\n create mode 100644 lib/pdcp/pdcp_process.h\n create mode 100644 lib/pdcp/pdcp_reorder.c\n create mode 100644 lib/pdcp/pdcp_reorder.h\n create mode 100644 lib/pdcp/rte_pdcp.c\n create mode 100644 lib/pdcp/rte_pdcp.h\n create mode 100644 lib/pdcp/rte_pdcp_group.h\n create mode 100644 lib/pdcp/version.map"
}