int fib_update_entry(uint8_t *dst, size_t dst_size, uint8_t *next_hop, size_t next_hop_size, uint32_t next_hop_flags, uint32_t lifetime) { mutex_lock(&mtx_access); DEBUG("[fib_update_entry]"); size_t count = 1; fib_entry_t *entry[count]; int ret = -ENOMEM; if (fib_find_entry(dst, dst_size, &(entry[0]), &count) == 1) { DEBUG("[fib_update_entry] found entry: %p\n", (void *)(entry[0])); /* we must take the according entry and update the values */ ret = fib_upd_entry(entry[0], next_hop, next_hop_size, next_hop_flags, lifetime); } else { /* we have ambiguous entries, i.e. count > 1 * this should never happen */ DEBUG("[fib_update_entry] ambigious entries detected!!!"); } mutex_unlock(&mtx_access); return ret; }
int fib_add_entry(kernel_pid_t iface_id, uint8_t *dst, size_t dst_size, uint32_t dst_flags, uint8_t *next_hop, size_t next_hop_size, uint32_t next_hop_flags, uint32_t lifetime) { mutex_lock(&mtx_access); DEBUG("[fib_add_entry]\n"); size_t count = 1; fib_entry_t *entry[count]; /* check if dst and next_hop are valid pointers */ if ((dst == NULL) || (next_hop == NULL)) { mutex_unlock(&mtx_access); return -EFAULT; } int ret = fib_find_entry(dst, dst_size, &(entry[0]), &count); if (ret == 1) { /* we must take the according entry and update the values */ ret = fib_upd_entry(entry[0], next_hop, next_hop_size, next_hop_flags, lifetime); } else { ret = fib_create_entry(iface_id, dst, dst_size, dst_flags, next_hop, next_hop_size, next_hop_flags, lifetime); } mutex_unlock(&mtx_access); return ret; }