Lines Matching refs:vr

537 	struct mlxsw_sp_vr *vr;  member
581 struct mlxsw_sp_vr *vr, in mlxsw_sp_fib_create() argument
589 err = ll_ops->init(mlxsw_sp, vr->id, proto); in mlxsw_sp_fib_create()
602 fib->vr = vr; in mlxsw_sp_fib_create()
831 static bool mlxsw_sp_vr_is_used(const struct mlxsw_sp_vr *vr) in mlxsw_sp_vr_is_used() argument
833 return !!vr->fib4 || !!vr->fib6 || in mlxsw_sp_vr_is_used()
834 !!vr->mr_table[MLXSW_SP_L3_PROTO_IPV4] || in mlxsw_sp_vr_is_used()
835 !!vr->mr_table[MLXSW_SP_L3_PROTO_IPV6]; in mlxsw_sp_vr_is_used()
840 struct mlxsw_sp_vr *vr; in mlxsw_sp_vr_find_unused() local
844 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vr_find_unused()
845 if (!mlxsw_sp_vr_is_used(vr)) in mlxsw_sp_vr_find_unused()
846 return vr; in mlxsw_sp_vr_find_unused()
856 mlxsw_reg_xraltb_pack(xraltb_pl, fib->vr->id, in mlxsw_sp_vr_lpm_tree_bind()
868 mlxsw_reg_xraltb_pack(xraltb_pl, fib->vr->id, in mlxsw_sp_vr_lpm_tree_unbind()
884 struct mlxsw_sp_vr *vr; in mlxsw_sp_vr_find() local
890 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vr_find()
891 if (mlxsw_sp_vr_is_used(vr) && vr->tb_id == tb_id) in mlxsw_sp_vr_find()
892 return vr; in mlxsw_sp_vr_find()
900 struct mlxsw_sp_vr *vr; in mlxsw_sp_router_tb_id_vr_id() local
904 vr = mlxsw_sp_vr_find(mlxsw_sp, tb_id); in mlxsw_sp_router_tb_id_vr_id()
905 if (!vr) { in mlxsw_sp_router_tb_id_vr_id()
909 *vr_id = vr->id; in mlxsw_sp_router_tb_id_vr_id()
915 static struct mlxsw_sp_fib *mlxsw_sp_vr_fib(const struct mlxsw_sp_vr *vr, in mlxsw_sp_vr_fib() argument
920 return vr->fib4; in mlxsw_sp_vr_fib()
922 return vr->fib6; in mlxsw_sp_vr_fib()
934 struct mlxsw_sp_vr *vr; in mlxsw_sp_vr_create() local
937 vr = mlxsw_sp_vr_find_unused(mlxsw_sp); in mlxsw_sp_vr_create()
938 if (!vr) { in mlxsw_sp_vr_create()
942 fib4 = mlxsw_sp_fib_create(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV4); in mlxsw_sp_vr_create()
945 fib6 = mlxsw_sp_fib_create(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV6); in mlxsw_sp_vr_create()
950 mr4_table = mlxsw_sp_mr_table_create(mlxsw_sp, vr->id, in mlxsw_sp_vr_create()
956 mr6_table = mlxsw_sp_mr_table_create(mlxsw_sp, vr->id, in mlxsw_sp_vr_create()
963 vr->fib4 = fib4; in mlxsw_sp_vr_create()
964 vr->fib6 = fib6; in mlxsw_sp_vr_create()
965 vr->mr_table[MLXSW_SP_L3_PROTO_IPV4] = mr4_table; in mlxsw_sp_vr_create()
966 vr->mr_table[MLXSW_SP_L3_PROTO_IPV6] = mr6_table; in mlxsw_sp_vr_create()
967 vr->tb_id = tb_id; in mlxsw_sp_vr_create()
968 return vr; in mlxsw_sp_vr_create()
980 struct mlxsw_sp_vr *vr) in mlxsw_sp_vr_destroy() argument
982 mlxsw_sp_mr_table_destroy(vr->mr_table[MLXSW_SP_L3_PROTO_IPV6]); in mlxsw_sp_vr_destroy()
983 vr->mr_table[MLXSW_SP_L3_PROTO_IPV6] = NULL; in mlxsw_sp_vr_destroy()
984 mlxsw_sp_mr_table_destroy(vr->mr_table[MLXSW_SP_L3_PROTO_IPV4]); in mlxsw_sp_vr_destroy()
985 vr->mr_table[MLXSW_SP_L3_PROTO_IPV4] = NULL; in mlxsw_sp_vr_destroy()
986 mlxsw_sp_fib_destroy(mlxsw_sp, vr->fib6); in mlxsw_sp_vr_destroy()
987 vr->fib6 = NULL; in mlxsw_sp_vr_destroy()
988 mlxsw_sp_fib_destroy(mlxsw_sp, vr->fib4); in mlxsw_sp_vr_destroy()
989 vr->fib4 = NULL; in mlxsw_sp_vr_destroy()
995 struct mlxsw_sp_vr *vr; in mlxsw_sp_vr_get() local
998 vr = mlxsw_sp_vr_find(mlxsw_sp, tb_id); in mlxsw_sp_vr_get()
999 if (!vr) in mlxsw_sp_vr_get()
1000 vr = mlxsw_sp_vr_create(mlxsw_sp, tb_id, extack); in mlxsw_sp_vr_get()
1001 return vr; in mlxsw_sp_vr_get()
1004 static void mlxsw_sp_vr_put(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_vr *vr) in mlxsw_sp_vr_put() argument
1006 if (!vr->rif_count && list_empty(&vr->fib4->node_list) && in mlxsw_sp_vr_put()
1007 list_empty(&vr->fib6->node_list) && in mlxsw_sp_vr_put()
1008 mlxsw_sp_mr_table_empty(vr->mr_table[MLXSW_SP_L3_PROTO_IPV4]) && in mlxsw_sp_vr_put()
1009 mlxsw_sp_mr_table_empty(vr->mr_table[MLXSW_SP_L3_PROTO_IPV6])) in mlxsw_sp_vr_put()
1010 mlxsw_sp_vr_destroy(mlxsw_sp, vr); in mlxsw_sp_vr_put()
1014 mlxsw_sp_vr_lpm_tree_should_replace(struct mlxsw_sp_vr *vr, in mlxsw_sp_vr_lpm_tree_should_replace() argument
1017 struct mlxsw_sp_fib *fib = mlxsw_sp_vr_fib(vr, proto); in mlxsw_sp_vr_lpm_tree_should_replace()
1019 if (!mlxsw_sp_vr_is_used(vr)) in mlxsw_sp_vr_lpm_tree_should_replace()
1054 struct mlxsw_sp_vr *vr; in mlxsw_sp_vrs_lpm_tree_replace() local
1061 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vrs_lpm_tree_replace()
1062 if (!mlxsw_sp_vr_lpm_tree_should_replace(vr, proto, old_id)) in mlxsw_sp_vrs_lpm_tree_replace()
1065 mlxsw_sp_vr_fib(vr, proto), in mlxsw_sp_vrs_lpm_tree_replace()
1080 if (!mlxsw_sp_vr_lpm_tree_should_replace(vr, proto, new_id)) in mlxsw_sp_vrs_lpm_tree_replace()
1083 mlxsw_sp_vr_fib(vr, proto), in mlxsw_sp_vrs_lpm_tree_replace()
1091 struct mlxsw_sp_vr *vr; in mlxsw_sp_vrs_init() local
1105 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vrs_init()
1106 vr->id = i; in mlxsw_sp_vrs_init()
1353 struct mlxsw_sp_vr *vr; in mlxsw_sp_router_ip2me_fib_entry_find() local
1358 vr = mlxsw_sp_vr_find(mlxsw_sp, tb_id); in mlxsw_sp_router_ip2me_fib_entry_find()
1359 if (!vr) in mlxsw_sp_router_ip2me_fib_entry_find()
1361 fib = mlxsw_sp_vr_fib(vr, proto); in mlxsw_sp_router_ip2me_fib_entry_find()
3198 key.vr_id = fib->vr->id; in mlxsw_sp_nexthop_group_vr_entry_lookup()
3215 vr_entry->key.vr_id = fib->vr->id; in mlxsw_sp_nexthop_group_vr_entry_create()
5905 fib->ll_ops->fib_entry_pack(op_ctx, fib->proto, op, fib->vr->id, in mlxsw_sp_fib_entry_pack()
6290 struct mlxsw_sp_vr *vr; in mlxsw_sp_fib4_entry_lookup() local
6292 vr = mlxsw_sp_vr_find(mlxsw_sp, fen_info->tb_id); in mlxsw_sp_fib4_entry_lookup()
6293 if (!vr) in mlxsw_sp_fib4_entry_lookup()
6295 fib = mlxsw_sp_vr_fib(vr, MLXSW_SP_L3_PROTO_IPV4); in mlxsw_sp_fib4_entry_lookup()
6473 struct mlxsw_sp_vr *vr; in mlxsw_sp_fib_node_get() local
6476 vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id, NULL); in mlxsw_sp_fib_node_get()
6477 if (IS_ERR(vr)) in mlxsw_sp_fib_node_get()
6478 return ERR_CAST(vr); in mlxsw_sp_fib_node_get()
6479 fib = mlxsw_sp_vr_fib(vr, proto); in mlxsw_sp_fib_node_get()
6500 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_fib_node_get()
6507 struct mlxsw_sp_vr *vr = fib_node->fib->vr; in mlxsw_sp_fib_node_put() local
6513 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_fib_node_put()
7235 struct mlxsw_sp_vr *vr; in mlxsw_sp_fib6_entry_lookup() local
7237 vr = mlxsw_sp_vr_find(mlxsw_sp, rt->fib6_table->tb6_id); in mlxsw_sp_fib6_entry_lookup()
7238 if (!vr) in mlxsw_sp_fib6_entry_lookup()
7240 fib = mlxsw_sp_vr_fib(vr, MLXSW_SP_L3_PROTO_IPV6); in mlxsw_sp_fib6_entry_lookup()
7423 mlxsw_sp_router_fibmr_family_to_table(struct mlxsw_sp_vr *vr, int family) in mlxsw_sp_router_fibmr_family_to_table() argument
7426 return vr->mr_table[MLXSW_SP_L3_PROTO_IPV4]; in mlxsw_sp_router_fibmr_family_to_table()
7428 return vr->mr_table[MLXSW_SP_L3_PROTO_IPV6]; in mlxsw_sp_router_fibmr_family_to_table()
7436 struct mlxsw_sp_vr *vr; in mlxsw_sp_router_fibmr_add() local
7438 vr = mlxsw_sp_vr_get(mlxsw_sp, men_info->tb_id, NULL); in mlxsw_sp_router_fibmr_add()
7439 if (IS_ERR(vr)) in mlxsw_sp_router_fibmr_add()
7440 return PTR_ERR(vr); in mlxsw_sp_router_fibmr_add()
7442 mrt = mlxsw_sp_router_fibmr_family_to_table(vr, men_info->info.family); in mlxsw_sp_router_fibmr_add()
7450 struct mlxsw_sp_vr *vr; in mlxsw_sp_router_fibmr_del() local
7452 vr = mlxsw_sp_vr_find(mlxsw_sp, men_info->tb_id); in mlxsw_sp_router_fibmr_del()
7453 if (WARN_ON(!vr)) in mlxsw_sp_router_fibmr_del()
7456 mrt = mlxsw_sp_router_fibmr_family_to_table(vr, men_info->info.family); in mlxsw_sp_router_fibmr_del()
7458 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_router_fibmr_del()
7467 struct mlxsw_sp_vr *vr; in mlxsw_sp_router_fibmr_vif_add() local
7469 vr = mlxsw_sp_vr_get(mlxsw_sp, ven_info->tb_id, NULL); in mlxsw_sp_router_fibmr_vif_add()
7470 if (IS_ERR(vr)) in mlxsw_sp_router_fibmr_vif_add()
7471 return PTR_ERR(vr); in mlxsw_sp_router_fibmr_vif_add()
7473 mrt = mlxsw_sp_router_fibmr_family_to_table(vr, ven_info->info.family); in mlxsw_sp_router_fibmr_vif_add()
7485 struct mlxsw_sp_vr *vr; in mlxsw_sp_router_fibmr_vif_del() local
7487 vr = mlxsw_sp_vr_find(mlxsw_sp, ven_info->tb_id); in mlxsw_sp_router_fibmr_vif_del()
7488 if (WARN_ON(!vr)) in mlxsw_sp_router_fibmr_vif_del()
7491 mrt = mlxsw_sp_router_fibmr_family_to_table(vr, ven_info->info.family); in mlxsw_sp_router_fibmr_vif_del()
7493 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_router_fibmr_vif_del()
7534 struct mlxsw_sp_vr *vr, in mlxsw_sp_vr_fib_flush() argument
7537 struct mlxsw_sp_fib *fib = mlxsw_sp_vr_fib(vr, proto); in mlxsw_sp_vr_fib_flush()
7554 struct mlxsw_sp_vr *vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_router_fib_flush() local
7556 if (!mlxsw_sp_vr_is_used(vr)) in mlxsw_sp_router_fib_flush()
7560 mlxsw_sp_mr_table_flush(vr->mr_table[j]); in mlxsw_sp_router_fib_flush()
7561 mlxsw_sp_vr_fib_flush(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV4); in mlxsw_sp_router_fib_flush()
7566 if (!mlxsw_sp_vr_is_used(vr)) in mlxsw_sp_router_fib_flush()
7568 mlxsw_sp_vr_fib_flush(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV6); in mlxsw_sp_router_fib_flush()
8406 struct mlxsw_sp_vr *vr; in mlxsw_sp_rif_create() local
8413 vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id ? : RT_TABLE_MAIN, extack); in mlxsw_sp_rif_create()
8414 if (IS_ERR(vr)) in mlxsw_sp_rif_create()
8415 return ERR_CAST(vr); in mlxsw_sp_rif_create()
8416 vr->rif_count++; in mlxsw_sp_rif_create()
8424 rif = mlxsw_sp_rif_alloc(ops->rif_size, rif_index, vr->id, params->dev); in mlxsw_sp_rif_create()
8451 err = mlxsw_sp_mr_rif_add(vr->mr_table[i], rif); in mlxsw_sp_rif_create()
8471 mlxsw_sp_mr_rif_del(vr->mr_table[i], rif); in mlxsw_sp_rif_create()
8482 vr->rif_count--; in mlxsw_sp_rif_create()
8483 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_rif_create()
8492 struct mlxsw_sp_vr *vr; in mlxsw_sp_rif_destroy() local
8496 vr = &mlxsw_sp->router->vrs[rif->vr_id]; in mlxsw_sp_rif_destroy()
8508 mlxsw_sp_mr_rif_del(vr->mr_table[i], rif); in mlxsw_sp_rif_destroy()
8516 vr->rif_count--; in mlxsw_sp_rif_destroy()
8517 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_rif_destroy()
9326 struct mlxsw_sp_vr *vr; in mlxsw_sp_router_port_change_event() local
9333 vr = &mlxsw_sp->router->vrs[rif->vr_id]; in mlxsw_sp_router_port_change_event()
9335 mlxsw_sp_mr_rif_mtu_update(vr->mr_table[i], in mlxsw_sp_router_port_change_event()
9961 mlxsw_sp_ul_rif_create(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_vr *vr, in mlxsw_sp_ul_rif_create() argument
9974 ul_rif = mlxsw_sp_rif_alloc(sizeof(*ul_rif), rif_index, vr->id, NULL); in mlxsw_sp_ul_rif_create()
10005 struct mlxsw_sp_vr *vr; in mlxsw_sp_ul_rif_get() local
10008 vr = mlxsw_sp_vr_get(mlxsw_sp, tb_id, extack); in mlxsw_sp_ul_rif_get()
10009 if (IS_ERR(vr)) in mlxsw_sp_ul_rif_get()
10010 return ERR_CAST(vr); in mlxsw_sp_ul_rif_get()
10012 if (refcount_inc_not_zero(&vr->ul_rif_refcnt)) in mlxsw_sp_ul_rif_get()
10013 return vr->ul_rif; in mlxsw_sp_ul_rif_get()
10015 vr->ul_rif = mlxsw_sp_ul_rif_create(mlxsw_sp, vr, extack); in mlxsw_sp_ul_rif_get()
10016 if (IS_ERR(vr->ul_rif)) { in mlxsw_sp_ul_rif_get()
10017 err = PTR_ERR(vr->ul_rif); in mlxsw_sp_ul_rif_get()
10021 vr->rif_count++; in mlxsw_sp_ul_rif_get()
10022 refcount_set(&vr->ul_rif_refcnt, 1); in mlxsw_sp_ul_rif_get()
10024 return vr->ul_rif; in mlxsw_sp_ul_rif_get()
10027 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_ul_rif_get()
10034 struct mlxsw_sp_vr *vr; in mlxsw_sp_ul_rif_put() local
10036 vr = &mlxsw_sp->router->vrs[ul_rif->vr_id]; in mlxsw_sp_ul_rif_put()
10038 if (!refcount_dec_and_test(&vr->ul_rif_refcnt)) in mlxsw_sp_ul_rif_put()
10041 vr->rif_count--; in mlxsw_sp_ul_rif_put()
10043 mlxsw_sp_vr_put(mlxsw_sp, vr); in mlxsw_sp_ul_rif_put()