summaryrefslogtreecommitdiffstats
path: root/extras/strongswan/vpp_sswan/kernel_vpp_net.c
diff options
context:
space:
mode:
Diffstat (limited to 'extras/strongswan/vpp_sswan/kernel_vpp_net.c')
-rw-r--r--extras/strongswan/vpp_sswan/kernel_vpp_net.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/extras/strongswan/vpp_sswan/kernel_vpp_net.c b/extras/strongswan/vpp_sswan/kernel_vpp_net.c
index 85e2768450d..82eea1794f6 100644
--- a/extras/strongswan/vpp_sswan/kernel_vpp_net.c
+++ b/extras/strongswan/vpp_sswan/kernel_vpp_net.c
@@ -159,18 +159,29 @@ manage_route (private_kernel_vpp_net_t *this, bool add, chunk_t dst,
vl_api_fib_path_t *apath;
bool exists = FALSE;
- this->mutex->lock (this->mutex);
- enumerator = this->ifaces->create_enumerator (this->ifaces);
- while (enumerator->enumerate (enumerator, &entry))
+ for (int i = 0; i < N_RETRY_GET_IF; i++)
{
- if (streq (name, entry->if_name))
+ this->mutex->lock (this->mutex);
+ enumerator = this->ifaces->create_enumerator (this->ifaces);
+ while (enumerator->enumerate (enumerator, &entry))
{
- exists = TRUE;
- break;
+ if (streq (name, entry->if_name))
+ {
+ exists = TRUE;
+ break;
+ }
}
+ enumerator->destroy (enumerator);
+ this->mutex->unlock (this->mutex);
+
+ if (!exists)
+ {
+ DBG1 (DBG_NET, "if_name %s not found", name);
+ sleep (1);
+ }
+ else
+ break;
}
- enumerator->destroy (enumerator);
- this->mutex->unlock (this->mutex);
if (!exists)
{