forked from acouzens/open5gs
fix: Derive ESM cause from GTP-Cause (#755)
This commit is contained in:
parent
d6ed13968d
commit
5fb0611cb2
|
@ -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;,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
/*
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue