Lines Matching refs:fib6_entry

3186 		struct mlxsw_sp_fib6_entry *fib6_entry;  member
3212 const struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_cmp() argument
3216 if (nh_grp->nhgi->count != fib6_entry->nrt6) in mlxsw_sp_nexthop6_group_cmp()
3219 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_nexthop6_group_cmp()
3249 cmp_arg->fib6_entry); in mlxsw_sp_nexthop_group_cmp()
3287 mlxsw_sp_nexthop6_group_hash(struct mlxsw_sp_fib6_entry *fib6_entry, u32 seed) in mlxsw_sp_nexthop6_group_hash() argument
3289 unsigned int val = fib6_entry->nrt6; in mlxsw_sp_nexthop6_group_hash()
3292 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_nexthop6_group_hash()
3313 return mlxsw_sp_nexthop6_group_hash(cmp_arg->fib6_entry, seed); in mlxsw_sp_nexthop_group_hash()
3368 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_lookup() argument
3373 cmp_arg.fib6_entry = fib6_entry; in mlxsw_sp_nexthop6_group_lookup()
3768 struct mlxsw_sp_fib6_entry *fib6_entry) in __mlxsw_sp_nexthop6_group_offload_refresh() argument
3772 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in __mlxsw_sp_nexthop6_group_offload_refresh()
3788 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_nexthop6_group_offload_refresh() local
3794 list_for_each_entry(fib6_entry, &nh_grp->fib_list, in mlxsw_sp_nexthop6_group_offload_refresh()
3796 __mlxsw_sp_nexthop6_group_offload_refresh(nh_grp, fib6_entry); in mlxsw_sp_nexthop6_group_offload_refresh()
5615 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_hw_flags_set() local
5624 fib6_entry = container_of(fib_entry, struct mlxsw_sp_fib6_entry, in mlxsw_sp_fib6_entry_hw_flags_set()
5626 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) in mlxsw_sp_fib6_entry_hw_flags_set()
5643 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_hw_flags_clear() local
5646 fib6_entry = container_of(fib_entry, struct mlxsw_sp_fib6_entry, in mlxsw_sp_fib6_entry_hw_flags_clear()
5648 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) in mlxsw_sp_fib6_entry_hw_flags_clear()
6469 mlxsw_sp_fib6_entry_rt(const struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_entry_rt() argument
6471 return list_first_entry(&fib6_entry->rt6_list, struct mlxsw_sp_rt6, in mlxsw_sp_fib6_entry_rt()
6476 mlxsw_sp_fib6_entry_rt_find(const struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_entry_rt_find() argument
6481 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_fib6_entry_rt_find()
6549 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_info_init() argument
6556 nhgi = kzalloc(struct_size(nhgi, nexthops, fib6_entry->nrt6), in mlxsw_sp_nexthop6_group_info_init()
6562 mlxsw_sp_rt6 = list_first_entry(&fib6_entry->rt6_list, in mlxsw_sp_nexthop6_group_info_init()
6565 nhgi->count = fib6_entry->nrt6; in mlxsw_sp_nexthop6_group_info_init()
6618 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_create() argument
6634 err = mlxsw_sp_nexthop6_group_info_init(mlxsw_sp, nh_grp, fib6_entry); in mlxsw_sp_nexthop6_group_create()
6669 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_get() argument
6671 struct fib6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry); in mlxsw_sp_nexthop6_group_get()
6682 nh_grp = mlxsw_sp_nexthop6_group_lookup(mlxsw_sp, fib6_entry); in mlxsw_sp_nexthop6_group_get()
6684 nh_grp = mlxsw_sp_nexthop6_group_create(mlxsw_sp, fib6_entry); in mlxsw_sp_nexthop6_group_get()
6692 __mlxsw_sp_nexthop6_group_offload_refresh(nh_grp, fib6_entry); in mlxsw_sp_nexthop6_group_get()
6695 list_add_tail(&fib6_entry->common.nexthop_group_node, in mlxsw_sp_nexthop6_group_get()
6697 fib6_entry->common.nh_group = nh_grp; in mlxsw_sp_nexthop6_group_get()
6721 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_update() argument
6723 struct mlxsw_sp_nexthop_group *old_nh_grp = fib6_entry->common.nh_group; in mlxsw_sp_nexthop6_group_update()
6724 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_nexthop6_group_update()
6728 fib6_entry->common.nh_group = NULL; in mlxsw_sp_nexthop6_group_update()
6729 list_del(&fib6_entry->common.nexthop_group_node); in mlxsw_sp_nexthop6_group_update()
6731 err = mlxsw_sp_nexthop6_group_get(mlxsw_sp, fib6_entry); in mlxsw_sp_nexthop6_group_update()
6735 err = mlxsw_sp_nexthop_group_vr_link(fib6_entry->common.nh_group, in mlxsw_sp_nexthop6_group_update()
6744 err = mlxsw_sp_fib_entry_update(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_nexthop6_group_update()
6754 mlxsw_sp_nexthop_group_vr_unlink(fib6_entry->common.nh_group, in mlxsw_sp_nexthop6_group_update()
6757 mlxsw_sp_nexthop6_group_put(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_nexthop6_group_update()
6759 list_add_tail(&fib6_entry->common.nexthop_group_node, in mlxsw_sp_nexthop6_group_update()
6761 fib6_entry->common.nh_group = old_nh_grp; in mlxsw_sp_nexthop6_group_update()
6768 struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_entry_nexthop_add() argument
6781 list_add_tail(&mlxsw_sp_rt6->list, &fib6_entry->rt6_list); in mlxsw_sp_fib6_entry_nexthop_add()
6782 fib6_entry->nrt6++; in mlxsw_sp_fib6_entry_nexthop_add()
6785 err = mlxsw_sp_nexthop6_group_update(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_entry_nexthop_add()
6793 fib6_entry->nrt6--; in mlxsw_sp_fib6_entry_nexthop_add()
6794 mlxsw_sp_rt6 = list_last_entry(&fib6_entry->rt6_list, in mlxsw_sp_fib6_entry_nexthop_add()
6804 struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_entry_nexthop_del() argument
6811 mlxsw_sp_rt6 = mlxsw_sp_fib6_entry_rt_find(fib6_entry, in mlxsw_sp_fib6_entry_nexthop_del()
6816 fib6_entry->nrt6--; in mlxsw_sp_fib6_entry_nexthop_del()
6821 mlxsw_sp_nexthop6_group_update(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_entry_nexthop_del()
6880 mlxsw_sp_fib6_entry_rt_destroy_all(struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_entry_rt_destroy_all() argument
6884 list_for_each_entry_safe(mlxsw_sp_rt6, tmp, &fib6_entry->rt6_list, in mlxsw_sp_fib6_entry_rt_destroy_all()
6886 fib6_entry->nrt6--; in mlxsw_sp_fib6_entry_rt_destroy_all()
6897 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_create() local
6902 fib6_entry = kzalloc(sizeof(*fib6_entry), GFP_KERNEL); in mlxsw_sp_fib6_entry_create()
6903 if (!fib6_entry) in mlxsw_sp_fib6_entry_create()
6905 fib_entry = &fib6_entry->common; in mlxsw_sp_fib6_entry_create()
6907 INIT_LIST_HEAD(&fib6_entry->rt6_list); in mlxsw_sp_fib6_entry_create()
6915 list_add_tail(&mlxsw_sp_rt6->list, &fib6_entry->rt6_list); in mlxsw_sp_fib6_entry_create()
6916 fib6_entry->nrt6++; in mlxsw_sp_fib6_entry_create()
6919 err = mlxsw_sp_nexthop6_group_get(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_entry_create()
6934 return fib6_entry; in mlxsw_sp_fib6_entry_create()
6942 fib6_entry->nrt6--; in mlxsw_sp_fib6_entry_create()
6943 mlxsw_sp_rt6 = list_last_entry(&fib6_entry->rt6_list, in mlxsw_sp_fib6_entry_create()
6948 kfree(fib6_entry); in mlxsw_sp_fib6_entry_create()
6954 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_entry_type_unset() argument
6956 mlxsw_sp_fib_entry_type_unset(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_fib6_entry_type_unset()
6960 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_entry_destroy() argument
6962 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_entry_destroy()
6964 mlxsw_sp_fib6_entry_type_unset(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_entry_destroy()
6965 mlxsw_sp_nexthop_group_vr_unlink(fib6_entry->common.nh_group, in mlxsw_sp_fib6_entry_destroy()
6967 mlxsw_sp_nexthop6_group_put(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_fib6_entry_destroy()
6968 mlxsw_sp_fib6_entry_rt_destroy_all(fib6_entry); in mlxsw_sp_fib6_entry_destroy()
6969 WARN_ON(fib6_entry->nrt6); in mlxsw_sp_fib6_entry_destroy()
6970 kfree(fib6_entry); in mlxsw_sp_fib6_entry_destroy()
6977 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_lookup() local
6994 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_entry_lookup()
6996 cmp_rt = mlxsw_sp_fib6_entry_rt(fib6_entry); in mlxsw_sp_fib6_entry_lookup()
6999 mlxsw_sp_fib6_entry_rt_find(fib6_entry, rt)) in mlxsw_sp_fib6_entry_lookup()
7000 return fib6_entry; in mlxsw_sp_fib6_entry_lookup()
7005 static bool mlxsw_sp_fib6_allow_replace(struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_allow_replace() argument
7007 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_allow_replace()
7017 rt = mlxsw_sp_fib6_entry_rt(fib6_entry); in mlxsw_sp_fib6_allow_replace()
7030 struct mlxsw_sp_fib6_entry *fib6_entry, *fib6_replaced; in mlxsw_sp_router_fib6_replace() local
7053 fib6_entry = mlxsw_sp_fib6_entry_create(mlxsw_sp, fib_node, rt_arr, in mlxsw_sp_router_fib6_replace()
7055 if (IS_ERR(fib6_entry)) { in mlxsw_sp_router_fib6_replace()
7056 err = PTR_ERR(fib6_entry); in mlxsw_sp_router_fib6_replace()
7060 if (!mlxsw_sp_fib6_allow_replace(fib6_entry)) { in mlxsw_sp_router_fib6_replace()
7061 mlxsw_sp_fib6_entry_destroy(mlxsw_sp, fib6_entry); in mlxsw_sp_router_fib6_replace()
7067 err = mlxsw_sp_fib_node_entry_link(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_router_fib6_replace()
7084 mlxsw_sp_fib6_entry_destroy(mlxsw_sp, fib6_entry); in mlxsw_sp_router_fib6_replace()
7094 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_router_fib6_append() local
7118 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_router_fib6_append()
7120 err = mlxsw_sp_fib6_entry_nexthop_add(mlxsw_sp, fib6_entry, rt_arr, in mlxsw_sp_router_fib6_append()
7136 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_router_fib6_del() local
7148 fib6_entry = mlxsw_sp_fib6_entry_lookup(mlxsw_sp, rt); in mlxsw_sp_router_fib6_del()
7149 if (!fib6_entry) in mlxsw_sp_router_fib6_del()
7155 if (nrt6 != fib6_entry->nrt6) { in mlxsw_sp_router_fib6_del()
7156 mlxsw_sp_fib6_entry_nexthop_del(mlxsw_sp, fib6_entry, rt_arr, in mlxsw_sp_router_fib6_del()
7161 fib_node = fib6_entry->common.fib_node; in mlxsw_sp_router_fib6_del()
7163 mlxsw_sp_fib_node_entry_unlink(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_router_fib6_del()
7164 mlxsw_sp_fib6_entry_destroy(mlxsw_sp, fib6_entry); in mlxsw_sp_router_fib6_del()
7257 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_node_flush() local
7259 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_node_flush()
7262 mlxsw_sp_fib6_entry_destroy(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_node_flush()