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++;
|
slice_data->num_of_session++;
|
||||||
|
|
|
@ -648,6 +648,7 @@ bool udr_nudr_dr_handle_subscription_provisioned(
|
||||||
OpenAPI_ambr_t *sessionAmbr = NULL;
|
OpenAPI_ambr_t *sessionAmbr = NULL;
|
||||||
OpenAPI_list_t *staticIpAddress = NULL;
|
OpenAPI_list_t *staticIpAddress = NULL;
|
||||||
OpenAPI_ip_address_t *ipAddress = NULL;
|
OpenAPI_ip_address_t *ipAddress = NULL;
|
||||||
|
OpenAPI_list_t *FrameRouteList = NULL;
|
||||||
OpenAPI_lnode_t *node = NULL, *node2 = NULL;
|
OpenAPI_lnode_t *node = NULL, *node2 = NULL;
|
||||||
|
|
||||||
if (!recvmsg->param.single_nssai_presence) {
|
if (!recvmsg->param.single_nssai_presence) {
|
||||||
|
@ -828,6 +829,34 @@ bool udr_nudr_dr_handle_subscription_provisioned(
|
||||||
session->name, dnnConfiguration);
|
session->name, dnnConfiguration);
|
||||||
ogs_assert(dnnConfigurationMap);
|
ogs_assert(dnnConfigurationMap);
|
||||||
OpenAPI_list_add(dnnConfigurationList, 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,
|
memset(&SessionManagementSubscriptionData, 0,
|
||||||
|
@ -905,6 +934,22 @@ bool udr_nudr_dr_handle_subscription_provisioned(
|
||||||
OpenAPI_list_free(staticIpAddress);
|
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(dnnConfiguration);
|
||||||
}
|
}
|
||||||
ogs_free(dnnConfigurationMap);
|
ogs_free(dnnConfigurationMap);
|
||||||
|
|
Loading…
Reference in New Issue