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;) uint8_t type_of_integrity_protection_algorithm:4;)
} __attribute__ ((packed)) ogs_nas_security_algorithms_t; } __attribute__ ((packed)) ogs_nas_security_algorithms_t;
/* 9.9.3.27 Service type /* 9.9.3.21 NAS key set identifier
* M V 1/2
* 9.9.3.21 NAS key set identifier
* M V 1/2 * 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 * 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 { typedef struct ogs_nas_service_type_s {
ED3(uint8_t tsc:1;, ED3(uint8_t tsc:1;,
uint8_t nas_key_set_identifier:3;, 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( 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_message_t message;
ogs_nas_eps_bearer_resource_allocation_reject_t ogs_nas_eps_bearer_resource_allocation_reject_t
*bearer_resource_allocation_reject = *bearer_resource_allocation_reject =
&message.esm.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(mme_ue);
ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED);
ogs_debug("Bearer resource allocation reject"); ogs_debug("Bearer resource allocation reject");
ogs_debug(" IMSI[%s] PTI[%d] Cause[%d]", 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)); memset(&message, 0, sizeof(message));
if (!SESSION_CONTEXT_IN_ATTACH(sess)) { message.h.security_header_type =
message.h.security_header_type = OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
}
message.esm.h.eps_bearer_identity = 0; message.esm.h.eps_bearer_identity = 0;
message.esm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_ESM; 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; message.esm.h.message_type = OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REJECT;
bearer_resource_allocation_reject->esm_cause = esm_cause; bearer_resource_allocation_reject->esm_cause = esm_cause;
if (SESSION_CONTEXT_IN_ATTACH(sess)) return nas_eps_security_encode(mme_ue, &message);
return ogs_nas_eps_plain_encode(&message);
else
return nas_eps_security_encode(mme_ue, &message);
} }
ogs_pkbuf_t *esm_build_bearer_resource_modification_reject( 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_message_t message;
ogs_nas_eps_bearer_resource_modification_reject_t ogs_nas_eps_bearer_resource_modification_reject_t
*bearer_resource_modification_reject = *bearer_resource_modification_reject =
&message.esm.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(mme_ue);
ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED);
ogs_debug("Bearer resource modification reject"); ogs_debug("Bearer resource modification reject");
ogs_debug(" IMSI[%s] PTI[%d] Cause[%d]", 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)); memset(&message, 0, sizeof(message));
if (!SESSION_CONTEXT_IN_ATTACH(sess)) { message.h.security_header_type =
message.h.security_header_type = OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
OGS_NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED; message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
message.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM;
}
message.esm.h.eps_bearer_identity = 0; message.esm.h.eps_bearer_identity = 0;
message.esm.h.protocol_discriminator = OGS_NAS_PROTOCOL_DISCRIMINATOR_ESM; 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 = message.esm.h.message_type =
OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT; OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REJECT;
bearer_resource_modification_reject->esm_cause = esm_cause; bearer_resource_modification_reject->esm_cause = esm_cause;
if (SESSION_CONTEXT_IN_ATTACH(sess)) return nas_eps_security_encode(mme_ue, &message);
return ogs_nas_eps_plain_encode(&message);
else
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( ogs_pkbuf_t *esm_build_deactivate_bearer_context_request(
mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause); mme_bearer_t *bearer, ogs_nas_esm_cause_t esm_cause);
ogs_pkbuf_t *esm_build_bearer_resource_allocation_reject( 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( 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 #ifdef __cplusplus
} }

View File

@ -176,9 +176,17 @@ int esm_handle_information_response(mme_sess_t *sess,
int esm_handle_bearer_resource_allocation_request( int esm_handle_bearer_resource_allocation_request(
mme_bearer_t *bearer, ogs_nas_eps_message_t *message) mme_bearer_t *bearer, ogs_nas_eps_message_t *message)
{ {
mme_ue_t *mme_ue = NULL;
mme_sess_t *sess = NULL;
ogs_assert(bearer); 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( 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; 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: case ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS:
return OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER; return OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER;
default: default:
return OGS_GTP_CAUSE_SYSTEM_FAILURE; break;
} }
return OGS_GTP_CAUSE_SYSTEM_FAILURE; return OGS_GTP_CAUSE_SYSTEM_FAILURE;

View File

@ -2963,11 +2963,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message(
if (!bearer) { if (!bearer) {
ogs_error("No Bearer : Linked-EBI[%d]", ogs_error("No Bearer : Linked-EBI[%d]",
linked_eps_bearer_identity->eps_bearer_identity); linked_eps_bearer_identity->eps_bearer_identity);
nas_eps_send_attach_reject(mme_ue, nas_eps_send_bearer_resource_allocation_reject(
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY);
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED);
return NULL; return NULL;
} }
} else if (message->esm.h.message_type == } else if (message->esm.h.message_type ==
OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST) { OGS_NAS_EPS_BEARER_RESOURCE_MODIFICATION_REQUEST) {
ogs_nas_eps_bearer_resource_modification_request_t 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, bearer = mme_bearer_find_by_ue_ebi(mme_ue,
linked_eps_bearer_identity->eps_bearer_identity); linked_eps_bearer_identity->eps_bearer_identity);
if (!bearer) { if (!bearer) {
ogs_error("No Bearer : Linked-EBI[%d]", ogs_error("No Bearer : Linked-EBI[%d]",
linked_eps_bearer_identity->eps_bearer_identity); linked_eps_bearer_identity->eps_bearer_identity);
nas_eps_send_attach_reject(mme_ue, nas_eps_send_bearer_resource_modification_reject(
EMM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, mme_ue, pti, ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY);
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED);
return NULL; return NULL;
} }
} }

View File

@ -770,6 +770,10 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command(
mme_ue = sess->mme_ue; mme_ue = sess->mme_ue;
ogs_assert(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); ogs_assert(nas_message);
switch (nas_message->esm.h.message_type) { switch (nas_message->esm.h.message_type) {
case OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST: 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); linked_bearer = mme_linked_bearer(bearer);
ogs_assert(linked_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)); memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
/* Linked Bearer Context : EBI */ /* Linked Bearer Context : EBI */
cmd->linked_eps_bearer_id.presence = 1; 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) */ /* Procedure Transaction ID(PTI) */
cmd->procedure_transaction_id.presence = 1; 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.data = tad->buffer;
cmd->traffic_aggregate_description.len = tad->length; 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; gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message); return ogs_gtp_build_msg(&gtp_message);
} }

View File

@ -31,6 +31,33 @@
#include "mme-s11-build.h" #include "mme-s11-build.h"
#include "mme-s11-handler.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( void mme_s11_handle_echo_request(
ogs_gtp_xact_t *xact, ogs_gtp_echo_request_t *req) 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); mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
/* Set PTI */ /* Set PTI */
ogs_assert(mme_ue);
ogs_assert(bearer); ogs_assert(bearer);
sess = bearer->sess; sess = bearer->sess;
ogs_assert(sess); ogs_assert(sess);
@ -620,7 +648,7 @@ void mme_s11_handle_update_bearer_request(
if (xact->xid & OGS_GTP_CMD_XACT_ID) { if (xact->xid & OGS_GTP_CMD_XACT_ID) {
/* MME received Bearer Resource Modification Request */ /* MME received Bearer Resource Modification Request */
nas_eps_send_bearer_resource_modification_reject( 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( mme_gtp_send_update_bearer_response(
@ -1013,10 +1041,13 @@ void mme_s11_handle_bearer_resource_failure_indication(
uint8_t cause_value = 0; uint8_t cause_value = 0;
mme_bearer_t *bearer = NULL; mme_bearer_t *bearer = NULL;
mme_sess_t *sess = NULL;
ogs_assert(xact); ogs_assert(xact);
bearer = xact->data; bearer = xact->data;
ogs_assert(ind); ogs_assert(ind);
sess = bearer->sess;
ogs_assert(sess);
ogs_debug("Bearer Resource Failure Indication"); ogs_debug("Bearer Resource Failure Indication");
@ -1028,15 +1059,15 @@ void mme_s11_handle_bearer_resource_failure_indication(
ogs_assert(cause); ogs_assert(cause);
cause_value = cause->value; 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 { } else {
ogs_error("No Cause"); ogs_error("No Cause");
} }
ogs_assert(mme_ue);
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]", ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid); mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
nas_eps_send_bearer_resource_modification_reject( 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( 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; int rv;
mme_ue_t *mme_ue;
ogs_pkbuf_t *esmbuf = NULL; ogs_pkbuf_t *esmbuf = NULL;
ogs_assert(bearer); ogs_assert(mme_ue);
mme_ue = bearer->mme_ue; ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED);
ogs_assert(bearer);
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); ogs_expect_or_return(esmbuf);
rv = nas_eps_send_to_downlink_nas_transport(mme_ue, 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( 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; int rv;
mme_ue_t *mme_ue;
ogs_pkbuf_t *esmbuf = NULL; ogs_pkbuf_t *esmbuf = NULL;
ogs_assert(bearer); ogs_assert(mme_ue);
mme_ue = bearer->mme_ue; ogs_assert(pti != OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED);
ogs_assert(bearer);
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); ogs_expect_or_return(esmbuf);
rv = nas_eps_send_to_downlink_nas_transport(mme_ue, 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); 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_deactivate_bearer_context_request(mme_bearer_t *bearer);
void nas_eps_send_bearer_resource_allocation_reject( 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( 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( void nas_eps_send_tau_accept(
mme_ue_t *mme_ue, S1AP_ProcedureCode_t procedureCode); 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) { if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
bearer = sgwc_bearer_find_by_ue_ebi( uint8_t ebi = cmd->linked_eps_bearer_id.u8;
sgwc_ue, 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) if (!bearer)
ogs_error("No Context for Linked EPS Bearer ID[%d]", ogs_error("No Context for Linked EPS Bearer ID[%d]",
cmd->linked_eps_bearer_id.u8); 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) { 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) if (!bearer)
ogs_error("No Context for Linked EPS Bearer ID[%d]", ogs_error("No Context for Linked EPS Bearer ID[%d]",
cmd->linked_eps_bearer_id.u8); cmd->linked_eps_bearer_id.u8);
@ -759,7 +764,7 @@ void smf_s5c_handle_bearer_resource_command(
ogs_gtp_send_error_message( ogs_gtp_send_error_message(
xact, sess ? sess->sgw_s5c_teid : 0, xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, 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; return;
} }
/* /*
@ -825,7 +830,7 @@ void smf_s5c_handle_bearer_resource_command(
ogs_gtp_send_error_message( ogs_gtp_send_error_message(
xact, sess ? sess->sgw_s5c_teid : 0, xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, 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; return;
} }
/* /*

View File

@ -210,7 +210,6 @@ typedef struct test_service_request_param_s {
}; };
uint8_t value; uint8_t value;
}; };
uint8_t service_type;
struct { struct {
uint16_t pdu_session_status; uint16_t pdu_session_status;
uint16_t uplink_data_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( 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_nas_5gs_message_t message;
ogs_pkbuf_t *pkbuf = NULL; ogs_pkbuf_t *pkbuf = NULL;
@ -268,7 +268,7 @@ ogs_pkbuf_t *testgmm_build_service_request(
OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM; OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM;
message.gmm.h.message_type = OGS_NAS_5GS_SERVICE_REQUEST; 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.tsc = test_ue->nas.tsc;
service_request->ngksi.value = test_ue->nas.ksi; 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_registration_complete(test_ue_t *test_ue);
ogs_pkbuf_t *testgmm_build_service_request( 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( ogs_pkbuf_t *testgmm_build_de_registration_request(
test_ue_t *test_ue, bool switch_off); 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.integrity_protected = 0;
test_ue->service_request_param.pdu_session_status = 1; test_ue->service_request_param.pdu_session_status = 1;
test_ue->service_request_param.psimask.pdu_session_status = test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi;
1 << sess->psi; nasbuf = testgmm_build_service_request(
nasbuf = testgmm_build_service_request(test_ue, NULL); test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.pdu_session_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_SIGNALLING, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); 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.integrity_protected = 0;
test_ue->service_request_param.uplink_data_status = 1; test_ue->service_request_param.uplink_data_status = 1;
test_ue->service_request_param. test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi;
psimask.uplink_data_status = 1 << sess->psi;
test_ue->service_request_param.pdu_session_status = 0; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.uplink_data_status = 0;
test_ue->service_request_param.pdu_session_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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); 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.integrity_protected = 0;
test_ue->service_request_param.pdu_session_status = 1; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.pdu_session_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_SIGNALLING, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true);
ABTS_PTR_NOTNULL(tc, sendbuf); 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.integrity_protected = 0;
test_ue->service_request_param.uplink_data_status = 1; test_ue->service_request_param.uplink_data_status = 1;
test_ue->service_request_param.psimask.uplink_data_status = test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi;
1 << sess->psi;
test_ue->service_request_param.pdu_session_status = 1; test_ue->service_request_param.pdu_session_status = 1;
test_ue->service_request_param.psimask.pdu_session_status = test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi;
1 << sess->psi; nasbuf = testgmm_build_service_request(
nasbuf = testgmm_build_service_request(test_ue, NULL); test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.uplink_data_status = 0;
test_ue->service_request_param.pdu_session_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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); 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.integrity_protected = 1;
test_ue->service_request_param.ciphered = 1; test_ue->service_request_param.ciphered = 1;
test_ue->service_request_param.uplink_data_status = 1; test_ue->service_request_param.uplink_data_status = 1;
test_ue->service_request_param.psimask.uplink_data_status = test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi;
1 << sess->psi; gmmbuf = testgmm_build_service_request(
gmmbuf = testgmm_build_service_request(test_ue, NULL); test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL);
ABTS_PTR_NOTNULL(tc, gmmbuf); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_uplink_nas_transport(test_ue, 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.integrity_protected = 0;
test_ue->service_request_param.pdu_session_status = 1; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.pdu_session_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_SIGNALLING, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, false); 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.integrity_protected = 0;
test_ue->service_request_param.uplink_data_status = 1; test_ue->service_request_param.uplink_data_status = 1;
test_ue->service_request_param.psimask.uplink_data_status = test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi;
1 << sess->psi;
test_ue->service_request_param.pdu_session_status = 1; test_ue->service_request_param.pdu_session_status = 1;
test_ue->service_request_param.psimask.pdu_session_status = test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi;
1 << sess->psi; nasbuf = testgmm_build_service_request(
nasbuf = testgmm_build_service_request(test_ue, NULL); test_ue, OGS_NAS_SERVICE_TYPE_DATA, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.uplink_data_status = 0;
test_ue->service_request_param.pdu_session_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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); 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.pdu_session_status = 1;
test_ue->service_request_param.psimask.pdu_session_status = test_ue->service_request_param.psimask.pdu_session_status =
1 << sess->psi; 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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_uplink_nas_transport(test_ue, 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.pdu_session_status = 1;
test_ue->service_request_param.psimask.pdu_session_status = test_ue->service_request_param.psimask.pdu_session_status =
1 << sess->psi; 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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_uplink_nas_transport(test_ue, 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.integrity_protected = 0;
test_ue->service_request_param.pdu_session_status = 1; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.pdu_session_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_SIGNALLING, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); 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.integrity_protected = 0;
test_ue->service_request_param.uplink_data_status = 1; test_ue->service_request_param.uplink_data_status = 1;
test_ue->service_request_param. test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi;
psimask.uplink_data_status = 1 << sess->psi;
test_ue->service_request_param.pdu_session_status = 0; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.uplink_data_status = 0;
test_ue->service_request_param.pdu_session_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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); 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.integrity_protected = 0;
test_ue->service_request_param.pdu_session_status = 1; test_ue->service_request_param.pdu_session_status = 1;
test_ue->service_request_param.psimask.pdu_session_status = test_ue->service_request_param.psimask.pdu_session_status = 1 << sess->psi;
1 << sess->psi; nasbuf = testgmm_build_service_request(
nasbuf = testgmm_build_service_request(test_ue, NULL); test_ue, OGS_NAS_SERVICE_TYPE_SIGNALLING, NULL);
ABTS_PTR_NOTNULL(tc, nasbuf); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.pdu_session_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_SIGNALLING, nasbuf);
ABTS_PTR_NOTNULL(tc, gmmbuf); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, false); 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.integrity_protected = 0;
test_ue->service_request_param.uplink_data_status = 1; test_ue->service_request_param.uplink_data_status = 1;
test_ue->service_request_param. test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi;
psimask.uplink_data_status = 1 << sess->psi;
test_ue->service_request_param.pdu_session_status = 0; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.uplink_data_status = 0;
test_ue->service_request_param.pdu_session_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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, false); 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.integrity_protected = 0;
test_ue->service_request_param.uplink_data_status = 1; test_ue->service_request_param.uplink_data_status = 1;
test_ue->service_request_param. test_ue->service_request_param.psimask.uplink_data_status = 1 << sess->psi;
psimask.uplink_data_status = 1 << sess->psi;
test_ue->service_request_param.pdu_session_status = 0; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.uplink_data_status = 0;
test_ue->service_request_param.pdu_session_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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); 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. test_ue->service_request_param.
psimask.uplink_data_status = (1 << 5 | 1 << 6); psimask.uplink_data_status = (1 << 5 | 1 << 6);
test_ue->service_request_param.pdu_session_status = 0; 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); ABTS_PTR_NOTNULL(tc, nasbuf);
test_ue->service_request_param.integrity_protected = 1; test_ue->service_request_param.integrity_protected = 1;
test_ue->service_request_param.uplink_data_status = 0; test_ue->service_request_param.uplink_data_status = 0;
test_ue->service_request_param.pdu_session_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); ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true); sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, true, true);