From 5fb0611cb21fdafa505d142d4bc9ceb3a8b20917 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sun, 10 Jan 2021 23:36:12 -0500 Subject: [PATCH] fix: Derive ESM cause from GTP-Cause (#755) --- lib/nas/common/types.h | 23 ++++++-- src/mme/esm-build.c | 54 ++++++------------- src/mme/esm-build.h | 4 +- src/mme/esm-handler.c | 10 +++- src/mme/esm-sm.c | 2 +- src/mme/mme-context.c | 13 +++-- src/mme/mme-s11-build.c | 23 ++++++-- src/mme/mme-s11-handler.c | 39 ++++++++++++-- src/mme/nas-path.c | 22 ++++---- src/mme/nas-path.h | 4 +- src/sgwc/s11-handler.c | 8 ++- src/smf/s5c-handler.c | 11 ++-- tests/common/context.h | 1 - tests/common/gmm-build.c | 4 +- tests/common/gmm-build.h | 2 +- tests/registration/idle-test.c | 81 ++++++++++++++++------------ tests/registration/ue-context-test.c | 18 ++++--- tests/vonr/qos-flow-test.c | 9 ++-- tests/vonr/session-test.c | 6 ++- 19 files changed, 200 insertions(+), 134 deletions(-) diff --git a/lib/nas/common/types.h b/lib/nas/common/types.h index 6cfa612d3..64eb0f036 100644 --- a/lib/nas/common/types.h +++ b/lib/nas/common/types.h @@ -346,12 +346,27 @@ ED2(uint8_t type_of_ciphering_algorithm:4;, uint8_t type_of_integrity_protection_algorithm:4;) } __attribute__ ((packed)) ogs_nas_security_algorithms_t; -/* 9.9.3.27 Service type - * M V 1/2 - * 9.9.3.21 NAS key set identifier +/* 9.9.3.21 NAS key set identifier * M V 1/2 + * + * 9.9.3.27 Service type + * M V 1/2 + * In lib/nas/eps/types.h + * #define OGS_NAS_SERVICE_TYPE_CS_FALLBACK_FROM_UE 0 + * #define OGS_NAS_SERVICE_TYPE_CS_FALLBACK_TO_UE 1 + * #define OGS_NAS_SERVICE_TYPE_CS_FALLBACK_EMERGENCY_CALL_FROM_UE 2 + * * 9.11.3.50 Service type - * M V 1/2 */ + * M V 1/2 + * In lib/nas/5gs/types.h + * #define OGS_NAS_SERVICE_TYPE_SIGNALLING 0 + * #define OGS_NAS_SERVICE_TYPE_DATA 1 + * #define OGS_NAS_SERVICE_TYPE_MOBILE_TERMINATED_SERVICES 2 + * #define OGS_NAS_SERVICE_TYPE_EMERGENCY_SERVICES 3 + * #define OGS_NAS_SERVICE_TYPE_EMERGENCY_SERVICES_FALLBACK 4 + * #define OGS_NAS_SERVICE_TYPE_HIGH_PRIORITY_ACCESS 5 + * #define OGS_NAS_SERVICE_TYPE_ELEVATED_SIGNALLING 6 +*/ typedef struct ogs_nas_service_type_s { ED3(uint8_t tsc:1;, uint8_t nas_key_set_identifier:3;, diff --git a/src/mme/esm-build.c b/src/mme/esm-build.c index 97ef477a7..fd47203aa 100644 --- a/src/mme/esm-build.c +++ b/src/mme/esm-build.c @@ -389,84 +389,62 @@ ogs_pkbuf_t *esm_build_deactivate_bearer_context_request( } ogs_pkbuf_t *esm_build_bearer_resource_allocation_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause) + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause) { - mme_ue_t *mme_ue = NULL; - mme_sess_t *sess = NULL; - ogs_nas_eps_message_t message; ogs_nas_eps_bearer_resource_allocation_reject_t *bearer_resource_allocation_reject = &message.esm.bearer_resource_allocation_reject; - ogs_assert(bearer); - sess = bearer->sess; - ogs_assert(sess); - mme_ue = sess->mme_ue; ogs_assert(mme_ue); + ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED); ogs_debug("Bearer resource allocation reject"); ogs_debug(" IMSI[%s] PTI[%d] Cause[%d]", - mme_ue->imsi_bcd, sess->pti, esm_cause); + mme_ue->imsi_bcd, pti, esm_cause); memset(&message, 0, sizeof(message)); - if (!SESSION_CONTEXT_IN_ATTACH(sess)) { - message.h.security_header_type = - OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; - message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; - } + message.h.security_header_type = + OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; + message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; message.esm.h.eps_bearer_identity = 0; message.esm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_ESM; - message.esm.h.procedure_transaction_identity = sess->pti; + message.esm.h.procedure_transaction_identity = pti; message.esm.h.message_type = OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT; bearer_resource_allocation_reject->esm_cause = esm_cause; - if (SESSION_CONTEXT_IN_ATTACH(sess)) - return ogs_nas_eps_plain_encode(&message); - else - return nas_eps_security_encode(mme_ue, &message); + return nas_eps_security_encode(mme_ue, &message); } ogs_pkbuf_t *esm_build_bearer_resource_modification_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause) + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause) { - mme_ue_t *mme_ue = NULL; - mme_sess_t *sess = NULL; - ogs_nas_eps_message_t message; ogs_nas_eps_bearer_resource_modification_reject_t *bearer_resource_modification_reject = &message.esm.bearer_resource_modification_reject; - ogs_assert(bearer); - sess = bearer->sess; - ogs_assert(sess); - mme_ue = sess->mme_ue; ogs_assert(mme_ue); + ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED); ogs_debug("Bearer resource modification reject"); ogs_debug(" IMSI[%s] PTI[%d] Cause[%d]", - mme_ue->imsi_bcd, sess->pti, esm_cause); + mme_ue->imsi_bcd, pti, esm_cause); memset(&message, 0, sizeof(message)); - if (!SESSION_CONTEXT_IN_ATTACH(sess)) { - message.h.security_header_type = - OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; - message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; - } + message.h.security_header_type = + OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; + message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM; message.esm.h.eps_bearer_identity = 0; message.esm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_ESM; - message.esm.h.procedure_transaction_identity = sess->pti; + message.esm.h.procedure_transaction_identity = pti; message.esm.h.message_type = OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT; bearer_resource_modification_reject->esm_cause = esm_cause; - if (SESSION_CONTEXT_IN_ATTACH(sess)) - return ogs_nas_eps_plain_encode(&message); - else - return nas_eps_security_encode(mme_ue, &message); + return nas_eps_security_encode(mme_ue, &message); } diff --git a/src/mme/esm-build.h b/src/mme/esm-build.h index f179d7264..ddd59ec23 100644 --- a/src/mme/esm-build.h +++ b/src/mme/esm-build.h @@ -38,9 +38,9 @@ ogs_pkbuf_t *esm_build_modify_bearer_context_request( ogs_pkbuf_t *esm_build_deactivate_bearer_context_request( mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause); ogs_pkbuf_t *esm_build_bearer_resource_allocation_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause); + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause); ogs_pkbuf_t *esm_build_bearer_resource_modification_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause); + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause); #ifdef __cplusplus } diff --git a/src/mme/esm-handler.c b/src/mme/esm-handler.c index 93092b482..e6914666b 100644 --- a/src/mme/esm-handler.c +++ b/src/mme/esm-handler.c @@ -176,9 +176,17 @@ int esm_handle_information_response(mme_sess_t *sess, int esm_handle_bearer_resource_allocation_request( mme_bearer_t *bearer, ogs_nas_eps_message_t *message) { + mme_ue_t *mme_ue = NULL; + mme_sess_t *sess = NULL; + ogs_assert(bearer); + sess = bearer->sess; + ogs_assert(sess); + mme_ue = sess->mme_ue; + ogs_assert(mme_ue); + nas_eps_send_bearer_resource_allocation_reject( - bearer, ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED); + mme_ue, sess->pti, ESM_CAUSE_NETWORK_FAILURE); return OGS_OK; } diff --git a/src/mme/esm-sm.c b/src/mme/esm-sm.c index 8138f4261..d5344ae37 100644 --- a/src/mme/esm-sm.c +++ b/src/mme/esm-sm.c @@ -44,7 +44,7 @@ static uint8_t gtp_cause_from_esm(uint8_t esm_cause) case ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS: return OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER; default: - return OGS_GTP_CAUSE_SYSTEM_FAILURE; + break; } return OGS_GTP_CAUSE_SYSTEM_FAILURE; diff --git a/src/mme/mme-context.c b/src/mme/mme-context.c index 1a44a6c80..853c155a1 100644 --- a/src/mme/mme-context.c +++ b/src/mme/mme-context.c @@ -2963,11 +2963,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( if (!bearer) { ogs_error("No Bearer : Linked-EBI[%d]", linked_eps_bearer_identity->eps_bearer_identity); - nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + nas_eps_send_bearer_resource_allocation_reject( + mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); return NULL; } + } else if (message->esm.h.message_type == OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST) { ogs_nas_eps_bearer_resource_modification_request_t @@ -2979,11 +2979,10 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( bearer = mme_bearer_find_by_ue_ebi(mme_ue, linked_eps_bearer_identity->eps_bearer_identity); if (!bearer) { - ogs_error("No Bearer : Linked-EBI[%d]", + ogs_error("No Bearer : Linked-EBI[%d]", linked_eps_bearer_identity->eps_bearer_identity); - nas_eps_send_attach_reject(mme_ue, - EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, - ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED); + nas_eps_send_bearer_resource_modification_reject( + mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY); return NULL; } } diff --git a/src/mme/mme-s11-build.c b/src/mme/mme-s11-build.c index 0f62eb566..b642f6a98 100644 --- a/src/mme/mme-s11-build.c +++ b/src/mme/mme-s11-build.c @@ -770,6 +770,10 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command( mme_ue = sess->mme_ue; ogs_assert(mme_ue); + ogs_debug("Bearer Resource Command"); + ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]", + mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid); + ogs_assert(nas_message); switch (nas_message->esm.h.message_type) { case OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST: @@ -793,15 +797,11 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command( linked_bearer = mme_linked_bearer(bearer); ogs_assert(linked_bearer); - ogs_debug("Bearer Resource Command"); - ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]", - mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid); - memset(>p_message, 0, sizeof(ogs_gtp_message_t)); /* Linked Bearer Context : EBI */ cmd->linked_eps_bearer_id.presence = 1; - cmd->linked_eps_bearer_id.u8 = bearer->ebi; + cmd->linked_eps_bearer_id.u8 = linked_bearer->ebi; /* Procedure Transaction ID(PTI) */ cmd->procedure_transaction_id.presence = 1; @@ -844,6 +844,19 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command( cmd->traffic_aggregate_description.data = tad->buffer; cmd->traffic_aggregate_description.len = tad->length; + switch (nas_message->esm.h.message_type) { + case OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST: + break; + case OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST: + /* Bearer Context : EBI */ + cmd->eps_bearer_id.presence = 1; + cmd->eps_bearer_id.u8 = bearer->ebi; + break; + default: + ogs_error("Invalid NAS ESM Type[%d]", nas_message->esm.h.message_type); + return NULL; + } + gtp_message.h.type = type; return ogs_gtp_build_msg(>p_message); } diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index ad0cddd0c..49f00dcbf 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -31,6 +31,33 @@ #include "mme-s11-build.h" #include "mme-s11-handler.h" +static uint8_t esm_cause_from_gtp(uint8_t gtp_cause) +{ + switch (gtp_cause) { + case OGS_GTP_CAUSE_CONTEXT_NOT_FOUND: + return ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY; + case OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED: + return ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED; + case OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION: + return ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION; + case OGS_GTP_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION: + return ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION; + case OGS_GTP_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER: + return ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS; + case OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER: + return ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS; + default: + break; + } + + /* + * OGS_GTP_CAUSE_SYSTEM_FAILURE + * OGS_GTP_CAUSE_MANDATORY_IE_MISSING + * ... + */ + return ESM_CAUSE_NETWORK_FAILURE; +} + void mme_s11_handle_echo_request( ogs_gtp_xact_t *xact, ogs_gtp_echo_request_t *req) { @@ -560,6 +587,7 @@ void mme_s11_handle_update_bearer_request( mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid); /* Set PTI */ + ogs_assert(mme_ue); ogs_assert(bearer); sess = bearer->sess; ogs_assert(sess); @@ -620,7 +648,7 @@ void mme_s11_handle_update_bearer_request( if (xact->xid & OGS_GTP_CMD_XACT_ID) { /* MME received Bearer Resource Modification Request */ nas_eps_send_bearer_resource_modification_reject( - bearer, ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED); + mme_ue, sess->pti, ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED); } mme_gtp_send_update_bearer_response( @@ -1013,10 +1041,13 @@ void mme_s11_handle_bearer_resource_failure_indication( uint8_t cause_value = 0; mme_bearer_t *bearer = NULL; + mme_sess_t *sess = NULL; ogs_assert(xact); bearer = xact->data; ogs_assert(ind); + sess = bearer->sess; + ogs_assert(sess); ogs_debug("Bearer Resource Failure Indication"); @@ -1028,15 +1059,15 @@ void mme_s11_handle_bearer_resource_failure_indication( ogs_assert(cause); cause_value = cause->value; - if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) - ogs_warn("GTP Failed [CAUSE:%d] - Ignored", cause_value); + ogs_warn("GTP Failed [CAUSE:%d] - Ignored", cause_value); } else { ogs_error("No Cause"); } + ogs_assert(mme_ue); ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]", mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid); nas_eps_send_bearer_resource_modification_reject( - bearer, ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED); + mme_ue, sess->pti, esm_cause_from_gtp(cause_value)); } diff --git a/src/mme/nas-path.c b/src/mme/nas-path.c index 72e95569b..12572c996 100644 --- a/src/mme/nas-path.c +++ b/src/mme/nas-path.c @@ -430,17 +430,16 @@ void nas_eps_send_deactivate_bearer_context_request(mme_bearer_t *bearer) } void nas_eps_send_bearer_resource_allocation_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause) + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause) { int rv; - mme_ue_t *mme_ue; ogs_pkbuf_t *esmbuf = NULL; - ogs_assert(bearer); - mme_ue = bearer->mme_ue; - ogs_assert(bearer); + ogs_assert(mme_ue); + ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED); - esmbuf = esm_build_bearer_resource_allocation_reject(bearer, esm_cause); + esmbuf = esm_build_bearer_resource_allocation_reject( + mme_ue, pti, esm_cause); ogs_expect_or_return(esmbuf); rv = nas_eps_send_to_downlink_nas_transport(mme_ue, esmbuf); @@ -448,17 +447,16 @@ void nas_eps_send_bearer_resource_allocation_reject( } void nas_eps_send_bearer_resource_modification_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause) + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause) { int rv; - mme_ue_t *mme_ue; ogs_pkbuf_t *esmbuf = NULL; - ogs_assert(bearer); - mme_ue = bearer->mme_ue; - ogs_assert(bearer); + ogs_assert(mme_ue); + ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED); - esmbuf = esm_build_bearer_resource_modification_reject(bearer, esm_cause); + esmbuf = esm_build_bearer_resource_modification_reject( + mme_ue, pti, esm_cause); ogs_expect_or_return(esmbuf); rv = nas_eps_send_to_downlink_nas_transport(mme_ue, esmbuf); diff --git a/src/mme/nas-path.h b/src/mme/nas-path.h index 2b3f76510..80d7cb3c3 100644 --- a/src/mme/nas-path.h +++ b/src/mme/nas-path.h @@ -56,9 +56,9 @@ void nas_eps_send_modify_bearer_context_request( mme_bearer_t *bearer, int qos_presence, int tft_presence); void nas_eps_send_deactivate_bearer_context_request(mme_bearer_t *bearer); void nas_eps_send_bearer_resource_allocation_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause); + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause); void nas_eps_send_bearer_resource_modification_reject( - mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause); + mme_ue_t *mme_ue, uint8_t pti, ogs_nas_esm_cause_t esm_cause); void nas_eps_send_tau_accept( mme_ue_t *mme_ue, S1AP_ProcedureCode_t procedureCode); diff --git a/src/sgwc/s11-handler.c b/src/sgwc/s11-handler.c index 0c56f608f..83577ed3d 100644 --- a/src/sgwc/s11-handler.c +++ b/src/sgwc/s11-handler.c @@ -1130,8 +1130,12 @@ void sgwc_s11_handle_bearer_resource_command( } if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) { - bearer = sgwc_bearer_find_by_ue_ebi( - sgwc_ue, cmd->linked_eps_bearer_id.u8); + uint8_t ebi = cmd->linked_eps_bearer_id.u8; + + if (cmd->eps_bearer_id.presence) + ebi = cmd->eps_bearer_id.u8; + + bearer = sgwc_bearer_find_by_ue_ebi(sgwc_ue, ebi); if (!bearer) ogs_error("No Context for Linked EPS Bearer ID[%d]", cmd->linked_eps_bearer_id.u8); diff --git a/src/smf/s5c-handler.c b/src/smf/s5c-handler.c index 8c9bcd26a..6987ef0ba 100644 --- a/src/smf/s5c-handler.c +++ b/src/smf/s5c-handler.c @@ -723,7 +723,12 @@ void smf_s5c_handle_bearer_resource_command( } if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) { - bearer = smf_bearer_find_by_ebi(sess, cmd->linked_eps_bearer_id.u8); + uint8_t ebi = cmd->linked_eps_bearer_id.u8; + + if (cmd->eps_bearer_id.presence) + ebi = cmd->eps_bearer_id.u8; + + bearer = smf_bearer_find_by_ebi(sess, ebi); if (!bearer) ogs_error("No Context for Linked EPS Bearer ID[%d]", cmd->linked_eps_bearer_id.u8); @@ -759,7 +764,7 @@ void smf_s5c_handle_bearer_resource_command( ogs_gtp_send_error_message( xact, sess ? sess->sgw_s5c_teid : 0, OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, - OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TAD_OPERATION); + OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER); return; } /* @@ -825,7 +830,7 @@ void smf_s5c_handle_bearer_resource_command( ogs_gtp_send_error_message( xact, sess ? sess->sgw_s5c_teid : 0, OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, - OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TAD_OPERATION); + OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER); return; } /* diff --git a/tests/common/context.h b/tests/common/context.h index 9bcf5c85b..cab01046d 100644 --- a/tests/common/context.h +++ b/tests/common/context.h @@ -210,7 +210,6 @@ typedef struct test_service_request_param_s { }; uint8_t value; }; - uint8_t service_type; struct { uint16_t pdu_session_status; uint16_t uplink_data_status; diff --git a/tests/common/gmm-build.c b/tests/common/gmm-build.c index 376171d9c..798b6a650 100644 --- a/tests/common/gmm-build.c +++ b/tests/common/gmm-build.c @@ -231,7 +231,7 @@ ogs_pkbuf_t *testgmm_build_registration_complete(test_ue_t *test_ue) } ogs_pkbuf_t *testgmm_build_service_request( - test_ue_t *test_ue, ogs_pkbuf_t *nasbuf) + test_ue_t *test_ue, uint8_t service_type, ogs_pkbuf_t *nasbuf) { ogs_nas_5gs_message_t message; ogs_pkbuf_t *pkbuf = NULL; @@ -268,7 +268,7 @@ ogs_pkbuf_t *testgmm_build_service_request( OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM; message.gmm.h.message_type = OGS_NAS_5GS_SERVICE_REQUEST; - service_request->ngksi.type = test_ue->service_request_param.service_type; + service_request->ngksi.type = service_type; service_request->ngksi.tsc = test_ue->nas.tsc; service_request->ngksi.value = test_ue->nas.ksi; diff --git a/tests/common/gmm-build.h b/tests/common/gmm-build.h index 3d0bb01bf..8f1da2263 100644 --- a/tests/common/gmm-build.h +++ b/tests/common/gmm-build.h @@ -29,7 +29,7 @@ ogs_pkbuf_t *testgmm_build_registration_request( ogs_pkbuf_t *testgmm_build_registration_complete(test_ue_t *test_ue); ogs_pkbuf_t *testgmm_build_service_request( - test_ue_t *test_ue, ogs_pkbuf_t *nasbuf); + test_ue_t *test_ue, uint8_t service_type, ogs_pkbuf_t *nasbuf); ogs_pkbuf_t *testgmm_build_de_registration_request( test_ue_t *test_ue, bool switch_off); diff --git a/tests/registration/idle-test.c b/tests/registration/idle-test.c index 69a2a7727..00dde7b66 100644 --- a/tests/registration/idle-test.c +++ b/tests/registration/idle-test.c @@ -324,14 +324,15 @@ static void test1_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.pdu_session_status = 1; - test_ue->service_request_param.psimask.pdu_session_status = - 1 << sess->psi; - nasbuf = testgmm_build_service_request(test_ue, NULL); + test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi; + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); @@ -400,16 +401,17 @@ static void test1_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.uplink_data_status = 1; - test_ue->service_request_param. - psimask.uplink_data_status = 1 << sess->psi; + test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi; test_ue->service_request_param.pdu_session_status = 0; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); @@ -733,12 +735,14 @@ static void test2_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.pdu_session_status = 1; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); ABTS_PTR_NOTNULL(tc, sendbuf); @@ -1085,18 +1089,18 @@ static void test3_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.uplink_data_status = 1; - test_ue->service_request_param.psimask.uplink_data_status = - 1 << sess->psi; + test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi; test_ue->service_request_param.pdu_session_status = 1; - test_ue->service_request_param.psimask.pdu_session_status = - 1 << sess->psi; - nasbuf = testgmm_build_service_request(test_ue, NULL); + test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi; + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); @@ -1149,9 +1153,9 @@ static void test3_func(abts_case *tc, void *data) test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.ciphered = 1; test_ue->service_request_param.uplink_data_status = 1; - test_ue->service_request_param.psimask.uplink_data_status = - 1 << sess->psi; - gmmbuf = testgmm_build_service_request(test_ue, NULL); + test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi; + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_uplink_nas_transport(test_ue, gmmbuf); @@ -1488,12 +1492,14 @@ static void test4_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.pdu_session_status = 1; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, false); @@ -1565,18 +1571,18 @@ static void test4_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.uplink_data_status = 1; - test_ue->service_request_param.psimask.uplink_data_status = - 1 << sess->psi; + test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi; test_ue->service_request_param.pdu_session_status = 1; - test_ue->service_request_param.psimask.pdu_session_status = - 1 << sess->psi; - nasbuf = testgmm_build_service_request(test_ue, NULL); + test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi; + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); @@ -1632,7 +1638,8 @@ static void test4_func(abts_case *tc, void *data) test_ue->service_request_param.pdu_session_status = 1; test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi; - gmmbuf = testgmm_build_service_request(test_ue, NULL); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_uplink_nas_transport(test_ue, gmmbuf); @@ -1682,7 +1689,8 @@ static void test4_func(abts_case *tc, void *data) test_ue->service_request_param.pdu_session_status = 1; test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi; - gmmbuf = testgmm_build_service_request(test_ue, NULL); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_uplink_nas_transport(test_ue, gmmbuf); @@ -2041,12 +2049,14 @@ static void test5_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.pdu_session_status = 1; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); @@ -2497,16 +2507,17 @@ static void test6_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.uplink_data_status = 1; - test_ue->service_request_param. - psimask.uplink_data_status = 1 << sess->psi; + test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi; test_ue->service_request_param.pdu_session_status = 0; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); diff --git a/tests/registration/ue-context-test.c b/tests/registration/ue-context-test.c index a7dacb104..c03b9fc70 100644 --- a/tests/registration/ue-context-test.c +++ b/tests/registration/ue-context-test.c @@ -1386,14 +1386,15 @@ static void test4_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.pdu_session_status = 1; - test_ue->service_request_param.psimask.pdu_session_status = - 1 << sess->psi; - nasbuf = testgmm_build_service_request(test_ue, NULL); + test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi; + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, false); @@ -1441,16 +1442,17 @@ static void test4_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.uplink_data_status = 1; - test_ue->service_request_param. - psimask.uplink_data_status = 1 << sess->psi; + test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi; test_ue->service_request_param.pdu_session_status = 0; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, false); diff --git a/tests/vonr/qos-flow-test.c b/tests/vonr/qos-flow-test.c index 882d56eb7..a4c21d789 100644 --- a/tests/vonr/qos-flow-test.c +++ b/tests/vonr/qos-flow-test.c @@ -418,16 +418,17 @@ static void test1_func(abts_case *tc, void *data) */ test_ue->service_request_param.integrity_protected = 0; test_ue->service_request_param.uplink_data_status = 1; - test_ue->service_request_param. - psimask.uplink_data_status = 1 << sess->psi; + test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi; test_ue->service_request_param.pdu_session_status = 0; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); diff --git a/tests/vonr/session-test.c b/tests/vonr/session-test.c index 199cd0198..0502d2517 100644 --- a/tests/vonr/session-test.c +++ b/tests/vonr/session-test.c @@ -464,13 +464,15 @@ static void test1_func(abts_case *tc, void *data) test_ue->service_request_param. psimask.uplink_data_status = (1 << 5 | 1 << 6); test_ue->service_request_param.pdu_session_status = 0; - nasbuf = testgmm_build_service_request(test_ue, NULL); + nasbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL); ABTS_PTR_NOTNULL(tc, nasbuf); test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.pdu_session_status = 0; - gmmbuf = testgmm_build_service_request(test_ue, nasbuf); + gmmbuf = testgmm_build_service_request( + test_ue, OGS_NAS_SERVICE_TYPE_DATA, nasbuf); ABTS_PTR_NOTNULL(tc, gmmbuf); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true);