Commit 2c5309f0 authored by Guido Casati's avatar Guido Casati

Add function to fill fgmm_msg_header_t type headers

parent 63d7f26c
...@@ -77,6 +77,15 @@ typedef enum { ...@@ -77,6 +77,15 @@ typedef enum {
NAS_SECURITY_BAD_INPUT NAS_SECURITY_BAD_INPUT
} security_state_t; } security_state_t;
static fgmm_msg_header_t set_mm_header(fgs_nas_msg_t type, Security_header_t security)
{
fgmm_msg_header_t mm_header = {0};
mm_header.ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE;
mm_header.security_header_type = security;
mm_header.message_type = type;
return mm_header;
}
static void servingNetworkName(uint8_t *msg, char *imsiStr, int nmc_size) static void servingNetworkName(uint8_t *msg, char *imsiStr, int nmc_size)
{ {
// SNN-network-identifier in TS 24.501 // SNN-network-identifier in TS 24.501
...@@ -432,11 +441,8 @@ void generateRegistrationRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas) ...@@ -432,11 +441,8 @@ void generateRegistrationRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas)
fgmm_nas_message_plain_t plain = {0}; fgmm_nas_message_plain_t plain = {0};
// Plain 5GMM header // Plain 5GMM header
fgmm_msg_header_t *mm_header = &plain.header; plain.header = set_mm_header(FGS_REGISTRATION_REQUEST, PLAIN_5GS_MSG);
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; size += sizeof(plain.header);
mm_header->security_header_type = PLAIN_5GS_MSG;
mm_header->message_type = FGS_REGISTRATION_REQUEST;
size += 3;
// Plain 5GMM msg // Plain 5GMM msg
registration_request_msg *mm_msg = &plain.mm_msg.registration_request; registration_request_msg *mm_msg = &plain.mm_msg.registration_request;
...@@ -488,7 +494,7 @@ void generateServiceRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas) ...@@ -488,7 +494,7 @@ void generateServiceRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas)
fgmm_nas_message_plain_t plain = {0}; fgmm_nas_message_plain_t plain = {0};
fgs_service_request_msg_t *mm_msg; fgs_service_request_msg_t *mm_msg;
fgmm_nas_msg_security_protected_t sp = {0}; fgmm_nas_msg_security_protected_t sp = {0};
fgmm_msg_header_t *mm_header; fgmm_msg_header_t mm_header = set_mm_header(FGS_SERVICE_REQUEST, PLAIN_5GS_MSG);
if (security_protected) { if (security_protected) {
/* Set security protected 5GS NAS message header (see 9.1.1 of 3GPP TS 24.501) */ /* Set security protected 5GS NAS message header (see 9.1.1 of 3GPP TS 24.501) */
...@@ -498,17 +504,14 @@ void generateServiceRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas) ...@@ -498,17 +504,14 @@ void generateServiceRequest(as_nas_info_t *initialNasMsg, nr_ue_nas_t *nas)
size += sizeof(fgs_nas_message_security_header_t); size += sizeof(fgs_nas_message_security_header_t);
mm_msg = &sp.plain.mm_msg.service_request; mm_msg = &sp.plain.mm_msg.service_request;
// Plain 5GMM header // Plain 5GMM header
mm_header = &sp.plain.header; sp.plain.header = mm_header;
} else { } else {
// Set Mobility Management plain message header // Set Mobility Management plain message header
mm_msg = &plain.mm_msg.service_request; mm_msg = &plain.mm_msg.service_request;
// Plain 5GMM header // Plain 5GMM header
mm_header = &plain.header; plain.header = mm_header;
} }
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; size += sizeof(mm_header);
mm_header->security_header_type = PLAIN_5GS_MSG;
mm_header->message_type = FGS_SERVICE_REQUEST;
size += sizeof(*mm_header);
// Fill Service Request // Fill Service Request
// Service Type // Service Type
...@@ -567,11 +570,8 @@ void generateIdentityResponse(as_nas_info_t *initialNasMsg, uint8_t identitytype ...@@ -567,11 +570,8 @@ void generateIdentityResponse(as_nas_info_t *initialNasMsg, uint8_t identitytype
fgmm_nas_message_plain_t plain = {0}; fgmm_nas_message_plain_t plain = {0};
// Plain 5GMM header // Plain 5GMM header
fgmm_msg_header_t *mm_header = &plain.header; plain.header = set_mm_header(FGS_IDENTITY_RESPONSE, PLAIN_5GS_MSG);
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; size += sizeof(plain.header);
mm_header->security_header_type = PLAIN_5GS_MSG;
mm_header->message_type = FGS_IDENTITY_RESPONSE;
size += 3;
// set identity response // set identity response
fgmm_identity_response_msg *mm_msg = &plain.mm_msg.fgs_identity_response; fgmm_identity_response_msg *mm_msg = &plain.mm_msg.fgs_identity_response;
...@@ -597,11 +597,8 @@ static void generateAuthenticationResp(nr_ue_nas_t *nas, as_nas_info_t *initialN ...@@ -597,11 +597,8 @@ static void generateAuthenticationResp(nr_ue_nas_t *nas, as_nas_info_t *initialN
fgmm_nas_message_plain_t plain = {0}; fgmm_nas_message_plain_t plain = {0};
// Plain 5GMM header // Plain 5GMM header
fgmm_msg_header_t *mm_header = &plain.header; plain.header = set_mm_header(FGS_AUTHENTICATION_RESPONSE, PLAIN_5GS_MSG);
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; size += sizeof(plain.header);
mm_header->security_header_type = PLAIN_5GS_MSG;
mm_header->message_type = FGS_AUTHENTICATION_RESPONSE;
size += 3;
// set response parameter // set response parameter
fgs_authentication_response_msg *mm_msg = &plain.mm_msg.fgs_auth_response; fgs_authentication_response_msg *mm_msg = &plain.mm_msg.fgs_auth_response;
...@@ -640,11 +637,8 @@ static void generateSecurityModeComplete(nr_ue_nas_t *nas, as_nas_info_t *initia ...@@ -640,11 +637,8 @@ static void generateSecurityModeComplete(nr_ue_nas_t *nas, as_nas_info_t *initia
fgmm_nas_message_plain_t *plain = &nas_msg.plain; fgmm_nas_message_plain_t *plain = &nas_msg.plain;
// Plain 5GMM header // Plain 5GMM header
fgmm_msg_header_t *mm_header = &plain->header; plain->header = set_mm_header(FGS_SECURITY_MODE_COMPLETE, PLAIN_5GS_MSG);
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; size += sizeof(plain->header);
mm_header->security_header_type = PLAIN_5GS_MSG;
mm_header->message_type = FGS_SECURITY_MODE_COMPLETE;
size += 3;
// Plain 5GMM payload // Plain 5GMM payload
fgs_security_mode_complete_msg *mm_msg = &plain->mm_msg.fgs_security_mode_complete; fgs_security_mode_complete_msg *mm_msg = &plain->mm_msg.fgs_security_mode_complete;
...@@ -767,11 +761,8 @@ static void generateRegistrationComplete(nr_ue_nas_t *nas, ...@@ -767,11 +761,8 @@ static void generateRegistrationComplete(nr_ue_nas_t *nas,
sp.header.sequence_number = nas->security.nas_count_ul & 0xff; sp.header.sequence_number = nas->security.nas_count_ul & 0xff;
length = 7; length = 7;
// set plain 5GMM header // set plain 5GMM header
fgmm_msg_header_t *mm_header = &sp.plain.header; sp.plain.header = set_mm_header(FGS_REGISTRATION_COMPLETE, PLAIN_5GS_MSG);
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; length += sizeof(sp.plain.header);
mm_header->security_header_type = PLAIN_5GS_MSG;
mm_header->message_type = FGS_REGISTRATION_COMPLETE;
length += 3;
registration_complete_msg *mm_msg = &sp.plain.mm_msg.registration_complete; registration_complete_msg *mm_msg = &sp.plain.mm_msg.registration_complete;
if (sortransparentcontainer) { if (sortransparentcontainer) {
...@@ -789,7 +780,7 @@ static void generateRegistrationComplete(nr_ue_nas_t *nas, ...@@ -789,7 +780,7 @@ static void generateRegistrationComplete(nr_ue_nas_t *nas,
return; return;
} }
// encode 5GMM plain header // encode 5GMM plain header
encoded = _nas_mm_msg_encode_header(mm_header, initialNasMsg->nas_data + encoded, length - encoded); encoded = _nas_mm_msg_encode_header(&sp.plain.header, initialNasMsg->nas_data + encoded, length - encoded);
if (encoded < 0) { if (encoded < 0) {
LOG_E(NAS, "generateRegistrationComplete: failed to encode 5GMM plain header\n"); LOG_E(NAS, "generateRegistrationComplete: failed to encode 5GMM plain header\n");
return; return;
...@@ -851,11 +842,8 @@ static void generateDeregistrationRequest(nr_ue_nas_t *nas, as_nas_info_t *initi ...@@ -851,11 +842,8 @@ static void generateDeregistrationRequest(nr_ue_nas_t *nas, as_nas_info_t *initi
int size = sizeof(sp_msg.header); int size = sizeof(sp_msg.header);
// Plain 5GMM header // Plain 5GMM header
fgmm_msg_header_t *mm_header = &sp_msg.plain.header; sp_msg.plain.header = set_mm_header(FGS_DEREGISTRATION_REQUEST_UE_ORIGINATING, INTEGRITY_PROTECTED_AND_CIPHERED_WITH_NEW_SECU_CTX);
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; size += sizeof(sp_msg.plain.header);
mm_header->security_header_type = INTEGRITY_PROTECTED_AND_CIPHERED_WITH_NEW_SECU_CTX;
mm_header->message_type = FGS_DEREGISTRATION_REQUEST_UE_ORIGINATING;
size += 3;
// Plain 5GMM // Plain 5GMM
fgs_deregistration_request_ue_originating_msg *mm_msg = &sp_msg.plain.mm_msg.fgs_deregistration_request_ue_originating; fgs_deregistration_request_ue_originating_msg *mm_msg = &sp_msg.plain.mm_msg.fgs_deregistration_request_ue_originating;
...@@ -938,11 +926,8 @@ static void generatePduSessionEstablishRequest(nr_ue_nas_t *nas, as_nas_info_t * ...@@ -938,11 +926,8 @@ static void generatePduSessionEstablishRequest(nr_ue_nas_t *nas, as_nas_info_t *
fgmm_nas_message_plain_t *plain = &sp_msg.plain; fgmm_nas_message_plain_t *plain = &sp_msg.plain;
// Plain 5GMM header // Plain 5GMM header
fgmm_msg_header_t *mm_header = &plain->header; plain->header = set_mm_header(FGS_UPLINK_NAS_TRANSPORT, PLAIN_5GS_MSG);
mm_header->ex_protocol_discriminator = FGS_MOBILITY_MANAGEMENT_MESSAGE; size += sizeof(plain->header);
mm_header->security_header_type = PLAIN_5GS_MSG;
mm_header->message_type = FGS_UPLINK_NAS_TRANSPORT;
size += 3;
fgs_uplink_nas_transport_msg *mm_msg = &plain->mm_msg.uplink_nas_transport; fgs_uplink_nas_transport_msg *mm_msg = &plain->mm_msg.uplink_nas_transport;
mm_msg->payloadcontainertype.iei = 0; mm_msg->payloadcontainertype.iei = 0;
......
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