1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 22bfe3f2eSlogwang * Copyright 2017 NXP. 3d30ea906Sjfb8856606 * 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); 65d30ea906Sjfb8856606 66d30ea906Sjfb8856606 /** 67d30ea906Sjfb8856606 * Get the size of a security session 68d30ea906Sjfb8856606 * 69d30ea906Sjfb8856606 * @param device Crypto/eth device pointer 70d30ea906Sjfb8856606 * 71d30ea906Sjfb8856606 * @return 72d30ea906Sjfb8856606 * - On success returns the size of the session structure for device 73d30ea906Sjfb8856606 * - On failure returns 0 74d30ea906Sjfb8856606 */ 75d30ea906Sjfb8856606 typedef unsigned int (*security_session_get_size)(void *device); 76d30ea906Sjfb8856606 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 92*2d9fd380Sjfb8856606 __rte_experimental 93*2d9fd380Sjfb8856606 int rte_security_dynfield_register(void); 94*2d9fd380Sjfb8856606 952bfe3f2eSlogwang /** 962bfe3f2eSlogwang * Update the mbuf with provided metadata. 972bfe3f2eSlogwang * 982bfe3f2eSlogwang * @param sess Security session structure 992bfe3f2eSlogwang * @param mb Packet buffer 1002bfe3f2eSlogwang * @param mt Metadata 1012bfe3f2eSlogwang * 1022bfe3f2eSlogwang * @return 1032bfe3f2eSlogwang * - Returns 0 if metadata updated successfully. 1042bfe3f2eSlogwang * - Returns -ve value for errors. 1052bfe3f2eSlogwang */ 1062bfe3f2eSlogwang typedef int (*security_set_pkt_metadata_t)(void *device, 1072bfe3f2eSlogwang struct rte_security_session *sess, struct rte_mbuf *m, 1082bfe3f2eSlogwang void *params); 1092bfe3f2eSlogwang 1102bfe3f2eSlogwang /** 111d30ea906Sjfb8856606 * Get application specific userdata associated with the security session. 112d30ea906Sjfb8856606 * Device specific metadata provided would be used to uniquely identify 113d30ea906Sjfb8856606 * the security session being referred to. 114d30ea906Sjfb8856606 * 115d30ea906Sjfb8856606 * @param device Crypto/eth device pointer 116d30ea906Sjfb8856606 * @param md Metadata 117d30ea906Sjfb8856606 * @param userdata Pointer to receive userdata 118d30ea906Sjfb8856606 * 119d30ea906Sjfb8856606 * @return 120d30ea906Sjfb8856606 * - Returns 0 if userdata is retrieved successfully. 121d30ea906Sjfb8856606 * - Returns -ve value for errors. 122d30ea906Sjfb8856606 */ 123d30ea906Sjfb8856606 typedef int (*security_get_userdata_t)(void *device, 124d30ea906Sjfb8856606 uint64_t md, void **userdata); 125d30ea906Sjfb8856606 126d30ea906Sjfb8856606 /** 1272bfe3f2eSlogwang * Get security capabilities of the device. 1282bfe3f2eSlogwang * 1292bfe3f2eSlogwang * @param device crypto/eth device pointer 1302bfe3f2eSlogwang * 1312bfe3f2eSlogwang * @return 1322bfe3f2eSlogwang * - Returns rte_security_capability pointer on success. 1332bfe3f2eSlogwang * - Returns NULL on error. 1342bfe3f2eSlogwang */ 1352bfe3f2eSlogwang typedef const struct rte_security_capability *(*security_capabilities_get_t)( 1362bfe3f2eSlogwang void *device); 1372bfe3f2eSlogwang 1382bfe3f2eSlogwang /** Security operations function pointer table */ 1392bfe3f2eSlogwang struct rte_security_ops { 1402bfe3f2eSlogwang security_session_create_t session_create; 1412bfe3f2eSlogwang /**< Configure a security session. */ 1422bfe3f2eSlogwang security_session_update_t session_update; 1432bfe3f2eSlogwang /**< Update a security session. */ 144d30ea906Sjfb8856606 security_session_get_size session_get_size; 145d30ea906Sjfb8856606 /**< Return size of security session. */ 1462bfe3f2eSlogwang security_session_stats_get_t session_stats_get; 1472bfe3f2eSlogwang /**< Get security session statistics. */ 1482bfe3f2eSlogwang security_session_destroy_t session_destroy; 1492bfe3f2eSlogwang /**< Clear a security sessions private data. */ 1502bfe3f2eSlogwang security_set_pkt_metadata_t set_pkt_metadata; 1512bfe3f2eSlogwang /**< Update mbuf metadata. */ 152d30ea906Sjfb8856606 security_get_userdata_t get_userdata; 153d30ea906Sjfb8856606 /**< Get userdata associated with session which processed the packet. */ 1542bfe3f2eSlogwang security_capabilities_get_t capabilities_get; 1552bfe3f2eSlogwang /**< Get security capabilities. */ 1562bfe3f2eSlogwang }; 1572bfe3f2eSlogwang 1582bfe3f2eSlogwang #ifdef __cplusplus 1592bfe3f2eSlogwang } 1602bfe3f2eSlogwang #endif 1612bfe3f2eSlogwang 1622bfe3f2eSlogwang #endif /* _RTE_SECURITY_DRIVER_H_ */ 163