diff --git a/sys/include/net/gnrc/netif/internal.h b/sys/include/net/gnrc/netif/internal.h index 5f875e3a1b..3f59031793 100644 --- a/sys/include/net/gnrc/netif/internal.h +++ b/sys/include/net/gnrc/netif/internal.h @@ -87,7 +87,8 @@ void gnrc_netif_release(gnrc_netif_t *netif); * @note Only available with @ref net_gnrc_ipv6 "gnrc_ipv6". * * @return >= 0, on success - * @return -ENOMEM, when no space for new addresses is left on the interface + * @return -ENOMEM, when no space for new addresses (or its solicited nodes + * multicast address) is left on the interface */ int gnrc_netif_ipv6_addr_add_internal(gnrc_netif_t *netif, const ipv6_addr_t *addr, diff --git a/sys/net/gnrc/netif/gnrc_netif.c b/sys/net/gnrc/netif/gnrc_netif.c index 695ccd8d6f..79f2c23944 100644 --- a/sys/net/gnrc/netif/gnrc_netif.c +++ b/sys/net/gnrc/netif/gnrc_netif.c @@ -555,9 +555,6 @@ int gnrc_netif_ipv6_addr_add_internal(gnrc_netif_t *netif, gnrc_netif_release(netif); return -ENOMEM; } - netif->ipv6.addrs_flags[idx] = flags; - memcpy(&netif->ipv6.addrs[idx], addr, sizeof(netif->ipv6.addrs[idx])); -#ifdef MODULE_GNRC_IPV6_NIB #if GNRC_IPV6_NIB_CONF_ARSM ipv6_addr_t sol_nodes; int res; @@ -570,8 +567,12 @@ int gnrc_netif_ipv6_addr_add_internal(gnrc_netif_t *netif, DEBUG("nib: Can't join solicited-nodes of %s on interface %u\n", ipv6_addr_to_str(addr_str, addr, sizeof(addr_str)), netif->pid); + return res; } #endif /* GNRC_IPV6_NIB_CONF_ARSM */ + netif->ipv6.addrs_flags[idx] = flags; + memcpy(&netif->ipv6.addrs[idx], addr, sizeof(netif->ipv6.addrs[idx])); +#ifdef MODULE_GNRC_IPV6_NIB if (_get_state(netif, idx) == GNRC_NETIF_IPV6_ADDRS_FLAGS_STATE_VALID) { void *state = NULL; gnrc_ipv6_nib_pl_t ple;