Lines Matching refs:fib6_rt
479 nsim_fib6_rt_nh_find(const struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_nh_find() argument
484 list_for_each_entry(fib6_rt_nh, &fib6_rt->nh_list, list) { in nsim_fib6_rt_nh_find()
492 static int nsim_fib6_rt_nh_add(struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_nh_add() argument
503 list_add_tail(&fib6_rt_nh->list, &fib6_rt->nh_list); in nsim_fib6_rt_nh_add()
504 fib6_rt->nhs++; in nsim_fib6_rt_nh_add()
520 static void nsim_fib6_rt_nh_del(struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_nh_del() argument
525 fib6_rt_nh = nsim_fib6_rt_nh_find(fib6_rt, rt); in nsim_fib6_rt_nh_del()
529 fib6_rt->nhs--; in nsim_fib6_rt_nh_del()
540 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_create() local
544 fib6_rt = kzalloc(sizeof(*fib6_rt), GFP_KERNEL); in nsim_fib6_rt_create()
545 if (!fib6_rt) in nsim_fib6_rt_create()
548 nsim_fib_rt_init(data, &fib6_rt->common, &rt->fib6_dst.addr, in nsim_fib6_rt_create()
556 INIT_LIST_HEAD(&fib6_rt->nh_list); in nsim_fib6_rt_create()
559 err = nsim_fib6_rt_nh_add(fib6_rt, rt_arr[i]); in nsim_fib6_rt_create()
564 return fib6_rt; in nsim_fib6_rt_create()
568 nsim_fib6_rt_nh_del(fib6_rt, rt_arr[i]); in nsim_fib6_rt_create()
570 nsim_fib_rt_fini(&fib6_rt->common); in nsim_fib6_rt_create()
571 kfree(fib6_rt); in nsim_fib6_rt_create()
575 static void nsim_fib6_rt_destroy(struct nsim_fib6_rt *fib6_rt) in nsim_fib6_rt_destroy() argument
579 list_for_each_entry_safe(iter, tmp, &fib6_rt->nh_list, list) in nsim_fib6_rt_destroy()
580 nsim_fib6_rt_nh_del(fib6_rt, iter->rt); in nsim_fib6_rt_destroy()
581 WARN_ON_ONCE(!list_empty(&fib6_rt->nh_list)); in nsim_fib6_rt_destroy()
582 nsim_fib_rt_fini(&fib6_rt->common); in nsim_fib6_rt_destroy()
583 kfree(fib6_rt); in nsim_fib6_rt_destroy()
605 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_append() local
617 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, rt); in nsim_fib6_rt_append()
618 if (!fib6_rt) in nsim_fib6_rt_append()
622 err = nsim_fib6_rt_nh_add(fib6_rt, fib6_event->rt_arr[i]); in nsim_fib6_rt_append()
634 nsim_fib6_rt_nh_del(fib6_rt, fib6_event->rt_arr[i]); in nsim_fib6_rt_append()
661 const struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_hw_flags_set() argument
667 list_for_each_entry(fib6_rt_nh, &fib6_rt->nh_list, list) in nsim_fib6_rt_hw_flags_set()
672 const struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_hw_flags_set() argument
679 struct nsim_fib6_rt *fib6_rt) in nsim_fib6_rt_add() argument
684 &fib6_rt->common.ht_node, in nsim_fib6_rt_add()
691 nsim_fib6_rt_hw_flags_set(data, fib6_rt, true); in nsim_fib6_rt_add()
704 struct nsim_fib6_rt *fib6_rt, in nsim_fib6_rt_replace() argument
718 &fib6_rt->common.ht_node, in nsim_fib6_rt_replace()
725 nsim_fib6_rt_hw_flags_set(data, fib6_rt, true); in nsim_fib6_rt_replace()
737 struct nsim_fib6_rt *fib6_rt, *fib6_rt_old; in nsim_fib6_rt_insert() local
749 fib6_rt = nsim_fib6_rt_create(data, fib6_event->rt_arr, in nsim_fib6_rt_insert()
751 if (IS_ERR(fib6_rt)) in nsim_fib6_rt_insert()
752 return PTR_ERR(fib6_rt); in nsim_fib6_rt_insert()
756 err = nsim_fib6_rt_add(data, fib6_rt); in nsim_fib6_rt_insert()
758 err = nsim_fib6_rt_replace(data, fib6_rt, fib6_rt_old); in nsim_fib6_rt_insert()
761 nsim_fib6_rt_destroy(fib6_rt); in nsim_fib6_rt_insert()
770 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_remove() local
778 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, rt); in nsim_fib6_rt_remove()
779 if (!fib6_rt) in nsim_fib6_rt_remove()
785 if (fib6_event->nrt6 != fib6_rt->nhs) { in nsim_fib6_rt_remove()
787 nsim_fib6_rt_nh_del(fib6_rt, fib6_event->rt_arr[i]); in nsim_fib6_rt_remove()
791 rhashtable_remove_fast(&data->fib_rt_ht, &fib6_rt->common.ht_node, in nsim_fib6_rt_remove()
793 nsim_fib6_rt_destroy(fib6_rt); in nsim_fib6_rt_remove()
1049 struct nsim_fib6_rt *fib6_rt; in nsim_fib6_rt_free() local
1051 fib6_rt = container_of(fib_rt, struct nsim_fib6_rt, common); in nsim_fib6_rt_free()
1052 nsim_fib6_rt_hw_flags_set(data, fib6_rt, false); in nsim_fib6_rt_free()
1054 nsim_fib6_rt_destroy(fib6_rt); in nsim_fib6_rt_free()