1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 22bfe3f2eSlogwang * Copyright 2017 NXP. 3*d30ea906Sjfb8856606 * Copyright(c) 2017 Intel Corporation. 42bfe3f2eSlogwang */ 52bfe3f2eSlogwang 62bfe3f2eSlogwang #ifndef _RTE_SECURITY_DRIVER_H_ 72bfe3f2eSlogwang #define _RTE_SECURITY_DRIVER_H_ 82bfe3f2eSlogwang 92bfe3f2eSlogwang /** 102bfe3f2eSlogwang * @file rte_security_driver.h 112bfe3f2eSlogwang * 122bfe3f2eSlogwang * RTE Security Common Definitions 132bfe3f2eSlogwang * 142bfe3f2eSlogwang */ 152bfe3f2eSlogwang 162bfe3f2eSlogwang #ifdef __cplusplus 172bfe3f2eSlogwang extern "C" { 182bfe3f2eSlogwang #endif 192bfe3f2eSlogwang 202bfe3f2eSlogwang #include "rte_security.h" 212bfe3f2eSlogwang 222bfe3f2eSlogwang /** 232bfe3f2eSlogwang * Configure a security session on a device. 242bfe3f2eSlogwang * 252bfe3f2eSlogwang * @param device Crypto/eth device pointer 262bfe3f2eSlogwang * @param conf Security session configuration 272bfe3f2eSlogwang * @param sess Pointer to Security private session structure 282bfe3f2eSlogwang * @param mp Mempool where the private session is allocated 292bfe3f2eSlogwang * 302bfe3f2eSlogwang * @return 312bfe3f2eSlogwang * - Returns 0 if private session structure have been created successfully. 322bfe3f2eSlogwang * - Returns -EINVAL if input parameters are invalid. 332bfe3f2eSlogwang * - Returns -ENOTSUP if crypto device does not support the crypto transform. 342bfe3f2eSlogwang * - Returns -ENOMEM if the private session could not be allocated. 352bfe3f2eSlogwang */ 362bfe3f2eSlogwang typedef int (*security_session_create_t)(void *device, 372bfe3f2eSlogwang struct rte_security_session_conf *conf, 382bfe3f2eSlogwang struct rte_security_session *sess, 392bfe3f2eSlogwang struct rte_mempool *mp); 402bfe3f2eSlogwang 412bfe3f2eSlogwang /** 422bfe3f2eSlogwang * Free driver private session data. 432bfe3f2eSlogwang * 442bfe3f2eSlogwang * @param dev Crypto/eth device pointer 452bfe3f2eSlogwang * @param sess Security session structure 462bfe3f2eSlogwang */ 472bfe3f2eSlogwang typedef int (*security_session_destroy_t)(void *device, 482bfe3f2eSlogwang struct rte_security_session *sess); 492bfe3f2eSlogwang 502bfe3f2eSlogwang /** 512bfe3f2eSlogwang * Update driver private session data. 522bfe3f2eSlogwang * 532bfe3f2eSlogwang * @param device Crypto/eth device pointer 542bfe3f2eSlogwang * @param sess Pointer to Security private session structure 552bfe3f2eSlogwang * @param conf Security session configuration 562bfe3f2eSlogwang * 572bfe3f2eSlogwang * @return 582bfe3f2eSlogwang * - Returns 0 if private session structure have been updated successfully. 592bfe3f2eSlogwang * - Returns -EINVAL if input parameters are invalid. 602bfe3f2eSlogwang * - Returns -ENOTSUP if crypto device does not support the crypto transform. 612bfe3f2eSlogwang */ 622bfe3f2eSlogwang typedef int (*security_session_update_t)(void *device, 632bfe3f2eSlogwang struct rte_security_session *sess, 642bfe3f2eSlogwang struct rte_security_session_conf *conf); 65*d30ea906Sjfb8856606 66*d30ea906Sjfb8856606 /** 67*d30ea906Sjfb8856606 * Get the size of a security session 68*d30ea906Sjfb8856606 * 69*d30ea906Sjfb8856606 * @param device Crypto/eth device pointer 70*d30ea906Sjfb8856606 * 71*d30ea906Sjfb8856606 * @return 72*d30ea906Sjfb8856606 * - On success returns the size of the session structure for device 73*d30ea906Sjfb8856606 * - On failure returns 0 74*d30ea906Sjfb8856606 */ 75*d30ea906Sjfb8856606 typedef unsigned int (*security_session_get_size)(void *device); 76*d30ea906Sjfb8856606 772bfe3f2eSlogwang /** 782bfe3f2eSlogwang * Get stats from the PMD. 792bfe3f2eSlogwang * 802bfe3f2eSlogwang * @param device Crypto/eth device pointer 812bfe3f2eSlogwang * @param sess Pointer to Security private session structure 822bfe3f2eSlogwang * @param stats Security stats of the driver 832bfe3f2eSlogwang * 842bfe3f2eSlogwang * @return 852bfe3f2eSlogwang * - Returns 0 if private session structure have been updated successfully. 862bfe3f2eSlogwang * - Returns -EINVAL if session parameters are invalid. 872bfe3f2eSlogwang */ 882bfe3f2eSlogwang typedef int (*security_session_stats_get_t)(void *device, 892bfe3f2eSlogwang struct rte_security_session *sess, 902bfe3f2eSlogwang struct rte_security_stats *stats); 912bfe3f2eSlogwang 922bfe3f2eSlogwang /** 932bfe3f2eSlogwang * Update the mbuf with provided metadata. 942bfe3f2eSlogwang * 952bfe3f2eSlogwang * @param sess Security session structure 962bfe3f2eSlogwang * @param mb Packet buffer 972bfe3f2eSlogwang * @param mt Metadata 982bfe3f2eSlogwang * 992bfe3f2eSlogwang * @return 1002bfe3f2eSlogwang * - Returns 0 if metadata updated successfully. 1012bfe3f2eSlogwang * - Returns -ve value for errors. 1022bfe3f2eSlogwang */ 1032bfe3f2eSlogwang typedef int (*security_set_pkt_metadata_t)(void *device, 1042bfe3f2eSlogwang struct rte_security_session *sess, struct rte_mbuf *m, 1052bfe3f2eSlogwang void *params); 1062bfe3f2eSlogwang 1072bfe3f2eSlogwang /** 108*d30ea906Sjfb8856606 * Get application specific userdata associated with the security session. 109*d30ea906Sjfb8856606 * Device specific metadata provided would be used to uniquely identify 110*d30ea906Sjfb8856606 * the security session being referred to. 111*d30ea906Sjfb8856606 * 112*d30ea906Sjfb8856606 * @param device Crypto/eth device pointer 113*d30ea906Sjfb8856606 * @param md Metadata 114*d30ea906Sjfb8856606 * @param userdata Pointer to receive userdata 115*d30ea906Sjfb8856606 * 116*d30ea906Sjfb8856606 * @return 117*d30ea906Sjfb8856606 * - Returns 0 if userdata is retrieved successfully. 118*d30ea906Sjfb8856606 * - Returns -ve value for errors. 119*d30ea906Sjfb8856606 */ 120*d30ea906Sjfb8856606 typedef int (*security_get_userdata_t)(void *device, 121*d30ea906Sjfb8856606 uint64_t md, void **userdata); 122*d30ea906Sjfb8856606 123*d30ea906Sjfb8856606 /** 1242bfe3f2eSlogwang * Get security capabilities of the device. 1252bfe3f2eSlogwang * 1262bfe3f2eSlogwang * @param device crypto/eth device pointer 1272bfe3f2eSlogwang * 1282bfe3f2eSlogwang * @return 1292bfe3f2eSlogwang * - Returns rte_security_capability pointer on success. 1302bfe3f2eSlogwang * - Returns NULL on error. 1312bfe3f2eSlogwang */ 1322bfe3f2eSlogwang typedef const struct rte_security_capability *(*security_capabilities_get_t)( 1332bfe3f2eSlogwang void *device); 1342bfe3f2eSlogwang 1352bfe3f2eSlogwang /** Security operations function pointer table */ 1362bfe3f2eSlogwang struct rte_security_ops { 1372bfe3f2eSlogwang security_session_create_t session_create; 1382bfe3f2eSlogwang /**< Configure a security session. */ 1392bfe3f2eSlogwang security_session_update_t session_update; 1402bfe3f2eSlogwang /**< Update a security session. */ 141*d30ea906Sjfb8856606 security_session_get_size session_get_size; 142*d30ea906Sjfb8856606 /**< Return size of security session. */ 1432bfe3f2eSlogwang security_session_stats_get_t session_stats_get; 1442bfe3f2eSlogwang /**< Get security session statistics. */ 1452bfe3f2eSlogwang security_session_destroy_t session_destroy; 1462bfe3f2eSlogwang /**< Clear a security sessions private data. */ 1472bfe3f2eSlogwang security_set_pkt_metadata_t set_pkt_metadata; 1482bfe3f2eSlogwang /**< Update mbuf metadata. */ 149*d30ea906Sjfb8856606 security_get_userdata_t get_userdata; 150*d30ea906Sjfb8856606 /**< Get userdata associated with session which processed the packet. */ 1512bfe3f2eSlogwang security_capabilities_get_t capabilities_get; 1522bfe3f2eSlogwang /**< Get security capabilities. */ 1532bfe3f2eSlogwang }; 1542bfe3f2eSlogwang 1552bfe3f2eSlogwang #ifdef __cplusplus 1562bfe3f2eSlogwang } 1572bfe3f2eSlogwang #endif 1582bfe3f2eSlogwang 1592bfe3f2eSlogwang #endif /* _RTE_SECURITY_DRIVER_H_ */ 160