Skip to content

Commit 2a465b2

Browse files
author
Mika
committed
DNS configuration lifetime validation
DNS configuration lifetime needs to be at least same as the router lifetime So it can not expire before the router is timing out. this prevents DNS information to expire between RA messages causing inconsintent configuration in the Wi-SUN network "The value of Lifetime SHOULD by default be at least 3 * MaxRtrAdvInterval, where MaxRtrAdvInterval is the maximum RA interval as defined in [RFC4861]" Router lifetime should be Default: 3 * MaxRtrAdvInterval
1 parent 9a3278a commit 2a465b2

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

source/Common_Protocols/icmpv6.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,11 @@ static buffer_t *icmpv6_ra_handler(buffer_t *buf)
886886
uint8_t dns_search_list_len = length - 8; // Length includes type and length
887887
//Cut Padding
888888
dns_search_list_len = icmpv6_dns_search_list_remove_pad(dns_search_list, dns_search_list_len);
889+
890+
// validate lifetime to be at least same amount as default route lifetime
891+
if (dns_lifetime > 0 && dns_lifetime < router_lifetime) {
892+
dns_lifetime = router_lifetime;
893+
}
889894
//tr_info("DNS Search List: %s Lifetime: %lu", trace_array(dns_search_list, dns_search_list_len), (unsigned long) dns_lifetime);
890895
// Add DNS server to DNS information storage.
891896
net_dns_server_search_list_set(cur->id, buf->src_sa.address, dns_search_list, dns_search_list_len, dns_lifetime);
@@ -899,6 +904,12 @@ static buffer_t *icmpv6_ra_handler(buffer_t *buf)
899904
}
900905
uint8_t dns_count = (dns_length - 1) / 2;
901906
uint32_t dns_lifetime = common_read_32_bit(dptr + 2); // 2 x reserved
907+
908+
// validate lifetime to be at least same amount as default route lifetime
909+
if (dns_lifetime > 0 && dns_lifetime < router_lifetime) {
910+
dns_lifetime = router_lifetime;
911+
}
912+
902913
for (int n = 0; n < dns_count; n++) {
903914
uint8_t *dns_srv_addr = dptr + 6 + n * 16;
904915
//tr_info("DNS Server: %s Lifetime: %lu", trace_ipv6(dns_srv_addr), (unsigned long) dns_lifetime);

0 commit comments

Comments
 (0)