gnrc_netif: warn when not joining solicited-nodes from non-6LN netif

Similar as with #12513, when the NIB is compiled in 6LN mode (but not
6LR mode), the address-resolution state-machine (ARSM) functionality is
disabled in favor of the more simpler address resolution proposed in RFC
6775.

However, if a non-6LN interface is also compiled in (without making it
a router or border router) it will never join the solicited-nodes
multicast address of addresses added to it, resulting in address
resolution to that interface to fail.

If the interface is not a 6LN (which in case 6LN mode is disabled is
always false), a warning is now printed, encouraging the user to
activate the ARSM functionality if needed.
This commit is contained in:
Martine Lenders 2019-10-22 21:47:29 +02:00
parent 046c10ecce
commit 88090bc0f6

View File

@ -613,6 +613,13 @@ int gnrc_netif_ipv6_addr_add_internal(gnrc_netif_t *netif,
netif->pid); netif->pid);
return res; return res;
} }
#else /* GNRC_IPV6_NIB_CONF_ARSM */
if (!gnrc_netif_is_6ln(netif)) {
LOG_WARNING("Address-resolution state-machine not activated. Neighbors "
"from interface %u\nwill not be able to resolve address %s\n"
" Use GNRC_IPV6_NIB_CONF_ARSM=1 to activate.\n",
netif->pid, ipv6_addr_to_str(addr_str, addr, sizeof(addr_str)));
}
#endif /* GNRC_IPV6_NIB_CONF_ARSM */ #endif /* GNRC_IPV6_NIB_CONF_ARSM */
netif->ipv6.addrs_flags[idx] = flags; netif->ipv6.addrs_flags[idx] = flags;
memcpy(&netif->ipv6.addrs[idx], addr, sizeof(netif->ipv6.addrs[idx])); memcpy(&netif->ipv6.addrs[idx], addr, sizeof(netif->ipv6.addrs[idx]));