From 9d7737c4b70958e30a6c0ca06c737b920a8ddb91 Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Tue, 23 Aug 2022 18:09:36 +0200 Subject: [PATCH] [dbi] session_data(): add argument charging characteristics Add the charging characteristics to the dbi function to allow the backend to decide the profile based on it. The charging characteristics can be filled by the HSS and will be passed by the PCEF towards the PCRF. This is an API dbi breakage. --- lib/dbi/dbi-private.h | 2 +- lib/dbi/dbi.c | 4 ++-- lib/dbi/json/json.c | 5 ++--- lib/dbi/mongo/mongo-private.h | 2 +- lib/dbi/mongo/session.c | 2 +- lib/dbi/session.h | 4 +++- src/pcf/nbsf-handler.c | 3 ++- src/pcf/npcf-handler.c | 5 +++-- src/pcrf/pcrf-context.c | 2 +- 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/dbi/dbi-private.h b/lib/dbi/dbi-private.h index 1812cbbe4..e6a5bca53 100644 --- a/lib/dbi/dbi-private.h +++ b/lib/dbi/dbi-private.h @@ -34,7 +34,7 @@ struct ogs_dbi_s { void (*final)(void); /* session */ int (*session_data)(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, - ogs_session_data_t *data); + int32_t charging_char, ogs_session_data_t *data); /* ims */ int (*msisdn_data)(char *imsi_or_msisdn_bcd, ogs_msisdn_data_t *msisdn_data); int (*ims_data)(char *supi, ogs_ims_data_t *ims_data); diff --git a/lib/dbi/dbi.c b/lib/dbi/dbi.c index 2207cd241..2b3a4c878 100644 --- a/lib/dbi/dbi.c +++ b/lib/dbi/dbi.c @@ -93,12 +93,12 @@ int ogs_dbi_ims_data(char *supi, ogs_ims_data_t *ims_data) /* session */ int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, - ogs_session_data_t *session_data) + int32_t charging_char, ogs_session_data_t *session_data) { ogs_assert(dbi_selected); if (!dbi_selected->session_data) return OGS_ERROR; - return dbi_selected->session_data(supi, s_nssai, dnn, session_data); + return dbi_selected->session_data(supi, s_nssai, dnn, charging_char, session_data); } /* subscription */ diff --git a/lib/dbi/json/json.c b/lib/dbi/json/json.c index 591b70df4..697589eef 100644 --- a/lib/dbi/json/json.c +++ b/lib/dbi/json/json.c @@ -360,14 +360,13 @@ fail: return ret; } -static int json_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, ogs_session_data_t *session_data) +static int json_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, + int32_t charging_char, ogs_session_data_t *session_data) { ogs_session_t *session = &session_data->session; ogs_json_apn_profile_t *profile; ogs_json_apn_t *db_apn = ogs_dbi_static_get_apn(dnn); - int charging_char = -1; - if (!db_apn) db_apn = ogs_dbi_static_get_apn("*"); diff --git a/lib/dbi/mongo/mongo-private.h b/lib/dbi/mongo/mongo-private.h index 4fb787ef6..f747351dc 100644 --- a/lib/dbi/mongo/mongo-private.h +++ b/lib/dbi/mongo/mongo-private.h @@ -40,7 +40,7 @@ int ogs_dbi_mongo_ims_data(char *supi, ogs_ims_data_t *ims_data); /* session */ int ogs_dbi_mongo_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, - ogs_session_data_t *session_data); + int32_t charging_char, ogs_session_data_t *session_data); /* subscription */ int ogs_dbi_mongo_auth_info(char *supi, ogs_dbi_auth_info_t *auth_info); diff --git a/lib/dbi/mongo/session.c b/lib/dbi/mongo/session.c index 1b82ce88a..dabb5cf31 100644 --- a/lib/dbi/mongo/session.c +++ b/lib/dbi/mongo/session.c @@ -23,7 +23,7 @@ #include "mongo-private.h" int ogs_dbi_mongo_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, - ogs_session_data_t *session_data) + int32_t charging_char, ogs_session_data_t *session_data) { int rv = OGS_OK; mongoc_cursor_t *cursor = NULL; diff --git a/lib/dbi/session.h b/lib/dbi/session.h index 17e4ddd3e..2c10c5a34 100644 --- a/lib/dbi/session.h +++ b/lib/dbi/session.h @@ -28,8 +28,10 @@ extern "C" { #endif +#define OGS_DBI_NO_CHARGING_CHAR -1 + int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, - ogs_session_data_t *session_data); + int32_t charging_char, ogs_session_data_t *session_data); #ifdef __cplusplus } diff --git a/src/pcf/nbsf-handler.c b/src/pcf/nbsf-handler.c index fc48a5e28..ca8e3b834 100644 --- a/src/pcf/nbsf-handler.c +++ b/src/pcf/nbsf-handler.c @@ -123,7 +123,8 @@ bool pcf_nbsf_management_handle_register( ogs_sbi_header_free(&header); rv = ogs_dbi_session_data( - pcf_ue->supi, &sess->s_nssai, sess->dnn, &session_data); + pcf_ue->supi, &sess->s_nssai, sess->dnn, OGS_DBI_NO_CHARGING_CHAR, + &session_data); if (rv != OGS_OK) { strerror = ogs_msprintf("[%s:%d] Cannot find SUPI in DB", pcf_ue->supi, sess->psi); diff --git a/src/pcf/npcf-handler.c b/src/pcf/npcf-handler.c index d0651f8de..d6612a2e6 100644 --- a/src/pcf/npcf-handler.c +++ b/src/pcf/npcf-handler.c @@ -567,7 +567,7 @@ bool pcf_npcf_policyauthorization_handle_create(pcf_sess_t *sess, memset(&session_data, 0, sizeof(ogs_session_data_t)); rv = ogs_dbi_session_data( - pcf_ue->supi, &sess->s_nssai, sess->dnn, &session_data); + pcf_ue->supi, &sess->s_nssai, sess->dnn, OGS_DBI_NO_CHARGING_CHAR, &session_data); if (rv != OGS_OK) { strerror = ogs_msprintf("[%s:%d] Cannot find SUPI in DB", pcf_ue->supi, sess->psi); @@ -980,7 +980,8 @@ bool pcf_npcf_policyauthorization_handle_update( memset(&session_data, 0, sizeof(ogs_session_data_t)); rv = ogs_dbi_session_data( - pcf_ue->supi, &sess->s_nssai, sess->dnn, &session_data); + pcf_ue->supi, &sess->s_nssai, sess->dnn, OGS_DBI_NO_CHARGING_CHAR, + &session_data); if (rv != OGS_OK) { strerror = ogs_msprintf("[%s:%d] Cannot find SUPI in DB", pcf_ue->supi, sess->psi); diff --git a/src/pcrf/pcrf-context.c b/src/pcrf/pcrf-context.c index ca85d71cb..d3c38c9e7 100644 --- a/src/pcrf/pcrf-context.c +++ b/src/pcrf/pcrf-context.c @@ -281,7 +281,7 @@ int pcrf_db_qos_data( ogs_assert(supi); /* For EPC, we'll use [S_NSSAI = NULL] */ - rv = ogs_dbi_session_data(supi, NULL, apn, session_data); + rv = ogs_dbi_session_data(supi, NULL, apn, OGS_DBI_NO_CHARGING_CHAR, session_data); /* For EPC, we need to inialize Flow-Status in Pcc-Rule */ for (i = 0; i < session_data->num_of_pcc_rule; i++) {