aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/dns/resolver_process.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/dns/resolver_process.c')
-rw-r--r--src/vnet/dns/resolver_process.c50
1 files changed, 36 insertions, 14 deletions
diff --git a/src/vnet/dns/resolver_process.c b/src/vnet/dns/resolver_process.c
index 5603371db52..f473422112f 100644
--- a/src/vnet/dns/resolver_process.c
+++ b/src/vnet/dns/resolver_process.c
@@ -44,6 +44,10 @@ extern int
vnet_dns_response_to_reply (u8 * response,
vl_api_dns_resolve_name_reply_t * rmp,
u32 * min_ttlp);
+extern int
+vnet_dns_response_to_name (u8 * response,
+ vl_api_dns_resolve_ip_reply_t * rmp,
+ u32 * min_ttlp);
static void
resolve_event (dns_main_t * dm, f64 now, u8 * reply)
@@ -95,29 +99,47 @@ resolve_event (dns_main_t * dm, f64 now, u8 * reply)
ep->flags |= DNS_CACHE_ENTRY_FLAG_VALID;
/* Most likely, send 1 message */
- for (i = 0; i < vec_len (ep->api_clients_to_notify); i++)
+ for (i = 0; i < vec_len (ep->pending_api_requests); i++)
{
vl_api_registration_t *regp;
- vl_api_dns_resolve_name_reply_t *rmp;
regp = vl_api_client_index_to_registration
- (ep->api_clients_to_notify[i]);
+ (ep->pending_api_requests[i].client_index);
if (regp == 0)
continue;
- rmp = vl_msg_api_alloc (sizeof (*rmp) + vec_len (ep->dns_response));
- rmp->_vl_msg_id = clib_host_to_net_u16 (VL_API_DNS_RESOLVE_NAME_REPLY);
- rmp->context = ep->api_client_contexts[i];
- min_ttl = ~0;
- rv = vnet_dns_response_to_reply (ep->dns_response, rmp, &min_ttl);
- if (min_ttl != ~0)
- ep->expiration_time = now + min_ttl;
- rmp->retval = clib_host_to_net_u32 (rv);
- vl_msg_api_send (regp, (u8 *) rmp);
+ if (ep->pending_api_requests[i].request_type
+ == DNS_API_PENDING_NAME_TO_IP)
+ {
+ vl_api_dns_resolve_name_reply_t *rmp;
+ rmp = vl_msg_api_alloc (sizeof (*rmp));
+ rmp->_vl_msg_id =
+ clib_host_to_net_u16 (VL_API_DNS_RESOLVE_NAME_REPLY);
+ rmp->context = ep->pending_api_requests[i].client_context;
+ min_ttl = ~0;
+ rv = vnet_dns_response_to_reply (ep->dns_response, rmp, &min_ttl);
+ if (min_ttl != ~0)
+ ep->expiration_time = now + min_ttl;
+ rmp->retval = clib_host_to_net_u32 (rv);
+ vl_msg_api_send (regp, (u8 *) rmp);
+ }
+ else
+ {
+ vl_api_dns_resolve_ip_reply_t *rmp;
+ rmp = vl_msg_api_alloc (sizeof (*rmp));
+ rmp->_vl_msg_id =
+ clib_host_to_net_u16 (VL_API_DNS_RESOLVE_IP_REPLY);
+ rmp->context = ep->pending_api_requests[i].client_context;
+ min_ttl = ~0;
+ rv = vnet_dns_response_to_name (ep->dns_response, rmp, &min_ttl);
+ if (min_ttl != ~0)
+ ep->expiration_time = now + min_ttl;
+ rmp->retval = clib_host_to_net_u32 (rv);
+ vl_msg_api_send (regp, (u8 *) rmp);
+ }
}
- vec_free (ep->api_clients_to_notify);
- vec_free (ep->api_client_contexts);
+ vec_free (ep->pending_api_requests);
/* $$$ Add ip4/ip6 reply code */
vec_free (ep->ip4_peers_to_notify);