Fixes for buliding for 32bit targets:
[vpp.git] / src / plugins / ipsecmb / ipsecmb.h
1 #ifndef __included_ipsecmb_h__
2 #define __included_ipsecmb_h__
3
4 #include <vppinfra/types.h>
5 #include <vppinfra/vec.h>
6 #include <vppinfra/clib.h>
7 #include <vppinfra/warnings.h>
8 #include <vnet/ipsec/ipsec.h>
9
10 WARN_OFF (attributes);
11
12 #ifdef always_inline
13 #undef always_inline
14 #define __need_redefine__
15 #endif
16
17 #include <intel-ipsec-mb.h>
18
19 #ifdef __need_redefine__
20 #if CLIB_DEBUG > 0
21 #define always_inline static inline
22 #else
23 #define always_inline static inline __attribute__ ((__always_inline__))
24 #endif
25 #endif // __need_redefine__
26 WARN_ON (attributes);
27
28 typedef struct
29 {
30   keyexp_t keyexp_fn;
31   JOB_CIPHER_MODE cipher_mode;
32   u8 key_len;
33   u8 iv_size;
34   u8 block_size;
35 } ipsecmb_crypto_alg_t;
36
37 typedef struct
38 {
39   hash_one_block_t hash_one_block_fn;
40   u8 block_size;
41   JOB_HASH_ALG hash_alg;
42   u8 hash_output_length;
43 } ipsecmb_integ_alg_t;
44
45 typedef struct
46 {
47   u8 aes_enc_key_expanded[16 * 15] __attribute__ ((aligned (16)));
48   u8 aes_dec_key_expanded[16 * 15] __attribute__ ((aligned (16)));
49   u8 ipad_hash[256] __attribute__ ((aligned (16)));
50   u8 opad_hash[256] __attribute__ ((aligned (16)));
51 } ipsecmb_sa_t;
52
53 typedef struct
54 {
55   u8 data[16];
56 } random_bytes_t;
57
58 typedef u8 urandom_buffer_t[4096];
59
60 typedef struct
61 {
62   /** read buffer for random data from /dev/urandom */
63   urandom_buffer_t urandom_buffer;
64   /** pool of all the random_bytes_t objects ever allocated */
65   random_bytes_t *rb_pool;
66   /** vector of random_bytes_t objects containing random bytes */
67   u32 *rb_from_dev_urandom;
68   /** vector of used random_bytes_t objects */
69   u32 *rb_recycle_list;
70   /** vector of random bytes collected from encrypted data */
71   u32 *rb_from_traffic;
72 } ipsecmb_per_thread_data_t;
73
74 typedef struct
75 {
76   ipsecmb_crypto_alg_t *crypto_algs;
77   ipsecmb_integ_alg_t *integ_algs;
78   MB_MGR **mb_mgr;
79   ipsecmb_sa_t *sad;
80   ipsecmb_per_thread_data_t *per_thread_data;
81   int dev_urandom_fd;
82 } ipsecmb_main_t;
83
84 extern ipsecmb_main_t ipsecmb_main;
85
86 #define P(x,y) x ## _ ## y
87 #define E(x,y) P(x,y)
88 #define IPSECMB_FUNC(f) E(f,CLIB_MARCH_VARIANT)
89 /*
90  * fd.io coding-style-patch-verification: ON
91  *
92  * Local Variables:
93  * eval: (c-set-style "gnu")
94  * End:
95  */
96
97 #endif /* __included_ipsecmb_h__ */