DPDK  17.11.0
rte_security.h
Go to the documentation of this file.
1 /*-
2  * BSD LICENSE
3  *
4  * Copyright 2017 NXP.
5  * Copyright(c) 2017 Intel Corporation. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  * * Neither the name of NXP nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #ifndef _RTE_SECURITY_H_
35 #define _RTE_SECURITY_H_
36 
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48 
49 #include <sys/types.h>
50 
51 #include <netinet/in.h>
52 #include <netinet/ip.h>
53 #include <netinet/ip6.h>
54 
55 #include <rte_common.h>
56 #include <rte_crypto.h>
57 #include <rte_mbuf.h>
58 #include <rte_memory.h>
59 #include <rte_mempool.h>
60 
67 };
68 
75 };
76 
83 };
84 
95  void *device;
99  uint16_t sess_cnt;
101 };
102 
112  union {
113  struct {
114  struct in_addr src_ip;
116  struct in_addr dst_ip;
118  uint8_t dscp;
120  uint8_t df;
122  uint8_t ttl;
124  } ipv4;
126  struct {
127  struct in6_addr src_addr;
129  struct in6_addr dst_addr;
131  uint8_t dscp;
133  uint32_t flabel;
135  uint8_t hlimit;
137  } ipv6;
139  };
140 };
141 
151  uint32_t esn : 1;
152 
159  uint32_t udp_encap : 1;
160 
168  uint32_t copy_dscp : 1;
169 
176  uint32_t copy_flabel : 1;
177 
184  uint32_t copy_df : 1;
185 
193  uint32_t dec_ttl : 1;
194 };
195 
202 };
203 
210  uint32_t spi;
212  uint32_t salt;
224 };
225 
231 };
232 
251 };
252 
259 };
260 
270  union {
271  struct rte_security_ipsec_xform ipsec;
272  struct rte_security_macsec_xform macsec;
273  };
277 };
278 
279 struct rte_security_session {
280  void *sess_private_data;
282 };
283 
294 struct rte_security_session *
296  struct rte_security_session_conf *conf,
297  struct rte_mempool *mp);
298 
309 int
311  struct rte_security_session *sess,
312  struct rte_security_session_conf *conf);
313 
326 int
328  struct rte_security_session *sess);
329 
343 int
345  struct rte_security_session *sess,
346  struct rte_mbuf *mb, void *params);
347 
354 static inline int
356  struct rte_security_session *sess)
357 {
358  sym_op->sec_session = sess;
359 
360  return 0;
361 }
362 
363 static inline void *
364 get_sec_session_private_data(const struct rte_security_session *sess)
365 {
366  return sess->sess_private_data;
367 }
368 
369 static inline void
370 set_sec_session_private_data(struct rte_security_session *sess,
371  void *private_data)
372 {
373  sess->sess_private_data = private_data;
374 }
375 
385 static inline int
387  struct rte_security_session *sess)
388 {
390  return -EINVAL;
391 
393 
394  return __rte_security_attach_session(op->sym, sess);
395 }
396 
397 struct rte_security_macsec_stats {
398  uint64_t reserved;
399 };
400 
401 struct rte_security_ipsec_stats {
402  uint64_t reserved;
403 
404 };
405 
406 struct rte_security_stats {
407  enum rte_security_session_protocol protocol;
411  union {
412  struct rte_security_macsec_stats macsec;
413  struct rte_security_ipsec_stats ipsec;
414  };
415 };
416 
427 int
429  struct rte_security_session *sess,
430  struct rte_security_stats *stats);
431 
441  union {
442  struct {
451  } ipsec;
453  struct {
454  /* To be Filled */
455  } macsec;
457  };
458 
462  uint32_t ol_flags;
464 };
465 
466 #define RTE_SECURITY_TX_OLOAD_NEED_MDATA 0x00000001
467 
470 #define RTE_SECURITY_TX_HW_TRAILER_OFFLOAD 0x00000002
471 
476 #define RTE_SECURITY_RX_HW_TRAILER_OFFLOAD 0x00010000
477 
489  enum rte_security_session_protocol protocol;
490 
492  union {
493  struct {
495  enum rte_security_ipsec_sa_mode mode;
496  enum rte_security_ipsec_sa_direction direction;
497  } ipsec;
498  };
499 };
500 
510 const struct rte_security_capability *
512 
524 const struct rte_security_capability *
526  struct rte_security_capability_idx *idx);
527 
528 #ifdef __cplusplus
529 }
530 #endif
531 
532 #endif /* _RTE_SECURITY_H_ */
rte_security_ipsec_sa_protocol
Definition: rte_security.h:70
static int rte_security_attach_session(struct rte_crypto_op *op, struct rte_security_session *sess)
Definition: rte_security.h:386
rte_security_session_action_type
Definition: rte_security.h:236
enum rte_security_ipsec_sa_direction direction
Definition: rte_security.h:216
int rte_security_session_destroy(struct rte_security_ctx *instance, struct rte_security_session *sess)
int rte_security_set_pkt_metadata(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_mbuf *mb, void *params)
struct rte_security_session * sec_session
struct rte_security_ipsec_tunnel_param tunnel
Definition: rte_security.h:222
struct rte_security_ipsec_sa_options options
Definition: rte_security.h:214
enum rte_security_session_action_type action
Definition: rte_security.h:436
uint8_t type
Definition: rte_crypto.h:104
struct rte_crypto_sym_xform * crypto_xform
Definition: rte_security.h:275
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_mode
Definition: rte_security.h:62
uint16_t sess_cnt
Definition: rte_security.h:99
static int __rte_security_attach_session(struct rte_crypto_sym_op *sym_op, struct rte_security_session *sess)
Definition: rte_security.h:355
struct rte_security_ops * ops
Definition: rte_security.h:97
struct rte_security_capability * rte_security_capabilities_get(struct rte_security_ctx *instance)
rte_security_ipsec_sa_direction
Definition: rte_security.h:197
rte_security_ipsec_tunnel_type
Definition: rte_security.h:78
struct rte_security_capability::@149::@152 macsec
#define unlikely(x)
enum rte_security_session_protocol protocol
Definition: rte_security.h:267
enum rte_security_session_action_type action_type
Definition: rte_security.h:265
struct rte_security_capability * rte_security_capability_get(struct rte_security_ctx *instance, struct rte_security_capability_idx *idx)
struct rte_security_ipsec_tunnel_param::@141::@144 ipv6
struct rte_security_ipsec_sa_options options
Definition: rte_security.h:449
struct rte_cryptodev_capabilities * crypto_capabilities
Definition: rte_security.h:459
struct rte_security_ipsec_tunnel_param::@141::@143 ipv4
enum rte_security_ipsec_sa_protocol proto
Definition: rte_security.h:218
enum rte_security_ipsec_sa_direction direction
Definition: rte_security.h:447
struct rte_security_capability::@149::@151 ipsec
#define RTE_STD_C11
Definition: rte_common.h:64
int rte_security_session_stats_get(struct rte_security_ctx *instance, struct rte_security_session *sess, struct rte_security_stats *stats)
enum rte_security_ipsec_sa_protocol proto
Definition: rte_security.h:443
enum rte_security_ipsec_sa_mode mode
Definition: rte_security.h:445
enum rte_security_ipsec_sa_mode mode
Definition: rte_security.h:220
enum rte_security_ipsec_tunnel_type type
Definition: rte_security.h:109
uint8_t sess_type
Definition: rte_crypto.h:113
rte_security_session_protocol
Definition: rte_security.h:254
struct rte_security_session * rte_security_session_create(struct rte_security_ctx *instance, struct rte_security_session_conf *conf, struct rte_mempool *mp)
enum rte_security_session_protocol protocol
Definition: rte_security.h:438
struct rte_crypto_sym_op sym[0]
Definition: rte_crypto.h:126