Lines Matching refs:fib6_rt

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