diff --git a/sys/net/network_layer/ng_sixlowpan/netif/ng_sixlowpan_netif.c b/sys/net/network_layer/ng_sixlowpan/netif/ng_sixlowpan_netif.c index 0428106c5f8159a2b9562134e0e300a45ab07a4f..03949a3cca1b7b8ebe80bad23ada7b7655f29a9c 100644 --- a/sys/net/network_layer/ng_sixlowpan/netif/ng_sixlowpan_netif.c +++ b/sys/net/network_layer/ng_sixlowpan/netif/ng_sixlowpan_netif.c @@ -29,17 +29,27 @@ void ng_sixlowpan_netif_init(void) void ng_sixlowpan_netif_add(kernel_pid_t pid, uint16_t max_frag_size) { + ng_sixlowpan_netif_t *free_entry = NULL; + for (int i = 0; i < NG_NETIF_NUMOF; i++) { if (sixlow_ifs[i].pid == pid) { return; } - if (sixlow_ifs[i].pid == KERNEL_PID_UNDEF) { - sixlow_ifs[i].pid = pid; - sixlow_ifs[i].max_frag_size = max_frag_size; - return; + if ((sixlow_ifs[i].pid == KERNEL_PID_UNDEF) && !free_entry) { + /* found the first free entry */ + free_entry = &sixlow_ifs[i]; } } + + if (!free_entry) { + DEBUG("ng_sixlowpan_netif_add: couldn't add interface with PID %d: No space left.\n", pid); + return; + } + + free_entry->pid = pid; + free_entry->max_frag_size = max_frag_size; + return; } void ng_sixlowpan_netif_remove(kernel_pid_t pid)