[AMF] Support REREGISTRATION_REQUIRED in dereg notify

This commit is contained in:
mitmitmitm 2022-10-24 12:53:28 +02:00 committed by Sukchan Lee
parent ead6f8e973
commit b9f6432e54
6 changed files with 19 additions and 9 deletions

View File

@ -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);
}

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);
}

View File

@ -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);