|
@@ -788,6 +788,9 @@ static struct mlxsw_sp_vr *mlxsw_sp_vr_create(struct mlxsw_sp *mlxsw_sp,
|
|
|
u32 tb_id,
|
|
u32 tb_id,
|
|
|
struct netlink_ext_ack *extack)
|
|
struct netlink_ext_ack *extack)
|
|
|
{
|
|
{
|
|
|
|
|
+ struct mlxsw_sp_mr_table *mr4_table;
|
|
|
|
|
+ struct mlxsw_sp_fib *fib4;
|
|
|
|
|
+ struct mlxsw_sp_fib *fib6;
|
|
|
struct mlxsw_sp_vr *vr;
|
|
struct mlxsw_sp_vr *vr;
|
|
|
int err;
|
|
int err;
|
|
|
|
|
|
|
@@ -796,29 +799,30 @@ static struct mlxsw_sp_vr *mlxsw_sp_vr_create(struct mlxsw_sp *mlxsw_sp,
|
|
|
NL_SET_ERR_MSG(extack, "spectrum: Exceeded number of supported virtual routers");
|
|
NL_SET_ERR_MSG(extack, "spectrum: Exceeded number of supported virtual routers");
|
|
|
return ERR_PTR(-EBUSY);
|
|
return ERR_PTR(-EBUSY);
|
|
|
}
|
|
}
|
|
|
- vr->fib4 = mlxsw_sp_fib_create(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV4);
|
|
|
|
|
- if (IS_ERR(vr->fib4))
|
|
|
|
|
- return ERR_CAST(vr->fib4);
|
|
|
|
|
- vr->fib6 = mlxsw_sp_fib_create(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV6);
|
|
|
|
|
- if (IS_ERR(vr->fib6)) {
|
|
|
|
|
- err = PTR_ERR(vr->fib6);
|
|
|
|
|
|
|
+ fib4 = mlxsw_sp_fib_create(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV4);
|
|
|
|
|
+ if (IS_ERR(fib4))
|
|
|
|
|
+ return ERR_CAST(fib4);
|
|
|
|
|
+ fib6 = mlxsw_sp_fib_create(mlxsw_sp, vr, MLXSW_SP_L3_PROTO_IPV6);
|
|
|
|
|
+ if (IS_ERR(fib6)) {
|
|
|
|
|
+ err = PTR_ERR(fib6);
|
|
|
goto err_fib6_create;
|
|
goto err_fib6_create;
|
|
|
}
|
|
}
|
|
|
- vr->mr4_table = mlxsw_sp_mr_table_create(mlxsw_sp, vr->id,
|
|
|
|
|
- MLXSW_SP_L3_PROTO_IPV4);
|
|
|
|
|
- if (IS_ERR(vr->mr4_table)) {
|
|
|
|
|
- err = PTR_ERR(vr->mr4_table);
|
|
|
|
|
|
|
+ mr4_table = mlxsw_sp_mr_table_create(mlxsw_sp, vr->id,
|
|
|
|
|
+ MLXSW_SP_L3_PROTO_IPV4);
|
|
|
|
|
+ if (IS_ERR(mr4_table)) {
|
|
|
|
|
+ err = PTR_ERR(mr4_table);
|
|
|
goto err_mr_table_create;
|
|
goto err_mr_table_create;
|
|
|
}
|
|
}
|
|
|
|
|
+ vr->fib4 = fib4;
|
|
|
|
|
+ vr->fib6 = fib6;
|
|
|
|
|
+ vr->mr4_table = mr4_table;
|
|
|
vr->tb_id = tb_id;
|
|
vr->tb_id = tb_id;
|
|
|
return vr;
|
|
return vr;
|
|
|
|
|
|
|
|
err_mr_table_create:
|
|
err_mr_table_create:
|
|
|
- mlxsw_sp_fib_destroy(mlxsw_sp, vr->fib6);
|
|
|
|
|
- vr->fib6 = NULL;
|
|
|
|
|
|
|
+ mlxsw_sp_fib_destroy(mlxsw_sp, fib6);
|
|
|
err_fib6_create:
|
|
err_fib6_create:
|
|
|
- mlxsw_sp_fib_destroy(mlxsw_sp, vr->fib4);
|
|
|
|
|
- vr->fib4 = NULL;
|
|
|
|
|
|
|
+ mlxsw_sp_fib_destroy(mlxsw_sp, fib4);
|
|
|
return ERR_PTR(err);
|
|
return ERR_PTR(err);
|
|
|
}
|
|
}
|
|
|
|
|
|