19ef6cb1aSKonstantin Ananyev.. SPDX-License-Identifier: BSD-3-Clause 29ef6cb1aSKonstantin Ananyev Copyright(c) 2018 Intel Corporation. 39ef6cb1aSKonstantin Ananyev 49ef6cb1aSKonstantin AnanyevIPsec Packet Processing Library 59ef6cb1aSKonstantin Ananyev=============================== 69ef6cb1aSKonstantin Ananyev 79ef6cb1aSKonstantin AnanyevDPDK provides a library for IPsec data-path processing. 89ef6cb1aSKonstantin AnanyevThe library utilizes the existing DPDK crypto-dev and 99ef6cb1aSKonstantin Ananyevsecurity API to provide the application with a transparent and 109ef6cb1aSKonstantin Ananyevhigh performant IPsec packet processing API. 119ef6cb1aSKonstantin AnanyevThe library is concentrated on data-path protocols processing 129ef6cb1aSKonstantin Ananyev(ESP and AH), IKE protocol(s) implementation is out of scope 139ef6cb1aSKonstantin Ananyevfor this library. 149ef6cb1aSKonstantin Ananyev 159ef6cb1aSKonstantin AnanyevSA level API 169ef6cb1aSKonstantin Ananyev------------ 179ef6cb1aSKonstantin Ananyev 189ef6cb1aSKonstantin AnanyevThis API operates on the IPsec Security Association (SA) level. 199ef6cb1aSKonstantin AnanyevIt provides functionality that allows user for given SA to process 209ef6cb1aSKonstantin Ananyevinbound and outbound IPsec packets. 219ef6cb1aSKonstantin Ananyev 229ef6cb1aSKonstantin AnanyevTo be more specific: 239ef6cb1aSKonstantin Ananyev 249ef6cb1aSKonstantin Ananyev* for inbound ESP/AH packets perform decryption, authentication, integrity checking, remove ESP/AH related headers 259ef6cb1aSKonstantin Ananyev* for outbound packets perform payload encryption, attach ICV, update/add IP headers, add ESP/AH headers/trailers, 269ef6cb1aSKonstantin Ananyev* setup related mbuf fields (ol_flags, tx_offloads, etc.). 279ef6cb1aSKonstantin Ananyev* initialize/un-initialize given SA based on user provided parameters. 289ef6cb1aSKonstantin Ananyev 299ef6cb1aSKonstantin AnanyevThe SA level API is based on top of crypto-dev/security API and relies on 309ef6cb1aSKonstantin Ananyevthem to perform actual cipher and integrity checking. 319ef6cb1aSKonstantin Ananyev 329ef6cb1aSKonstantin AnanyevDue to the nature of the crypto-dev API (enqueue/dequeue model) the library 339ef6cb1aSKonstantin Ananyevintroduces an asynchronous API for IPsec packets destined to be processed by 349ef6cb1aSKonstantin Ananyevthe crypto-device. 359ef6cb1aSKonstantin Ananyev 369ef6cb1aSKonstantin AnanyevThe expected API call sequence for data-path processing would be: 379ef6cb1aSKonstantin Ananyev 389ef6cb1aSKonstantin Ananyev.. code-block:: c 399ef6cb1aSKonstantin Ananyev 409ef6cb1aSKonstantin Ananyev /* enqueue for processing by crypto-device */ 419ef6cb1aSKonstantin Ananyev rte_ipsec_pkt_crypto_prepare(...); 429ef6cb1aSKonstantin Ananyev rte_cryptodev_enqueue_burst(...); 439ef6cb1aSKonstantin Ananyev /* dequeue from crypto-device and do final processing (if any) */ 449ef6cb1aSKonstantin Ananyev rte_cryptodev_dequeue_burst(...); 459ef6cb1aSKonstantin Ananyev rte_ipsec_pkt_crypto_group(...); /* optional */ 469ef6cb1aSKonstantin Ananyev rte_ipsec_pkt_process(...); 479ef6cb1aSKonstantin Ananyev 489ef6cb1aSKonstantin AnanyevFor packets destined for inline processing no extra overhead 499ef6cb1aSKonstantin Ananyevis required and the synchronous API call: rte_ipsec_pkt_process() 509ef6cb1aSKonstantin Ananyevis sufficient for that case. 519ef6cb1aSKonstantin Ananyev 529ef6cb1aSKonstantin Ananyev.. note:: 539ef6cb1aSKonstantin Ananyev 549ef6cb1aSKonstantin Ananyev For more details about the IPsec API, please refer to the *DPDK API Reference*. 559ef6cb1aSKonstantin Ananyev 569ef6cb1aSKonstantin AnanyevThe current implementation supports all four currently defined 579ef6cb1aSKonstantin Ananyevrte_security types: 589ef6cb1aSKonstantin Ananyev 599ef6cb1aSKonstantin AnanyevRTE_SECURITY_ACTION_TYPE_NONE 609ef6cb1aSKonstantin Ananyev~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 619ef6cb1aSKonstantin Ananyev 629ef6cb1aSKonstantin AnanyevIn that mode the library functions perform 639ef6cb1aSKonstantin Ananyev 649ef6cb1aSKonstantin Ananyev* for inbound packets: 659ef6cb1aSKonstantin Ananyev 669ef6cb1aSKonstantin Ananyev - check SQN 679ef6cb1aSKonstantin Ananyev - prepare *rte_crypto_op* structure for each input packet 68d629b7b5SJohn McNamara - verify that integrity check and decryption performed by crypto device 699ef6cb1aSKonstantin Ananyev completed successfully 709ef6cb1aSKonstantin Ananyev - check padding data 719ef6cb1aSKonstantin Ananyev - remove outer IP header (tunnel mode) / update IP header (transport mode) 729ef6cb1aSKonstantin Ananyev - remove ESP header and trailer, padding, IV and ICV data 739ef6cb1aSKonstantin Ananyev - update SA replay window 749ef6cb1aSKonstantin Ananyev 759ef6cb1aSKonstantin Ananyev* for outbound packets: 769ef6cb1aSKonstantin Ananyev 779ef6cb1aSKonstantin Ananyev - generate SQN and IV 789ef6cb1aSKonstantin Ananyev - add outer IP header (tunnel mode) / update IP header (transport mode) 799ef6cb1aSKonstantin Ananyev - add ESP header and trailer, padding and IV data 809ef6cb1aSKonstantin Ananyev - prepare *rte_crypto_op* structure for each input packet 819ef6cb1aSKonstantin Ananyev - verify that crypto device operations (encryption, ICV generation) 829ef6cb1aSKonstantin Ananyev were completed successfully 839ef6cb1aSKonstantin Ananyev 849ef6cb1aSKonstantin AnanyevRTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO 859ef6cb1aSKonstantin Ananyev~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 869ef6cb1aSKonstantin Ananyev 879ef6cb1aSKonstantin AnanyevIn that mode the library functions perform 889ef6cb1aSKonstantin Ananyev 899ef6cb1aSKonstantin Ananyev* for inbound packets: 909ef6cb1aSKonstantin Ananyev 91d629b7b5SJohn McNamara - verify that integrity check and decryption performed by *rte_security* 929ef6cb1aSKonstantin Ananyev device completed successfully 939ef6cb1aSKonstantin Ananyev - check SQN 949ef6cb1aSKonstantin Ananyev - check padding data 959ef6cb1aSKonstantin Ananyev - remove outer IP header (tunnel mode) / update IP header (transport mode) 969ef6cb1aSKonstantin Ananyev - remove ESP header and trailer, padding, IV and ICV data 979ef6cb1aSKonstantin Ananyev - update SA replay window 989ef6cb1aSKonstantin Ananyev 999ef6cb1aSKonstantin Ananyev* for outbound packets: 1009ef6cb1aSKonstantin Ananyev 1019ef6cb1aSKonstantin Ananyev - generate SQN and IV 1029ef6cb1aSKonstantin Ananyev - add outer IP header (tunnel mode) / update IP header (transport mode) 1039ef6cb1aSKonstantin Ananyev - add ESP header and trailer, padding and IV data 104d629b7b5SJohn McNamara - update *ol_flags* inside *struct rte_mbuf* to indicate that 1059ef6cb1aSKonstantin Ananyev inline-crypto processing has to be performed by HW on this packet 1069ef6cb1aSKonstantin Ananyev - invoke *rte_security* device specific *set_pkt_metadata()* to associate 107d629b7b5SJohn McNamara security device specific data with the packet 1089ef6cb1aSKonstantin Ananyev 1099ef6cb1aSKonstantin AnanyevRTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL 1109ef6cb1aSKonstantin Ananyev~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1119ef6cb1aSKonstantin Ananyev 1129ef6cb1aSKonstantin AnanyevIn that mode the library functions perform 1139ef6cb1aSKonstantin Ananyev 1149ef6cb1aSKonstantin Ananyev* for inbound packets: 1159ef6cb1aSKonstantin Ananyev 116d629b7b5SJohn McNamara - verify that integrity check and decryption performed by *rte_security* 1179ef6cb1aSKonstantin Ananyev device completed successfully 1189ef6cb1aSKonstantin Ananyev 1199ef6cb1aSKonstantin Ananyev* for outbound packets: 1209ef6cb1aSKonstantin Ananyev 121d629b7b5SJohn McNamara - update *ol_flags* inside *struct rte_mbuf* to indicate that 1229ef6cb1aSKonstantin Ananyev inline-crypto processing has to be performed by HW on this packet 1239ef6cb1aSKonstantin Ananyev - invoke *rte_security* device specific *set_pkt_metadata()* to associate 124d629b7b5SJohn McNamara security device specific data with the packet 1259ef6cb1aSKonstantin Ananyev 1269ef6cb1aSKonstantin AnanyevRTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL 1279ef6cb1aSKonstantin Ananyev~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1289ef6cb1aSKonstantin Ananyev 1299ef6cb1aSKonstantin AnanyevIn that mode the library functions perform 1309ef6cb1aSKonstantin Ananyev 1319ef6cb1aSKonstantin Ananyev* for inbound packets: 1329ef6cb1aSKonstantin Ananyev 1339ef6cb1aSKonstantin Ananyev - prepare *rte_crypto_op* structure for each input packet 134d629b7b5SJohn McNamara - verify that integrity check and decryption performed by crypto device 1359ef6cb1aSKonstantin Ananyev completed successfully 1369ef6cb1aSKonstantin Ananyev 1379ef6cb1aSKonstantin Ananyev* for outbound packets: 1389ef6cb1aSKonstantin Ananyev 1399ef6cb1aSKonstantin Ananyev - prepare *rte_crypto_op* structure for each input packet 1409ef6cb1aSKonstantin Ananyev - verify that crypto device operations (encryption, ICV generation) 1419ef6cb1aSKonstantin Ananyev were completed successfully 1429ef6cb1aSKonstantin Ananyev 1439ef6cb1aSKonstantin AnanyevTo accommodate future custom implementations function pointers 1449ef6cb1aSKonstantin Ananyevmodel is used for both *crypto_prepare* and *process* implementations. 1459ef6cb1aSKonstantin Ananyev 146*401633d9SVladimir MedvedkinSA database API 147*401633d9SVladimir Medvedkin---------------- 148*401633d9SVladimir Medvedkin 149*401633d9SVladimir MedvedkinSA database(SAD) is a table with <key, value> pairs. 150*401633d9SVladimir Medvedkin 151*401633d9SVladimir MedvedkinValue is an opaque user provided pointer to the user defined SA data structure. 152*401633d9SVladimir Medvedkin 153*401633d9SVladimir MedvedkinAccording to RFC4301 each SA can be uniquely identified by a key 154*401633d9SVladimir Medvedkinwhich is either: 155*401633d9SVladimir Medvedkin 156*401633d9SVladimir Medvedkin - security parameter index(SPI) 157*401633d9SVladimir Medvedkin - or SPI and destination IP(DIP) 158*401633d9SVladimir Medvedkin - or SPI, DIP and source IP(SIP) 159*401633d9SVladimir Medvedkin 160*401633d9SVladimir MedvedkinIn case of multiple matches, longest matching key will be returned. 1619ef6cb1aSKonstantin Ananyev 1629ef6cb1aSKonstantin AnanyevSupported features 1639ef6cb1aSKonstantin Ananyev------------------ 1649ef6cb1aSKonstantin Ananyev 1659ef6cb1aSKonstantin Ananyev* ESP protocol tunnel mode both IPv4/IPv6. 1669ef6cb1aSKonstantin Ananyev 1679ef6cb1aSKonstantin Ananyev* ESP protocol transport mode both IPv4/IPv6. 1689ef6cb1aSKonstantin Ananyev 1699ef6cb1aSKonstantin Ananyev* ESN and replay window. 1709ef6cb1aSKonstantin Ananyev 1713ed37e09SFan Zhang* algorithms: 3DES-CBC, AES-CBC, AES-CTR, AES-GCM, HMAC-SHA1, NULL. 1729ef6cb1aSKonstantin Ananyev 1739ef6cb1aSKonstantin Ananyev 1749ef6cb1aSKonstantin AnanyevLimitations 1759ef6cb1aSKonstantin Ananyev----------- 1769ef6cb1aSKonstantin Ananyev 1779ef6cb1aSKonstantin AnanyevThe following features are not properly supported in the current version: 1789ef6cb1aSKonstantin Ananyev 1799ef6cb1aSKonstantin Ananyev* Hard/soft limit for SA lifetime (time interval/byte count). 180