forked from acouzens/open5gs
[SMF] Gy: Tear down session when CCR-Update is rejected by OCS
This commit is contained in:
parent
f66c65b9cf
commit
10a0647f09
|
@ -716,6 +716,9 @@ void smf_gsm_state_operational(ogs_fsm_t *s, smf_event_t *e)
|
||||||
ogs_pfcp_xact_t *pfcp_xact = NULL;
|
ogs_pfcp_xact_t *pfcp_xact = NULL;
|
||||||
ogs_pfcp_message_t *pfcp_message = NULL;
|
ogs_pfcp_message_t *pfcp_message = NULL;
|
||||||
|
|
||||||
|
ogs_diam_gy_message_t *gy_message = NULL;
|
||||||
|
uint32_t diam_err;
|
||||||
|
|
||||||
ogs_nas_5gs_message_t *nas_message = NULL;
|
ogs_nas_5gs_message_t *nas_message = NULL;
|
||||||
|
|
||||||
ogs_sbi_stream_t *stream = NULL;
|
ogs_sbi_stream_t *stream = NULL;
|
||||||
|
@ -829,6 +832,24 @@ void smf_gsm_state_operational(ogs_fsm_t *s, smf_event_t *e)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SMF_EVT_GY_MESSAGE:
|
||||||
|
gy_message = e->gy_message;
|
||||||
|
ogs_assert(gy_message);
|
||||||
|
|
||||||
|
switch(gy_message->cmd_code) {
|
||||||
|
case OGS_DIAM_GY_CMD_CODE_CREDIT_CONTROL:
|
||||||
|
switch (gy_message->cc_request_type) {
|
||||||
|
case OGS_DIAM_GY_CC_REQUEST_TYPE_UPDATE_REQUEST:
|
||||||
|
ogs_assert(e->pfcp_xact);
|
||||||
|
diam_err = smf_gy_handle_cca_update_request(sess, gy_message, e->pfcp_xact);
|
||||||
|
if (diam_err != ER_DIAMETER_SUCCESS)
|
||||||
|
OGS_FSM_TRAN(s, smf_gsm_state_wait_pfcp_deletion);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case OGS_EVENT_SBI_SERVER:
|
case OGS_EVENT_SBI_SERVER:
|
||||||
sbi_message = e->h.sbi.message;
|
sbi_message = e->h.sbi.message;
|
||||||
ogs_assert(sbi_message);
|
ogs_assert(sbi_message);
|
||||||
|
|
|
@ -149,7 +149,7 @@ uint32_t smf_gy_handle_cca_initial_request(
|
||||||
return ER_DIAMETER_SUCCESS;
|
return ER_DIAMETER_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void smf_gy_handle_cca_update_request(
|
uint32_t smf_gy_handle_cca_update_request(
|
||||||
smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
|
smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
|
||||||
ogs_pfcp_xact_t *pfcp_xact)
|
ogs_pfcp_xact_t *pfcp_xact)
|
||||||
{
|
{
|
||||||
|
@ -175,10 +175,8 @@ void smf_gy_handle_cca_update_request(
|
||||||
if (gy_message->result_code != ER_DIAMETER_SUCCESS) {
|
if (gy_message->result_code != ER_DIAMETER_SUCCESS) {
|
||||||
ogs_warn("Gy CCA Update Diameter failure: res=%u err=%u",
|
ogs_warn("Gy CCA Update Diameter failure: res=%u err=%u",
|
||||||
gy_message->result_code, *gy_message->err);
|
gy_message->result_code, *gy_message->err);
|
||||||
// TODO: generate new gtp_xact from sess here? */
|
return gy_message->err ? *gy_message->err :
|
||||||
//ogs_assert(OGS_OK ==
|
ER_DIAMETER_AUTHENTICATION_REJECTED;
|
||||||
// smf_epc_pfcp_send_session_deletion_request(sess, gtp_xact));
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bearer = smf_default_bearer_in_sess(sess);
|
bearer = smf_default_bearer_in_sess(sess);
|
||||||
|
@ -234,6 +232,7 @@ void smf_gy_handle_cca_update_request(
|
||||||
OGS_GTP1_CAUSE_REACTIACTION_REQUESTED);
|
OGS_GTP1_CAUSE_REACTIACTION_REQUESTED);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
return ER_DIAMETER_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t smf_gy_handle_cca_termination_request(
|
uint32_t smf_gy_handle_cca_termination_request(
|
||||||
|
|
|
@ -30,7 +30,7 @@ extern "C" {
|
||||||
uint32_t smf_gy_handle_cca_initial_request(
|
uint32_t smf_gy_handle_cca_initial_request(
|
||||||
smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
|
smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
|
||||||
ogs_gtp_xact_t *gtp_xact);
|
ogs_gtp_xact_t *gtp_xact);
|
||||||
void smf_gy_handle_cca_update_request(
|
uint32_t smf_gy_handle_cca_update_request(
|
||||||
smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
|
smf_sess_t *sess, ogs_diam_gy_message_t *gy_message,
|
||||||
ogs_pfcp_xact_t *pfcp_xact);
|
ogs_pfcp_xact_t *pfcp_xact);
|
||||||
uint32_t smf_gy_handle_cca_termination_request(
|
uint32_t smf_gy_handle_cca_termination_request(
|
||||||
|
|
|
@ -328,23 +328,7 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
|
||||||
|
|
||||||
switch(gy_message->cmd_code) {
|
switch(gy_message->cmd_code) {
|
||||||
case OGS_DIAM_GY_CMD_CODE_CREDIT_CONTROL:
|
case OGS_DIAM_GY_CMD_CODE_CREDIT_CONTROL:
|
||||||
switch(gy_message->cc_request_type) {
|
ogs_fsm_dispatch(&sess->sm, e);
|
||||||
case OGS_DIAM_GY_CC_REQUEST_TYPE_INITIAL_REQUEST:
|
|
||||||
ogs_fsm_dispatch(&sess->sm, e);
|
|
||||||
break;
|
|
||||||
case OGS_DIAM_GY_CC_REQUEST_TYPE_UPDATE_REQUEST:
|
|
||||||
ogs_assert(e->pfcp_xact);
|
|
||||||
smf_gy_handle_cca_update_request(
|
|
||||||
sess, gy_message, e->pfcp_xact);
|
|
||||||
break;
|
|
||||||
case OGS_DIAM_GY_CC_REQUEST_TYPE_TERMINATION_REQUEST:
|
|
||||||
ogs_fsm_dispatch(&sess->sm, e);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ogs_error("Not implemented(%d)", gy_message->cc_request_type);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case OGS_DIAM_GY_CMD_RE_AUTH:
|
case OGS_DIAM_GY_CMD_RE_AUTH:
|
||||||
smf_gy_handle_re_auth_request(sess, gy_message);
|
smf_gy_handle_re_auth_request(sess, gy_message);
|
||||||
|
|
Loading…
Reference in New Issue