From a61af35ad5d81ad3c0a71136e2a24232d165167b Mon Sep 17 00:00:00 2001 From: winckel <winckel@eurecom.fr> Date: Thu, 28 Nov 2013 15:11:02 +0000 Subject: [PATCH] Changed ITTI instance type and default and all values. Added a sub task ID identification in logs. pre-ci Ok. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4542 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- common/utils/itti/intertask_interface_types.h | 6 +- .../utils/itti_analyzer/common/itti_types.h | 6 ++ .../utils/itti_analyzer/libui/ui_callbacks.c | 16 +-- common/utils/itti_analyzer/libui/ui_filters.c | 4 +- .../itti_analyzer/libui/ui_notifications.c | 2 + .../utils/itti_analyzer/libui/ui_tree_view.c | 98 ++++++++++++++----- .../utils/itti_analyzer/libui/ui_tree_view.h | 1 + openair2/UTIL/LOG/log.c | 84 +++++++++++++++- openair2/UTIL/LOG/log.h | 10 ++ targets/SIMU/USER/oaisim.c | 8 ++ 10 files changed, 190 insertions(+), 45 deletions(-) diff --git a/common/utils/itti/intertask_interface_types.h b/common/utils/itti/intertask_interface_types.h index 929c3ecc21..43abf485eb 100644 --- a/common/utils/itti/intertask_interface_types.h +++ b/common/utils/itti/intertask_interface_types.h @@ -117,10 +117,10 @@ typedef union msg_s #undef MESSAGE_DEF } msg_t; -#define INSTANCE_DEFAULT 0 -#define INSTANCE_ALL -1 +#define INSTANCE_DEFAULT (UINT16_MAX - 1) +#define INSTANCE_ALL (UINT16_MAX) -typedef int16_t instance_t; +typedef uint16_t instance_t; typedef uint16_t MessageHeaderSize; typedef struct itti_lte_time_s diff --git a/common/utils/itti_analyzer/common/itti_types.h b/common/utils/itti_analyzer/common/itti_types.h index acacbb2cad..e360414c48 100644 --- a/common/utils/itti_analyzer/common/itti_types.h +++ b/common/utils/itti_analyzer/common/itti_types.h @@ -53,4 +53,10 @@ typedef struct { char signal_name[SIGNAL_NAME_LENGTH]; } itti_signal_header_t; + +#define INSTANCE_DEFAULT (UINT16_MAX - 1) +#define INSTANCE_ALL (UINT16_MAX) + +typedef uint16_t instance_t; + #endif diff --git a/common/utils/itti_analyzer/libui/ui_callbacks.c b/common/utils/itti_analyzer/libui/ui_callbacks.c index 99a178099e..34897f259e 100644 --- a/common/utils/itti_analyzer/libui/ui_callbacks.c +++ b/common/utils/itti_analyzer/libui/ui_callbacks.c @@ -79,20 +79,6 @@ gboolean ui_callback_on_filters_enabled(GtkToolButton *button, gpointer data) gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM(button), "Enable messages filtering"); } ui_tree_view_refilter (); - - if (ui_main_data.messages_list != NULL) - { - GtkTreePath *path_row; - - /* Get the currently selected message */ - gtk_tree_view_get_cursor (GTK_TREE_VIEW(ui_main_data.messages_list), &path_row, NULL); - if (path_row != NULL) - { - /* Center the message in the middle of the list if possible */ - gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5, - 0.0); - } - } } return TRUE; @@ -171,7 +157,7 @@ gboolean ui_callback_on_select_signal(GtkTreeSelection *selection, GtkTreeModel char label[100]; gtk_tree_model_get (model, &iter, COL_MSG_NUM, &message_number, COL_MESSAGE_ID, &message_id, - COL_FROM_TASK_ID, &origin_task_id, COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE, + COL_FROM_TASK_ID, &origin_task_id, COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE_ID, &instance, COL_BUFFER, &buffer, -1); g_debug(" Get iter %p %p", buffer_current, buffer); diff --git a/common/utils/itti_analyzer/libui/ui_filters.c b/common/utils/itti_analyzer/libui/ui_filters.c index 79537a78b0..99a04ec7c5 100644 --- a/common/utils/itti_analyzer/libui/ui_filters.c +++ b/common/utils/itti_analyzer/libui/ui_filters.c @@ -110,7 +110,7 @@ int ui_filters_search_id(ui_filter_t *filter, uint32_t value) } } - return (item); + return (-1); } static void ui_filter_set_enabled(uint8_t *enabled, ui_entry_enabled_e entry_enabled, gboolean new) @@ -214,7 +214,7 @@ static gboolean ui_item_enabled(ui_filter_t *filter, const uint32_t value) { item = ui_filters_search_id (filter, value); - if (item < filter->used) + if (item >= 0) { return (filter->items[item].enabled ? TRUE : FALSE); } diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c index 675b1c385d..a63b9a4f0b 100644 --- a/common/utils/itti_analyzer/libui/ui_notifications.c +++ b/common/utils/itti_analyzer/libui/ui_notifications.c @@ -9,6 +9,7 @@ #include <gtk/gtk.h> +#include "logs.h" #include "itti_types.h" #include "rc.h" @@ -196,6 +197,7 @@ int ui_messages_read(char *filename) read_data = 0; } ui_gtk_flush_events (); + g_message("Parsed XML definition from file \"%s\"", filename); break; case ITTI_STATISTIC_MESSAGE_TYPE: diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.c b/common/utils/itti_analyzer/libui/ui_tree_view.c index 21bc7dc23d..920832b8c6 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.c +++ b/common/utils/itti_analyzer/libui/ui_tree_view.c @@ -46,7 +46,7 @@ static gboolean ui_tree_filter_messages(GtkTreeModel *model, GtkTreeIter *iter, if (ui_filters.filters_enabled) { gtk_tree_model_get (model, iter, COL_MSG_NUM, &msg_number, COL_MESSAGE_ID, &message_id, COL_FROM_TASK_ID, - &origin_task_id, COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE, &instance, -1); + &origin_task_id, COL_TO_TASK_ID, &destination_task_id, COL_INSTANCE_ID, &instance, -1); if (msg_number != 0) { enabled = ui_filters_message_enabled (message_id, origin_task_id, destination_task_id, instance); @@ -141,12 +141,13 @@ static void ui_tree_view_init_list(GtkWidget *list) G_TYPE_STRING, // COL_MESSAGE G_TYPE_STRING, // COL_FROM_TASK G_TYPE_STRING, // COL_TO_TASK - G_TYPE_UINT, // COL_INSTANCE + G_TYPE_STRING, // COL_INSTANCE // Not displayed columns // Id of some message fields to speed-up filtering G_TYPE_UINT, // COL_MESSAGE_ID G_TYPE_UINT, // COL_FROM_TASK_ID G_TYPE_UINT, // COL_TO_TASK_ID + G_TYPE_UINT, // COL_INSTANCE_ID G_TYPE_STRING, // COL_FOREGROUND G_TYPE_STRING, // COL_BACKGROUND G_TYPE_BOOLEAN, // COL_STRIKETHROUGH @@ -169,23 +170,28 @@ static void ui_tree_view_init_list(GtkWidget *list) static void ui_tree_view_add_to_list(GtkWidget *list, const gchar *lte_time, const uint32_t message_number, const uint32_t message_id, const gchar *signal_name, const uint32_t origin_task_id, - const char *origin_task, const uint32_t destination_task_id, - const char *destination_task, uint32_t instance, gpointer buffer) + const char *origin_task_name, const uint32_t destination_task_id, + const char *destination_task_name, uint32_t instance_id, const char *instance_name, gpointer buffer) { GtkTreeIter iter; gboolean enabled; + int message_index; - enabled = ui_filters_message_enabled (message_id, origin_task_id, destination_task_id, instance); - int message_index = ui_filters_search_id (&ui_filters.messages, message_id); + g_info("ui_tree_view_add_to_list: %d %d %d %d %d", message_number, message_id, origin_task_id, destination_task_id, instance_id); + + enabled = ui_filters_message_enabled (message_id, origin_task_id, destination_task_id, instance_id); + message_index = ui_filters_search_id (&ui_filters.messages, message_id); + + g_info("ui_tree_view_add_to_list: %d %d", enabled, message_index); gtk_list_store_append (ui_store.store, &iter); gtk_list_store_set (ui_store.store, &iter, /* Columns */ COL_MSG_NUM, - message_number, COL_LTE_TIME, lte_time, COL_MESSAGE, signal_name, COL_FROM_TASK, origin_task, - COL_TO_TASK, destination_task, COL_INSTANCE, instance, COL_MESSAGE_ID, message_id, - COL_FROM_TASK_ID, origin_task_id, COL_TO_TASK_ID, destination_task_id, COL_BUFFER, buffer, - COL_FOREGROUND, ui_filters.messages.items[message_index].foreground, COL_BACKGROUND, + message_number, COL_LTE_TIME, lte_time, COL_MESSAGE, signal_name, COL_FROM_TASK, origin_task_name, + COL_TO_TASK, destination_task_name, COL_INSTANCE, instance_name, COL_MESSAGE_ID, message_id, + COL_FROM_TASK_ID, origin_task_id, COL_TO_TASK_ID, destination_task_id, COL_INSTANCE_ID, instance_id, + COL_BUFFER, buffer, COL_FOREGROUND, ui_filters.messages.items[message_index].foreground, COL_BACKGROUND, ui_filters.messages.items[message_index].background, COL_STRIKETHROUGH, !enabled, /* End of columns */ -1); @@ -371,7 +377,7 @@ int ui_tree_view_create(GtkWidget *window, GtkWidget *vbox) ui_tree_view_init_list (ui_main_data.messages_list); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(ui_main_data.messages_list), TRUE); - gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW(scrolled_window), 670); + gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW(scrolled_window), 680); gtk_paned_pack1 (GTK_PANED (hbox), scrolled_window, FALSE, TRUE); ui_main_data.text_view = ui_signal_dissect_new (hbox); @@ -395,26 +401,55 @@ int ui_tree_view_create(GtkWidget *window, GtkWidget *vbox) } int ui_tree_view_new_signal_ind(const uint32_t message_number, const gchar *lte_time, const uint32_t message_id, - const char *message_name, const uint32_t origin_task_id, const char *origin_task, - const uint32_t destination_task_id, const char *destination_task, uint32_t instance, + const char *message_name, const uint32_t origin_task_id, const char *origin_task_name, + const uint32_t destination_task_id, const char *destination_task_name, uint32_t instance_id, gpointer buffer) { - if (ui_store.instance_number < (instance + 1)) + char *instance_name = NULL; + char instance_name_buffer[10]; + + if (((instance_t) instance_id) < INSTANCE_DEFAULT) + { + if (ui_store.instance_number < (instance_id + 1)) + { + int i; + + for (i = ui_store.instance_number; i <= instance_id; i++) + { + sprintf (instance_name_buffer, "%d", i); + ui_filters_add (FILTER_INSTANCES, i, instance_name_buffer, ENTRY_ENABLED_TRUE, NULL, NULL); + } + ui_store.instance_number = (instance_id + 1); + ui_destroy_filter_menu (FILTER_INSTANCES); + } + + sprintf (instance_name_buffer, "%d", instance_id); + instance_name = instance_name_buffer; + } + else { - int i; - char name[10]; + switch ((instance_t) instance_id) + { + case INSTANCE_DEFAULT: + instance_name = "DEF"; + break; + + case INSTANCE_ALL: + instance_name = "ALL"; + break; + + default: + break; + } - for (i = ui_store.instance_number; i <= instance; i++) + if ((instance_name != NULL) && (ui_filters_search_id (&ui_filters.instances, instance_id) < 0)) { - sprintf (name, "%d", i); - ui_filters_add (FILTER_INSTANCES, i, name, ENTRY_ENABLED_TRUE, NULL, NULL); + ui_filters_add (FILTER_INSTANCES, instance_id, instance_name, ENTRY_ENABLED_TRUE, NULL, NULL); } - ui_store.instance_number = (instance + 1); - ui_destroy_filter_menu (FILTER_INSTANCES); } ui_tree_view_add_to_list (ui_main_data.messages_list, lte_time, message_number, message_id, message_name, - origin_task_id, origin_task, destination_task_id, destination_task, instance, + origin_task_id, origin_task_name, destination_task_id, destination_task_name, instance_id, instance_name, (buffer_t *) buffer); return RC_OK; @@ -430,7 +465,7 @@ void ui_tree_view_select_row(gint row) if ((ui_main_data.messages_list != NULL) && (path_row != NULL)) { - g_debug("Select row %d", row); + g_info("Select row %d", row); /* Select the message in requested row */ gtk_tree_view_set_cursor (GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, FALSE); @@ -451,7 +486,7 @@ static gboolean updateColors(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter int message_index; gtk_tree_model_get (model, iter, COL_MESSAGE_ID, &message_id, COL_FROM_TASK_ID, &origin_task_id, COL_TO_TASK_ID, - &destination_task_id, COL_INSTANCE, &instance, -1); + &destination_task_id, COL_INSTANCE_ID, &instance, -1); enabled = ui_filters_message_enabled (message_id, origin_task_id, destination_task_id, instance); message_index = ui_filters_search_id (&ui_filters.messages, message_id); @@ -471,6 +506,21 @@ void ui_tree_view_refilter() if (ui_store.store != NULL) { gtk_tree_model_foreach (GTK_TREE_MODEL(ui_store.store), updateColors, NULL); + + if (ui_main_data.messages_list != NULL) + { + GtkTreePath *path_row; + + /* Get the currently selected message */ + gtk_tree_view_get_cursor (GTK_TREE_VIEW(ui_main_data.messages_list), &path_row, NULL); + if (path_row != NULL) + { + /* Center the message in the middle of the list if possible */ + gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(ui_main_data.messages_list), path_row, NULL, TRUE, 0.5, + 0.0); + g_info("ui_tree_view_refilter: center on message"); + } + } } g_info("ui_tree_view_refilter: last message %d, %d messages displayed", ui_store.filtered_last_msg, ui_store.filtered_msg_number); diff --git a/common/utils/itti_analyzer/libui/ui_tree_view.h b/common/utils/itti_analyzer/libui/ui_tree_view.h index 3a0fd3f435..f0e39d4fb8 100644 --- a/common/utils/itti_analyzer/libui/ui_tree_view.h +++ b/common/utils/itti_analyzer/libui/ui_tree_view.h @@ -15,6 +15,7 @@ typedef enum col_type_e COL_MESSAGE_ID, COL_FROM_TASK_ID, COL_TO_TASK_ID, + COL_INSTANCE_ID, COL_FOREGROUND, COL_BACKGROUND, COL_STRIKETHROUGH, diff --git a/openair2/UTIL/LOG/log.c b/openair2/UTIL/LOG/log.c index a741841d73..2cac79553e 100755 --- a/openair2/UTIL/LOG/log.c +++ b/openair2/UTIL/LOG/log.c @@ -81,6 +81,10 @@ static int gfd; static char *log_level_highlight_start[] = {LOG_RED, LOG_RED, LOG_RED, LOG_RED, LOG_ORANGE, LOG_BLUE, "", ""}; /*!< \brief Optional start-format strings for highlighting */ static char *log_level_highlight_end[] = {LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET,LOG_RESET, "",""}; /*!< \brief Optional end-format strings for highlighting */ +#if defined(ENABLE_ITTI) +static log_instance_type_t log_instance_type; +#endif + int logInit (void) { #ifdef USER_MODE @@ -655,6 +659,7 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, #if defined(ENABLE_ITTI) if (level <= LOG_DEBUG) { + task_id_t origin_task_id = TASK_UNKNOWN; MessagesIds messages_id; MessageDef *message_p; size_t message_string_size; @@ -662,6 +667,76 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, message_string_size = log_end - log_start; +#if !defined(DISABLE_ITTI_DETECT_SUB_TASK_ID) + /* Try to identify sub task ID from log information (comp, log_instance_type) */ + switch (comp) + { + case PHY: + switch (log_instance_type) + { + case LOG_INSTANCE_ENB: + origin_task_id = TASK_PHY_ENB; + break; + + case LOG_INSTANCE_UE: + origin_task_id = TASK_PHY_UE; + break; + + default: + break; + } + break; + + case MAC: + switch (log_instance_type) + { + case LOG_INSTANCE_ENB: + origin_task_id = TASK_MAC_ENB; + break; + + case LOG_INSTANCE_UE: + origin_task_id = TASK_MAC_UE; + + default: + break; + } + break; + + case RLC: + switch (log_instance_type) + { + case LOG_INSTANCE_ENB: + origin_task_id = TASK_RLC_ENB; + break; + + case LOG_INSTANCE_UE: + origin_task_id = TASK_RLC_UE; + + default: + break; + } + break; + + case PDCP: + switch (log_instance_type) + { + case LOG_INSTANCE_ENB: + origin_task_id = TASK_PDCP_ENB; + break; + + case LOG_INSTANCE_UE: + origin_task_id = TASK_PDCP_UE; + + default: + break; + } + break; + + default: + break; + } +#endif + switch (level) { case LOG_EMERG: @@ -687,7 +762,7 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, messages_id = DEBUG_LOG; break; } - message_p = itti_alloc_new_message_sized(TASK_UNKNOWN, messages_id, message_string_size); + message_p = itti_alloc_new_message_sized(origin_task_id, messages_id, message_string_size); switch (level) { case LOG_EMERG: @@ -870,6 +945,13 @@ void logClean (void) } +#if defined(ENABLE_ITTI) +void log_set_instance_type (log_instance_type_t instance) +{ + log_instance_type = instance; +} +#endif + #ifdef LOG_TEST int main(int argc, char *argv[]) diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h index 442bcaf045..2f866c5159 100755 --- a/openair2/UTIL/LOG/log.h +++ b/openair2/UTIL/LOG/log.h @@ -323,6 +323,16 @@ extern pthread_cond_t log_notify; extern int log_shutdown; #endif +#if defined(ENABLE_ITTI) +typedef enum log_instance_type_e { + LOG_INSTANCE_UNKNOWN, + LOG_INSTANCE_ENB, + LOG_INSTANCE_UE, +} log_instance_type_t; + +void log_set_instance_type (log_instance_type_t instance); +#endif + /*--- INCLUDES ---------------------------------------------------------------*/ # include "log_if.h" /*----------------------------------------------------------------------------*/ diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 6ba183ec48..f6f15a4474 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -611,6 +611,10 @@ void *l2l1_task(void *args_p) { if(Channel_Flag==0) #endif { +#if defined(ENABLE_ITTI) + log_set_instance_type (LOG_INSTANCE_ENB); +#endif + if ((next_slot % 2) == 0) clear_eNB_transport_info (oai_emulation.info.nb_enb_local); @@ -657,6 +661,10 @@ void *l2l1_task(void *args_p) { // Call ETHERNET emulation here //emu_transport (frame, last_slot, next_slot, direction, oai_emulation.info.frame_type, ethernet_flag); +#if defined(ENABLE_ITTI) + log_set_instance_type (LOG_INSTANCE_UE); +#endif + if ((next_slot % 2) == 0) clear_UE_transport_info (oai_emulation.info.nb_ue_local); -- GitLab