]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolve: mark mDNS RRs in the Additional Records section as cacheable
authorVishal Chillara Srinivas <vishal.chillarasrinivas@philips.com>
Tue, 31 May 2022 14:30:47 +0000 (20:00 +0530)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 16 Jun 2022 01:44:07 +0000 (10:44 +0900)
RFC 6762 does not restrict caching of records in the Additional section.
Caching can improve resolve efficiency.

src/resolve/resolved-dns-packet.c

index d6fb4880b0c966c1ce59b93e09510f7495f2cb5c..14ce0fe2c865230e2588f22a8c98485063db349b 100644 (file)
@@ -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)