forked from acouzens/open5gs
[AMF] Support REREGISTRATION_REQUIRED in dereg notify
This commit is contained in:
parent
ead6f8e973
commit
b9f6432e54
|
@ -276,7 +276,8 @@ ogs_pkbuf_t *gmm_build_de_registration_accept(amf_ue_t *amf_ue)
|
||||||
return nas_5gs_security_encode(amf_ue, &message);
|
return nas_5gs_security_encode(amf_ue, &message);
|
||||||
}
|
}
|
||||||
|
|
||||||
ogs_pkbuf_t *gmm_build_de_registration_request(amf_ue_t *amf_ue)
|
ogs_pkbuf_t *gmm_build_de_registration_request(amf_ue_t *amf_ue,
|
||||||
|
OpenAPI_deregistration_reason_e dereg_reason)
|
||||||
{
|
{
|
||||||
ogs_nas_5gs_message_t message;
|
ogs_nas_5gs_message_t message;
|
||||||
ogs_nas_5gs_deregistration_request_to_ue_t *dereg_req =
|
ogs_nas_5gs_deregistration_request_to_ue_t *dereg_req =
|
||||||
|
@ -295,12 +296,16 @@ ogs_pkbuf_t *gmm_build_de_registration_request(amf_ue_t *amf_ue)
|
||||||
message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE;
|
message.gmm.h.message_type = OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE;
|
||||||
|
|
||||||
dereg_req->de_registration_type.switch_off = 1;
|
dereg_req->de_registration_type.switch_off = 1;
|
||||||
dereg_req->de_registration_type.re_registration_required = 0;
|
dereg_req->de_registration_type.re_registration_required =
|
||||||
|
dereg_reason == OpenAPI_deregistration_reason_REREGISTRATION_REQUIRED;
|
||||||
dereg_req->de_registration_type.access_type = OGS_ACCESS_TYPE_3GPP;
|
dereg_req->de_registration_type.access_type = OGS_ACCESS_TYPE_3GPP;
|
||||||
|
|
||||||
dereg_req->presencemask |=
|
dereg_req->presencemask |=
|
||||||
OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT;
|
OGS_NAS_5GS_DEREGISTRATION_REQUEST_TO_UE_5GMM_CAUSE_PRESENT;
|
||||||
dereg_req->gmm_cause = OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED;
|
dereg_req->gmm_cause =
|
||||||
|
(dereg_reason == OpenAPI_deregistration_reason_REREGISTRATION_REQUIRED
|
||||||
|
? OGS_5GMM_CAUSE_IMPLICITLY_DE_REGISTERED
|
||||||
|
: OGS_5GMM_CAUSE_5GS_SERVICES_NOT_ALLOWED);
|
||||||
|
|
||||||
return nas_5gs_security_encode(amf_ue, &message);
|
return nas_5gs_security_encode(amf_ue, &message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,8 @@ ogs_pkbuf_t *gmm_build_service_reject(
|
||||||
amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_cause);
|
amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_cause);
|
||||||
|
|
||||||
ogs_pkbuf_t *gmm_build_de_registration_accept(amf_ue_t *amf_ue);
|
ogs_pkbuf_t *gmm_build_de_registration_accept(amf_ue_t *amf_ue);
|
||||||
ogs_pkbuf_t *gmm_build_de_registration_request(amf_ue_t *amf_ue);
|
ogs_pkbuf_t *gmm_build_de_registration_request(amf_ue_t *amf_ue,
|
||||||
|
OpenAPI_deregistration_reason_e dereg_reason);
|
||||||
|
|
||||||
ogs_pkbuf_t *gmm_build_identity_request(amf_ue_t *amf_ue);
|
ogs_pkbuf_t *gmm_build_identity_request(amf_ue_t *amf_ue);
|
||||||
ogs_pkbuf_t *gmm_build_security_mode_command(amf_ue_t *amf_ue);
|
ogs_pkbuf_t *gmm_build_security_mode_command(amf_ue_t *amf_ue);
|
||||||
|
|
|
@ -454,7 +454,8 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
|
||||||
} else {
|
} else {
|
||||||
amf_ue->t3522.retry_count++;
|
amf_ue->t3522.retry_count++;
|
||||||
ogs_assert(OGS_OK ==
|
ogs_assert(OGS_OK ==
|
||||||
nas_5gs_send_de_registration_request(amf_ue));
|
nas_5gs_send_de_registration_request(amf_ue,
|
||||||
|
OpenAPI_deregistration_reason_NULL));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -571,7 +571,8 @@ int amf_namf_callback_handle_dereg_notify(
|
||||||
amf_ue->network_initiated_de_reg = true;
|
amf_ue->network_initiated_de_reg = true;
|
||||||
|
|
||||||
ogs_assert(OGS_OK ==
|
ogs_assert(OGS_OK ==
|
||||||
nas_5gs_send_de_registration_request(amf_ue));
|
nas_5gs_send_de_registration_request(amf_ue,
|
||||||
|
DeregistrationData->dereg_reason));
|
||||||
|
|
||||||
amf_sbi_send_release_all_sessions(
|
amf_sbi_send_release_all_sessions(
|
||||||
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
|
amf_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE);
|
||||||
|
|
|
@ -285,7 +285,8 @@ int nas_5gs_send_de_registration_accept(amf_ue_t *amf_ue)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue)
|
int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue,
|
||||||
|
OpenAPI_deregistration_reason_e dereg_reason)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
|
@ -302,7 +303,7 @@ int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue)
|
||||||
gmmbuf = amf_ue->t3522.pkbuf;
|
gmmbuf = amf_ue->t3522.pkbuf;
|
||||||
ogs_expect_or_return_val(gmmbuf, OGS_ERROR);
|
ogs_expect_or_return_val(gmmbuf, OGS_ERROR);
|
||||||
} else {
|
} else {
|
||||||
gmmbuf = gmm_build_de_registration_request(amf_ue);
|
gmmbuf = gmm_build_de_registration_request(amf_ue, dereg_reason);
|
||||||
ogs_expect_or_return_val(gmmbuf, OGS_ERROR);
|
ogs_expect_or_return_val(gmmbuf, OGS_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,8 @@ int nas_5gs_send_service_reject(
|
||||||
amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_cause);
|
amf_ue_t *amf_ue, ogs_nas_5gmm_cause_t gmm_cause);
|
||||||
|
|
||||||
int nas_5gs_send_de_registration_accept(amf_ue_t *amf_ue);
|
int nas_5gs_send_de_registration_accept(amf_ue_t *amf_ue);
|
||||||
int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue);
|
int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue,
|
||||||
|
OpenAPI_deregistration_reason_e dereg_reason);
|
||||||
|
|
||||||
int nas_5gs_send_identity_request(amf_ue_t *amf_ue);
|
int nas_5gs_send_identity_request(amf_ue_t *amf_ue);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue