1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-26 15:03:53 +01:00

gnrc_ipv6_nc: refactor nc_remove function

This commit is contained in:
Cenk Gündoğan 2016-03-16 13:35:09 +01:00
parent c6bad1ce07
commit 6f6ec3c8a5

View File

@ -37,8 +37,54 @@ static char addr_str[IPV6_ADDR_MAX_STR_LEN];
static gnrc_ipv6_nc_t ncache[GNRC_IPV6_NC_SIZE];
static void _nc_remove(kernel_pid_t iface, gnrc_ipv6_nc_t *entry)
{
(void) iface;
if (entry == NULL) {
return;
}
DEBUG("ipv6_nc: Remove %s for interface %" PRIkernel_pid "\n",
ipv6_addr_to_str(addr_str, ipv6_addr, sizeof(addr_str)),
iface);
#ifdef MODULE_GNRC_NDP_NODE
while (entry->pkts != NULL) {
gnrc_pktbuf_release(entry->pkts->pkt);
entry->pkts->pkt = NULL;
gnrc_pktqueue_remove_head(&entry->pkts);
}
#endif
#ifdef MODULE_GNRC_SIXLOWPAN_ND_ROUTER
xtimer_remove(&entry->type_timeout);
gnrc_ipv6_netif_t *if_entry = gnrc_ipv6_netif_get(iface);
if ((if_entry != NULL) && (if_entry->rtr_adv_msg.content.ptr == (char *) entry)) {
/* cancel timer set by gnrc_ndp_rtr_sol_handle */
xtimer_remove(&if_entry->rtr_adv_timer);
}
#endif
#if defined(MODULE_GNRC_NDP_ROUTER) || defined(MODULE_GNRC_SIXLOWPAN_ND_BORDER_ROUTER)
xtimer_remove(&entry->rtr_adv_timer);
#endif
xtimer_remove(&entry->rtr_timeout);
xtimer_remove(&entry->nbr_sol_timer);
xtimer_remove(&entry->nbr_adv_timer);
ipv6_addr_set_unspecified(&(entry->ipv6_addr));
entry->iface = KERNEL_PID_UNDEF;
entry->flags = 0;
}
void gnrc_ipv6_nc_init(void)
{
gnrc_ipv6_nc_t *entry;
for (entry = ncache; entry < (ncache + GNRC_IPV6_NC_SIZE); entry++) {
_nc_remove(entry->iface, entry);
}
memset(ncache, 0, sizeof(ncache));
}
@ -148,41 +194,7 @@ gnrc_ipv6_nc_t *gnrc_ipv6_nc_add(kernel_pid_t iface, const ipv6_addr_t *ipv6_add
void gnrc_ipv6_nc_remove(kernel_pid_t iface, const ipv6_addr_t *ipv6_addr)
{
gnrc_ipv6_nc_t *entry = gnrc_ipv6_nc_get(iface, ipv6_addr);
if (entry != NULL) {
DEBUG("ipv6_nc: Remove %s for interface %" PRIkernel_pid "\n",
ipv6_addr_to_str(addr_str, ipv6_addr, sizeof(addr_str)),
iface);
#ifdef MODULE_GNRC_NDP_NODE
while (entry->pkts != NULL) {
gnrc_pktbuf_release(entry->pkts->pkt);
entry->pkts->pkt = NULL;
gnrc_pktqueue_remove_head(&entry->pkts);
}
#endif
#ifdef MODULE_GNRC_SIXLOWPAN_ND_ROUTER
xtimer_remove(&entry->type_timeout);
gnrc_ipv6_netif_t *if_entry = gnrc_ipv6_netif_get(iface);
if ((if_entry != NULL) && (if_entry->rtr_adv_msg.content.ptr == (char *) entry)) {
/* cancel timer set by gnrc_ndp_rtr_sol_handle */
xtimer_remove(&if_entry->rtr_adv_timer);
}
#endif
#if defined(MODULE_GNRC_NDP_ROUTER) || defined(MODULE_GNRC_SIXLOWPAN_ND_BORDER_ROUTER)
xtimer_remove(&entry->rtr_adv_timer);
#endif
xtimer_remove(&entry->rtr_timeout);
xtimer_remove(&entry->nbr_sol_timer);
xtimer_remove(&entry->nbr_adv_timer);
ipv6_addr_set_unspecified(&(entry->ipv6_addr));
entry->iface = KERNEL_PID_UNDEF;
entry->flags = 0;
}
_nc_remove(iface, entry);
}
gnrc_ipv6_nc_t *gnrc_ipv6_nc_get(kernel_pid_t iface, const ipv6_addr_t *ipv6_addr)