diff --git a/openair2/COMMON/as_message.h b/openair2/COMMON/as_message.h index 3831164e6065640c7dc3e9cc955382c77eec5013..d7f35ab5684a866930c04154eb9e9748b4c3fdd9 100644 --- a/openair2/COMMON/as_message.h +++ b/openair2/COMMON/as_message.h @@ -175,7 +175,7 @@ typedef struct as_stmsi_s { /* Dedicated NAS information */ typedef struct as_nas_info_s { UInt32_t length; /* Length of the NAS information data */ - Byte_t *data; /* Dedicated NAS information data container */ + Byte_t* data; /* Dedicated NAS information data container */ } as_nas_info_t; /* Radio Access Bearer identity */ @@ -567,11 +567,11 @@ typedef struct as_message_s { /****************** E X P O R T E D F U N C T I O N S ******************/ /****************************************************************************/ -int as_message_decode(const char *buffer, as_message_t *msg, int length); +int as_message_decode(const char* buffer, as_message_t* msg, int length); -int as_message_encode(char *buffer, as_message_t *msg, int length); +int as_message_encode(char* buffer, as_message_t* msg, int length); /* Implemented in the network_api.c body file */ -int as_message_send(as_message_t *as_msg); +int as_message_send(as_message_t* as_msg); #endif /* __AS_MESSAGE_H__*/ diff --git a/openair2/COMMON/commonDef.h b/openair2/COMMON/commonDef.h index a4e2b2595d0e9d39df9880f3662f52665c4a723f..d3efb9bb07ea93587ae307fd0e55c31d0d98b336 100644 --- a/openair2/COMMON/commonDef.h +++ b/openair2/COMMON/commonDef.h @@ -263,7 +263,7 @@ typedef struct { * EPS Mobility Management sublayer */ typedef int (*emm_indication_callback_t) (Stat_t, tac_t, ci_t, AcT_t, - const char *, size_t); + const char*, size_t); typedef enum eps_protocol_discriminator_e { /* Protocol discriminator identifier for EPS Mobility Management */ diff --git a/openair2/COMMON/gtpv1_u_messages_types.h b/openair2/COMMON/gtpv1_u_messages_types.h index 652c4c797acd67b342acbe18097a7c557bdcbd59..d1c473da14a4366906d951f7baf68d4dc1b8d195 100755 --- a/openair2/COMMON/gtpv1_u_messages_types.h +++ b/openair2/COMMON/gtpv1_u_messages_types.h @@ -44,7 +44,7 @@ #define GTPV1U_ALL_TUNNELS_TEID (teid_t)0xFFFFFFFF typedef struct gtpv1u_enb_create_tunnel_req_s { - module_id_t ue_index; + rnti_t rnti; int num_tunnels; teid_t sgw_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE]; @@ -53,7 +53,7 @@ typedef struct gtpv1u_enb_create_tunnel_req_s { typedef struct gtpv1u_enb_create_tunnel_resp_s { uint8_t status; ///< Status of S1U endpoint creation (Failed = 0xFF or Success = 0x0) - uint8_t ue_index; + rnti_t rnti; int num_tunnels; teid_t enb_S1u_teid[GTPV1U_MAX_BEARERS_PER_UE]; ///< Tunnel Endpoint Identifier ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE]; @@ -61,7 +61,7 @@ typedef struct gtpv1u_enb_create_tunnel_resp_s { } gtpv1u_enb_create_tunnel_resp_t; typedef struct gtpv1u_enb_update_tunnel_req_s { - uint8_t ue_index; + rnti_t rnti; teid_t enb_S1u_teid; ///< eNB S1U Tunnel Endpoint Identifier teid_t sgw_S1u_teid; ///< SGW S1U local Tunnel Endpoint Identifier transport_layer_addr_t sgw_addr; @@ -69,7 +69,7 @@ typedef struct gtpv1u_enb_update_tunnel_req_s { } gtpv1u_enb_update_tunnel_req_t; typedef struct gtpv1u_enb_update_tunnel_resp_s { - uint8_t ue_index; + rnti_t rnti; uint8_t status; ///< Status (Failed = 0xFF or Success = 0x0) teid_t enb_S1u_teid; ///< eNB S1U Tunnel Endpoint Identifier teid_t sgw_S1u_teid; ///< SGW S1U local Tunnel Endpoint Identifier @@ -77,20 +77,20 @@ typedef struct gtpv1u_enb_update_tunnel_resp_s { } gtpv1u_enb_update_tunnel_resp_t; typedef struct gtpv1u_enb_delete_tunnel_req_s { - module_id_t ue_index; + rnti_t rnti; uint8_t num_erab; ebi_t eps_bearer_id[GTPV1U_MAX_BEARERS_PER_UE]; //teid_t enb_S1u_teid; ///< local SGW S11 Tunnel Endpoint Identifier } gtpv1u_enb_delete_tunnel_req_t; typedef struct gtpv1u_enb_delete_tunnel_resp_s { - uint8_t ue_index; + rnti_t rnti; uint8_t status; ///< Status of S1U endpoint deleteion (Failed = 0xFF or Success = 0x0) teid_t enb_S1u_teid; ///< local S1U Tunnel Endpoint Identifier to be deleted } gtpv1u_enb_delete_tunnel_resp_t; typedef struct gtpv1u_enb_tunnel_data_ind_s { - uint8_t ue_index; + rnti_t rnti; uint8_t *buffer; uint32_t length; uint32_t offset; ///< start of message offset in buffer @@ -101,7 +101,7 @@ typedef struct gtpv1u_enb_tunnel_data_req_s { uint8_t *buffer; uint32_t length; uint32_t offset; ///< start of message offset in buffer - uint8_t ue_index; + rnti_t rnti; rb_id_t rab_id; } gtpv1u_enb_tunnel_data_req_t; diff --git a/openair2/COMMON/mac_messages_types.h b/openair2/COMMON/mac_messages_types.h index dfce6baaf1e51360a8d335b5e117d3329d0e543a..cd9108f277efe573d89523681d8e1ccd78c299a7 100644 --- a/openair2/COMMON/mac_messages_types.h +++ b/openair2/COMMON/mac_messages_types.h @@ -95,6 +95,7 @@ typedef struct RrcMacCcchDataCnf_s { typedef struct RrcMacCcchDataInd_s { uint32_t frame; + uint16_t rnti; uint32_t sdu_size; uint8_t sdu[CCCH_SDU_SIZE]; uint8_t enb_index; diff --git a/openair2/COMMON/mac_rrc_primitives.h b/openair2/COMMON/mac_rrc_primitives.h index 9c720a8d77e1640b658c166f352316086d48c96b..72c77b34343fb5b541b9194a8cb354fa6b5d47b3 100644 --- a/openair2/COMMON/mac_rrc_primitives.h +++ b/openair2/COMMON/mac_rrc_primitives.h @@ -399,8 +399,8 @@ typedef struct { ); unsigned int (*mac_rlc_data_req)(module_id_t, unsigned int, char*); void (*mac_rlc_data_ind)(module_id_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, crc_t* ); - mac_rlc_status_resp_t (*mac_rlc_status_ind) (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP, logical_chan_id_t channel_idP, - tb_size_t tb_sizeP); + mac_rlc_status_resp_t (*mac_rlc_status_ind) (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP, + logical_chan_id_t channel_idP, tb_size_t tb_sizeP); signed int (*rrc_rlc_data_req)(module_id_t, rb_id_t, mui_t, confirm_t, sdu_size_t, char *); void (*rrc_rlc_register_rrc) (void (*rrc_data_indP)(module_id_t , rb_id_t , sdu_size_t , char* ), void (*rrc_data_confP) (module_id_t , rb_id_t , mui_t ) ) ; diff --git a/openair2/COMMON/networkDef.h b/openair2/COMMON/networkDef.h index a19e1ce11daa01fbbc712bcdb9b3eccc0fa3d75c..2eb376a9c7b8be9e242b93f26ac0a23ce124bd8c 100644 --- a/openair2/COMMON/networkDef.h +++ b/openair2/COMMON/networkDef.h @@ -257,7 +257,7 @@ typedef struct { typedef struct { int n_pkfs; #define NET_PACKET_FILTER_MAX 16 - network_pkf_t *pkf[NET_PACKET_FILTER_MAX]; + network_pkf_t* pkf[NET_PACKET_FILTER_MAX]; } network_tft_t; /* diff --git a/openair2/COMMON/pdcp_messages_types.h b/openair2/COMMON/pdcp_messages_types.h index 6c2d5e601c3d79c7611ca1be16d14a135276ccea..4eb6063a5e70b9b86db95c6695ee3d643c431811 100644 --- a/openair2/COMMON/pdcp_messages_types.h +++ b/openair2/COMMON/pdcp_messages_types.h @@ -53,7 +53,8 @@ typedef struct RrcDcchDataReq_s { uint32_t sdu_size; uint8_t *sdu_p; uint8_t mode; - uint8_t ue_index; + uint16_t rnti; + uint8_t module_id; uint8_t eNB_index; } RrcDcchDataReq; @@ -62,8 +63,9 @@ typedef struct RrcDcchDataInd_s { uint8_t dcch_index; uint32_t sdu_size; uint8_t *sdu_p; - uint8_t ue_index; - uint8_t eNB_index; + uint16_t rnti; + uint8_t module_id; + uint8_t eNB_index; // LG: needed in UE } RrcDcchDataInd; #endif /* PDCP_MESSAGES_TYPES_H_ */ diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h index c1d8e5263a86d056730760a6f1b77b5b93ad2f51..52089fe6c2f046ac476eb8b17468c49a6a5967f6 100755 --- a/openair2/COMMON/platform_types.h +++ b/openair2/COMMON/platform_types.h @@ -42,6 +42,9 @@ #include <stdint.h> #endif +#if defined(ENABLE_ITTI) +#include "itti_types.h" +#endif //----------------------------------------------------------------------------- // GENERIC TYPES //----------------------------------------------------------------------------- @@ -109,6 +112,7 @@ typedef sdu_size_t tbs_size_t; typedef sdu_size_t tb_size_t; typedef unsigned int logical_chan_id_t; typedef unsigned int num_tb_t; +typedef uint8_t mac_enb_index_t; //----------------------------------------------------------------------------- // RLC TYPES @@ -121,6 +125,8 @@ typedef uint16_t rlc_usn_t; typedef int32_t rlc_buffer_occupancy_t; typedef signed int rlc_op_status_t; +#define SDU_CONFIRM_NO FALSE +#define SDU_CONFIRM_YES TRUE //----------------------------------------------------------------------------- // PDCP TYPES //----------------------------------------------------------------------------- @@ -155,6 +161,20 @@ typedef enum ip_traffic_type_e { typedef uint32_t mbms_session_id_t; typedef uint16_t mbms_service_id_t; typedef uint16_t rnti_t; +typedef uint8_t rrc_enb_index_t; + +#if ! defined(NOT_A_RNTI) +#define NOT_A_RNTI (rnti_t)0 +#endif +#if ! defined(M_RNTI) +#define M_RNTI (rnti_t)0xFFFD +#endif +#if ! defined(P_RNTI) +#define P_RNTI (rnti_t)0xFFFE +#endif +#if ! defined(SI_RNTI) +#define SI_RNTI (rnti_t)0xFFFF +#endif typedef enum config_action_e { CONFIG_ACTION_NULL = 0, CONFIG_ACTION_ADD = 1, @@ -176,16 +196,93 @@ typedef uint8_t ebi_t; // eps bearer id //----------------------------------------------------------------------------- // //----------------------------------------------------------------------------- +// may be ITTI not enabled, but type instance is useful also for OTG, +#if !defined(instance_t) +typedef uint16_t instance_t; +#endif typedef struct protocol_ctxt_s { - module_id_t enb_module_id; /*!< \brief Virtualized enb module identifier, Not used if eNB_flagP = 0. */ - module_id_t ue_module_id; /*!< \brief Virtualized ue module identifier */ - frame_t frame; /*!< \brief LTE Frame number.*/ + module_id_t module_id; /*!< \brief Virtualized module identifier */ eNB_flag_t enb_flag; /*!< \brief Flag to indicate eNB (1) or UE (0) */ + instance_t instance; /*!< \brief ITTI or OTG module identifier */ + rnti_t rnti; + frame_t frame; /*!< \brief LTE frame number.*/ + sub_frame_t subframe; /*!< \brief LTE sub frame number.*/ } protocol_ctxt_t; -#define PROTOCOL_CTXT_FMT "[FRAME %05u][%s][MOD %02u/%02u]" +// warning time hardcoded +#define PROTOCOL_CTXT_TIME_MILLI_SECONDS(CtXt_h) ((CtXt_h)->frame*10+(CtXt_h)->subframe) + +#define UE_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD + NB_eNB_INST +#define ENB_MODULE_ID_TO_INSTANCE( mODULE_iD ) mODULE_iD +#define UE_INSTANCE_TO_MODULE_ID( iNSTANCE ) iNSTANCE - NB_eNB_INST +#define ENB_INSTANCE_TO_MODULE_ID( iNSTANCE )iNSTANCE + + +#define MODULE_ID_TO_INSTANCE(mODULE_iD, iNSTANCE, eNB_fLAG) \ + if(eNB_fLAG == ENB_FLAG_YES) \ + iNSTANCE = ENB_MODULE_ID_TO_INSTANCE(mODULE_iD); \ + else \ + iNSTANCE = UE_MODULE_ID_TO_INSTANCE(mODULE_iD) + +#define INSTANCE_TO_MODULE_ID(iNSTANCE, mODULE_iD, eNB_fLAG) \ + if(eNB_fLAG == ENB_FLAG_YES) \ + mODULE_iD = ENB_INSTANCE_TO_MODULE_ID(iNSTANCE); \ + else \ + mODULE_iD = UE_INSTANCE_TO_MODULE_ID(iNSTANCE) + +#define PROTOCOL_CTXT_COMPUTE_MODULE_ID(CtXt_h) \ + INSTANCE_TO_MODULE_ID( (CtXt_h)->instance , (CtXt_h)->module_id , (CtXt_h)->enb_flag ) + + +#define PROTOCOL_CTXT_COMPUTE_INSTANCE(CtXt_h) \ + MODULE_ID_TO_INSTANCE( (CtXt_h)->module_id , (CtXt_h)->instance , (CtXt_h)->enb_flag ) + + +#define PROTOCOL_CTXT_SET_BY_MODULE_ID(Ctxt_Pp, mODULE_iD, eNB_fLAG, rNTI, fRAME, sUBfRAME) \ + (Ctxt_Pp)->module_id = mODULE_iD; \ + (Ctxt_Pp)->enb_flag = eNB_fLAG; \ + (Ctxt_Pp)->rnti = rNTI; \ + (Ctxt_Pp)->frame = fRAME; \ + (Ctxt_Pp)->subframe = sUBfRAME; \ + PROTOCOL_CTXT_COMPUTE_INSTANCE(Ctxt_Pp) + +#define PROTOCOL_CTXT_SET_BY_INSTANCE(Ctxt_Pp, iNSTANCE, eNB_fLAG, rNTI, fRAME, sUBfRAME) \ + (Ctxt_Pp)->instance = iNSTANCE; \ + (Ctxt_Pp)->enb_flag = eNB_fLAG; \ + (Ctxt_Pp)->rnti = rNTI; \ + (Ctxt_Pp)->frame = fRAME; \ + (Ctxt_Pp)->subframe = sUBfRAME; \ + PROTOCOL_CTXT_COMPUTE_MODULE_ID(Ctxt_Pp) + +#define PROTOCOL_CTXT_FMT "[FRAME %05u][%s][MOD %02u][RNTI %"PRIx16"]" #define PROTOCOL_CTXT_ARGS(CTXT_Pp) \ - CTXT_Pp->frame, \ - (CTXT_Pp->enb_flag == ENB_FLAG_YES) ? "eNB":" UE", \ - CTXT_Pp->enb_module_id, \ - CTXT_Pp->ue_module_id + (CTXT_Pp)->frame, \ + ((CTXT_Pp)->enb_flag == ENB_FLAG_YES) ? "eNB":" UE", \ + (CTXT_Pp)->module_id, \ + (CTXT_Pp)->rnti + +#ifdef OAI_EMU +#define CHECK_CTXT_ARGS(CTXT_Pp) \ + if ((CTXT_Pp)->enb_flag) {\ + AssertFatal (((CTXT_Pp)->module_id >= oai_emulation.info.first_enb_local) && (oai_emulation.info.nb_enb_local > 0),\ + "eNB module id is too low (%u/%d/%d)!\n",\ + (CTXT_Pp)->module_id,\ + oai_emulation.info.first_enb_local,\ + oai_emulation.info.nb_enb_local);\ + AssertFatal (((CTXT_Pp)->module_id < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)) && (oai_emulation.info.nb_enb_local > 0),\ + "eNB module id is too high (%u/%d)!\n",\ + (CTXT_Pp)->module_id,\ + oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local);\ + } else {\ + AssertFatal ((CTXT_Pp)->module_id < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local),\ + "UE module id is too high (%u/%d)!\n",\ + (CTXT_Pp)->module_id,\ + oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local);\ + AssertFatal ((CTXT_Pp)->module_id >= oai_emulation.info.first_ue_local,\ + "UE module id is too low (%u/%d)!\n",\ + (CTXT_Pp)->module_id,\ + oai_emulation.info.first_ue_local);\ + } +#else +#define CHECK_CTXT_ARGS(CTXT_Pp) +#endif #endif