forked from acouzens/open5gs
ogs_session_s.framed_routes type change to (char **)
OpenAPI_list_t wasn't optimal as it created a dependency on ogs-sbi.h.
This commit is contained in:
parent
2051bcaefd
commit
11568bbff7
|
@ -452,8 +452,6 @@ typedef struct ogs_pcc_rule_s {
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
|
|
||||||
typedef struct OpenAPI_list_s OpenAPI_list_t;
|
|
||||||
|
|
||||||
/**********************************
|
/**********************************
|
||||||
* PDN Structure */
|
* PDN Structure */
|
||||||
typedef struct ogs_session_s {
|
typedef struct ogs_session_s {
|
||||||
|
@ -485,8 +483,8 @@ typedef struct ogs_session_s {
|
||||||
|
|
||||||
ogs_paa_t paa;
|
ogs_paa_t paa;
|
||||||
ogs_ip_t ue_ip;
|
ogs_ip_t ue_ip;
|
||||||
OpenAPI_list_t *ipv4_framed_routes;
|
char **ipv4_framed_routes;
|
||||||
OpenAPI_list_t *ipv6_framed_routes;
|
char **ipv6_framed_routes;
|
||||||
ogs_ip_t smf_ip;
|
ogs_ip_t smf_ip;
|
||||||
} ogs_session_t;
|
} ogs_session_t;
|
||||||
|
|
||||||
|
|
|
@ -1699,7 +1699,6 @@ void smf_sess_remove(smf_sess_t *sess)
|
||||||
int i;
|
int i;
|
||||||
smf_ue_t *smf_ue = NULL;
|
smf_ue_t *smf_ue = NULL;
|
||||||
smf_event_t e;
|
smf_event_t e;
|
||||||
OpenAPI_lnode_t *node;
|
|
||||||
|
|
||||||
char buf1[OGS_ADDRSTRLEN];
|
char buf1[OGS_ADDRSTRLEN];
|
||||||
char buf2[OGS_ADDRSTRLEN];
|
char buf2[OGS_ADDRSTRLEN];
|
||||||
|
@ -1764,12 +1763,22 @@ void smf_sess_remove(smf_sess_t *sess)
|
||||||
if (sess->session.name)
|
if (sess->session.name)
|
||||||
ogs_free(sess->session.name);
|
ogs_free(sess->session.name);
|
||||||
|
|
||||||
OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node)
|
if (sess->session.ipv4_framed_routes) {
|
||||||
OpenAPI_frame_route_info_free(node->data);
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node)
|
if (!sess->session.ipv4_framed_routes[i])
|
||||||
OpenAPI_frame_route_info_free(node->data);
|
break;
|
||||||
OpenAPI_list_free(sess->session.ipv4_framed_routes);
|
ogs_free(sess->session.ipv4_framed_routes[i]);
|
||||||
OpenAPI_list_free(sess->session.ipv6_framed_routes);
|
}
|
||||||
|
ogs_free(sess->session.ipv4_framed_routes);
|
||||||
|
}
|
||||||
|
if (sess->session.ipv6_framed_routes) {
|
||||||
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
|
if (!sess->session.ipv6_framed_routes[i])
|
||||||
|
break;
|
||||||
|
ogs_free(sess->session.ipv6_framed_routes[i]);
|
||||||
|
}
|
||||||
|
ogs_free(sess->session.ipv6_framed_routes);
|
||||||
|
}
|
||||||
|
|
||||||
if (sess->upf_n3_addr)
|
if (sess->upf_n3_addr)
|
||||||
ogs_freeaddrinfo(sess->upf_n3_addr);
|
ogs_freeaddrinfo(sess->upf_n3_addr);
|
||||||
|
|
|
@ -108,35 +108,25 @@ ogs_sbi_request_t *smf_npcf_smpolicycontrol_build_create(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sess->session.ipv4_framed_routes) {
|
if (sess->session.ipv4_framed_routes) {
|
||||||
|
int i;
|
||||||
OpenAPI_list_t *FrameRouteList = OpenAPI_list_create();
|
OpenAPI_list_t *FrameRouteList = OpenAPI_list_create();
|
||||||
OpenAPI_lnode_t *node;
|
|
||||||
|
|
||||||
OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node) {
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
OpenAPI_frame_route_info_t *route = node->data;
|
const char *route = sess->session.ipv4_framed_routes[i];
|
||||||
if (!route)
|
if (!route) break;
|
||||||
continue;
|
OpenAPI_list_add(FrameRouteList, ogs_strdup(route));
|
||||||
if (!route->ipv4_mask) {
|
|
||||||
ogs_error("Invalid FrameRouteInfo");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
OpenAPI_list_add(FrameRouteList, ogs_strdup(route->ipv4_mask));
|
|
||||||
}
|
}
|
||||||
SmPolicyContextData.ipv4_frame_route_list = FrameRouteList;
|
SmPolicyContextData.ipv4_frame_route_list = FrameRouteList;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sess->session.ipv6_framed_routes) {
|
if (sess->session.ipv6_framed_routes) {
|
||||||
|
int i;
|
||||||
OpenAPI_list_t *FrameRouteList = OpenAPI_list_create();
|
OpenAPI_list_t *FrameRouteList = OpenAPI_list_create();
|
||||||
OpenAPI_lnode_t *node;
|
|
||||||
|
|
||||||
OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node) {
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
OpenAPI_frame_route_info_t *route = node->data;
|
const char *route = sess->session.ipv6_framed_routes[i];
|
||||||
if (!route)
|
if (!route) break;
|
||||||
continue;
|
OpenAPI_list_add(FrameRouteList, ogs_strdup(route));
|
||||||
if (!route->ipv6_prefix) {
|
|
||||||
ogs_error("Invalid FrameRouteInfo");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
OpenAPI_list_add(FrameRouteList, ogs_strdup(route->ipv6_prefix));
|
|
||||||
}
|
}
|
||||||
SmPolicyContextData.ipv6_frame_route_list = FrameRouteList;
|
SmPolicyContextData.ipv6_frame_route_list = FrameRouteList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -494,48 +494,33 @@ bool smf_npcf_smpolicycontrol_handle_create(
|
||||||
|
|
||||||
if (sess->session.ipv4_framed_routes &&
|
if (sess->session.ipv4_framed_routes &&
|
||||||
sess->pfcp_node->up_function_features.frrt) {
|
sess->pfcp_node->up_function_features.frrt) {
|
||||||
OpenAPI_frame_route_info_t *FrameRouteInfo = NULL;
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node) {
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
FrameRouteInfo = node->data;
|
const char *route = sess->session.ipv4_framed_routes[i];
|
||||||
if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI)
|
if (!route) break;
|
||||||
break;
|
|
||||||
if (!FrameRouteInfo)
|
|
||||||
continue;
|
|
||||||
if (!FrameRouteInfo->ipv4_mask) {
|
|
||||||
ogs_error("Invalid FrameRouteInfo");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!dl_pdr->ipv4_framed_routes) {
|
if (!dl_pdr->ipv4_framed_routes) {
|
||||||
dl_pdr->ipv4_framed_routes =
|
dl_pdr->ipv4_framed_routes =
|
||||||
ogs_calloc(OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI,
|
ogs_calloc(OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI,
|
||||||
sizeof(dl_pdr->ipv4_framed_routes[0]));
|
sizeof(dl_pdr->ipv4_framed_routes[0]));
|
||||||
ogs_assert(dl_pdr->ipv4_framed_routes);
|
ogs_assert(dl_pdr->ipv4_framed_routes);
|
||||||
}
|
}
|
||||||
dl_pdr->ipv4_framed_routes[i++] = ogs_strdup(FrameRouteInfo->ipv4_mask);
|
dl_pdr->ipv4_framed_routes[i] = ogs_strdup(route);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sess->session.ipv6_framed_routes &&
|
if (sess->session.ipv6_framed_routes &&
|
||||||
sess->pfcp_node->up_function_features.frrt) {
|
sess->pfcp_node->up_function_features.frrt) {
|
||||||
OpenAPI_frame_route_info_t *FrameRouteInfo = NULL;
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node) {
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
FrameRouteInfo = node->data;
|
const char *route = sess->session.ipv6_framed_routes[i];
|
||||||
if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI)
|
if (!route) break;
|
||||||
continue;
|
|
||||||
if (!FrameRouteInfo)
|
|
||||||
continue;
|
|
||||||
if (!FrameRouteInfo->ipv6_prefix) {
|
|
||||||
ogs_error("Invalid FrameRouteInfo");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!dl_pdr->ipv6_framed_routes) {
|
if (!dl_pdr->ipv6_framed_routes) {
|
||||||
dl_pdr->ipv6_framed_routes =
|
dl_pdr->ipv6_framed_routes =
|
||||||
ogs_malloc(OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI);
|
ogs_calloc(OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI,
|
||||||
|
sizeof(dl_pdr->ipv6_framed_routes[0]));
|
||||||
ogs_assert(dl_pdr->ipv6_framed_routes);
|
ogs_assert(dl_pdr->ipv6_framed_routes);
|
||||||
}
|
}
|
||||||
dl_pdr->ipv6_framed_routes[i++] = ogs_strdup(FrameRouteInfo->ipv6_prefix);
|
dl_pdr->ipv6_framed_routes[i] = ogs_strdup(route);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -246,31 +246,45 @@ bool smf_nudm_sdm_handle_get(smf_sess_t *sess, ogs_sbi_stream_t *stream,
|
||||||
|
|
||||||
ipv4FrameRouteList = dnnConfiguration->ipv4_frame_route_list;
|
ipv4FrameRouteList = dnnConfiguration->ipv4_frame_route_list;
|
||||||
if (ipv4FrameRouteList) {
|
if (ipv4FrameRouteList) {
|
||||||
if (sess->session.ipv4_framed_routes) {
|
int i;
|
||||||
OpenAPI_list_for_each(sess->session.ipv4_framed_routes, node2)
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
OpenAPI_frame_route_info_free(node2->data);
|
if (!sess->session.ipv4_framed_routes ||
|
||||||
OpenAPI_list_clear(sess->session.ipv4_framed_routes);
|
!sess->session.ipv4_framed_routes[i])
|
||||||
} else {
|
break;
|
||||||
sess->session.ipv4_framed_routes = OpenAPI_list_create();
|
ogs_free(sess->session.ipv4_framed_routes[i]);
|
||||||
}
|
}
|
||||||
|
if (!sess->session.ipv4_framed_routes)
|
||||||
|
sess->session.ipv4_framed_routes = ogs_calloc(
|
||||||
|
OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI,
|
||||||
|
sizeof(sess->session.ipv4_framed_routes[0]));
|
||||||
|
i = 0;
|
||||||
OpenAPI_list_for_each(ipv4FrameRouteList, node2) {
|
OpenAPI_list_for_each(ipv4FrameRouteList, node2) {
|
||||||
OpenAPI_list_add(sess->session.ipv4_framed_routes,
|
OpenAPI_frame_route_info_t *route = node2->data;
|
||||||
OpenAPI_frame_route_info_copy(NULL, node2->data));
|
if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI) break;
|
||||||
|
if (!route) continue;
|
||||||
|
sess->session.ipv4_framed_routes[i++] = ogs_strdup(route->ipv4_mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ipv6FrameRouteList = dnnConfiguration->ipv6_frame_route_list;
|
ipv6FrameRouteList = dnnConfiguration->ipv6_frame_route_list;
|
||||||
if (ipv6FrameRouteList) {
|
if (ipv6FrameRouteList) {
|
||||||
if (sess->session.ipv6_framed_routes) {
|
int i;
|
||||||
OpenAPI_list_for_each(sess->session.ipv6_framed_routes, node2)
|
for (i = 0; i < OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI; i++) {
|
||||||
OpenAPI_frame_route_info_free(node2->data);
|
if (!sess->session.ipv6_framed_routes ||
|
||||||
OpenAPI_list_clear(sess->session.ipv6_framed_routes);
|
!sess->session.ipv6_framed_routes[i])
|
||||||
} else {
|
break;
|
||||||
sess->session.ipv6_framed_routes = OpenAPI_list_create();
|
ogs_free(sess->session.ipv6_framed_routes[i]);
|
||||||
}
|
}
|
||||||
|
if (!sess->session.ipv6_framed_routes)
|
||||||
|
sess->session.ipv6_framed_routes = ogs_calloc(
|
||||||
|
OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI,
|
||||||
|
sizeof(sess->session.ipv6_framed_routes[0]));
|
||||||
|
i = 0;
|
||||||
OpenAPI_list_for_each(ipv6FrameRouteList, node2) {
|
OpenAPI_list_for_each(ipv6FrameRouteList, node2) {
|
||||||
OpenAPI_list_add(sess->session.ipv6_framed_routes,
|
OpenAPI_frame_route_info_t *route = node2->data;
|
||||||
OpenAPI_frame_route_info_copy(NULL, node2->data));
|
if (i >= OGS_MAX_NUM_OF_FRAMED_ROUTES_IN_PDI) break;
|
||||||
|
if (!route) continue;
|
||||||
|
sess->session.ipv6_framed_routes[i++] = ogs_strdup(route->ipv6_prefix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue