[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.
This commit is contained in:
Alexander Couzens 2022-08-23 18:09:36 +02:00
parent 0d6ef1e8ac
commit 9d7737c4b7
9 changed files with 16 additions and 13 deletions

View File

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

View File

@ -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 */

View File

@ -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("*");

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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++) {