X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=dns.c;h=1ff5d530f9e4f7d61775ec487b958eb25c57dbcc;hb=3032203ee12cf5344f89b1ae1ee78229a44f8959;hp=961c2d0a2fded8459f23adde7432ca05b14c4202;hpb=891447c1a9db8a55f769241c94f4400e16f43dd9;p=project%2Fmdnsd.git diff --git a/dns.c b/dns.c index 961c2d0..1ff5d53 100644 --- a/dns.c +++ b/dns.c @@ -66,7 +66,7 @@ dns_type_string(uint16_t type) } void -dns_send_question(struct interface *iface, const char *question, int type) +dns_send_question(struct interface *iface, const char *question, int type, int unicast) { static struct dns_header h; static struct dns_question q; @@ -86,7 +86,7 @@ dns_send_question(struct interface *iface, const char *question, int type) int len; h.questions = cpu_to_be16(1); - q.class = cpu_to_be16(1); + q.class = cpu_to_be16(((unicast) ? (CLASS_UNICAST) : (0)) | 1); q.type = cpu_to_be16(type); len = dn_comp(question, (void *) name_buffer, sizeof(name_buffer), NULL, NULL); @@ -95,10 +95,9 @@ dns_send_question(struct interface *iface, const char *question, int type) iov[1].iov_len = len; + DBG(1, "Q <- %s %s\n", dns_type_string(type), question); if (interface_send_packet(iface, iov, ARRAY_SIZE(iov)) < 0) - fprintf(stderr, "failed to send question\n"); - else - DBG(1, "Q <- %s %s\n", dns_type_string(type), question); + perror("failed to send question :"); } @@ -320,6 +319,9 @@ parse_question(struct interface *iface, char *name, struct dns_question *q) { char *host; + if ((q->class & CLASS_UNICAST) && iface->multicast) + iface = iface->peer; + DBG(1, "Q -> %s %s\n", dns_type_string(q->type), name); switch (q->type) {