From: Vishal Chillara Srinivas Date: Tue, 31 May 2022 14:30:47 +0000 (+0530) Subject: resolve: mark mDNS RRs in the Additional Records section as cacheable X-Git-Tag: v252-rc1~805 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=82af03c2232c563a63524ddddd0ebebdbe5c0402;p=thirdparty%2Fsystemd.git resolve: mark mDNS RRs in the Additional Records section as cacheable RFC 6762 does not restrict caching of records in the Additional section. Caching can improve resolve efficiency. --- diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c index d6fb4880b0c..14ce0fe2c86 100644 --- a/src/resolve/resolved-dns-packet.c +++ b/src/resolve/resolved-dns-packet.c @@ -2343,13 +2343,17 @@ static int dns_packet_extract_answer(DnsPacket *p, DnsAnswer **ret_answer) { /* According to RFC 4795, section 2.9. only the RRs from the Answer section shall be * cached. Hence mark only those RRs as cacheable by default, but not the ones from - * the Additional or Authority sections. */ + * the Additional or Authority sections. + * This restriction does not apply to mDNS records (RFC 6762). */ if (i < DNS_PACKET_ANCOUNT(p)) flags |= DNS_ANSWER_CACHEABLE|DNS_ANSWER_SECTION_ANSWER; else if (i < DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p)) flags |= DNS_ANSWER_SECTION_AUTHORITY; - else + else { flags |= DNS_ANSWER_SECTION_ADDITIONAL; + if (p->protocol == DNS_PROTOCOL_MDNS) + flags |= DNS_ANSWER_CACHEABLE; + } r = dns_answer_add(answer, rr, p->ifindex, flags, NULL); if (r < 0)