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:
mitmitmitm 2023-01-25 11:12:20 +01:00 committed by Sukchan Lee
parent 2051bcaefd
commit 11568bbff7
5 changed files with 68 additions and 72 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;
} }

View File

@ -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);
} }
} }

View File

@ -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);
} }
} }