Merge pull request #14920 from miri64/gnrc_ipv6_nib/fix/non-ll-wo-arsm
gnrc_ipv6_nib: don't add non-link-local to NC without ARSM
This commit is contained in:
commit
0bf33d0e77
@ -222,10 +222,13 @@ static inline unsigned gnrc_ipv6_nib_nc_get_ar_state(const gnrc_ipv6_nib_nc_t *e
|
|||||||
* If an entry pointing to the same IPv6 address as @p ipv6 exists already it
|
* If an entry pointing to the same IPv6 address as @p ipv6 exists already it
|
||||||
* will be overwritten and marked as unmanaged.
|
* will be overwritten and marked as unmanaged.
|
||||||
*
|
*
|
||||||
* If @ref CONFIG_GNRC_IPV6_NIB_ARSM != 0 @p l2addr and @p l2addr_len won't be set.
|
* If @ref CONFIG_GNRC_IPV6_NIB_ARSM == 0 @p l2addr and @p l2addr_len won't be
|
||||||
|
* set and @p ipv6 must be a link-local address.
|
||||||
*
|
*
|
||||||
* @return 0 on success.
|
* @return 0 on success.
|
||||||
* @return -ENOMEM, if no space is left in neighbor cache.
|
* @return -ENOMEM, if no space is left in neighbor cache.
|
||||||
|
* @return -EINVAL, if @p ipv6 is invalid (i.e.
|
||||||
|
* @ref CONFIG_GNRC_IPV6_NIB_ARSM == 0 and @p ipv6 is not link-local).
|
||||||
*/
|
*/
|
||||||
int gnrc_ipv6_nib_nc_set(const ipv6_addr_t *ipv6, unsigned iface,
|
int gnrc_ipv6_nib_nc_set(const ipv6_addr_t *ipv6, unsigned iface,
|
||||||
const uint8_t *l2addr, size_t l2addr_len);
|
const uint8_t *l2addr, size_t l2addr_len);
|
||||||
|
|||||||
@ -237,7 +237,10 @@ int gnrc_ipv6_nib_get_next_hop_l2addr(const ipv6_addr_t *dst,
|
|||||||
"search neighbor cache\n",
|
"search neighbor cache\n",
|
||||||
ipv6_addr_to_str(addr_str, dst, sizeof(addr_str)));
|
ipv6_addr_to_str(addr_str, dst, sizeof(addr_str)));
|
||||||
|
|
||||||
if (res == 0) {
|
if ((res == 0) &&
|
||||||
|
/* If ARSM is not active only use link-local as next hop */
|
||||||
|
(IS_ACTIVE(CONFIG_GNRC_IPV6_NIB_ARSM) ||
|
||||||
|
ipv6_addr_is_link_local(dst))) {
|
||||||
DEBUG("nib: prefix list entry => taking dst as next hop\n");
|
DEBUG("nib: prefix list entry => taking dst as next hop\n");
|
||||||
memcpy(&route.next_hop, dst, sizeof(route.next_hop));
|
memcpy(&route.next_hop, dst, sizeof(route.next_hop));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,6 +46,9 @@ int gnrc_ipv6_nib_nc_set(const ipv6_addr_t *ipv6, unsigned iface,
|
|||||||
#else
|
#else
|
||||||
(void)l2addr;
|
(void)l2addr;
|
||||||
(void)l2addr_len;
|
(void)l2addr_len;
|
||||||
|
if (!ipv6_addr_is_link_local(ipv6)) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
node->info &= ~(GNRC_IPV6_NIB_NC_INFO_AR_STATE_MASK |
|
node->info &= ~(GNRC_IPV6_NIB_NC_INFO_AR_STATE_MASK |
|
||||||
GNRC_IPV6_NIB_NC_INFO_NUD_STATE_MASK);
|
GNRC_IPV6_NIB_NC_INFO_NUD_STATE_MASK);
|
||||||
|
|||||||
@ -136,7 +136,10 @@ static int _nib_neigh(int argc, char **argv)
|
|||||||
_usage_nib_neigh(argv);
|
_usage_nib_neigh(argv);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
gnrc_ipv6_nib_nc_set(&ipv6_addr, iface, l2addr, l2addr_len);
|
if (gnrc_ipv6_nib_nc_set(&ipv6_addr, iface, l2addr, l2addr_len) < 0) {
|
||||||
|
printf("Unable to add %s%%%u to neighbor cache\n",
|
||||||
|
argv[4], iface);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ((argc > 3) && (strcmp(argv[2], "del") == 0)) {
|
else if ((argc > 3) && (strcmp(argv[2], "del") == 0)) {
|
||||||
ipv6_addr_t ipv6_addr;
|
ipv6_addr_t ipv6_addr;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user