Lines Matching refs:fib_node
429 struct mlxsw_sp_fib_node *fib_node; member
1244 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_ip2me_fib_entry_find() local
1270 fib_node = mlxsw_sp_fib_node_lookup(fib, addrp, addr_len, in mlxsw_sp_router_ip2me_fib_entry_find()
1272 if (!fib_node || fib_node->fib_entry->type != type) in mlxsw_sp_router_ip2me_fib_entry_find()
1275 return fib_node->fib_entry; in mlxsw_sp_router_ip2me_fib_entry_find()
1283 static struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_ipip_entry_find_decap() local
1317 fib_node = mlxsw_sp_fib_node_lookup(ul_fib, saddrp, saddr_len, in mlxsw_sp_ipip_entry_find_decap()
1319 if (!fib_node || in mlxsw_sp_ipip_entry_find_decap()
1320 fib_node->fib_entry->type != MLXSW_SP_FIB_ENTRY_TYPE_TRAP) in mlxsw_sp_ipip_entry_find_decap()
1323 return fib_node->fib_entry; in mlxsw_sp_ipip_entry_find_decap()
5373 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_should_offload()
5438 u32 *p_dst = (u32 *) fib_entry->fib_node->key.addr; in mlxsw_sp_fib4_entry_hw_flags_set()
5439 int dst_len = fib_entry->fib_node->key.prefix_len; in mlxsw_sp_fib4_entry_hw_flags_set()
5463 u32 *p_dst = (u32 *) fib_entry->fib_node->key.addr; in mlxsw_sp_fib4_entry_hw_flags_clear()
5464 int dst_len = fib_entry->fib_node->key.prefix_len; in mlxsw_sp_fib4_entry_hw_flags_clear()
5560 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_hw_flags_set()
5574 switch (fib_entry->fib_node->fib->proto) { in mlxsw_sp_fib_entry_hw_flags_clear()
5706 struct mlxsw_sp_fib *fib = fib_entry->fib_node->fib; in mlxsw_sp_fib_entry_pack()
5710 fib_entry->fib_node->key.prefix_len, in mlxsw_sp_fib_entry_pack()
5711 fib_entry->fib_node->key.addr, in mlxsw_sp_fib_entry_pack()
5768 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_op_remote()
5808 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_op_local()
5832 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_op_trap()
5844 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_op_blackhole()
5859 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_op_unreachable()
5877 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_op_ipip_decap()
5902 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_op_nve_decap()
5972 const struct mlxsw_sp_router_ll_ops *ll_ops = fib_entry->fib_node->fib->ll_ops; in mlxsw_sp_fib_entry_del()
6053 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib4_entry_create() argument
6065 fib_entry->priv = mlxsw_sp_fib_entry_priv_create(fib_node->fib->ll_ops); in mlxsw_sp_fib4_entry_create()
6076 fib_node->fib); in mlxsw_sp_fib4_entry_create()
6090 fib_entry->fib_node = fib_node; in mlxsw_sp_fib4_entry_create()
6095 mlxsw_sp_nexthop_group_vr_unlink(fib_entry->nh_group, fib_node->fib); in mlxsw_sp_fib4_entry_create()
6108 struct mlxsw_sp_fib_node *fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_entry_destroy() local
6113 fib_node->fib); in mlxsw_sp_fib4_entry_destroy()
6124 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib4_entry_lookup() local
6133 fib_node = mlxsw_sp_fib_node_lookup(fib, &fen_info->dst, in mlxsw_sp_fib4_entry_lookup()
6136 if (!fib_node) in mlxsw_sp_fib4_entry_lookup()
6139 fib4_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib4_entry_lookup()
6158 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_insert() argument
6160 return rhashtable_insert_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_insert()
6165 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_remove() argument
6167 rhashtable_remove_fast(&fib->ht, &fib_node->ht_node, in mlxsw_sp_fib_node_remove()
6187 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_create() local
6189 fib_node = kzalloc(sizeof(*fib_node), GFP_KERNEL); in mlxsw_sp_fib_node_create()
6190 if (!fib_node) in mlxsw_sp_fib_node_create()
6193 list_add(&fib_node->list, &fib->node_list); in mlxsw_sp_fib_node_create()
6194 memcpy(fib_node->key.addr, addr, addr_len); in mlxsw_sp_fib_node_create()
6195 fib_node->key.prefix_len = prefix_len; in mlxsw_sp_fib_node_create()
6197 return fib_node; in mlxsw_sp_fib_node_create()
6200 static void mlxsw_sp_fib_node_destroy(struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_destroy() argument
6202 list_del(&fib_node->list); in mlxsw_sp_fib_node_destroy()
6203 kfree(fib_node); in mlxsw_sp_fib_node_destroy()
6207 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_link() argument
6210 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_link()
6215 if (lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_link()
6219 mlxsw_sp_prefix_usage_set(&req_prefix_usage, fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_link()
6230 lpm_tree->prefix_ref_count[fib_node->key.prefix_len]++; in mlxsw_sp_fib_lpm_tree_link()
6239 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_lpm_tree_unlink() argument
6241 struct mlxsw_sp_lpm_tree *lpm_tree = fib_node->fib->lpm_tree; in mlxsw_sp_fib_lpm_tree_unlink()
6243 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_lpm_tree_unlink()
6246 if (--lpm_tree->prefix_ref_count[fib_node->key.prefix_len] != 0) in mlxsw_sp_fib_lpm_tree_unlink()
6253 fib_node->key.prefix_len); in mlxsw_sp_fib_lpm_tree_unlink()
6270 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib_node_init() argument
6275 err = mlxsw_sp_fib_node_insert(fib, fib_node); in mlxsw_sp_fib_node_init()
6278 fib_node->fib = fib; in mlxsw_sp_fib_node_init()
6280 err = mlxsw_sp_fib_lpm_tree_link(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_init()
6287 fib_node->fib = NULL; in mlxsw_sp_fib_node_init()
6288 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_init()
6293 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_fini() argument
6295 struct mlxsw_sp_fib *fib = fib_node->fib; in mlxsw_sp_fib_node_fini()
6297 mlxsw_sp_fib_lpm_tree_unlink(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_fini()
6298 fib_node->fib = NULL; in mlxsw_sp_fib_node_fini()
6299 mlxsw_sp_fib_node_remove(fib, fib_node); in mlxsw_sp_fib_node_fini()
6307 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib_node_get() local
6317 fib_node = mlxsw_sp_fib_node_lookup(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
6318 if (fib_node) in mlxsw_sp_fib_node_get()
6319 return fib_node; in mlxsw_sp_fib_node_get()
6321 fib_node = mlxsw_sp_fib_node_create(fib, addr, addr_len, prefix_len); in mlxsw_sp_fib_node_get()
6322 if (!fib_node) { in mlxsw_sp_fib_node_get()
6327 err = mlxsw_sp_fib_node_init(mlxsw_sp, fib_node, fib); in mlxsw_sp_fib_node_get()
6331 return fib_node; in mlxsw_sp_fib_node_get()
6334 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_get()
6341 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_put() argument
6343 struct mlxsw_sp_vr *vr = fib_node->fib->vr; in mlxsw_sp_fib_node_put()
6345 if (fib_node->fib_entry) in mlxsw_sp_fib_node_put()
6347 mlxsw_sp_fib_node_fini(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_put()
6348 mlxsw_sp_fib_node_destroy(fib_node); in mlxsw_sp_fib_node_put()
6356 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in mlxsw_sp_fib_node_entry_link() local
6357 bool is_new = !fib_node->fib_entry; in mlxsw_sp_fib_node_entry_link()
6360 fib_node->fib_entry = fib_entry; in mlxsw_sp_fib_node_entry_link()
6369 fib_node->fib_entry = NULL; in mlxsw_sp_fib_node_entry_link()
6377 struct mlxsw_sp_fib_node *fib_node = fib_entry->fib_node; in __mlxsw_sp_fib_node_entry_unlink() local
6381 fib_node->fib_entry = NULL; in __mlxsw_sp_fib_node_entry_unlink()
6396 struct mlxsw_sp_fib_node *fib_node = fib4_entry->common.fib_node; in mlxsw_sp_fib4_allow_replace() local
6399 if (!fib_node->fib_entry) in mlxsw_sp_fib4_allow_replace()
6402 fib4_replaced = container_of(fib_node->fib_entry, in mlxsw_sp_fib4_allow_replace()
6418 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_replace() local
6425 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, fen_info->tb_id, in mlxsw_sp_router_fib4_replace()
6429 if (IS_ERR(fib_node)) { in mlxsw_sp_router_fib4_replace()
6431 return PTR_ERR(fib_node); in mlxsw_sp_router_fib4_replace()
6434 fib4_entry = mlxsw_sp_fib4_entry_create(mlxsw_sp, fib_node, fen_info); in mlxsw_sp_router_fib4_replace()
6443 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_replace()
6447 replaced = fib_node->fib_entry; in mlxsw_sp_router_fib4_replace()
6466 fib_node->fib_entry = replaced; in mlxsw_sp_router_fib4_replace()
6469 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_replace()
6478 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib4_del() local
6484 fib_node = fib4_entry->common.fib_node; in mlxsw_sp_router_fib4_del()
6488 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib4_del()
6786 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_nexthop6_group_update() local
6789 mlxsw_sp_nexthop_group_vr_unlink(old_nh_grp, fib_node->fib); in mlxsw_sp_nexthop6_group_update()
6798 fib_node->fib); in mlxsw_sp_nexthop6_group_update()
6818 fib_node->fib); in mlxsw_sp_nexthop6_group_update()
6825 mlxsw_sp_nexthop_group_vr_link(old_nh_grp, fib_node->fib); in mlxsw_sp_nexthop6_group_update()
6922 struct mlxsw_sp_fib_node *fib_node, in mlxsw_sp_fib6_entry_create() argument
6935 fib_entry->priv = mlxsw_sp_fib_entry_priv_create(fib_node->fib->ll_ops); in mlxsw_sp_fib6_entry_create()
6958 fib_node->fib); in mlxsw_sp_fib6_entry_create()
6964 fib_entry->fib_node = fib_node; in mlxsw_sp_fib6_entry_create()
6989 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_entry_destroy() local
6992 fib_node->fib); in mlxsw_sp_fib6_entry_destroy()
7005 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_fib6_entry_lookup() local
7015 fib_node = mlxsw_sp_fib_node_lookup(fib, &rt->fib6_dst.addr, in mlxsw_sp_fib6_entry_lookup()
7018 if (!fib_node) in mlxsw_sp_fib6_entry_lookup()
7021 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_entry_lookup()
7034 struct mlxsw_sp_fib_node *fib_node = fib6_entry->common.fib_node; in mlxsw_sp_fib6_allow_replace() local
7038 if (!fib_node->fib_entry) in mlxsw_sp_fib6_allow_replace()
7041 fib6_replaced = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_allow_replace()
7059 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_replace() local
7072 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, rt->fib6_table->tb6_id, in mlxsw_sp_router_fib6_replace()
7077 if (IS_ERR(fib_node)) in mlxsw_sp_router_fib6_replace()
7078 return PTR_ERR(fib_node); in mlxsw_sp_router_fib6_replace()
7080 fib6_entry = mlxsw_sp_fib6_entry_create(mlxsw_sp, fib_node, rt_arr, in mlxsw_sp_router_fib6_replace()
7089 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_replace()
7093 replaced = fib_node->fib_entry; in mlxsw_sp_router_fib6_replace()
7110 fib_node->fib_entry = replaced; in mlxsw_sp_router_fib6_replace()
7113 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_replace()
7122 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_append() local
7132 fib_node = mlxsw_sp_fib_node_get(mlxsw_sp, rt->fib6_table->tb6_id, in mlxsw_sp_router_fib6_append()
7137 if (IS_ERR(fib_node)) in mlxsw_sp_router_fib6_append()
7138 return PTR_ERR(fib_node); in mlxsw_sp_router_fib6_append()
7140 if (WARN_ON_ONCE(!fib_node->fib_entry)) { in mlxsw_sp_router_fib6_append()
7141 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_append()
7145 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_router_fib6_append()
7154 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_append()
7163 struct mlxsw_sp_fib_node *fib_node; in mlxsw_sp_router_fib6_del() local
7187 fib_node = fib6_entry->common.fib_node; in mlxsw_sp_router_fib6_del()
7191 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_router_fib6_del()
7270 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib4_node_flush() argument
7274 fib4_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib4_node_flush()
7276 mlxsw_sp_fib_node_entry_unlink(mlxsw_sp, fib_node->fib_entry); in mlxsw_sp_fib4_node_flush()
7278 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib4_node_flush()
7282 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib6_node_flush() argument
7286 fib6_entry = container_of(fib_node->fib_entry, in mlxsw_sp_fib6_node_flush()
7288 mlxsw_sp_fib_node_entry_unlink(mlxsw_sp, fib_node->fib_entry); in mlxsw_sp_fib6_node_flush()
7290 mlxsw_sp_fib_node_put(mlxsw_sp, fib_node); in mlxsw_sp_fib6_node_flush()
7294 struct mlxsw_sp_fib_node *fib_node) in mlxsw_sp_fib_node_flush() argument
7296 switch (fib_node->fib->proto) { in mlxsw_sp_fib_node_flush()
7298 mlxsw_sp_fib4_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
7301 mlxsw_sp_fib6_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_fib_node_flush()
7311 struct mlxsw_sp_fib_node *fib_node, *tmp; in mlxsw_sp_vr_fib_flush() local
7313 list_for_each_entry_safe(fib_node, tmp, &fib->node_list, list) { in mlxsw_sp_vr_fib_flush()
7316 mlxsw_sp_fib_node_flush(mlxsw_sp, fib_node); in mlxsw_sp_vr_fib_flush()