Introduced 5GMM state machine

* according to 5.1.3.2.1 of 3GPP TS 24.501
This commit is contained in:
Guido Casati
2025-02-04 15:30:03 +01:00
parent 0053a3d0f4
commit 98d922e568
2 changed files with 18 additions and 0 deletions
+8
View File
@@ -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);
+10
View File
@@ -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;