diff --git a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c index bcbcaf4c342c843314204c5a5ea911d4cd41d3fe..08501bbf2e6420e2e8cdf058cfcb5560463f74da 100755 --- a/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c +++ b/openair2/LAYER2/RLC/UM_v9.3.0/rlc_um.c @@ -615,6 +615,14 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP) unsigned long int rlc_um_time_us; int min, sec, usec; #endif +#if defined(ENABLE_ITTI) + char message_string[7000]; + size_t message_string_size = 0; + MessageDef *msg_p; + int octet_index, index; + uint16_t data_offset; + uint16_t data_size; +#endif LOG_I(RLC, "[FRAME %05d][%s][RLC_UM][MOD %02u/%02u][RB %02d] RLC_UM_DATA_REQ size %d Bytes, BO %d , NB SDU %d current_sdu_index=%d next_sdu_index=%d\n", frameP, @@ -655,6 +663,49 @@ rlc_um_data_req (void *rlc_pP, frame_t frameP, mem_block_t *sdu_pP) rlc_p->stat_tx_pdcp_sdu += 1; rlc_p->stat_tx_pdcp_bytes += ((struct rlc_um_tx_sdu_management *) (sdu_pP->data))->sdu_size; +# if defined(ENABLE_ITTI) + data_offset = sizeof (struct rlc_um_data_req_alloc); + data_size = ((struct rlc_um_tx_sdu_management *)(sdu_pP->data))->sdu_size; + message_string_size += sprintf(&message_string[message_string_size], "Bearer : %u\n", rlc_p->rb_id); + message_string_size += sprintf(&message_string[message_string_size], "SDU size : %u\n", data_size); + + message_string_size += sprintf(&message_string[message_string_size], "\nPayload : \n"); + message_string_size += sprintf(&message_string[message_string_size], "------+-------------------------------------------------|\n"); + message_string_size += sprintf(&message_string[message_string_size], " | 0 1 2 3 4 5 6 7 8 9 a b c d e f |\n"); + message_string_size += sprintf(&message_string[message_string_size], "------+-------------------------------------------------|\n"); + for (octet_index = 0; octet_index < data_size; octet_index++) { + if ((octet_index % 16) == 0){ + if (octet_index != 0) { + message_string_size += sprintf(&message_string[message_string_size], " |\n"); + } + message_string_size += sprintf(&message_string[message_string_size], " %04d |", octet_index); + } + /* + * Print every single octet in hexadecimal form + */ + message_string_size += sprintf(&message_string[message_string_size], " %02x", (uint8_t*)(&sdu_pP->data[data_offset])[octet_index]); + /* + * Align newline and pipes according to the octets in groups of 2 + */ + } + /* + * Append enough spaces and put final pipe + */ + for (index = octet_index; index < 16; ++index) { + message_string_size += sprintf(&message_string[message_string_size], " "); + } + message_string_size += sprintf(&message_string[message_string_size], " |\n"); + + msg_p = itti_alloc_new_message_sized (rlc_p->is_enb > 0 ? TASK_RLC_ENB:TASK_RLC_UE , RLC_UM_SDU_REQ, message_string_size + sizeof (IttiMsgText)); + msg_p->ittiMsg.rlc_um_sdu_req.size = message_string_size; + memcpy(&msg_p->ittiMsg.rlc_um_sdu_req.text, message_string, message_string_size); + + if (rlc_p->is_enb) { + itti_send_msg_to_task(TASK_UNKNOWN, rlc_p->enb_module_id, msg_p); + } else { + itti_send_msg_to_task(TASK_UNKNOWN, rlc_p->ue_module_id + NB_eNB_INST, msg_p); + } +# endif } else { LOG_W(RLC, "[FRAME %05d][%s][RLC_UM][MOD %02u/%02u][RB %02d] RLC-UM_DATA_REQ input buffer full SDU garbaged\n",