Lines Matching refs:fib6_rt
482 nsim_fib6_rt_nh_find(const struct nsim_fib6_rt *fib6_rt,
487 list_for_each_entry(fib6_rt_nh, &fib6_rt->nh_list, list) {
495 static int nsim_fib6_rt_nh_add(struct nsim_fib6_rt *fib6_rt,
506 list_add_tail(&fib6_rt_nh->list, &fib6_rt->nh_list);
507 fib6_rt->nhs++;
523 static void nsim_fib6_rt_nh_del(struct nsim_fib6_rt *fib6_rt,
528 fib6_rt_nh = nsim_fib6_rt_nh_find(fib6_rt, rt);
532 fib6_rt->nhs--;
543 struct nsim_fib6_rt *fib6_rt;
547 fib6_rt = kzalloc(sizeof(*fib6_rt), GFP_KERNEL);
548 if (!fib6_rt)
551 nsim_fib_rt_init(data, &fib6_rt->common, &rt->fib6_dst.addr,
559 INIT_LIST_HEAD(&fib6_rt->nh_list);
562 err = nsim_fib6_rt_nh_add(fib6_rt, rt_arr[i]);
567 return fib6_rt;
571 nsim_fib6_rt_nh_del(fib6_rt, rt_arr[i]);
573 nsim_fib_rt_fini(&fib6_rt->common);
574 kfree(fib6_rt);
578 static void nsim_fib6_rt_destroy(struct nsim_fib6_rt *fib6_rt)
582 list_for_each_entry_safe(iter, tmp, &fib6_rt->nh_list, list)
583 nsim_fib6_rt_nh_del(fib6_rt, iter->rt);
584 WARN_ON_ONCE(!list_empty(&fib6_rt->nh_list));
585 nsim_fib_rt_fini(&fib6_rt->common);
586 kfree(fib6_rt);
608 struct nsim_fib6_rt *fib6_rt;
620 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, rt);
621 if (!fib6_rt)
625 err = nsim_fib6_rt_nh_add(fib6_rt, fib6_event->rt_arr[i]);
637 nsim_fib6_rt_nh_del(fib6_rt, fib6_event->rt_arr[i]);
664 const struct nsim_fib6_rt *fib6_rt,
670 list_for_each_entry(fib6_rt_nh, &fib6_rt->nh_list, list)
675 const struct nsim_fib6_rt *fib6_rt,
682 struct nsim_fib6_rt *fib6_rt)
687 &fib6_rt->common.ht_node,
694 nsim_fib6_rt_hw_flags_set(data, fib6_rt, true);
707 struct nsim_fib6_rt *fib6_rt,
721 &fib6_rt->common.ht_node,
728 nsim_fib6_rt_hw_flags_set(data, fib6_rt, true);
740 struct nsim_fib6_rt *fib6_rt, *fib6_rt_old;
752 fib6_rt = nsim_fib6_rt_create(data, fib6_event->rt_arr,
754 if (IS_ERR(fib6_rt))
755 return PTR_ERR(fib6_rt);
759 err = nsim_fib6_rt_add(data, fib6_rt);
761 err = nsim_fib6_rt_replace(data, fib6_rt, fib6_rt_old);
764 nsim_fib6_rt_destroy(fib6_rt);
773 struct nsim_fib6_rt *fib6_rt;
781 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, rt);
782 if (!fib6_rt)
788 if (fib6_event->nrt6 != fib6_rt->nhs) {
790 nsim_fib6_rt_nh_del(fib6_rt, fib6_event->rt_arr[i]);
794 rhashtable_remove_fast(&data->fib_rt_ht, &fib6_rt->common.ht_node,
796 nsim_fib6_rt_destroy(fib6_rt);
1064 struct nsim_fib6_rt *fib6_rt;
1066 fib6_rt = container_of(fib_rt, struct nsim_fib6_rt, common);
1067 nsim_fib6_rt_hw_flags_set(data, fib6_rt, false);
1069 nsim_fib6_rt_destroy(fib6_rt);