[AMF] Distinguish Cleartext/Non-cleartext (#958)

1. If UE does not use a NAS container for Non-cleartext IEs,
   Open5GS AMF will send Registration reject message.
2. If UE sends Non-cleartext IEs without Integrity-protected,
   Open5GS AMF will send Registration reject message.
3. If UE does not send NAS container in Security mode complete message,
   Open5GS AMF will send Registration reject message.
This commit is contained in:
Sukchan Lee 2021-05-07 15:07:51 +09:00
parent 182a61dc0b
commit 1dc692753a
17 changed files with 235 additions and 92 deletions

View File

@ -31,7 +31,14 @@
static int gmm_handle_nas_message_container(amf_ue_t *amf_ue,
ogs_nas_message_container_t *nas_message_container);
#define OGS_REGISTRATION_CLEARTEXT_PRESENT \
(OGS_NAS_5GS_REGISTRATION_REQUEST_UE_SECURITY_CAPABILITY_PRESENT| \
OGS_NAS_5GS_REGISTRATION_REQUEST_UE_STATUS_PRESENT| \
OGS_NAS_5GS_REGISTRATION_REQUEST_EPS_NAS_MESSAGE_CONTAINER_PRESENT| \
OGS_NAS_5GS_REGISTRATION_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)
int gmm_handle_registration_request(amf_ue_t *amf_ue,
ogs_nas_security_header_type_t h,
ogs_nas_5gs_registration_request_t *registration_request)
{
int served_tai_index = 0;
@ -56,6 +63,65 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
ue_security_capability = &registration_request->ue_security_capability;
ogs_assert(ue_security_capability);
/*
* TS33.501
* Ch 6.4.6. Protection of initial NAS message
*
* If non-cleartext IEs is received, Open5GS will send Registration reject.
*
* Step 1: The UE shall send the initial NAS message to the AMF.
* If the UE has no NAS security context, the initial NAS message
* shall only contain the cleartext IEs, i.e. subscription identifiers
* (e.g. SUCI or GUTIs), UE security capabilities, ngKSI, indication
* that the UE is moving from EPC, Additional GUTI, and IE containing
* the TAU Request in the case idle mobility from LTE.
*
* If the UE has a NAS security context, the message sent shall contain
* the information given above in cleartext and the complete initial
* NAS message ciphered in a NAS container which is ciphered.
* With a NAS security context, the sent message shall also be
* integrity protected. In the case that the initial NAS message
* was protected and the AMF has the same security context,
* then steps 2 to 4 may be omitted In this case the AMF shall
* use the complete initial NAS message that is in the NAS container
* as the message to respond to.
*
* TS24.501
* Ch 4.4.6 Protection of initial NAS signalling messages
*
* When the initial NAS message is a REGISTRATION REQUEST message,
* the cleartext IEs are:
*
* - Extended protocol discriminator;
* - Security header type;
* - Spare half octet;
* - Registration request message identity;
* - 5GS registration type;
* - ngKSI;
* - 5GS mobile identity;
* - UE security capability;
* - Additional GUTI;
* - UE status; and
* - EPS NAS message container.
*/
if (registration_request->presencemask &
~OGS_REGISTRATION_CLEARTEXT_PRESENT) {
ogs_error("Non cleartext IEs is included [0x%llx]",
(long long)registration_request->presencemask);
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE);
return OGS_ERROR;
}
if (!h.integrity_protected &&
(registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_NAS_MESSAGE_CONTAINER_PRESENT)) {
ogs_error("NAS container present without Integrity-protected");
nas_5gs_send_registration_reject(amf_ue,
OGS_5GMM_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE);
return OGS_ERROR;
}
if (!mobile_identity->length || !mobile_identity->buffer) {
ogs_error("No Mobile Identity");
nas_5gs_send_registration_reject(amf_ue,
@ -150,22 +216,6 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
}
ogs_debug(" SERVED_TAI_INDEX[%d]", served_tai_index);
if (registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_5GMM_CAPABILITY_PRESENT) {
ogs_nas_5gmm_capability_t *gmm_capability =
&registration_request->gmm_capability;
amf_ue->gmm_capability.lte_positioning_protocol_capability
= gmm_capability->lte_positioning_protocol_capability;
amf_ue->gmm_capability.ho_attach = gmm_capability->ho_attach;
amf_ue->gmm_capability.s1_mode = gmm_capability->s1_mode;
ogs_debug(" 5GMM Capability:[LPP:%d, HO_ATTACH:%d, S1_MODE:%d]",
amf_ue->gmm_capability.lte_positioning_protocol_capability,
amf_ue->gmm_capability.ho_attach,
amf_ue->gmm_capability.s1_mode);
}
if (registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_UE_SECURITY_CAPABILITY_PRESENT) {
memcpy(&amf_ue->ue_security_capability,
@ -174,14 +224,6 @@ int gmm_handle_registration_request(amf_ue_t *amf_ue,
sizeof(registration_request->ue_security_capability.length));
}
if (registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_S1_UE_NETWORK_CAPABILITY_PRESENT) {
memcpy(&amf_ue->ue_network_capability,
&registration_request->s1_ue_network_capability,
registration_request->s1_ue_network_capability.length +
sizeof(registration_request->s1_ue_network_capability.length));
}
if (amf_selected_int_algorithm(amf_ue) ==
OGS_NAS_SECURITY_ALGORITHMS_NIA0) {
ogs_error("[UE:0x%x:0x%x], NEA0 can be used in Encrypt[0x%x], "
@ -226,6 +268,30 @@ int gmm_handle_registration_update(amf_ue_t *amf_ue,
amf_ue, &registration_request->nas_message_container);
}
if (registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_5GMM_CAPABILITY_PRESENT) {
ogs_nas_5gmm_capability_t *gmm_capability =
&registration_request->gmm_capability;
amf_ue->gmm_capability.lte_positioning_protocol_capability
= gmm_capability->lte_positioning_protocol_capability;
amf_ue->gmm_capability.ho_attach = gmm_capability->ho_attach;
amf_ue->gmm_capability.s1_mode = gmm_capability->s1_mode;
ogs_debug(" 5GMM Capability:[LPP:%d, HO_ATTACH:%d, S1_MODE:%d]",
amf_ue->gmm_capability.lte_positioning_protocol_capability,
amf_ue->gmm_capability.ho_attach,
amf_ue->gmm_capability.s1_mode);
}
if (registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_S1_UE_NETWORK_CAPABILITY_PRESENT) {
memcpy(&amf_ue->ue_network_capability,
&registration_request->s1_ue_network_capability,
registration_request->s1_ue_network_capability.length +
sizeof(registration_request->s1_ue_network_capability.length));
}
if (registration_request->presencemask &
OGS_NAS_5GS_REGISTRATION_REQUEST_REQUESTED_NSSAI_PRESENT) {
@ -616,6 +682,29 @@ int gmm_handle_security_mode_complete(amf_ue_t *amf_ue,
ogs_assert(amf_ue);
ogs_assert(security_mode_complete);
/*
* TS33.501
* Ch 6.4.6. Protection of initial NAS message
*
* UE should send NAS Container in Security mode complete message.
* Otherwise, Open5GS will send Registration reject message.
*
* Step 4: The UE shall send the NAS Security Mode Complete message
* to the network in response to a NAS Security Mode Command message.
* The NAS Security Mode Complete message shall be ciphered and
* integrity protected. Furthermore the NAS Security Mode Complete message
* shall include the complete initial NAS message in a NAS Container
* if either requested by the AMF or the UE sent the initial NAS message
* unprotected. The AMF shall use the complete initial NAS message
* that is in the NAS container as the message to respond to.
*/
if ((security_mode_complete->presencemask &
OGS_NAS_5GS_SECURITY_MODE_COMPLETE_NAS_MESSAGE_CONTAINER_PRESENT)
== 0) {
ogs_error("No NAS Message Container in Security mode complete message");
return OGS_ERROR;
}
if (security_mode_complete->presencemask &
OGS_NAS_5GS_SECURITY_MODE_COMPLETE_IMEISV_PRESENT) {

View File

@ -27,6 +27,7 @@ extern "C" {
#endif
int gmm_handle_registration_request(amf_ue_t *amf_ue,
ogs_nas_security_header_type_t h,
ogs_nas_5gs_registration_request_t *registration_request);
int gmm_handle_registration_update(amf_ue_t *amf_ue,
ogs_nas_5gs_registration_request_t *registration_request);

View File

@ -130,7 +130,7 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_info("Registration request");
rv = gmm_handle_registration_request(
amf_ue, &nas_message->gmm.registration_request);
amf_ue, h, &nas_message->gmm.registration_request);
if (rv != OGS_OK) {
ogs_error("gmm_handle_registration_request() failed");
OGS_FSM_TRAN(s, gmm_state_exception);
@ -410,6 +410,7 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
amf_sess_t *sess = NULL;
ogs_nas_5gs_message_t *nas_message = NULL;
ogs_nas_security_header_type_t h;
ogs_nas_5gs_authentication_failure_t *authentication_failure = NULL;
ogs_nas_authentication_failure_parameter_t
@ -441,6 +442,9 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
nas_message = e->nas.message;
ogs_assert(nas_message);
h.type = e->nas.type;
amf_ue->nas.ngapProcedureCode = e->ngap.code;
switch (nas_message->gmm.h.message_type) {
case OGS_NAS_5GS_AUTHENTICATION_RESPONSE:
rv = gmm_handle_authentication_response(
@ -507,7 +511,7 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_warn("Registration request");
rv = gmm_handle_registration_request(
amf_ue, &nas_message->gmm.registration_request);
amf_ue, h, &nas_message->gmm.registration_request);
if (rv != OGS_OK) {
ogs_error("[%s] Cannot handle NAS message", amf_ue->suci);
OGS_FSM_TRAN(s, gmm_state_exception);
@ -659,6 +663,9 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
nas_message = e->nas.message;
ogs_assert(nas_message);
h.type = e->nas.type;
amf_ue->nas.ngapProcedureCode = e->ngap.code;
switch (nas_message->gmm.h.message_type) {
case OGS_NAS_5GS_SECURITY_MODE_COMPLETE:
ogs_debug("[%s] Security mode complete", amf_ue->supi);
@ -666,7 +673,6 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
CLEAR_AMF_UE_TIMER(amf_ue->t3560);
/* Now, We will check the MAC in the NAS message*/
h.type = e->nas.type;
if (h.integrity_protected == 0) {
ogs_error("[%s] Security-mode : No Integrity Protected",
amf_ue->supi);
@ -724,7 +730,7 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_warn("Registration request");
rv = gmm_handle_registration_request(
amf_ue, &nas_message->gmm.registration_request);
amf_ue, h, &nas_message->gmm.registration_request);
if (rv != OGS_OK) {
ogs_error("[%s] Cannot handle NAS message", amf_ue->suci);
OGS_FSM_TRAN(s, gmm_state_exception);
@ -795,6 +801,7 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
amf_ue_t *amf_ue = NULL;
amf_sess_t *sess = NULL;
ogs_nas_5gs_message_t *nas_message = NULL;
ogs_nas_security_header_type_t h;
ogs_sbi_response_t *sbi_response = NULL;
ogs_sbi_message_t *sbi_message = NULL;
@ -934,6 +941,9 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
nas_message = e->nas.message;
ogs_assert(nas_message);
h.type = e->nas.type;
amf_ue->nas.ngapProcedureCode = e->ngap.code;
switch (nas_message->gmm.h.message_type) {
case OGS_NAS_5GS_REGISTRATION_COMPLETE:
ogs_info("[%s] Registration complete", amf_ue->supi);
@ -981,7 +991,7 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_warn("Registration request");
rv = gmm_handle_registration_request(
amf_ue, &nas_message->gmm.registration_request);
amf_ue, h, &nas_message->gmm.registration_request);
if (rv != OGS_OK) {
ogs_error("[%s] Cannot handle NAS message", amf_ue->suci);
OGS_FSM_TRAN(s, gmm_state_exception);
@ -1103,7 +1113,7 @@ void gmm_state_exception(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_REGISTRATION_REQUEST:
ogs_info("Registration request");
rv = gmm_handle_registration_request(
amf_ue, &nas_message->gmm.registration_request);
amf_ue, h, &nas_message->gmm.registration_request);
if (rv != OGS_OK) {
ogs_error("gmm_handle_registration_request() failed");
OGS_FSM_TRAN(s, gmm_state_exception);

View File

@ -123,10 +123,11 @@ typedef struct test_registration_request_param_s {
uint8_t update_type:1;)
};
struct {
ED4(uint8_t uplink_data_status:1;,
ED5(uint8_t uplink_data_status:1;,
uint8_t pdu_session_status:1;,
uint8_t allowed_pdu_session_status:1;,
uint8_t spare2:5;)
uint8_t s1_ue_network_capability:1;,
uint8_t spare2:4;)
};
struct {
uint16_t pdu_session_status;

View File

@ -144,17 +144,19 @@ ogs_pkbuf_t *testgmm_build_registration_request(
test_ue->ue_security_capability.eutra_ia;
}
registration_request->presencemask |=
if (test_ue->registration_request_param.s1_ue_network_capability) {
registration_request->presencemask |=
OGS_NAS_5GS_REGISTRATION_REQUEST_S1_UE_NETWORK_CAPABILITY_PRESENT;
s1_ue_network_capability->length = 7;
s1_ue_network_capability->eea = test_ue->ue_network_capability.eea;
s1_ue_network_capability->eia = test_ue->ue_network_capability.eia;
s1_ue_network_capability->uea = 0xc0;
s1_ue_network_capability->uia = 0xc0;
s1_ue_network_capability->notification_procedure = 1;
s1_ue_network_capability->extended_protocol_configuration_options = 1;
s1_ue_network_capability->n1_mode = 1;
s1_ue_network_capability->dual_connectivity_with_nr = 1;
s1_ue_network_capability->length = 7;
s1_ue_network_capability->eea = test_ue->ue_network_capability.eea;
s1_ue_network_capability->eia = test_ue->ue_network_capability.eia;
s1_ue_network_capability->uea = 0xc0;
s1_ue_network_capability->uia = 0xc0;
s1_ue_network_capability->notification_procedure = 1;
s1_ue_network_capability->extended_protocol_configuration_options = 1;
s1_ue_network_capability->n1_mode = 1;
s1_ue_network_capability->dual_connectivity_with_nr = 1;
}
if (test_ue->registration_request_param.requested_nssai) {
/* Set Requested NSSAI */

View File

@ -118,6 +118,7 @@ static void failure_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -518,6 +519,7 @@ static void direct_complete_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1134,6 +1136,7 @@ static void direct_cancel_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1550,6 +1553,7 @@ static void indirect_complete_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -2202,6 +2206,7 @@ static void indirect_cancel_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -118,6 +118,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -92,7 +92,6 @@ static void test1_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Send Registration request */
test_ue->registration_request_param.gmm_capability = 1;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, false, true);
@ -142,7 +141,6 @@ static void test1_func(abts_case *tc, void *data)
test_ue->ngap_procedure_code);
/* Send Registration request */
test_ue->registration_request_param.gmm_capability = 1;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, false, true);

View File

@ -97,6 +97,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -340,6 +341,7 @@ static void test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -544,11 +546,11 @@ static void test3_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Send Registration request */
test_ue->registration_request_param.gmm_capability = 0;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -762,13 +764,10 @@ static void test3_func(abts_case *tc, void *data)
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.guti = 1;
test_ue->registration_request_param.gmm_capability = 0;
test_ue->registration_request_param.requested_nssai = 0;
test_ue->registration_request_param.last_visited_registered_tai = 0;
test_ue->registration_request_param.ue_usage_setting = 0;
test_ue->registration_request_param.update_type = 0;
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -997,12 +996,15 @@ static void test4_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
for (i = 0; i < 10; i++) {
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
/* Send Registration request */
test_ue->registration_request_param.gmm_capability = 0;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -97,6 +97,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -98,6 +98,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -273,8 +274,10 @@ static void test1_func(abts_case *tc, void *data)
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.uplink_data_status = 0;
test_ue->registration_request_param.guti = 1;
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -574,6 +577,7 @@ static void test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -749,8 +753,10 @@ static void test2_func(abts_case *tc, void *data)
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.uplink_data_status = 0;
test_ue->registration_request_param.guti = 1;
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf);

View File

@ -97,6 +97,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -211,10 +212,17 @@ static void test1_func(abts_case *tc, void *data)
OGS_NAS_5GS_REGISTRATION_TYPE_MOBILITY_UPDATING;
/* Send Registration request */
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.integrity_protected = 0;
test_ue->registration_request_param.guti = 1;
test_ue->registration_request_param.uplink_data_status = 1;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.guti = 1;
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true);

View File

@ -97,6 +97,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -492,6 +493,7 @@ static void test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -738,6 +740,7 @@ static void test3_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1097,6 +1100,7 @@ static void test4_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1550,6 +1554,7 @@ static void test5_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1908,10 +1913,11 @@ static void test6_func(abts_case *tc, void *data)
/* Send Registration request */
test_ue->registration_request_param.guti = 1;
test_ue->registration_request_param.gmm_capability = 1;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -97,6 +97,7 @@ static void cm_idle_paging_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -661,6 +662,7 @@ static void cm_idle_error_indication_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1004,6 +1006,7 @@ static void cm_connected_error_indication_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1285,6 +1288,7 @@ static void vonr_qos_flow_test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -1683,6 +1687,7 @@ static void vonr_session_test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -2169,6 +2174,7 @@ static void registration_ue_context_test4_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -2561,6 +2567,7 @@ static void registration_idle_test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -143,6 +143,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -407,6 +408,7 @@ static void test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -97,6 +97,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -255,6 +256,7 @@ static void test2_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -302,10 +304,13 @@ static void test2_func(abts_case *tc, void *data)
test_ue->ngap_procedure_code);
/* Send Registration request */
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -549,6 +554,7 @@ static void test3_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;
@ -689,8 +695,10 @@ static void test3_func(abts_case *tc, void *data)
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.uplink_data_status = 0;
test_ue->registration_request_param.guti = 1;
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -839,8 +847,10 @@ static void test3_func(abts_case *tc, void *data)
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.uplink_data_status = 0;
test_ue->registration_request_param.guti = 1;
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -989,6 +999,7 @@ static void test4_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gmmbuf);
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.s1_ue_network_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->registration_request_param.last_visited_registered_tai = 1;
test_ue->registration_request_param.ue_usage_setting = 1;

View File

@ -92,9 +92,6 @@ static void test1_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Send Registration request */
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.requested_nssai = 0;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, false, true);
@ -261,13 +258,10 @@ static void test1_func(abts_case *tc, void *data)
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
memset(&test_ue->registration_request_param, 0,
sizeof(test_ue->registration_request_param));
test_ue->registration_request_param.integrity_protected = 1;
test_ue->registration_request_param.guti = 1;
test_ue->registration_request_param.gmm_capability = 0;
test_ue->registration_request_param.requested_nssai = 0;
test_ue->registration_request_param.last_visited_registered_tai = 0;
test_ue->registration_request_param.ue_usage_setting = 0;
test_ue->registration_request_param.update_type = 0;
gmmbuf = testgmm_build_registration_request(test_ue, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -402,32 +396,6 @@ static void test2_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Send Registration request */
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->requested_nssai.s_nssai[1].sd.v = 0x000070;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sst = 2;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sd.v = OGS_S_NSSAI_NO_SD_VALUE;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sst = 0;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sd.v = OGS_S_NSSAI_NO_SD_VALUE;
test_ue->requested_nssai.num_of_s_nssai++;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sst = 3;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sd.v = 0x000080;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sst = 0;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sd.v = OGS_S_NSSAI_NO_SD_VALUE;
test_ue->requested_nssai.num_of_s_nssai++;
gmmbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, false, true);
@ -454,6 +422,31 @@ static void test2_func(abts_case *tc, void *data)
testngap_recv(test_ue, recvbuf);
/* Send Security mode complete */
test_ue->registration_request_param.gmm_capability = 1;
test_ue->registration_request_param.requested_nssai = 1;
test_ue->requested_nssai.s_nssai[1].sd.v = 0x000070;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sst = 2;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sd.v = OGS_S_NSSAI_NO_SD_VALUE;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sst = 0;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sd.v = OGS_S_NSSAI_NO_SD_VALUE;
test_ue->requested_nssai.num_of_s_nssai++;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sst = 3;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
sd.v = 0x000080;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sst = 0;
test_ue->requested_nssai.s_nssai[test_ue->requested_nssai.num_of_s_nssai].
mapped_hplmn_sd.v = OGS_S_NSSAI_NO_SD_VALUE;
test_ue->requested_nssai.num_of_s_nssai++;
nasbuf = testgmm_build_registration_request(test_ue, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf);
gmmbuf = testgmm_build_security_mode_complete(test_ue, nasbuf);