xref: /dpdk/lib/security/rte_security_driver.h (revision 99a2dd95)
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