diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h index 6f66fb647f9931e2377f62cc4f188fef81b39ca9..bdbd73b609769171f81c3bbc223d1ac0cc43a70a 100644 --- a/openair2/COMMON/rrc_messages_def.h +++ b/openair2/COMMON/rrc_messages_def.h @@ -7,6 +7,7 @@ //-------------------------------------------------------------------------------------------// // Messages for RRC logging +#if defined(DISABLE_ITTI_XER_PRINT) MESSAGE_DEF(RRC_DL_BCCH_MESSAGE, MESSAGE_PRIORITY_MED_PLUS, RrcDlBcchMessage, rrc_dl_bcch_message) MESSAGE_DEF(RRC_DL_CCCH_MESSAGE, MESSAGE_PRIORITY_MED_PLUS, RrcDlCcchMessage, rrc_dl_ccch_message) MESSAGE_DEF(RRC_DL_DCCH_MESSAGE, MESSAGE_PRIORITY_MED_PLUS, RrcDlDcchMessage, rrc_dl_dcch_message) @@ -15,6 +16,7 @@ MESSAGE_DEF(RRC_UE_EUTRA_CAPABILITY, MESSAGE_PRIORITY_MED_PLUS, RrcUeEutraCa MESSAGE_DEF(RRC_UL_CCCH_MESSAGE, MESSAGE_PRIORITY_MED_PLUS, RrcUlCcchMessage, rrc_ul_ccch_message) MESSAGE_DEF(RRC_UL_DCCH_MESSAGE, MESSAGE_PRIORITY_MED_PLUS, RrcUlDcchMessage, rrc_ul_dcch_message) +#endif //-------------------------------------------------------------------------------------------// // Messages between NAS and RRC layers diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 2f48582636fbd43293fcb883a61fe093e8906c3a..252e71d3df2d762539b0ef1017d87983041aa896 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -12,6 +12,7 @@ //-------------------------------------------------------------------------------------------// // Messages for RRC logging +#if defined(DISABLE_ITTI_XER_PRINT) #include "BCCH-DL-SCH-Message.h" #include "DL-CCCH-Message.h" #include "DL-DCCH-Message.h" @@ -25,6 +26,7 @@ typedef DL_DCCH_Message_t RrcDlDcchMessage; typedef UE_EUTRA_Capability_t RrcUeEutraCapability; typedef UL_CCCH_Message_t RrcUlCcchMessage; typedef UL_DCCH_Message_t RrcUlDcchMessage; +#endif //-------------------------------------------------------------------------------------------// // Defines to access message fields. diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c index b2f2ce7a54f334664aff39fbfb1778888f7ac90c..f73d04ca96b1ab596086b1c95b4f69fecc373cac 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c @@ -114,6 +114,29 @@ uint16_t two_tier_hexagonal_adjacent_cellIds[7][6] = {{1,2,4,5,7,8}, // CellI {8,0,5,9,17,12}, // CellId 7 {15,1,0,7,12,10}};// CellId 8 +/* + * This is a helper function for xer_sprint, which directs all incoming data + * into the provided string. + */ +static int xer__print2s (const void *buffer, size_t size, void *app_key) +{ + char *string = (char *) app_key; + + strncat(string, buffer, size); + + return 0; +} + +int xer_sprint (char *string, asn_TYPE_descriptor_t *td, void *sptr) +{ + asn_enc_rval_t er; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2s, string); + if (er.encoded == -1) + return -1; + + return 0; +} uint16_t get_adjacent_cell_id(uint8_t Mod_id,uint8_t index) { return(two_tier_hexagonal_adjacent_cellIds[Mod_id][index]); @@ -1982,7 +2005,7 @@ OAI_UECapability_t *fill_ue_capability() { MAX_UE_CAPABILITY_SIZE); #if defined(ENABLE_ITTI) - /* Test code */ +# if defined(DISABLE_XER_SPRINT) { MessageDef *message_p; @@ -1991,6 +2014,27 @@ OAI_UECapability_t *fill_ue_capability() { itti_send_msg_to_task (TASK_UNKNOWN, NB_eNB_INST, message_p); } +# else + { + char *message_string = NULL; + + message_string = calloc(10000, sizeof(char)); + + if (xer_sprint(message_string, &asn_DEF_UE_EUTRA_Capability, (void *)UE_EUTRA_Capability) >= 0) + { + MessageDef *message_p; + size_t message_string_size; + + message_string_size = strlen(message_string); + message_p = itti_alloc_new_message_sized (TASK_RRC_UE, GENERIC_LOG, message_string_size); + memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + + free(message_string); + } + } +# endif #endif UECapability.sdu_size = (enc_rval.encoded + 7) / 8; diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h index e3e70b6b45e09a33b5419fe4b186b98402346373..a3a5adfefe5df661ffb6a1aa7da0d17b57fe1a38 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h @@ -53,6 +53,16 @@ #include "RRC/LITE/defs.h" +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen string buffer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_sprint(char *string, struct asn_TYPE_descriptor_s *td, void *sptr); + uint16_t get_adjacent_cell_id(uint8_t Mod_id,uint8_t index); u8 get_adjacent_cell_mod_id(uint16_t phyCellId); diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index 529e002f792548dbf4607a0c0eb1cd29a288408c..cb97ffd426b3a2e9beb8c9b7ed94c11670231ca8 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -332,6 +332,7 @@ int rrc_ue_decode_ccch(u8 Mod_id, u32 frame, SRB_INFO *Srb_info, u8 eNB_index){ #endif #if defined(ENABLE_ITTI) +# if defined(DISABLE_ITTI_XER_PRINT) { MessageDef *message_p; @@ -340,6 +341,27 @@ int rrc_ue_decode_ccch(u8 Mod_id, u32 frame, SRB_INFO *Srb_info, u8 eNB_index){ itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, message_p); } +# else + { + char *message_string = NULL; + + message_string = calloc(10000, sizeof(char)); + + if (xer_sprint(message_string, &asn_DEF_DL_CCCH_Message, (void *)dl_ccch_msg) >= 0) + { + MessageDef *message_p; + size_t message_string_size; + + message_string_size = strlen(message_string); + message_p = itti_alloc_new_message_sized (TASK_RRC_ENB, GENERIC_LOG, message_string_size); + memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + + free(message_string); + } + } +# endif #endif if ((dec_rval.code != RC_OK) && (dec_rval.consumed==0)) { @@ -1337,6 +1359,7 @@ void rrc_ue_decode_dcch(u8 Mod_id,u32 frame,u8 Srb_id, u8 *Buffer,u8 eNB_index) #endif #if defined(ENABLE_ITTI) +# if defined(DISABLE_ITTI_XER_PRINT) { MessageDef *message_p; @@ -1345,6 +1368,27 @@ void rrc_ue_decode_dcch(u8 Mod_id,u32 frame,u8 Srb_id, u8 *Buffer,u8 eNB_index) itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, message_p); } +# else + { + char *message_string = NULL; + + message_string = calloc(20000, sizeof(char)); + + if (xer_sprint(message_string, &asn_DEF_DL_DCCH_Message, (void *)dl_dcch_msg) >= 0) + { + MessageDef *message_p; + size_t message_string_size; + + message_string_size = strlen(message_string); + message_p = itti_alloc_new_message_sized (TASK_RRC_UE, GENERIC_LOG, message_string_size); + memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + + free(message_string); + } + } +# endif #endif if (dl_dcch_msg->message.present == DL_DCCH_MessageType_PR_c1) { @@ -1506,6 +1550,7 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le // xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)&bcch_message); #if defined(ENABLE_ITTI) +# if defined(DISABLE_ITTI_XER_PRINT) { MessageDef *message_p; @@ -1514,6 +1559,27 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, message_p); } +# else + { + char *message_string = NULL; + + message_string = calloc(10000, sizeof(char)); + + if (xer_sprint(message_string, &asn_DEF_BCCH_DL_SCH_Message, (void *)bcch_message) >= 0) + { + MessageDef *message_p; + size_t message_string_size; + + message_string_size = strlen(message_string); + message_p = itti_alloc_new_message_sized (TASK_RRC_UE, GENERIC_LOG, message_string_size); + memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + + free(message_string); + } + } +# endif #endif if (bcch_message->message.present == BCCH_DL_SCH_MessageType_PR_c1) { diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 63fe56420d3b99685371773e31f59007b2484be6..a96514b211e58095eabfbc9f0ceb1055d8e204f3 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -2504,6 +2504,7 @@ int rrc_eNB_decode_ccch (u8 Mod_id, u32 frame, SRB_INFO * Srb_info) (uint8_t *) Srb_info->Rx_buffer.Payload, 100, 0, 0); #if defined(ENABLE_ITTI) +# if defined(DISABLE_ITTI_XER_PRINT) { MessageDef *message_p; @@ -2512,6 +2513,27 @@ int rrc_eNB_decode_ccch (u8 Mod_id, u32 frame, SRB_INFO * Srb_info) itti_send_msg_to_task (TASK_UNKNOWN, Mod_id, message_p); } +# else + { + char *message_string = NULL; + + message_string = calloc(10000, sizeof(char)); + + if (xer_sprint(message_string, &asn_DEF_UL_CCCH_Message, (void *)ul_ccch_msg) >= 0) + { + MessageDef *message_p; + size_t message_string_size; + + message_string_size = strlen(message_string); + message_p = itti_alloc_new_message_sized (TASK_RRC_ENB, GENERIC_LOG, message_string_size); + memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + + free(message_string); + } + } +# endif #endif for (i = 0; i < 8; i++) @@ -2699,6 +2721,7 @@ int rrc_eNB_decode_dcch (u8 Mod_id, u32 frame, u8 Srb_id, u8 UE_index, (void **) &ul_dcch_msg, Rx_sdu, sdu_size, 0, 0); #if defined(ENABLE_ITTI) +# if defined(DISABLE_ITTI_XER_PRINT) { MessageDef *message_p; @@ -2707,6 +2730,27 @@ int rrc_eNB_decode_dcch (u8 Mod_id, u32 frame, u8 Srb_id, u8 UE_index, itti_send_msg_to_task (TASK_UNKNOWN, Mod_id, message_p); } +# else + { + char *message_string = NULL; + + message_string = calloc(10000, sizeof(char)); + + if (xer_sprint(message_string, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg) >= 0) + { + MessageDef *message_p; + size_t message_string_size; + + message_string_size = strlen(message_string); + message_p = itti_alloc_new_message_sized (TASK_RRC_ENB, GENERIC_LOG, message_string_size); + memcpy(&message_p->ittiMsg.generic_log, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, INSTANCE_DEFAULT, message_p); + + free(message_string); + } + } +# endif #endif for (i = 0; i < sdu_size; i++) diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.h b/openair2/RRC/LITE/rrc_eNB_S1AP.h index 9f4045b60c56aac000852d494934c2c135643654..f84176ad0cb9dde3d7c9a362e6cb3d555d3e56b6 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.h +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.h @@ -12,6 +12,8 @@ # if defined(ENABLE_USE_MME) +#include "UL-DCCH-Message.h" + /* Up link procedures */ # if defined(ENABLE_ITTI) diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 34e53aa74301723993d0cd6cd7b3f41f19658c72..6ba183ec48fa895ef9fe73fb02e3113fd8450a5f 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -403,6 +403,7 @@ int itti_create_task_successful(void){ #endif return 1; } + /* * later, the enb task will be moved from here */ @@ -430,7 +431,7 @@ void *eNB_app_task(void *args_p) { //note: there is an implicit relationship between the data struct and the message name message_p = itti_alloc_new_message(TASK_ENB_APP, S1AP_REGISTER_ENB); - s1ap_register_eNB = &message_p->msg.s1ap_register_eNB; + s1ap_register_eNB = &message_p->ittiMsg.s1ap_register_eNB; hash = s1ap_generate_eNB_id(); @@ -489,6 +490,7 @@ void *eNB_app_task(void *args_p) { #endif return NULL; } + void *l2l1_task(void *args_p) { // Framing variables s32 slot, last_slot, next_slot;