aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/ikev2/ikev2.c
diff options
context:
space:
mode:
authorFilip Tehlar <ftehlar@cisco.com>2020-02-19 07:02:49 +0000
committerDamjan Marion <dmarion@me.com>2020-02-25 09:17:30 +0000
commitba4677063688beb62eb2f14e6c22ebbc92cce33d (patch)
tree2d979a549f388f6bbcf631f196bf6fbf3c6d20eb /src/plugins/ikev2/ikev2.c
parenta9d8cb494fb40a1fc4378cc8ced27b48b0ed62a6 (diff)
ikev2: add retry logic for session initiation
Type: improvement Change-Id: Ib474dabb745bc2034d8d60261c095e35a8fff277 Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'src/plugins/ikev2/ikev2.c')
-rw-r--r--src/plugins/ikev2/ikev2.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/ikev2/ikev2.c b/src/plugins/ikev2/ikev2.c
index dfa697fc714..55c9aa36255 100644
--- a/src/plugins/ikev2/ikev2.c
+++ b/src/plugins/ikev2/ikev2.c
@@ -3742,6 +3742,31 @@ ikev2_mngr_process_ipsec_sa (ipsec_sa_t * ipsec_sa)
}
}
+static void
+ikev2_process_pending_sa_init (ikev2_main_t * km)
+{
+ u32 sai;
+ u64 ispi;
+ ikev2_sa_t *sa;
+
+ /* *INDENT-OFF* */
+ hash_foreach (ispi, sai, km->sa_by_ispi,
+ ({
+ sa = pool_elt_at_index (km->sais, sai);
+ u32 bi0;
+ if (vlib_buffer_alloc (km->vlib_main, &bi0, 1) != 1)
+ return;
+
+ vlib_buffer_t * b = vlib_get_buffer (km->vlib_main, bi0);
+ clib_memcpy_fast (vlib_buffer_get_current (b),
+ sa->last_sa_init_req_packet_data,
+ vec_len (sa->last_sa_init_req_packet_data));
+ ikev2_send_ike (km->vlib_main, &sa->iaddr, &sa->raddr, bi0,
+ vec_len (sa->last_sa_init_req_packet_data));
+ }));
+ /* *INDENT-ON* */
+}
+
static vlib_node_registration_t ikev2_mngr_process_node;
static uword
@@ -3790,6 +3815,8 @@ ikev2_mngr_process_fn (vlib_main_t * vm, vlib_node_runtime_t * rt,
}));
/* *INDENT-ON* */
+ ikev2_process_pending_sa_init (km);
+
if (req_sent)
{
vlib_process_wait_for_event_or_clock (vm, 5);