diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-08-14 01:00:15 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-08-14 01:01:43 +0200 |
commit | 51323288fc628a5cac50914df915545d685b793e (patch) | |
tree | 013681d930ff79f768b5499bb295cc618942a056 /src/resolve/resolved-dns-query.c | |
parent | 12e34d9d58ed4d97e7bdf8c23494c51ee5ec388e (diff) |
resolved: allow passing on which protocol, family and interface to look something up
Also, return on which protocol/family/interface we found something.
Diffstat (limited to 'src/resolve/resolved-dns-query.c')
-rw-r--r-- | src/resolve/resolved-dns-query.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c index 6d77c109b4..669595d7f9 100644 --- a/src/resolve/resolved-dns-query.c +++ b/src/resolve/resolved-dns-query.c @@ -66,7 +66,7 @@ DnsQuery *dns_query_free(DnsQuery *q) { return NULL; } -int dns_query_new(Manager *m, DnsQuery **ret, DnsQuestion *question) { +int dns_query_new(Manager *m, DnsQuery **ret, DnsQuestion *question, int ifindex, uint64_t flags) { _cleanup_(dns_query_freep) DnsQuery *q = NULL; unsigned i; int r; @@ -86,6 +86,8 @@ int dns_query_new(Manager *m, DnsQuery **ret, DnsQuestion *question) { return -ENOMEM; q->question = dns_question_ref(question); + q->ifindex = ifindex; + q->flags = flags; for (i = 0; i < question->n_keys; i++) { _cleanup_free_ char *p; @@ -233,7 +235,7 @@ int dns_query_go(DnsQuery *q) { LIST_FOREACH(scopes, s, q->manager->dns_scopes) { DnsScopeMatch match; - match = dns_scope_good_domain(s, name); + match = dns_scope_good_domain(s, q->ifindex, q->flags, name); if (match < 0) return match; @@ -263,7 +265,7 @@ int dns_query_go(DnsQuery *q) { LIST_FOREACH(scopes, s, first->scopes_next) { DnsScopeMatch match; - match = dns_scope_good_domain(s, name); + match = dns_scope_good_domain(s, q->ifindex, q->flags, name); if (match < 0) goto fail; @@ -278,6 +280,8 @@ int dns_query_go(DnsQuery *q) { q->answer = dns_answer_unref(q->answer); q->answer_ifindex = 0; q->answer_rcode = 0; + q->answer_family = AF_UNSPEC; + q->answer_protocol = _DNS_PROTOCOL_INVALID; r = sd_event_add_time( q->manager->event, @@ -422,6 +426,8 @@ void dns_query_ready(DnsQuery *q) { q->answer = dns_answer_ref(answer); q->answer_rcode = rcode; q->answer_ifindex = (scope && scope->link) ? scope->link->ifindex : 0; + q->answer_protocol = scope ? scope->protocol : _DNS_PROTOCOL_INVALID; + q->answer_family = scope ? scope->family : AF_UNSPEC; } dns_query_complete(q, state); |