Commit 532b854c authored by Guido Casati's avatar Guido Casati

Introduced 5GMM state machine

* according to 5.1.3.2.1 of 3GPP TS 24.501
parent 25d61353
...@@ -478,7 +478,8 @@ void generateRegistrationRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas) ...@@ -478,7 +478,8 @@ void generateRegistrationRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas)
initialNasMsg->length = mm_msg_encode(mm_msg, (uint8_t*)(initialNasMsg->data), size); initialNasMsg->length = mm_msg_encode(mm_msg, (uint8_t*)(initialNasMsg->data), size);
registration_request_len = initialNasMsg->length; registration_request_len = initialNasMsg->length;
/* set NAS 5GMM state */
nas->fiveGMM_state = FGS_REGISTERED_INITIATED;
} }
void generateIdentityResponse(as_nas_info_t *initialNasMsg, uint8_t identitytype, uicc_t* uicc) { void generateIdentityResponse(as_nas_info_t *initialNasMsg, uint8_t identitytype, uicc_t* uicc) {
...@@ -717,6 +718,8 @@ static void generateRegistrationComplete(nr_ue_nas_t *nas, as_nas_info_t *initia ...@@ -717,6 +718,8 @@ static void generateRegistrationComplete(nr_ue_nas_t *nas, as_nas_info_t *initia
for(int i = 0; i < 4; i++){ for(int i = 0; i < 4; i++){
initialNasMsg->data[2+i] = mac[i]; initialNasMsg->data[2+i] = mac[i];
} }
/* Set NAS 5GMM state */
nas->fiveGMM_state = FGS_REGISTERED;
} }
void decodeDownlinkNASTransport(as_nas_info_t *initialNasMsg, uint8_t * pdu_buffer){ void decodeDownlinkNASTransport(as_nas_info_t *initialNasMsg, uint8_t * pdu_buffer){
...@@ -776,6 +779,8 @@ static void generateDeregistrationRequest(nr_ue_nas_t *nas, as_nas_info_t *initi ...@@ -776,6 +779,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->data[2 + i] = mac[i]; initialNasMsg->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)
...@@ -1225,6 +1230,8 @@ void *nas_nrue(void *args_p) ...@@ -1225,6 +1230,8 @@ void *nas_nrue(void *args_p)
break; break;
case FGS_DEREGISTRATION_ACCEPT: case FGS_DEREGISTRATION_ACCEPT:
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: {
uint8_t offset = 0; uint8_t offset = 0;
......
...@@ -83,6 +83,14 @@ typedef struct { ...@@ -83,6 +83,14 @@ typedef struct {
int hplmn_sd; int hplmn_sd;
} nr_nas_msg_snssai_t; } nr_nas_msg_snssai_t;
typedef enum fgs_mm_state_e {
FGS_DEREGISTERED = 0,
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];
...@@ -97,6 +105,8 @@ typedef struct { ...@@ -97,6 +105,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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment