From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0088.outbound.protection.outlook.com [104.47.32.88]) by dpdk.org (Postfix) with ESMTP id 1FD061B216 for ; Fri, 6 Oct 2017 20:14:48 +0200 (CEST) Received: from BN3PR03CA0099.namprd03.prod.outlook.com (10.174.66.17) by CO2PR03MB2359.namprd03.prod.outlook.com (10.166.93.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Fri, 6 Oct 2017 18:14:45 +0000 Received: from BL2FFO11FD014.protection.gbl (2a01:111:f400:7c09::145) by BN3PR03CA0099.outlook.office365.com (2603:10b6:400:4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7 via Frontend Transport; Fri, 6 Oct 2017 18:14:45 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; NXP1.onmicrosoft.com; dkim=none (message not signed) header.d=none;NXP1.onmicrosoft.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD014.mail.protection.outlook.com (10.173.160.222) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.77.10 via Frontend Transport; Fri, 6 Oct 2017 18:14:45 +0000 Received: from netperf2.ap.freescale.net ([10.232.133.164]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v96IERoa027297; Fri, 6 Oct 2017 11:14:39 -0700 From: Akhil Goyal To: CC: , , , , , , , , , , , , Date: Fri, 6 Oct 2017 23:41:41 +0530 Message-ID: <20171006181151.4758-3-akhil.goyal@nxp.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171006181151.4758-1-akhil.goyal@nxp.com> References: <20171003131413.23846-1-akhil.goyal@nxp.com> <20171006181151.4758-1-akhil.goyal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131517872855035642; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39380400002)(376002)(39860400002)(346002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(4326008)(8656003)(2351001)(33646002)(189998001)(97736004)(6666003)(106466001)(104016004)(105606002)(36756003)(54906003)(7416002)(69596002)(47776003)(68736007)(5003940100001)(5890100001)(50226002)(2950100002)(5660300001)(498600001)(53936002)(316002)(6916009)(16586007)(77096006)(2906002)(356003)(81156014)(48376002)(81166006)(85426001)(50466002)(8676002)(86362001)(575784001)(305945005)(76176999)(1076002)(50986999)(15650500001)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR03MB2359; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD014; 1:PZN9HQ54GHkXrFT1UKJdR0oblYrFSIVCg8mmf01Is2AEAXHNwae7aeiFKHyLc05xtxJlAYEnH7q+520Ed3IsieIAxRjCeRINvirn/68IwgO6/cDqbSGPxjTNMvrrkn5t MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 34c66c81-658c-4077-4d99-08d50ce61f98 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017052603199)(201703131430075)(201703131517081); SRVR:CO2PR03MB2359; X-Microsoft-Exchange-Diagnostics: 1; CO2PR03MB2359; 3:ZgceEdrJBZxbzvUN45QMn4ydrV6sVpW7uAa1VJ8b2UqF5vQ9k4fhobm31+vW01t9GaTWsGDnuSQpqrEvQE2zbfWHElC/R0qOxg5wl7XPame5k3YB9SGk7sLt3vyS5wrX7GAyDLGlFBZEbF4jRekymwgM3R9VzWhw/5m+mITQ5Y6cb4S8XyE3nMT83/ypKKd7nb11NSr+NS9FwlGgBMYAZyGHtXUpDjbhp3g/kXRN5XybsQaadPWuIGuIRXyv2yfJA8AraW8P6gT5YfEeOARrwZR7ReiB8cUGw0KthFjT3g+oZVpwrwMTnyWogCvnxdfQLrO/RVOsIgaWfd3R/keu90IR8b1pP2PthcZT2U+GwsM=; 25:BTadadGQ6Q6FXxejeLeXiLqjUYwYd9vBhUDMliY4PMq7QBTkRQelBq9SeNmUmAdxFbVRtIuLdTLJ7H18S/jTzJp4CXsPrqpYHQj9IchhTOvexnuFK6kAcC8zJ0VewcOVk2gAh4x+NjShG8P9KeSVQM1T5hvE8Nf3dFLb2ClleUFCrOdQPNHoFrwDJSy5Y8hMPQLv8z5CEgsWGtqcQo+VazhC/ANtQvTTx0heLgOrl7t8qT7qaULhRdi5wfcfGbmZJYULqY/zFh+TesAGt7DmLpbGapqBBvEEpO2OT9xo2PHdS17IzQbK6rWk44eDXB4DGMlosaT3CXJ8Ku/j3WEfnQ== X-MS-TrafficTypeDiagnostic: CO2PR03MB2359: X-Microsoft-Exchange-Diagnostics: 1; CO2PR03MB2359; 31:D7RBfIW0Wo5pFwE0kKC2hzbJUs5TPNyLoKg2ry0LKsEQV0zHQOlyNeJ5v7UrEobpNjYZMa0gybT9bkuDP69NUx+KD6NK3wvKsZJrt/V/c1CXzOWVJwzTsq3m4nZ/o13CyhDxfGvZQB8nlFa3zAi7rb24Hn0bQpD56mn/KNkIGoa1xDpyvALDXnbdGsVQlzwO/xxxfyQ2Ka8zqPJcfBl9tCOV+yGqtR6/u6mwT3FlLJk=; 4:FQj/n+jb7za3Q1buMO/3WqX7ht05qmb4wJrmkqq5CnKMHnofkrlsAH6FKFFBr7NLjqBmEsY9yfcCTieguYJHeXn/Ovs4wVkZomuXT/xXwXC89ZjfI0mxizu3lDfEarI+k7czVLsbOSyaQEXQufBOquFRr8gBCkkptAYvBkA91IdsH5A5jhre8yIMGsIc4RleFmt58NvK5hi3H1czgdqLGtkEPf24baSuzwb0z1V6pxHA9uOeieEi8Pa2pQUM2ADhqOMfwnaY8aZM3gp0VBuCqgoPujqTjbhXmj+Tm75ZrCFTLbdDKVYWi8WPrEVpRrgZyNaGWadOL/Cb3gRWUSqtmKpRSidlRbhPWAMVEHULrpBf+w1Rcm2lm27yYZ71by+x X-Exchange-Antispam-Report-Test: UriScan:(192374486261705)(185117386973197)(228905959029699); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3002001)(6055026)(6096035)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123559100)(20161123556025)(20161123565025)(20161123561025)(20161123563025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CO2PR03MB2359; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CO2PR03MB2359; X-Forefront-PRVS: 0452022BE1 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO2PR03MB2359; 23:vOB8cbeMAes3IcCmRuFOeetOez+yXMCCvwC+rI9Tt?= =?us-ascii?Q?s4qTuvdx4S/YggwaDDAjp35gUxQt0Kr2rgRcvu7+rqA4VzLjHqD2zlUdFnmt?= =?us-ascii?Q?es4VNe6DyjdksNpjzTrCOp1MkDtl2hNxX0ZjW+2nlTaoNQFLVH9fhdrfcAhq?= =?us-ascii?Q?1/X6+e9uxeX+fUf+/7+E6Z7IaFm9F8qwWwllhmyf7s2avROcqVY4y6dyXFdm?= =?us-ascii?Q?djycREa770oPMZEvaTyUa0XeHSaOk+cEoJ4vrTbZRr0TlscnxD1cCVk28iTm?= =?us-ascii?Q?EmJpvvDk5ahVPtKT2Eqe6JzjUN/D50+RyRe5BF5exiTK4j/AAgYMlOT80Ln5?= =?us-ascii?Q?xVbIpMGzR1A4d4N5Z4G5zs3//uEz7Y2WPlynOpjIGCh5XW04rbVXHcM3d8SW?= =?us-ascii?Q?X7eaZNqS3FDm5p1V9Gh9DqijCq1T8xRU2cn2d6K/3QQOJd/acUjFO7z4n07h?= =?us-ascii?Q?K56xC6E64uB/lPNX9xCptCViKOgby6alqrWbLOCodTbmznpl5rLE+3Q6/JYN?= =?us-ascii?Q?EHzAH3308zLWLiWCMlj8A6cM1EKy3gRo7t21F0kI0oegKe7RgdG9cu9342g3?= =?us-ascii?Q?AAcef/hOFqipXNL8UCV8Sk15PwKYrSTTcAw7oHoGB3c62AkmHGT5mekTqt2s?= =?us-ascii?Q?MUwNtYjzMJhbiUrXMrK/GNRM2rwwOtnGLqzI+WrmORRmaCwIp+y4gVUrRFxI?= =?us-ascii?Q?Kw3xCBBZRuGIbaoi1cZib1DRMvuRr4DNGhQPO634TarNA9+IgkcpyAdgi0yp?= =?us-ascii?Q?De24i5GmNkBgX34MWFhnDm1tu50D8IvA5VR+YFtXLU/DTzp0zODkcATbFi1X?= =?us-ascii?Q?KDQZifzrtIKRHpEjQor5vAVgPhJt+8MO6AGga4/hRI/QxHsdUPmgfK8MfttN?= =?us-ascii?Q?hiyBLTOY+1rrhtThr3A6Dlb0dEBfEJPW4PCkp7uGg3PrZkXc8xUlwuHd8apT?= =?us-ascii?Q?N534ZllHJyGyXtVp1jolnGrcxPQhCKy/vOuRNNw2YVTwmLBm/7miVURSzQa2?= =?us-ascii?Q?XpOP3YRBJjdYU9iFOL+hUWkq7FUu+5FO0WioBlb7/m0xWtfgPHj2+0c6MSaB?= =?us-ascii?Q?iZz95shqu51FM+9lMztMTnq6HILTQzpww6u2due2AuUFjTAYOZJVOtQoUABo?= =?us-ascii?Q?Ac3cG+58kTsWa28bkJnvbS4wdEAGCZwoQRT0cYxxClITP4H1eGoetnkUbb8w?= =?us-ascii?Q?30Dcx388ho80Qy39Yr83P4NRDxIJrJHptEkzf8DTFHqJNWsuZCG4zdZQc6CP?= =?us-ascii?Q?lk1CYyVUGtFv3tF+Wqfo3PsTnzUVfUbQ+YiP3UOfDyggtge3QEg4zG3YC4bZ?= =?us-ascii?B?Zz09?= X-Microsoft-Exchange-Diagnostics: 1; CO2PR03MB2359; 6:NLpobaN5ZCm/nN8x/ZGeV8BQzpyfahv+MJwMtQetu2fcjM0k8XpOnBSc6+639B3utudbRF5d8kXrpwvwKO+jID6Ut6WNu5iJTB2pZLmJIZhh8tpJxt3UXZInujCvxRHVAz2JXoDeLWrr9alKHC4+bhBpTrc3aw6i3ggVFUO2Y9mQFUJHVKmP7GnSgeQyUOc6UUbtQBtajcRoPXj6mtW7ShKBnYbiE8Ru0F7oj0HU9RpIo2DoIMf45TE2C91QSRxNSUFgAJDd07URCbzRUr3gM8r+7CDeoLMo0m8NZqBX+zL5IKNxUc1chJ0kcTO6X7fRTuW0tX9pql51hA3HL0QzzQ==; 5:OZQO1o4/WnJw3zFbdZDC4JDqVMN0gJR9MIrnSj5RwbQZ8ntGDqrmIZ26D4UdNbkAPLElUgFStSWV/EHjb7L148fK1f3z7sIuuxbb24uH9UFnBeCHWF+j3e340bIa5+gI2kqDeyQpAfc9/wf2iAxQsA==; 24:nNksexgUFvJ1sDSx2soJK5ICHsPGSJlW3kkwsUJB8w33sisutLtoq0t62e4YCjsWuXxogHdb9e50RLDuOgkGI+YhaTVqPOD0R/9c2zb5CYI=; 7:+jXNOYqjoyZbHrNFL82GB1QlBJghRMf0S2H9MD4JXb6kgupdpnqTWyCug1kC/mje50reGoTdQBARx6ezopD9c44b366djtLaKdJ6o2dy+fs5mVESu8XaMZjnvuwc1oe6Ps158m5l5JNShjw3m33n7/3PgFj4R3D5o1SRFu0oFy8SarD7gX9m2JO0nV2GyVskspY4meuU8ja3hTWyyQm/oY1k6kYmD7f7Tp9dARjH/aQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2017 18:14:45.2695 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR03MB2359 Subject: [dpdk-dev] [PATCH v3 02/12] doc: add details of rte security X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Oct 2017 18:14:48 -0000 Signed-off-by: Hemant Agrawal Signed-off-by: Akhil Goyal Acked-by: John McNamara --- doc/api/doxy-api-index.md | 3 +- doc/api/doxy-api.conf | 1 + doc/guides/prog_guide/index.rst | 1 + doc/guides/prog_guide/rte_security.rst | 553 +++++++++++++++++++++++++++++++++ 4 files changed, 557 insertions(+), 1 deletion(-) create mode 100644 doc/guides/prog_guide/rte_security.rst diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md index 19e0d4f..a3d39fc 100644 --- a/doc/api/doxy-api-index.md +++ b/doc/api/doxy-api-index.md @@ -55,7 +55,8 @@ The public API headers are grouped by topics: [KNI] (@ref rte_kni.h), [ixgbe] (@ref rte_pmd_ixgbe.h), [i40e] (@ref rte_pmd_i40e.h), - [crypto_scheduler] (@ref rte_cryptodev_scheduler.h) + [crypto_scheduler] (@ref rte_cryptodev_scheduler.h), + [security] (@ref rte_security.h) - **memory**: [memseg] (@ref rte_memory.h), diff --git a/doc/api/doxy-api.conf b/doc/api/doxy-api.conf index 823554f..ff6a9fc 100644 --- a/doc/api/doxy-api.conf +++ b/doc/api/doxy-api.conf @@ -66,6 +66,7 @@ INPUT = doc/api/doxy-api-index.md \ lib/librte_reorder \ lib/librte_ring \ lib/librte_sched \ + lib/librte_security \ lib/librte_table \ lib/librte_timer \ lib/librte_vhost diff --git a/doc/guides/prog_guide/index.rst b/doc/guides/prog_guide/index.rst index 40f04a1..480fa19 100644 --- a/doc/guides/prog_guide/index.rst +++ b/doc/guides/prog_guide/index.rst @@ -46,6 +46,7 @@ Programmer's Guide rte_flow traffic_management cryptodev_lib + rte_security link_bonding_poll_mode_drv_lib timer_lib hash_lib diff --git a/doc/guides/prog_guide/rte_security.rst b/doc/guides/prog_guide/rte_security.rst new file mode 100644 index 0000000..ef59bfc --- /dev/null +++ b/doc/guides/prog_guide/rte_security.rst @@ -0,0 +1,553 @@ +.. BSD LICENSE + Copyright 2017 NXP. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of NXP nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Security Library +================ + +The security library provides a framework for management and provisioning +of security protocol operations offloaded to hardware based devices. The +library defines generic APIs to create and free security sessions which can +support complete protocol offload as well as inline crypto operation with +NIC or crypto devices. The framework currently only supports the IPSec protocol +and its operations, other protocols will be added in future. + +Design Principles +----------------- + +The security library provides an additional offload capability to an existing +crypto device and/or ethernet device. + +.. code-block:: console + + +---------------+ + | rte_security | + +---------------+ + \ / + +-----------+ +--------------+ + | NIC PMD | | CRYPTO PMD | + +-----------+ +--------------+ + +The supported offload types are explained in the sections below. + +Inline Crypto +~~~~~~~~~~~~~ + +RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO: +The crypto processing for security protocol (e.g. IPSec) is processed +inline during receive and transmission on NIC port. The flow based +security action should be configured on the port. + +Ingress Data path - The packet is decrypted in RX path and relevant +crypto status is set in Rx descriptors. After the successful inline +crypto processing the packet is presented to host as a regular Rx packet +but all security protocol related headers are still attached to the +packet. e.g. In case of IPSec, the IPSec tunnel headers (if any), +ESP/AH headers will remain in the packet but the received packet +contains the decrypted data where the encrypted data was when the packet +arrived. The driver Rx path check the descriptors and and based on the +crypto status sets additional flags in the rte_mbuf.ol_flags field. + +.. note:: + + The underlying device may not support crypto processing all ingress packet + matching to a particular flow (e.g. fragmented packets), such packets will + be passed as encrypted packets. It is the responsibility of application to + process such encrypted packets using other crypto driver instance. + +Egress Data path - The software prepares the egress packet by adding +relevant security protocol headers in the packets. Only the data will not be +encrypted by the software. The driver will accordingly configure the +tx descriptors. The HW device will encrypt the data before sending the +the packet out. + +.. note:: + + The underlying device may support post encryption TSO. + +.. code-block:: console + + Egress Data Path + | + +--------|--------+ + | egress IPsec | + | | | + | +------V------+ | + | | SADB lookup | | + | +------|------+ | + | +------V------+ | + | | Tunnel | | <------ Add tunnel header to packet + | +------|------+ | + | +------V------+ | + | | ESP | | <------ Add ESP header without trailer to packet + | | | | <------ Mark packet to be offloaded, add trailer + | +------|------+ | meta-data to mbuf + +--------V--------+ + | + +--------V--------+ + | L2 Stack | + +--------|--------+ + | + +--------V--------+ + | | + | NIC PMD | <------ Set hw context for inline crypto offload + | | + +--------|--------+ + | + +--------|--------+ + | HW ACCELERATED | <------ Packet Encryption and + | NIC | Authentication happens inline + | | + +-----------------+ + + +Inline protocol offload +~~~~~~~~~~~~~~~~~~~~~~~ + +RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL: +The crypto and protocol processing for security protocol (e.g. IPSec) +is processed inline during receive and transmission. The flow based +security action should be configured on the port. + +Ingress Data path - The packet is decrypted in the RX path and relevant +crypto status is set in the Rx descriptors. After the successful inline +crypto processing the packet is presented to the host as a regular Rx packet +but all security protocol related headers are optionally removed from the +packet. e.g. in the case of IPSec, the IPSec tunnel headers (if any), +ESP/AH headers will be removed from the packet and the received packet +will contains the decrypted packet only. The driver Rx path checks the +descriptors and and based on the crypto status sets additional flags in +the ``rte_mbuf.ol_flags`` field. + +.. note:: + + The underlying device in this case is stateful. It is expected that + the device shall support crypto processing for all kind of packets matching + to a given flow, this includes fragmented packets (post reassembly). + E.g. in the case of IPSec the device may internally manage anti-replay etc. + It will provide a configuration option for anti-replay behavior i.e. to drop + the packets or pass them to driver with error flags set in the descriptor. + +Egress Data path - The software will send the plain packet without any +security protocol headers added to the packet. The driver will configure +the security index and requirement in the tx descriptors. +The hardware device will do security processing on the packet that includes +adding the relevant protocol headers and encrypting the data before sending +the the packet out. The software should make sure that the buffer +has the required head room and tail room for any protocol header addition. The +software may also do early fragmentation if the resultant packet is expected +to cross the MTU size. + + +.. note:: + + The underlying device will manage state information required for egress + processing. E.g. in the case of IPSec, the seq number will be added to the + packet, It shall provide indication when the sequence number is about to + overflow. The underlying device may support post encryption TSO. + +.. code-block:: console + + Egress Data Path + | + +--------|--------+ + | egress IPsec | + | | | + | +------V------+ | + | | SADB lookup | | + | +------|------+ | + | +------V------+ | + | | Desc | | <------ Mark packet to be offloaded + | +------|------+ | + +--------V--------+ + | + +--------V--------+ + | L2 Stack | + +--------|--------+ + | + +--------V--------+ + | | + | NIC PMD | <------ Set hw context for inline crypto offload + | | + +--------|--------+ + | + +--------|--------+ + | HW ACCELERATED | <------ Add tunnel, ESP header etc header to + | NIC | packet. Packet Encryption and + | | Authentication happens inline. + +-----------------+ + + +Lookaside protocol offload +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL: +This extends the librte_cryptodev to support the programming of IPsec +Security Association (SA) as part of a crypto session creation including +the definition. In addition to standard crypto processing, as defined by +the cryptodev, the security protocol processing is also offloaded to the +crypto device. + +Decryption: The packet is sent to the crypto device for security +protocol processing. The device will decrypt the packet and it will also +optionally remove the additional security headers from the packet. +E.g. in the case of IPSec, the IPSec tunnel headers (if any), ESP/AH headers +will be removed from the packet and the decrypted packet may contain +the decrypted packet only. + +.. note:: + + In case of IPSec the device may internally manage anti-replay etc. + It will provide a configuration option for anti-replay behavior i.e. to drop + the packets or pass them to driver with error flags set in descriptor. + +Encryption: The software will submit the packet to cryptodev as usual +for encryption, the hardware device in this case will also add the relevant +security protocol header along with encrypting the packet. The software +should make sure that the buffer has required head room and tail room +for any protocol header addition. + +.. note:: + + In the case of IPSec, the seq number will be added to the packet, + It shall provide an indication when the sequence number is about to + overflow. + +.. code-block:: console + + Egress Data Path + | + +--------|--------+ + | egress IPsec | + | | | + | +------V------+ | + | | SADB lookup | | <------ SA maps to cryptodev session + | +------|------+ | + | +------|------+ | + | | \--------------------\ + | | Crypto | | | <- Crypto processing through + | | /----------------\ | inline crypto PMD + | +------|------+ | | | + +--------V--------+ | | + | | | + +--------V--------+ | | create <-- SA is added to hw + | L2 Stack | | | inline using existing create + +--------|--------+ | | session sym session APIs + | | | | + +--------V--------+ +---|---|----V---+ + | | | \---/ | | <--- Add tunnel, ESP header etc + | NIC PMD | | INLINE | | header to packet.Packet + | | | CRYPTO PMD | | Encryption/Decryption and + +--------|--------+ +----------------+ Authentication happens + | inline. + +--------|--------+ + | NIC | + +--------|--------+ + V + +Device Features and Capabilities +--------------------------------- + +Device Capabilities For Security Operations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The device (crypto or ethernet) capabilities which support security operations, +are defined by the security action type, security protocol, protocol +capabilities and corresponding crypto capabilities for security. For the full +scope of the Security capability see the definition of the structure in the +*DPDK API Reference*. + +.. code-block:: c + + struct rte_security_capability; + +Each driver (crypto or ethernet) defines its own private array of capabilities +for the operations it supports. Below is an example of the capabilities for a +PMD which supports the IPSec protocol. + +.. code-block:: c + + static const struct rte_security_capability pmd_security_capabilities[] = { + { /* IPsec Lookaside Protocol offload ESP Transport Egress */ + .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL, + .protocol = RTE_SECURITY_PROTOCOL_IPSEC, + .ipsec = { + .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP, + .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL, + .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS, + .options = { 0 } + }, + .crypto_capabilities = pmd_capabilities + }, + { /* IPsec Lookaside Protocol offload ESP Tunnel Ingress */ + .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL, + .protocol = RTE_SECURITY_PROTOCOL_IPSEC, + .ipsec = { + .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP, + .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL, + .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS, + .options = { 0 } + }, + .crypto_capabilities = pmd_capabilities + }, + { + .action = RTE_SECURITY_ACTION_TYPE_NONE + } + }; + static const struct rte_cryptodev_capabilities pmd_capabilities[] = { + { /* SHA1 HMAC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + .sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, + .auth = { + .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, + .block_size = 64, + .key_size = { + .min = 64, + .max = 64, + .increment = 0 + }, + .digest_size = { + .min = 12, + .max = 12, + .increment = 0 + }, + .aad_size = { 0 }, + .iv_size = { 0 } + } + } + }, + { /* AES CBC */ + .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, + .sym = { + .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, + .cipher = { + .algo = RTE_CRYPTO_CIPHER_AES_CBC, + .block_size = 16, + .key_size = { + .min = 16, + .max = 32, + .increment = 8 + }, + .iv_size = { + .min = 16, + .max = 16, + .increment = 0 + } + } + } + } + } + + +Capabilities Discovery +~~~~~~~~~~~~~~~~~~~~~~ + +Discovering the features and capabilities of a driver (crypto/ethernet) +is achieved through the ``rte_security_capabilities_get()`` function. + +.. code-block:: c + + const struct rte_security_capability *rte_security_capabilities_get(uint16_t id); + +This allows the user to query a specific driver and get all the device +security capabilities. It returns an array of ``rte_security_capability`` structures +which contains all the capabilities for the device. + +Security Session Create/Free +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Security Sessions are created to store the immutable fields of a particular Security +Association for a particular protocol which is defined by a security session +configuration structure which is used in the operation processing of a packet flow. +Sessions are used to manage protocol specific information as well as crypto parameters. +Security sessions cache this immutable data in a optimal way for the underlying PMD +and this allows further acceleration of the offload of Crypto workloads. + +The Security framework provides APIs to create and free sessions for crypto/ethernet +devices, where sessions are mempool objects. It is the application's responsibility +to create and manage the session mempools. The mempool object size should be able to +accommodate the driver's private data of the session. + +Once the session mempools have been created, ``rte_security_session_create()`` +is used to allocate and initialize a session for the required crypto/ethernet device. +Sessions already created can be updated with ``rte_security_session_update()``. + +When a session is no longer used, the user must call ``rte_security_session_destroy()`` +to free the driver private session data and return the memory back to the mempool. + +For the look aside protocol offload to hardware crypto device, the ``rte_crypto_op`` +created by the application is attached to the security session by the API +``rte_security_attach_session()``. + +For Inline Crypto and Inline protocol offload, device specific defined metadata is +updated in the mbuf using ``rte_security_set_pkt_metadata()`` if +``DEV_TX_OFFLOAD_SEC_NEED_MDATA`` is set. + +Session configuration +~~~~~~~~~~~~~~~~~~~~~ + +Security Session configuration structure is defined as ``rte_security_session_conf`` + +.. code-block:: c + + struct rte_security_session_conf { + enum rte_security_session_action_type action_type; + /**< Type of action to be performed on the session */ + enum rte_security_session_protocol protocol; + /**< Security protocol to be configured */ + union { + struct rte_security_ipsec_xform ipsec; + struct rte_security_macsec_xform macsec; + }; + /**< Configuration parameters for security session */ + struct rte_crypto_sym_xform *crypto_xform; + /**< Security Session Crypto Transformations */ + }; + +The configuration structure reuses the ``rte_crypto_sym_xform`` struct for crypto related +configuration. The ``rte_security_session_action_type`` struct is used specify whether the +session is configured for Lookaside Protocol offload or Inline Crypto or Inline Protocol +Offload. + +.. code-block:: c + + enum rte_security_session_action_type { + RTE_SECURITY_ACTION_TYPE_NONE, + /**< No security actions */ + RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO, + /**< Crypto processing for security protocol is processed inline + * during transmission */ + RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL, + /**< All security protocol processing is performed inline during + * transmission */ + RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL + /**< All security protocol processing including crypto is performed + * on a lookaside accelerator */ + }; + +The ``rte_security_session_protocol`` is defined as + +.. code-block:: c + + enum rte_security_session_protocol { + RTE_SECURITY_PROTOCOL_IPSEC, + /**< IPsec Protocol */ + RTE_SECURITY_PROTOCOL_MACSEC, + /**< MACSec Protocol */ + }; + +Currently the library defines configuration parameters for IPSec only. For other +protocols like MACSec, structures and enums are defined as place holders which +will be updated in the future. + +IPsec related configuration parameters are defined in ``rte_security_ipsec_xform`` + +.. code-block:: c + + struct rte_security_ipsec_xform { + uint32_t spi; + /**< SA security parameter index */ + uint32_t salt; + /**< SA salt */ + struct rte_security_ipsec_sa_options options; + /**< various SA options */ + enum rte_security_ipsec_sa_direction direction; + /**< IPSec SA Direction - Egress/Ingress */ + enum rte_security_ipsec_sa_protocol proto; + /**< IPsec SA Protocol - AH/ESP */ + enum rte_security_ipsec_sa_mode mode; + /**< IPsec SA Mode - transport/tunnel */ + struct rte_security_ipsec_tunnel_param tunnel; + /**< Tunnel parameters, NULL for transport mode */ + }; + + +Security API +~~~~~~~~~~~~ + +The rte_security Library API is described in the *DPDK API Reference* document. + +Flow based Security Session +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In the case of NIC based offloads, the security session specified in the +'rte_flow_action_security' must be created on the same port as the +flow action that is being specified. + +The ingress/egress flow attribute should match that specified in the security +session if the security session supports the definition of the direction. + +Multiple flows can be configured to use the same security session. For +example if the security session specifies an egress IPsec SA, then multiple +flows can be specified to that SA. In the case of an ingress IPsec SA then +it is only valid to have a single flow to map to that security session. + +.. code-block:: console + + Configuration Path + | + +--------|--------+ + | Add/Remove | + | IPsec SA | <------ Build security flow action of + | | | ipsec transform + |--------|--------| + | + +--------V--------+ + | Flow API | + +--------|--------+ + | + +--------V--------+ + | | + | NIC PMD | <------ Add/Remove SA to/from hw context + | | + +--------|--------+ + | + +--------|--------+ + | HW ACCELERATED | + | NIC | + | | + +--------|--------+ + +* Add/Delete SA flow: + To add a new inline SA construct a rte_flow_item for Ethernet + IP + ESP + using the SA selectors and the ``rte_crypto_ipsec_xform`` as the ``rte_flow_action``. + Note that any rte_flow_items may be empty, which means it is not checked. + +.. code-block:: console + + In its most basic form, IPsec flow specification is as follows: + +-------+ +----------+ +--------+ +-----+ + | Eth | -> | IP4/6 | -> | ESP | -> | END | + +-------+ +----------+ +--------+ +-----+ + + However, the API can represent, IPsec crypto offload with any encapsulation: + +-------+ +--------+ +-----+ + | Eth | -> ... -> | ESP | -> | END | + +-------+ +--------+ +-----+ -- 2.9.3