Lines Matching refs:fib_node

388 	struct mlxsw_sp_fib_node *fib_node;  member
1136 static struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_ipip_entry_find_decap() local
1171 fib_node = mlxsw_sp_fib_node_lookup(ul_fib, saddrp, saddr_len, in mlxsw_sp_ipip_entry_find_decap()
1173 if (!fib_node || list_empty(&fib_node->entry_list)) in mlxsw_sp_ipip_entry_find_decap()
1176 fib_entry = list_first_entry(&fib_node->entry_list, in mlxsw_sp_ipip_entry_find_decap()
2964 if (fib == fib_entry->fib_node->fib) in mlxsw_sp_adj_index_mass_update()
2966 fib = fib_entry->fib_node->fib; in mlxsw_sp_adj_index_mass_update()
3080 mlxsw_sp_fib_node_entry_is_first(const struct mlxsw_sp_fib_node *fib_node,
3091 if (!mlxsw_sp_fib_node_entry_is_first(fib_entry->fib_node, in mlxsw_sp_nexthop_fib_entries_update()
3112 if (!mlxsw_sp_fib_node_entry_is_first(fib_entry->fib_node, in mlxsw_sp_nexthop_fib_entries_refresh()
3803 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_should_offload()
3926 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_offload_set()
3939 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_offload_unset()
3974 struct mlxsw_sp_fib *fib = fib_entry->fib_node->fib; in mlxsw_sp_fib_entry_ralue_pack()
3982 p_dip = (u32 *) fib_entry->fib_node->key.addr; in mlxsw_sp_fib_entry_ralue_pack()
3984 fib_entry->fib_node->key.prefix_len, in mlxsw_sp_fib_entry_ralue_pack()
3989 fib_entry->fib_node->key.prefix_len, in mlxsw_sp_fib_entry_ralue_pack()
3990 fib_entry->fib_node->key.addr); in mlxsw_sp_fib_entry_ralue_pack()
4164 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib4_entry_create() argument
4189 fib_entry->fib_node = fib_node; in mlxsw_sp_fib4_entry_create()
4211 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib4_entry_lookup() local
4220 fib_node = mlxsw_sp_fib_node_lookup(fib, &fen_info->dst, in mlxsw_sp_fib4_entry_lookup()
4223 if (!fib_node) in mlxsw_sp_fib4_entry_lookup()
4226 list_for_each_entry(fib4_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib4_entry_lookup()
4247 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_insert() argument
4249 return rhashtable_insert_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_insert()
4254 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_remove() argument
4256 rhashtable_remove_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_remove()
4276 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_create() local
4278 fib_node = kzalloc(sizeof(*fib_node), GFP_KERNEL); in mlxsw_sp_fib_node_create()
4279 if (!fib_node) in mlxsw_sp_fib_node_create()
4282 INIT_LIST_HEAD(&fib_node->entry_list); in mlxsw_sp_fib_node_create()
4283 list_add(&fib_node->list, &fib->node_list); in mlxsw_sp_fib_node_create()
4284 memcpy(fib_node->key.addr, addr, addr_len); in mlxsw_sp_fib_node_create()
4285 fib_node->key.prefix_len = prefix_len; in mlxsw_sp_fib_node_create()
4287 return fib_node; in mlxsw_sp_fib_node_create()
4290 static void mlxsw_sp_fib_node_destroy(struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_destroy() argument
4292 list_del(&fib_node->list); in mlxsw_sp_fib_node_destroy()
4293 WARN_ON(!list_empty(&fib_node->entry_list)); in mlxsw_sp_fib_node_destroy()
4294 kfree(fib_node); in mlxsw_sp_fib_node_destroy()
4298 mlxsw_sp_fib_node_entry_is_first(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib_node_entry_is_first() argument
4301 return list_first_entry(&fib_node->entry_list, in mlxsw_sp_fib_node_entry_is_first()
4306 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_link() argument
4309 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_link()
4314 if (lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_link()
4318 mlxsw_sp_prefix_usage_set(&req_prefix_usage, fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_link()
4329 lpm_tree->prefix_ref_count[fib_node->key.prefix_len]++; in mlxsw_sp_fib_lpm_tree_link()
4338 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_unlink() argument
4340 struct mlxsw_sp_lpm_tree *lpm_tree = fib_node->fib->lpm_tree; in mlxsw_sp_fib_lpm_tree_unlink()
4342 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_unlink()
4345 if (--lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_unlink()
4352 fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_unlink()
4369 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib_node_init() argument
4374 err = mlxsw_sp_fib_node_insert(fib, fib_node); in mlxsw_sp_fib_node_init()
4377 fib_node->fib = fib; in mlxsw_sp_fib_node_init()
4379 err = mlxsw_sp_fib_lpm_tree_link(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_init()
4386 fib_node->fib = NULL; in mlxsw_sp_fib_node_init()
4387 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_init()
4392 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_fini() argument
4394 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_node_fini()
4396 mlxsw_sp_fib_lpm_tree_unlink(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_fini()
4397 fib_node->fib = NULL; in mlxsw_sp_fib_node_fini()
4398 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_fini()
4406 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_get() local
4416 fib_node = mlxsw_sp_fib_node_lookup(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
4417 if (fib_node) in mlxsw_sp_fib_node_get()
4418 return fib_node; in mlxsw_sp_fib_node_get()
4420 fib_node = mlxsw_sp_fib_node_create(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
4421 if (!fib_node) { in mlxsw_sp_fib_node_get()
4426 err = mlxsw_sp_fib_node_init(mlxsw_sp, fib_node, fib); in mlxsw_sp_fib_node_get()
4430 return fib_node; in mlxsw_sp_fib_node_get()
4433 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_get()
4440 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_put() argument
4442 struct mlxsw_sp_vr *vr = fib_node->fib->vr; in mlxsw_sp_fib_node_put()
4444 if (!list_empty(&fib_node->entry_list)) in mlxsw_sp_fib_node_put()
4446 mlxsw_sp_fib_node_fini(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_put()
4447 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_put()
4452 mlxsw_sp_fib4_node_entry_find(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib4_node_entry_find() argument
4457 list_for_each_entry(fib4_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib4_node_entry_find()
4476 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib4_node_list_append() local
4481 fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_node_list_append()
4482 list_for_each_entry_from(fib4_entry, &fib_node->entry_list, in mlxsw_sp_fib4_node_list_append()
4498 struct mlxsw_sp_fib_node *fib_node = new4_entry->common.fib_node; in mlxsw_sp_fib4_node_list_insert() local
4501 fib4_entry = mlxsw_sp_fib4_node_entry_find(fib_node, new4_entry); in mlxsw_sp_fib4_node_list_insert()
4517 list_for_each_entry(last, &fib_node->entry_list, common.list) { in mlxsw_sp_fib4_node_list_insert()
4528 &fib_node->entry_list); in mlxsw_sp_fib4_node_list_insert()
4543 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in mlxsw_sp_fib_node_entry_add() local
4545 if (!mlxsw_sp_fib_node_entry_is_first(fib_node, fib_entry)) in mlxsw_sp_fib_node_entry_add()
4551 if (!list_is_singular(&fib_node->entry_list)) { in mlxsw_sp_fib_node_entry_add()
4564 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in mlxsw_sp_fib_node_entry_del() local
4566 if (!mlxsw_sp_fib_node_entry_is_first(fib_node, fib_entry)) in mlxsw_sp_fib_node_entry_del()
4570 if (!list_is_singular(&fib_node->entry_list)) { in mlxsw_sp_fib_node_entry_del()
4618 struct mlxsw_sp_fib_node *fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_entry_replace() local
4629 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib4_entry_replace()
4638 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_add() local
4644 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, fen_info->tb_id, in mlxsw_sp_router_fib4_add()
4648 if (IS_ERR(fib_node)) { in mlxsw_sp_router_fib4_add()
4650 return PTR_ERR(fib_node); in mlxsw_sp_router_fib4_add()
4653 fib4_entry = mlxsw_sp_fib4_entry_create(mlxsw_sp, fib_node, fen_info); in mlxsw_sp_router_fib4_add()
4674 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_add()
4682 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_del() local
4690 fib_node = fib4_entry->common.fib_node; in mlxsw_sp_router_fib4_del()
4694 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_del()
4768 mlxsw_sp_fib6_node_mp_entry_find(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_node_mp_entry_find() argument
4776 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_mp_entry_find()
5115 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_entry_create() argument
5143 fib_entry->fib_node = fib_node; in mlxsw_sp_fib6_entry_create()
5165 mlxsw_sp_fib6_node_entry_find(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_node_entry_find() argument
5170 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_entry_find()
5195 struct mlxsw_sp_fib_node *fib_node = new6_entry->common.fib_node; 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()
5210 list_for_each_entry(last, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_list_insert()
5223 &fib_node->entry_list); in mlxsw_sp_fib6_node_list_insert()
5269 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib6_entry_lookup() local
5278 fib_node = mlxsw_sp_fib_node_lookup(fib, &rt->fib6_dst.addr, in mlxsw_sp_fib6_entry_lookup()
5281 if (!fib_node) in mlxsw_sp_fib6_entry_lookup()
5284 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_entry_lookup()
5300 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_entry_replace() local
5310 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib6_entry_replace()
5317 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_add() local
5329 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, rt->fib6_table->tb6_id, in mlxsw_sp_router_fib6_add()
5334 if (IS_ERR(fib_node)) in mlxsw_sp_router_fib6_add()
5335 return PTR_ERR(fib_node); in mlxsw_sp_router_fib6_add()
5340 fib6_entry = mlxsw_sp_fib6_node_mp_entry_find(fib_node, rt, replace); 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()
5366 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_add()
5374 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_del() local
5394 fib_node = fib6_entry->common.fib_node; in mlxsw_sp_router_fib6_del()
5398 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_del()
5548 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib4_node_flush() argument
5552 list_for_each_entry_safe(fib4_entry, tmp, &fib_node->entry_list, in mlxsw_sp_fib4_node_flush()
5554 bool do_break = &tmp->common.list == &fib_node->entry_list; in mlxsw_sp_fib4_node_flush()
5558 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib4_node_flush()
5569 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib6_node_flush() argument
5573 list_for_each_entry_safe(fib6_entry, tmp, &fib_node->entry_list, in mlxsw_sp_fib6_node_flush()
5575 bool do_break = &tmp->common.list == &fib_node->entry_list; in mlxsw_sp_fib6_node_flush()
5579 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib6_node_flush()
5586 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_flush() argument
5588 switch (fib_node->fib->proto) { in mlxsw_sp_fib_node_flush()
5590 mlxsw_sp_fib4_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
5593 mlxsw_sp_fib6_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
5603 struct mlxsw_sp_fib_node *fib_node, *tmp; in mlxsw_sp_vr_fib_flush() local
5605 list_for_each_entry_safe(fib_node, tmp, &fib->node_list, list) { in mlxsw_sp_vr_fib_flush()
5608 mlxsw_sp_fib_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_vr_fib_flush()