fix: Derive ESM cause from GTP-Cause (#755)

This commit is contained in:
Sukchan Lee 2021-01-10 23:36:12 -05:00
parent d6ed13968d
commit 5fb0611cb2
19 changed files with 200 additions and 134 deletions

View File

@ -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;,

View File

@ -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);
}

View File

@ -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
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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(&gtp_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(&gtp_message);
}

View File

@ -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));
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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;
}
/*

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);