Lines Matching refs:fib_node
476 struct mlxsw_sp_fib_node *fib_node; member
1346 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_ip2me_fib_entry_find() local
1376 fib_node = mlxsw_sp_fib_node_lookup(fib, addrp, addr_len, in mlxsw_sp_router_ip2me_fib_entry_find()
1378 if (!fib_node || fib_node->fib_entry->type != type) in mlxsw_sp_router_ip2me_fib_entry_find()
1381 return fib_node->fib_entry; in mlxsw_sp_router_ip2me_fib_entry_find()
1389 static struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_ipip_entry_find_decap() local
1428 fib_node = mlxsw_sp_fib_node_lookup(ul_fib, saddrp, saddr_len, in mlxsw_sp_ipip_entry_find_decap()
1430 if (!fib_node || in mlxsw_sp_ipip_entry_find_decap()
1431 fib_node->fib_entry->type != MLXSW_SP_FIB_ENTRY_TYPE_TRAP) in mlxsw_sp_ipip_entry_find_decap()
1434 return fib_node->fib_entry; in mlxsw_sp_ipip_entry_find_decap()
5700 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_should_offload()
5766 u32 *p_dst = (u32 *) fib_entry->fib_node->key.addr; in mlxsw_sp_fib4_entry_hw_flags_set()
5767 int dst_len = fib_entry->fib_node->key.prefix_len; in mlxsw_sp_fib4_entry_hw_flags_set()
5791 u32 *p_dst = (u32 *) fib_entry->fib_node->key.addr; in mlxsw_sp_fib4_entry_hw_flags_clear()
5792 int dst_len = fib_entry->fib_node->key.prefix_len; in mlxsw_sp_fib4_entry_hw_flags_clear()
5888 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_hw_flags_set()
5902 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_hw_flags_clear()
5934 struct mlxsw_sp_fib *fib = fib_entry->fib_node->fib; in mlxsw_sp_fib_entry_ralue_pack()
5942 p_dip = (u32 *) fib_entry->fib_node->key.addr; in mlxsw_sp_fib_entry_ralue_pack()
5944 fib_entry->fib_node->key.prefix_len, in mlxsw_sp_fib_entry_ralue_pack()
5949 fib_entry->fib_node->key.prefix_len, in mlxsw_sp_fib_entry_ralue_pack()
5950 fib_entry->fib_node->key.addr); in mlxsw_sp_fib_entry_ralue_pack()
6226 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib4_entry_create() argument
6243 fib_node->fib); in mlxsw_sp_fib4_entry_create()
6257 fib_entry->fib_node = fib_node; in mlxsw_sp_fib4_entry_create()
6262 mlxsw_sp_nexthop_group_vr_unlink(fib_entry->nh_group, fib_node->fib); in mlxsw_sp_fib4_entry_create()
6273 struct mlxsw_sp_fib_node *fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_entry_destroy() local
6278 fib_node->fib); in mlxsw_sp_fib4_entry_destroy()
6288 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib4_entry_lookup() local
6297 fib_node = mlxsw_sp_fib_node_lookup(fib, &fen_info->dst, in mlxsw_sp_fib4_entry_lookup()
6300 if (!fib_node) in mlxsw_sp_fib4_entry_lookup()
6303 fib4_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib4_entry_lookup()
6322 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_insert() argument
6324 return rhashtable_insert_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_insert()
6329 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_remove() argument
6331 rhashtable_remove_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_remove()
6351 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_create() local
6353 fib_node = kzalloc(sizeof(*fib_node), GFP_KERNEL); in mlxsw_sp_fib_node_create()
6354 if (!fib_node) in mlxsw_sp_fib_node_create()
6357 list_add(&fib_node->list, &fib->node_list); in mlxsw_sp_fib_node_create()
6358 memcpy(fib_node->key.addr, addr, addr_len); in mlxsw_sp_fib_node_create()
6359 fib_node->key.prefix_len = prefix_len; in mlxsw_sp_fib_node_create()
6361 return fib_node; in mlxsw_sp_fib_node_create()
6364 static void mlxsw_sp_fib_node_destroy(struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_destroy() argument
6366 list_del(&fib_node->list); in mlxsw_sp_fib_node_destroy()
6367 kfree(fib_node); in mlxsw_sp_fib_node_destroy()
6371 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_link() argument
6374 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_link()
6379 if (lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_link()
6383 mlxsw_sp_prefix_usage_set(&req_prefix_usage, fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_link()
6394 lpm_tree->prefix_ref_count[fib_node->key.prefix_len]++; in mlxsw_sp_fib_lpm_tree_link()
6403 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_unlink() argument
6405 struct mlxsw_sp_lpm_tree *lpm_tree = fib_node->fib->lpm_tree; in mlxsw_sp_fib_lpm_tree_unlink()
6407 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_unlink()
6410 if (--lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_unlink()
6417 fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_unlink()
6434 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib_node_init() argument
6439 err = mlxsw_sp_fib_node_insert(fib, fib_node); in mlxsw_sp_fib_node_init()
6442 fib_node->fib = fib; in mlxsw_sp_fib_node_init()
6444 err = mlxsw_sp_fib_lpm_tree_link(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_init()
6451 fib_node->fib = NULL; in mlxsw_sp_fib_node_init()
6452 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_init()
6457 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_fini() argument
6459 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_node_fini()
6461 mlxsw_sp_fib_lpm_tree_unlink(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_fini()
6462 fib_node->fib = NULL; in mlxsw_sp_fib_node_fini()
6463 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_fini()
6471 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_get() local
6481 fib_node = mlxsw_sp_fib_node_lookup(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
6482 if (fib_node) in mlxsw_sp_fib_node_get()
6483 return fib_node; in mlxsw_sp_fib_node_get()
6485 fib_node = mlxsw_sp_fib_node_create(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
6486 if (!fib_node) { in mlxsw_sp_fib_node_get()
6491 err = mlxsw_sp_fib_node_init(mlxsw_sp, fib_node, fib); in mlxsw_sp_fib_node_get()
6495 return fib_node; in mlxsw_sp_fib_node_get()
6498 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_get()
6505 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_put() argument
6507 struct mlxsw_sp_vr *vr = fib_node->fib->vr; in mlxsw_sp_fib_node_put()
6509 if (fib_node->fib_entry) in mlxsw_sp_fib_node_put()
6511 mlxsw_sp_fib_node_fini(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_put()
6512 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_put()
6519 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in mlxsw_sp_fib_node_entry_link() local
6522 fib_node->fib_entry = fib_entry; in mlxsw_sp_fib_node_entry_link()
6531 fib_node->fib_entry = NULL; in mlxsw_sp_fib_node_entry_link()
6539 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in mlxsw_sp_fib_node_entry_unlink() local
6542 fib_node->fib_entry = NULL; in mlxsw_sp_fib_node_entry_unlink()
6547 struct mlxsw_sp_fib_node *fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_allow_replace() local
6550 if (!fib_node->fib_entry) in mlxsw_sp_fib4_allow_replace()
6553 fib4_replaced = container_of(fib_node->fib_entry, in mlxsw_sp_fib4_allow_replace()
6568 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_replace() local
6575 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, fen_info->tb_id, in mlxsw_sp_router_fib4_replace()
6579 if (IS_ERR(fib_node)) { in mlxsw_sp_router_fib4_replace()
6581 return PTR_ERR(fib_node); in mlxsw_sp_router_fib4_replace()
6584 fib4_entry = mlxsw_sp_fib4_entry_create(mlxsw_sp, fib_node, fen_info); in mlxsw_sp_router_fib4_replace()
6593 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_replace()
6597 replaced = fib_node->fib_entry; in mlxsw_sp_router_fib4_replace()
6616 fib_node->fib_entry = replaced; in mlxsw_sp_router_fib4_replace()
6619 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_replace()
6627 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_del() local
6632 fib_node = fib4_entry->common.fib_node; in mlxsw_sp_router_fib4_del()
6636 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_del()
6949 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_nexthop6_group_update() local
6952 mlxsw_sp_nexthop_group_vr_unlink(old_nh_grp, fib_node->fib); in mlxsw_sp_nexthop6_group_update()
6961 fib_node->fib); in mlxsw_sp_nexthop6_group_update()
6980 fib_node->fib); in mlxsw_sp_nexthop6_group_update()
6987 mlxsw_sp_nexthop_group_vr_link(old_nh_grp, fib_node->fib); in mlxsw_sp_nexthop6_group_update()
7119 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_entry_create() argument
7149 fib_node->fib); in mlxsw_sp_fib6_entry_create()
7157 fib_entry->fib_node = fib_node; in mlxsw_sp_fib6_entry_create()
7162 mlxsw_sp_nexthop_group_vr_unlink(fib_entry->nh_group, fib_node->fib); in mlxsw_sp_fib6_entry_create()
7187 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_entry_destroy() local
7191 fib_node->fib); in mlxsw_sp_fib6_entry_destroy()
7203 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib6_entry_lookup() local
7213 fib_node = mlxsw_sp_fib_node_lookup(fib, &rt->fib6_dst.addr, in mlxsw_sp_fib6_entry_lookup()
7216 if (!fib_node) in mlxsw_sp_fib6_entry_lookup()
7219 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_entry_lookup()
7232 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_allow_replace() local
7236 if (!fib_node->fib_entry) in mlxsw_sp_fib6_allow_replace()
7239 fib6_replaced = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_allow_replace()
7257 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_replace() local
7270 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, rt->fib6_table->tb6_id, in mlxsw_sp_router_fib6_replace()
7275 if (IS_ERR(fib_node)) in mlxsw_sp_router_fib6_replace()
7276 return PTR_ERR(fib_node); in mlxsw_sp_router_fib6_replace()
7278 fib6_entry = mlxsw_sp_fib6_entry_create(mlxsw_sp, fib_node, rt_arr, in mlxsw_sp_router_fib6_replace()
7287 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_replace()
7291 replaced = fib_node->fib_entry; in mlxsw_sp_router_fib6_replace()
7308 fib_node->fib_entry = replaced; in mlxsw_sp_router_fib6_replace()
7311 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_replace()
7320 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_append() local
7330 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, rt->fib6_table->tb6_id, in mlxsw_sp_router_fib6_append()
7335 if (IS_ERR(fib_node)) in mlxsw_sp_router_fib6_append()
7336 return PTR_ERR(fib_node); in mlxsw_sp_router_fib6_append()
7338 if (WARN_ON_ONCE(!fib_node->fib_entry)) { in mlxsw_sp_router_fib6_append()
7339 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_append()
7343 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_router_fib6_append()
7353 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_append()
7362 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_del() local
7386 fib_node = fib6_entry->common.fib_node; in mlxsw_sp_router_fib6_del()
7390 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_del()
7468 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib4_node_flush() argument
7472 fib4_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib4_node_flush()
7474 mlxsw_sp_fib_node_entry_unlink(mlxsw_sp, fib_node->fib_entry); in mlxsw_sp_fib4_node_flush()
7476 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib4_node_flush()
7480 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib6_node_flush() argument
7484 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_node_flush()
7486 mlxsw_sp_fib_node_entry_unlink(mlxsw_sp, fib_node->fib_entry); in mlxsw_sp_fib6_node_flush()
7488 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib6_node_flush()
7492 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_flush() argument
7494 switch (fib_node->fib->proto) { in mlxsw_sp_fib_node_flush()
7496 mlxsw_sp_fib4_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
7499 mlxsw_sp_fib6_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
7509 struct mlxsw_sp_fib_node *fib_node, *tmp; in mlxsw_sp_vr_fib_flush() local
7511 list_for_each_entry_safe(fib_node, tmp, &fib->node_list, list) { in mlxsw_sp_vr_fib_flush()
7514 mlxsw_sp_fib_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_vr_fib_flush()