aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/strongswan/vpp_sswan/kernel_vpp_ipsec.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/extras/strongswan/vpp_sswan/kernel_vpp_ipsec.c b/extras/strongswan/vpp_sswan/kernel_vpp_ipsec.c
index 38d39512b31..a48bd573938 100644
--- a/extras/strongswan/vpp_sswan/kernel_vpp_ipsec.c
+++ b/extras/strongswan/vpp_sswan/kernel_vpp_ipsec.c
@@ -669,10 +669,14 @@ get_sw_if_index (char *interface)
{
char *out = NULL;
int out_len, name_filter_len = 0, msg_len = 0;
- vl_api_sw_interface_dump_t *mp;
- vl_api_sw_interface_details_t *rmp;
+ int num, i;
+ vl_api_sw_interface_dump_t *mp = NULL;
+ vl_api_sw_interface_details_t *rmp = NULL;
uint32_t sw_if_index = ~0;
+ if (interface == NULL)
+ goto error;
+
name_filter_len = strlen (interface);
msg_len = sizeof (*mp) + name_filter_len;
mp = vl_msg_api_alloc (msg_len);
@@ -683,7 +687,7 @@ get_sw_if_index (char *interface)
mp->name_filter.length = htonl (name_filter_len);
memcpy ((char *) mp->name_filter.buf, interface, name_filter_len);
- if (vac->send (vac, (char *) mp, msg_len, &out, &out_len))
+ if (vac->send_dump (vac, (char *) mp, msg_len, &out, &out_len))
{
goto error;
}
@@ -691,14 +695,27 @@ get_sw_if_index (char *interface)
{
goto error;
}
+ num = out_len / sizeof (*rmp);
rmp = (vl_api_sw_interface_details_t *) out;
- sw_if_index = ntohl (rmp->sw_if_index);
+ for (i = 0; i < num; i++)
+ {
+ if (strlen (rmp->interface_name) &&
+ streq (interface, rmp->interface_name))
+ {
+ sw_if_index = ntohl (rmp->sw_if_index);
+ break;
+ }
+ rmp += 1;
+ }
error:
- free (out);
- vl_msg_api_free (mp);
+ if (out)
+ free (out);
+ if (mp)
+ vl_msg_api_free (mp);
return sw_if_index;
}
+
/**
* (Un)-install a security policy database
*/