diff --git a/lib/dbi/session.c b/lib/dbi/session.c index 9b58c5b1a..0291f6e79 100644 --- a/lib/dbi/session.c +++ b/lib/dbi/session.c @@ -43,7 +43,6 @@ int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, ogs_session_data_t zero_data; ogs_assert(supi); - ogs_assert(s_nssai); ogs_assert(dnn); ogs_assert(session_data); @@ -122,9 +121,10 @@ int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, continue; } - if (s_nssai->sst != sst) continue; + if (s_nssai && s_nssai->sst != sst) continue; - if (s_nssai->sd.v != OGS_S_NSSAI_NO_SD_VALUE && + if (s_nssai && + s_nssai->sd.v != OGS_S_NSSAI_NO_SD_VALUE && sd.v != OGS_S_NSSAI_NO_SD_VALUE) { if (s_nssai->sd.v != sd.v) continue; } @@ -150,7 +150,10 @@ int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn, done: if (found == false) { ogs_error("Cannot find SUPI[%s] S_NSSAI[SST:%d SD:0x%x] DNN[%s] in DB", - supi_id, s_nssai->sst, s_nssai->sd.v, dnn); + supi_id, + s_nssai ? s_nssai->sst : 0, + s_nssai ? s_nssai->sd.v : 0, + dnn); rv = OGS_ERROR; goto out; diff --git a/src/hss/hss-s6a-path.c b/src/hss/hss-s6a-path.c index 46a8b8ce3..e3ce47c3e 100644 --- a/src/hss/hss-s6a-path.c +++ b/src/hss/hss-s6a-path.c @@ -277,7 +277,6 @@ static int hss_ogs_diam_s6a_ulr_cb( struct msg **msg, struct avp *avp, union avp_value val; char imsi_bcd[OGS_MAX_IMSI_BCD_LEN+1]; - ogs_s_nssai_t s_nssai; int rv; uint32_t result_code = 0; @@ -463,13 +462,10 @@ static int hss_ogs_diam_s6a_ulr_cb( struct msg **msg, struct avp *avp, ret = fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, avp_rau_tau_timer); ogs_assert(ret == 0); - /* For EPC, we'll use SST:1 */ - s_nssai.sst = 1; - s_nssai.sd.v = OGS_S_NSSAI_NO_SD_VALUE; + /* For EPC, we'll use first Slice in Subscription */ + if (subscription_data.num_of_slice) + slice_data = &subscription_data.slice[0]; - slice_data = ogs_slice_find_by_s_nssai( - subscription_data.slice, subscription_data.num_of_slice, - &s_nssai); if (!slice_data) { ogs_error("[%s] Cannot find S-NSSAI", imsi_bcd); result_code = OGS_DIAM_S6A_ERROR_UNKNOWN_EPS_SUBSCRIPTION; diff --git a/src/hss/hss-swx-path.c b/src/hss/hss-swx-path.c index da4ac1f1d..d54dd6f76 100644 --- a/src/hss/hss-swx-path.c +++ b/src/hss/hss-swx-path.c @@ -388,7 +388,6 @@ static int hss_ogs_diam_swx_sar_cb( struct msg **msg, struct avp *avp, union avp_value val; char *user_name = NULL; - ogs_s_nssai_t s_nssai; char imsi_bcd[OGS_MAX_IMSI_BCD_LEN+1]; @@ -557,13 +556,10 @@ static int hss_ogs_diam_swx_sar_cb( struct msg **msg, struct avp *avp, ret = fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, avp_ambr); ogs_assert(ret == 0); - /* For EPC, we'll use SST:1 */ - s_nssai.sst = 1; - s_nssai.sd.v = OGS_S_NSSAI_NO_SD_VALUE; + /* For EPC, we'll use first Slice in Subscription */ + if (subscription_data.num_of_slice) + slice_data = &subscription_data.slice[0]; - slice_data = ogs_slice_find_by_s_nssai( - subscription_data.slice, subscription_data.num_of_slice, - &s_nssai); if (!slice_data) { ogs_error("[%s] Cannot find S-NSSAI", imsi_bcd); result_code = OGS_DIAM_S6A_ERROR_UNKNOWN_EPS_SUBSCRIPTION; diff --git a/src/pcrf/pcrf-context.c b/src/pcrf/pcrf-context.c index 534e5447b..d954f7200 100644 --- a/src/pcrf/pcrf-context.c +++ b/src/pcrf/pcrf-context.c @@ -271,7 +271,6 @@ int pcrf_db_qos_data( { int rv, i; char *supi = NULL; - ogs_s_nssai_t s_nssai; ogs_assert(imsi_bcd); ogs_assert(apn); @@ -281,11 +280,8 @@ int pcrf_db_qos_data( supi = ogs_msprintf("%s-%s", OGS_ID_SUPI_TYPE_IMSI, imsi_bcd); ogs_assert(supi); - /* For EPC, we'll use SST:1 */ - s_nssai.sst = 1; - s_nssai.sd.v = OGS_S_NSSAI_NO_SD_VALUE; - - rv = ogs_dbi_session_data(supi, &s_nssai, apn, session_data); + /* For EPC, we'll use [S_NSSAI = NULL] */ + rv = ogs_dbi_session_data(supi, NULL, apn, session_data); /* For EPC, we need to inialize Flow-Status in Pcc-Rule */ for (i = 0; i < session_data->num_of_pcc_rule; i++) {