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;
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;
assert(q);
assert(s);
- r = set_ensure_allocated(&q->transactions, NULL, NULL);
+ r = set_ensure_allocated(&q->transactions, NULL);
if (r < 0)
return r;
return r;
}
- r = set_ensure_allocated(&t->queries, NULL, NULL);
+ r = set_ensure_allocated(&t->queries, NULL);
if (r < 0)
goto gc;
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;
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;
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,
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);