get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/42159/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 42159,
    "url": "http://patches.dpdk.org/api/patches/42159/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1530631466-26427-3-git-send-email-shally.verma@caviumnetworks.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": "<1530631466-26427-3-git-send-email-shally.verma@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1530631466-26427-3-git-send-email-shally.verma@caviumnetworks.com",
    "date": "2018-07-03T15:24:24",
    "name": "[v4,2/4] cryptodev: support asymmetric operations",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "41c652ebb2aa839c7a6c391996322088f9d77406",
    "submitter": {
        "id": 960,
        "url": "http://patches.dpdk.org/api/people/960/?format=api",
        "name": "Shally Verma",
        "email": "shally.verma@caviumnetworks.com"
    },
    "delegate": {
        "id": 22,
        "url": "http://patches.dpdk.org/api/users/22/?format=api",
        "username": "pdelarag",
        "first_name": "Pablo",
        "last_name": "de Lara Guarch",
        "email": "pablo.de.lara.guarch@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1530631466-26427-3-git-send-email-shally.verma@caviumnetworks.com/mbox/",
    "series": [
        {
            "id": 375,
            "url": "http://patches.dpdk.org/api/series/375/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=375",
            "date": "2018-07-03T15:24:22",
            "name": "crypto: add asym crypto support",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/375/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/42159/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/42159/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 9204B1BF4A;\n\tTue,  3 Jul 2018 17:25:24 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0062.outbound.protection.outlook.com [104.47.36.62])\n\tby dpdk.org (Postfix) with ESMTP id 6DC8F1BF59\n\tfor <dev@dpdk.org>; Tue,  3 Jul 2018 17:25:22 +0200 (CEST)",
            "from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by\n\tDM5PR0701MB3640.namprd07.prod.outlook.com (2603:10b6:4:7e::12) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.906.24; Tue, 3 Jul 2018 15:25:18 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=yCcaYBpKF2EBt9zPzlSFYf5pDnHg+nWJLsMwD32ffzc=;\n\tb=lrhnVbrhLOsHDFM2hkbdBGkS0v7IgNVr5yT1ON1HVovnBQzC7+8zj41t3lHklsszv+CYsmKCVVDh0bxe7vgT15QRsX1Cmmx7hm1fNeC5lx2hgt6X4N9SV8fFinlH4lN7IR6srAa6MDz531LSsR8L8zXRo8+5NT6eHd6yrmtPRB4=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Shally.Verma@cavium.com; ",
        "From": "Shally Verma <shally.verma@caviumnetworks.com>",
        "To": "pablo.de.lara.guarch@intel.com",
        "Cc": "dev@dpdk.org, pathreya@caviumnetworks.com, nmurthy@caviumnetworks.com,\n\tUmesh Kartha <umesh.kartha@caviumnetworks.com>,\n\tSunila Sahu <sunila.sahu@caviumnetworks.com>,\n\tAshish Gupta <ashish.gupta@caviumnetworks.com>",
        "Date": "Tue,  3 Jul 2018 20:54:24 +0530",
        "Message-Id": "<1530631466-26427-3-git-send-email-shally.verma@caviumnetworks.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1530631466-26427-1-git-send-email-shally.verma@caviumnetworks.com>",
        "References": "<1530631466-26427-1-git-send-email-shally.verma@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[115.113.156.2]",
        "X-ClientProxiedBy": "PN1PR0101CA0014.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:c00:e::24) To DM5PR0701MB3640.namprd07.prod.outlook.com\n\t(2603:10b6:4:7e::12)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "bff9de47-c88c-4dca-b560-08d5e0f9306b",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652040)(8989117)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(5600053)(711020)(2017052603328)(7153060)(7193020);\n\tSRVR:DM5PR0701MB3640; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; DM5PR0701MB3640;\n\t3:T4HjB0Nt3zOGoTptH+djXq4e4eEqjmlJm4qSa/lsYiiCDhL9HQ9S3rY2uyG0eOdXwJfjtUEyJ/fmC/V5NmjLfM09u9X8l1BNKq5fxCNWqTDp8Lxw568SVYkNpnclHcjoZkgpQx/HalyVGizCiWdncvU3jCU8ZIv68Q1mZJ8HIxtKlV2NyMLYBhjJP8GKU0OTVUgAWM8Va9LQExkmtZTMvHuohQ45m8FfQzNoPEvXj1d8Whu8VhtFrerc0r15LGXt;\n\t25:Z6tbt6rXH+QkgFUKj2gY/hBkeYYLMGaXeLZ58lhgk0MmXfdd4c7SQYkz31yIHEnV+AZ3ZQhZyBylQrf8pbQCz3tNYCuB9UQypqs2EtBGh2hGAviCeFR6P3kRnUSBeDlcEW/4lBLOYqnqgf04nikVCykEClPD1AAHsq4Kc7jcoTBNvjjoJ+wYW+hxkEow3u2p4+9YGxW0HY6aKO95iQiWFt6duWtmFik8XhWY75MeO2J1pUYXfyR2YHLyEZO+0KkZkTggxd46emJceLsXXdrwB3/C8smWnwHiy1w0z5x1Jb6YUZmFQnRglHCEWKYhxh1j0+7FcYGqfLK6pfxp2OJ06g==;\n\t31:eQVjif2dDMfjS0bMONzYsiG2bkPG6ZNNyxHMKc6zxT7baFu3zW68VO/I93n9oXFFVTyspWkZ7/8WaFcw2cDrO8b81xpSnX16gDJ40wC1LdxpCunz5/VRNWoYYXY0IRNy15tMZ7kvMgp3ItqhtA5/o6EwTkg0D2FrP4ANHC6i0NOsBKKOK1p4ntquYfZXYoGDdR/tgfOHx44GYaeZqXkYMl2ZHkBVI+ZvIz4und7mHxU=",
            "1; DM5PR0701MB3640;\n\t20:rDKW5Kfcc9oLyK780jeJoVOX0z27/gy675wrvJbrCkvgXops9iWWPy3IVZOOuAJaD+ssNpIEjtOIn+UOqRiKX7D8pHNtHKAt1GtjpSkOBYqCckh+nthaiitz+9kPkPpC+mOSCQyxxk/+AmnsvT11G+2Tx589cbPB8aWLeT59inLH/cFrfbBkI74elbH0c7PXmQF+rTUEBBBY0rx43967wflS0cRoO7Navxa1c3dBMb72n15KhDtFPy1cvqfQbnVJRO/nLBIplMaodPCgsabRi3X0n8AsbAHyaWevIhM7t0GrlvRq+uV2HPWuhZEhsBg92wLNKAAJKyB26L18GrG9dkjyizMFwXxJ6iGZnMjjpl4Co2c+T67hFqlm+Kq6HCk+g5zUydAN8UZqnYFNMZxQLm+xUqgvw5NgwHkLT8F33SwJvvDCTyCLL9rYdwDWssGXFp920XDMC4aS4gMi3iFaAgduJxkD2wgfN1tp89hgq+0YhdqqE2AVzFOyUUJivvGLT2+clpZ3wUaGW8w9FN4Okq8AJRrCDoT4hAO1MnqMdu5aRWYMPnJ3ksf7rBRXUW6fuoYc3fXZj0gu+2hG6q8qjw82O1Fgu+gYK+0fhnXVy8U=;\n\t4:47YEzHqmDoJHk0g7KyuhREOrxWNhMPSNL5RFPboEz3IZLsgXxECRRgE0wsaigAFAa9cHgyCp11u17hlUTo3htQAbRRnaq45kCTfvySOa9GEAQMwmAJkC7pZSqqor8IRNTytvuWbSuUlyEWlxar636RPhJpRY4snK43fnPUgDYhThQJMg35uAcM0UTLnp81JeBzxNDUJDnZ1DYcepK9cGmYXAGdaqa4cguZzghYDUgOwKR2+LMe1esmc49uT+R+a6r3AWQvmHmeFuX8jbIH0U9g==",
            "=?us-ascii?Q?1; DM5PR0701MB3640;\n\t23:rMCpSncnbQDBE+8XlPib0Yy5BLUGKDBLW7jeBsI?=\n\tbGtuV+XRuRnrhlHDykUOTmLQRGyg34e6h+CvOZV0mSM/OVtcmIH4/Q1TdG2mgDkqjM1aeYT3hhYgR6LqVTygTNc+OyDiTq6Rb68u7vWitM/n9PI0V3tLb2DVawkJdNhapc8LRi6OmgzretfqU6PHob8+hHjTMrR8L2goQBAMlLWTe70P1Fp7Ref2uDh7ZbWsaryxPSalxvC+me+Fcc87zw5+ih6x7t47B8qa4X77F4Jkh50WGDsAWDI2UE6Oz56JJCsXmsBYls7zZxXx0hOY4+9ffLP/FZEKHvebYSgDI0/Y1PY98hC9jCfaJgvEM/fDChQ/WVU/vduaUKmNgg4+yyNFnuh3ZwCaerfDWDbu4+rjpqrnqNqALdEay4HrpDgzXC4lZLtDI4dP8nO0OLTQPOo1loeXxzO1n3LojB3ap0CVfvN47G0hCrvjfJN8obFaUGmiFc7kGV+igXNIHXZO+pyLgYk0CPRn39zZNQkFgBNY9xizO6jY7XoTVFvQHpiJ2OEWcXseYrsVB51hpqu0Q7vPu/O1pgO2fK6ZYZ6fFeYzU8/J4sOJt8w6tQatjXUVwFgOGmWpftyqt8JDMZXD+q4yN7N/h+yhwrW2f2YBwCQmTvHtV2c0uBB9tQy8/LwfWv7ZsbmyVGqKEI09UQVjGChTWGBeC9J/10dJPBf2Jjx6ndiESAX2tUvqZL+UM9EdMEKFGCDW3zeJE6bliuT1a2rCRDAwFMQEyIM/klHVtIRAukjgCpY8aXdpSzqBZmr10ldw6uj9kNevyI7dmIe9C7ieTb8V2YBlO3WfB4eRzDQb8I4C0t67YBFhX+0Aa0vXr9iyd0nudVjEzdZO1fjFUUmt5puAlXHG6KseDjbGhM+Owl+Kg9w1Mb2O7Zxl43khkL3gfh51ISwEUjWPHiQRSnnhv0Cs8TAkEGSQV6dQ0WftQtXE3yuZ+Co+Hg420Ctknqmu4g3tiaQT3/QuDfQ7xTUuccqx3Xle/mF+qcB7Sp+uBB+c6Ij810/huSFzktiuLElMvvbsfYYx9OEl54kaqeJTXOrRk6nHU2AkQf5VZFxesiI7DSAc7HhoWFCpXwI5pTBpj7zI1RFXpPEhonN4QZV6ouvGFFuMG1vZh8gNYLAVIpNtW3qbMjCpeFj4fw73PKGbil3wwcrA/QOgVlJ9NZYla/qUs0lWqilyu1Kn33XUAoPCT6oGbl9tS+hbVEXlL1doBxw7q7faFLreYpyNebttl2gF1ZLPkSAqTrlFtiOCLxUUTFuh9pqbDuUfBXJ6JhDUZ/X1c/cwUE9hWq4gp524q7DoKh7FLwlgRGcmZbeAqPbwsVeuTcLlH1gD7DW8R8JQHPAnAP00/fztml98op4SMqQQ3omPyFsIDekhb4H/aPQ==",
            "1; DM5PR0701MB3640;\n\t6:TBmIfC7RiPSx2nFCvbKZjqEi4lH1gpIyDyBWpt/XWsEsg7cLAQfe17bA3r4Ayu3a6f+aZneu+/6CpgtEuVDxrm5mRXnllOiwXaimfkpUDSTd5++fPRGYiHn7oyAMyN+9lxVi2lXjsdspqoM8f+Ug2bsP1h/pl1aIAlI4L9d9rPU+luGslihhe4SPjZzsh+sGO6Vo9JKpOy3iAwWHdBO9QQxagotpzAfYAJyhkFdFX17wcE+D98lJxDY1FPFsxT+D8uXeDihedCmzlzjcivqI3wnB7GFNg8aOC3nKGybNUW4D3zjVPM91a/MknG21qimNiFWe+S3da5hKID4t6dnSB6RRSga5IH4b+xvm7It5lOUXn/99P1DNQAG4suMbOHYN+u6FTjPtsjR3Ro51TlotzrlOmcskugKbmhtwNi9P2iRPpcr2JMfdvTE0GV8nJ4u85Nm+91NpwVp5l/h6YBxA7A==;\n\t5:UZa+hGpnm9qfAYq6Zw38jwNNciHBkVcLOpTeJY4dSc53qHoBikCUNWIjfayJqJcTUFW55QZ8g07GUJh8bkteKQzlPyPjKLNwfdtJd3oB6rdQ2j+pBX3oMFlwex8YatzbLG8o0DhTuhSplxjN1umcPVCyXuSkNC9fiahU+G3YJ7M=;\n\t24:9lwKwY3te8eqCFrLdP98yrvukW9XWd3PTE5F1Grejrlb4zZKocTgd9EuRjmnzNkV+3LyDY1NnUv9jbgpQ6fhX8RmiUYEKPGULnAgMTZ2YFI=",
            "1; DM5PR0701MB3640;\n\t7:oxuBq21lq3IYmia9norMQjvnYvL1DsOqCwgk+iusKIyexDt18TcDucPMEkoH6UHk3JcPYqcK5lv3NNHxu4NSwqZ4W/cXZnpcgE+uv+1S//ENlCSFyWRprp5mCVvL60g6Jqhx3eNxtwONwGmOHBDgZNd3ZyttQ05I3K9XPyCGjRW76cNAYmPm1SpSgHzw7DIJIgkTSOjMvA52Zoq5OC9Sa3fp1ZPnamBeq9Jc+toxKltB0UsNCFDnW75XITnGV4l0"
        ],
        "X-MS-TrafficTypeDiagnostic": "DM5PR0701MB3640:",
        "X-Microsoft-Antispam-PRVS": "<DM5PR0701MB3640D733A291F9146894847BF0420@DM5PR0701MB3640.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(10201501046)(3231254)(944501410)(52105095)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016);\n\tSRVR:DM5PR0701MB3640; BCL:0; PCL:0; RULEID:; SRVR:DM5PR0701MB3640; ",
        "X-Forefront-PRVS": "0722981D2A",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(136003)(346002)(376002)(39860400002)(396003)(366004)(199004)(189003)(50226002)(53936002)(55236004)(316002)(6506007)(107886003)(54906003)(42882007)(305945005)(386003)(68736007)(51416003)(575784001)(7736002)(4326008)(72206003)(8676002)(6486002)(478600001)(25786009)(81156014)(81166006)(76176011)(2361001)(6512007)(97736004)(69596002)(6116002)(16526019)(3846002)(186003)(2351001)(44832011)(5660300001)(6666003)(6916009)(53416004)(8936002)(66066001)(47776003)(476003)(106356001)(16586007)(956004)(2616005)(11346002)(105586002)(2906002)(52116002)(446003)(50466002)(5024004)(14444005)(26005)(48376002)(36756003)(486006);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3640;\n\tH:hyd1sverma-dt.caveonetworks.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; A:1; MX:1; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "X-Microsoft-Antispam-Message-Info": "zb+foCQzrICQvLHsFJqD7cSBcuvRoj7YQiYVsXoMxtJQDIObyNAgDpdOopAaoCN212kAVjawJb8QFbeSGT0al/5M9fjNfFDIOCdNX142inDofiGK1Fnio/c8t5QEU3tgRl3bsAp96w7MtFY4ucKVlInN8B4hn4V5Mtr16WEzOiFsqFo4+cD1ODdjGs3ZrtI2Fbk1jsDnRUohpeySqQdGb4cZJXhvbAPFpFQA9KROTHHUess32mvotOQeDNW4m74t5bdg1zsomFhjk9wgDu02PWV+bADNWHKQOLME+cJyoL/PsvEsg7Xn+5vUe8q8dTIbHtv+g3stBSREEGELU1E48qQGaQQRWun8iiq2eym3W1s=",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "03 Jul 2018 15:25:18.2570\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "bff9de47-c88c-4dca-b560-08d5e0f9306b",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM5PR0701MB3640",
        "Subject": "[dpdk-dev] [PATCH v4 2/4] cryptodev: support asymmetric operations",
        "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>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Umesh Kartha <umesh.kartha@caviumnetworks.com>\n\nExtend DPDK librte_cryptodev to:\n- define asym op type in rte_crypto_op_type and associated\n  op pool create/alloc APIs\n- define asym session and associated session APIs\n\nIf PMD shows in its feature flag that it supports both sym and\nasym then it must support those on all its qps.\n\nSigned-off-by: Shally Verma <shally.verma@caviumnetworks.com>\nSigned-off-by: Sunila Sahu <sunila.sahu@caviumnetworks.com>\nSigned-off-by: Ashish Gupta <ashish.gupta@caviumnetworks.com>\nSigned-off-by: Umesh Kartha <umesh.kartha@caviumnetworks.com>\n---\n lib/librte_cryptodev/rte_crypto.h              |  37 ++++-\n lib/librte_cryptodev/rte_cryptodev.c           | 201 ++++++++++++++++++++++++-\n lib/librte_cryptodev/rte_cryptodev.h           | 124 ++++++++++++++-\n lib/librte_cryptodev/rte_cryptodev_pmd.h       |  58 ++++++-\n lib/librte_cryptodev/rte_cryptodev_version.map |  10 +-\n 5 files changed, 423 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/lib/librte_cryptodev/rte_crypto.h b/lib/librte_cryptodev/rte_crypto.h\nindex a16be65..fd5ef3a 100644\n--- a/lib/librte_cryptodev/rte_crypto.h\n+++ b/lib/librte_cryptodev/rte_crypto.h\n@@ -23,6 +23,7 @@ extern \"C\" {\n #include <rte_common.h>\n \n #include \"rte_crypto_sym.h\"\n+#include \"rte_crypto_asym.h\"\n \n /** Crypto operation types */\n enum rte_crypto_op_type {\n@@ -30,6 +31,8 @@ enum rte_crypto_op_type {\n \t/**< Undefined operation type */\n \tRTE_CRYPTO_OP_TYPE_SYMMETRIC,\n \t/**< Symmetric operation */\n+\tRTE_CRYPTO_OP_TYPE_ASYMMETRIC\n+\t/**< Asymmetric operation */\n };\n \n /** Status of crypto operation */\n@@ -114,6 +117,10 @@ struct rte_crypto_op {\n \tunion {\n \t\tstruct rte_crypto_sym_op sym[0];\n \t\t/**< Symmetric operation parameters */\n+\n+\t\tstruct rte_crypto_asym_op asym[0];\n+\t\t/**< Asymmetric operation parameters */\n+\n \t}; /**< operation specific parameters */\n };\n \n@@ -134,6 +141,9 @@ __rte_crypto_op_reset(struct rte_crypto_op *op, enum rte_crypto_op_type type)\n \tcase RTE_CRYPTO_OP_TYPE_SYMMETRIC:\n \t\t__rte_crypto_sym_op_reset(op->sym);\n \t\tbreak;\n+\tcase RTE_CRYPTO_OP_TYPE_ASYMMETRIC:\n+\t\tmemset(op->asym, 0, sizeof(struct rte_crypto_asym_op));\n+\tbreak;\n \tcase RTE_CRYPTO_OP_TYPE_UNDEFINED:\n \tdefault:\n \t\tbreak;\n@@ -300,9 +310,14 @@ __rte_crypto_op_get_priv_data(struct rte_crypto_op *op, uint32_t size)\n \tif (likely(op->mempool != NULL)) {\n \t\tpriv_size = __rte_crypto_op_get_priv_data_size(op->mempool);\n \n-\t\tif (likely(priv_size >= size))\n-\t\t\treturn (void *)((uint8_t *)(op + 1) +\n+\t\tif (likely(priv_size >= size)) {\n+\t\t\tif (op->type == RTE_CRYPTO_OP_TYPE_SYMMETRIC)\n+\t\t\t\treturn (void *)((uint8_t *)(op + 1) +\n \t\t\t\t\tsizeof(struct rte_crypto_sym_op));\n+\t\t\tif (op->type == RTE_CRYPTO_OP_TYPE_ASYMMETRIC)\n+\t\t\t\treturn (void *)((uint8_t *)(op + 1) +\n+\t\t\t\t\tsizeof(struct rte_crypto_asym_op));\n+\t\t}\n \t}\n \n \treturn NULL;\n@@ -405,6 +420,24 @@ rte_crypto_op_attach_sym_session(struct rte_crypto_op *op,\n \treturn __rte_crypto_sym_op_attach_sym_session(op->sym, sess);\n }\n \n+/**\n+ * Attach a asymmetric session to a crypto operation\n+ *\n+ * @param\top\tcrypto operation, must be of type asymmetric\n+ * @param\tsess\tcryptodev session\n+ */\n+static inline int\n+rte_crypto_op_attach_asym_session(struct rte_crypto_op *op,\n+\t\tstruct rte_cryptodev_asym_session *sess)\n+{\n+\tif (unlikely(op->type != RTE_CRYPTO_OP_TYPE_ASYMMETRIC))\n+\t\treturn -1;\n+\n+\top->sess_type = RTE_CRYPTO_OP_WITH_SESSION;\n+\top->asym->session = sess;\n+\treturn 0;\n+}\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c\nindex 7e58212..47fc2e5 100644\n--- a/lib/librte_cryptodev/rte_cryptodev.c\n+++ b/lib/librte_cryptodev/rte_cryptodev.c\n@@ -166,6 +166,31 @@ rte_crypto_aead_operation_strings[] = {\n \t[RTE_CRYPTO_AEAD_OP_DECRYPT]\t= \"decrypt\"\n };\n \n+/**\n+ * Asymmetric crypto transform operation strings identifiers.\n+ */\n+const char *rte_crypto_asym_xform_strings[] = {\n+\t[RTE_CRYPTO_ASYM_XFORM_NONE]\t= \"none\",\n+\t[RTE_CRYPTO_ASYM_XFORM_RSA]\t= \"rsa\",\n+\t[RTE_CRYPTO_ASYM_XFORM_MODEX]\t= \"modexp\",\n+\t[RTE_CRYPTO_ASYM_XFORM_MODINV]\t= \"modinv\",\n+\t[RTE_CRYPTO_ASYM_XFORM_DH]\t= \"dh\",\n+\t[RTE_CRYPTO_ASYM_XFORM_DSA]\t= \"dsa\",\n+};\n+\n+/**\n+ * Asymmetric crypto operation strings identifiers.\n+ */\n+const char *rte_crypto_asym_op_strings[] = {\n+\t[RTE_CRYPTO_ASYM_OP_ENCRYPT]\t= \"encrypt\",\n+\t[RTE_CRYPTO_ASYM_OP_DECRYPT]\t= \"decrypt\",\n+\t[RTE_CRYPTO_ASYM_OP_SIGN]\t= \"sign\",\n+\t[RTE_CRYPTO_ASYM_OP_VERIFY]\t= \"verify\",\n+\t[RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE]\t= \"priv_key_generate\",\n+\t[RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE] = \"pub_key_generate\",\n+\t[RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE] = \"sharedsecret_compute\",\n+};\n+\n int\n rte_cryptodev_get_cipher_algo_enum(enum rte_crypto_cipher_algorithm *algo_enum,\n \t\tconst char *algo_string)\n@@ -1111,6 +1136,41 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,\n \treturn 0;\n }\n \n+int __rte_experimental\n+rte_cryptodev_asym_session_init(uint8_t dev_id,\n+\t\tstruct rte_cryptodev_asym_session *sess,\n+\t\tstruct rte_crypto_asym_xform *xforms,\n+\t\tstruct rte_mempool *mp)\n+{\n+\tstruct rte_cryptodev *dev;\n+\tuint8_t index;\n+\tint ret;\n+\n+\tdev = rte_cryptodev_pmd_get_dev(dev_id);\n+\n+\tif (sess == NULL || xforms == NULL || dev == NULL)\n+\t\treturn -EINVAL;\n+\n+\tindex = dev->driver_id;\n+\n+\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->asym_session_configure,\n+\t\t\t\t-ENOTSUP);\n+\n+\tif (sess->sess_private_data[index] == NULL) {\n+\t\tret = dev->dev_ops->asym_session_configure(dev,\n+\t\t\t\t\t\t\txforms,\n+\t\t\t\t\t\t\tsess, mp);\n+\t\tif (ret < 0) {\n+\t\t\tCDEV_LOG_ERR(\n+\t\t\t\t\"dev_id %d failed to configure session details\",\n+\t\t\t\tdev_id);\n+\t\t\treturn ret;\n+\t\t}\n+\t}\n+\n+\treturn 0;\n+}\n+\n struct rte_cryptodev_sym_session *\n rte_cryptodev_sym_session_create(struct rte_mempool *mp)\n {\n@@ -1130,6 +1190,25 @@ rte_cryptodev_sym_session_create(struct rte_mempool *mp)\n \treturn sess;\n }\n \n+struct rte_cryptodev_asym_session * __rte_experimental\n+rte_cryptodev_asym_session_create(struct rte_mempool *mp)\n+{\n+\tstruct rte_cryptodev_asym_session *sess;\n+\n+\t/* Allocate a session structure from the session pool */\n+\tif (rte_mempool_get(mp, (void **)&sess)) {\n+\t\tCDEV_LOG_ERR(\"couldn't get object from session mempool\");\n+\t\treturn NULL;\n+\t}\n+\n+\t/* Clear device session pointer.\n+\t * Include the flag indicating presence of private data\n+\t */\n+\tmemset(sess, 0, (sizeof(void *) * nb_drivers) + sizeof(uint8_t));\n+\n+\treturn sess;\n+}\n+\n int\n rte_cryptodev_queue_pair_attach_sym_session(uint8_t dev_id, uint16_t qp_id,\n \t\tstruct rte_cryptodev_sym_session *sess)\n@@ -1200,6 +1279,24 @@ rte_cryptodev_sym_session_clear(uint8_t dev_id,\n \treturn 0;\n }\n \n+int __rte_experimental\n+rte_cryptodev_asym_session_clear(uint8_t dev_id,\n+\t\tstruct rte_cryptodev_asym_session *sess)\n+{\n+\tstruct rte_cryptodev *dev;\n+\n+\tdev = rte_cryptodev_pmd_get_dev(dev_id);\n+\n+\tif (dev == NULL || sess == NULL)\n+\t\treturn -EINVAL;\n+\n+\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->asym_session_clear, -ENOTSUP);\n+\n+\tdev->dev_ops->asym_session_clear(dev, sess);\n+\n+\treturn 0;\n+}\n+\n int\n rte_cryptodev_sym_session_free(struct rte_cryptodev_sym_session *sess)\n {\n@@ -1224,6 +1321,31 @@ rte_cryptodev_sym_session_free(struct rte_cryptodev_sym_session *sess)\n \treturn 0;\n }\n \n+int __rte_experimental\n+rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess)\n+{\n+\tuint8_t i;\n+\tvoid *sess_priv;\n+\tstruct rte_mempool *sess_mp;\n+\n+\tif (sess == NULL)\n+\t\treturn -EINVAL;\n+\n+\t/* Check that all device private data has been freed */\n+\tfor (i = 0; i < nb_drivers; i++) {\n+\t\tsess_priv = get_asym_session_private_data(sess, i);\n+\t\tif (sess_priv != NULL)\n+\t\t\treturn -EBUSY;\n+\t}\n+\n+\t/* Return session to mempool */\n+\tsess_mp = rte_mempool_from_obj(sess);\n+\trte_mempool_put(sess_mp, sess);\n+\n+\treturn 0;\n+}\n+\n+\n unsigned int\n rte_cryptodev_get_header_session_size(void)\n {\n@@ -1241,6 +1363,17 @@ rte_cryptodev_sym_get_header_session_size(void)\n \treturn ((sizeof(void *) * nb_drivers) + sizeof(uint8_t));\n }\n \n+unsigned int __rte_experimental\n+rte_cryptodev_asym_get_header_session_size(void)\n+{\n+\t/*\n+\t * Header contains pointers to the private data\n+\t * of all registered drivers, and a flag which\n+\t * indicates presence of private data\n+\t */\n+\treturn ((sizeof(void *) * nb_drivers) + sizeof(uint8_t));\n+}\n+\n unsigned int\n rte_cryptodev_get_private_session_size(uint8_t dev_id)\n {\n@@ -1276,6 +1409,29 @@ rte_cryptodev_sym_get_private_session_size(uint8_t dev_id)\n \n }\n \n+unsigned int __rte_experimental\n+rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)\n+{\n+\tstruct rte_cryptodev *dev;\n+\tunsigned int header_size = sizeof(void *) * nb_drivers;\n+\tunsigned int priv_sess_size;\n+\n+\tif (!rte_cryptodev_pmd_is_valid_dev(dev_id))\n+\t\treturn 0;\n+\n+\tdev = rte_cryptodev_pmd_get_dev(dev_id);\n+\n+\tif (*dev->dev_ops->asym_session_get_size == NULL)\n+\t\treturn 0;\n+\n+\tpriv_sess_size = (*dev->dev_ops->asym_session_get_size)(dev);\n+\tif (priv_sess_size < header_size)\n+\t\treturn header_size;\n+\n+\treturn priv_sess_size;\n+\n+}\n+\n int __rte_experimental\n rte_cryptodev_sym_session_set_private_data(\n \t\t\t\t\tstruct rte_cryptodev_sym_session *sess,\n@@ -1308,6 +1464,39 @@ rte_cryptodev_sym_session_get_private_data(\n \treturn (uint8_t *)sess + off_set;\n }\n \n+\n+int __rte_experimental\n+rte_cryptodev_asym_session_set_private_data(\n+\t\t\t\t\tstruct rte_cryptodev_asym_session *sess,\n+\t\t\t\t\tvoid *data,\n+\t\t\t\t\tuint16_t size)\n+{\n+\tuint16_t off_set = sizeof(void *) * nb_drivers;\n+\tuint8_t *private_data_present = (uint8_t *)sess + off_set;\n+\n+\tif (sess == NULL)\n+\t\treturn -EINVAL;\n+\n+\t*private_data_present = 1;\n+\toff_set += sizeof(uint8_t);\n+\trte_memcpy((uint8_t *)sess + off_set, data, size);\n+\treturn 0;\n+}\n+\n+void * __rte_experimental\n+rte_cryptodev_asym_session_get_app_private_data(\n+\t\t\t\tstruct rte_cryptodev_asym_session *sess)\n+{\n+\tuint16_t off_set = sizeof(void *) * nb_drivers;\n+\tuint8_t *private_data_present = (uint8_t *)sess + off_set;\n+\n+\tif (sess == NULL || !*private_data_present)\n+\t\treturn NULL;\n+\n+\toff_set += sizeof(uint8_t);\n+\treturn (uint8_t *)sess + off_set;\n+}\n+\n /** Initialise rte_crypto_op mempool element */\n static void\n rte_crypto_op_init(struct rte_mempool *mempool,\n@@ -1335,8 +1524,16 @@ rte_crypto_op_pool_create(const char *name, enum rte_crypto_op_type type,\n \tstruct rte_crypto_op_pool_private *priv;\n \n \tunsigned elt_size = sizeof(struct rte_crypto_op) +\n-\t\t\tsizeof(struct rte_crypto_sym_op) +\n-\t\t\tpriv_size;\n+\t\t\t    priv_size;\n+\n+\tif (type == RTE_CRYPTO_OP_TYPE_SYMMETRIC) {\n+\t\telt_size += sizeof(struct rte_crypto_sym_op);\n+\t} else if (type == RTE_CRYPTO_OP_TYPE_ASYMMETRIC) {\n+\t\telt_size += sizeof(struct rte_crypto_asym_op);\n+\t} else {\n+\t\tCDEV_LOG_ERR(\"Invalid op_type\\n\");\n+\t\treturn NULL;\n+\t}\n \n \t/* lookup mempool in case already allocated */\n \tstruct rte_mempool *mp = rte_mempool_lookup(name);\ndiff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h\nindex ccc0f73..89dcd40 100644\n--- a/lib/librte_cryptodev/rte_cryptodev.h\n+++ b/lib/librte_cryptodev/rte_cryptodev.h\n@@ -867,9 +867,14 @@ rte_cryptodev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,\n  */\n struct rte_cryptodev_sym_session {\n \t__extension__ void *sess_private_data[0];\n-\t/**< Private session material */\n+\t/**< Private symmetric session material */\n };\n \n+/** Cryptodev asymmetric crypto session */\n+struct rte_cryptodev_asym_session {\n+\t__extension__ void *sess_private_data[0];\n+\t/**< Private asymmetric session material */\n+};\n \n /**\n  * Create symmetric crypto session header (generic with no private data)\n@@ -884,6 +889,18 @@ struct rte_cryptodev_sym_session *\n rte_cryptodev_sym_session_create(struct rte_mempool *mempool);\n \n /**\n+ * Create asymmetric crypto session header (generic with no private data)\n+ *\n+ * @param   mempool    mempool to allocate asymmetric session\n+ *                     objects from\n+ * @return\n+ *  - On success return pointer to asym-session\n+ *  - On failure returns NULL\n+ */\n+struct rte_cryptodev_asym_session * __rte_experimental\n+rte_cryptodev_asym_session_create(struct rte_mempool *mempool);\n+\n+/**\n  * Frees symmetric crypto session header, after checking that all\n  * the device private data has been freed, returning it\n  * to its original mempool.\n@@ -899,6 +916,21 @@ int\n rte_cryptodev_sym_session_free(struct rte_cryptodev_sym_session *sess);\n \n /**\n+ * Frees asymmetric crypto session header, after checking that all\n+ * the device private data has been freed, returning it\n+ * to its original mempool.\n+ *\n+ * @param   sess     Session header to be freed.\n+ *\n+ * @return\n+ *  - 0 if successful.\n+ *  - -EINVAL if session is NULL.\n+ *  - -EBUSY if not all device private data has been freed.\n+ */\n+int __rte_experimental\n+rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess);\n+\n+/**\n  * Fill out private data for the device id, based on its device type.\n  *\n  * @param   dev_id   ID of device that we want the session to be used on\n@@ -920,6 +952,27 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,\n \t\t\tstruct rte_mempool *mempool);\n \n /**\n+ * Initialize asymmetric session on a device with specific asymmetric xform\n+ *\n+ * @param   dev_id   ID of device that we want the session to be used on\n+ * @param   sess     Session to be set up on a device\n+ * @param   xforms   Asymmetric crypto transform operations to apply on flow\n+ *                   processed with this session\n+ * @param   mempool  Mempool to be used for internal allocation.\n+ *\n+ * @return\n+ *  - On success, zero.\n+ *  - -EINVAL if input parameters are invalid.\n+ *  - -ENOTSUP if crypto device does not support the crypto transform.\n+ *  - -ENOMEM if the private session could not be allocated.\n+ */\n+int __rte_experimental\n+rte_cryptodev_asym_session_init(uint8_t dev_id,\n+\t\t\tstruct rte_cryptodev_asym_session *sess,\n+\t\t\tstruct rte_crypto_asym_xform *xforms,\n+\t\t\tstruct rte_mempool *mempool);\n+\n+/**\n  * Frees private data for the device id, based on its device type,\n  * returning it to its mempool. It is the application's responsibility\n  * to ensure that private session data is not cleared while there are\n@@ -937,6 +990,20 @@ rte_cryptodev_sym_session_clear(uint8_t dev_id,\n \t\t\tstruct rte_cryptodev_sym_session *sess);\n \n /**\n+ * Frees resources held by asymmetric session during rte_cryptodev_session_init\n+ *\n+ * @param   dev_id   ID of device that uses the asymmetric session.\n+ * @param   sess     Asymmetric session setup on device using\n+ *\t\t\t\t\t rte_cryptodev_session_init\n+ * @return\n+ *  - 0 if successful.\n+ *  - -EINVAL if device is invalid or session is NULL.\n+ */\n+int __rte_experimental\n+rte_cryptodev_asym_session_clear(uint8_t dev_id,\n+\t\t\tstruct rte_cryptodev_asym_session *sess);\n+\n+/**\n  * @deprecated\n  * Get the size of the header session, for all registered drivers.\n  *\n@@ -971,6 +1038,15 @@ unsigned int\n rte_cryptodev_sym_get_header_session_size(void);\n \n /**\n+ * Get the size of the asymmetric session header, for all registered drivers.\n+ *\n+ * @return\n+ *   Size of the asymmetric header session.\n+ */\n+unsigned int __rte_experimental\n+rte_cryptodev_asym_get_header_session_size(void);\n+\n+/**\n  * Get the size of the private symmetric session data\n  * for a device.\n  *\n@@ -985,6 +1061,19 @@ unsigned int\n rte_cryptodev_sym_get_private_session_size(uint8_t dev_id);\n \n /**\n+ * Get the size of the private data for asymmetric session\n+ * on device\n+ *\n+ * @param\tdev_id\t\tThe device identifier.\n+ *\n+ * @return\n+ *   - Size of the asymmetric private data, if successful\n+ *   - 0 if device is invalid or does not have private session\n+ */\n+unsigned int __rte_experimental\n+rte_cryptodev_asym_get_private_session_size(uint8_t dev_id);\n+\n+/**\n  * @deprecated\n  * Attach queue pair with sym session.\n  *\n@@ -1072,6 +1161,39 @@ void * __rte_experimental\n rte_cryptodev_sym_session_get_private_data(\n \t\t\t\t\tstruct rte_cryptodev_sym_session *sess);\n \n+/**\n+ * Set private data for a session.\n+ *\n+ * @param\tsess\t\tSession pointer allocated by\n+ *\t\t\t\t*rte_cryptodev_asym_session_create*.\n+ * @param\tdata\t\tPointer to the private data.\n+ * @param\tsize\t\tSize of the private data.\n+ *\n+ * @return\n+ *  - On success, zero.\n+ *  - On failure, a negative value.\n+ */\n+int __rte_experimental\n+rte_cryptodev_asym_session_set_private_data(\n+\t\t\t\t\tstruct rte_cryptodev_asym_session *sess,\n+\t\t\t\t\tvoid *data,\n+\t\t\t\t\tuint16_t size);\n+\n+/**\n+ * Get private data of a session.\n+ *\n+ * @param\tsess\t\tSession pointer allocated by\n+ *\t\t\t\t*rte_cryptodev_asym_session_create*.\n+ *\n+ * @return\n+ *  - On success return pointer to private data.\n+ *  - On failure returns NULL.\n+ */\n+void * __rte_experimental\n+rte_cryptodev_asym_session_get_app_private_data(\n+\t\t\t\tstruct rte_cryptodev_asym_session *sess);\n+\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/librte_cryptodev/rte_cryptodev_pmd.h\nindex db8b976..b94e844 100644\n--- a/lib/librte_cryptodev/rte_cryptodev_pmd.h\n+++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h\n@@ -275,6 +275,17 @@ typedef int (*cryptodev_sym_create_session_pool_t)(\n  */\n typedef unsigned (*cryptodev_sym_get_session_private_size_t)(\n \t\tstruct rte_cryptodev *dev);\n+/**\n+ * Get the size of a asymmetric cryptodev session\n+ *\n+ * @param\tdev\t\tCrypto device pointer\n+ *\n+ * @return\n+ *  - On success returns the size of the session structure for device\n+ *  - On failure returns 0\n+ */\n+typedef unsigned int (*cryptodev_asym_get_session_private_size_t)(\n+\t\tstruct rte_cryptodev *dev);\n \n /**\n  * Configure a Crypto session on a device.\n@@ -294,7 +305,24 @@ typedef int (*cryptodev_sym_configure_session_t)(struct rte_cryptodev *dev,\n \t\tstruct rte_crypto_sym_xform *xform,\n \t\tstruct rte_cryptodev_sym_session *session,\n \t\tstruct rte_mempool *mp);\n-\n+/**\n+ * Configure a Crypto asymmetric session on a device.\n+ *\n+ * @param\tdev\t\tCrypto device pointer\n+ * @param\txform\t\tSingle or chain of crypto xforms\n+ * @param\tpriv_sess\tPointer to cryptodev's private session structure\n+ * @param\tmp\t\tMempool where the private session is allocated\n+ *\n+ * @return\n+ *  - Returns 0 if private session structure have been created successfully.\n+ *  - Returns -EINVAL if input parameters are invalid.\n+ *  - Returns -ENOTSUP if crypto device does not support the crypto transform.\n+ *  - Returns -ENOMEM if the private session could not be allocated.\n+ */\n+typedef int (*cryptodev_asym_configure_session_t)(struct rte_cryptodev *dev,\n+\t\tstruct rte_crypto_asym_xform *xform,\n+\t\tstruct rte_cryptodev_asym_session *session,\n+\t\tstruct rte_mempool *mp);\n /**\n  * Free driver private session data.\n  *\n@@ -305,6 +333,15 @@ typedef void (*cryptodev_sym_free_session_t)(struct rte_cryptodev *dev,\n \t\tstruct rte_cryptodev_sym_session *sess);\n \n /**\n+ * Free asymmetric session private data.\n+ *\n+ * @param\tdev\t\tCrypto device pointer\n+ * @param\tsess\t\tCryptodev session structure\n+ */\n+typedef void (*cryptodev_asym_free_session_t)(struct rte_cryptodev *dev,\n+\t\tstruct rte_cryptodev_asym_session *sess);\n+\n+/**\n  * Optional API for drivers to attach sessions with queue pair.\n  * @param\tdev\t\tCrypto device pointer\n  * @param\tqp_id\t\tqueue pair id for attaching session\n@@ -357,10 +394,16 @@ struct rte_cryptodev_ops {\n \n \tcryptodev_sym_get_session_private_size_t session_get_size;\n \t/**< Return private session. */\n+\tcryptodev_asym_get_session_private_size_t asym_session_get_size;\n+\t/**< Return asym session private size. */\n \tcryptodev_sym_configure_session_t session_configure;\n \t/**< Configure a Crypto session. */\n+\tcryptodev_asym_configure_session_t asym_session_configure;\n+\t/**< Configure asymmetric Crypto session. */\n \tcryptodev_sym_free_session_t session_clear;\n \t/**< Clear a Crypto sessions private data. */\n+\tcryptodev_asym_free_session_t asym_session_clear;\n+\t/**< Clear a Crypto sessions private data. */\n \tcryptodev_sym_queue_pair_attach_session_t qp_attach_session;\n \t/**< Attach session to queue pair. */\n \tcryptodev_sym_queue_pair_detach_session_t qp_detach_session;\n@@ -508,6 +551,19 @@ set_session_private_data(struct rte_cryptodev_sym_session *sess,\n \tsess->sess_private_data[driver_id] = private_data;\n }\n \n+static inline void *\n+get_asym_session_private_data(const struct rte_cryptodev_asym_session *sess,\n+\t\tuint8_t driver_id) {\n+\treturn sess->sess_private_data[driver_id];\n+}\n+\n+static inline void\n+set_asym_session_private_data(struct rte_cryptodev_asym_session *sess,\n+\t\tuint8_t driver_id, void *private_data)\n+{\n+\tsess->sess_private_data[driver_id] = private_data;\n+}\n+\n #ifdef __cplusplus\n }\n #endif\ndiff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map\nindex be8f4c1..9cdc0ee 100644\n--- a/lib/librte_cryptodev/rte_cryptodev_version.map\n+++ b/lib/librte_cryptodev/rte_cryptodev_version.map\n@@ -95,8 +95,16 @@ DPDK_18.05 {\n } DPDK_17.11;\n \n EXPERIMENTAL {\n-        global:\n+\tglobal:\n \n+\trte_cryptodev_asym_get_header_session_size;\n+\trte_cryptodev_asym_get_private_session_size;\n+\trte_cryptodev_asym_session_clear;\n+\trte_cryptodev_asym_session_create;\n+\trte_cryptodev_asym_session_free;\n+\trte_cryptodev_asym_session_get_app_private_data;\n+\trte_cryptodev_asym_session_init;\n+\trte_cryptodev_asym_session_set_private_data;\n \trte_cryptodev_sym_session_get_private_data;\n \trte_cryptodev_sym_session_set_private_data;\n };\n",
    "prefixes": [
        "v4",
        "2/4"
    ]
}