chiark / gitweb /
resolved: fix cname handling
[elogind.git] / src / resolve / resolved-link.c
index 6ac7c5be98e4ce92455c527119f50d5f4198d10c..cd6e4ba8e6f695e31095c19edfd4100f2fca8b61 100644 (file)
@@ -25,7 +25,8 @@
 #include "strv.h"
 #include "resolved-link.h"
 
-#define DEFAULT_TTL (10)
+/* RFC 4795 Section 2.8. suggests a TTL of 30s by default */
+#define LLMNR_DEFAULT_TTL (30)
 
 static void link_address_add_rrs(LinkAddress *a);
 
@@ -95,7 +96,7 @@ static void link_allocate_scopes(Link *l) {
         } else
                 l->unicast_scope = dns_scope_free(l->unicast_scope);
 
-        if (link_relevant(l, AF_INET) && l->manager->use_llmnr) {
+        if (link_relevant(l, AF_INET) && (l->flags & IFF_MULTICAST) && l->manager->use_llmnr) {
                 if (!l->llmnr_ipv4_scope) {
                         r = dns_scope_new(l->manager, &l->llmnr_ipv4_scope, l, DNS_PROTOCOL_LLMNR, AF_INET);
                         if (r < 0)
@@ -104,7 +105,7 @@ static void link_allocate_scopes(Link *l) {
         } else
                 l->llmnr_ipv4_scope = dns_scope_free(l->llmnr_ipv4_scope);
 
-        if (link_relevant(l, AF_INET6) && l->manager->use_llmnr) {
+        if (link_relevant(l, AF_INET6) && (l->flags & IFF_MULTICAST) && l->manager->use_llmnr) {
                 if (!l->llmnr_ipv6_scope) {
                         r = dns_scope_new(l->manager, &l->llmnr_ipv6_scope, l, DNS_PROTOCOL_LLMNR, AF_INET6);
                         if (r < 0)
@@ -354,7 +355,7 @@ static void link_address_add_rrs(LinkAddress *a) {
                         }
 
                         a->llmnr_address_rr->a.in_addr = a->in_addr.in;
-                        a->llmnr_address_rr->ttl = DEFAULT_TTL;
+                        a->llmnr_address_rr->ttl = LLMNR_DEFAULT_TTL;
                 }
 
                 if (!a->llmnr_ptr_rr) {
@@ -362,7 +363,7 @@ static void link_address_add_rrs(LinkAddress *a) {
                         if (r < 0)
                                 goto fail;
 
-                        a->llmnr_ptr_rr->ttl = DEFAULT_TTL;
+                        a->llmnr_ptr_rr->ttl = LLMNR_DEFAULT_TTL;
                 }
 
                 if (link_address_relevant(a)) {
@@ -397,7 +398,7 @@ static void link_address_add_rrs(LinkAddress *a) {
                         }
 
                         a->llmnr_address_rr->aaaa.in6_addr = a->in_addr.in6;
-                        a->llmnr_address_rr->ttl = DEFAULT_TTL;
+                        a->llmnr_address_rr->ttl = LLMNR_DEFAULT_TTL;
                 }
 
                 if (!a->llmnr_ptr_rr) {
@@ -405,7 +406,7 @@ static void link_address_add_rrs(LinkAddress *a) {
                         if (r < 0)
                                 goto fail;
 
-                        a->llmnr_ptr_rr->ttl = DEFAULT_TTL;
+                        a->llmnr_ptr_rr->ttl = LLMNR_DEFAULT_TTL;
                 }
 
                 if (link_address_relevant(a)) {