Merge remote-tracking branch 'origin/remove-legacy-compile-option' into integration_2025_w04 (!3198)

A user on the mailing list was confused by a wrong flag in CMakeList.txt
so, I remove this and a set of others that are known not working.
This commit is contained in:
Jaroslava Fiedlerova
2025-01-23 17:48:42 +01:00
42 changed files with 310 additions and 759 deletions
+3 -33
View File
@@ -260,7 +260,6 @@ endif()
# Debug related options
#########################################
add_boolean_option(DEBUG_ASN1 False "Enable ASN1 debug logs" OFF)
# asn1c skeletons have hardcoded this flag to make customized debug logs
# OAI uses this feature to re-use OAI LOG_I(ASN1, ...)
# see common/utils/config.h
@@ -494,7 +493,6 @@ include_directories ("${OPENAIR_DIR}/radio/COMMON")
add_boolean_option(UE_EXPANSION False "enable UE_EXPANSION with max 256 UE" ON)
add_boolean_option(PHY_TX_THREAD False "enable UE_EXPANSION with max 256 UE" ON)
add_boolean_option(PRE_SCD_THREAD False "enable UE_EXPANSION with max 256 UE" ON)
add_boolean_option(UESIM_EXPANSION False "enable UESIM_EXPANSION with max 256 UE" ON)
##########################
# SCHEDULING/REAL-TIME/PERF options
@@ -506,20 +504,15 @@ add_boolean_option(ENABLE_VCD_FIFO False "time measurements of proc cal
##########################
# PHY options
##########################
add_boolean_option(LOCALIZATION False "???" ON)
add_integer_option(MAX_NUM_CCs 1 "????" ON)
add_integer_option(MAX_NUM_CCs 1 "Carrier component data arrays size (oai doesn't support carrier aggreagtion for now)" ON)
add_boolean_option(SMBV False "Rohde&Schwarz SMBV100A vector signal generator" ON)
add_boolean_option(DEBUG_PHY False "Enable PHY layer debugging options" ON)
add_boolean_option(DEBUG_PHY_PROC False "Enable debugging of PHY layer procedures" ON)
add_boolean_option(MEX False "Enabling compilation with mex" ON)
##########################
# NAS LAYER OPTIONS
##########################
add_boolean_option(ENABLE_NAS_UE_LOGGING True "????" ON)
add_boolean_option(NAS_BUILT_IN_UE True "UE NAS layer present in this executable" ON)
add_boolean_option(NAS_UE True "NAS UE INSTANCE (<> NAS_MME)" ON)
##########################
# RRC LAYER OPTIONS
@@ -897,6 +890,7 @@ set(PHY_SRC_UE
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/ulsch_coding.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/rar_tools_ue.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/initial_sync.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep.c
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_mbsfn.c
${OPENAIR1_DIR}/PHY/MODULATION/ul_7_5_kHz_ue.c
@@ -1026,8 +1020,6 @@ if (${SMBV})
set(PHY_SRC "${PHY_SRC} ${OPENAIR1_DIR}/PHY/TOOLS/smbv.c")
endif (${SMBV})
set(PHY_SRC_UE ${PHY_SRC_UE} ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c)
add_library(PHY_COMMON ${PHY_SRC_COMMON})
target_link_libraries(PHY_COMMON PRIVATE shlib_loader)
add_dependencies(PHY_COMMON dfts)
@@ -1063,28 +1055,6 @@ target_link_libraries(PHY_NR_UE PRIVATE asn1_nr_rrc_hdrs nr_phy_common nr_common
add_library(PHY_RU ${PHY_SRC_RU})
target_link_libraries(PHY_RU PRIVATE asn1_lte_rrc_hdrs UTIL)
#Library for mex functions
#########################3
set(PHY_MEX_UE
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
${OPENAIR1_DIR}/PHY/TOOLS/log2_approx.c
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/lte_mcs.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/get_pmi.c
${OPENAIR1_DIR}/PHY/TOOLS/dB_routines.c
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/pmch_common.c
${OPENAIR1_DIR}/PHY/TOOLS/cadd_vv.c
${OPENAIR1_DIR}/PHY/TOOLS/cmult_sv.c
${OPENAIR1_DIR}/PHY/TOOLS/cmult_vv.c
${OPENAIR1_DIR}/PHY/TOOLS/signal_energy.c
${OPENAIR1_DIR}/PHY/TOOLS/simde_operations.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c
)
add_library(PHY_MEX ${PHY_MEX_UE})
target_link_libraries(PHY_MEX PRIVATE asn1_lte_rrc_hdrs UTIL)
#Layer 2 library
#####################
set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC)
@@ -2214,7 +2184,7 @@ if (${T_TRACER})
SECURITY SCHED_LIB SCHED_NR_LIB SCHED_RU_LIB SCHED_UE_LIB SCHED_NR_UE_LIB default_sched remote_sched RAL
NFAPI_LIB NFAPI_PNF_LIB NFAPI_VNF_LIB NFAPI_USER_LIB
MISC_NFAPI_LTE_LIB MISC_NFAPI_NR_LIB
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU PHY_MEX
PHY_COMMON PHY PHY_UE PHY_NR PHY_NR_COMMON PHY_NR_UE PHY_RU
L2 L2_LTE L2_NR L2_LTE_NR L2_UE NR_L2_UE L2_UE_LTE_NR MAC_NR_COMMON MAC_UE_NR ngap
CN_UTILS GTPV1U SCTP_CLIENT MME_APP LIB_NAS_UE NB_IoT SIMU OPENAIR0_LIB
dfts config_internals nr_common)
-4
View File
@@ -105,11 +105,7 @@ add_definitions("-DFIRMWARE_VERSION=\"${FIRMWARE_VERSION}\"")
##########################
# NAS LAYER OPTIONS
##########################
add_boolean_option(ENABLE_NAS_UE_LOGGING True "????")
add_boolean_option(NAS_BUILT_IN_EPC False "MME NAS layer not present in this executable")
add_boolean_option(NAS_BUILT_IN_UE False "UE NAS layer present in this executable")
add_boolean_option(NAS_UE True "NAS UE INSTANCE (<> NAS_MME)")
add_boolean_option(NAS_MME False "NAS_UE and NAS_MME are incompatible options")
################################################################################
# SECU LIB
+4
View File
@@ -228,6 +228,10 @@ It can also be retrieved when using the telnet server, as explained [below](###
| `<flag>_debug` | `boolean` | 0 = false | Triggers the activation of conditional code identified by the specified flag.
| `<flag>_dump` | `boolean` | 0 = false| Triggers buffer dump, on the console in text form or in a file in matlab format, depending on the developper choice and forcasted usage|
Example: dump all ASN.1 structures during operation with
`--log_config.ASN1_debug`. To get a list of all flag/dump options, provide an
invalid flag, e.g. `--log_config.HELP_debug`.
### Using the configuration file to configure the logging facility
The following example sets all components log level to info, exept for hw,phy,mac,rlc,pdcp,rrc which log levels are set to error or warning.
```bash
+37 -50
View File
@@ -120,28 +120,6 @@ 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*/
@@ -327,6 +305,9 @@ int write_file_matlab(const char *fname, const char *vname, void *data, int leng
return 0;
}
#define FLAG_SETDEBUG(flag) g_log->debug_mask.DEBUG_##flag = *logparams_debug[i++].uptr;
#define FLAG_SETDUMP(flag) g_log->dump_mask.DEBUG_##flag = *logparams_dump[i++].uptr;
/* get log parameters from configuration file */
void log_getconfig(log_t *g_log)
{
@@ -335,8 +316,6 @@ void log_getconfig(log_t *g_log)
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[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) {
@@ -404,37 +383,45 @@ void log_getconfig(log_t *g_log)
}
/* build then read the debug and dump parameter array */
for (int i=0; log_maskmap[i].name != NULL ; i++) {
sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
sprintf(logparams_dump[i].optname, LOG_CONFIG_DUMP_FORMAT, log_maskmap[i].name);
logparams_debug[i].defuintval = 0;
logparams_debug[i].type = TYPE_UINT;
logparams_debug[i].paramflags = PARAMFLAG_BOOL;
logparams_debug[i].uptr = NULL;
logparams_debug[i].chkPptr = NULL;
logparams_debug[i].numelt = 0;
logparams_dump[i].defuintval = 0;
logparams_dump[i].type = TYPE_UINT;
logparams_dump[i].paramflags = PARAMFLAG_BOOL;
logparams_dump[i].uptr = NULL;
logparams_dump[i].chkPptr = NULL;
logparams_dump[i].numelt = 0;
int sz = 0;
for (const char *const *ptr = flag_name; strlen(*ptr) > 1; ptr++)
sz++;
paramdef_t logparams_debug[sz];
paramdef_t logparams_dump[sz];
for (int i = 0; i < sz; i++) {
logparams_debug[i] = (paramdef_t){
.type = TYPE_UINT,
.paramflags = PARAMFLAG_BOOL,
};
sprintf(logparams_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, flag_name[i]);
logparams_dump[i] = (paramdef_t){.type = TYPE_UINT, .paramflags = PARAMFLAG_BOOL};
sprintf(logparams_dump[i].optname, LOG_CONFIG_DUMP_FORMAT, flag_name[i]);
}
config_get(config_get_if(), logparams_debug, sizeofArray(log_maskmap) - 1, CONFIG_STRING_LOG_PREFIX);
config_get(config_get_if(), logparams_dump, sizeofArray(log_maskmap) - 1, CONFIG_STRING_LOG_PREFIX);
config_get(config_get_if(), logparams_debug, sz, CONFIG_STRING_LOG_PREFIX);
config_get(config_get_if(), logparams_dump, sz, CONFIG_STRING_LOG_PREFIX);
if (config_check_unknown_cmdlineopt(config_get_if(), CONFIG_STRING_LOG_PREFIX) > 0)
bool old = CONFIG_ISFLAGSET(CONFIG_NOABORTONCHKF);
CONFIG_SETRTFLAG(CONFIG_NOABORTONCHKF);
if (config_check_unknown_cmdlineopt(config_get_if(), CONFIG_STRING_LOG_PREFIX) > 0) {
printf("Existing log_config options:\n");
printf(" Boolean options:\n");
for (int i = 0; i < sz; i++)
printf(" %s, \t%s\n", logparams_debug[i].optname, logparams_dump[i].optname);
printf(" Log level per module (");
for (int i = 0; log_level_names[i].name != NULL; i++)
printf("%s ", log_level_names[i].name);
printf(")\n");
for (int i = 0; i < MAX_LOG_PREDEF_COMPONENTS; i++)
printf(" %s\n", logparams_level[i].optname);
exit(1);
/* set the debug mask according to the debug parameters values */
for (int i=0; log_maskmap[i].name != NULL ; i++) {
if (*(logparams_debug[i].uptr) )
g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value;
if (*(logparams_dump[i].uptr) )
g_log->dump_mask = g_log->dump_mask | log_maskmap[i].value;
}
if (!old)
CONFIG_CLEARRTFLAG(CONFIG_NOABORTONCHKF);
int i = 0;
FOREACH_FLAG(FLAG_SETDEBUG);
i = 0;
FOREACH_FLAG(FLAG_SETDUMP);
/* log globally enabled/disabled */
set_glog_onlinelog(consolelog);
+60 -30
View File
@@ -88,7 +88,7 @@ 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)*/
/** @}*/
#define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O)
#define SET_LOG_OPTION(O) g_log->flag = (g_log->flag | O)
#define CLEAR_LOG_OPTION(O) g_log->flag = (g_log->flag & (~O))
/** @defgroup macros to identify a debug entity
@@ -99,28 +99,37 @@ extern "C" {
* server.
* @brief
* @{*/
#define DEBUG_PRACH (1<<0)
#define DEBUG_RU (1<<1)
#define DEBUG_UE_PHYPROC (1<<2)
#define DEBUG_LTEESTIM (1<<3)
#define DEBUG_DLCELLSPEC (1<<4)
#define DEBUG_ULSCH (1<<5)
#define DEBUG_RRC (1<<6)
#define DEBUG_PDCP (1<<7)
#define DEBUG_DFT (1<<8)
#define DEBUG_ASN1 (1<<9)
#define DEBUG_CTRLSOCKET (1<<10)
#define DEBUG_SECURITY (1<<11)
#define DEBUG_NAS (1<<12)
#define DEBUG_RLC (1<<13)
#define DEBUG_DLSCH_DECOD (1<<14)
#define UE_TIMING (1<<20)
#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 FOREACH_FLAG(FLAG_DEF) \
FLAG_DEF(PRACH) \
FLAG_DEF(UE_PHYPROC) \
FLAG_DEF(LTEESTIM) \
FLAG_DEF(DLCELLSPEC) \
FLAG_DEF(ULSCH) \
FLAG_DEF(RRC) \
FLAG_DEF(PDCP) \
FLAG_DEF(DFT) \
FLAG_DEF(ASN1) \
FLAG_DEF(CTRLSOCKET) \
FLAG_DEF(SECURITY) \
FLAG_DEF(NAS) \
FLAG_DEF(DLSCH_DECOD) \
FLAG_DEF(UE_TIMING) \
FLAG_DEF(F1AP)
#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))
#define FLAG_BITF(flag) uint64_t DEBUG_##flag: 1;
typedef struct {
FOREACH_FLAG(FLAG_BITF)
} debug_flags_t;
#define FLAG_TEXT(flag) #flag,
static const char *const flag_name[] = {FOREACH_FLAG(FLAG_TEXT) ""};
#define SET_LOG_DEBUG(B) g_log->debug_mask.B = true
#define CLEAR_LOG_DEBUG(B) g_log->debug_mask.B = false
#define SET_LOG_DUMP(B) g_log->dump_mask.B = true
#define CLEAR_LOG_DUMP(B) g_log->dump_mask.B = false
#define FOREACH_COMP(COMP_DEF) \
COMP_DEF(PHY, log) \
@@ -215,8 +224,8 @@ typedef struct {
char level2string[NUM_LOG_LEVEL];
int flag;
char *filelog_name;
uint64_t debug_mask;
uint64_t dump_mask;
debug_flags_t debug_mask;
debug_flags_t dump_mask;
} log_t;
#ifdef LOG_MAIN
@@ -230,7 +239,28 @@ extern "C" {
}
#endif
#endif
#define FLAG_DEBUG_SET(flag) \
if (strcmp(name, #flag) == 0) { \
g_log->debug_mask.DEBUG_##flag = val; \
return true; \
};
static inline bool set_log_debug(char *name, bool val)
{
FOREACH_FLAG(FLAG_DEBUG_SET);
printf("Error: setting log debug of %s option, not existing\n", name);
return false;
}
#define FLAG_DUMP_SET(flag) \
if (strcmp(name, #flag) == 0) { \
g_log->dump_mask.DEBUG_##flag = val; \
return true; \
};
static inline bool set_log_dump(char *name, bool val)
{
FOREACH_FLAG(FLAG_DUMP_SET);
printf("Error: setting log dump of %s option, not existing\n", name);
return false;
}
/*----------------------------------------------------------------------------*/
int logInit (void);
void logTerm (void);
@@ -418,15 +448,15 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
/* 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) \
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_DUMPFLAG(D) (g_log->dump_mask.D)
#define LOG_M(file, vector, data, len, dec, format) \
do { \
@@ -529,11 +559,11 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
} while (0)
#define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
#define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
#define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
#define LOG_DEBUGFLAG(D) (g_log->debug_mask.D)
#define LOG_DUMPFLAG(D) (g_log->dump_mask.D)
#define LOG_DUMPMSG(c, f, b, s, x...) \
do { \
if (g_log->dump_mask & f) \
if (g_log->dump_mask.f) \
log_dump(c, b, s, LOG_DUMP_CHAR, x); \
} while (0) /* */
+35 -48
View File
@@ -251,12 +251,17 @@ void print_threads(char *buf, int debug, telnet_printfunc_t prnt)
proccmd_get_threaddata(buf, debug, prnt, NULL);
}
#define FLAG_PRINT_DEBUG_DUMP(flag) \
logsdata->lines[i].val[0] = (char *)flag_name[i]; \
logsdata->lines[i].val[1] = g_log->debug_mask.DEBUG_##flag ? "true" : "false"; \
logsdata->lines[i].val[1] = g_log->dump_mask.DEBUG_##flag ? "true" : "false"; \
i++;
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) {
@@ -291,23 +296,16 @@ int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfun
}
}
if (strcasestr(cmdbuff, "dbgopt") != NULL) {
int optbit = map_str_to_int(log_maskmap, logsdata->lines[0].val[0]);
if (optbit < 0) {
printfunc("debug option %s unknown\n", logsdata->lines[0].val[0]);
} else {
if (strcmp(logsdata->lines[0].val[1], "true") == 0)
SET_LOG_DEBUG(optbit);
else
CLEAR_LOG_DEBUG(optbit);
if (strcmp(logsdata->lines[0].val[2], "true") == 0)
SET_LOG_DUMP(optbit);
else
CLEAR_LOG_DUMP(optbit);
printfunc("%s debug %s dump %s\n",
logsdata->lines[0].val[0],
(strcmp(logsdata->lines[0].val[1], "true") == 0) ? "enabled" : "disabled",
(strcmp(logsdata->lines[0].val[2], "true") == 0) ? "enabled" : "disabled");
}
if (strcmp(logsdata->lines[0].val[1], "true") == 0)
if (!set_log_debug(logsdata->lines[0].val[0], strcmp(logsdata->lines[0].val[2], "true") == 0))
printfunc("debug option %s unknown\n", logsdata->lines[0].val[0]);
if (strcmp(logsdata->lines[0].val[2], "true") == 0)
if (!set_log_dump(logsdata->lines[0].val[0], strcmp(logsdata->lines[0].val[2], "true") == 0))
printfunc("debug option %s unknown\n", logsdata->lines[0].val[0]);
printfunc("%s debug %s dump %s\n",
logsdata->lines[0].val[0],
(strcmp(logsdata->lines[0].val[1], "true") == 0) ? "enabled" : "disabled",
(strcmp(logsdata->lines[0].val[2], "true") == 0) ? "enabled" : "disabled");
}
if (strcasestr(cmdbuff, "threadsched") != NULL) {
unsigned int tid = strtoll(logsdata->lines[0].val[0], NULL, 0);
@@ -354,12 +352,9 @@ int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfun
snprintf(logsdata->columns[2].coltitle, TELNET_CMD_MAXSIZE, "dump");
logsdata->columns[2].coltype = TELNET_CHECKVAL_BOOL;
for (int i = 0; log_maskmap[i].name != NULL; i++) {
logsdata->numlines++;
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";
}
int i = 0;
FOREACH_FLAG(FLAG_PRINT_DEBUG_DUMP);
logsdata->numlines += i;
}
if (strcasestr(cmdbuff, "logopt") != NULL) {
@@ -385,6 +380,14 @@ int proccmd_websrv_getdata(char *cmdbuff, int debug, void *data, telnet_printfun
return 0;
}
#define FLAG_PRINT2_DEBUG_DUMP(flag) \
prnt("%02i %17.17s %5.5s %5.5s\n", \
i, \
flag_name[i], \
g_log->debug_mask.DEBUG_##flag ? "Y" : "N", \
g_log->dump_mask.DEBUG_##flag ? "Y" : "N"); \
i++;
int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt)
{
if (buf == NULL) {
@@ -422,12 +425,8 @@ 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"),
((g_log->dump_mask & log_maskmap[i].value)?"Y":"N") );
}
int i = 0;
FOREACH_FLAG(FLAG_PRINT2_DEBUG_DUMP);
}
if (strcasestr(buf,"config") != NULL) {
prnt("Command line arguments:\n");
@@ -593,28 +592,16 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
}
}
else if (l == 2 && strcmp(logparam,"debug") == 0){
optbit = map_str_to_int(log_maskmap, opt);
if (optbit < 0) {
int ret = set_log_debug(opt, idx1 > 0);
if (!ret)
prnt("module %s unknown\n", opt);
} else {
if (idx1 > 0)
SET_LOG_DEBUG(optbit);
else
CLEAR_LOG_DEBUG(optbit);
proccmd_show("dbgopt", debug, prnt);
}
proccmd_show("dbgopt", debug, prnt);
}
else if (l == 2 && strcmp(logparam,"dump") == 0){
optbit = map_str_to_int(log_maskmap, opt);
if (optbit < 0) {
int ret = set_log_dump(opt, idx1 > 0);
if (!ret)
prnt("module %s unknown\n", opt);
} else {
if (idx1 > 0)
SET_LOG_DUMP(optbit);
else
CLEAR_LOG_DUMP(optbit);
proccmd_show("dump", debug, prnt);
}
proccmd_show("dump", debug, prnt);
}
if (logparam != NULL) free(logparam);
if (opt != NULL) free(opt);
+3 -2
View File
@@ -1726,7 +1726,8 @@ void *UE_thread(void *arg) {
pthread_mutex_unlock(&sync_mutex);
*/
wait_sync("UE thread");
#ifdef NAS_UE
#ifdef NAS_BUILT_IN_UE
MessageDef *message_p;
message_p = itti_alloc_new_message(TASK_NAS_UE, 0, INITIALIZE_MESSAGE);
itti_send_msg_to_task (TASK_NAS_UE, UE->Mod_id + NB_eNB_INST, message_p);
@@ -2089,7 +2090,7 @@ void init_UE_single_thread_stub(int nb_inst) {
AssertFatal(PHY_vars_UE_g[i][0]!=NULL,"PHY_vars_UE_g[inst][0] is NULL\n");
if(NFAPI_MODE==NFAPI_UE_STUB_PNF || NFAPI_MODE==NFAPI_MODE_STANDALONE_PNF) {
#ifdef NAS_UE
#ifdef NAS_BUILT_IN_UE
MessageDef *message_p;
message_p = itti_alloc_new_message(TASK_NAS_UE, 0, INITIALIZE_MESSAGE);
itti_send_msg_to_task (TASK_NAS_UE, i + NB_eNB_INST, message_p);
@@ -54,10 +54,6 @@
#include <string.h>
#endif
#ifdef MEX
#include "mex.h"
#endif
#include "PHY/sse_intrin.h"
//#define DEBUG_LOGMAP
@@ -837,19 +833,11 @@ void init_td16avx2(void)
for (ind=0; ind<188; ind++) {
n = f1f2mat[ind].nb_bits;
base_interleaver=il_tb+f1f2mat[ind].beg_index;
#ifdef MEX
// This is needed for the Mex implementation to make the memory persistent
pi2tab16[ind] = mxMalloc((n+8)*sizeof(int));
pi5tab16[ind] = mxMalloc((n+8)*sizeof(int));
pi4tab16[ind] = mxMalloc((n+8)*sizeof(int));
pi6tab16[ind] = mxMalloc((n+8)*sizeof(int));
#else
base_interleaver = il_tb + f1f2mat[ind].beg_index;
pi2tab16avx2[ind] = malloc((n+8)*sizeof(int));
pi5tab16avx2[ind] = malloc((n+8)*sizeof(int));
pi4tab16avx2[ind] = malloc((n+8)*sizeof(int));
pi6tab16avx2[ind] = malloc((n+8)*sizeof(int));
#endif
pi6tab16avx2[ind] = malloc((n + 8) * sizeof(int));
// fprintf(fdavx2,"Interleaver index %d\n",ind);
for (i=i2=0; i2<8; i2++) {
@@ -52,12 +52,6 @@
#include <string.h>
#endif
#ifdef MEX
#include "mex.h"
#endif
//#define DEBUG_LOGMAP
#ifdef DEBUG_LOGMAP
#define print_shorts(s,x) fprintf(fdsse4,"%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7])
#endif
@@ -933,20 +927,11 @@ void init_td16(void) {
for (ind=0; ind<188; ind++) {
n = f1f2mat[ind].nb_bits;
base_interleaver=il_tb+f1f2mat[ind].beg_index;
#ifdef MEX
// This is needed for the Mex implementation to make the memory persistent
pi2tab16[ind] = mxMalloc((n+8)*sizeof(int));
pi5tab16[ind] = mxMalloc((n+8)*sizeof(int));
pi4tab16[ind] = mxMalloc((n+8)*sizeof(int));
pi6tab16[ind] = mxMalloc((n+8)*sizeof(int));
#else
base_interleaver = il_tb + f1f2mat[ind].beg_index;
pi2tab16[ind] = malloc((n+8)*sizeof(int));
pi5tab16[ind] = malloc((n+8)*sizeof(int));
pi4tab16[ind] = malloc((n+8)*sizeof(int));
pi6tab16[ind] = malloc((n+8)*sizeof(int));
#endif
pi6tab16[ind] = malloc((n + 8) * sizeof(int));
for (i=i2=0; i2<8; i2++) {
j=i2;
@@ -50,10 +50,6 @@
#include <string.h>
#endif
#ifdef MEX
#include "mex.h"
#endif
#include "common/ran_context.h"
#define SHUFFLE16(a, b, c, d, e, f, g, h) \
@@ -858,19 +854,11 @@ void init_td8(void) {
for (ind=0; ind<188; ind++) {
n = f1f2mat[ind].nb_bits;
base_interleaver=il_tb+f1f2mat[ind].beg_index;
#ifdef MEX
// This is needed for the Mex implementation to make the memory persistent
pi2tab8[ind] = mxMalloc((n+8)*sizeof(int));
pi5tab8[ind] = mxMalloc((n+8)*sizeof(int));
pi4tab8[ind] = mxMalloc((n+8)*sizeof(int));
pi6tab8[ind] = mxMalloc((n+8)*sizeof(int));
#else
base_interleaver = il_tb + f1f2mat[ind].beg_index;
pi2tab8[ind] = malloc((n+8)*sizeof(int));
pi5tab8[ind] = malloc((n+8)*sizeof(int));
pi4tab8[ind] = malloc((n+8)*sizeof(int));
pi6tab8[ind] = malloc((n+8)*sizeof(int));
#endif
pi6tab8[ind] = malloc((n + 8) * sizeof(int));
if ((n&15)>0) {
n2 = n+8;
@@ -165,18 +165,4 @@ static inline void nrLDPC_debug_initBuffer2File(e_nrLDPC_buffers buffer)
}
}
/**
\brief Prints 256 data type
\param in Input to print
*/
static inline void nrLDPC_debug_print256i_epi8(simde__m256i* in)
{
uint32_t i;
for (i=0; i<32; i++)
{
mexPrintf("%d ", ((int8_t*)&in)[i]);
}
}
#endif
+1 -11
View File
@@ -756,17 +756,7 @@ typedef struct {
/// num active cba group
uint8_t num_active_cba_groups;
/// allocated CBA RNTI for this ulsch
uint16_t cba_rnti[4];//NUM_MAX_CBA_GROUP];
#ifdef LOCALIZATION
/// epoch timestamp in millisecond
int32_t reference_timestamp_ms;
/// aggregate physical states every n millisecond
int32_t aggregation_period_ms;
/// a set of lists used for localization
struct list loc_rss_list[10], loc_rssi_list[10], loc_subcarrier_rss_list[10], loc_timing_advance_list[10], loc_timing_update_list[10];
struct list tot_loc_rss_list, tot_loc_rssi_list, tot_loc_subcarrier_rss_list, tot_loc_timing_advance_list, tot_loc_timing_update_list;
#endif
uint16_t cba_rnti[4]; // NUM_MAX_CBA_GROUP];
} NB_IoT_eNB_NULSCH_t;
#define NPBCH_A 34
+23 -20
View File
@@ -132,7 +132,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
prach_ifftp = eNB->prach_vars_br.prach_ifft[ce_level];
rxsigF = eNB->prach_vars_br.rxsigF[ce_level];
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
if (((frame_prach)&1023) < 20) LOG_D(PHY,
"PRACH (eNB) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d, rootSequenceIndex %d, repetition number %d,numRepetitionsPrePreambleAttempt %d\n",
br_flag,ce_level,frame_prach,subframe,
@@ -145,23 +145,26 @@ void rx_prach0(PHY_VARS_eNB *eNB,
prach_ifftp = eNB->prach_vars.prach_ifft[0];
rxsigF = eNB->prach_vars.rxsigF[0];
//if (LOG_DEBUGFLAG(PRACH)) {
if (((frame_prach)&1023) < 20) LOG_D(PHY,"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n", subframe,
fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex,rootSequenceIndex);
//}
if (((frame_prach) & 1023) < 20)
LOG_D(PHY,
"PRACH (eNB) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d , rootSequenceIndex %d\n",
subframe,
fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
prach_ConfigIndex,
rootSequenceIndex);
}
} else {
if (br_flag == 1) {
rxsigF = ru->prach_rxsigF_br[ce_level];
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
if (((frame_prach)&1023) < 20) LOG_D(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
br_flag,ce_level,frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
}
} else {
rxsigF = ru->prach_rxsigF[0];
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
if (((frame_prach)&1023) < 20) LOG_D(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n",
subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
}
@@ -178,7 +181,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
// DJP - indexing below in subframe zero takes us off the beginning of the array???
prach[aa] = (int16_t *)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
if (LOG_DUMPFLAG(PRACH)) {
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
int32_t en0=signal_energy((int32_t *)prach[aa],fp->samples_per_tti);
dBEn0 = dB_fixed(en0);
int8_t rach_dBm = dBEn0 - ru->rx_total_gain_dB;
@@ -281,7 +284,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
// Do forward transform
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
LOG_D(PHY,"rx_prach: Doing FFT for N_RB_UL %d nb_rx:%d Ncp:%d\n",fp->N_RB_UL, nb_rx, Ncp);
}
@@ -353,7 +356,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
return;
} else if (eNB!=NULL) {
if ( LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if ((en > 10)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,frame_prach,subframe,en);
@@ -394,8 +397,8 @@ void rx_prach0(PHY_VARS_eNB *eNB,
uint64_t avg_en=0;
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
if (LOG_DEBUGFLAG(PRACH)) {
// int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
// int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if (dBEn0>30) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",frame_prach,subframe,preamble_index,br_flag);
}
@@ -479,7 +482,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
}
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
//en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if (dBEn0>30) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
@@ -502,8 +505,8 @@ void rx_prach0(PHY_VARS_eNB *eNB,
memset(prach_ifft,0,((N_ZC==839) ? 2048 : 256)*sizeof(int32_t));
}
c16_t prachF[1024] __attribute__((aligned(32)))={0};
if (LOG_DUMPFLAG(PRACH))
if (LOG_DUMPFLAG(DEBUG_PRACH))
for (int z=0; z<nb_rx; z++)
if( prach[z] ) {
char tmp[128];
@@ -543,7 +546,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
prach_ifft[i] += (prach_ifft_tmp[i<<1]*prach_ifft_tmp[(i<<1)] + prach_ifft_tmp[1+(i<<1)]*prach_ifft_tmp[1+(i<<1)])>>9;
}
if (LOG_DUMPFLAG(PRACH)) {
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
@@ -555,7 +558,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
if ((br_flag==0) ||
(eNB->prach_vars_br.repetition_number[ce_level]==
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level])) {
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",frame_prach,subframe,br_flag,en);
@@ -573,8 +576,8 @@ void rx_prach0(PHY_VARS_eNB *eNB,
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
*max_preamble = preamble_index;
if (LOG_DEBUGFLAG(PRACH)) {
// int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
// int en = dB_fixed(signal_energy((int32_t *)&rxsigF[0][0],840));
if (dBEn0>30)
LOG_D(PHY,"frame %d, subframe %d : max_preamble_energy %d, max_preamble_delay %d, max_preamble %d (br_flag %d,ce_level %d, levdB %d, lev %d)\n",
@@ -613,7 +616,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
}
}
} /* LOG_DUMPFLAG(PRACH) */
}
if (eNB) stop_meas(&eNB->rx_prach);
AssertFatal(exit_flag==0,"exiting\n");
+9 -12
View File
@@ -383,11 +383,10 @@ void rx_nr_prach_ru(RU_t *ru, int prachFormat, int numRA, int prachStartSymbol,
const dft_size_idx_t dftsize = get_dft(dftlen);
// Do forward transform
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
LOG_D(PHY, "rx_prach: Doing PRACH FFT for nb_rx:%d Ncp:%d dftlen:%d\n", ru->nb_rx, Ncp, dftlen);
}
// Note: Assumes PUSCH SCS @ 30 kHz, take values for formats 0-2 and adjust for others below
int kbar = 1;
int K = 24;
@@ -497,7 +496,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
LOG_D(PHY,"L1 PRACH RX: rooSequenceIndex %d, numRootSeqeuences %d, NCS %d, N_ZC %d, format %d \n",rootSequenceIndex,numrootSequenceIndex,NCS,N_ZC,prach_fmt);
prach_ifft = gNB->prach_vars.prach_ifft;
if (LOG_DEBUGFLAG(PRACH)){
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
if ((frame&1023) < 20) LOG_D(PHY,"PRACH (gNB) : running rx_prach for slot %d, msg1_frequencystart %d, rootSequenceIndex %d\n", slot, msg1_frequencystart, rootSequenceIndex);
}
@@ -520,8 +519,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
*max_preamble = 0;
int16_t prachF[2 * 1024];
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
if (LOG_DEBUGFLAG(PRACH)){
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],(N_ZC==839) ? 840: 140));
if (en>60) LOG_D(PHY,"frame %d, slot %d : Trying preamble %d \n",frame,slot,preamble_index);
}
@@ -599,7 +597,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
}
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
if (LOG_DEBUGFLAG(PRACH)) {
if (LOG_DEBUGFLAG(DEBUG_PRACH)) {
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
if (en>60)
LOG_D(PHY,
@@ -626,11 +624,11 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
memset(prach_ifft,0,((N_ZC==839) ? 2048 : 256)*sizeof(int32_t));
memset(prachF, 0, sizeof(int16_t) * 2 * 1024);
if (LOG_DUMPFLAG(PRACH)) {
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],N_ZC,1,1);
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
}
for (int aa = 0; aa < nb_rx; aa++) {
// Do componentwise product with Xu* on each antenna
@@ -653,7 +651,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
prach_ifft[i] += (int32_t)prach_ifft_tmp[i<<1]*(int32_t)prach_ifft_tmp[(i<<1)] + (int32_t)prach_ifft_tmp[1+(i<<1)]*(int32_t)prach_ifft_tmp[1+(i<<1)];
}
if (LOG_DUMPFLAG(PRACH)) {
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
if (aa == 0)
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0", prachF, 1024, 1, 1);
if (aa == 1)
@@ -717,8 +715,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
}
else *TA = *TA/2;
if (LOG_DUMPFLAG(PRACH)) {
if (LOG_DUMPFLAG(DEBUG_PRACH)) {
//int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
// if (en>60) {
int k = (12 * n_ra_prb) - 6 * fp->N_RB_UL;
@@ -734,7 +731,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
LOG_M("Xu.m","xu", Xu, N_ZC, 1, 1);
LOG_M("prach_ifft0.m","prach_t0", prach_ifft, 1024, 1, 1);
// }
} /* LOG_DUMPFLAG(PRACH) */
}
stop_meas(&gNB->rx_prach);
}
-7
View File
@@ -726,13 +726,6 @@ int32_t sub_cpx_vector16(int16_t *x,
*/
int32_t signal_energy(int32_t *,uint32_t);
#ifdef LOCALIZATION
/*!\fn int32_t signal_energy(int *,uint32_t);
\brief Computes the signal energy per subcarrier
*/
int32_t subcarrier_energy(int32_t *,uint32_t, int32_t *subcarrier_energy, uint16_t rx_power_correction);
#endif
/*!\fn uint32_t signal_energy_nodc(c16_t *,uint32_t);
\brief Computes the signal energy per subcarrier, without DC removal
*/
+7 -17
View File
@@ -45,17 +45,13 @@
#include "defs_eNB.h"
//#include <complex.h>
#include "assertions.h"
#ifdef MEX
#define msg mexPrintf
#else
#if ENABLE_RAL
#include "collection/hashtable/hashtable.h"
#include "COMMON/ral_messages_types.h"
#include "UTIL/queue.h"
#endif
#include "common/utils/LOG/log.h"
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
#if ENABLE_RAL
#include "collection/hashtable/hashtable.h"
#include "COMMON/ral_messages_types.h"
#include "UTIL/queue.h"
#endif
#include "common/utils/LOG/log.h"
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
//use msg in the real-time thread context
#define msg_nrt printf
//use msg_nrt in the non real-time context (for initialization, ...)
@@ -663,13 +659,7 @@ typedef struct PHY_VARS_eNB_NB_IoT_s {
time_stats_t ulsch_tc_gamma_stats;
time_stats_t ulsch_tc_ext_stats;
time_stats_t ulsch_tc_intl1_stats;
time_stats_t ulsch_tc_intl2_stats;
#ifdef LOCALIZATION
/// time state for localization
time_stats_t localization_stats;
#endif
time_stats_t ulsch_tc_intl2_stats;
int32_t pucch1_stats_cnt[NUMBER_OF_UE_MAX_NB_IoT][10];
int32_t pucch1_stats[NUMBER_OF_UE_MAX_NB_IoT][10*1024];
int32_t pucch1_stats_thres[NUMBER_OF_UE_MAX_NB_IoT][10*1024];
+6 -27
View File
@@ -76,34 +76,13 @@
#define stop_UE_TIMING(a)
#endif
#ifdef MEX
#include "mex.h"
#define msg mexPrintf
#undef LOG_D
#undef LOG_E
#undef LOG_I
#undef LOG_N
#undef LOG_T
#undef LOG_W
#undef LOG_M
#define LOG_D(x, ...) mexPrintf(__VA_ARGS__)
#define LOG_E(x, ...) mexPrintf(__VA_ARGS__)
#define LOG_I(x, ...) mexPrintf(__VA_ARGS__)
#define LOG_N(x, ...) mexPrintf(__VA_ARGS__)
#define LOG_T(x, ...) mexPrintf(__VA_ARGS__)
#define LOG_W(x, ...) mexPrintf(__VA_ARGS__)
#define LOG_M(x, ...) mexPrintf(__VA_ARGS__)
#else
#if ENABLE_RAL
#include "collection/hashtable/hashtable.h"
#include "COMMON/ral_messages_types.h"
#include "UTIL/queue.h"
#endif
#include "common/utils/LOG/log.h"
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
#if ENABLE_RAL
#include "collection/hashtable/hashtable.h"
#include "COMMON/ral_messages_types.h"
#include "UTIL/queue.h"
#endif
#include "common/utils/LOG/log.h"
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
/// Context data structure for RX/TX portion of subframe processing
typedef struct {
+5 -9
View File
@@ -56,16 +56,12 @@
#include "actor.h"
//#include "openair1/SCHED_NR_UE/defs.h"
#ifdef MEX
#define msg mexPrintf
#else
#if ENABLE_RAL
#include "common/utils/hashtable/hashtable.h"
#include "COMMON/ral_messages_types.h"
#include "UTIL/queue.h"
#endif
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
#if ENABLE_RAL
#include "common/utils/hashtable/hashtable.h"
#include "COMMON/ral_messages_types.h"
#include "UTIL/queue.h"
#endif
#define msg(aRGS...) LOG_D(PHY, ##aRGS)
// use msg in the real-time thread context
#define msg_nrt printf
// use msg_nrt in the non real-time context (for initialization, ...)
-6
View File
@@ -748,12 +748,6 @@ typedef struct {
/// \brief llr values.
/// - first index: ? [0..1179743] (hard coded)
int16_t *llr;
#ifdef LOCALIZATION
/// number of active subcarrier for a specific UE
int32_t active_subcarrier;
/// subcarrier power in dBm
int32_t *subcarrier_power;
#endif
} NB_IoT_eNB_PUSCH;
#define PBCH_A_NB_IoT 24
+60 -60
View File
@@ -1145,7 +1145,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue,
int dummy_tx_buffer[frame_parms->samples_per_tti] __attribute__((aligned(16)));
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_IN);
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ofdm_mod_stats);
}
@@ -1211,7 +1211,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue,
}
} //nb_antennas_tx
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ofdm_mod_stats);
}
@@ -1544,7 +1544,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,
ue->prach_resources[eNB_id]->Msg3[7],
ue->prach_resources[eNB_id]->Msg3[8]);
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ulsch_encoding_stats);
}
@@ -1556,7 +1556,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,
ue->transmission_mode[eNB_id],0,0)==0,
"ulsch_coding.c: FATAL ERROR: returning\n");
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->phy_proc_tx);
LOG_I(PHY,"------FULL TX PROC : %5.2f ------\n",ue->phy_proc_tx.p_time/(cpuf*1000.0));
stop_meas(&ue->ulsch_encoding_stats);
@@ -1605,7 +1605,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,
ulsch_input_buffer[i]= (uint8_t)(taus()&0xff);
}
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ulsch_encoding_stats);
}
@@ -1620,7 +1620,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,
LOG_E(PHY,"ulsch_coding.c: FATAL ERROR: returning\n");
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->phy_proc_tx);
}
@@ -1628,7 +1628,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,
}
}
if(LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ulsch_encoding_stats);
}
}
@@ -1656,7 +1656,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,
Mod_id,harq_pid,frame_tx%1024,subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_power_max_dBm, tx_amp);
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ulsch_modulation_stats);
}
@@ -1679,7 +1679,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,
nb_rb,
aa);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ulsch_modulation_stats);
}
}
@@ -2123,7 +2123,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,
T(T_UE_PHY_UL_TICK, T_INT(ue->Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx));
ue->generate_ul_signal[eNB_id] = 0;
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->phy_proc_tx);
}
@@ -2208,7 +2208,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,
LOG_D(PHY,"****** end TX-Chain for AbsSubframe %d.%d ******\n", frame_tx, subframe_tx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->phy_proc_tx);
}
}
@@ -2489,7 +2489,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,
LOG_D(PHY,"DCI Decoding procedure in %d.%d\n",frame_rx,subframe_rx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->dlsch_rx_pdcch_stats);
}
@@ -2790,7 +2790,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,
}
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->dlsch_rx_pdcch_stats);
}
@@ -3086,7 +3086,7 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue,
else
first_symbol_flag = 0;
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
uint8_t slot = 0;
if(m >= ue->frame_parms.symbols_per_tti>>1)
@@ -3108,7 +3108,7 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue,
i_mod,
dlsch0->current_harq_pid);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
uint8_t slot = 0;
if(m >= ue->frame_parms.symbols_per_tti>>1)
@@ -3299,7 +3299,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
subframe_rx,
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->dlsch_unscrambling_stats);
}
@@ -3311,7 +3311,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
0,
subframe_rx<<1);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->dlsch_unscrambling_stats);
}
@@ -3326,7 +3326,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
LOG_D(PHY,"start turbo decode for CW 0 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid,
ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
}
@@ -3341,7 +3341,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
pdsch==PDSCH?1:0,
dlsch0->harq_processes[harq_pid]->TBS>256?1:0);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
LOG_I(PHY, " --> Unscrambling for CW0 %5.3f\n",
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
@@ -3361,7 +3361,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
subframe_rx,
ue->transmission_mode[eNB_id]<7?0:ue->transmission_mode[eNB_id]);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->dlsch_unscrambling_stats);
}
@@ -3373,7 +3373,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
1,
subframe_rx<<1);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->dlsch_unscrambling_stats);
}
@@ -3386,7 +3386,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
LOG_D(PHY,"start turbo decode for CW 1 for AbsSubframe %d.%d / %d --> Pdcch Sym %d \n", frame_rx, subframe_rx, harq_pid,
ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
}
@@ -3401,7 +3401,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
pdsch==PDSCH?1:0,
dlsch1->harq_processes[harq_pid]->TBS>256?1:0);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->dlsch_decoding_stats[ue->current_thread_id[subframe_rx]]);
LOG_I(PHY, " --> Unscrambling for CW1 %5.3f\n",
(ue->dlsch_unscrambling_stats.p_time)/(cpuf*1000.0));
@@ -3653,7 +3653,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
}
/**** Slot1 FE Processing ****/
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
}
@@ -3680,7 +3680,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
for (int l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
//if( (l != pilot0) && (l != pilot1))
{
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ofdm_demod_stats);
}
@@ -3693,7 +3693,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ofdm_demod_stats);
}
}
@@ -3746,7 +3746,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
//printf(" [slot1 dl processing] ==> Start LLR Comuptation slot1 for AbsSubframe %d.%d \n", proc->frame_rx, proc->subframe_rx);
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0));
}
@@ -3766,7 +3766,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
// do procedures for C-RNTI
//printf("AbsSubframe %d.%d Pdsch Procedure (slot1)\n",frame_rx,subframe_rx);
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
}
@@ -3840,7 +3840,7 @@ void *UE_thread_slot1_dl_processing(void *arg) {
proc->llr_slot1_available=1;
//printf("Set available LLR slot1 to 1 AbsSubframe %d.%d \n",frame_rx,subframe_rx);
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot1: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][1].p_time/(cpuf*1000.0));
}
@@ -3891,7 +3891,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
LOG_D(PHY," ****** start RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx);
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
}
@@ -3994,7 +3994,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
/**** Slot0 FE Processing ****/
// I- start main thread for FFT/ChanEst symbol: 0/1 --> 7
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
}
@@ -4028,7 +4028,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
for (l=first_ofdm_sym; l<=l2; l++) {
if( (l != pilot0) && (l != pilot1)) {
//printf("AbsSubframe %d.%d FFT slot %d, symbol %d\n", frame_rx,subframe_rx,slot0,l);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ofdm_demod_stats);
}
@@ -4040,7 +4040,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ofdm_demod_stats);
}
}
@@ -4060,14 +4060,14 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
}
if (do_pdcch_flag) {
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]);
}
if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) {
LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
LOG_D(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
}
@@ -4076,7 +4076,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
}
//proc->dci_slot0_available=1;
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot0: PDCCH %5.2f \n",frame_rx,subframe_rx,ue->pdcch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
}
@@ -4085,7 +4085,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
//printf("num_pdcch_symbols %d\n",ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
// first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",frame_rx,subframe_rx,
ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
@@ -4099,7 +4099,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
wait++;
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
LOG_D(PHY, "[AbsSFN %d.%d] FULL FE Processing %5.2f \n",frame_rx,subframe_rx,ue->ue_front_end_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
}
@@ -4116,11 +4116,11 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
//printf("AbsSubframe %d.%d Pdsch Procedure (slot0)\n",frame_rx%1024,subframe_rx);
//printf("AbsSubframe %d.%d Pdsch Procedure PDSCH Active %d \n",frame_rx%1024,subframe_rx, ue->dlsch[ue->current_thread_id[subframe_rx]][0][0]->active);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
}
@@ -4187,7 +4187,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
proc->dci_slot0_available=1;
//printf("Set available dci slot0 to 1 AbsSubframe %d.%d \n",frame_rx%1024,subframe_rx);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot0: LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_per_slot_stat[ue->current_thread_id[subframe_rx]][0].p_time/(cpuf*1000.0));
}
@@ -4200,13 +4200,13 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
wait++;
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
LOG_D(PHY, "[AbsSFN %d.%d] Full LLR Computation %5.2f \n",frame_rx,subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
}
//=====================================================================//
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
}
@@ -4272,7 +4272,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
ue->dlsch_ra[eNB_id]->active = 0;
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
LOG_D(PHY, "[AbsSFN %d.%d] Channel Decoder: %5.2f \n",frame_rx,subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
}
@@ -4332,7 +4332,7 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
LOG_I(PHY, "------FULL RX PROC [AbsSFN %d.%d]: %5.2f ------\n",frame_rx,subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
}
@@ -4371,7 +4371,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
LOG_I(PHY," ****** start RX-Chain for AbsSubframe->0 %d.%d ****** \n", frame_rx%1024, subframe_rx);
}
if(LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
}
@@ -4447,7 +4447,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
for (; l<=l2; l++) {
if (abstraction_flag == 0) {
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ofdm_demod_stats);
}
@@ -4460,7 +4460,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ofdm_demod_stats);
}
}
@@ -4516,14 +4516,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
0);
// first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
LOG_I(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
}
LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->generic_stat);
start_meas(&ue->crnti_procedures_stats);
}
@@ -4543,7 +4543,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->crnti_procedures_stats);
}
@@ -4600,7 +4600,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) { // do front-end processing for second slot, and first symbol of next subframe
for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
if (abstraction_flag == 0) {
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->ofdm_demod_stats);
}
@@ -4613,7 +4613,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
0);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->ofdm_demod_stats);
}
}
@@ -4635,7 +4635,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
}
} // not an S-subframe
if(LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->generic_stat);
LOG_I(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
}
@@ -4652,7 +4652,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
}
@@ -4668,7 +4668,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------ \n", frame_rx%1024, subframe_rx);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
}
@@ -4683,7 +4683,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
mode,
abstraction_flag);
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
LOG_I(PHY, "[SFN %d] Slot1: Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
LOG_I(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
@@ -4692,7 +4692,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
}
if (LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
start_meas(&ue->generic_stat);
}
@@ -4818,14 +4818,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,
}
}
if ( LOG_DEBUGFLAG(UE_TIMING)) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->generic_stat);
LOG_I(PHY,"after tubo until end of Rx %5.2f \n",ue->generic_stat.p_time/(cpuf*1000.0));
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);
if ( LOG_DEBUGFLAG(UE_TIMING) ) {
if (LOG_DEBUGFLAG(DEBUG_UE_TIMING)) {
stop_meas(&ue->phy_proc_rx[ue->current_thread_id[subframe_rx]]);
LOG_I(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",subframe_rx,ue->phy_proc_rx[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
}
+1 -1
View File
@@ -892,7 +892,7 @@ int main(int argc, char **argv) {
set_glog_onlinelog(true);
// enable these lines if you need debug info
set_glog(loglvl);
SET_LOG_DEBUG(UE_TIMING);
SET_LOG_DEBUG(DEBUG_UE_TIMING);
// moreover you need to init itti with the following line
// however itti will catch all signals, so ctrl-c won't work anymore
// alternatively you can disable ITTI completely in CMakeLists.txt
+1 -1
View File
@@ -989,7 +989,7 @@ int main(int argc, char **argv) {
set_glog_onlinelog(true);
// enable these lines if you need debug info
set_glog(loglvl);
SET_LOG_DEBUG(UE_TIMING);
set_log_debug("UE_TIMING", true);
// moreover you need to init itti with the following line
// however itti will catch all signals, so ctrl-c won't work anymore
// alternatively you can disable ITTI completely in CMakeLists.txt
+1 -1
View File
@@ -938,7 +938,7 @@ int main(int argc, char **argv) {
ndi=0;
phy_reset_ue(0,0,0);
UE->UE_mode[eNB_id]=PUSCH;
SET_LOG_DEBUG(UE_TIMING);
set_log_debug("UE_TIMING", true);
for (trials = 0; trials<n_frames; trials++) {
// printf("*");
+1 -1
View File
@@ -403,7 +403,7 @@ int main(int argc, char **argv){
// Configure log
logInit();
set_glog(loglvl);
SET_LOG_DEBUG(PRACH);
SET_LOG_DEBUG(DEBUG_PRACH);
// Configure gNB and RU
RC.gNB = (PHY_VARS_gNB**) malloc(2*sizeof(PHY_VARS_gNB *));
+2 -2
View File
@@ -160,7 +160,7 @@ int CU_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(sctp_assoc_t assoc_id, f1ap_
LOG_E(F1AP, "Failed to encode F1 gNB-DU Configuration Update Acknowledge\n");
return -1;
}
LOG_DUMPMSG(F1AP, LOG_DUMP_CHAR, buffer, len, "F1AP gNB-DU CONFIGURATION UPDATE : ");
LOG_DUMPMSG(F1AP, DEBUG_F1AP, buffer, len, "F1AP gNB-DU CONFIGURATION UPDATE : ");
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
return 0;
@@ -185,7 +185,7 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(sctp_assoc_t assoc_id, f1ap_gnb_cu_confi
LOG_E(F1AP, "Failed to encode F1 gNB-CU Configuration Update\n");
return -1;
}
LOG_DUMPMSG(F1AP, LOG_DUMP_CHAR, buffer, len, "F1AP gNB-CU CONFIGURATION UPDATE : ");
LOG_DUMPMSG(F1AP, DEBUG_F1AP, buffer, len, "F1AP gNB-CU CONFIGURATION UPDATE : ");
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
return 0;
-4
View File
@@ -495,11 +495,7 @@ int pdcp_fifo_read_input_sdus_fromnetlinksock (const protocol_ctxt_t *const ctx
}
} else { // ctxt.enb_flag => UE
if (NFAPI_MODE == NFAPI_UE_STUB_PNF || NFAPI_MODE == NFAPI_MODE_STANDALONE_PNF) {
#ifdef UESIM_EXPANSION
ctxt.module_id = inst_pdcp_list[pdcp_read_header_g.inst];
#else
ctxt.module_id = pdcp_read_header_g.inst;
#endif
} else {
ctxt.module_id = 0;
}
@@ -45,46 +45,6 @@ mac_rrc_data_req(
const uint8_t mbsfn_sync_areaP
);
/*int8_t
mac_rrc_data_ind(
const module_id_t module_idP,
const int CC_id,
const frame_t frameP,
const sub_frame_t sub_frameP,
const int UE_id,
const rnti_t rntiP,
const rb_id_t srb_idP,
const uint8_t* sduP,
const sdu_size_t sdu_lenP,
const uint8_t mbsfn_sync_areaP
);
int8_t
mac_rrc_data_req_ue(
const module_id_t module_idP,
const int CC_idP,
const frame_t frameP,
const rb_id_t srb_idP,
const uint8_t nb_tbP,
uint8_t* const buffer_pP,
const mac_enb_index_t eNB_indexP,
const uint8_t mbsfn_sync_areaP
);
int8_t
mac_rrc_data_ind_ue(
const module_id_t module_idP,
const int CC_idP,
const frame_t frameP,
const sub_frame_t sub_frameP,
const rnti_t rntiP,
const rb_id_t srb_idP,
const uint8_t *sduP,
const sdu_size_t sdu_lenP,
const mac_enb_index_t eNB_indexP,
const uint8_t mbsfn_sync_area
);*/
void mac_lite_sync_ind(
const module_id_t module_idP,
const uint8_t statusP);
@@ -128,10 +88,6 @@ void mac_out_of_sync_ind(
char openair_rrc_eNB_init(
const module_id_t module_idP);
char openair_rrc_ue_init(
const module_id_t module_idP,
const unsigned char eNB_indexP);
int
mac_eNB_get_rrc_status(
const module_id_t module_idP,
@@ -143,12 +99,6 @@ mac_UE_get_rrc_status(
const uint8_t sig_indexP
);
char
openair_rrc_ue_init(
const module_id_t module_idP,
const unsigned char eNB_indexP
);
void mac_in_sync_ind(
const module_id_t module_idP,
const frame_t frameP,
+12 -10
View File
@@ -241,18 +241,24 @@ static int rrc_set_sub_state( module_id_t ue_mod_idP, Rrc_Sub_State_t subState )
if (!IS_SOFTMODEM_NOS1) {
switch (UE_rrc_inst[ue_mod_idP].RrcState) {
case RRC_STATE_INACTIVE:
AssertFatal ((RRC_SUB_STATE_INACTIVE_FIRST <= subState) && (subState <= RRC_SUB_STATE_INACTIVE_LAST),
"Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[ue_mod_idP].RrcState);
AssertFatal(RRC_SUB_STATE_INACTIVE <= subState,
"Invalid sub state %d for state %d!\n",
subState,
UE_rrc_inst[ue_mod_idP].RrcState);
break;
case RRC_STATE_IDLE:
AssertFatal ((RRC_SUB_STATE_IDLE_FIRST <= subState) && (subState <= RRC_SUB_STATE_IDLE_LAST),
"Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[ue_mod_idP].RrcState);
AssertFatal((RRC_SUB_STATE_IDLE_SEARCHING <= subState) && (subState <= RRC_SUB_STATE_IDLE),
"Invalid sub state %d for state %d!\n",
subState,
UE_rrc_inst[ue_mod_idP].RrcState);
break;
case RRC_STATE_CONNECTED:
AssertFatal ((RRC_SUB_STATE_CONNECTED_FIRST <= subState) && (subState <= RRC_SUB_STATE_CONNECTED_LAST),
"Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[ue_mod_idP].RrcState);
AssertFatal(RRC_SUB_STATE_CONNECTED <= subState,
"Invalid sub state %d for state %d!\n",
subState,
UE_rrc_inst[ue_mod_idP].RrcState);
break;
}
}
@@ -6295,10 +6301,6 @@ rrc_rx_tx_ue(
)
//-----------------------------------------------------------------------------
{
#ifdef LOCALIZATION
double estimated_distance;
protocol_ctxt_t ctxt;
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX,VCD_FUNCTION_IN);
// check timers
-11
View File
@@ -752,17 +752,6 @@ typedef struct eNB_RRC_INST_s {
hash_table_t *initial_id2_s1ap_ids; // key is content is rrc_ue_s1ap_ids_t
hash_table_t *s1ap_id2_s1ap_ids ; // key is content is rrc_ue_s1ap_ids_t
#ifdef LOCALIZATION
/// localization type, 0: power based, 1: time based
uint8_t loc_type;
/// epoch timestamp in millisecond, RRC
int32_t reference_timestamp_ms;
/// aggregate physical states every n millisecond
int32_t aggregation_period_ms;
/// localization list for aggregated measurements from PHY
struct list loc_list;
#endif
//RRC configuration
RrcConfigurationReq configuration;
+1 -10
View File
@@ -41,7 +41,7 @@ typedef enum Rrc_State_e {
} Rrc_State_t;
typedef enum Rrc_Sub_State_e {
RRC_SUB_STATE_INACTIVE=0,
RRC_SUB_STATE_INACTIVE = 0,
RRC_SUB_STATE_IDLE_SEARCHING,
RRC_SUB_STATE_IDLE_RECEIVING_SIB,
@@ -50,15 +50,6 @@ typedef enum Rrc_Sub_State_e {
RRC_SUB_STATE_IDLE,
RRC_SUB_STATE_CONNECTED,
RRC_SUB_STATE_INACTIVE_FIRST = RRC_SUB_STATE_INACTIVE,
RRC_SUB_STATE_INACTIVE_LAST = RRC_SUB_STATE_INACTIVE,
RRC_SUB_STATE_IDLE_FIRST = RRC_SUB_STATE_IDLE_SEARCHING,
RRC_SUB_STATE_IDLE_LAST = RRC_SUB_STATE_IDLE,
RRC_SUB_STATE_CONNECTED_FIRST = RRC_SUB_STATE_CONNECTED,
RRC_SUB_STATE_CONNECTED_LAST = RRC_SUB_STATE_CONNECTED,
} Rrc_Sub_State_t;
typedef enum Rrc_Msg_Type_e {
+18 -143
View File
@@ -47,7 +47,7 @@ Description Defines the layer 3 messages supported by the NAS sublayer
#include <stdlib.h> // malloc, free
#include <string.h> // memcpy
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
#if defined(NAS_BUILT_IN_UE)
# include "nas_itti_messaging.h"
#endif
#include "secu_defs.h"
@@ -158,15 +158,12 @@ nas_message_encrypt(
LOG_FUNC_RETURN (TLV_ENCODE_BUFFER_TOO_SHORT);
} else if (size > 1) {
/* Encrypt the plain NAS message */
bytes = _nas_message_encrypt(outbuf + size, inbuf,
bytes = _nas_message_encrypt(outbuf + size,
inbuf,
header->security_header_type,
header->message_authentication_code,
header->sequence_number,
#ifdef NAS_MME
SECU_DIRECTION_DOWNLINK,
#else
SECU_DIRECTION_UPLINK,
#endif
length - size,
emm_security_context);
@@ -175,15 +172,7 @@ nas_message_encrypt(
/* Compute offset of the sequence number field */
int offset = size - sizeof(uint8_t);
/* Compute the NAS message authentication code */
uint32_t mac = _nas_message_get_mac(
outbuf + offset,
bytes + size - offset,
#ifdef NAS_MME
SECU_DIRECTION_DOWNLINK,
#else
SECU_DIRECTION_UPLINK,
#endif
emm_security_context);
uint32_t mac = _nas_message_get_mac(outbuf + offset, bytes + size - offset, SECU_DIRECTION_UPLINK, emm_security_context);
/* Set the message authentication code of the NAS message */
*(uint32_t*)(outbuf + sizeof(uint8_t)) = htonl(mac);
}
@@ -191,29 +180,6 @@ nas_message_encrypt(
/* The input buffer does not need to be encrypted */
memcpy(outbuf, inbuf, length);
}
#ifdef NAS_MME
/* TS 124.301, section 4.4.3.1
* The NAS sequence number part of the NAS COUNT shall be
* exchanged between the UE and the MME as part of the
* NAS signalling. After each new or retransmitted outbound
* security protected NAS message, the sender shall increase
* the NAS COUNT number by one. Specifically, on the sender
* side, the NAS sequence number shall be increased by one,
* and if the result is zero (due to wrap around), the NAS
* overflow counter shall also be incremented by one (see
* subclause 4.4.3.5).
*/
emm_security_context->dl_count.seq_num += 1;
if ( ! emm_security_context->dl_count.seq_num) {
emm_security_context->dl_count.overflow += 1;
}
LOG_TRACE(DEBUG,
"Incremented emm_security_context.dl_count.seq_num -> %u",
emm_security_context->dl_count.seq_num);
#else
emm_security_context->ul_count.seq_num += 1;
if ( ! emm_security_context->ul_count.seq_num) {
@@ -223,8 +189,6 @@ nas_message_encrypt(
LOG_TRACE(DEBUG,
"Incremented emm_security_context.ul_count.seq_num -> %u",
emm_security_context->ul_count.seq_num);
#endif
if (bytes < 0) {
LOG_FUNC_RETURN (bytes);
}
@@ -276,48 +240,30 @@ int nas_message_decrypt(
LOG_FUNC_RETURN (TLV_DECODE_BUFFER_TOO_SHORT);
} else if (size > 1) {
if (security) {
emm_security_context = (emm_security_context_t*)security;
#if defined(NAS_MME)
if (emm_security_context->ul_count.seq_num > header->sequence_number) {
emm_security_context->ul_count.overflow += 1;
}
emm_security_context->ul_count.seq_num = header->sequence_number;
#else
emm_security_context = (emm_security_context_t *)security;
if (emm_security_context->dl_count.seq_num > header->sequence_number) {
emm_security_context->dl_count.overflow += 1;
}
emm_security_context->dl_count.seq_num = header->sequence_number;
#endif
}
/* Compute offset of the sequence number field */
int offset = size - sizeof(uint8_t);
/* Compute the NAS message authentication code */
uint32_t mac = _nas_message_get_mac(
inbuf + offset,
length - offset,
#ifdef NAS_MME
SECU_DIRECTION_UPLINK,
#else
SECU_DIRECTION_DOWNLINK,
#endif
emm_security_context);
uint32_t mac = _nas_message_get_mac(inbuf + offset, length - offset, SECU_DIRECTION_DOWNLINK, emm_security_context);
/* Check NAS message integrity */
if (mac != header->message_authentication_code) {
LOG_TRACE(DEBUG,
"MAC Failure MSG:%08X(%u) <> INT ALGO:%08X(%u) Type of security context %u",
header->message_authentication_code,header->message_authentication_code,
mac,mac, (emm_security_context!=NULL)?emm_security_context->type:88);
#if defined(NAS_MME)
LOG_FUNC_RETURN (TLV_DECODE_MAC_MISMATCH);
#else
//#warning "added test on integrity algorithm because of SECURITY_MODE_COMMAND not correctly handled in UE (check integrity)"
header->message_authentication_code,
header->message_authentication_code,
mac,
mac,
(emm_security_context != NULL) ? emm_security_context->type : 88);
// #warning "added test on integrity algorithm because of SECURITY_MODE_COMMAND not correctly handled in UE (check integrity)"
if (emm_security_context->selected_algorithms.integrity !=
NAS_SECURITY_ALGORITHMS_EIA0) {
@@ -326,8 +272,6 @@ int nas_message_decrypt(
LOG_TRACE(WARNING,
"MAC failure but continue due to EIA0 selected");
}
#endif
} else {
LOG_TRACE(DEBUG, "Integrity: MAC Success");
}
@@ -385,38 +329,19 @@ int nas_message_decode(
LOG_FUNC_RETURN (TLV_DECODE_BUFFER_TOO_SHORT);
} else if (size > 1) {
if (security) {
emm_security_context = (emm_security_context_t*)security;
#if defined(NAS_MME)
if (emm_security_context->ul_count.seq_num > msg->header.sequence_number) {
emm_security_context->ul_count.overflow += 1;
}
emm_security_context->ul_count.seq_num = msg->header.sequence_number;
#else
emm_security_context = (emm_security_context_t *)security;
if (emm_security_context->dl_count.seq_num > msg->header.sequence_number) {
emm_security_context->dl_count.overflow += 1;
}
emm_security_context->dl_count.seq_num = msg->header.sequence_number;
#endif
}
/* Compute offset of the sequence number field */
int offset = size - sizeof(uint8_t);
/* Compute the NAS message authentication code */
uint32_t mac = _nas_message_get_mac(
buffer + offset,
length - offset,
#ifdef NAS_MME
SECU_DIRECTION_UPLINK,
#else
SECU_DIRECTION_DOWNLINK,
#endif
emm_security_context
);
uint32_t mac = _nas_message_get_mac(buffer + offset, length - offset, SECU_DIRECTION_DOWNLINK, emm_security_context);
#define NAS_CODE_TO_BE_MODIFIED 1
#ifdef NAS_CODE_TO_BE_MODIFIED
@@ -445,10 +370,6 @@ int nas_message_decode(
LOG_FUNC_RETURN (TLV_DECODE_MAC_MISMATCH);
}
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
/* Log message header */
#endif
/* Decode security protected NAS message */
bytes = _nas_message_protected_decode(buffer + size,
&msg->header,
@@ -525,62 +446,24 @@ int nas_message_encode(
"offset %d = %d - %d, hdr encode = %d, length = %d bytes = %d",
offset, size, (int)sizeof(uint8_t),
size, length, bytes);
uint32_t mac = _nas_message_get_mac(
buffer + offset,
bytes + size - offset,
#ifdef NAS_MME
SECU_DIRECTION_DOWNLINK,
#else
SECU_DIRECTION_UPLINK,
#endif
emm_security_context);
uint32_t mac = _nas_message_get_mac(buffer + offset, bytes + size - offset, SECU_DIRECTION_UPLINK, emm_security_context);
/* Set the message authentication code of the NAS message */
uint32_t mac_nl = htonl(mac);
memcpy(buffer + sizeof(uint8_t), &mac_nl, sizeof(mac_nl));
if (emm_security_context) {
#ifdef NAS_MME
/* TS 124.301, section 4.4.3.1
* The NAS sequence number part of the NAS COUNT shall be
* exchanged between the UE and the MME as part of the
* NAS signalling. After each new or retransmitted outbound
* security protected NAS message, the sender shall increase
* the NAS COUNT number by one. Specifically, on the sender
* side, the NAS sequence number shall be increased by one,
* and if the result is zero (due to wrap around), the NAS
* overflow counter shall also be incremented by one (see
* subclause 4.4.3.5).
*/
emm_security_context->dl_count.seq_num += 1;
if ( ! emm_security_context->dl_count.seq_num) {
emm_security_context->dl_count.overflow += 1;
}
LOG_TRACE(DEBUG,
"Incremented emm_security_context.dl_count.seq_num -> %u",
emm_security_context->dl_count.seq_num);
#else
emm_security_context->ul_count.seq_num += 1;
if ( ! emm_security_context->ul_count.seq_num) {
emm_security_context->ul_count.overflow += 1;
}
LOG_TRACE(DEBUG,
"Incremented emm_security_context.ul_count.seq_num -> %u",
emm_security_context->ul_count.seq_num);
#endif
LOG_TRACE(DEBUG, "Incremented emm_security_context.ul_count.seq_num -> %u", emm_security_context->ul_count.seq_num);
} else {
LOG_TRACE(DEBUG,
"Did not increment emm_security_context.dl_count.seq_num because no security context");
}
}
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
/* Log message header */
#endif
} else {
/* Encode plain NAS message */
bytes = _nas_message_plain_encode(buffer, &msg->header,
@@ -907,11 +790,7 @@ static int _nas_message_protected_encode(
msg->header.security_header_type,
msg->header.message_authentication_code,
msg->header.sequence_number,
#ifdef NAS_MME
SECU_DIRECTION_DOWNLINK,
#else
SECU_DIRECTION_UPLINK,
#endif
size,
emm_security_context);
//seq, size);
@@ -967,11 +846,7 @@ static int _nas_message_decrypt(
int size = 0;
nas_message_security_header_t header;
#ifdef NAS_MME
direction = SECU_DIRECTION_UPLINK;
#else
direction = SECU_DIRECTION_DOWNLINK;
#endif
if (emm_security_context == NULL)
LOG_FUNC_RETURN (0);
@@ -1287,7 +1162,7 @@ static uint32_t _nas_message_get_mac(
if (!emm_security_context) {
LOG_TRACE(DEBUG,
"No security context set for integrity protection algorithm");
#if defined(NAS_BUILT_IN_EPC) || defined(NAS_BUILT_IN_UE)
#if defined(NAS_BUILT_IN_UE)
LOG_FUNC_RETURN (0);
#else
LOG_FUNC_RETURN (0xabababab);
@@ -1415,7 +1290,7 @@ static uint32_t _nas_message_get_mac(
(direction == SECU_DIRECTION_UPLINK) ? emm_security_context->ul_count.seq_num:emm_security_context->dl_count.seq_num
);
#if defined(NAS_BUILT_IN_EPC) || defined(NAS_BUILT_IN_UE)
#if defined(NAS_BUILT_IN_UE)
LOG_FUNC_RETURN (0);
#else
LOG_FUNC_RETURN (0xabababab);
@@ -42,11 +42,7 @@ Description Defines the layer 3 messages supported by the NAS sublayer
#include "commonDef.h"
#include "emm_msg.h"
#if defined(NAS_BUILT_IN_EPC)
#include "emmData.h"
#endif
#include "esm_msg.h"
/****************************************************************************/
/********************* G L O B A L C O N S T A N T S *******************/
/****************************************************************************/
@@ -129,13 +129,7 @@ int network_api_initialize(const char* host, const char* port)
_network_api_id.send = socket_send;
_network_api_id.close = socket_close;
/* Initialize UDP communication channel with the network layer */
#ifdef NAS_UE
_network_api_id.endpoint = NETWORK_API_OPEN(SOCKET_CLIENT, host, port);
#endif
#ifdef NAS_MME
_network_api_id.endpoint = NETWORK_API_OPEN(SOCKET_SERVER, NULL, port);
#endif
if (_network_api_id.endpoint == NULL) {
LOG_TRACE(ERROR, "NET-API - Failed to open connection endpoint, %s",
((errno < 0) ? gai_strerror(errno) : strerror(errno)));
+5 -21
View File
@@ -86,14 +86,6 @@ int emm_msg_decode(EMM_msg *msg, uint8_t *buffer, uint32_t len) {
LOG_FUNC_IN;
int header_result;
int decode_result;
uint8_t *buffer_log = buffer;
uint32_t len_log = len;
int down_link;
# if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)))
down_link = 0;
# else
down_link = 1;
# endif
/* First decode the EMM message header */
header_result = _emm_msg_decode_header(&msg->header, buffer, len);
@@ -247,14 +239,13 @@ int emm_msg_decode(EMM_msg *msg, uint8_t *buffer, uint32_t len) {
if (decode_result < 0) {
LOG_TRACE(ERROR, "EMM-MSG - Failed to decode L3 EMM message 0x%x "
"(%d)", msg->header.message_type, decode_result);
LOG_FUNC_RETURN (decode_result);
LOG_FUNC_RETURN(decode_result);
} else {
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
/* Message has been decoded and security header removed, handle it has a plain message */
nas_itti_plain_msg((char *) buffer_log, (nas_message_t *) msg, len_log, down_link);
#if defined(NAS_BUILT_IN_EPC)
nas_itti_plain_msg((char *)buffer_log, (nas_message_t *)msg, len_log, 0);
#endif
}
LOG_FUNC_RETURN (header_result + decode_result);
}
@@ -279,13 +270,6 @@ int emm_msg_encode(EMM_msg *msg, uint8_t *buffer, uint32_t len) {
LOG_FUNC_IN;
int header_result;
int encode_result;
uint8_t *buffer_log = buffer;
int down_link;
# if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)))
down_link = 1;
# else
down_link = 0;
# endif
/* First encode the EMM message header */
header_result = _emm_msg_encode_header(&msg->header, buffer, len);
@@ -443,8 +427,8 @@ int emm_msg_encode(EMM_msg *msg, uint8_t *buffer, uint32_t len) {
LOG_TRACE(ERROR, "EMM-MSG - Failed to encode L3 EMM message 0x%x "
"(%d)", msg->header.message_type, encode_result);
} else {
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
nas_itti_plain_msg((char *) buffer_log, (nas_message_t *) msg, header_result + encode_result, down_link);
#if defined(NAS_BUILT_IN_EPC)
nas_itti_plain_msg((char *)buffer_log, (nas_message_t *)msg, header_result + encode_result, 1);
#endif
}
+5 -36
View File
@@ -43,10 +43,6 @@ Description Defines EPS Session Management messages
#include "TLVDecoder.h"
#include "TLVEncoder.h"
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
# include "nas_itti_messaging.h"
#endif
/****************************************************************************/
/**************** E X T E R N A L D E F I N I T I O N S ****************/
/****************************************************************************/
@@ -84,19 +80,6 @@ int esm_msg_decode(ESM_msg *msg, uint8_t *buffer, uint32_t len)
{
int header_result;
int decode_result;
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
uint8_t *buffer_log = buffer;
uint32_t len_log = len;
int down_link;
# if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)))
down_link = 0;
# else
down_link = 1;
# endif
#endif
LOG_FUNC_IN;
/* First decode the ESM message header */
@@ -210,14 +193,12 @@ int esm_msg_decode(ESM_msg *msg, uint8_t *buffer, uint32_t len)
if (decode_result < 0) {
LOG_TRACE(ERROR, "ESM-MSG - Failed to decode L3 ESM message 0x%x "
"(%u)", msg->header.message_type, decode_result);
LOG_FUNC_RETURN (decode_result);
LOG_FUNC_RETURN(decode_result);
} else {
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
/* Message has been decoded and security header removed, handle it has a plain message */
nas_itti_plain_msg((char *) buffer_log, (nas_message_t *) msg, len_log, down_link);
#if defined(NAS_BUILT_IN_EPC)
nas_itti_plain_msg((char *)buffer_log, (nas_message_t *)msg, len_log, 0);
#endif
}
LOG_FUNC_RETURN (header_result + decode_result);
}
@@ -245,17 +226,6 @@ int esm_msg_encode(ESM_msg *msg, uint8_t *buffer, uint32_t len)
int header_result;
int encode_result;
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
uint8_t *buffer_log = buffer;
int down_link;
# if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)))
down_link = 1;
# else
down_link = 0;
# endif
#endif
/* First encode the ESM message header */
header_result = _esm_msg_encode_header(&msg->header, buffer, len);
@@ -371,11 +341,10 @@ int esm_msg_encode(ESM_msg *msg, uint8_t *buffer, uint32_t len)
LOG_TRACE(ERROR, "ESM-MSG - Failed to encode L3 ESM message 0x%x "
"(%d)", msg->header.message_type, encode_result);
} else {
#if ((defined(NAS_BUILT_IN_EPC) && defined(NAS_MME)) || (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) && defined(NAS_UE)))
nas_itti_plain_msg((char *) buffer_log, (nas_message_t *) msg, header_result + encode_result, down_link);
#if defined(NAS_BUILT_IN_EPC)
nas_itti_plain_msg((char *)buffer_log, (nas_message_t *)msg, header_result + encode_result, 1);
#endif
}
LOG_FUNC_RETURN (header_result + encode_result);
}
+1 -1
View File
@@ -38,7 +38,7 @@ Description Usefull logging functions
#ifndef __NAS_LOG_H__
#define __NAS_LOG_H__
#if defined(NAS_BUILT_IN_UE) && defined(NAS_UE)
#if defined(NAS_BUILT_IN_UE)
# include "common/utils/LOG/log.h"
# undef LOG_TRACE
#endif
-37
View File
@@ -216,11 +216,7 @@ int nas_timer_start(long sec, nas_timer_callback_t cb, void *args)
/* Insert the new entry into the timer queue */
_nas_timer_db_insert_entry(id, te);
# if defined(NAS_MME)
ret = timer_setup(sec, 0, TASK_NAS_MME, INSTANCE_DEFAULT, TIMER_PERIODIC, args, &timer_id);
# else
ret = timer_setup(sec, 0, TASK_NAS_UE, INSTANCE_DEFAULT, TIMER_PERIODIC, args, &timer_id);
# endif
if (ret == -1) {
return NAS_TIMER_INACTIVE_ID;
@@ -295,39 +291,6 @@ int nas_timer_restart(int id)
return (NAS_TIMER_INACTIVE_ID);
}
/****************************************************************************/
/********************* L O C A L F U N C T I O N S *********************/
/****************************************************************************/
/****************************************************************************
** **
** Name: _nas_timer_handler() **
** **
** Description: The timer handler is executed whenever the system deli- **
** vers signal SIGALARM. It starts execution of the callback **
** function of the first entry within the queue of active **
** timer entries. The entry is not removed from the queue of **
** active timer entries and shall be explicitly removed when **
** the timer expires. **
** **
** Inputs: None **
** Others: None **
** **
** Outputs: None **
** Return: None **
** Others: _nas_timer_db **
** **
***************************************************************************/
void nas_timer_handle_signal_expiry(long timer_id, void *arg_p)
{
/* Get the timer entry for which the system timer expired */
nas_timer_entry_t *te = _nas_timer_db.head->entry;
te->cb(te->args);
}
/*
* -----------------------------------------------------------------------------
* Functions used to manage the timer database
-4
View File
@@ -74,8 +74,4 @@ int nas_timer_start(long sec, nas_timer_callback_t cb, void *args);
int nas_timer_stop(int id);
int nas_timer_restart(int id);
#if defined(NAS_BUILT_IN_EPC)
void nas_timer_handle_signal_expiry(long timer_id, void *arg_p);
#endif
#endif /* __NAS_TIMER_H__ */
+1 -2
View File
@@ -27,8 +27,7 @@
# define TASK_ORIGIN TASK_NAS_UE
#if (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE) )
#if defined(NAS_BUILT_IN_UE)
__attribute__ ((unused)) static const uint8_t emm_message_ids[] = {
ATTACH_REQUEST,
ATTACH_ACCEPT,
+1 -11
View File
@@ -30,22 +30,13 @@
#ifndef NAS_ITTI_MESSAGING_H_
#define NAS_ITTI_MESSAGING_H_
# if (defined(ENABLE_NAS_UE_LOGGING) && defined(NAS_BUILT_IN_UE))
int nas_itti_plain_msg(
const char *buffer,
const nas_message_t *msg,
const int lengthP,
const int instance);
int nas_itti_protected_msg(
const char *buffer,
const nas_message_t *msg,
const int lengthP,
const int instance);
# endif
# if defined(NAS_BUILT_IN_UE)
int nas_itti_protected_msg(const char *buffer, const nas_message_t *msg, const int lengthP, const int instance);
int nas_itti_kenb_refresh_req(const Byte_t kenb[32], int user_id);
@@ -56,5 +47,4 @@ int nas_itti_nas_establish_req(as_cause_t cause, as_call_type_t type, as_stmsi_t
int nas_itti_ul_data_req(const uint32_t ue_idP, void *const data_pP, const uint32_t lengthP, int user_id);
int nas_itti_rab_establish_rsp(const as_stmsi_t s_tmsi, const as_rab_id_t rabID, const nas_error_code_t errCode, int user_id);
# endif
#endif /* NAS_ITTI_MESSAGING_H_ */
+1 -6
View File
@@ -34,8 +34,6 @@
#include "nas_user.h"
#include "common/ran_context.h"
// FIXME make command line option for NAS_UE_AUTOSTART
# define NAS_UE_AUTOSTART 1
// FIXME review these externs
extern uint16_t NB_UE_INST;
@@ -203,15 +201,12 @@ void *nas_ue_task(void *args_p)
switch (ITTI_MSG_ID(msg_p)) {
case INITIALIZE_MESSAGE:
LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, ITTI_MSG_NAME (msg_p));
#if (NAS_UE_AUTOSTART != 0)
LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, ITTI_MSG_NAME(msg_p));
{
/* Send an activate modem command to NAS like UserProcess should do it */
char *user_data = "at+cfun=1\r";
nas_user_receive_and_process (user, user_data);
}
#endif
break;
case TERMINATE_MESSAGE:
-2
View File
@@ -139,7 +139,6 @@ void nr_derive_key(algorithm_type_dist_t alg_type, uint8_t alg_id, const uint8_t
* NOTE: knas is dynamically allocated by the KDF function
*/
#ifndef NAS_UE
void derive_keNB(const uint8_t kasme[32], const uint32_t nas_count, uint8_t *keNB)
{
uint8_t s[7] = {0};
@@ -159,7 +158,6 @@ void derive_keNB(const uint8_t kasme[32], const uint32_t nas_count, uint8_t *keN
byte_array_t data = {.buf = s, .len = 7};
kdf(kasme, data, 32, keNB);
}
#endif
void derive_keNB_star(const uint8_t *kenb_32,
const uint16_t pci,