From b9f6432e54ab0afcbce77e1dbb7c3b9cd869a31e Mon Sep 17 00:00:00 2001 From: mitmitmitm Date: Mon, 24 Oct 2022 12:53:28 +0200 Subject: [PATCH] [AMF] Support REREGISTRATION_REQUIRED in dereg notify --- src/amf/gmm-build.c | 11 ++++++++--- src/amf/gmm-build.h | 3 ++- src/amf/gmm-sm.c | 3 ++- src/amf/namf-handler.c | 3 ++- src/amf/nas-path.c | 5 +++-- src/amf/nas-path.h | 3 ++- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/amf/gmm-build.c b/src/amf/gmm-build.c index f57fd96c9..987dc9082 100644 --- a/src/amf/gmm-build.c +++ b/src/amf/gmm-build.c @@ -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); } -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_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; 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->presencemask |= 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); } diff --git a/src/amf/gmm-build.h b/src/amf/gmm-build.h index d5185fcf6..cf5fd9159 100644 --- a/src/amf/gmm-build.h +++ b/src/amf/gmm-build.h @@ -34,7 +34,8 @@ ogs_pkbuf_t *gmm_build_service_reject( 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_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_security_mode_command(amf_ue_t *amf_ue); diff --git a/src/amf/gmm-sm.c b/src/amf/gmm-sm.c index b350e3877..9518face0 100644 --- a/src/amf/gmm-sm.c +++ b/src/amf/gmm-sm.c @@ -454,7 +454,8 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e) } else { amf_ue->t3522.retry_count++; 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; diff --git a/src/amf/namf-handler.c b/src/amf/namf-handler.c index 80eeeebaf..b9fecc9c6 100644 --- a/src/amf/namf-handler.c +++ b/src/amf/namf-handler.c @@ -571,7 +571,8 @@ int amf_namf_callback_handle_dereg_notify( amf_ue->network_initiated_de_reg = true; 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_ue, AMF_RELEASE_SM_CONTEXT_NO_STATE); diff --git a/src/amf/nas-path.c b/src/amf/nas-path.c index cee7e70be..f7b110b55 100644 --- a/src/amf/nas-path.c +++ b/src/amf/nas-path.c @@ -285,7 +285,8 @@ int nas_5gs_send_de_registration_accept(amf_ue_t *amf_ue) 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; @@ -302,7 +303,7 @@ int nas_5gs_send_de_registration_request(amf_ue_t *amf_ue) gmmbuf = amf_ue->t3522.pkbuf; ogs_expect_or_return_val(gmmbuf, OGS_ERROR); } 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); } diff --git a/src/amf/nas-path.h b/src/amf/nas-path.h index 40944a07c..f582a67c1 100644 --- a/src/amf/nas-path.h +++ b/src/amf/nas-path.h @@ -41,7 +41,8 @@ int nas_5gs_send_service_reject( 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_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);