From d26f0b9196c8f9f3b4c9a44e7321eed4efc082a2 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 2 Feb 2024 18:45:54 +0100 Subject: [PATCH] add LOG_DDUMP() to dump a buffer in the regular tracing filter system (like PHY, MAC, ...), use it and do simple cleaning (better format) --- common/utils/LOG/log.h | 191 ++++++++++++++---- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 9 +- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 29 +-- 3 files changed, 163 insertions(+), 66 deletions(-) diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index 0004525d3c..93d8218466 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -161,16 +161,12 @@ extern "C" { {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, @@ -233,7 +229,6 @@ comp_name_t; #define MAX_LOG_DYNALLOC_COMPONENTS 20 #define MAX_LOG_COMPONENTS (MAX_LOG_PREDEF_COMPONENTS + MAX_LOG_DYNALLOC_COMPONENTS) - typedef struct { char *name; /*!< \brief string name of item */ int value; /*!< \brief integer value of mapping */ @@ -265,8 +260,6 @@ typedef struct { uint64_t dump_mask; } log_t; - - #ifdef LOG_MAIN log_t *g_log; #else @@ -365,9 +358,6 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int " level: add log level indication in log messages\n"\ " thread: add threads names in log messages\n" - - - /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* LOG global configuration parameters */ /* optname help paramflags XXXptr defXXXval type numelt */ @@ -396,41 +386,166 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int # if T_TRACER #include "T.h" /* per component, level dependent macros */ -# define LOG_E(c, x...) do { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} } while (0) -# define LOG_W(c, x...) do { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)); if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} } while (0) -# define LOG_A(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);} } while (0) -# define LOG_I(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} } while (0) -# define LOG_D(c, x...) do { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} } while (0) -# define LOG_T(c, x...) do { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} } while (0) -# define VLOG(c,l, f, args) do { if (T_stdout) { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ;} } while (0) +#define LOG_E(c, x...) \ + do { \ + T(T_LEGACY_##c##_ERROR, T_PRINTF(x)); \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= OAILOG_ERR) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ERR, x); \ + } \ + } while (0) + +#define LOG_W(c, x...) \ + do { \ + T(T_LEGACY_##c##_WARNING, T_PRINTF(x)); \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= OAILOG_WARNING) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_WARNING, x); \ + } \ + } while (0) + +#define LOG_A(c, x...) \ + do { \ + T(T_LEGACY_##c##_INFO, T_PRINTF(x)); \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= OAILOG_ANALYSIS) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ANALYSIS, x); \ + } \ + } while (0) + +#define LOG_I(c, x...) \ + do { \ + T(T_LEGACY_##c##_INFO, T_PRINTF(x)); \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= OAILOG_INFO) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_INFO, x); \ + } \ + } while (0) + +#define LOG_D(c, x...) \ + do { \ + T(T_LEGACY_##c##_DEBUG, T_PRINTF(x)); \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= OAILOG_DEBUG) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_DEBUG, x); \ + } \ + } while (0) + +#define LOG_DDUMP(c, b, s, f, x...) \ + do { \ + T(T_LEGACY_##c##_DEBUG, T_PRINTF(x)); \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= OAILOG_DEBUG) \ + log_dump(c, b, s, f, x); \ + } \ + } while (0) + +#define LOG_T(c, x...) \ + do { \ + T(T_LEGACY_##c##_TRACE, T_PRINTF(x)); \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= OAILOG_TRACE) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \ + } \ + } while (0) + +#define VLOG(c, l, f, args) \ + do { \ + if (T_stdout) { \ + if (g_log->log_component[c].level >= l) \ + vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, l, f, args); \ + } \ + } while (0) + /* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */ -# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */ +#define LOG_DUMPMSG(c, f, b, s, x...) \ + do { \ + if (g_log->dump_mask & f) \ + log_dump(c, b, s, LOG_DUMP_CHAR, x); \ + } while (0) + /* bitmask dependent macros, to isolate debugging code */ -# define LOG_DEBUGFLAG(D) (g_log->debug_mask & D) +#define LOG_DEBUGFLAG(D) (g_log->debug_mask & D) /* bitmask dependent macros, to generate debug file such as matlab file or message dump */ -# define LOG_DUMPFLAG(D) (g_log->dump_mask & D) -# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 0);} while(0)/* */ +#define LOG_DUMPFLAG(D) (g_log->dump_mask & D) + +#define LOG_M(file, vector, data, len, dec, format) \ + do { \ + write_file_matlab(file, vector, data, len, dec, format, 0); \ + } while (0) + /* define variable only used in LOG macro's */ -# define LOG_VAR(A,B) A B -# else /* T_TRACER */ -# define LOG_E(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} while (0) -# define LOG_W(c, x...) do { if( g_log->log_component[c].level >= OAILOG_WARNING ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} while (0) -# define LOG_A(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);} while (0) -# define LOG_I(c, x...) do { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} while (0) -# define LOG_D(c, x...) do { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} while (0) -# define LOG_T(c, x...) do { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} while (0) -# define VLOG(c,l, f, args) do { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ; } while (0) +#define LOG_VAR(A, B) A B -# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...) -# define LOG_DEBUGFLAG(D) (g_log->dump_mask & D) -# define LOG_DUMPFLAG(D) (g_log->debug_mask & D) -# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */ +#else /* no T_TRACER */ -# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 0);} while(0) -# define LOG_VAR(A,B) A B -# define T_ACTIVE(a) (0) -# endif /* T_TRACER */ +#define LOG_E(c, x...) \ + do { \ + if (g_log->log_component[c].level >= OAILOG_ERR) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ERR, x); \ + } while (0) + +#define LOG_W(c, x...) \ + do { \ + if (g_log->log_component[c].level >= OAILOG_WARNING) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_WARNING, x); \ + } while (0) + +#define LOG_A(c, x...) \ + do { \ + if (g_log->log_component[c].level >= OAILOG_ANALYSIS) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ANALYSIS, x); \ + } while (0) + +#define LOG_I(c, x...) \ + do { \ + if (g_log->log_component[c].level >= OAILOG_INFO) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_INFO, x); \ + } while (0) + +#define LOG_D(c, x...) \ + do { \ + if (g_log->log_component[c].level >= OAILOG_DEBUG) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_DEBUG, x); \ + } while (0) + +#define LOG_DDUMP(c, b, s, f, x...) \ + do { \ + if (g_log->log_component[c].level >= OAILOG_DEBUG) \ + log_dump(c, b, s, f, x); \ + } while (0) + +#define LOG_T(c, x...) \ + do { \ + if (g_log->log_component[c].level >= OAILOG_TRACE) \ + logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \ + } while (0) + +#define VLOG(c, l, f, args) \ + do { \ + if (g_log->log_component[c].level >= l) \ + vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, l, f, args); \ + } while (0) + +#define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...) +#define LOG_DEBUGFLAG(D) (g_log->dump_mask & D) +#define LOG_DUMPFLAG(D) (g_log->debug_mask & D) +#define LOG_DUMPMSG(c, f, b, s, x...) \ + do { \ + if (g_log->dump_mask & f) \ + log_dump(c, b, s, LOG_DUMP_CHAR, x); \ + } while (0) /* */ + +#define LOG_M(file, vector, data, len, dec, format) \ + do { \ + write_file_matlab(file, vector, data, len, dec, format, 0); \ + } while (0) + +#define LOG_VAR(A, B) A B +#define T_ACTIVE(a) (0) + +#endif /* T_TRACER */ /* avoid warnings for variables only used in LOG macro's but set outside debug section */ #define GCC_NOTUSED __attribute__((unused)) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index a5df641f4a..0ac2855c2a 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -3645,14 +3645,7 @@ void nr_ue_process_mac_pdu(NR_UE_MAC_INST_t *mac, nr_downlink_indication_t *dl_i } if (mac_len > 0) { - LOG_D(NR_MAC,"DL_SCH_LCID_CCCH (e.g. RRCSetup) with payload len %d\n", mac_len); - for (int i = 0; i < mac_subheader_len; i++) { - LOG_D(NR_MAC, "MAC header %d: 0x%x\n", i, pduP[i]); - } - for (int i = 0; i < mac_len; i++) { - LOG_D(NR_MAC, "%d: 0x%x\n", i, pduP[mac_subheader_len + i]); - } - + LOG_DDUMP(NR_MAC, (void *)pduP, mac_subheader_len + mac_len, LOG_DUMP_CHAR, "DL_SCH_LCID_CCCH (e.g. RRCSetup) payload: "); mac_rlc_data_ind(mac->ue_id, mac->ue_id, gNB_index, diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index d655fa666b..99e4ffc06e 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -2070,29 +2070,18 @@ static void nr_fill_rar(uint8_t Mod_idP, NR_RA_t *ra, uint8_t *dlsch_buffer, nfa LOG_I(NR_MAC, "rar->TCRNTI_1 = 0x%x\n", rar->TCRNTI_1); LOG_I(NR_MAC, "rar->TCRNTI_2 = 0x%x\n", rar->TCRNTI_2); #endif - - int mcs = (unsigned char) (rar->UL_GRANT_4 >> 4); - // time alloc - int Msg3_t_alloc = (unsigned char) (rar->UL_GRANT_3 & 0x0f); - // frequency alloc - int Msg3_f_alloc = (uint16_t) ((rar->UL_GRANT_3 >> 4) | (rar->UL_GRANT_2 << 4) | ((rar->UL_GRANT_1 & 0x03) << 12)); - // frequency hopping - int freq_hopping = (unsigned char) (rar->UL_GRANT_1 >> 2); - // TA command - int ta_command = rar->TA2 + (rar->TA1 << 5); - // TC-RNTI - int t_crnti = rar->TCRNTI_2 + (rar->TCRNTI_1 << 8); - - LOG_D(NR_MAC, "In %s: Transmitted RAR with t_alloc %d f_alloc %d ta_command %d mcs %d freq_hopping %d tpc_command %d csi_req %d t_crnti %x \n", + LOG_D(NR_MAC, + "In %s: Transmitted RAR with t_alloc %d f_alloc %d ta_command %d mcs %d freq_hopping %d tpc_command %d csi_req %d t_crnti " + "%x \n", __FUNCTION__, - Msg3_t_alloc, - Msg3_f_alloc, - ta_command, - mcs, - freq_hopping, + rar->UL_GRANT_3 & 0x0f, + (rar->UL_GRANT_3 >> 4) | (rar->UL_GRANT_2 << 4) | ((rar->UL_GRANT_1 & 0x03) << 12), + rar->TA2 + (rar->TA1 << 5), + rar->UL_GRANT_4 >> 4, + rar->UL_GRANT_1 >> 2, tpc_command, csi_req, - t_crnti); + rar->TCRNTI_2 + (rar->TCRNTI_1 << 8)); } void nr_schedule_RA(module_id_t module_idP,