Lines Matching refs:fib6_rt

412 nsim_fib6_rt_nh_find(const struct nsim_fib6_rt *fib6_rt,  in nsim_fib6_rt_nh_find()  argument
417 list_for_each_entry(fib6_rt_nh, &fib6_rt->nh_list, list) { in nsim_fib6_rt_nh_find()
425 static int nsim_fib6_rt_nh_add(struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_nh_add() argument
436 list_add_tail(&fib6_rt_nh->list, &fib6_rt->nh_list); in nsim_fib6_rt_nh_add()
437 fib6_rt->nhs++; in nsim_fib6_rt_nh_add()
442 static void nsim_fib6_rt_nh_del(struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_nh_del() argument
447 fib6_rt_nh = nsim_fib6_rt_nh_find(fib6_rt, rt); in nsim_fib6_rt_nh_del()
451 fib6_rt->nhs--; in nsim_fib6_rt_nh_del()
464 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_create() local
468 fib6_rt = kzalloc(sizeof(*fib6_rt), GFP_ATOMIC); in nsim_fib6_rt_create()
469 if (!fib6_rt) in nsim_fib6_rt_create()
472 nsim_fib_rt_init(data, &fib6_rt->common, &rt->fib6_dst.addr, in nsim_fib6_rt_create()
480 INIT_LIST_HEAD(&fib6_rt->nh_list); in nsim_fib6_rt_create()
482 err = nsim_fib6_rt_nh_add(fib6_rt, rt); in nsim_fib6_rt_create()
487 return fib6_rt; in nsim_fib6_rt_create()
493 err = nsim_fib6_rt_nh_add(fib6_rt, iter); in nsim_fib6_rt_create()
500 return fib6_rt; in nsim_fib6_rt_create()
505 nsim_fib6_rt_nh_del(fib6_rt, iter); in nsim_fib6_rt_create()
506 nsim_fib6_rt_nh_del(fib6_rt, rt); in nsim_fib6_rt_create()
508 nsim_fib_rt_fini(&fib6_rt->common); in nsim_fib6_rt_create()
509 kfree(fib6_rt); in nsim_fib6_rt_create()
513 static void nsim_fib6_rt_destroy(struct nsim_fib6_rt *fib6_rt) in nsim_fib6_rt_destroy() argument
517 list_for_each_entry_safe(iter, tmp, &fib6_rt->nh_list, list) in nsim_fib6_rt_destroy()
518 nsim_fib6_rt_nh_del(fib6_rt, iter->rt); in nsim_fib6_rt_destroy()
519 WARN_ON_ONCE(!list_empty(&fib6_rt->nh_list)); in nsim_fib6_rt_destroy()
520 nsim_fib_rt_fini(&fib6_rt->common); in nsim_fib6_rt_destroy()
521 kfree(fib6_rt); in nsim_fib6_rt_destroy()
543 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_append() local
547 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, rt); in nsim_fib6_rt_append()
548 if (WARN_ON_ONCE(!fib6_rt)) in nsim_fib6_rt_append()
551 err = nsim_fib6_rt_nh_add(fib6_rt, rt); in nsim_fib6_rt_append()
563 err = nsim_fib6_rt_nh_add(fib6_rt, iter); in nsim_fib6_rt_append()
577 nsim_fib6_rt_nh_del(fib6_rt, iter); in nsim_fib6_rt_append()
580 nsim_fib6_rt_nh_del(fib6_rt, rt); in nsim_fib6_rt_append()
584 static void nsim_fib6_rt_hw_flags_set(const struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_hw_flags_set() argument
589 list_for_each_entry(fib6_rt_nh, &fib6_rt->nh_list, list) in nsim_fib6_rt_hw_flags_set()
594 struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_add() argument
604 &fib6_rt->common.ht_node, in nsim_fib6_rt_add()
611 nsim_fib6_rt_hw_flags_set(fib6_rt, true); in nsim_fib6_rt_add()
621 struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_replace() argument
630 &fib6_rt->common.ht_node, in nsim_fib6_rt_replace()
637 nsim_fib6_rt_hw_flags_set(fib6_rt, true); in nsim_fib6_rt_replace()
649 struct nsim_fib6_rt *fib6_rt, *fib6_rt_old; in nsim_fib6_rt_insert() local
652 fib6_rt = nsim_fib6_rt_create(data, fen6_info); in nsim_fib6_rt_insert()
653 if (IS_ERR(fib6_rt)) in nsim_fib6_rt_insert()
654 return PTR_ERR(fib6_rt); in nsim_fib6_rt_insert()
658 err = nsim_fib6_rt_add(data, fib6_rt, extack); in nsim_fib6_rt_insert()
660 err = nsim_fib6_rt_replace(data, fib6_rt, fib6_rt_old, extack); in nsim_fib6_rt_insert()
663 nsim_fib6_rt_destroy(fib6_rt); in nsim_fib6_rt_insert()
673 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_remove() local
680 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, fen6_info->rt); in nsim_fib6_rt_remove()
681 if (!fib6_rt) in nsim_fib6_rt_remove()
687 if (fen6_info->nsiblings + 1 != fib6_rt->nhs) { in nsim_fib6_rt_remove()
688 nsim_fib6_rt_nh_del(fib6_rt, fen6_info->rt); in nsim_fib6_rt_remove()
692 rhashtable_remove_fast(&data->fib_rt_ht, &fib6_rt->common.ht_node, in nsim_fib6_rt_remove()
695 nsim_fib6_rt_destroy(fib6_rt); in nsim_fib6_rt_remove()
796 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_free() local
798 fib6_rt = container_of(fib_rt, struct nsim_fib6_rt, common); in nsim_fib6_rt_free()
799 nsim_fib6_rt_hw_flags_set(fib6_rt, false); in nsim_fib6_rt_free()
801 nsim_fib6_rt_destroy(fib6_rt); in nsim_fib6_rt_free()