Skip to content
Snippets Groups Projects
Commit 8bc65a96 authored by Cenk Gündoğan's avatar Cenk Gündoğan
Browse files

gnrc_ipv6_netif: remove existing interfaces on INIT

parent 2f9f99e5
No related branches found
No related tags found
No related merge requests found
...@@ -167,14 +167,34 @@ static void _reset_addr_from_entry(gnrc_ipv6_netif_t *entry) ...@@ -167,14 +167,34 @@ static void _reset_addr_from_entry(gnrc_ipv6_netif_t *entry)
memset(entry->addrs, 0, sizeof(entry->addrs)); memset(entry->addrs, 0, sizeof(entry->addrs));
} }
static void _ipv6_netif_remove(gnrc_ipv6_netif_t *entry)
{
if (entry == NULL) {
return;
}
#ifdef MODULE_GNRC_NDP
gnrc_ndp_netif_remove(entry);
#endif
mutex_lock(&entry->mutex);
xtimer_remove(&entry->rtr_sol_timer);
#ifdef MODULE_GNRC_NDP_ROUTER
xtimer_remove(&entry->rtr_adv_timer);
#endif
_reset_addr_from_entry(entry);
DEBUG("ipv6 netif: Remove IPv6 interface %" PRIkernel_pid "\n", entry->pid);
entry->pid = KERNEL_PID_UNDEF;
entry->flags = 0;
mutex_unlock(&entry->mutex);
}
void gnrc_ipv6_netif_init(void) void gnrc_ipv6_netif_init(void)
{ {
for (int i = 0; i < GNRC_NETIF_NUMOF; i++) { for (int i = 0; i < GNRC_NETIF_NUMOF; i++) {
mutex_init(&(ipv6_ifs[i].mutex)); mutex_init(&(ipv6_ifs[i].mutex));
mutex_lock(&(ipv6_ifs[i].mutex)); _ipv6_netif_remove(&ipv6_ifs[i]);
_reset_addr_from_entry(&ipv6_ifs[i]);
ipv6_ifs[i].pid = KERNEL_PID_UNDEF;
mutex_unlock(&(ipv6_ifs[i].mutex));
} }
} }
...@@ -228,26 +248,7 @@ void gnrc_ipv6_netif_add(kernel_pid_t pid) ...@@ -228,26 +248,7 @@ void gnrc_ipv6_netif_add(kernel_pid_t pid)
void gnrc_ipv6_netif_remove(kernel_pid_t pid) void gnrc_ipv6_netif_remove(kernel_pid_t pid)
{ {
gnrc_ipv6_netif_t *entry = gnrc_ipv6_netif_get(pid); gnrc_ipv6_netif_t *entry = gnrc_ipv6_netif_get(pid);
_ipv6_netif_remove(entry);
if (entry == NULL) {
return;
}
#ifdef MODULE_GNRC_NDP
gnrc_ndp_netif_remove(entry);
#endif
mutex_lock(&entry->mutex);
xtimer_remove(&entry->rtr_sol_timer);
#ifdef MODULE_GNRC_NDP_ROUTER
xtimer_remove(&entry->rtr_adv_timer);
#endif
_reset_addr_from_entry(entry);
DEBUG("ipv6 netif: Remove IPv6 interface %" PRIkernel_pid "\n", pid);
entry->pid = KERNEL_PID_UNDEF;
entry->flags = 0;
mutex_unlock(&entry->mutex);
} }
gnrc_ipv6_netif_t *gnrc_ipv6_netif_get(kernel_pid_t pid) gnrc_ipv6_netif_t *gnrc_ipv6_netif_get(kernel_pid_t pid)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment