DPDK  18.08.0
rte_security.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2017 NXP.
3  * Copyright(c) 2017 Intel Corporation.
4  */
5 
6 #ifndef _RTE_SECURITY_H_
7 #define _RTE_SECURITY_H_
8 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 #include <sys/types.h>
22 
23 #include <netinet/in.h>
24 #include <netinet/ip.h>
25 #include <netinet/ip6.h>
26 
27 #include <rte_compat.h>
28 #include <rte_common.h>
29 #include <rte_crypto.h>
30 #include <rte_mbuf.h>
31 #include <rte_memory.h>
32 #include <rte_mempool.h>
33 
40 };
41 
48 };
49 
56 };
57 
68  void *device;
70  const struct rte_security_ops *ops;
72  uint16_t sess_cnt;
74 };
75 
85  union {
86  struct {
87  struct in_addr src_ip;
89  struct in_addr dst_ip;
91  uint8_t dscp;
93  uint8_t df;
95  uint8_t ttl;
97  } ipv4;
99  struct {
100  struct in6_addr src_addr;
102  struct in6_addr dst_addr;
104  uint8_t dscp;
106  uint32_t flabel;
108  uint8_t hlimit;
110  } ipv6;
112  };
113 };
114 
124  uint32_t esn : 1;
125 
132  uint32_t udp_encap : 1;
133 
141  uint32_t copy_dscp : 1;
142 
149  uint32_t copy_flabel : 1;
150 
157  uint32_t copy_df : 1;
158 
166  uint32_t dec_ttl : 1;
167 };
168 
175 };
176 
183  uint32_t spi;
185  uint32_t salt;
197  uint64_t esn_soft_limit;
199 };
200 
206  int dummy;
207 };
208 
227 };
228 
235 };
236 
246  union {
247  struct rte_security_ipsec_xform ipsec;
248  struct rte_security_macsec_xform macsec;
249  };
253  void *userdata;
255 };
256 
257 struct rte_security_session {
258  void *sess_private_data;
260 };
261 
272 struct rte_security_session * __rte_experimental
274  struct rte_security_session_conf *conf,
275  struct rte_mempool *mp);
276 
287 int __rte_experimental
289  struct rte_security_session *sess,
290  struct rte_security_session_conf *conf);
291 
301 unsigned int __rte_experimental
303 
316 int __rte_experimental
318  struct rte_security_session *sess);
319 
333 int __rte_experimental
335  struct rte_security_session *sess,
336  struct rte_mbuf *mb, void *params);
337 
355 void * __rte_experimental
356 rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md);
357 
364 static inline int __rte_experimental
366  struct rte_security_session *sess)
367 {
368  sym_op->sec_session = sess;
369 
370  return 0;
371 }
372 
373 static inline void * __rte_experimental
374 get_sec_session_private_data(const struct rte_security_session *sess)
375 {
376  return sess->sess_private_data;
377 }
378 
379 static inline void __rte_experimental
380 set_sec_session_private_data(struct rte_security_session *sess,
381  void *private_data)
382 {
383  sess->sess_private_data = private_data;
384 }
385 
395 static inline int __rte_experimental
397  struct rte_security_session *sess)
398 {
400  return -EINVAL;
401 
403 
404  return __rte_security_attach_session(op->sym, sess);
405 }
406 
407 struct rte_security_macsec_stats {
408  uint64_t reserved;
409 };
410 
411 struct rte_security_ipsec_stats {
412  uint64_t reserved;
413 
414 };
415 
416 struct rte_security_stats {
417  enum rte_security_session_protocol protocol;
421  union {
422  struct rte_security_macsec_stats macsec;
423  struct rte_security_ipsec_stats ipsec;
424  };
425 };
426 
437 int __rte_experimental
439  struct rte_security_session *sess,
440  struct rte_security_stats *stats);
441 
451  union {
452  struct {
461  } ipsec;
463  struct {
464  /* To be Filled */
465  int dummy;
466  } macsec;
468  };
469 
473  uint32_t ol_flags;
475 };
476 
477 #define RTE_SECURITY_TX_OLOAD_NEED_MDATA 0x00000001
478 
481 #define RTE_SECURITY_TX_HW_TRAILER_OFFLOAD 0x00000002
482 
487 #define RTE_SECURITY_RX_HW_TRAILER_OFFLOAD 0x00010000
488 
500  enum rte_security_session_protocol protocol;
501 
503  union {
504  struct {
506  enum rte_security_ipsec_sa_mode mode;
507  enum rte_security_ipsec_sa_direction direction;
508  } ipsec;
509  };
510 };
511 
521 const struct rte_security_capability * __rte_experimental
523 
535 const struct rte_security_capability * __rte_experimental
537  struct rte_security_capability_idx *idx);
538 
539 #ifdef __cplusplus
540 }
541 #endif
542 
543 #endif /* _RTE_SECURITY_H_ */
rte_security_ipsec_sa_protocol
Definition: rte_security.h:43
static int __rte_experimental __rte_security_attach_session(struct rte_crypto_sym_op *sym_op, struct rte_security_session *sess)
Definition: rte_security.h:365
rte_security_session_action_type
Definition: rte_security.h:212
int __rte_experimental rte_security_session_destroy(struct rte_security_ctx *instance, struct rte_security_session *sess)
enum rte_security_ipsec_sa_direction direction
Definition: rte_security.h:189
struct rte_security_session * sec_session
struct rte_security_ipsec_tunnel_param tunnel
Definition: rte_security.h:195
struct rte_security_ipsec_sa_options options
Definition: rte_security.h:187
enum rte_security_session_action_type action
Definition: rte_security.h:446
struct rte_security_capability::@209::@212 macsec
struct rte_security_session *__rte_experimental rte_security_session_create(struct rte_security_ctx *instance, struct rte_security_session_conf *conf, struct rte_mempool *mp)
uint8_t type
Definition: rte_crypto.h:84
struct rte_crypto_sym_xform * crypto_xform
Definition: rte_security.h:251
rte_security_ipsec_sa_mode
Definition: rte_security.h:35
uint16_t sess_cnt
Definition: rte_security.h:72
int __rte_experimental rte_security_session_update(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_security_session_conf *conf)
rte_security_ipsec_sa_direction
Definition: rte_security.h:170
rte_security_ipsec_tunnel_type
Definition: rte_security.h:51
void *__rte_experimental rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md)
static int __rte_experimental rte_security_attach_session(struct rte_crypto_op *op, struct rte_security_session *sess)
Definition: rte_security.h:396
#define unlikely(x)
enum rte_security_session_protocol protocol
Definition: rte_security.h:243
enum rte_security_session_action_type action_type
Definition: rte_security.h:241
const struct rte_security_capability *__rte_experimental rte_security_capabilities_get(struct rte_security_ctx *instance)
struct rte_security_ipsec_sa_options options
Definition: rte_security.h:459
int __rte_experimental rte_security_session_stats_get(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_security_stats *stats)
int __rte_experimental rte_security_set_pkt_metadata(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_mbuf *mb, void *params)
enum rte_security_ipsec_sa_protocol proto
Definition: rte_security.h:191
enum rte_security_ipsec_sa_direction direction
Definition: rte_security.h:457
struct rte_security_ipsec_tunnel_param::@201::@203 ipv4
struct rte_security_ipsec_tunnel_param::@201::@204 ipv6
const struct rte_security_capability *__rte_experimental rte_security_capability_get(struct rte_security_ctx *instance, struct rte_security_capability_idx *idx)
#define RTE_STD_C11
Definition: rte_common.h:37
enum rte_security_ipsec_sa_protocol proto
Definition: rte_security.h:453
enum rte_security_ipsec_sa_mode mode
Definition: rte_security.h:455
const struct rte_cryptodev_capabilities * crypto_capabilities
Definition: rte_security.h:470
enum rte_security_ipsec_sa_mode mode
Definition: rte_security.h:193
enum rte_security_ipsec_tunnel_type type
Definition: rte_security.h:82
uint8_t sess_type
Definition: rte_crypto.h:94
rte_security_session_protocol
Definition: rte_security.h:230
struct rte_security_capability::@209::@211 ipsec
enum rte_security_session_protocol protocol
Definition: rte_security.h:448
const struct rte_security_ops * ops
Definition: rte_security.h:70
unsigned int __rte_experimental rte_security_session_get_size(struct rte_security_ctx *instance)
struct rte_crypto_sym_op sym[0]
Definition: rte_crypto.h:118