diff options
Diffstat (limited to 'extras/strongswan')
-rw-r--r-- | extras/strongswan/vpp_sswan/kernel_vpp_ipsec.c | 29 |
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 */ |