mirror of
https://github.com/open5gs/open5gs.git
synced 2025-11-02 13:03:31 +00:00
[AMF] Fix crash in gmm_state_de_registered due to invalid state handling (#4082)
Problem
-------
AMF was crashing several times per day when multiple UEs were connecting,
sending data, and disconnecting. The crash occurred in
gmm_state_de_registered() with the following log:
FATAL: Invalid state [2]
FATAL: gmm_state_de_registered: should not be reached.
This was triggered by network-initiated deregistration scenarios that were
not explicitly handled in the FSM, causing the AMF to enter an unexpected
state and abort.
This commit is contained in:
435
src/amf/gmm-sm.c
435
src/amf/gmm-sm.c
@@ -246,13 +246,12 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
} else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
|
||||
NULL,
|
||||
amf_npcf_am_policy_control_build_delete,
|
||||
amf_ue, state, NULL);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL, NULL,
|
||||
amf_npcf_am_policy_control_build_delete,
|
||||
amf_ue, state, NULL);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -267,6 +266,8 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
ogs_assert(sbi_message);
|
||||
state = e->h.sbi.state;
|
||||
|
||||
xact_count = amf_sess_xact_count(amf_ue);
|
||||
|
||||
SWITCH(sbi_message->h.service.name)
|
||||
CASE(OGS_SBI_SERVICE_NAME_NAUSF_AUTH)
|
||||
SWITCH(sbi_message->h.resource.component[0])
|
||||
@@ -293,6 +294,57 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
ogs_error("[%s] Ignore SBI message", amf_ue->suci);
|
||||
break;
|
||||
CASE(OGS_SBI_HTTP_METHOD_DELETE)
|
||||
/*
|
||||
* gmm_state_de_registered()
|
||||
*
|
||||
* - AMF_UE_INITIATED_DE_REGISTERED
|
||||
* 1. PDU session establishment request
|
||||
* 2. PDUSessionResourceSetupRequest +
|
||||
* PDU session establishment accept
|
||||
* 3. PDUSessionResourceSetupResponse
|
||||
* 4. Authentication Result Removal
|
||||
* 5. AM_Policy_Association_Termination
|
||||
* 6. Deregistration request
|
||||
* 7. UEContextReleaseCommand
|
||||
* 8. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_RELEASE_SM_CONTEXT_NO_STATE
|
||||
* 1. PDU session release request
|
||||
* 2. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 3. PDUSessionResourceReleaseREsponse
|
||||
* 4. PDU session release complete
|
||||
* 5. Authentication Result Removal
|
||||
* 6. AM_Policy_Association_Termination
|
||||
* 7. Deregistration request
|
||||
* 8. UEContextReleaseCommand
|
||||
* 9. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
* 3. UDM_UECM_Deregisration
|
||||
* 4. PDU session release request
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
* 2. Deregistration request
|
||||
* 3. UDM_SDM_Unsubscribe
|
||||
* 4. UDM_UECM_Deregisration
|
||||
* 5. PDU session release request
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
CLEAR_5G_AKA_CONFIRMATION(amf_ue);
|
||||
|
||||
if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
|
||||
@@ -317,8 +369,6 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
state ==
|
||||
AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
|
||||
|
||||
xact_count = amf_sess_xact_count(amf_ue);
|
||||
|
||||
memset(¶m, 0, sizeof(param));
|
||||
param.ue_location = true;
|
||||
param.ue_timezone = true;
|
||||
@@ -380,14 +430,18 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
SWITCH(sbi_message->h.method)
|
||||
CASE(OGS_SBI_HTTP_METHOD_DELETE)
|
||||
/*
|
||||
* gmm_state_de_registered()
|
||||
*
|
||||
* - AMF_UE_INITIATED_DE_REGISTERED
|
||||
* 1. PDU session establishment request
|
||||
* 2. PDUSessionResourceSetupRequest +
|
||||
* PDU session establishment accept
|
||||
* 3. PDUSessionResourceSetupResponse
|
||||
* 4. Deregistration request
|
||||
* 5. UEContextReleaseCommand
|
||||
* 6. UEContextReleaseComplete
|
||||
* 4. Authentication Result Removal
|
||||
* 5. AM_Policy_Association_Termination
|
||||
* 6. Deregistration request
|
||||
* 7. UEContextReleaseCommand
|
||||
* 8. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_RELEASE_SM_CONTEXT_NO_STATE
|
||||
* 1. PDU session release request
|
||||
@@ -395,12 +449,41 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
* PDU session release command
|
||||
* 3. PDUSessionResourceReleaseREsponse
|
||||
* 4. PDU session release complete
|
||||
* 5. Deregistration request
|
||||
* 6. UEContextReleaseCommand
|
||||
* 7. UEContextReleaseComplete
|
||||
* 5. Authentication Result Removal
|
||||
* 6. AM_Policy_Association_Termination
|
||||
* 7. Deregistration request
|
||||
* 8. UEContextReleaseCommand
|
||||
* 9. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
* 3. UDM_UECM_Deregisration
|
||||
* 4. PDU session release request
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
* 2. Deregistration request
|
||||
* 3. UDM_SDM_Unsubscribe
|
||||
* 4. UDM_UECM_Deregisration
|
||||
* 5. PDU session release request
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
|
||||
state == AMF_UE_INITIATED_DE_REGISTERED) {
|
||||
state == AMF_UE_INITIATED_DE_REGISTERED ||
|
||||
state == AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
|
||||
state == AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
|
||||
UDM_SDM_CLEAR(amf_ue);
|
||||
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
@@ -444,33 +527,62 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
CASE(OGS_SBI_HTTP_METHOD_PATCH)
|
||||
SWITCH(sbi_message->h.resource.component[2])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS)
|
||||
/*
|
||||
* - AMF_UE_INITIATED_DE_REGISTERED
|
||||
* 1. PDU session establishment request
|
||||
* 2. PDUSessionResourceSetupRequest +
|
||||
* PDU session establishment accept
|
||||
* 3. PDUSessionResourceSetupResponse
|
||||
* 4. Deregistration request
|
||||
* 5. UEContextReleaseCommand
|
||||
* 6. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_RELEASE_SM_CONTEXT_NO_STATE
|
||||
* 1. PDU session release request
|
||||
* 2. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 3. PDUSessionResourceReleaseREsponse
|
||||
* 4. PDU session release complete
|
||||
* 5. Deregistration request
|
||||
* 6. UEContextReleaseCommand
|
||||
* 7. UEContextReleaseComplete
|
||||
*/
|
||||
/*
|
||||
* gmm_state_de_registered()
|
||||
*
|
||||
* - AMF_UE_INITIATED_DE_REGISTERED
|
||||
* 1. PDU session establishment request
|
||||
* 2. PDUSessionResourceSetupRequest +
|
||||
* PDU session establishment accept
|
||||
* 3. PDUSessionResourceSetupResponse
|
||||
* 4. Authentication Result Removal
|
||||
* 5. AM_Policy_Association_Termination
|
||||
* 6. Deregistration request
|
||||
* 7. UEContextReleaseCommand
|
||||
* 8. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_RELEASE_SM_CONTEXT_NO_STATE
|
||||
* 1. PDU session release request
|
||||
* 2. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 3. PDUSessionResourceReleaseREsponse
|
||||
* 4. PDU session release complete
|
||||
* 5. Authentication Result Removal
|
||||
* 6. AM_Policy_Association_Termination
|
||||
* 7. Deregistration request
|
||||
* 8. UEContextReleaseCommand
|
||||
* 9. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
* 3. UDM_UECM_Deregisration
|
||||
* 4. PDU session release request
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
* 2. Deregistration request
|
||||
* 3. UDM_SDM_Unsubscribe
|
||||
* 4. UDM_UECM_Deregisration
|
||||
* 5. PDU session release request
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
|
||||
state == AMF_UE_INITIATED_DE_REGISTERED) {
|
||||
|
||||
if (CHECK_5G_AKA_CONFIRMATION(amf_ue)) {
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH,
|
||||
NULL,
|
||||
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
|
||||
amf_nausf_auth_build_authenticate_delete,
|
||||
amf_ue, state, NULL);
|
||||
ogs_expect(r == OGS_OK);
|
||||
@@ -488,6 +600,39 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
}
|
||||
} else if (state ==
|
||||
AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
|
||||
state ==
|
||||
AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
|
||||
if (CHECK_5G_AKA_CONFIRMATION(amf_ue)) {
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH, NULL,
|
||||
amf_nausf_auth_build_authenticate_delete,
|
||||
amf_ue, state, NULL);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
} else {
|
||||
memset(¶m, 0, sizeof(param));
|
||||
param.ue_location = true;
|
||||
param.ue_timezone = true;
|
||||
|
||||
amf_sbi_send_release_all_sessions(
|
||||
NULL, amf_ue, state, ¶m);
|
||||
|
||||
if (!AMF_SESSION_RELEASE_PENDING(amf_ue) &&
|
||||
amf_sess_xact_count(amf_ue) == xact_count) {
|
||||
|
||||
if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
|
||||
NULL,
|
||||
amf_npcf_am_policy_control_build_delete,
|
||||
amf_ue, state, NULL);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ogs_fatal("Invalid state [%d]", state);
|
||||
ogs_assert_if_reached();
|
||||
@@ -527,14 +672,18 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
|
||||
CASE(OGS_SBI_HTTP_METHOD_DELETE)
|
||||
/*
|
||||
* gmm_state_de_registered()
|
||||
*
|
||||
* - AMF_UE_INITIATED_DE_REGISTERED
|
||||
* 1. PDU session establishment request
|
||||
* 2. PDUSessionResourceSetupRequest +
|
||||
* PDU session establishment accept
|
||||
* 3. PDUSessionResourceSetupResponse
|
||||
* 4. Deregistration request
|
||||
* 5. UEContextReleaseCommand
|
||||
* 6. UEContextReleaseComplete
|
||||
* 4. Authentication Result Removal
|
||||
* 5. AM_Policy_Association_Termination
|
||||
* 6. Deregistration request
|
||||
* 7. UEContextReleaseCommand
|
||||
* 8. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_RELEASE_SM_CONTEXT_NO_STATE
|
||||
* 1. PDU session release request
|
||||
@@ -542,9 +691,36 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
* PDU session release command
|
||||
* 3. PDUSessionResourceReleaseREsponse
|
||||
* 4. PDU session release complete
|
||||
* 5. Deregistration request
|
||||
* 6. UEContextReleaseCommand
|
||||
* 7. UEContextReleaseComplete
|
||||
* 5. Authentication Result Removal
|
||||
* 6. AM_Policy_Association_Termination
|
||||
* 7. Deregistration request
|
||||
* 8. UEContextReleaseCommand
|
||||
* 9. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
* 3. UDM_UECM_Deregisration
|
||||
* 4. PDU session release request
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
* 2. Deregistration request
|
||||
* 3. UDM_SDM_Unsubscribe
|
||||
* 4. UDM_UECM_Deregisration
|
||||
* 5. PDU session release request
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
|
||||
state == AMF_UE_INITIATED_DE_REGISTERED) {
|
||||
@@ -553,6 +729,27 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
|
||||
PCF_AM_POLICY_CLEAR(amf_ue);
|
||||
} else if (state ==
|
||||
AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED) {
|
||||
ogs_warn("[%s] Implicit De-registered", amf_ue->supi);
|
||||
OGS_FSM_TRAN(&amf_ue->sm,
|
||||
&gmm_state_ue_context_will_remove);
|
||||
|
||||
} else if (state ==
|
||||
AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
|
||||
ogs_warn("[%s] Explicit De-registered", amf_ue->supi);
|
||||
|
||||
amf_ue->explict_de_registered.sbi_done = true;
|
||||
|
||||
if (amf_ue->explict_de_registered.n1_done == true) {
|
||||
r = ngap_send_ran_ue_context_release_command(
|
||||
ran_ue_find_by_id(amf_ue->ran_ue_id),
|
||||
NGAP_Cause_PR_misc,
|
||||
NGAP_CauseMisc_om_intervention,
|
||||
NGAP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
}
|
||||
} else {
|
||||
ogs_fatal("Invalid state [%d]", state);
|
||||
ogs_assert_if_reached();
|
||||
@@ -609,8 +806,6 @@ void gmm_state_de_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
}
|
||||
}
|
||||
|
||||
xact_count = amf_sess_xact_count(amf_ue);
|
||||
|
||||
memset(¶m, 0, sizeof(param));
|
||||
param.ue_location = true;
|
||||
param.ue_timezone = true;
|
||||
@@ -855,13 +1050,12 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
} else if (PCF_AM_POLICY_ASSOCIATED(amf_ue)) {
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL,
|
||||
NULL,
|
||||
amf_npcf_am_policy_control_build_delete,
|
||||
amf_ue, state, NULL);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NPCF_AM_POLICY_CONTROL, NULL,
|
||||
amf_npcf_am_policy_control_build_delete,
|
||||
amf_ue, state, NULL);
|
||||
ogs_expect(r == OGS_OK);
|
||||
ogs_assert(r != OGS_ERROR);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -904,6 +1098,57 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
ogs_error("[%s] Ignore SBI message", amf_ue->suci);
|
||||
break;
|
||||
CASE(OGS_SBI_HTTP_METHOD_DELETE)
|
||||
/*
|
||||
* gmm_state_registered()
|
||||
*
|
||||
* - AMF_UE_INITIATED_DE_REGISTERED
|
||||
* 1. PDU session establishment request
|
||||
* 2. PDUSessionResourceSetupRequest +
|
||||
* PDU session establishment accept
|
||||
* 3. PDUSessionResourceSetupResponse
|
||||
* 4. Authentication Result Removal
|
||||
* 5. AM_Policy_Association_Termination
|
||||
* 6. Deregistration request
|
||||
* 7. UEContextReleaseCommand
|
||||
* 8. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_RELEASE_SM_CONTEXT_NO_STATE
|
||||
* 1. PDU session release request
|
||||
* 2. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 3. PDUSessionResourceReleaseREsponse
|
||||
* 4. PDU session release complete
|
||||
* 5. Authentication Result Removal
|
||||
* 6. AM_Policy_Association_Termination
|
||||
* 7. Deregistration request
|
||||
* 8. UEContextReleaseCommand
|
||||
* 9. UEContextReleaseComplete
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
* 3. UDM_UECM_Deregisration
|
||||
* 4. PDU session release request
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
* 2. Deregistration request
|
||||
* 3. UDM_SDM_Unsubscribe
|
||||
* 4. UDM_UECM_Deregisration
|
||||
* 5. PDU session release request
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
CLEAR_5G_AKA_CONFIRMATION(amf_ue);
|
||||
|
||||
if (state == AMF_RELEASE_SM_CONTEXT_NO_STATE ||
|
||||
@@ -928,8 +1173,6 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
state ==
|
||||
AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
|
||||
|
||||
int xact_count = amf_sess_xact_count(amf_ue);
|
||||
|
||||
memset(¶m, 0, sizeof(param));
|
||||
param.ue_location = true;
|
||||
param.ue_timezone = true;
|
||||
@@ -991,6 +1234,8 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
SWITCH(sbi_message->h.method)
|
||||
CASE(OGS_SBI_HTTP_METHOD_DELETE)
|
||||
/*
|
||||
* gmm_state_registered()
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
@@ -999,7 +1244,8 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. AM_Policy_Association_Termination
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
@@ -1010,9 +1256,10 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. AM_Policy_Association_Termination
|
||||
* 9. Deregistration accept
|
||||
* 10. Signalling Connecion Release
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
if (state ==
|
||||
AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
|
||||
@@ -1061,38 +1308,40 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
CASE(OGS_SBI_HTTP_METHOD_PATCH)
|
||||
SWITCH(sbi_message->h.resource.component[2])
|
||||
CASE(OGS_SBI_RESOURCE_NAME_AMF_3GPP_ACCESS)
|
||||
/*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
* 3. UDM_UECM_Deregisration
|
||||
* 4. Authentication Result Removal
|
||||
* 5. PDU session release request
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
* 2. Deregistration request
|
||||
* 3. UDM_SDM_Unsubscribe
|
||||
* 4. UDM_UECM_Deregisration
|
||||
* 5. Authentication Result Removal
|
||||
* 6. PDU session release request
|
||||
* 7. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 8. PDUSessionResourceReleaseResponse
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10. Deregistration accept
|
||||
* 11. Signalling Connecion Release
|
||||
*/
|
||||
/*
|
||||
* gmm_state_registered()
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
* 3. UDM_UECM_Deregisration
|
||||
* 4. PDU session release request
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
* 2. Deregistration request
|
||||
* 3. UDM_SDM_Unsubscribe
|
||||
* 4. UDM_UECM_Deregisration
|
||||
* 5. PDU session release request
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
if (state ==
|
||||
AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED ||
|
||||
state ==
|
||||
AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED) {
|
||||
|
||||
if (amf_ue->confirmation_for_5g_aka.resource_uri) {
|
||||
if (CHECK_5G_AKA_CONFIRMATION(amf_ue)) {
|
||||
r = amf_ue_sbi_discover_and_send(
|
||||
OGS_SBI_SERVICE_TYPE_NAUSF_AUTH,
|
||||
NULL,
|
||||
@@ -1162,6 +1411,8 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
|
||||
CASE(OGS_SBI_HTTP_METHOD_DELETE)
|
||||
/*
|
||||
* gmm_state_registered()
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED
|
||||
* 1. Implicit Timer Expiration
|
||||
* 2. UDM_SDM_Unsubscribe
|
||||
@@ -1170,7 +1421,8 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
* 5. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 6. PDUSessionResourceReleaseResponse
|
||||
* 7. AM_Policy_Association_Termination
|
||||
* 7. Authentication Result Removal
|
||||
* 8. AM_Policy_Association_Termination
|
||||
*
|
||||
* - AMF_NETWORK_INITIATED_EXPLICIT_DE_REGISTERED
|
||||
* 1. UDM_UECM_DeregistrationNotification
|
||||
@@ -1181,9 +1433,10 @@ void gmm_state_registered(ogs_fsm_t *s, amf_event_t *e)
|
||||
* 6. PDUSessionResourceReleaseCommand +
|
||||
* PDU session release command
|
||||
* 7. PDUSessionResourceReleaseResponse
|
||||
* 8. AM_Policy_Association_Termination
|
||||
* 9. Deregistration accept
|
||||
* 10.Signalling Connecion Release
|
||||
* 8. Authentication Result Removal
|
||||
* 9. AM_Policy_Association_Termination
|
||||
* 10.Deregistration accept
|
||||
* 11.Signalling Connecion Release
|
||||
*/
|
||||
if (state == AMF_NETWORK_INITIATED_IMPLICIT_DE_REGISTERED) {
|
||||
ogs_warn("[%s] Implicit De-registered", amf_ue->supi);
|
||||
|
||||
Reference in New Issue
Block a user