forked from acouzens/open5gs
[UDR] Read framed routes from DB send them in sm-data
The framed routes are stored in mongo as { "imsi" : "$IMSI", ..., "slice" : [{ ..., "session" : ..., "ipv4_framed_routes" : ["10.45.33.0/24", "10.45.35.0/24"], }], }], },
This commit is contained in:
parent
11568bbff7
commit
739cb599d1
|
@ -697,6 +697,64 @@ int ogs_dbi_subscription_data(char *supi,
|
|||
|
||||
}
|
||||
}
|
||||
} else if (!strcmp(child4_key, "ipv4_framed_routes") &&
|
||||
BSON_ITER_HOLDS_ARRAY(&child4_iter)) {
|
||||
int i;
|
||||
|
||||
if (session->ipv4_framed_routes) {
|
||||
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||
if (!session->ipv4_framed_routes[i])
|
||||
break;
|
||||
ogs_free(session->ipv4_framed_routes[i]);
|
||||
}
|
||||
} else {
|
||||
session->ipv4_framed_routes = ogs_calloc(
|
||||
OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI,
|
||||
sizeof(session->ipv4_framed_routes[0]));
|
||||
}
|
||||
bson_iter_recurse(
|
||||
&child4_iter, &child5_iter);
|
||||
i = 0;
|
||||
while (bson_iter_next(&child5_iter)) {
|
||||
const char *v;
|
||||
|
||||
if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI)
|
||||
break;
|
||||
|
||||
if (!BSON_ITER_HOLDS_UTF8(&child5_iter))
|
||||
continue;
|
||||
v = bson_iter_utf8(&child5_iter, &length);
|
||||
session->ipv4_framed_routes[i++] = ogs_strdup(v);
|
||||
}
|
||||
} else if (!strcmp(child4_key, "ipv6_framed_routes") &&
|
||||
BSON_ITER_HOLDS_ARRAY(&child4_iter)) {
|
||||
int i;
|
||||
|
||||
if (session->ipv6_framed_routes) {
|
||||
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||
if (!session->ipv6_framed_routes[i])
|
||||
break;
|
||||
ogs_free(session->ipv6_framed_routes[i]);
|
||||
}
|
||||
} else {
|
||||
session->ipv6_framed_routes = ogs_calloc(
|
||||
OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI,
|
||||
sizeof(session->ipv6_framed_routes[0]));
|
||||
}
|
||||
bson_iter_recurse(
|
||||
&child4_iter, &child5_iter);
|
||||
i = 0;
|
||||
while (bson_iter_next(&child5_iter)) {
|
||||
const char *v;
|
||||
|
||||
if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI)
|
||||
break;
|
||||
|
||||
if (!BSON_ITER_HOLDS_UTF8(&child5_iter))
|
||||
continue;
|
||||
v = bson_iter_utf8(&child5_iter, &length);
|
||||
session->ipv6_framed_routes[i++] = ogs_strdup(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
slice_data->num_of_session++;
|
||||
|
|
|
@ -648,6 +648,7 @@ bool udr_nudr_dr_handle_subscription_provisioned(
|
|||
OpenAPI_ambr_t *sessionAmbr = NULL;
|
||||
OpenAPI_list_t *staticIpAddress = NULL;
|
||||
OpenAPI_ip_address_t *ipAddress = NULL;
|
||||
OpenAPI_list_t *FrameRouteList = NULL;
|
||||
OpenAPI_lnode_t *node = NULL, *node2 = NULL;
|
||||
|
||||
if (!recvmsg->param.single_nssai_presence) {
|
||||
|
@ -828,6 +829,34 @@ bool udr_nudr_dr_handle_subscription_provisioned(
|
|||
session->name, dnnConfiguration);
|
||||
ogs_assert(dnnConfigurationMap);
|
||||
OpenAPI_list_add(dnnConfigurationList, dnnConfigurationMap);
|
||||
|
||||
if (session->ipv4_framed_routes) {
|
||||
int i;
|
||||
FrameRouteList = OpenAPI_list_create();
|
||||
|
||||
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||
const char *route = session->ipv4_framed_routes[i];
|
||||
if (!route) break;
|
||||
OpenAPI_list_add(FrameRouteList,
|
||||
OpenAPI_frame_route_info_create(
|
||||
ogs_strdup(route), NULL));
|
||||
}
|
||||
dnnConfiguration->ipv4_frame_route_list = FrameRouteList;
|
||||
}
|
||||
|
||||
if (session->ipv6_framed_routes) {
|
||||
int i;
|
||||
FrameRouteList = OpenAPI_list_create();
|
||||
|
||||
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||
const char *route = session->ipv6_framed_routes[i];
|
||||
if (!route) break;
|
||||
OpenAPI_list_add(FrameRouteList,
|
||||
OpenAPI_frame_route_info_create(
|
||||
NULL, ogs_strdup(route)));
|
||||
}
|
||||
dnnConfiguration->ipv6_frame_route_list = FrameRouteList;
|
||||
}
|
||||
}
|
||||
|
||||
memset(&SessionManagementSubscriptionData, 0,
|
||||
|
@ -905,6 +934,22 @@ bool udr_nudr_dr_handle_subscription_provisioned(
|
|||
OpenAPI_list_free(staticIpAddress);
|
||||
}
|
||||
|
||||
FrameRouteList = dnnConfiguration->ipv4_frame_route_list;
|
||||
OpenAPI_list_for_each(FrameRouteList, node2) {
|
||||
OpenAPI_frame_route_info_t *frame = node2->data;
|
||||
if (frame)
|
||||
ogs_free(frame);
|
||||
}
|
||||
OpenAPI_list_free(FrameRouteList);
|
||||
|
||||
FrameRouteList = dnnConfiguration->ipv6_frame_route_list;
|
||||
OpenAPI_list_for_each(FrameRouteList, node2) {
|
||||
OpenAPI_frame_route_info_t *frame = node2->data;
|
||||
if (frame)
|
||||
ogs_free(frame);
|
||||
}
|
||||
OpenAPI_list_free(FrameRouteList);
|
||||
|
||||
ogs_free(dnnConfiguration);
|
||||
}
|
||||
ogs_free(dnnConfigurationMap);
|
||||
|
|
Loading…
Reference in New Issue