DPDK  19.11.1
rte_security.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2017,2019 NXP
3  * Copyright(c) 2017 Intel Corporation.
4  */
5 
6 #ifndef _RTE_SECURITY_H_
7 #define _RTE_SECURITY_H_
8 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 #include <sys/types.h>
21 
22 #include <netinet/in.h>
23 #include <netinet/ip.h>
24 #include <netinet/ip6.h>
25 
26 #include <rte_compat.h>
27 #include <rte_common.h>
28 #include <rte_crypto.h>
29 #include <rte_mbuf.h>
30 #include <rte_memory.h>
31 #include <rte_mempool.h>
32 
39 };
40 
47 };
48 
55 };
56 
67  void *device;
69  const struct rte_security_ops *ops;
71  uint16_t sess_cnt;
73 };
74 
84  union {
85  struct {
86  struct in_addr src_ip;
88  struct in_addr dst_ip;
90  uint8_t dscp;
92  uint8_t df;
94  uint8_t ttl;
96  } ipv4;
98  struct {
99  struct in6_addr src_addr;
101  struct in6_addr dst_addr;
103  uint8_t dscp;
105  uint32_t flabel;
107  uint8_t hlimit;
109  } ipv6;
111  };
112 };
113 
123  uint32_t esn : 1;
124 
131  uint32_t udp_encap : 1;
132 
140  uint32_t copy_dscp : 1;
141 
148  uint32_t copy_flabel : 1;
149 
156  uint32_t copy_df : 1;
157 
165  uint32_t dec_ttl : 1;
166 
174  uint32_t ecn : 1;
175 
182  uint32_t stats : 1;
183 };
184 
191 };
192 
199  uint32_t spi;
201  uint32_t salt;
213  uint64_t esn_soft_limit;
215  uint32_t replay_win_sz;
219 };
220 
226  int dummy;
227 };
228 
235 };
236 
241 };
242 
255 };
256 
263  int8_t bearer;
267  uint8_t en_ordering;
282  uint32_t hfn;
284  uint32_t hfn_threshold;
293  uint32_t hfn_ovrd;
294 };
295 
314 };
315 
324 };
325 
335  union {
336  struct rte_security_ipsec_xform ipsec;
337  struct rte_security_macsec_xform macsec;
338  struct rte_security_pdcp_xform pdcp;
339  };
343  void *userdata;
345 };
346 
347 struct rte_security_session {
348  void *sess_private_data;
350  uint64_t opaque_data;
352 };
353 
364 struct rte_security_session *
366  struct rte_security_session_conf *conf,
367  struct rte_mempool *mp);
368 
379 __rte_experimental
380 int
382  struct rte_security_session *sess,
383  struct rte_security_session_conf *conf);
384 
394 unsigned int
396 
409 int
411  struct rte_security_session *sess);
412 
426 int
428  struct rte_security_session *sess,
429  struct rte_mbuf *mb, void *params);
430 
448 __rte_experimental
449 void *
450 rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md);
451 
458 static inline int
460  struct rte_security_session *sess)
461 {
462  sym_op->sec_session = sess;
463 
464  return 0;
465 }
466 
467 static inline void *
468 get_sec_session_private_data(const struct rte_security_session *sess)
469 {
470  return sess->sess_private_data;
471 }
472 
473 static inline void
474 set_sec_session_private_data(struct rte_security_session *sess,
475  void *private_data)
476 {
477  sess->sess_private_data = private_data;
478 }
479 
489 static inline int
491  struct rte_security_session *sess)
492 {
494  return -EINVAL;
495 
497 
498  return __rte_security_attach_session(op->sym, sess);
499 }
500 
501 struct rte_security_macsec_stats {
502  uint64_t reserved;
503 };
504 
505 struct rte_security_ipsec_stats {
506  uint64_t ipackets;
507  uint64_t opackets;
508  uint64_t ibytes;
509  uint64_t obytes;
510  uint64_t ierrors;
511  uint64_t oerrors;
512  uint64_t reserved1;
513  uint64_t reserved2;
514 };
515 
516 struct rte_security_pdcp_stats {
517  uint64_t reserved;
518 };
519 
520 struct rte_security_stats {
521  enum rte_security_session_protocol protocol;
525  union {
526  struct rte_security_macsec_stats macsec;
527  struct rte_security_ipsec_stats ipsec;
528  struct rte_security_pdcp_stats pdcp;
529  };
530 };
531 
545 __rte_experimental
546 int
548  struct rte_security_session *sess,
549  struct rte_security_stats *stats);
550 
560  union {
561  struct {
574  } ipsec;
576  struct {
577  /* To be Filled */
578  int dummy;
579  } macsec;
581  struct {
584  uint32_t capa_flags;
586  } pdcp;
588  };
589 
593  uint32_t ol_flags;
595 };
596 
602 #define RTE_SECURITY_PDCP_ORDERING_CAP 0x00000001
603 
608 #define RTE_SECURITY_PDCP_DUP_DETECT_CAP 0x00000002
609 
610 #define RTE_SECURITY_TX_OLOAD_NEED_MDATA 0x00000001
611 
614 #define RTE_SECURITY_TX_HW_TRAILER_OFFLOAD 0x00000002
615 
620 #define RTE_SECURITY_RX_HW_TRAILER_OFFLOAD 0x00010000
621 
633  enum rte_security_session_protocol protocol;
634 
636  union {
637  struct {
639  enum rte_security_ipsec_sa_mode mode;
640  enum rte_security_ipsec_sa_direction direction;
641  } ipsec;
642  struct {
643  enum rte_security_pdcp_domain domain;
644  uint32_t capa_flags;
645  } pdcp;
646  };
647 };
648 
658 const struct rte_security_capability *
660 
672 const struct rte_security_capability *
674  struct rte_security_capability_idx *idx);
675 
676 #ifdef __cplusplus
677 }
678 #endif
679 
680 #endif /* _RTE_SECURITY_H_ */
rte_security_pdcp_direction
rte_security_pdcp_direction
Definition: rte_security.h:238
rte_security_ctx::device
void * device
Definition: rte_security.h:67
rte_security_ipsec_tunnel_param::hlimit
uint8_t hlimit
Definition: rte_security.h:107
RTE_SECURITY_IPSEC_SA_DIR_INGRESS
@ RTE_SECURITY_IPSEC_SA_DIR_INGRESS
Definition: rte_security.h:189
RTE_CRYPTO_OP_SECURITY_SESSION
@ RTE_CRYPTO_OP_SECURITY_SESSION
Definition: rte_crypto.h:65
rte_security_capability
Definition: rte_security.h:554
rte_security_session_protocol
rte_security_session_protocol
Definition: rte_security.h:317
rte_security_capability::replay_win_sz_max
uint32_t replay_win_sz_max
Definition: rte_security.h:570
rte_security_ipsec_sa_options::stats
uint32_t stats
Definition: rte_security.h:182
rte_security_capabilities_get
const struct rte_security_capability * rte_security_capabilities_get(struct rte_security_ctx *instance)
rte_security_ipsec_sa_options::copy_dscp
uint32_t copy_dscp
Definition: rte_security.h:140
rte_security_pdcp_xform::bearer
int8_t bearer
Definition: rte_security.h:263
rte_security_pdcp_xform::hfn
uint32_t hfn
Definition: rte_security.h:282
RTE_SECURITY_PROTOCOL_PDCP
@ RTE_SECURITY_PROTOCOL_PDCP
Definition: rte_security.h:322
rte_memory.h
rte_security_macsec_xform::dummy
int dummy
Definition: rte_security.h:226
rte_security_capability::ol_flags
uint32_t ol_flags
Definition: rte_security.h:593
rte_security_session_action_type
rte_security_session_action_type
Definition: rte_security.h:299
rte_cryptodev_capabilities
Definition: rte_cryptodev.h:176
rte_security_ipsec_sa_options::dec_ttl
uint32_t dec_ttl
Definition: rte_security.h:165
RTE_SECURITY_IPSEC_SA_DIR_EGRESS
@ RTE_SECURITY_IPSEC_SA_DIR_EGRESS
Definition: rte_security.h:187
unlikely
#define unlikely(x)
Definition: rte_branch_prediction.h:38
RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL
@ RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL
Definition: rte_security.h:306
rte_security_ipsec_tunnel_param::src_addr
struct in6_addr src_addr
Definition: rte_security.h:99
rte_crypto.h
rte_security_set_pkt_metadata
int rte_security_set_pkt_metadata(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_mbuf *mb, void *params)
rte_security_macsec_xform
Definition: rte_security.h:224
RTE_SECURITY_PDCP_SN_SIZE_12
@ RTE_SECURITY_PDCP_SN_SIZE_12
Definition: rte_security.h:250
rte_security_ipsec_sa_direction
rte_security_ipsec_sa_direction
Definition: rte_security.h:186
rte_security_pdcp_sn_size
rte_security_pdcp_sn_size
Definition: rte_security.h:244
rte_security_capability::pdcp
struct rte_security_capability::@272::@276 pdcp
rte_security_ipsec_tunnel_param::ipv4
struct rte_security_ipsec_tunnel_param::@264::@266 ipv4
rte_security_pdcp_xform::pkt_dir
enum rte_security_pdcp_direction pkt_dir
Definition: rte_security.h:276
rte_security_ipsec_tunnel_param
Definition: rte_security.h:80
rte_security_ipsec_sa_options
Definition: rte_security.h:117
RTE_SECURITY_PDCP_MODE_CONTROL
@ RTE_SECURITY_PDCP_MODE_CONTROL
Definition: rte_security.h:233
rte_security_ipsec_xform::mode
enum rte_security_ipsec_sa_mode mode
Definition: rte_security.h:209
rte_security_ctx
Definition: rte_security.h:66
RTE_SECURITY_IPSEC_SA_MODE_TUNNEL
@ RTE_SECURITY_IPSEC_SA_MODE_TUNNEL
Definition: rte_security.h:37
rte_security_get_userdata
__rte_experimental void * rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md)
rte_security_session_destroy
int rte_security_session_destroy(struct rte_security_ctx *instance, struct rte_security_session *sess)
rte_security_session_update
__rte_experimental int rte_security_session_update(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_security_session_conf *conf)
RTE_SECURITY_IPSEC_SA_PROTO_AH
@ RTE_SECURITY_IPSEC_SA_PROTO_AH
Definition: rte_security.h:43
rte_security_capability::ipsec
struct rte_security_capability::@272::@274 ipsec
rte_security_session_conf::crypto_xform
struct rte_crypto_sym_xform * crypto_xform
Definition: rte_security.h:341
rte_security_ipsec_tunnel_param::ttl
uint8_t ttl
Definition: rte_security.h:94
rte_mbuf
Definition: rte_mbuf_core.h:480
RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO
@ RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO
Definition: rte_security.h:302
rte_security_pdcp_xform::en_ordering
uint8_t en_ordering
Definition: rte_security.h:267
rte_security_capability::macsec
struct rte_security_capability::@272::@275 macsec
rte_security_session_conf::userdata
void * userdata
Definition: rte_security.h:343
rte_security_ipsec_sa_mode
rte_security_ipsec_sa_mode
Definition: rte_security.h:34
rte_security_ipsec_xform::spi
uint32_t spi
Definition: rte_security.h:199
rte_crypto_op
Definition: rte_crypto.h:78
rte_security_ipsec_sa_options::copy_df
uint32_t copy_df
Definition: rte_security.h:156
rte_security_ipsec_tunnel_type
rte_security_ipsec_tunnel_type
Definition: rte_security.h:50
RTE_SECURITY_IPSEC_TUNNEL_IPV4
@ RTE_SECURITY_IPSEC_TUNNEL_IPV4
Definition: rte_security.h:51
rte_security_ipsec_sa_options::udp_encap
uint32_t udp_encap
Definition: rte_security.h:131
rte_security_ipsec_tunnel_param::ipv6
struct rte_security_ipsec_tunnel_param::@264::@267 ipv6
rte_security_capability::capa_flags
uint32_t capa_flags
Definition: rte_security.h:584
rte_security_ipsec_tunnel_param::src_ip
struct in_addr src_ip
Definition: rte_security.h:86
rte_security_ipsec_xform::salt
uint32_t salt
Definition: rte_security.h:201
rte_security_session_conf::action_type
enum rte_security_session_action_type action_type
Definition: rte_security.h:330
rte_security_capability::crypto_capabilities
const struct rte_cryptodev_capabilities * crypto_capabilities
Definition: rte_security.h:590
rte_security_pdcp_xform::sn_size
enum rte_security_pdcp_sn_size sn_size
Definition: rte_security.h:278
rte_security_capability::action
enum rte_security_session_action_type action
Definition: rte_security.h:555
__rte_security_attach_session
static int __rte_security_attach_session(struct rte_crypto_sym_op *sym_op, struct rte_security_session *sess)
Definition: rte_security.h:459
rte_security_pdcp_xform::hfn_ovrd
uint32_t hfn_ovrd
Definition: rte_security.h:293
rte_crypto_op::sym
struct rte_crypto_sym_op sym[0]
Definition: rte_crypto.h:118
rte_security_ipsec_sa_options::copy_flabel
uint32_t copy_flabel
Definition: rte_security.h:148
rte_security_ops
Definition: rte_security_driver.h:136
rte_security_ctx::sess_cnt
uint16_t sess_cnt
Definition: rte_security.h:71
rte_security_capability::options
struct rte_security_ipsec_sa_options options
Definition: rte_security.h:568
rte_security_capability_idx
Definition: rte_security.h:631
RTE_SECURITY_PDCP_UPLINK
@ RTE_SECURITY_PDCP_UPLINK
Definition: rte_security.h:239
rte_security_ipsec_sa_options::ecn
uint32_t ecn
Definition: rte_security.h:174
RTE_SECURITY_PDCP_SN_SIZE_18
@ RTE_SECURITY_PDCP_SN_SIZE_18
Definition: rte_security.h:254
rte_security_ipsec_xform::esn_soft_limit
uint64_t esn_soft_limit
Definition: rte_security.h:213
rte_crypto_sym_op::sec_session
struct rte_security_session * sec_session
Definition: rte_crypto_sym.h:498
rte_security_session_stats_get
__rte_experimental int rte_security_session_stats_get(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_security_stats *stats)
RTE_SECURITY_PDCP_DOWNLINK
@ RTE_SECURITY_PDCP_DOWNLINK
Definition: rte_security.h:240
rte_security_ipsec_sa_options::esn
uint32_t esn
Definition: rte_security.h:123
rte_common.h
rte_security_ipsec_tunnel_param::dscp
uint8_t dscp
Definition: rte_security.h:90
RTE_SECURITY_PROTOCOL_MACSEC
@ RTE_SECURITY_PROTOCOL_MACSEC
Definition: rte_security.h:320
RTE_SECURITY_PDCP_SN_SIZE_15
@ RTE_SECURITY_PDCP_SN_SIZE_15
Definition: rte_security.h:252
rte_security_session_conf::protocol
enum rte_security_session_protocol protocol
Definition: rte_security.h:332
rte_security_capability::mode
enum rte_security_ipsec_sa_mode mode
Definition: rte_security.h:564
rte_security_ipsec_tunnel_param::type
enum rte_security_ipsec_tunnel_type type
Definition: rte_security.h:81
RTE_SECURITY_IPSEC_TUNNEL_IPV6
@ RTE_SECURITY_IPSEC_TUNNEL_IPV6
Definition: rte_security.h:53
rte_security_ipsec_xform::direction
enum rte_security_ipsec_sa_direction direction
Definition: rte_security.h:205
rte_crypto_sym_xform
Definition: rte_crypto_sym.h:440
rte_mempool
Definition: rte_mempool.h:216
rte_security_capability::domain
enum rte_security_pdcp_domain domain
Definition: rte_security.h:582
rte_security_pdcp_xform
Definition: rte_security.h:262
rte_security_ipsec_xform::options
struct rte_security_ipsec_sa_options options
Definition: rte_security.h:203
RTE_CRYPTO_OP_TYPE_SYMMETRIC
@ RTE_CRYPTO_OP_TYPE_SYMMETRIC
Definition: rte_crypto.h:32
rte_security_ipsec_xform::replay_win_sz
uint32_t replay_win_sz
Definition: rte_security.h:215
RTE_STD_C11
#define RTE_STD_C11
Definition: rte_common.h:40
RTE_SECURITY_PDCP_SN_SIZE_5
@ RTE_SECURITY_PDCP_SN_SIZE_5
Definition: rte_security.h:246
rte_security_capability::protocol
enum rte_security_session_protocol protocol
Definition: rte_security.h:557
rte_mempool.h
RTE_SECURITY_PROTOCOL_IPSEC
@ RTE_SECURITY_PROTOCOL_IPSEC
Definition: rte_security.h:318
rte_crypto_op::sess_type
uint8_t sess_type
Definition: rte_crypto.h:94
rte_security_ipsec_tunnel_param::flabel
uint32_t flabel
Definition: rte_security.h:105
RTE_SECURITY_IPSEC_SA_PROTO_ESP
@ RTE_SECURITY_IPSEC_SA_PROTO_ESP
Definition: rte_security.h:45
rte_security_pdcp_xform::domain
enum rte_security_pdcp_domain domain
Definition: rte_security.h:274
rte_mbuf.h
RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL
@ RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL
Definition: rte_security.h:310
RTE_SECURITY_PDCP_MODE_DATA
@ RTE_SECURITY_PDCP_MODE_DATA
Definition: rte_security.h:234
rte_security_session_create
struct rte_security_session * rte_security_session_create(struct rte_security_ctx *instance, struct rte_security_session_conf *conf, struct rte_mempool *mp)
rte_security_ctx::ops
const struct rte_security_ops * ops
Definition: rte_security.h:69
rte_security_ipsec_xform::proto
enum rte_security_ipsec_sa_protocol proto
Definition: rte_security.h:207
rte_security_ipsec_tunnel_param::dst_addr
struct in6_addr dst_addr
Definition: rte_security.h:101
rte_security_ipsec_xform::tunnel
struct rte_security_ipsec_tunnel_param tunnel
Definition: rte_security.h:211
rte_crypto_op::type
uint8_t type
Definition: rte_crypto.h:84
rte_security_session_conf
Definition: rte_security.h:329
RTE_SECURITY_PDCP_SN_SIZE_7
@ RTE_SECURITY_PDCP_SN_SIZE_7
Definition: rte_security.h:248
rte_security_capability::direction
enum rte_security_ipsec_sa_direction direction
Definition: rte_security.h:566
rte_security_pdcp_xform::hfn_threshold
uint32_t hfn_threshold
Definition: rte_security.h:284
rte_security_pdcp_xform::remove_duplicates
uint8_t remove_duplicates
Definition: rte_security.h:272
rte_security_capability::proto
enum rte_security_ipsec_sa_protocol proto
Definition: rte_security.h:562
rte_security_ipsec_sa_protocol
rte_security_ipsec_sa_protocol
Definition: rte_security.h:42
rte_security_pdcp_domain
rte_security_pdcp_domain
Definition: rte_security.h:232
rte_security_ipsec_tunnel_param::df
uint8_t df
Definition: rte_security.h:92
rte_crypto_sym_op
Definition: rte_crypto_sym.h:488
rte_security_capability_get
const struct rte_security_capability * rte_security_capability_get(struct rte_security_ctx *instance, struct rte_security_capability_idx *idx)
rte_security_session_get_size
unsigned int rte_security_session_get_size(struct rte_security_ctx *instance)
rte_security_ipsec_xform
Definition: rte_security.h:198
RTE_SECURITY_ACTION_TYPE_NONE
@ RTE_SECURITY_ACTION_TYPE_NONE
Definition: rte_security.h:300
RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT
@ RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT
Definition: rte_security.h:35
rte_security_attach_session
static int rte_security_attach_session(struct rte_crypto_op *op, struct rte_security_session *sess)
Definition: rte_security.h:490
rte_security_ipsec_tunnel_param::dst_ip
struct in_addr dst_ip
Definition: rte_security.h:88