Lines Matching refs:fib6_entry
2728 struct mlxsw_sp_fib6_entry *fib6_entry; member
2753 const struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_cmp() argument
2757 if (nh_grp->count != fib6_entry->nrt6) in mlxsw_sp_nexthop6_group_cmp()
2760 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_nexthop6_group_cmp()
2786 cmp_arg->fib6_entry); in mlxsw_sp_nexthop_group_cmp()
2825 mlxsw_sp_nexthop6_group_hash(struct mlxsw_sp_fib6_entry *fib6_entry, u32 seed) in mlxsw_sp_nexthop6_group_hash() argument
2827 unsigned int val = fib6_entry->nrt6; in mlxsw_sp_nexthop6_group_hash()
2831 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_nexthop6_group_hash()
2848 return mlxsw_sp_nexthop6_group_hash(cmp_arg->fib6_entry, seed); in mlxsw_sp_nexthop_group_hash()
2901 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_lookup() argument
2906 cmp_arg.fib6_entry = fib6_entry; in mlxsw_sp_nexthop6_group_lookup()
3885 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_offload_set() local
3888 fib6_entry = container_of(fib_entry, struct mlxsw_sp_fib6_entry, in mlxsw_sp_fib6_entry_offload_set()
3892 list_first_entry(&fib6_entry->rt6_list, struct mlxsw_sp_rt6, in mlxsw_sp_fib6_entry_offload_set()
3897 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_fib6_entry_offload_set()
3912 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_offload_unset() local
3915 fib6_entry = container_of(fib_entry, struct mlxsw_sp_fib6_entry, in mlxsw_sp_fib6_entry_offload_unset()
3917 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_fib6_entry_offload_unset()
4761 mlxsw_sp_fib6_entry_rt(const struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_entry_rt() argument
4763 return list_first_entry(&fib6_entry->rt6_list, struct mlxsw_sp_rt6, in mlxsw_sp_fib6_entry_rt()
4771 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_node_mp_entry_find() local
4776 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_mp_entry_find()
4777 struct fib6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry); in mlxsw_sp_fib6_node_mp_entry_find()
4790 return fib6_entry; in mlxsw_sp_fib6_node_mp_entry_find()
4799 mlxsw_sp_fib6_entry_rt_find(const struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_entry_rt_find() argument
4804 list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) { in mlxsw_sp_fib6_entry_rt_find()
4903 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_create() argument
4913 fib6_entry->nrt6 * sizeof(struct mlxsw_sp_nexthop); in mlxsw_sp_nexthop6_group_create()
4921 mlxsw_sp_rt6 = list_first_entry(&fib6_entry->rt6_list, in mlxsw_sp_nexthop6_group_create()
4924 nh_grp->count = fib6_entry->nrt6; in mlxsw_sp_nexthop6_group_create()
4970 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_get() argument
4974 nh_grp = mlxsw_sp_nexthop6_group_lookup(mlxsw_sp, fib6_entry); in mlxsw_sp_nexthop6_group_get()
4976 nh_grp = mlxsw_sp_nexthop6_group_create(mlxsw_sp, fib6_entry); in mlxsw_sp_nexthop6_group_get()
4981 list_add_tail(&fib6_entry->common.nexthop_group_node, in mlxsw_sp_nexthop6_group_get()
4983 fib6_entry->common.nh_group = nh_grp; in mlxsw_sp_nexthop6_group_get()
5001 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_nexthop6_group_update() argument
5003 struct mlxsw_sp_nexthop_group *old_nh_grp = fib6_entry->common.nh_group; in mlxsw_sp_nexthop6_group_update()
5006 fib6_entry->common.nh_group = NULL; in mlxsw_sp_nexthop6_group_update()
5007 list_del(&fib6_entry->common.nexthop_group_node); in mlxsw_sp_nexthop6_group_update()
5009 err = mlxsw_sp_nexthop6_group_get(mlxsw_sp, fib6_entry); in mlxsw_sp_nexthop6_group_update()
5017 err = mlxsw_sp_fib_node_entry_add(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_nexthop6_group_update()
5027 mlxsw_sp_nexthop6_group_put(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_nexthop6_group_update()
5029 list_add_tail(&fib6_entry->common.nexthop_group_node, in mlxsw_sp_nexthop6_group_update()
5031 fib6_entry->common.nh_group = old_nh_grp; in mlxsw_sp_nexthop6_group_update()
5037 struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_entry_nexthop_add() argument
5047 list_add_tail(&mlxsw_sp_rt6->list, &fib6_entry->rt6_list); in mlxsw_sp_fib6_entry_nexthop_add()
5048 fib6_entry->nrt6++; in mlxsw_sp_fib6_entry_nexthop_add()
5050 err = mlxsw_sp_nexthop6_group_update(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_entry_nexthop_add()
5057 fib6_entry->nrt6--; in mlxsw_sp_fib6_entry_nexthop_add()
5065 struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_entry_nexthop_del() argument
5070 mlxsw_sp_rt6 = mlxsw_sp_fib6_entry_rt_find(fib6_entry, rt); in mlxsw_sp_fib6_entry_nexthop_del()
5074 fib6_entry->nrt6--; in mlxsw_sp_fib6_entry_nexthop_del()
5076 mlxsw_sp_nexthop6_group_update(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_entry_nexthop_del()
5101 mlxsw_sp_fib6_entry_rt_destroy_all(struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_entry_rt_destroy_all() argument
5105 list_for_each_entry_safe(mlxsw_sp_rt6, tmp, &fib6_entry->rt6_list, in mlxsw_sp_fib6_entry_rt_destroy_all()
5107 fib6_entry->nrt6--; in mlxsw_sp_fib6_entry_rt_destroy_all()
5118 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_create() local
5123 fib6_entry = kzalloc(sizeof(*fib6_entry), GFP_KERNEL); in mlxsw_sp_fib6_entry_create()
5124 if (!fib6_entry) in mlxsw_sp_fib6_entry_create()
5126 fib_entry = &fib6_entry->common; in mlxsw_sp_fib6_entry_create()
5136 INIT_LIST_HEAD(&fib6_entry->rt6_list); in mlxsw_sp_fib6_entry_create()
5137 list_add_tail(&mlxsw_sp_rt6->list, &fib6_entry->rt6_list); in mlxsw_sp_fib6_entry_create()
5138 fib6_entry->nrt6 = 1; in mlxsw_sp_fib6_entry_create()
5139 err = mlxsw_sp_nexthop6_group_get(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_entry_create()
5145 return fib6_entry; in mlxsw_sp_fib6_entry_create()
5151 kfree(fib6_entry); in mlxsw_sp_fib6_entry_create()
5156 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_entry_destroy() argument
5158 mlxsw_sp_nexthop6_group_put(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_fib6_entry_destroy()
5159 mlxsw_sp_fib6_entry_rt_destroy_all(fib6_entry); in mlxsw_sp_fib6_entry_destroy()
5160 WARN_ON(fib6_entry->nrt6); in mlxsw_sp_fib6_entry_destroy()
5161 kfree(fib6_entry); in mlxsw_sp_fib6_entry_destroy()
5168 struct mlxsw_sp_fib6_entry *fib6_entry, *fallback = NULL; in mlxsw_sp_fib6_node_entry_find() local
5170 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_entry_find()
5171 struct fib6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry); in mlxsw_sp_fib6_node_entry_find()
5180 return fib6_entry; in mlxsw_sp_fib6_node_entry_find()
5182 fallback = fallback ?: fib6_entry; in mlxsw_sp_fib6_node_entry_find()
5185 return fallback ?: fib6_entry; in mlxsw_sp_fib6_node_entry_find()
5197 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_node_list_insert() local
5199 fib6_entry = mlxsw_sp_fib6_node_entry_find(fib_node, nrt, replace); in mlxsw_sp_fib6_node_list_insert()
5201 if (replace && WARN_ON(!fib6_entry)) in mlxsw_sp_fib6_node_list_insert()
5204 if (fib6_entry) { in mlxsw_sp_fib6_node_list_insert()
5206 &fib6_entry->common.list); in mlxsw_sp_fib6_node_list_insert()
5215 fib6_entry = last; in mlxsw_sp_fib6_node_list_insert()
5218 if (fib6_entry) in mlxsw_sp_fib6_node_list_insert()
5220 &fib6_entry->common.list); in mlxsw_sp_fib6_node_list_insert()
5230 mlxsw_sp_fib6_node_list_remove(struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_node_list_remove() argument
5232 list_del(&fib6_entry->common.list); in mlxsw_sp_fib6_node_list_remove()
5236 struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_node_entry_link() argument
5241 err = mlxsw_sp_fib6_node_list_insert(fib6_entry, replace); in mlxsw_sp_fib6_node_entry_link()
5245 err = mlxsw_sp_fib_node_entry_add(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_fib6_node_entry_link()
5252 mlxsw_sp_fib6_node_list_remove(fib6_entry); in mlxsw_sp_fib6_node_entry_link()
5258 struct mlxsw_sp_fib6_entry *fib6_entry) in mlxsw_sp_fib6_node_entry_unlink() argument
5260 mlxsw_sp_fib_node_entry_del(mlxsw_sp, &fib6_entry->common); in mlxsw_sp_fib6_node_entry_unlink()
5261 mlxsw_sp_fib6_node_list_remove(fib6_entry); in mlxsw_sp_fib6_node_entry_unlink()
5268 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_fib6_entry_lookup() local
5284 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_entry_lookup()
5285 struct fib6_info *iter_rt = mlxsw_sp_fib6_entry_rt(fib6_entry); in mlxsw_sp_fib6_entry_lookup()
5289 mlxsw_sp_fib6_entry_rt_find(fib6_entry, rt)) in mlxsw_sp_fib6_entry_lookup()
5290 return fib6_entry; in mlxsw_sp_fib6_entry_lookup()
5297 struct mlxsw_sp_fib6_entry *fib6_entry, in mlxsw_sp_fib6_entry_replace() argument
5300 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_entry_replace()
5306 replaced = list_next_entry(fib6_entry, common.list); in mlxsw_sp_fib6_entry_replace()
5316 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_router_fib6_add() local
5340 fib6_entry = mlxsw_sp_fib6_node_mp_entry_find(fib_node, rt, replace); in mlxsw_sp_router_fib6_add()
5341 if (fib6_entry) { in mlxsw_sp_router_fib6_add()
5342 err = mlxsw_sp_fib6_entry_nexthop_add(mlxsw_sp, fib6_entry, rt); in mlxsw_sp_router_fib6_add()
5348 fib6_entry = mlxsw_sp_fib6_entry_create(mlxsw_sp, fib_node, rt); in mlxsw_sp_router_fib6_add()
5349 if (IS_ERR(fib6_entry)) { in mlxsw_sp_router_fib6_add()
5350 err = PTR_ERR(fib6_entry); in mlxsw_sp_router_fib6_add()
5354 err = mlxsw_sp_fib6_node_entry_link(mlxsw_sp, fib6_entry, replace); in mlxsw_sp_router_fib6_add()
5358 mlxsw_sp_fib6_entry_replace(mlxsw_sp, fib6_entry, replace); in mlxsw_sp_router_fib6_add()
5363 mlxsw_sp_fib6_entry_destroy(mlxsw_sp, fib6_entry); in mlxsw_sp_router_fib6_add()
5373 struct mlxsw_sp_fib6_entry *fib6_entry; in mlxsw_sp_router_fib6_del() local
5382 fib6_entry = mlxsw_sp_fib6_entry_lookup(mlxsw_sp, rt); in mlxsw_sp_router_fib6_del()
5383 if (WARN_ON(!fib6_entry)) in mlxsw_sp_router_fib6_del()
5389 if (!list_is_singular(&fib6_entry->rt6_list)) { in mlxsw_sp_router_fib6_del()
5390 mlxsw_sp_fib6_entry_nexthop_del(mlxsw_sp, fib6_entry, rt); in mlxsw_sp_router_fib6_del()
5394 fib_node = fib6_entry->common.fib_node; in mlxsw_sp_router_fib6_del()
5396 mlxsw_sp_fib6_node_entry_unlink(mlxsw_sp, fib6_entry); in mlxsw_sp_router_fib6_del()
5397 mlxsw_sp_fib6_entry_destroy(mlxsw_sp, fib6_entry); in mlxsw_sp_router_fib6_del()
5571 struct mlxsw_sp_fib6_entry *fib6_entry, *tmp; in mlxsw_sp_fib6_node_flush() local
5573 list_for_each_entry_safe(fib6_entry, tmp, &fib_node->entry_list, in mlxsw_sp_fib6_node_flush()
5577 mlxsw_sp_fib6_node_entry_unlink(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_node_flush()
5578 mlxsw_sp_fib6_entry_destroy(mlxsw_sp, fib6_entry); in mlxsw_sp_fib6_node_flush()