From 88209f52df8de99a25c74f19fb7423f7fba8a393 Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Wed, 18 Jan 2023 12:17:44 +0100 Subject: [PATCH] [BSF] Handle Ipv4FrameRouteList, save it into context --- src/bsf/context.c | 3 +++ src/bsf/context.h | 3 +++ src/bsf/nbsf-handler.c | 25 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/bsf/context.c b/src/bsf/context.c index 8add69993..90969df01 100644 --- a/src/bsf/context.c +++ b/src/bsf/context.c @@ -188,6 +188,9 @@ void bsf_sess_remove(bsf_sess_t *sess) ogs_free(sess->ipv6prefix_string); } + OpenAPI_clear_and_free_string_list(sess->ipv4_frame_route_list); + OpenAPI_clear_and_free_string_list(sess->ipv6_frame_route_list); + ogs_assert(sess->dnn); ogs_free(sess->dnn); diff --git a/src/bsf/context.h b/src/bsf/context.h index a7de9b001..67583e332 100644 --- a/src/bsf/context.h +++ b/src/bsf/context.h @@ -52,6 +52,9 @@ typedef struct bsf_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; diff --git a/src/bsf/nbsf-handler.c b/src/bsf/nbsf-handler.c index 3cdb38754..8186faeee 100644 --- a/src/bsf/nbsf-handler.c +++ b/src/bsf/nbsf-handler.c @@ -103,6 +103,31 @@ bool bsf_nbsf_management_handle_pcf_binding( ogs_assert(sess->pcf_fqdn); } + + if (RecvPcfBinding->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(RecvPcfBinding->ipv4_frame_route_list, node) { + if (!node->data) + continue; + OpenAPI_list_add(sess->ipv4_frame_route_list, ogs_strdup(node->data)); + } + } + + if (RecvPcfBinding->ipv6_frame_route_list) { + OpenAPI_lnode_t *node = NULL; + + OpenAPI_clear_and_free_string_list(sess->ipv6_frame_route_list); + sess->ipv6_frame_route_list = OpenAPI_list_create(); + OpenAPI_list_for_each(RecvPcfBinding->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 = RecvPcfBinding->snssai->sst; sess->s_nssai.sd = ogs_s_nssai_sd_from_string(RecvPcfBinding->snssai->sd);