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); initialNasMsg->length = mm_msg_encode(&plain, initialNasMsg->nas_data, size);
nas->registration_request_len = initialNasMsg->length; 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) 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++) { for (int i = 0; i < 4; i++) {
initialNasMsg->nas_data[2 + i] = mac[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++) { for (int i = 0; i < 4; i++) {
initialNasMsg->nas_data[2 + i] = mac[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) 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; break;
case FGS_DEREGISTRATION_ACCEPT_UE_ORIGINATING: case FGS_DEREGISTRATION_ACCEPT_UE_ORIGINATING:
LOG_I(NAS, "received deregistration accept\n"); LOG_I(NAS, "received deregistration accept\n");
/* Set NAS 5GMM state */
nas->fiveGMM_state = FGS_DEREGISTERED;
break; break;
case FGS_PDU_SESSION_ESTABLISHMENT_ACC: case FGS_PDU_SESSION_ESTABLISHMENT_ACC:
handle_pdu_session_accept(pdu_buffer, pdu_length); 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 */ /* 3GPP TS 24.501: 9.11.3.50 Service type */
#define SERVICE_TYPE_DATA 0x1 #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 */ /* Security Key for SA UE */
typedef struct { typedef struct {
uint8_t kausf[32]; uint8_t kausf[32];
@@ -66,6 +74,8 @@ typedef struct {
} ue_sa_security_key_t; } ue_sa_security_key_t;
typedef struct { 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; uicc_t *uicc;
ue_sa_security_key_t security; ue_sa_security_key_t security;
stream_security_container_t *security_container; stream_security_container_t *security_container;