[PCF] Handle framed routes, forward them to BSF

This commit is contained in:
mitmitmitm 2023-01-18 12:18:39 +01:00 committed by Sukchan Lee
parent 88209f52df
commit 3e980e006f
4 changed files with 33 additions and 0 deletions

View File

@ -314,6 +314,9 @@ void pcf_sess_remove(pcf_sess_t *sess)
clear_ipv4addr(sess);
clear_ipv6prefix(sess);
OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list);
OpenAPI_clear_and_free_string_list(sess->ipv6_frame_route_list);
if (sess->subscribed_sess_ambr)
OpenAPI_ambr_free(sess->subscribed_sess_ambr);
if (sess->subscribed_default_qos)

View File

@ -96,6 +96,9 @@ struct pcf_sess_s {
char *ipv4addr_string;
char *ipv6prefix_string;
OpenAPI_list_t *ipv4_frame_route_list;
OpenAPI_list_t *ipv6_frame_route_list;
uint32_t ipv4addr;
struct {
uint8_t len;

View File

@ -59,6 +59,9 @@ ogs_sbi_request_t *pcf_nbsf_management_build_register(
PcfBinding.ipv4_addr = sess->ipv4addr_string;
PcfBinding.ipv6_prefix = sess->ipv6prefix_string;
PcfBinding.ipv4_frame_route_list = sess->ipv4_frame_route_list;
PcfBinding.ipv6_frame_route_list = sess->ipv6_frame_route_list;
if (!sess->dnn) {
ogs_error("No DNN");
goto end;

View File

@ -296,6 +296,30 @@ bool pcf_npcf_smpolicycontrol_handle_create(pcf_sess_t *sess,
pcf_sess_set_ipv6prefix(
sess, SmPolicyContextData->ipv6_address_prefix));
if (SmPolicyContextData->ipv4_frame_route_list) {
OpenAPI_lnode_t *node = NULL;
OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list);
sess->ipv4_frame_route_list = OpenAPI_list_create();
OpenAPI_list_for_each(SmPolicyContextData->ipv4_frame_route_list, node) {
if (!node->data)
continue;
OpenAPI_list_add(sess->ipv4_frame_route_list, ogs_strdup(node->data));
}
}
if (SmPolicyContextData->ipv6_frame_route_list) {
OpenAPI_lnode_t *node = NULL;
OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list);
sess->ipv6_frame_route_list = OpenAPI_list_create();
OpenAPI_list_for_each(SmPolicyContextData->ipv6_frame_route_list, node) {
if (!node->data)
continue;
OpenAPI_list_add(sess->ipv6_frame_route_list, ogs_strdup(node->data));
}
}
sess->s_nssai.sst = sliceInfo->sst;
sess->s_nssai.sd = ogs_s_nssai_sd_from_string(sliceInfo->sd);