FD.io VPP  v20.09-rc2-28-g3c5414029
Vector Packet Processing
ikev2_priv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef __included_ikev2_priv_h__
16 #define __included_ikev2_priv_h__
17 
18 #include <vnet/vnet.h>
19 #include <vnet/ip/ip.h>
20 #include <vnet/ethernet/ethernet.h>
21 
22 #include <plugins/ikev2/ikev2.h>
23 
24 #include <vppinfra/hash.h>
25 #include <vppinfra/elog.h>
26 #include <vppinfra/error.h>
27 
28 #include <openssl/rand.h>
29 #include <openssl/dh.h>
30 #include <openssl/hmac.h>
31 #include <openssl/evp.h>
32 
33 #define foreach_ikev2_log_level \
34  _(0x00, LOG_NONE) \
35  _(0x01, LOG_ERROR) \
36  _(0x02, LOG_WARNING) \
37  _(0x03, LOG_INFO) \
38  _(0x04, LOG_DEBUG) \
39  _(0x05, LOG_DETAIL) \
40 
41 
42 typedef enum ikev2_log_level_t_
43 {
44 #define _(n,f) IKEV2_##f = n,
46 #undef _
49 
50 /* dataplane logging */
51 #define _ikev2_elog(_level, _msg) \
52 do { \
53  ikev2_main_t *km = &ikev2_main; \
54  if (PREDICT_FALSE (km->log_level >= _level)) \
55  { \
56  ELOG_TYPE_DECLARE (e) = \
57  { \
58  .format = "ikev2 " _msg, \
59  .format_args = "", \
60  }; \
61  ELOG_DATA (&vlib_global_main.elog_main, e); \
62  } \
63 } while (0)
64 
65 #define ikev2_elog_sa_state(_format, _ispi) \
66 do { \
67  ikev2_main_t *km = &ikev2_main; \
68  if (PREDICT_FALSE (km->log_level >= IKEV2_LOG_DEBUG)) \
69  { \
70  ELOG_TYPE_DECLARE (e) = \
71  { \
72  .format = "ikev2: " _format, \
73  .format_args = "i8", \
74  }; \
75  CLIB_PACKED(struct \
76  { \
77  u64 ispi; \
78  }) *ed; \
79  ed = ELOG_DATA (&vlib_global_main.elog_main, e); \
80  ed->ispi = _ispi; \
81  } \
82 } while (0) \
83 
84 #define ikev2_elog_exchange(_format, _ispi, _rspi, _addr) \
85 do { \
86  ikev2_main_t *km = &ikev2_main; \
87  if (PREDICT_FALSE (km->log_level >= IKEV2_LOG_DEBUG)) \
88  { \
89  ELOG_TYPE_DECLARE (e) = \
90  { \
91  .format = "ikev2: " _format, \
92  .format_args = "i8i8i1i1i1i1", \
93  }; \
94  CLIB_PACKED(struct \
95  { \
96  u64 ispi; \
97  u64 rspi; \
98  u8 oct1; \
99  u8 oct2; \
100  u8 oct3; \
101  u8 oct4; \
102  }) *ed; \
103  ed = ELOG_DATA (&vlib_global_main.elog_main, e); \
104  ed->ispi = _ispi; \
105  ed->rspi = _rspi; \
106  ed->oct4 = (_addr) >> 24; \
107  ed->oct3 = (_addr) >> 16; \
108  ed->oct2 = (_addr) >> 8; \
109  ed->oct1 = (_addr); \
110  } \
111 } while (0) \
112 
113 #define ikev2_elog_uint(_level, _format, _val) \
114 do { \
115  ikev2_main_t *km = &ikev2_main; \
116  if (PREDICT_FALSE (km->log_level >= _level)) \
117  { \
118  ELOG_TYPE_DECLARE (e) = \
119  { \
120  .format = "ikev2: " _format, \
121  .format_args = "i8", \
122  }; \
123  CLIB_PACKED(struct \
124  { \
125  u64 val; \
126  }) *ed; \
127  ed = ELOG_DATA (&vlib_global_main.elog_main, e); \
128  ed->val = _val; \
129  } \
130 } while (0)
131 
132 #define ikev2_elog_uint_peers(_level, _format, _val, _ip1, _ip2) \
133 do { \
134  ikev2_main_t *km = &ikev2_main; \
135  if (PREDICT_FALSE (km->log_level >= _level)) \
136  { \
137  ELOG_TYPE_DECLARE (e) = \
138  { \
139  .format = "ikev2: " _format, \
140  .format_args = "i8i1i1i1i1i1i1i1i1", \
141  }; \
142  CLIB_PACKED(struct { \
143  u64 val; \
144  u8 i11; u8 i12; u8 i13; u8 i14; \
145  u8 i21; u8 i22; u8 i23; u8 i24; }) *ed; \
146  ed = ELOG_DATA (&vlib_global_main.elog_main, e); \
147  ed->val = _val; \
148  ed->i14 = (_ip1) >> 24; \
149  ed->i13 = (_ip1) >> 16; \
150  ed->i12 = (_ip1) >> 8; \
151  ed->i11 = (_ip1); \
152  ed->i24 = (_ip2) >> 24; \
153  ed->i23 = (_ip2) >> 16; \
154  ed->i22 = (_ip2) >> 8; \
155  ed->i21 = (_ip2); \
156  } \
157 } while (0)
158 
159 #define ikev2_elog_peers(_level, _format, _ip1, _ip2) \
160 do { \
161  ikev2_main_t *km = &ikev2_main; \
162  if (PREDICT_FALSE (km->log_level >= _level)) \
163  { \
164  ELOG_TYPE_DECLARE (e) = \
165  { \
166  .format = "ikev2: " _format, \
167  .format_args = "i1i1i1i1i1i1i1i1", \
168  }; \
169  CLIB_PACKED(struct { \
170  u8 i11; u8 i12; u8 i13; u8 i14; \
171  u8 i21; u8 i22; u8 i23; u8 i24; }) *ed; \
172  ed = ELOG_DATA (&vlib_global_main.elog_main, e); \
173  ed->i14 = (_ip1) >> 24; \
174  ed->i13 = (_ip1) >> 16; \
175  ed->i12 = (_ip1) >> 8; \
176  ed->i11 = (_ip1); \
177  ed->i24 = (_ip2) >> 24; \
178  ed->i23 = (_ip2) >> 16; \
179  ed->i22 = (_ip2) >> 8; \
180  ed->i21 = (_ip2); \
181  } \
182 } while (0)
183 
184 #define ikev2_elog_error(_msg) \
185  _ikev2_elog(IKEV2_LOG_ERROR, "[error] " _msg)
186 #define ikev2_elog_warning(_msg) \
187  _ikev2_elog(IKEV2_LOG_WARNING, "[warning] " _msg)
188 #define ikev2_elog_debug(_msg) \
189  _ikev2_elog(IKEV2_LOG_DEBUG, "[debug] " _msg)
190 #define ikev2_elog_detail(_msg) \
191  _ikev2_elog(IKEV2_LOG_DETAIL, "[detail] " _msg)
192 
193 /* logging for main thread */
194 #define ikev2_log_error(...) \
195  vlib_log(VLIB_LOG_LEVEL_ERR, ikev2_main.log_class, __VA_ARGS__)
196 #define ikev2_log_warning(...) \
197  vlib_log(VLIB_LOG_LEVEL_WARNING, ikev2_main.log_class, __VA_ARGS__)
198 #define ikev2_log_debug(...) \
199  vlib_log(VLIB_LOG_LEVEL_DEBUG, ikev2_main.log_class, __VA_ARGS__)
200 
201 typedef enum
202 {
211 } ikev2_state_t;
212 
213 typedef struct
214 {
217  u8 hex; /* hex encoding of the shared secret */
218  EVP_PKEY *key;
219 } ikev2_auth_t;
220 
221 typedef enum
222 {
226 
227 typedef struct
228 {
230  union
231  {
238  };
244  int nid;
245  const char *dh_p;
246  const char *dh_g;
247  const void *md;
248  const void *cipher;
250 
251 typedef struct
252 {
258 
259 typedef struct
260 {
268 } ikev2_ts_t;
269 
270 typedef struct
271 {
275 
276 typedef struct
277 {
283 
284 
285 typedef struct
286 {
289 } ikev2_id_t;
290 
291 typedef struct
292 {
293  /* sa proposals vectors */
296 
297  /* Traffic Selectors */
300 
301  /* keys */
308 
309  /* installed data */
312 
313  /* lifetime data */
318 
319 typedef struct
320 {
322  u32 spi; /*for ESP and AH SPI size is 4, for IKE size is 0 */
324 
325 typedef struct
326 {
334 } ikev2_rekey_t;
335 
336 typedef struct
337 {
343 
344 typedef struct
345 {
347 
361 
365 
366 typedef struct
367 {
377 
378  /* DH data */
384 
385  /* sa proposals vectors */
388 
389  /* keys */
397 
398  /* auth */
401 
402  /* ID */
405 
406  /* pending deletes */
408 
409  /* pending rekeyings */
411 
412  /* packet data */
415 
416  /* retransmit */
419 
427 
433 
435 
438 
441 
442  /* is NAT traversal mode */
445 } ikev2_sa_t;
446 
447 
448 typedef struct
449 {
450  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
451 
452  /* pool of IKEv2 Security Associations */
454 
455  /* hash */
457 
458  EVP_CIPHER_CTX *evp_ctx;
459  HMAC_CTX *hmac_ctx;
460 #if OPENSSL_VERSION_NUMBER < 0x10100000L
461  HMAC_CTX _hmac_ctx;
462  EVP_CIPHER_CTX _evp_ctx;
463 #endif
465 
466 typedef struct
467 {
468  /* pool of IKEv2 profiles */
470 
471  /* vector of supported transform types */
473 
474  /* hash */
476 
477  /* local private key */
478  EVP_PKEY *pkey;
479 
480  /* convenience */
483 
484  /* pool of IKEv2 Security Associations created in initiator mode */
486  /* hash */
488 
490 
491  /* interface indices managed by IKE */
493 
494  /* API message ID base */
496 
497  /* log class used for main thread */
499 
500  /* logging level */
502 
503  /* custom ipsec-over-udp ports managed by ike */
505 
506  /* how often a liveness check will be performed */
508 
509  /* max number of retries before considering peer dead */
511 } ikev2_main_t;
512 
513 extern ikev2_main_t ikev2_main;
514 
518 
519 /* ikev2_crypto.c */
522  int len);
524  int len);
526  ikev2_sa_transform_t * tr_encr, u8 * data, int len);
528  ikev2_sa_transform_t * tr_encr, v8 * src, u8 * dst);
530  ikev2_sa_t * sa, ikev2_sa_transform_t * tr_encr,
531  v8 * src, u8 * dst, u8 * aad,
532  u32 aad_len, u8 * tag);
534  ikev2_sa_t * sa, ikev2_sa_transform_t * tr_encr,
535  u8 * data, int data_len, u8 * aad, u32 aad_len,
536  u8 * tag);
539 int ikev2_verify_sign (EVP_PKEY * pkey, u8 * sigbuf, u8 * data);
540 u8 *ikev2_calc_sign (EVP_PKEY * pkey, u8 * data);
541 EVP_PKEY *ikev2_load_cert_file (u8 * file);
542 EVP_PKEY *ikev2_load_key_file (u8 * file);
543 void ikev2_crypto_init (ikev2_main_t * km);
544 
545 /* ikev2_payload.c */
546 typedef struct
547 {
552 
553 #define ikev2_payload_new_chain(V) vec_validate (V, 0)
554 #define ikev2_payload_destroy_chain(V) do { \
555  vec_free((V)->data); \
556  vec_free(V); \
557 } while (0)
558 
560  u8 * data);
562  u8 * data, ikev2_notify_t * notify);
564  ikev2_sa_proposal_t * proposals);
566  u8 * dh_data);
569  u8 type);
572  u8 type);
575 void ikev2_parse_vendor_payload (ike_payload_header_t * ikep);
576 ikev2_sa_proposal_t *ikev2_parse_sa_payload (ike_payload_header_t * ikep);
577 ikev2_ts_t *ikev2_parse_ts_payload (ike_payload_header_t * ikep);
578 ikev2_delete_t *ikev2_parse_delete_payload (ike_payload_header_t * ikep);
579 ikev2_notify_t *ikev2_parse_notify_payload (ike_payload_header_t * ikep);
581 
584 {
585  u32 thread_index = vlib_get_thread_index ();
586  return vec_elt_at_index (ikev2_main.per_thread_data, thread_index);
587 }
588 #endif /* __included_ikev2_priv_h__ */
589 
590 
591 /*
592  * fd.io coding-style-patch-verification: ON
593  *
594  * Local Variables:
595  * eval: (c-set-style "gnu")
596  * End:
597  */
ikev2_main_per_thread_data_t * per_thread_data
Definition: ikev2_priv.h:489
u32 liveness_period
Definition: ikev2_priv.h:507
u8 * dh_shared_key
Definition: ikev2_priv.h:380
ikev2_sa_t * sais
Definition: ikev2_priv.h:485
Definition: mhash.h:46
u8 * dh_private_key
Definition: ikev2_priv.h:381
ikev2_transform_type_t type
Definition: ikev2_priv.h:229
void ikev2_payload_add_sa(ikev2_payload_chain_t *c, ikev2_sa_proposal_t *proposals)
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition: cache.h:60
ikev2_id_t r_id
Definition: ikev2_priv.h:404
ikev2_id_type_t type
Definition: ikev2_priv.h:287
ikev2_transforms_set ike_ts
Definition: ikev2_priv.h:354
u32 old_remote_id
Definition: ikev2_priv.h:430
void ikev2_payload_add_notify(ikev2_payload_chain_t *c, u16 msg_type, u8 *data)
ikev2_transform_integ_type_t
Definition: ikev2.h:276
u16 dst_port
Definition: ikev2_priv.h:439
EVP_PKEY * pkey
Definition: ikev2_priv.h:478
int ikev2_encrypt_aead_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, v8 *src, u8 *dst, u8 *aad, u32 aad_len, u8 *tag)
Definition: ikev2_crypto.c:419
u8 * ikev2_calc_prfplus(ikev2_sa_transform_t *tr, u8 *key, u8 *seed, int len)
Definition: ikev2_crypto.c:274
ikev2_auth_method_t
Definition: ikev2.h:348
u32 last_init_msg_id
Definition: ikev2_priv.h:421
ikev2_sa_transform_t * ikev2_sa_get_td_for_type(ikev2_sa_proposal_t *p, ikev2_transform_type_t type)
Definition: ikev2.c:214
ikev2_transform_dh_type_t dh_type
Definition: ikev2_priv.h:280
vl_api_ikev2_auth_t auth
Definition: ikev2_types.api:87
ikev2_profile_t * profiles
Definition: ikev2_priv.h:469
unsigned long u64
Definition: types.h:89
u8 v8
Definition: ikev2.h:33
u32 current_remote_id_mask
Definition: ikev2_priv.h:429
ikev2_transform_esn_type_t esn_type
Definition: ikev2_priv.h:237
ikev2_state_t state
Definition: ikev2_priv.h:368
vl_api_address_t src
Definition: gre.api:54
ikev2_transform_encr_type_t crypto_alg
Definition: ikev2_priv.h:278
u8 * sk_pi
Definition: ikev2_priv.h:395
ikev2_main_t ikev2_main
Definition: ikev2.c:36
ip4_address_t ip4
Definition: ikev2_priv.h:273
u8 initial_contact
Definition: ikev2_priv.h:370
ikev2_ts_t * tsi
Definition: ikev2_priv.h:332
void ikev2_payload_add_id(ikev2_payload_chain_t *c, ikev2_id_t *id, u8 type)
ikev2_auth_t r_auth
Definition: ikev2_priv.h:400
u8 dh_group
Definition: ikev2_types.api:60
u16 ipsec_over_udp_port
Definition: ikev2_priv.h:360
u8 * last_sa_init_res_packet_data
Definition: ikev2_priv.h:414
unsigned char u8
Definition: types.h:56
u8 init_response_received
Definition: ikev2_priv.h:432
u8 data[128]
Definition: ipsec_types.api:89
ikev2_auth_t auth
Definition: ikev2_priv.h:348
double f64
Definition: types.h:142
ikev2_ts_t * tsr
Definition: ikev2_priv.h:333
ikev2_ts_t * ikev2_parse_ts_payload(ike_payload_header_t *ikep)
ikev2_id_t rem_id
Definition: ikev2_priv.h:350
ikev2_transform_dh_type_t
Definition: ikev2.h:326
log_level
Definition: vpe_types.api:32
EVP_PKEY * ikev2_load_cert_file(u8 *file)
Definition: ikev2_crypto.c:809
void ikev2_payload_add_ts(ikev2_payload_chain_t *c, ikev2_ts_t *ts, u8 type)
u32 vlib_log_class_t
Definition: vlib.h:51
u32 last_msg_id
Definition: ikev2_priv.h:417
#define static_always_inline
Definition: clib.h:108
ikev2_sa_proposal_t * r_proposals
Definition: ikev2_priv.h:295
u32 liveness_max_retries
Definition: ikev2_priv.h:510
ip4_address_t start_addr
Definition: ikev2_priv.h:266
u16 selector_len
Definition: ikev2_priv.h:263
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
EVP_PKEY * ikev2_load_key_file(u8 *file)
Definition: ikev2_crypto.c:840
ikev2_sa_proposal_t * i_proposals
Definition: ikev2_priv.h:386
uword * sw_if_indices
Definition: ikev2_priv.h:492
int ikev2_verify_sign(EVP_PKEY *pkey, u8 *sigbuf, u8 *data)
Definition: ikev2_crypto.c:746
ikev2_transform_integ_type_t integ_alg
Definition: ikev2_priv.h:279
unsigned int u32
Definition: types.h:88
ikev2_auth_t i_auth
Definition: ikev2_priv.h:399
v8 * ikev2_decrypt_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, u8 *data, int len)
Definition: ikev2_crypto.c:393
ikev2_id_t loc_id
Definition: ikev2_priv.h:349
ikev2_sa_transform_t * transforms
Definition: ikev2_priv.h:256
u8 * sk_ar
Definition: ikev2_priv.h:392
u8 * r_dh_data
Definition: ikev2_priv.h:383
ikev2_responder_t responder
Definition: ikev2_priv.h:353
vl_api_fib_path_type_t type
Definition: fib_types.api:123
u8 * last_sa_init_req_packet_data
Definition: ikev2_priv.h:413
int ikev2_set_log_level(ikev2_log_level_t log_level)
Definition: ikev2.c:4192
ikev2_ts_t rem_ts
Definition: ikev2_priv.h:352
u8 * i_dh_data
Definition: ikev2_priv.h:382
unsigned short u16
Definition: types.h:57
ikev2_sa_proposal_t * i_proposals
Definition: ikev2_priv.h:294
u8 data_len
Definition: ikev2_types.api:24
EVP_CIPHER_CTX * evp_ctx
Definition: ikev2_priv.h:458
u8 * r_nonce
Definition: ikev2_priv.h:376
mhash_t profile_index_by_name
Definition: ikev2_priv.h:475
u16 end_port
Definition: ikev2_priv.h:265
ikev2_sa_transform_t * supported_transforms
Definition: ikev2_priv.h:472
ikev2_rekey_t * rekey
Definition: ikev2_priv.h:410
void ikev2_payload_chain_add_padding(ikev2_payload_chain_t *c, int bs)
static_always_inline ikev2_main_per_thread_data_t * ikev2_get_per_thread_data()
Definition: ikev2_priv.h:583
signed char i8
Definition: types.h:45
ikev2_protocol_id_t
Definition: ikev2.h:115
vl_api_address_t dst
Definition: gre.api:55
ip4_address_t end_addr
Definition: ikev2_priv.h:267
ip4_address_t iaddr
Definition: ikev2_priv.h:371
u8 * ikev2_calc_sign(EVP_PKEY *pkey, u8 *data)
Definition: ikev2_crypto.c:775
v8 * ikev2_calc_prf(ikev2_sa_transform_t *tr, v8 *key, v8 *data)
Definition: ikev2_crypto.c:257
u8 * i_nonce
Definition: ikev2_priv.h:375
u8 len
Definition: ip_types.api:92
u8 * sk_ei
Definition: ikev2_priv.h:393
u8 old_remote_id_present
Definition: ikev2_priv.h:431
ikev2_delete_t * ikev2_parse_delete_payload(ike_payload_header_t *ikep)
The fine-grained event logger allows lightweight, thread-safe event logging at minimum cost...
u32 sw_if_index
Definition: ikev2_priv.h:440
ikev2_transform_dh_type_t dh_type
Definition: ikev2_priv.h:236
svmdb_client_t * c
static_always_inline uword vlib_get_thread_index(void)
Definition: threads.h:219
ikev2_sa_proposal_t * ikev2_parse_sa_payload(ike_payload_header_t *ikep)
ikev2_auth_method_t method
Definition: ikev2_priv.h:215
ikev2_transform_encr_type_t
Definition: ikev2.h:235
ikev2_delete_t * del
Definition: ikev2_priv.h:407
ikev2_ts_t * tsi
Definition: ikev2_priv.h:298
void ikev2_payload_add_nonce(ikev2_payload_chain_t *c, u8 *nonce)
ip4_address_t raddr
Definition: ikev2_priv.h:372
uword * udp_ports
Definition: ikev2_priv.h:504
u8 * sk_er
Definition: ikev2_priv.h:394
u8 is_initiator
Definition: ikev2_priv.h:420
const void * cipher
Definition: ikev2_priv.h:248
ikev2_ts_t loc_ts
Definition: ikev2_priv.h:351
ikev2_sa_proposal_t * r_proposals
Definition: ikev2_priv.h:387
f64 old_id_expiration
Definition: ikev2_priv.h:428
enum ikev2_log_level_t_ ikev2_log_level_t
ikev2_protocol_id_t protocol_id
Definition: ikev2_priv.h:254
u8 protocol_id
Definition: ikev2_priv.h:262
vnet_main_t * vnet_main
Definition: ikev2_priv.h:482
ikev2_id_type_t
Definition: ikev2.h:364
ikev2_notify_t * ikev2_parse_notify_payload(ike_payload_header_t *ikep)
f64 liveness_period_check
Definition: ikev2_priv.h:437
void ikev2_complete_dh(ikev2_sa_t *sa, ikev2_sa_transform_t *t)
Definition: ikev2_crypto.c:639
ikev2_transform_esn_type_t
Definition: ikev2.h:337
ikev2_sa_proposal_t * r_proposal
Definition: ikev2_priv.h:331
u8 * ikev2_decrypt_aead_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, u8 *data, int data_len, u8 *aad, u32 aad_len, u8 *tag)
Definition: ikev2_crypto.c:353
u8 * sk_ai
Definition: ikev2_priv.h:391
v8 * ikev2_calc_integr(ikev2_sa_transform_t *tr, v8 *key, u8 *data, int len)
Definition: ikev2_crypto.c:316
u16 dh_group
Definition: ikev2_priv.h:379
u8 is_tun_itf_set
Definition: ikev2_priv.h:423
ikev2_log_level_t log_level
Definition: ikev2_priv.h:501
ikev2_sa_proposal_t * i_proposal
Definition: ikev2_priv.h:330
const char * dh_p
Definition: ikev2_priv.h:245
EVP_PKEY * key
Definition: ikev2_priv.h:218
u8 liveness_retries
Definition: ikev2_priv.h:436
ikev2_dh_group_t
Definition: ikev2_priv.h:221
const void * md
Definition: ikev2_priv.h:247
void ikev2_crypto_init(ikev2_main_t *km)
Definition: ikev2_crypto.c:862
typedef key
Definition: ipsec_types.api:85
ikev2_transform_encr_type_t encr_type
Definition: ikev2_priv.h:233
u8 * last_res_packet_data
Definition: ikev2_priv.h:418
const char * dh_g
Definition: ikev2_priv.h:246
ikev2_transform_integ_type_t integ_type
Definition: ikev2_priv.h:235
void ikev2_payload_add_auth(ikev2_payload_chain_t *c, ikev2_auth_t *auth)
u16 start_port
Definition: ikev2_priv.h:264
void ikev2_payload_add_ke(ikev2_payload_chain_t *c, u16 dh_group, u8 *dh_data)
u8 * sk_pr
Definition: ikev2_priv.h:396
u64 uword
Definition: types.h:112
ikev2_id_t i_id
Definition: ikev2_priv.h:403
ikev2_ts_t * tsr
Definition: ikev2_priv.h:299
void ikev2_payload_add_notify_2(ikev2_payload_chain_t *c, u16 msg_type, u8 *data, ikev2_notify_t *notify)
ikev2_child_sa_t * childs
Definition: ikev2_priv.h:434
vlib_log_class_t log_class
Definition: ikev2_priv.h:498
ikev2_transform_prf_type_t prf_type
Definition: ikev2_priv.h:234
void ikev2_parse_vendor_payload(ike_payload_header_t *ikep)
void ikev2_payload_add_delete(ikev2_payload_chain_t *c, ikev2_delete_t *d)
ikev2_transform_prf_type_t
Definition: ikev2.h:252
uword * sa_by_ispi
Definition: ikev2_priv.h:487
u8 unsupported_cp
Definition: ikev2_priv.h:369
void ikev2_sa_free_proposal_vector(ikev2_sa_proposal_t **v)
Definition: ikev2.c:247
u32 profile_index
Definition: ikev2_priv.h:422
#define foreach_ikev2_log_level
Definition: ikev2_priv.h:33
ikev2_transform_type_t
Definition: ikev2.h:211
ikev2_transforms_set esp_ts
Definition: ikev2_priv.h:355
ikev2_log_level_t_
Definition: ikev2_priv.h:42
void ikev2_generate_dh(ikev2_sa_t *sa, ikev2_sa_transform_t *t)
Definition: ikev2_crypto.c:491
vlib_main_t * vlib_main
Definition: ikev2_priv.h:481
u8 keys_generated
Definition: ikev2_priv.h:444
int ikev2_encrypt_data(ikev2_main_per_thread_data_t *ptd, ikev2_sa_t *sa, ikev2_sa_transform_t *tr_encr, v8 *src, u8 *dst)
Definition: ikev2_crypto.c:448
u16 ipsec_over_udp_port
Definition: ikev2_priv.h:426
ikev2_state_t
Definition: ikev2_priv.h:201