diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c index d8e4f6fee6..1ba435f584 100644 --- a/src/resolve/resolved-dns-scope.c +++ b/src/resolve/resolved-dns-scope.c @@ -1126,7 +1126,7 @@ void dns_scope_check_conflicts(DnsScope *scope, DnsPacket *p) { return; } - if (manager_our_packet(scope->manager, p)) + if (manager_packet_from_local_address(scope->manager, p)) return; r = dns_packet_extract(p); diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c index 43359f3307..7f4ab4b12b 100644 --- a/src/resolve/resolved-dns-transaction.c +++ b/src/resolve/resolved-dns-transaction.c @@ -317,8 +317,9 @@ static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) { assert(t); assert(p); + assert(t->scope->protocol == DNS_PROTOCOL_LLMNR); - if (manager_our_packet(t->scope->manager, p) != 0) + if (manager_packet_from_local_address(t->scope->manager, p) != 0) return; (void) in_addr_to_string(p->family, &p->sender, &pretty); diff --git a/src/resolve/resolved-llmnr.c b/src/resolve/resolved-llmnr.c index 2ddf08815a..b1b8351e00 100644 --- a/src/resolve/resolved-llmnr.c +++ b/src/resolve/resolved-llmnr.c @@ -83,7 +83,7 @@ static int on_llmnr_packet(sd_event_source *s, int fd, uint32_t revents, void *u if (r <= 0) return r; - if (manager_our_packet(m, p)) + if (manager_packet_from_local_address(m, p)) return 0; scope = manager_find_scope(m, p); diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index cc68484169..d727539180 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -1255,10 +1255,12 @@ LinkAddress* manager_find_link_address(Manager *m, int family, const union in_ad return NULL; } -bool manager_our_packet(Manager *m, DnsPacket *p) { +bool manager_packet_from_local_address(Manager *m, DnsPacket *p) { assert(m); assert(p); + /* Let's see if this packet comes from an IP address we have on any local interface */ + return !!manager_find_link_address(m, p->family, &p->sender); } diff --git a/src/resolve/resolved-manager.h b/src/resolve/resolved-manager.h index 5471b20ff9..faa9e25e30 100644 --- a/src/resolve/resolved-manager.h +++ b/src/resolve/resolved-manager.h @@ -165,7 +165,7 @@ LinkAddress* manager_find_link_address(Manager *m, int family, const union in_ad void manager_refresh_rrs(Manager *m); int manager_next_hostname(Manager *m); -bool manager_our_packet(Manager *m, DnsPacket *p); +bool manager_packet_from_local_address(Manager *m, DnsPacket *p); DnsScope* manager_find_scope(Manager *m, DnsPacket *p); void manager_verify_all(Manager *m); diff --git a/src/resolve/resolved-mdns.c b/src/resolve/resolved-mdns.c index 149d3a4526..6fccc5a1e5 100644 --- a/src/resolve/resolved-mdns.c +++ b/src/resolve/resolved-mdns.c @@ -254,7 +254,7 @@ static int on_mdns_packet(sd_event_source *s, int fd, uint32_t revents, void *us if (r <= 0) return r; - if (manager_our_packet(m, p)) + if (manager_packet_from_local_address(m, p)) return 0; scope = manager_find_scope(m, p);