@@ -46,7 +46,7 @@ announce_timer(struct uloop_timeout *timeout)
case STATE_PROBE1:
case STATE_PROBE2:
case STATE_PROBE3:
- dns_send_question(iface, mdns_hostname_local, TYPE_ANY, 1);
+ dns_send_question(iface, NULL, mdns_hostname_local, TYPE_ANY, 1);
uloop_timeout_set(timeout, 250);
iface->announce_state++;
break;
@@ -89,7 +89,7 @@ cache_gc_timer(struct uloop_timeout *timeout)
continue;
}
r->refresh += 50;
- dns_send_question(r->iface, r->record, r->type, 0);
+ dns_send_question(r->iface, (struct sockaddr *)&r->from, r->record, r->type, 0);
}
avl_for_each_element_safe(&services, s, avl, t) {
@@ -102,7 +102,7 @@ cache_gc_timer(struct uloop_timeout *timeout)
continue;
}
s->refresh += 50;
- dns_send_question(s->iface, s->entry, TYPE_PTR, 0);
+ dns_send_question(s->iface, NULL, s->entry, TYPE_PTR, 0);
}
uloop_timeout_set(timeout, 10000);
@@ -141,7 +141,7 @@ cache_update(void)
vlist_for_each_element(&interfaces, iface, node)
avl_for_each_element(&services, s, avl)
- dns_send_question(iface, s->entry, TYPE_PTR, 0);
+ dns_send_question(iface, NULL, s->entry, TYPE_PTR, 0);
}
static struct cache_service*
@@ -181,7 +181,7 @@ cache_service(struct interface *iface, char *entry, int hlen, int ttl)
avl_insert(&services, &s->avl);
if (!hlen)
- dns_send_question(iface, entry, TYPE_PTR, iface->multicast);
+ dns_send_question(iface, NULL, entry, TYPE_PTR, iface->multicast);
return s;
}
@@ -68,7 +68,8 @@ dns_type_string(uint16_t type)
}
void
-dns_send_question(struct interface *iface, const char *question, int type, int multicast)
+dns_send_question(struct interface *iface, struct sockaddr *to,
+ const char *question, int type, int multicast)
{
static struct dns_header h;
static struct dns_question q;
@@ -98,7 +99,7 @@ dns_send_question(struct interface *iface, const char *question, int type, int m
iov[1].iov_len = len;
DBG(1, "Q <- %s %s\n", dns_type_string(type), question);
- if (interface_send_packet(iface, NULL, iov, ARRAY_SIZE(iov)) < 0)
+ if (interface_send_packet(iface, to, iov, ARRAY_SIZE(iov)) < 0)
perror("failed to send question");
}
@@ -73,7 +73,8 @@ struct interface;
extern int cfg_proto;
extern int cfg_no_subnet;
-void dns_send_question(struct interface *iface, const char *question, int type, int multicast);
+void dns_send_question(struct interface *iface, struct sockaddr *to,
+ const char *question, int type, int multicast);
void dns_init_answer(void);
void dns_add_answer(int type, const uint8_t *rdata, uint16_t rdlength, int ttl);
void dns_send_answer(struct interface *iface, struct sockaddr *to, const char *answer);
@@ -441,7 +441,7 @@ reconnect_socket4(struct uloop_timeout *timeout)
uloop_fd_add(&iface->fd, ULOOP_READ);
if (iface->multicast) {
- dns_send_question(iface, C_DNS_SD, TYPE_PTR, 0);
+ dns_send_question(iface, NULL, C_DNS_SD, TYPE_PTR, 0);
announce_init(iface);
}
@@ -489,7 +489,7 @@ reconnect_socket6(struct uloop_timeout *timeout)
uloop_fd_add(&iface->fd, ULOOP_READ);
if (iface->multicast) {
- dns_send_question(iface, C_DNS_SD, TYPE_PTR, 0);
+ dns_send_question(iface, NULL, C_DNS_SD, TYPE_PTR, 0);
announce_init(iface);
}
@@ -201,10 +201,10 @@ umdns_query(struct ubus_context *ctx, struct ubus_object *obj,
if (!strcmp(method, "query")) {
if (iface_v4)
- dns_send_question(iface_v4, question, type, 1);
+ dns_send_question(iface_v4, NULL, question, type, 1);
if (iface_v6)
- dns_send_question(iface_v6, question, type, 1);
+ dns_send_question(iface_v6, NULL, question, type, 1);
return UBUS_STATUS_OK;
} else if (!strcmp(method, "fetch")) {