From 2129ee3c9c6d5970e27caa5c994fa777c172df31 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 1 Mar 2024 13:02:03 +0100 Subject: [PATCH 1/4] remove global visibility of log variables, remove circular .h dependancy --- common/utils/LOG/log.c | 52 ++++++++----------- common/utils/LOG/log.h | 5 +- common/utils/LOG/log_extern.h | 31 ----------- common/utils/LOG/log_if.h | 34 ------------ doc/Doxyfile | 1 - executables/nr-gnb.c | 2 +- executables/softmodem-common.c | 6 +-- openair1/PHY/defs_common.h | 2 +- openair1/SIMULATION/LTE_PHY/framegen.c | 2 +- openair1/SIMULATION/LTE_PHY/pucchsim.c | 2 +- openair2/E1AP/e1ap_setup.c | 1 - openair2/ENB_APP/NB_IoT_config.c | 1 - openair2/GNB_APP/gnb_config.c | 1 - .../PDCP_v10.1.0/pdcp_sequence_manager.c | 2 +- openair2/UTIL/CLI/cli_cmd.c | 1 - openair2/UTIL/OPT/opt.h | 2 +- radio/IRIS/iris_lib.cpp | 2 +- targets/TEST/AT_COMMANDS/oaisim.c | 3 +- targets/TEST/PDCP/test_pdcp.c | 2 +- targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c | 3 +- 20 files changed, 36 insertions(+), 119 deletions(-) delete mode 100644 common/utils/LOG/log_extern.h delete mode 100644 common/utils/LOG/log_if.h diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index d2ef196e55..0d0bc144f7 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -46,7 +46,7 @@ #include #include #include -#include "common/utils/LOG/log_extern.h" +#include "common/utils/LOG/log.h" // main log variables @@ -58,18 +58,16 @@ void read_cpu_hardware (void) __attribute__ ((constructor)); void read_cpu_hardware (void) {} #endif -log_mem_cnt_t log_mem_d[2]; -int log_mem_flag = 0; +static log_mem_cnt_t log_mem_d[2]; +static int log_mem_flag = 0; volatile int log_mem_side=0; -pthread_mutex_t log_mem_lock; -pthread_cond_t log_mem_notify; -pthread_t log_mem_thread; -int log_mem_file_cnt=0; +static pthread_mutex_t log_mem_lock; +static pthread_cond_t log_mem_notify; +static pthread_t log_mem_thread; +static int log_mem_file_cnt=0; volatile int log_mem_write_flag=0; volatile int log_mem_write_side=0; -char __log_mem_filename[1024]={0}; -char * log_mem_filename = &__log_mem_filename[0]; -char logmem_filename[1024] = {0}; +static char * log_mem_filename; const mapping log_level_names[] = {{"error", OAILOG_ERR}, {"warn", OAILOG_WARNING}, @@ -935,28 +933,22 @@ static void log_output_memory(log_component_t *c, const char *file, const char * } } -int logInit_log_mem (void) +int logInit_log_mem (char * filename) { - if (log_mem_flag == 1) { - log_mem_d[0].buf_p = malloc(LOG_MEM_SIZE); - log_mem_d[0].buf_index = 0; - log_mem_d[0].enable_flag = 1; - log_mem_d[1].buf_p = malloc(LOG_MEM_SIZE); - log_mem_d[1].buf_index = 0; - log_mem_d[1].enable_flag = 1; - log_mem_side = 0; - if ((pthread_mutex_init(&log_mem_lock, NULL) != 0) || (pthread_cond_init(&log_mem_notify, NULL) != 0)) { - log_mem_d[1].enable_flag=0; - return -1; - } - pthread_create(&log_mem_thread, NULL, (void *(*)(void *))flush_mem_to_file, (void *)NULL); - } else { - log_mem_d[0].buf_p = NULL; - log_mem_d[1].buf_p = NULL; - log_mem_d[0].enable_flag = 0; - log_mem_d[1].enable_flag = 0; + log_mem_flag = 1; + log_mem_filename = filename; // in present code, the parameter is safe permanent pointer + log_mem_d[0].buf_p = malloc(LOG_MEM_SIZE); + log_mem_d[0].buf_index = 0; + log_mem_d[0].enable_flag = 1; + log_mem_d[1].buf_p = malloc(LOG_MEM_SIZE); + log_mem_d[1].buf_index = 0; + log_mem_d[1].enable_flag = 1; + log_mem_side = 0; + if ((pthread_mutex_init(&log_mem_lock, NULL) != 0) || (pthread_cond_init(&log_mem_notify, NULL) != 0)) { + log_mem_d[1].enable_flag=0; + return -1; } - + pthread_create(&log_mem_thread, NULL, (void *(*)(void *))flush_mem_to_file, (void *)NULL); printf("log init done\n"); return 0; diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index eb557ed28f..af4c0fe82f 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -272,8 +272,7 @@ extern "C" { } #endif #endif -/*--- INCLUDES ---------------------------------------------------------------*/ -# include "log_if.h" + /*----------------------------------------------------------------------------*/ int logInit (void); void logTerm (void); @@ -299,7 +298,7 @@ int register_log_component(char *name, char *fext, int compidx); #define LOG_MEM_SIZE 100*1024*1024 #define LOG_MEM_FILE "./logmem.log" void flush_mem_to_file(void); -int logInit_log_mem(void); +int logInit_log_mem(char*); void close_log_mem(void); typedef struct { diff --git a/common/utils/LOG/log_extern.h b/common/utils/LOG/log_extern.h deleted file mode 100644 index 4a253530e7..0000000000 --- a/common/utils/LOG/log_extern.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -#include "log.h" - -extern log_t *g_log; - -extern const mapping log_level_names[]; -extern const mapping log_options[]; -extern const mapping log_maskmap[]; -extern int log_mem_flag; -extern char * log_mem_filename; -extern char logmem_filename[1024]; diff --git a/common/utils/LOG/log_if.h b/common/utils/LOG/log_if.h deleted file mode 100644 index 531b9df62e..0000000000 --- a/common/utils/LOG/log_if.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file log_if.h -* \brief log interface -* \author Navid Nikaein -* \date 2009 - 2014 -* \version 0.3 -* \warning This component can be runned only in user-space -* @ingroup routing -*/ - -// LTS: kept this file for compatibility -// this file was probably a trial to separate internal functions and external ones -// but it has never been finished, most source code include directly log.h (not log_if.h) -#include "log.h" diff --git a/doc/Doxyfile b/doc/Doxyfile index c92e9fb336..53b59bb536 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -902,7 +902,6 @@ INPUT = \ @CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/vcd_signal_dumper.h \ @CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log.c \ @CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log.h \ -@CMAKE_CURRENT_SOURCE_DIR@/../common/utils/LOG/log_extern.h \ @CMAKE_CURRENT_SOURCE_DIR@/../common/utils/time_stat.h \ @CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ocp_itti/all_msg.h \ @CMAKE_CURRENT_SOURCE_DIR@/../common/utils/ocp_itti/intertask_interface.h \ diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c index 2a12126d7d..a67754e6f9 100644 --- a/executables/nr-gnb.c +++ b/executables/nr-gnb.c @@ -69,7 +69,7 @@ #include "common/ran_context.h" #include "RRC/LTE/rrc_extern.h" #include "PHY_INTERFACE/phy_interface.h" -#include "common/utils/LOG/log_extern.h" +#include "common/utils/LOG/log.h" #include "UTIL/OTG/otg_tx.h" #include "UTIL/OTG/otg_externs.h" #include "UTIL/MATH/oml.h" diff --git a/executables/softmodem-common.c b/executables/softmodem-common.c index b750092a39..c4b25d7f20 100644 --- a/executables/softmodem-common.c +++ b/executables/softmodem-common.c @@ -138,10 +138,8 @@ void get_common_options(configmodule_interface_t *cfg, uint32_t execmask) } if (logmem_filename != NULL && strlen(logmem_filename) > 0) { - log_mem_filename = &logmem_filename[0]; - log_mem_flag = 1; - printf("Enabling OPT for log save at memory %s\n",log_mem_filename); - logInit_log_mem(); + printf("Enabling OPT for log save at memory %s\n",logmem_filename); + logInit_log_mem(logmem_filename); } if (noS1) { diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h index 7098bd8c6f..ff774d7789 100644 --- a/openair1/PHY/defs_common.h +++ b/openair1/PHY/defs_common.h @@ -953,7 +953,7 @@ typedef enum {no_relay=1,unicast_relay_type1,unicast_relay_type2, multicast_rela #define NB_BANDS_MAX 8 -#include "common/utils/LOG/log_extern.h" +#include "common/utils/LOG/log.h" extern pthread_cond_t sync_cond; extern pthread_mutex_t sync_mutex; extern int sync_var; diff --git a/openair1/SIMULATION/LTE_PHY/framegen.c b/openair1/SIMULATION/LTE_PHY/framegen.c index 74f76e56b9..521df12ca1 100644 --- a/openair1/SIMULATION/LTE_PHY/framegen.c +++ b/openair1/SIMULATION/LTE_PHY/framegen.c @@ -39,7 +39,7 @@ #include "LAYER2/MAC/defs.h" #include "PHY_INTERFACE/defs.h" #include "LAYER2/MAC/vars.h" -#include "UTIL/LOG/log_extern.h" +#include "UTIL/LOG/log.h" uint16_t n_rnti = 0x1235; int n_users = 1; diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c index f88934d380..2ca891f023 100644 --- a/openair1/SIMULATION/LTE_PHY/pucchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c @@ -31,7 +31,7 @@ #include "SCHED/vars.h" #include "LAYER2/MAC/vars.h" -#include "UTIL/LOG/log_extern.h" +#include "UTIL/LOG/log.h" #include "unitary_defs.h" diff --git a/openair2/E1AP/e1ap_setup.c b/openair2/E1AP/e1ap_setup.c index 70f90b9a56..31dbf6e407 100644 --- a/openair2/E1AP/e1ap_setup.c +++ b/openair2/E1AP/e1ap_setup.c @@ -24,7 +24,6 @@ #include #include "common/utils/LOG/log.h" #include "common/utils/nr/nr_common.h" -#include "common/utils/LOG/log_extern.h" #include "assertions.h" #include "common/utils/ocp_itti/intertask_interface.h" #include "openair2/GNB_APP/gnb_paramdef.h" diff --git a/openair2/ENB_APP/NB_IoT_config.c b/openair2/ENB_APP/NB_IoT_config.c index 0bd30d86b3..35e3ade4a4 100644 --- a/openair2/ENB_APP/NB_IoT_config.c +++ b/openair2/ENB_APP/NB_IoT_config.c @@ -31,7 +31,6 @@ #include #include "log.h" -#include "log_extern.h" #include "assertions.h" #include "intertask_interface.h" #include "s1ap_eNB.h" diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 3b5d159d34..1046e24e11 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -32,7 +32,6 @@ #include "common/utils/LOG/log.h" #include "common/utils/nr/nr_common.h" -#include "common/utils/LOG/log_extern.h" #include "assertions.h" #include "oai_asn1.h" #include "executables/softmodem-common.h" diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c index 31beb3a9e0..69d355533a 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c @@ -27,7 +27,7 @@ */ #include "pdcp_sequence_manager.h" -#include "common/utils//LOG/log_if.h" +#include "common/utils//LOG/log.h" #include "pdcp_util.h" /* diff --git a/openair2/UTIL/CLI/cli_cmd.c b/openair2/UTIL/CLI/cli_cmd.c index 021c7c0b97..59f6bebfd2 100644 --- a/openair2/UTIL/CLI/cli_cmd.c +++ b/openair2/UTIL/CLI/cli_cmd.c @@ -32,7 +32,6 @@ #include "cli.h" #include "log.h" -#include "log_extern.h" extern cli_config *cli_cfg; diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h index ce890a7933..e3b8059f23 100644 --- a/openair2/UTIL/OPT/opt.h +++ b/openair2/UTIL/OPT/opt.h @@ -48,7 +48,7 @@ This header file must be included */ #endif #ifndef project_include #define project_include - #include "common/utils/LOG/log_if.h" + #include "common/utils/LOG/log.h" #include "PHY/defs_RU.h" #endif diff --git a/radio/IRIS/iris_lib.cpp b/radio/IRIS/iris_lib.cpp index 47f4d2b4ef..44cea81b4e 100644 --- a/radio/IRIS/iris_lib.cpp +++ b/radio/IRIS/iris_lib.cpp @@ -19,7 +19,7 @@ #include #include #include -#include "common/utils/LOG/log_extern.h" +#include "common/utils/LOG/log.h" #include "common_lib.h" #include diff --git a/targets/TEST/AT_COMMANDS/oaisim.c b/targets/TEST/AT_COMMANDS/oaisim.c index bbbbe3da5f..fa6a348c97 100644 --- a/targets/TEST/AT_COMMANDS/oaisim.c +++ b/targets/TEST/AT_COMMANDS/oaisim.c @@ -32,8 +32,7 @@ #include "LAYER2/RLC/AM_v9.3.0/rlc_am.h" #include "LAYER2/MAC/defs.h" #include "LAYER2/MAC/vars.h" -#include "UTIL/LOG/log_if.h" -#include "UTIL/LOG/log_extern.h" +#include "UTIL/LOG/log.h" #include "RRC/LTE/vars.h" #include "PHY_INTERFACE/vars.h" #include "UTIL/AT_COMMANDS/parser.h" diff --git a/targets/TEST/PDCP/test_pdcp.c b/targets/TEST/PDCP/test_pdcp.c index fb8259bbde..1e634fa74d 100644 --- a/targets/TEST/PDCP/test_pdcp.c +++ b/targets/TEST/PDCP/test_pdcp.c @@ -27,7 +27,7 @@ #include "MAC_INTERFACE/vars.h" #include "LAYER2/MAC/vars.h" -#include "UTIL/LOG/log_if.h" +#include "UTIL/LOG/log.h" #include "test_util.h" #include "test_pdcp.h" diff --git a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c index 7116f696dc..b60737dac8 100644 --- a/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c +++ b/targets/TEST/PDCP/with_rlc/test_pdcp_rlc.c @@ -32,8 +32,7 @@ #include "LAYER2/MAC/defs.h" #include "LAYER2/MAC/vars.h" -#include "UTIL/LOG/log_if.h" -#include "UTIL/LOG/log_extern.h" +#include "UTIL/LOG/log.h" #include "RRC/LTE/vars.h" #include "PHY_INTERFACE/vars.h" #include "LAYER2/PDCP_v10.1.0/pdcp.h" From d1002cc72962c8a0b5fb608a92dcfb6ce70414de Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 1 Mar 2024 13:40:36 +0100 Subject: [PATCH 2/4] move declarations out from log.h to a better place --- common/utils/LOG/log.c | 9 +++++++++ common/utils/LOG/log.h | 11 ----------- common/utils/utils.h | 1 + openair2/PHY_INTERFACE/phy_stub_UE.c | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index 0d0bc144f7..fa2d8b4c81 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -48,6 +48,8 @@ #include #include "common/utils/LOG/log.h" +#define LOG_MEM_SIZE 100*1024*1024 + // main log variables // Fixme: a better place to be shure it is called @@ -58,6 +60,13 @@ void read_cpu_hardware (void) __attribute__ ((constructor)); void read_cpu_hardware (void) {} #endif + +typedef struct { + char* buf_p; + int buf_index; + int enable_flag; +} log_mem_cnt_t; + static log_mem_cnt_t log_mem_d[2]; static int log_mem_flag = 0; volatile int log_mem_side=0; diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index af4c0fe82f..542ebaa73c 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -57,8 +57,6 @@ #ifdef NDEBUG #warning assert is disabled #endif -#define NUM_ELEMENTS(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0])) -#define CHECK_INDEX(ARRAY, INDEX) assert((INDEX) < NUM_ELEMENTS(ARRAY)) #ifdef __cplusplus extern "C" { @@ -295,17 +293,8 @@ int is_newline( char *str, int size); int register_log_component(char *name, char *fext, int compidx); -#define LOG_MEM_SIZE 100*1024*1024 -#define LOG_MEM_FILE "./logmem.log" -void flush_mem_to_file(void); int logInit_log_mem(char*); void close_log_mem(void); - -typedef struct { - char* buf_p; - int buf_index; - int enable_flag; -} log_mem_cnt_t; /** @}*/ diff --git a/common/utils/utils.h b/common/utils/utils.h index b1a7305cd4..3d0ae99417 100644 --- a/common/utils/utils.h +++ b/common/utils/utils.h @@ -18,6 +18,7 @@ extern "C" { #endif #define sizeofArray(a) (sizeof(a)/sizeof(*(a))) +#define CHECK_INDEX(ARRAY, INDEX) assert((INDEX) < sizeofArray(ARRAY)) #define cmax(a,b) ((a>b) ? (a) : (b)) #define cmax3(a,b,c) ((cmax(a,b)>c) ? (cmax(a,b)) : (c)) diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c index 58cd8eacf7..9b87f06ba8 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.c +++ b/openair2/PHY_INTERFACE/phy_stub_UE.c @@ -1957,7 +1957,7 @@ static int get_mcs_from_sinr(float sinr) static int get_cqi_from_mcs(void) { static const int mcs_to_cqi[] = {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15}; - assert(NUM_ELEMENTS(mcs_to_cqi) == NUM_MCS); + assert(sizeofArray(mcs_to_cqi) == NUM_MCS); int sf = 0; while(sf < NUM_NFAPI_SUBFRAME) { From bc6d1ad48d7caa7b2ae47c684a84629f9a2d79f8 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 1 Mar 2024 14:32:58 +0100 Subject: [PATCH 3/4] reduce the hot memory for LOG_x decision from 1.2MB to less than one mem page (4KB) --- common/utils/LOG/log.c | 24 +++++++++++++----------- common/utils/LOG/log.h | 15 ++++++++------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index fa2d8b4c81..e8b16ca480 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -416,8 +416,8 @@ int register_log_component(char *name, g_log->log_component[computed_compidx].name = strdup(name); g_log->log_component[computed_compidx].stream = stdout; g_log->log_component[computed_compidx].filelog = 0; - g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/.%s */ - sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext); + g_log->log_rarely_used[computed_compidx].filelog_name = malloc(strlen(name) + 16); /* /tmp/.%s */ + sprintf(g_log->log_rarely_used[computed_compidx].filelog_name, "/tmp/%s.%s", name, fext); } else { fprintf(stderr,"{LOG} %s %d Couldn't register component %s\n",__FILE__,__LINE__,name); } @@ -427,11 +427,13 @@ int register_log_component(char *name, static void unregister_all_log_components(void) { - log_component_t* lc = &g_log->log_component[0]; + log_component_t *lc = g_log->log_component; + log_component_back_t *lb = g_log->log_rarely_used; while (lc->name) { free((char *)lc->name); // defined as const, but assigned through strdup() - free(lc->filelog_name); + free(lb->filelog_name); lc++; + lb++; } } @@ -545,7 +547,7 @@ static inline int log_header(log_component_t *c, int line, int level) { - int flag= g_log->flag | c->flag; + int flag = g_log->flag; // | c->flag; char threadname[64]; if (flag & FLAG_THREAD ) { @@ -635,8 +637,8 @@ void log_dump(int component, va_list args; char *wbuf; log_component_t *c = &g_log->log_component[component]; - int flag= g_log->flag | c->flag; - + int flag = g_log->flag; // | c->flag; + switch(datatype) { case LOG_DUMP_DOUBLE: wbuf=malloc((buffsize * 10) + 64 + MAX_LOG_TOTAL); @@ -685,7 +687,7 @@ int set_log(int component, OAILOG_ERR); if ( g_log->log_component[component].level != OAILOG_DISABLE ) - g_log->log_component[component].savedlevel = g_log->log_component[component].level; + g_log->log_rarely_used[component].savedlevel = g_log->log_component[component].level; g_log->log_component[component].level = level; return 0; @@ -704,7 +706,7 @@ void set_glog_onlinelog(int enable) { for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) { if ( enable ) { - g_log->log_component[c].level = g_log->log_component[c].savedlevel; + g_log->log_component[c].level = g_log->log_rarely_used[c].savedlevel; g_log->log_component[c].vprint = vfprintf; g_log->log_component[c].print = fprintf; g_log->log_component[c].stream = stdout; @@ -741,7 +743,7 @@ void set_glog_filelog(int enable) void set_component_filelog(int comp) { if (g_log->log_component[comp].stream == NULL || g_log->log_component[comp].stream == stdout) { - g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w"); + g_log->log_component[comp].stream = fopen(g_log->log_rarely_used[comp].filelog_name, "w"); } g_log->log_component[comp].vprint = vfprintf; @@ -892,7 +894,7 @@ static void log_output_memory(log_component_t *c, const char *file, const char * len = MAX_LOG_TOTAL; } } - if ( !((g_log->flag | c->flag) & FLAG_NOCOLOR) ) { + if (!((g_log->flag /*| c->flag*/) & FLAG_NOCOLOR)) { int n = snprintf(log_buffer+len, MAX_LOG_TOTAL-len, "%s", log_level_highlight_end[level]); if (n > 0) { len += n; diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index 542ebaa73c..a7aec50825 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -235,23 +235,24 @@ typedef struct { typedef int(*log_vprint_func_t)(FILE *stream, const char *format, va_list ap ); typedef int(*log_print_func_t)(FILE *stream, const char *format, ... ); +typedef struct { + int savedlevel; + char *filelog_name; +} log_component_back_t; + typedef struct { const char *name; int level; - int savedlevel; - int flag; - int filelog; - char *filelog_name; + int filelog; FILE *stream; log_vprint_func_t vprint; - log_print_func_t print; - /* SR: make the log buffer component relative */ - // char log_buffer[MAX_LOG_TOTAL]; + log_print_func_t print; } log_component_t; typedef struct { log_component_t log_component[MAX_LOG_COMPONENTS]; + log_component_back_t log_rarely_used[MAX_LOG_COMPONENTS]; char level2string[NUM_LOG_LEVEL]; int flag; char *filelog_name; From 24d30ae78a658be798c3047cbc0975d4ae688ea2 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 1 Mar 2024 16:17:09 +0100 Subject: [PATCH 4/4] log module improvement: remove redundant declarations y using C macro, remove unused variables, remove unused log components, move information to smaller visibility --- common/utils/LOG/log.c | 231 ++++++++---------- common/utils/LOG/log.h | 174 +++++-------- common/utils/telnetsrv/telnetsrv_proccmd.c | 142 ++++++----- .../PDCP_v10.1.0/pdcp_sequence_manager.c | 2 +- 4 files changed, 244 insertions(+), 305 deletions(-) diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index e8b16ca480..a37ec44751 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -78,40 +78,87 @@ volatile int log_mem_write_flag=0; volatile int log_mem_write_side=0; static char * log_mem_filename; -const mapping log_level_names[] = {{"error", OAILOG_ERR}, +static mapping log_level_names[] = {{"error", OAILOG_ERR}, {"warn", OAILOG_WARNING}, {"analysis", OAILOG_ANALYSIS}, {"info", OAILOG_INFO}, {"debug", OAILOG_DEBUG}, {"trace", OAILOG_TRACE}, {NULL, -1}}; +mapping * log_level_names_ptr(void) +{ + return log_level_names; +} -const mapping log_options[] = {{"nocolor", FLAG_NOCOLOR}, - {"level", FLAG_LEVEL}, - {"thread", FLAG_THREAD}, - {"line_num", FLAG_FILE_LINE}, - {"function", FLAG_FUNCT}, - {"time", FLAG_TIME}, - {"thread_id", FLAG_THREAD_ID}, - {"wall_clock", FLAG_REAL_TIME}, + +/** @defgroup _log_format Defined log format + * @ingroup _macro + * @brief Macro of log formats defined by LOG + * @{*/ +static const unsigned int FLAG_NOCOLOR = 1; /*!< \brief use colors in log messages, depending on level */ +static const unsigned int FLAG_THREAD = 1 << 1; /*!< \brief display thread name in log messages */ +static const unsigned int FLAG_LEVEL = 1 << 2; /*!< \brief display log level in log messages */ +static const unsigned int FLAG_FUNCT = 1 << 3; +static const unsigned int FLAG_FILE_LINE = 1 << 4; +static const unsigned int FLAG_TIME = 1 << 5; +static const unsigned int FLAG_THREAD_ID = 1 << 6; +static const unsigned int FLAG_REAL_TIME = 1 << 7; +static const unsigned int FLAG_INITIALIZED = 1 << 8; + +/** @}*/ +static mapping log_options[] = {{"nocolor", FLAG_NOCOLOR}, + {"level", FLAG_LEVEL}, + {"thread", FLAG_THREAD}, + {"line_num", FLAG_FILE_LINE}, + {"function", FLAG_FUNCT}, + {"time", FLAG_TIME}, + {"thread_id", FLAG_THREAD_ID}, + {"wall_clock", FLAG_REAL_TIME}, + {NULL, -1}}; +mapping * log_option_names_ptr(void) +{ + return log_options; +} + +static mapping log_maskmap[] = {{"PRACH", DEBUG_PRACH}, + {"RU", DEBUG_RU}, + {"UE_PHYPROC", DEBUG_UE_PHYPROC}, + {"LTEESTIM", DEBUG_LTEESTIM}, + {"DLCELLSPEC", DEBUG_DLCELLSPEC}, + {"ULSCH", DEBUG_ULSCH}, + {"RRC", DEBUG_RRC}, + {"PDCP", DEBUG_PDCP}, + {"DFT", DEBUG_DFT}, + {"ASN1", DEBUG_ASN1}, + {"CTRLSOCKET", DEBUG_CTRLSOCKET}, + {"SECURITY", DEBUG_SECURITY}, + {"NAS", DEBUG_NAS}, + {"RLC", DEBUG_RLC}, + {"DLSCH_DECOD", DEBUG_DLSCH_DECOD}, + {"UE_TIMING", UE_TIMING}, {NULL, -1}}; +mapping * log_maskmap_ptr(void) +{ + return log_maskmap; +} -const mapping log_maskmap[] = LOG_MASKMAP_INIT; - +/* .log_format = 0x13 uncolored standard messages + * .log_format = 0x93 colored standard messages */ +/* keep white space in first position; switching it to 0 allows colors to be disabled*/ +static const char *const LOG_RED = "\033[1;31m"; /*!< \brief VT100 sequence for bold red foreground */ +static const char *const LOG_GREEN = "\033[32m"; /*!< \brief VT100 sequence for green foreground */ +static const char *const LOG_ORANGE = "\033[93m"; /*!< \brief VT100 sequence for orange foreground */ +static const char *const LOG_BLUE = "\033[34m"; /*!< \brief VT100 sequence for blue foreground */ +static const char *const LOG_CYBL = "\033[40;36m"; /*!< \brief VT100 sequence for cyan foreground on black background */ +static const char *const LOG_RESET = "\033[0m"; /*!< \brief VT100 sequence for reset (black) foreground */ static const char *const log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, LOG_GREEN, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */ + static const char *const log_level_highlight_end[] = {LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */ static void log_output_memory(log_component_t *c, const char *file, const char *func, int line, int comp, int level, const char* format,va_list args); - -int write_file_matlab(const char *fname, - const char *vname, - void *data, - int length, - int dec, - unsigned int format, - int multiVec) +int write_file_matlab(const char *fname, const char *vname, void *data, int length, int dec, unsigned int format, int multiVec) { FILE *fp=NULL; int i; @@ -281,15 +328,15 @@ int write_file_matlab(const char *fname, } /* get log parameters from configuration file */ -void log_getconfig(log_t *g_log) +void log_getconfig(log_t *g_log) { char *gloglevel = NULL; int consolelog = 0; paramdef_t logparams_defaults[] = LOG_GLOBALPARAMS_DESC; paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS]; paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS]; - paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)]; - paramdef_t logparams_dump[sizeof(log_maskmap)/sizeof(mapping)]; + paramdef_t logparams_debug[sizeofArray(log_maskmap)]; + paramdef_t logparams_dump[sizeofArray(log_maskmap)]; int ret = config_get(config_get_if(), logparams_defaults, sizeofArray(logparams_defaults), CONFIG_STRING_LOG_PREFIX); if (ret <0) { @@ -311,10 +358,10 @@ void log_getconfig(log_t *g_log) } /* build the parameter array for setting per component log level and infile options */ - memset(logparams_level, 0, sizeof(paramdef_t)*MAX_LOG_PREDEF_COMPONENTS); - memset(logparams_logfile, 0, sizeof(paramdef_t)*MAX_LOG_PREDEF_COMPONENTS); + memset(logparams_level, 0, sizeof(logparams_level)); + memset(logparams_logfile, 0, sizeof(logparams_logfile)); - for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) { + for (int i = 0; i < MAX_LOG_PREDEF_COMPONENTS; i++) { if(g_log->log_component[i].name == NULL) { g_log->log_component[i].name = malloc(17); sprintf((char *)g_log->log_component[i].name,"comp%i?",i); @@ -348,11 +395,11 @@ void log_getconfig(log_t *g_log) config_get(config_get_if(), logparams_logfile, MAX_LOG_PREDEF_COMPONENTS, CONFIG_STRING_LOG_PREFIX); /* now set the log levels and infile option, according to what we read */ - for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) { - g_log->log_component[i].level = map_str_to_int(log_level_names, *(logparams_level[i].strptr)); + for (int i = 0; i < MAX_LOG_PREDEF_COMPONENTS; i++) { + g_log->log_component[i].level = map_str_to_int(log_level_names, *logparams_level[i].strptr); set_log(i, g_log->log_component[i].level); - if (*(logparams_logfile[i].uptr) == 1) + if (*logparams_logfile[i].uptr == 1) set_component_filelog(i); } @@ -393,16 +440,10 @@ void log_getconfig(log_t *g_log) set_glog_onlinelog(consolelog); } -int register_log_component(char *name, - char *fext, - int compidx) +int register_log_component(const char *name, const char *fext, int compidx) { int computed_compidx=compidx; - if (strlen(fext) > 3) { - fext[3]=0; /* limit log file extension to 3 chars */ - } - if (compidx < 0) { /* this is not a pre-defined component */ for (int i = MAX_LOG_PREDEF_COMPONENTS; i< MAX_LOG_COMPONENTS; i++) { if (g_log->log_component[i].name == NULL) { @@ -416,8 +457,9 @@ int register_log_component(char *name, g_log->log_component[computed_compidx].name = strdup(name); g_log->log_component[computed_compidx].stream = stdout; g_log->log_component[computed_compidx].filelog = 0; - g_log->log_rarely_used[computed_compidx].filelog_name = malloc(strlen(name) + 16); /* /tmp/.%s */ - sprintf(g_log->log_rarely_used[computed_compidx].filelog_name, "/tmp/%s.%s", name, fext); + g_log->log_rarely_used[computed_compidx].filelog_name = calloc(1, strlen(name) + 16); /* /tmp/.%s */ + sprintf(g_log->log_rarely_used[computed_compidx].filelog_name, "/tmp/%s.", name); + strncat(g_log->log_rarely_used[computed_compidx].filelog_name, fext, 3); } else { fprintf(stderr,"{LOG} %s %d Couldn't register component %s\n",__FILE__,__LINE__,name); } @@ -450,7 +492,6 @@ int isLogInitDone (void) int logInit (void) { - int i; g_log = calloc(1, sizeof(log_t)); if (g_log == NULL) { @@ -458,69 +499,17 @@ int logInit (void) exit(EXIT_FAILURE); } - memset(g_log,0,sizeof(log_t)); - register_log_component("PHY","log",PHY); - register_log_component("MAC","log",MAC); - register_log_component("OPT","log",OPT); - register_log_component("RLC","log",RLC); - register_log_component("PDCP","log",PDCP); - register_log_component("RRC","log",RRC); - register_log_component("OMG","csv",OMG); - register_log_component("OTG","log",OTG); - register_log_component("OTG_LATENCY","dat",OTG_LATENCY); - register_log_component("OTG_LATENCY_BG","dat",OTG_LATENCY_BG); - register_log_component("OTG_GP","dat",OTG_GP); - register_log_component("OTG_GP_BG","dat",OTG_GP_BG); - register_log_component("OTG_JITTER","dat",OTG_JITTER); - register_log_component("PERF","",PERF); - register_log_component("OIP","",OIP); - register_log_component("OCM","log",OCM); - register_log_component("HW","",HW); - register_log_component("OSA","",OSA); - register_log_component("eRAL","",RAL_ENB); - register_log_component("mRAL","",RAL_UE); - register_log_component("ENB_APP","log",ENB_APP); - register_log_component("MCE_APP","log",MCE_APP); - register_log_component("MME_APP","log",MME_APP); - register_log_component("TMR","",TMR); - register_log_component("EMU","log",EMU); - register_log_component("USIM","txt",USIM); - register_log_component("SIM","txt",SIM); - /* following log component are used for the localization*/ - register_log_component("LOCALIZE","log",LOCALIZE); - register_log_component("NAS","log",NAS); - register_log_component("UDP","",UDP_); - register_log_component("GTPU","",GTPU); - register_log_component("SDAP","",SDAP); - register_log_component("S1AP","",S1AP); - register_log_component("F1AP","",F1AP); - register_log_component("E1AP","",E1AP); - register_log_component("M2AP","",M2AP); - register_log_component("M3AP","",M3AP); - register_log_component("SCTP","",SCTP); - register_log_component("X2AP","",X2AP); - register_log_component("LOADER","log",LOADER); - register_log_component("ASN1","log",ASN1); - register_log_component("NFAPI_VNF","log",NFAPI_VNF); - register_log_component("NFAPI_PNF","log",NFAPI_PNF); - register_log_component("GNB_APP","log",GNB_APP); - register_log_component("NR_RRC","log",NR_RRC); - register_log_component("NR_MAC","log",NR_MAC); - register_log_component("NR_MAC_DCI", "log", NR_MAC_DCI); - register_log_component("NR_PHY_DCI", "log", NR_PHY_DCI); - register_log_component("NR_PHY","log",NR_PHY); - register_log_component("NGAP","",NGAP); - register_log_component("ITTI","log",ITTI); - register_log_component("UTIL","log",UTIL); + for (int i = 0; i < MAX_LOG_PREDEF_COMPONENTS; i++) + register_log_component(comp_name[i], comp_extension[i], i); for (int i=0 ; log_level_names[i].name != NULL ; i++) - g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name - + g_log->level2string[i] = toupper(log_level_names[i].name[0]); // uppercased first letter of level name + g_log->filelog_name = "/tmp/openair.log"; log_getconfig(g_log); // set all unused component items to 0, they are for non predefined components - for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { + for (int i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { memset(&(g_log->log_component[i]),0,sizeof(log_component_t)); } @@ -547,7 +536,7 @@ static inline int log_header(log_component_t *c, int line, int level) { - int flag = g_log->flag; // | c->flag; + int flag = g_log->flag; char threadname[64]; if (flag & FLAG_THREAD ) { @@ -637,7 +626,7 @@ void log_dump(int component, va_list args; char *wbuf; log_component_t *c = &g_log->log_component[component]; - int flag = g_log->flag; // | c->flag; + int flag = g_log->flag; switch(datatype) { case LOG_DUMP_DOUBLE: @@ -681,8 +670,7 @@ int set_log(int component, int level) { /* Checking parameters */ - DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS), - component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS); + DevCheck((component >= 0) && (component < MAX_LOG_COMPONENTS), component, 0, MAX_LOG_COMPONENTS); DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_DISABLE), level, NUM_LOG_LEVEL, OAILOG_ERR); @@ -693,8 +681,6 @@ int set_log(int component, return 0; } - - void set_glog(int level) { for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) { @@ -715,6 +701,7 @@ void set_glog_onlinelog(int enable) } } } + void set_glog_filelog(int enable) { static FILE *fptr; @@ -750,6 +737,7 @@ void set_component_filelog(int comp) g_log->log_component[comp].print = fprintf; g_log->log_component[comp].filelog = 1; } + void close_component_filelog(int comp) { g_log->log_component[comp].filelog = 0; @@ -786,40 +774,19 @@ int map_str_to_int(const mapping *map, const char *str) /* map an int to a string. Takes a mapping array and a value */ char *map_int_to_str(const mapping *map, const int val) { - while (1) { - if (map->name == NULL) { - return NULL; - } - + while (map->name) { if (map->value == val) { return map->name; } - map++; } -} - -int is_newline(char *str, - int size) -{ - int i; - - for ( i = 0; i < size; i++ ) { - if ( str[i] == '\n' ) { - return 1; - } - } - - /* if we get all the way to here, there must not have been a newline! */ - return 0; + return NULL; } void logClean (void) { - int i; - if(isLogInitDone()) { - for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { + for (int i = 0; i < MAX_LOG_COMPONENTS; i++) { close_component_filelog(i); } } @@ -894,7 +861,7 @@ static void log_output_memory(log_component_t *c, const char *file, const char * len = MAX_LOG_TOTAL; } } - if (!((g_log->flag /*| c->flag*/) & FLAG_NOCOLOR)) { + if (!((g_log->flag) & FLAG_NOCOLOR)) { int n = snprintf(log_buffer+len, MAX_LOG_TOTAL-len, "%s", log_level_highlight_end[level]); if (n > 0) { len += n; @@ -948,12 +915,12 @@ int logInit_log_mem (char * filename) { log_mem_flag = 1; log_mem_filename = filename; // in present code, the parameter is safe permanent pointer - log_mem_d[0].buf_p = malloc(LOG_MEM_SIZE); - log_mem_d[0].buf_index = 0; - log_mem_d[0].enable_flag = 1; - log_mem_d[1].buf_p = malloc(LOG_MEM_SIZE); - log_mem_d[1].buf_index = 0; - log_mem_d[1].enable_flag = 1; + for (log_mem_cnt_t *ptr = log_mem_d; ptr < log_mem_d + sizeofArray(log_mem_d); ptr++) + *ptr = (log_mem_cnt_t){ + .buf_p = malloc(LOG_MEM_SIZE), + .buf_index = 0, + .enable_flag = 1, + }; log_mem_side = 0; if ((pthread_mutex_init(&log_mem_lock, NULL) != 0) || (pthread_cond_init(&log_mem_notify, NULL) != 0)) { log_mem_d[1].enable_flag=0; diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index a7aec50825..249dab5580 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -85,31 +85,6 @@ extern "C" { #define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG (OAILOG_DISABLE is not available to user as a level, so it is not included)*/ /** @}*/ -/** @defgroup _log_format Defined log format - * @ingroup _macro - * @brief Macro of log formats defined by LOG - * @{*/ - -/* .log_format = 0x13 uncolored standard messages - * .log_format = 0x93 colored standard messages */ -/* keep white space in first position; switching it to 0 allows colors to be disabled*/ -#define LOG_RED "\033[1;31m" /*!< \brief VT100 sequence for bold red foreground */ -#define LOG_GREEN "\033[32m" /*!< \brief VT100 sequence for green foreground */ -#define LOG_ORANGE "\033[93m" /*!< \brief VT100 sequence for orange foreground */ -#define LOG_BLUE "\033[34m" /*!< \brief VT100 sequence for blue foreground */ -#define LOG_CYBL "\033[40;36m" /*!< \brief VT100 sequence for cyan foreground on black background */ -#define LOG_RESET "\033[0m" /*!< \brief VT100 sequence for reset (black) foreground */ -#define FLAG_NOCOLOR 0x0001 /*!< \brief use colors in log messages, depending on level */ -#define FLAG_THREAD 0x0008 /*!< \brief display thread name in log messages */ -#define FLAG_LEVEL 0x0010 /*!< \brief display log level in log messages */ -#define FLAG_FUNCT 0x0020 -#define FLAG_FILE_LINE 0x0040 -#define FLAG_TIME 0x0100 -#define FLAG_THREAD_ID 0x0200 -#define FLAG_REAL_TIME 0x0400 -#define FLAG_INITIALIZED 0x8000 -/** @}*/ - #define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O) #define CLEAR_LOG_OPTION(O) g_log->flag = (g_log->flag & (~O)) @@ -138,92 +113,73 @@ extern "C" { #define DEBUG_DLSCH_DECOD (1<<14) #define UE_TIMING (1<<20) - -#define LOG_MASKMAP_INIT {\ - {"PRACH", DEBUG_PRACH},\ - {"RU", DEBUG_RU},\ - {"UE_PHYPROC", DEBUG_UE_PHYPROC},\ - {"LTEESTIM", DEBUG_LTEESTIM},\ - {"DLCELLSPEC", DEBUG_DLCELLSPEC},\ - {"ULSCH", DEBUG_ULSCH},\ - {"RRC", DEBUG_RRC},\ - {"PDCP", DEBUG_PDCP},\ - {"DFT", DEBUG_DFT},\ - {"ASN1", DEBUG_ASN1},\ - {"CTRLSOCKET", DEBUG_CTRLSOCKET},\ - {"SECURITY", DEBUG_SECURITY},\ - {"NAS", DEBUG_NAS},\ - {"RLC", DEBUG_RLC},\ - {"DLSCH_DECOD", DEBUG_DLSCH_DECOD},\ - {"UE_TIMING", UE_TIMING},\ - {NULL,-1}\ - } - #define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B) #define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B)) #define SET_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask | B) #define CLEAR_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask & (~B)) -typedef enum { - MIN_LOG_COMPONENTS = 0, - PHY = MIN_LOG_COMPONENTS, - MAC, - EMU, - SIM, - OMG, - OPT, - OTG, - OTG_LATENCY, - OTG_LATENCY_BG, - OTG_GP, - OTG_GP_BG, - OTG_JITTER, - RLC, - PDCP, - RRC, - NAS, - PERF, - OIP, - CLI, - OCM, - UDP_, - GTPU, - SDAP, - SPGW, - S1AP, - F1AP, - E1AP, - SCTP, - HW, - OSA, - RAL_ENB, - RAL_UE, - ENB_APP, - MCE_APP, - MME_APP, - TMR, - USIM, - LOCALIZE, - F1U, - X2AP, - M2AP, - M3AP, - NGAP, - GNB_APP, - NR_RRC, - NR_MAC, - NR_MAC_DCI, - NR_PHY_DCI, - NR_PHY, - LOADER, - ASN1, - NFAPI_VNF, - NFAPI_PNF, - ITTI, - UTIL, - MAX_LOG_PREDEF_COMPONENTS, -} comp_name_t; +#define FOREACH_COMP(COMP_DEF) \ + COMP_DEF(PHY, log) \ + COMP_DEF(MAC, log) \ + COMP_DEF(EMU, log) \ + COMP_DEF(SIM, txt) \ + COMP_DEF(OMG, csv) \ + COMP_DEF(OPT, log) \ + COMP_DEF(OTG, log) \ + COMP_DEF(OTG_LATENCY, dat) \ + COMP_DEF(OTG_LATENCY_BG, dat) \ + COMP_DEF(OTG_GP, dat) \ + COMP_DEF(OTG_GP_BG, dat) \ + COMP_DEF(OTG_JITTER, dat) \ + COMP_DEF(RLC, ) \ + COMP_DEF(PDCP, ) \ + COMP_DEF(RRC, ) \ + COMP_DEF(NAS, log) \ + COMP_DEF(OIP, ) \ + COMP_DEF(CLI, ) \ + COMP_DEF(OCM, ) \ + COMP_DEF(GTPU, ) \ + COMP_DEF(SDAP, ) \ + COMP_DEF(SPGW, ) \ + COMP_DEF(S1AP, ) \ + COMP_DEF(F1AP, ) \ + COMP_DEF(E1AP, ) \ + COMP_DEF(SCTP, ) \ + COMP_DEF(HW, ) \ + COMP_DEF(OSA, ) \ + COMP_DEF(ENB_APP, log) \ + COMP_DEF(MCE_APP, log) \ + COMP_DEF(MME_APP, log) \ + COMP_DEF(TMR, ) \ + COMP_DEF(USIM, log) \ + COMP_DEF(F1U, ) \ + COMP_DEF(X2AP, ) \ + COMP_DEF(M2AP, ) \ + COMP_DEF(M3AP, ) \ + COMP_DEF(NGAP, ) \ + COMP_DEF(GNB_APP, log) \ + COMP_DEF(NR_RRC, log) \ + COMP_DEF(NR_MAC, log) \ + COMP_DEF(NR_MAC_DCI, log) \ + COMP_DEF(NR_PHY_DCI, log) \ + COMP_DEF(NR_PHY, log) \ + COMP_DEF(LOADER, log) \ + COMP_DEF(ASN1, log) \ + COMP_DEF(NFAPI_VNF, log) \ + COMP_DEF(NFAPI_PNF, log) \ + COMP_DEF(ITTI, log) \ + COMP_DEF(UTIL, log) \ + COMP_DEF(MAX_LOG_PREDEF_COMPONENTS, ) + +#define COMP_ENUM(comp, file_extension) comp, +typedef enum { FOREACH_COMP(COMP_ENUM) } comp_name_t; + +#define COMP_TEXT(comp, file_extension) #comp, +static const char *const comp_name[] = {FOREACH_COMP(COMP_TEXT)}; + +#define COMP_EXTENSION(comp, file_extension) #file_extension, +static const char *const comp_extension[] = {FOREACH_COMP(COMP_EXTENSION)}; #define MAX_LOG_DYNALLOC_COMPONENTS 20 #define MAX_LOG_COMPONENTS (MAX_LOG_PREDEF_COMPONENTS + MAX_LOG_DYNALLOC_COMPONENTS) @@ -242,7 +198,7 @@ typedef struct { typedef struct { const char *name; - int level; + int level; int filelog; FILE *stream; log_vprint_func_t vprint; @@ -282,6 +238,9 @@ void log_dump(int component, void *buffer, int buffsize,int datatype, const char int set_log(int component, int level); void set_glog(int level); +mapping * log_level_names_ptr(void); +mapping * log_option_names_ptr(void); +mapping * log_maskmap_ptr(void); void set_glog_onlinelog(int enable); void set_glog_filelog(int enable); void set_component_filelog(int comp); @@ -290,9 +249,8 @@ void set_component_consolelog(int comp); int map_str_to_int(const mapping *map, const char *str); char *map_int_to_str(const mapping *map, const int val); void logClean (void); -int is_newline( char *str, int size); -int register_log_component(char *name, char *fext, int compidx); +int register_log_component(const char *name, const char *fext, int compidx); int logInit_log_mem(char*); void close_log_mem(void); diff --git a/common/utils/telnetsrv/telnetsrv_proccmd.c b/common/utils/telnetsrv/telnetsrv_proccmd.c index bf2a9a4e8c..4255b20956 100644 --- a/common/utils/telnetsrv/telnetsrv_proccmd.c +++ b/common/utils/telnetsrv/telnetsrv_proccmd.c @@ -256,6 +256,9 @@ void print_threads(char *buf, int debug, telnet_printfunc_t prnt) int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfunc_t prnt) { webdatadef_t *logsdata = (webdatadef_t *)data; + const mapping *const log_level_names = log_level_names_ptr(); + const mapping *const log_options = log_option_names_ptr(); + const mapping *log_maskmap = log_maskmap_ptr(); if (strncmp(cmdbuff, "set", 3) == 0) { telnet_printfunc_t printfunc = (prnt != NULL) ? prnt : (telnet_printfunc_t)printf; if (strcasestr(cmdbuff, "loglvl") != NULL) { @@ -274,7 +277,7 @@ int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfun logsdata->lines[0].val[0], logsdata->lines[0].val[1], enabled ? "enabled" : "disabled", - loginfile ? g_log->log_component[logsdata->numlines].filelog_name : "stdout"); + loginfile ? g_log->log_rarely_used[logsdata->numlines].filelog_name : "stdout"); } if (strcasestr(cmdbuff, "logopt") != NULL) { int optbit = map_str_to_int(log_options, logsdata->lines[0].val[0]); @@ -329,12 +332,14 @@ int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfun snprintf(logsdata->columns[3].coltitle, TELNET_CMD_MAXSIZE, "in file"); logsdata->columns[3].coltype = TELNET_CHECKVAL_BOOL; - for (int i = MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { + for (int i = 0; i < MAX_LOG_COMPONENTS; i++) { if (g_log->log_component[i].name != NULL) { logsdata->numlines++; logsdata->lines[i].val[0] = (char *)(g_log->log_component[i].name); - logsdata->lines[i].val[1] = map_int_to_str(log_level_names, (g_log->log_component[i].level >= 0) ? g_log->log_component[i].level : g_log->log_component[i].savedlevel); + logsdata->lines[i].val[1] = map_int_to_str( + log_level_names, + (g_log->log_component[i].level >= 0) ? g_log->log_component[i].level : g_log->log_rarely_used[i].savedlevel); logsdata->lines[i].val[2] = (g_log->log_component[i].level >= 0) ? "true" : "false"; logsdata->lines[i].val[3] = (g_log->log_component[i].filelog > 0) ? "true" : "false"; } @@ -353,7 +358,7 @@ int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfun for (int i = 0; log_maskmap[i].name != NULL; i++) { logsdata->numlines++; - logsdata->lines[i].val[0] = log_maskmap[i].name; + logsdata->lines[i].val[0] = (char *)log_maskmap[i].name; logsdata->lines[i].val[1] = (g_log->debug_mask & log_maskmap[i].value) ? "true" : "false"; logsdata->lines[i].val[2] = (g_log->dump_mask & log_maskmap[i].value) ? "true" : "false"; } @@ -370,7 +375,7 @@ int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfun for (int i = 0; log_options[i].name != NULL; i++) { logsdata->numlines++; - logsdata->lines[i].val[0] = log_options[i].name; + logsdata->lines[i].val[0] = (char *)log_options[i].name; logsdata->lines[i].val[1] = (g_log->flag & log_options[i].value) ? "true" : "false"; } } @@ -395,17 +400,23 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt) } if (strcasestr(buf,"loglvl") != NULL) { prnt("\n component level enabled output\n"); - for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { - if (g_log->log_component[i].name != NULL) { - prnt("%02i %17.17s:%10.10s %s %s\n",i ,g_log->log_component[i].name, - map_int_to_str(log_level_names,(g_log->log_component[i].level>=0)?g_log->log_component[i].level:g_log->log_component[i].savedlevel), - ((g_log->log_component[i].level>=0)?"Y":"N"), - ((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout")); - } + const mapping *const log_level_names = log_level_names_ptr(); + for (int i = 0; i < MAX_LOG_COMPONENTS; i++) { + if (g_log->log_component[i].name != NULL) { + prnt("%02i %17.17s:%10.10s %s %s\n", + i, + g_log->log_component[i].name, + map_int_to_str( + log_level_names, + (g_log->log_component[i].level >= 0) ? g_log->log_component[i].level : g_log->log_rarely_used[i].savedlevel), + ((g_log->log_component[i].level >= 0) ? "Y" : "N"), + ((g_log->log_component[i].filelog > 0) ? g_log->log_rarely_used[i].filelog_name : "stdout")); + } } } if (strcasestr(buf,"logopt") != NULL) { prnt("\n option enabled\n"); + const mapping *const log_options = log_option_names_ptr(); for (int i=0; log_options[i].name != NULL; i++) { prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name, ((g_log->flag & log_options[i].value)?"Y":"N") ); @@ -413,6 +424,7 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt) } if (strcasestr(buf,"dbgopt") != NULL) { prnt("\n module debug dumpfile\n"); + const mapping *log_maskmap = log_maskmap_ptr(); for (int i=0; log_maskmap[i].name != NULL ; i++) { prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name, ((g_log->debug_mask & log_maskmap[i].value)?"Y":"N"), @@ -528,7 +540,9 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); if (debug > 0) prnt( "proccmd_log received %s\n s=%i sub command %s\n",buf,s,((logsubcmd==NULL)?"":logsubcmd)); - + const mapping *const log_level_names = log_level_names_ptr(); + const mapping *const log_options = log_option_names_ptr(); + const mapping *log_maskmap = log_maskmap_ptr(); if (s == 1 && logsubcmd != NULL) { if (strcasestr(logsubcmd,"online") != NULL) { if (strcasestr(buf,"noonline") != NULL) { @@ -540,21 +554,21 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); } } else if (strcasestr(logsubcmd,"show") != NULL) { - prnt("Available log levels: \n "); - for (int i=0; log_level_names[i].name != NULL; i++) - prnt("%s ",log_level_names[i].name); - prnt("\n\n"); - prnt("Available display options: \n "); - for (int i=0; log_options[i].name != NULL; i++) - prnt("%s ",log_options[i].name); - prnt("\n\n"); - prnt("Available debug and dump options: \n "); - for (int i=0; log_maskmap[i].name != NULL; i++) - prnt("%s ",log_maskmap[i].name); - prnt("\n\n"); - proccmd_show("loglvl",debug,prnt); - proccmd_show("logopt",debug,prnt); - proccmd_show("dbgopt",debug,prnt); + prnt("Available log levels: \n "); + for (int i = 0; log_level_names[i].name != NULL; i++) + prnt("%s ", log_level_names[i].name); + prnt("\n\n"); + prnt("Available display options: \n "); + for (int i = 0; log_options[i].name != NULL; i++) + prnt("%s ", log_options[i].name); + prnt("\n\n"); + prnt("Available debug and dump options: \n "); + for (int i = 0; log_maskmap[i].name != NULL; i++) + prnt("%s ", log_maskmap[i].name); + prnt("\n\n"); + proccmd_show("loglvl", debug, prnt); + proccmd_show("logopt", debug, prnt); + proccmd_show("dbgopt", debug, prnt); } else if (strcasestr(logsubcmd,"help") != NULL) { prnt(PROCCMD_LOG_HELP_STRING); @@ -569,40 +583,40 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); l=sscanf(logsubcmd,"%m[^'_']_%ms",&logparam,&opt); if (l == 2 && strcmp(logparam,"print") == 0){ - optbit=map_str_to_int(log_options,opt); - if (optbit < 0) { - prnt("option %s unknown\n",opt); - } else { - if (idx1 > 0) - SET_LOG_OPTION(optbit); - else - CLEAR_LOG_OPTION(optbit); - proccmd_show("logopt",debug,prnt); - } + optbit = map_str_to_int(log_options, opt); + if (optbit < 0) { + prnt("option %s unknown\n", opt); + } else { + if (idx1 > 0) + SET_LOG_OPTION(optbit); + else + CLEAR_LOG_OPTION(optbit); + proccmd_show("logopt", debug, prnt); + } } else if (l == 2 && strcmp(logparam,"debug") == 0){ - optbit=map_str_to_int(log_maskmap,opt); - if (optbit < 0) { - prnt("module %s unknown\n",opt); - } else { - if (idx1 > 0) - SET_LOG_DEBUG(optbit); - else - CLEAR_LOG_DEBUG(optbit); - proccmd_show("dbgopt",debug,prnt); - } + optbit = map_str_to_int(log_maskmap, opt); + if (optbit < 0) { + prnt("module %s unknown\n", opt); + } else { + if (idx1 > 0) + SET_LOG_DEBUG(optbit); + else + CLEAR_LOG_DEBUG(optbit); + proccmd_show("dbgopt", debug, prnt); + } } else if (l == 2 && strcmp(logparam,"dump") == 0){ - optbit=map_str_to_int(log_maskmap,opt); - if (optbit < 0) { - prnt("module %s unknown\n",opt); - } else { - if (idx1 > 0) - SET_LOG_DUMP(optbit); - else - CLEAR_LOG_DUMP(optbit); - proccmd_show("dump", debug, prnt); - } + optbit = map_str_to_int(log_maskmap, opt); + if (optbit < 0) { + prnt("module %s unknown\n", opt); + } else { + if (idx1 > 0) + SET_LOG_DUMP(optbit); + else + CLEAR_LOG_DUMP(optbit); + proccmd_show("dump", debug, prnt); + } } if (logparam != NULL) free(logparam); if (opt != NULL) free(opt); @@ -620,11 +634,11 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr)); if (l ==2 ) { if (strcmp(logparam,"level") == 0) { - level=map_str_to_int(log_level_names,tmpstr); - if (level < 0) { - prnt("level %s unknown\n",tmpstr); - level=OAILOG_DISABLE - 1; - } + level = map_str_to_int(log_level_names, tmpstr); + if (level < 0) { + prnt("level %s unknown\n", tmpstr); + level = OAILOG_DISABLE - 1; + } } else { prnt("%s%s unknown log sub command \n",logparam, tmpstr); } @@ -650,7 +664,7 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2); if (level >= OAILOG_DISABLE) set_log(i, level); else if ( enable == 1) - set_log(i,g_log->log_component[i].savedlevel); + set_log(i, g_log->log_rarely_used[i].savedlevel); else if ( filelog == 1 ) { set_component_filelog(i); } else if ( filelog == 0 ) { diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c index 69d355533a..5aa5e33304 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_sequence_manager.c @@ -27,7 +27,7 @@ */ #include "pdcp_sequence_manager.h" -#include "common/utils//LOG/log.h" +#include "common/utils/LOG/log.h" #include "pdcp_util.h" /*