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

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

View File

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

View File

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

View File

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

View File

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