bsf bind delete possible fix (#1272)

Avoid to delete bsf binding when there are multiple pdu session associated to the same (s-nssai,dnn) tuple)
This commit is contained in:
Daniele
2021-12-02 14:00:01 +01:00
committed by GitHub
parent 448e07d5a9
commit 758cf9dd72
3 changed files with 28 additions and 3 deletions

View File

@@ -433,6 +433,21 @@ pcf_sess_t *pcf_sess_find_by_ipv4addr(char *ipv4addr_string)
return ogs_hash_get(self.ipv4addr_hash, &ipv4addr, sizeof(ipv4addr));
}
int pcf_sessions_number_by_snssai_and_dnn(pcf_ue_t *pcf_ue, ogs_s_nssai_t *s_nssai, char *dnn) {
int number_of_sessions = 0;
pcf_sess_t *sess = NULL;
ogs_assert(s_nssai);
ogs_assert(dnn);
ogs_list_for_each(&pcf_ue->sess_list, sess)
if (sess->s_nssai.sst == s_nssai->sst &&
sess->dnn && strcmp(sess->dnn, dnn) == 0)
number_of_sessions++;
return number_of_sessions;
}
pcf_sess_t *pcf_sess_find_by_ipv6addr(char *ipv6addr_string)
{
int rv;

View File

@@ -180,6 +180,7 @@ pcf_sess_t *pcf_sess_find_by_dnn(pcf_ue_t *pcf_ue, char *dnn);
pcf_sess_t *pcf_sess_find_by_ipv4addr(char *ipv4addr_string);
pcf_sess_t *pcf_sess_find_by_ipv6addr(char *ipv6addr_string);
pcf_sess_t *pcf_sess_find_by_ipv6prefix(char *ipv6prefix_string);
int pcf_sessions_number_by_snssai_and_dnn(pcf_ue_t *pcf_ue, ogs_s_nssai_t *s_nssai, char *dnn);
pcf_ue_t *pcf_ue_cycle(pcf_ue_t *pcf_ue);
pcf_sess_t *pcf_sess_cycle(pcf_sess_t *sess);

View File

@@ -320,9 +320,18 @@ bool pcf_npcf_smpolicycontrol_handle_delete(pcf_sess_t *sess,
pcf_sbi_send_policyauthorization_terminate_notify(app_session);
}
ogs_assert(true ==
pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_BSF, sess, stream, NULL,
pcf_nbsf_management_build_de_register));
if(pcf_sessions_number_by_snssai_and_dnn(pcf_ue, &sess->s_nssai, sess->dnn) > 1){
ogs_sbi_message_t sendmsg;
memset(&sendmsg, 0, sizeof(sendmsg));
ogs_sbi_response_t *response = ogs_sbi_build_response(&sendmsg, OGS_SBI_HTTP_STATUS_NO_CONTENT);
ogs_assert(response);
ogs_assert(true == ogs_sbi_server_send_response(stream, response));
} else {
ogs_assert(true ==
pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_BSF, sess, stream, NULL,
pcf_nbsf_management_build_de_register));
}
return true;