From 98d922e56883a985dce4ac2fa8f77c20265de9d5 Mon Sep 17 00:00:00 2001 From: Guido Casati Date: Mon, 20 May 2024 17:18:37 +0200 Subject: [PATCH] Introduced 5GMM state machine * according to 5.1.3.2.1 of 3GPP TS 24.501 --- openair3/NAS/NR_UE/nr_nas_msg.c | 8 ++++++++ openair3/NAS/NR_UE/nr_nas_msg.h | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/openair3/NAS/NR_UE/nr_nas_msg.c b/openair3/NAS/NR_UE/nr_nas_msg.c index d7a1c42bf3..6166213fa9 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg.c +++ b/openair3/NAS/NR_UE/nr_nas_msg.c @@ -505,6 +505,8 @@ void generateRegistrationRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas) initialNasMsg->length = mm_msg_encode(&plain, initialNasMsg->nas_data, size); nas->registration_request_len = initialNasMsg->length; + /* set NAS 5GMM state */ + nas->fiveGMM_state = FGS_REGISTERED_INITIATED; } void generateServiceRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas) @@ -812,6 +814,8 @@ static void generateRegistrationComplete(nr_ue_nas_t *nas, for (int i = 0; i < 4; i++) { initialNasMsg->nas_data[2 + i] = mac[i]; } + /* Set NAS 5GMM state */ + nas->fiveGMM_state = FGS_REGISTERED; } /** @@ -1004,6 +1008,8 @@ static void generateDeregistrationRequest(nr_ue_nas_t *nas, as_nas_info_t *initi for (int i = 0; i < 4; i++) { initialNasMsg->nas_data[2 + i] = mac[i]; } + /* Set NAS 5GMM state */ + nas->fiveGMM_state = FGS_DEREGISTERED_INITIATED; } static void generatePduSessionEstablishRequest(nr_ue_nas_t *nas, as_nas_info_t *initialNasMsg, nas_pdu_session_req_t *pdu_req) @@ -1432,6 +1438,8 @@ void *nas_nrue(void *args_p) break; case FGS_DEREGISTRATION_ACCEPT_UE_ORIGINATING: LOG_I(NAS, "received deregistration accept\n"); + /* Set NAS 5GMM state */ + nas->fiveGMM_state = FGS_DEREGISTERED; break; case FGS_PDU_SESSION_ESTABLISHMENT_ACC: handle_pdu_session_accept(pdu_buffer, pdu_length); diff --git a/openair3/NAS/NR_UE/nr_nas_msg.h b/openair3/NAS/NR_UE/nr_nas_msg.h index b4a97a36d7..380da8cbbc 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg.h +++ b/openair3/NAS/NR_UE/nr_nas_msg.h @@ -51,6 +51,14 @@ /* 3GPP TS 24.501: 9.11.3.50 Service type */ #define SERVICE_TYPE_DATA 0x1 +typedef enum fgs_mm_state_e { + FGS_DEREGISTERED, + FGS_DEREGISTERED_INITIATED, + FGS_REGISTERED_INITIATED, + FGS_REGISTERED, + FGS_SERVICE_REQUEST_INITIATED, +} fgs_mm_state_t; + /* Security Key for SA UE */ typedef struct { uint8_t kausf[32]; @@ -66,6 +74,8 @@ typedef struct { } ue_sa_security_key_t; typedef struct { + /* 5GS Mobility Management States (5.1.3.2.1 of 3GPP TS 24.501) */ + fgs_mm_state_t fiveGMM_state; uicc_t *uicc; ue_sa_security_key_t security; stream_security_container_t *security_container;