1*99a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 2*99a2dd95SBruce Richardson * Copyright 2017 NXP. 3*99a2dd95SBruce Richardson * Copyright(c) 2017 Intel Corporation. 4*99a2dd95SBruce Richardson */ 5*99a2dd95SBruce Richardson 6*99a2dd95SBruce Richardson #ifndef _RTE_SECURITY_DRIVER_H_ 7*99a2dd95SBruce Richardson #define _RTE_SECURITY_DRIVER_H_ 8*99a2dd95SBruce Richardson 9*99a2dd95SBruce Richardson /** 10*99a2dd95SBruce Richardson * @file rte_security_driver.h 11*99a2dd95SBruce Richardson * 12*99a2dd95SBruce Richardson * RTE Security Common Definitions 13*99a2dd95SBruce Richardson * 14*99a2dd95SBruce Richardson */ 15*99a2dd95SBruce Richardson 16*99a2dd95SBruce Richardson #ifdef __cplusplus 17*99a2dd95SBruce Richardson extern "C" { 18*99a2dd95SBruce Richardson #endif 19*99a2dd95SBruce Richardson 20*99a2dd95SBruce Richardson #include "rte_security.h" 21*99a2dd95SBruce Richardson 22*99a2dd95SBruce Richardson /** 23*99a2dd95SBruce Richardson * Configure a security session on a device. 24*99a2dd95SBruce Richardson * 25*99a2dd95SBruce Richardson * @param device Crypto/eth device pointer 26*99a2dd95SBruce Richardson * @param conf Security session configuration 27*99a2dd95SBruce Richardson * @param sess Pointer to Security private session structure 28*99a2dd95SBruce Richardson * @param mp Mempool where the private session is allocated 29*99a2dd95SBruce Richardson * 30*99a2dd95SBruce Richardson * @return 31*99a2dd95SBruce Richardson * - Returns 0 if private session structure have been created successfully. 32*99a2dd95SBruce Richardson * - Returns -EINVAL if input parameters are invalid. 33*99a2dd95SBruce Richardson * - Returns -ENOTSUP if crypto device does not support the crypto transform. 34*99a2dd95SBruce Richardson * - Returns -ENOMEM if the private session could not be allocated. 35*99a2dd95SBruce Richardson */ 36*99a2dd95SBruce Richardson typedef int (*security_session_create_t)(void *device, 37*99a2dd95SBruce Richardson struct rte_security_session_conf *conf, 38*99a2dd95SBruce Richardson struct rte_security_session *sess, 39*99a2dd95SBruce Richardson struct rte_mempool *mp); 40*99a2dd95SBruce Richardson 41*99a2dd95SBruce Richardson /** 42*99a2dd95SBruce Richardson * Free driver private session data. 43*99a2dd95SBruce Richardson * 44*99a2dd95SBruce Richardson * @param device Crypto/eth device pointer 45*99a2dd95SBruce Richardson * @param sess Security session structure 46*99a2dd95SBruce Richardson */ 47*99a2dd95SBruce Richardson typedef int (*security_session_destroy_t)(void *device, 48*99a2dd95SBruce Richardson struct rte_security_session *sess); 49*99a2dd95SBruce Richardson 50*99a2dd95SBruce Richardson /** 51*99a2dd95SBruce Richardson * Update driver private session data. 52*99a2dd95SBruce Richardson * 53*99a2dd95SBruce Richardson * @param device Crypto/eth device pointer 54*99a2dd95SBruce Richardson * @param sess Pointer to Security private session structure 55*99a2dd95SBruce Richardson * @param conf Security session configuration 56*99a2dd95SBruce Richardson * 57*99a2dd95SBruce Richardson * @return 58*99a2dd95SBruce Richardson * - Returns 0 if private session structure have been updated successfully. 59*99a2dd95SBruce Richardson * - Returns -EINVAL if input parameters are invalid. 60*99a2dd95SBruce Richardson * - Returns -ENOTSUP if crypto device does not support the crypto transform. 61*99a2dd95SBruce Richardson */ 62*99a2dd95SBruce Richardson typedef int (*security_session_update_t)(void *device, 63*99a2dd95SBruce Richardson struct rte_security_session *sess, 64*99a2dd95SBruce Richardson struct rte_security_session_conf *conf); 65*99a2dd95SBruce Richardson 66*99a2dd95SBruce Richardson /** 67*99a2dd95SBruce Richardson * Get the size of a security session 68*99a2dd95SBruce Richardson * 69*99a2dd95SBruce Richardson * @param device Crypto/eth device pointer 70*99a2dd95SBruce Richardson * 71*99a2dd95SBruce Richardson * @return 72*99a2dd95SBruce Richardson * - On success returns the size of the session structure for device 73*99a2dd95SBruce Richardson * - On failure returns 0 74*99a2dd95SBruce Richardson */ 75*99a2dd95SBruce Richardson typedef unsigned int (*security_session_get_size)(void *device); 76*99a2dd95SBruce Richardson 77*99a2dd95SBruce Richardson /** 78*99a2dd95SBruce Richardson * Get stats from the PMD. 79*99a2dd95SBruce Richardson * 80*99a2dd95SBruce Richardson * @param device Crypto/eth device pointer 81*99a2dd95SBruce Richardson * @param sess Pointer to Security private session structure 82*99a2dd95SBruce Richardson * @param stats Security stats of the driver 83*99a2dd95SBruce Richardson * 84*99a2dd95SBruce Richardson * @return 85*99a2dd95SBruce Richardson * - Returns 0 if private session structure have been updated successfully. 86*99a2dd95SBruce Richardson * - Returns -EINVAL if session parameters are invalid. 87*99a2dd95SBruce Richardson */ 88*99a2dd95SBruce Richardson typedef int (*security_session_stats_get_t)(void *device, 89*99a2dd95SBruce Richardson struct rte_security_session *sess, 90*99a2dd95SBruce Richardson struct rte_security_stats *stats); 91*99a2dd95SBruce Richardson 92*99a2dd95SBruce Richardson __rte_experimental 93*99a2dd95SBruce Richardson int rte_security_dynfield_register(void); 94*99a2dd95SBruce Richardson 95*99a2dd95SBruce Richardson /** 96*99a2dd95SBruce Richardson * Update the mbuf with provided metadata. 97*99a2dd95SBruce Richardson * 98*99a2dd95SBruce Richardson * @param device Crypto/eth device pointer 99*99a2dd95SBruce Richardson * @param sess Security session structure 100*99a2dd95SBruce Richardson * @param mb Packet buffer 101*99a2dd95SBruce Richardson * @param params Metadata 102*99a2dd95SBruce Richardson * 103*99a2dd95SBruce Richardson * @return 104*99a2dd95SBruce Richardson * - Returns 0 if metadata updated successfully. 105*99a2dd95SBruce Richardson * - Returns -ve value for errors. 106*99a2dd95SBruce Richardson */ 107*99a2dd95SBruce Richardson typedef int (*security_set_pkt_metadata_t)(void *device, 108*99a2dd95SBruce Richardson struct rte_security_session *sess, struct rte_mbuf *mb, 109*99a2dd95SBruce Richardson void *params); 110*99a2dd95SBruce Richardson 111*99a2dd95SBruce Richardson /** 112*99a2dd95SBruce Richardson * Get application specific userdata associated with the security session. 113*99a2dd95SBruce Richardson * Device specific metadata provided would be used to uniquely identify 114*99a2dd95SBruce Richardson * the security session being referred to. 115*99a2dd95SBruce Richardson * 116*99a2dd95SBruce Richardson * @param device Crypto/eth device pointer 117*99a2dd95SBruce Richardson * @param md Metadata 118*99a2dd95SBruce Richardson * @param userdata Pointer to receive userdata 119*99a2dd95SBruce Richardson * 120*99a2dd95SBruce Richardson * @return 121*99a2dd95SBruce Richardson * - Returns 0 if userdata is retrieved successfully. 122*99a2dd95SBruce Richardson * - Returns -ve value for errors. 123*99a2dd95SBruce Richardson */ 124*99a2dd95SBruce Richardson typedef int (*security_get_userdata_t)(void *device, 125*99a2dd95SBruce Richardson uint64_t md, void **userdata); 126*99a2dd95SBruce Richardson 127*99a2dd95SBruce Richardson /** 128*99a2dd95SBruce Richardson * Get security capabilities of the device. 129*99a2dd95SBruce Richardson * 130*99a2dd95SBruce Richardson * @param device crypto/eth device pointer 131*99a2dd95SBruce Richardson * 132*99a2dd95SBruce Richardson * @return 133*99a2dd95SBruce Richardson * - Returns rte_security_capability pointer on success. 134*99a2dd95SBruce Richardson * - Returns NULL on error. 135*99a2dd95SBruce Richardson */ 136*99a2dd95SBruce Richardson typedef const struct rte_security_capability *(*security_capabilities_get_t)( 137*99a2dd95SBruce Richardson void *device); 138*99a2dd95SBruce Richardson 139*99a2dd95SBruce Richardson /** Security operations function pointer table */ 140*99a2dd95SBruce Richardson struct rte_security_ops { 141*99a2dd95SBruce Richardson security_session_create_t session_create; 142*99a2dd95SBruce Richardson /**< Configure a security session. */ 143*99a2dd95SBruce Richardson security_session_update_t session_update; 144*99a2dd95SBruce Richardson /**< Update a security session. */ 145*99a2dd95SBruce Richardson security_session_get_size session_get_size; 146*99a2dd95SBruce Richardson /**< Return size of security session. */ 147*99a2dd95SBruce Richardson security_session_stats_get_t session_stats_get; 148*99a2dd95SBruce Richardson /**< Get security session statistics. */ 149*99a2dd95SBruce Richardson security_session_destroy_t session_destroy; 150*99a2dd95SBruce Richardson /**< Clear a security sessions private data. */ 151*99a2dd95SBruce Richardson security_set_pkt_metadata_t set_pkt_metadata; 152*99a2dd95SBruce Richardson /**< Update mbuf metadata. */ 153*99a2dd95SBruce Richardson security_get_userdata_t get_userdata; 154*99a2dd95SBruce Richardson /**< Get userdata associated with session which processed the packet. */ 155*99a2dd95SBruce Richardson security_capabilities_get_t capabilities_get; 156*99a2dd95SBruce Richardson /**< Get security capabilities. */ 157*99a2dd95SBruce Richardson }; 158*99a2dd95SBruce Richardson 159*99a2dd95SBruce Richardson #ifdef __cplusplus 160*99a2dd95SBruce Richardson } 161*99a2dd95SBruce Richardson #endif 162*99a2dd95SBruce Richardson 163*99a2dd95SBruce Richardson #endif /* _RTE_SECURITY_DRIVER_H_ */ 164