Lines Matching refs:fib_node

397 	struct mlxsw_sp_fib_node *fib_node;  member
1162 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_ip2me_fib_entry_find() local
1188 fib_node = mlxsw_sp_fib_node_lookup(fib, addrp, addr_len, in mlxsw_sp_router_ip2me_fib_entry_find()
1190 if (!fib_node || list_empty(&fib_node->entry_list)) in mlxsw_sp_router_ip2me_fib_entry_find()
1193 fib_entry = list_first_entry(&fib_node->entry_list, in mlxsw_sp_router_ip2me_fib_entry_find()
1206 static struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_ipip_entry_find_decap() local
1241 fib_node = mlxsw_sp_fib_node_lookup(ul_fib, saddrp, saddr_len, in mlxsw_sp_ipip_entry_find_decap()
1243 if (!fib_node || list_empty(&fib_node->entry_list)) in mlxsw_sp_ipip_entry_find_decap()
1246 fib_entry = list_first_entry(&fib_node->entry_list, in mlxsw_sp_ipip_entry_find_decap()
3078 if (fib == fib_entry->fib_node->fib) in mlxsw_sp_adj_index_mass_update()
3080 fib = fib_entry->fib_node->fib; in mlxsw_sp_adj_index_mass_update()
3194 mlxsw_sp_fib_node_entry_is_first(const struct mlxsw_sp_fib_node *fib_node,
3205 if (!mlxsw_sp_fib_node_entry_is_first(fib_entry->fib_node, in mlxsw_sp_nexthop_fib_entries_update()
3226 if (!mlxsw_sp_fib_node_entry_is_first(fib_entry->fib_node, in mlxsw_sp_nexthop_fib_entries_refresh()
3983 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_should_offload()
4112 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_offload_set()
4125 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_offload_unset()
4160 struct mlxsw_sp_fib *fib = fib_entry->fib_node->fib; in mlxsw_sp_fib_entry_ralue_pack()
4168 p_dip = (u32 *) fib_entry->fib_node->key.addr; in mlxsw_sp_fib_entry_ralue_pack()
4170 fib_entry->fib_node->key.prefix_len, in mlxsw_sp_fib_entry_ralue_pack()
4175 fib_entry->fib_node->key.prefix_len, in mlxsw_sp_fib_entry_ralue_pack()
4176 fib_entry->fib_node->key.addr); in mlxsw_sp_fib_entry_ralue_pack()
4391 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib4_entry_create() argument
4416 fib_entry->fib_node = fib_node; in mlxsw_sp_fib4_entry_create()
4438 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib4_entry_lookup() local
4447 fib_node = mlxsw_sp_fib_node_lookup(fib, &fen_info->dst, in mlxsw_sp_fib4_entry_lookup()
4450 if (!fib_node) in mlxsw_sp_fib4_entry_lookup()
4453 list_for_each_entry(fib4_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib4_entry_lookup()
4474 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_insert() argument
4476 return rhashtable_insert_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_insert()
4481 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_remove() argument
4483 rhashtable_remove_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_remove()
4503 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_create() local
4505 fib_node = kzalloc(sizeof(*fib_node), GFP_KERNEL); in mlxsw_sp_fib_node_create()
4506 if (!fib_node) in mlxsw_sp_fib_node_create()
4509 INIT_LIST_HEAD(&fib_node->entry_list); in mlxsw_sp_fib_node_create()
4510 list_add(&fib_node->list, &fib->node_list); in mlxsw_sp_fib_node_create()
4511 memcpy(fib_node->key.addr, addr, addr_len); in mlxsw_sp_fib_node_create()
4512 fib_node->key.prefix_len = prefix_len; in mlxsw_sp_fib_node_create()
4514 return fib_node; in mlxsw_sp_fib_node_create()
4517 static void mlxsw_sp_fib_node_destroy(struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_destroy() argument
4519 list_del(&fib_node->list); in mlxsw_sp_fib_node_destroy()
4520 WARN_ON(!list_empty(&fib_node->entry_list)); in mlxsw_sp_fib_node_destroy()
4521 kfree(fib_node); in mlxsw_sp_fib_node_destroy()
4525 mlxsw_sp_fib_node_entry_is_first(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib_node_entry_is_first() argument
4528 return list_first_entry(&fib_node->entry_list, in mlxsw_sp_fib_node_entry_is_first()
4533 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_link() argument
4536 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_link()
4541 if (lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_link()
4545 mlxsw_sp_prefix_usage_set(&req_prefix_usage, fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_link()
4556 lpm_tree->prefix_ref_count[fib_node->key.prefix_len]++; in mlxsw_sp_fib_lpm_tree_link()
4565 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_unlink() argument
4567 struct mlxsw_sp_lpm_tree *lpm_tree = fib_node->fib->lpm_tree; in mlxsw_sp_fib_lpm_tree_unlink()
4569 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_unlink()
4572 if (--lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_unlink()
4579 fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_unlink()
4596 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib_node_init() argument
4601 err = mlxsw_sp_fib_node_insert(fib, fib_node); in mlxsw_sp_fib_node_init()
4604 fib_node->fib = fib; in mlxsw_sp_fib_node_init()
4606 err = mlxsw_sp_fib_lpm_tree_link(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_init()
4613 fib_node->fib = NULL; in mlxsw_sp_fib_node_init()
4614 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_init()
4619 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_fini() argument
4621 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_node_fini()
4623 mlxsw_sp_fib_lpm_tree_unlink(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_fini()
4624 fib_node->fib = NULL; in mlxsw_sp_fib_node_fini()
4625 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_fini()
4633 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_get() local
4643 fib_node = mlxsw_sp_fib_node_lookup(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
4644 if (fib_node) in mlxsw_sp_fib_node_get()
4645 return fib_node; in mlxsw_sp_fib_node_get()
4647 fib_node = mlxsw_sp_fib_node_create(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
4648 if (!fib_node) { in mlxsw_sp_fib_node_get()
4653 err = mlxsw_sp_fib_node_init(mlxsw_sp, fib_node, fib); in mlxsw_sp_fib_node_get()
4657 return fib_node; in mlxsw_sp_fib_node_get()
4660 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_get()
4667 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_put() argument
4669 struct mlxsw_sp_vr *vr = fib_node->fib->vr; in mlxsw_sp_fib_node_put()
4671 if (!list_empty(&fib_node->entry_list)) in mlxsw_sp_fib_node_put()
4673 mlxsw_sp_fib_node_fini(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_put()
4674 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_put()
4679 mlxsw_sp_fib4_node_entry_find(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib4_node_entry_find() argument
4684 list_for_each_entry(fib4_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib4_node_entry_find()
4703 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib4_node_list_append() local
4708 fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_node_list_append()
4709 list_for_each_entry_from(fib4_entry, &fib_node->entry_list, in mlxsw_sp_fib4_node_list_append()
4725 struct mlxsw_sp_fib_node *fib_node = new4_entry->common.fib_node; in mlxsw_sp_fib4_node_list_insert() local
4728 fib4_entry = mlxsw_sp_fib4_node_entry_find(fib_node, new4_entry); in mlxsw_sp_fib4_node_list_insert()
4744 list_for_each_entry(last, &fib_node->entry_list, common.list) { in mlxsw_sp_fib4_node_list_insert()
4755 &fib_node->entry_list); in mlxsw_sp_fib4_node_list_insert()
4770 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in mlxsw_sp_fib_node_entry_add() local
4772 if (!mlxsw_sp_fib_node_entry_is_first(fib_node, fib_entry)) in mlxsw_sp_fib_node_entry_add()
4778 if (!list_is_singular(&fib_node->entry_list)) { in mlxsw_sp_fib_node_entry_add()
4791 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in mlxsw_sp_fib_node_entry_del() local
4793 if (!mlxsw_sp_fib_node_entry_is_first(fib_node, fib_entry)) in mlxsw_sp_fib_node_entry_del()
4797 if (!list_is_singular(&fib_node->entry_list)) { in mlxsw_sp_fib_node_entry_del()
4845 struct mlxsw_sp_fib_node *fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_entry_replace() local
4856 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib4_entry_replace()
4865 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_add() local
4871 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, fen_info->tb_id, in mlxsw_sp_router_fib4_add()
4875 if (IS_ERR(fib_node)) { in mlxsw_sp_router_fib4_add()
4877 return PTR_ERR(fib_node); in mlxsw_sp_router_fib4_add()
4880 fib4_entry = mlxsw_sp_fib4_entry_create(mlxsw_sp, fib_node, fen_info); in mlxsw_sp_router_fib4_add()
4901 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_add()
4909 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_del() local
4917 fib_node = fib4_entry->common.fib_node; in mlxsw_sp_router_fib4_del()
4921 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_del()
4996 mlxsw_sp_fib6_node_mp_entry_find(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_node_mp_entry_find() argument
5004 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_mp_entry_find()
5358 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_entry_create() argument
5389 fib_entry->fib_node = fib_node; in mlxsw_sp_fib6_entry_create()
5417 mlxsw_sp_fib6_node_entry_find(const struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_node_entry_find() argument
5422 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_entry_find()
5447 struct mlxsw_sp_fib_node *fib_node = new6_entry->common.fib_node; in mlxsw_sp_fib6_node_list_insert() local
5451 fib6_entry = mlxsw_sp_fib6_node_entry_find(fib_node, nrt, *p_replace); in mlxsw_sp_fib6_node_list_insert()
5462 list_for_each_entry(last, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_node_list_insert()
5475 &fib_node->entry_list); in mlxsw_sp_fib6_node_list_insert()
5521 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib6_entry_lookup() local
5530 fib_node = mlxsw_sp_fib_node_lookup(fib, &rt->fib6_dst.addr, in mlxsw_sp_fib6_entry_lookup()
5533 if (!fib_node) in mlxsw_sp_fib6_entry_lookup()
5536 list_for_each_entry(fib6_entry, &fib_node->entry_list, common.list) { in mlxsw_sp_fib6_entry_lookup()
5552 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_entry_replace() local
5562 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib6_entry_replace()
5570 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_add() local
5583 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, rt->fib6_table->tb6_id, in mlxsw_sp_router_fib6_add()
5588 if (IS_ERR(fib_node)) in mlxsw_sp_router_fib6_add()
5589 return PTR_ERR(fib_node); in mlxsw_sp_router_fib6_add()
5594 fib6_entry = mlxsw_sp_fib6_node_mp_entry_find(fib_node, rt, replace); in mlxsw_sp_router_fib6_add()
5603 fib6_entry = mlxsw_sp_fib6_entry_create(mlxsw_sp, fib_node, rt_arr, in mlxsw_sp_router_fib6_add()
5622 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_add()
5631 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_del() local
5653 fib_node = fib6_entry->common.fib_node; in mlxsw_sp_router_fib6_del()
5657 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_del()
5807 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib4_node_flush() argument
5811 list_for_each_entry_safe(fib4_entry, tmp, &fib_node->entry_list, in mlxsw_sp_fib4_node_flush()
5813 bool do_break = &tmp->common.list == &fib_node->entry_list; in mlxsw_sp_fib4_node_flush()
5817 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib4_node_flush()
5828 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib6_node_flush() argument
5832 list_for_each_entry_safe(fib6_entry, tmp, &fib_node->entry_list, in mlxsw_sp_fib6_node_flush()
5834 bool do_break = &tmp->common.list == &fib_node->entry_list; in mlxsw_sp_fib6_node_flush()
5838 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib6_node_flush()
5845 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_flush() argument
5847 switch (fib_node->fib->proto) { in mlxsw_sp_fib_node_flush()
5849 mlxsw_sp_fib4_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
5852 mlxsw_sp_fib6_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
5862 struct mlxsw_sp_fib_node *fib_node, *tmp; in mlxsw_sp_vr_fib_flush() local
5864 list_for_each_entry_safe(fib_node, tmp, &fib->node_list, list) { in mlxsw_sp_vr_fib_flush()
5867 mlxsw_sp_fib_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_vr_fib_flush()