diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index e8b16ca48074e0c3cc9052376dc0e39541b25491..a37ec44751e94af546a1510ac1e7266d65ae925a 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}, - {NULL, -1}}; -const mapping log_maskmap[] = LOG_MASKMAP_INIT; +/** @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; +} +/* .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/<name>.%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/<name>.%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 a7aec508259a40e259c4102bc03b4f32b5332638..249dab5580e653e1de3580bbe9f7e6c58894c331 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 bf2a9a4e8cc01e295043adb7cc254f16cf0bdeaa..4255b209560a0ba5752ebc46bc3916dbb59c7ca6 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 69d355533a18508874188afc404f087b19ec2920..5aa5e33304aeb402e0102a47bf96fd52c078c259 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" /*