LOG_F replaced by LOG_DUMPMSG. Add a generic function to dump a buffer or message. Go on with LOG_M implementation improvement. Remove redundant options to enable/disable logs.

This commit is contained in:
frtabu
2018-08-24 17:43:14 +02:00
parent e469680d80
commit 79588a494e
32 changed files with 1405 additions and 1660 deletions
+116 -76
View File
@@ -54,7 +54,6 @@
mapping log_level_names[] = { mapping log_level_names[] = {
{"error", OAILOG_ERR}, {"error", OAILOG_ERR},
{"file", OAILOG_FILE},
{"warn", OAILOG_WARNING}, {"warn", OAILOG_WARNING},
{"info", OAILOG_INFO}, {"info", OAILOG_INFO},
{"debug", OAILOG_DEBUG}, {"debug", OAILOG_DEBUG},
@@ -70,18 +69,10 @@ mapping log_options[] = {
}; };
mapping log_maskmap[] = { mapping log_maskmap[] = LOG_MASKMAP_INIT;
{"prach", DEBUG_PRACH},
{"RU", DEBUG_RU},
{"LTEESTIM", DEBUG_LTEESTIM},
{"ctrlsocket", DEBUG_CTRLSOCKET},
{"UE_PHYPROC", DEBUG_UE_PHYPROC},
{"UE_TIMING", UE_TIMING},
{NULL,-1}
};
char *log_level_highlight_start[] = {LOG_RED, LOG_GREEN, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */ char *log_level_highlight_start[] = {LOG_RED, LOG_ORANGE, "", LOG_BLUE, LOG_CYBL}; /*!< \brief Optional start-format strings for highlighting */
char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */ char *log_level_highlight_end[] = {LOG_RESET,LOG_RESET,LOG_RESET, LOG_RESET,LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format) int write_file_matlab(const char *fname,const char *vname,void *data,int length,int dec,char format)
@@ -243,6 +234,7 @@ int write_file_matlab(const char *fname,const char *vname,void *data,int length,
/* get log parameters from configuration file */ /* get log parameters from configuration file */
void log_getconfig(log_t *g_log) { void log_getconfig(log_t *g_log) {
char *gloglevel = NULL; char *gloglevel = NULL;
int consolelog ;
int level; int level;
@@ -250,7 +242,7 @@ void log_getconfig(log_t *g_log) {
paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS]; paramdef_t logparams_level[MAX_LOG_PREDEF_COMPONENTS];
paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS]; paramdef_t logparams_logfile[MAX_LOG_PREDEF_COMPONENTS];
paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)]; paramdef_t logparams_debug[sizeof(log_maskmap)/sizeof(mapping)];
paramdef_t logparams_matlab[sizeof(log_maskmap)/sizeof(mapping)]; paramdef_t logparams_genfile[sizeof(log_maskmap)/sizeof(mapping)];
int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX); int ret = config_get( logparams_defaults,sizeof(logparams_defaults)/sizeof(paramdef_t),CONFIG_STRING_LOG_PREFIX);
if (ret <0) { if (ret <0) {
@@ -258,6 +250,7 @@ void log_getconfig(log_t *g_log) {
return; return;
} }
/* set LOG display options (enable/disable color, thread name, level ) */
for(int i=0; i<logparams_defaults[LOG_OPTIONS_IDX].numelt ; i++) { for(int i=0; i<logparams_defaults[LOG_OPTIONS_IDX].numelt ; i++) {
for(int j=0; log_options[j].name != NULL ; j++) { for(int j=0; log_options[j].name != NULL ; j++) {
if (strcmp(logparams_defaults[LOG_OPTIONS_IDX].strlistptr[i],log_options[j].name) == 0) { if (strcmp(logparams_defaults[LOG_OPTIONS_IDX].strlistptr[i],log_options[j].name) == 0) {
@@ -304,37 +297,39 @@ void log_getconfig(log_t *g_log) {
/* now set the log levels and infile option, according to what we read */ /* now set the log levels and infile option, according to what we read */
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) { for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_PREDEF_COMPONENTS; i++) {
level = map_str_to_int(log_level_names, *(logparams_level[i].strptr)); level = map_str_to_int(log_level_names, *(logparams_level[i].strptr));
set_log(i, level,1); set_log(i, level);
if (*(logparams_logfile[i].uptr) == 1) if (*(logparams_logfile[i].uptr) == 1)
set_component_filelog(i); set_component_filelog(i);
} }
/* build then read the debug and matlab parameter array */ /* build then read the debug and genfile parameter array */
for (int i=0;log_maskmap[i].name != NULL ; i++) { 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_debug[i].optname, LOG_CONFIG_DEBUG_FORMAT, log_maskmap[i].name);
sprintf(logparams_matlab[i].optname, LOG_CONFIG_MATLAB_FORMAT, log_maskmap[i].name); sprintf(logparams_genfile[i].optname, LOG_CONFIG_GENFILE_FORMAT, log_maskmap[i].name);
logparams_debug[i].defuintval = 0; logparams_debug[i].defuintval = 0;
logparams_debug[i].type = TYPE_UINT; logparams_debug[i].type = TYPE_UINT;
logparams_debug[i].paramflags = PARAMFLAG_BOOL; logparams_debug[i].paramflags = PARAMFLAG_BOOL;
logparams_debug[i].uptr = NULL; logparams_debug[i].uptr = NULL;
logparams_debug[i].chkPptr = NULL; logparams_debug[i].chkPptr = NULL;
logparams_debug[i].numelt = 0; logparams_debug[i].numelt = 0;
logparams_matlab[i].defuintval = 0; logparams_genfile[i].defuintval = 0;
logparams_matlab[i].type = TYPE_UINT; logparams_genfile[i].type = TYPE_UINT;
logparams_matlab[i].paramflags = PARAMFLAG_BOOL; logparams_genfile[i].paramflags = PARAMFLAG_BOOL;
logparams_matlab[i].uptr = NULL; logparams_genfile[i].uptr = NULL;
logparams_matlab[i].chkPptr = NULL; logparams_genfile[i].chkPptr = NULL;
logparams_matlab[i].numelt = 0; logparams_genfile[i].numelt = 0;
} }
config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX); config_get( logparams_debug,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
config_get( logparams_matlab,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX); config_get( logparams_genfile,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
/* set the debug mask according to the debug parameters values */ /* set the debug mask according to the debug parameters values */
for (int i=0; log_maskmap[i].name != NULL ; i++) { for (int i=0; log_maskmap[i].name != NULL ; i++) {
if (*(logparams_debug[i].uptr) ) if (*(logparams_debug[i].uptr) )
g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value; g_log->debug_mask = g_log->debug_mask | log_maskmap[i].value;
if (*(logparams_matlab[i].uptr) ) if (*(logparams_genfile[i].uptr) )
g_log->matlab_mask = g_log->matlab_mask | log_maskmap[i].value; g_log->genfile_mask = g_log->genfile_mask | log_maskmap[i].value;
} }
/* log globally enabled/disabled */
set_glog_onlinelog(consolelog);
} }
int register_log_component(char *name, char *fext, int compidx) int register_log_component(char *name, char *fext, int compidx)
@@ -354,9 +349,8 @@ int computed_compidx=compidx;
} }
if (computed_compidx >= 0 && computed_compidx <MAX_LOG_COMPONENTS) { if (computed_compidx >= 0 && computed_compidx <MAX_LOG_COMPONENTS) {
g_log->log_component[computed_compidx].name = strdup(name); g_log->log_component[computed_compidx].name = strdup(name);
g_log->log_component[computed_compidx].level = LOG_ERR; g_log->log_component[computed_compidx].savedlevel = LOG_ERR;
g_log->log_component[computed_compidx].interval = 1; g_log->log_component[computed_compidx].stream = stdout;
g_log->log_component[computed_compidx].stream = NULL;
g_log->log_component[computed_compidx].filelog = 0; g_log->log_component[computed_compidx].filelog = 0;
g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/<name>.%s rounded to ^2 */ g_log->log_component[computed_compidx].filelog_name = malloc(strlen(name)+16);/* /tmp/<name>.%s rounded to ^2 */
sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext); sprintf(g_log->log_component[computed_compidx].filelog_name,"/tmp/%s.%s",name,fext);
@@ -432,12 +426,9 @@ int logInit (void)
g_log->level2string[OAILOG_WARNING] = "W"; // WARNING g_log->level2string[OAILOG_WARNING] = "W"; // WARNING
g_log->level2string[OAILOG_INFO] = "I"; //INFO g_log->level2string[OAILOG_INFO] = "I"; //INFO
g_log->level2string[OAILOG_DEBUG] = "D"; // DEBUG g_log->level2string[OAILOG_DEBUG] = "D"; // DEBUG
g_log->level2string[OAILOG_FILE] = "F"; // file // g_log->level2string[OAILOG_FILE] = "F"; // file
g_log->level2string[OAILOG_TRACE] = "T"; // TRACE g_log->level2string[OAILOG_TRACE] = "T"; // TRACE
g_log->onlinelog = 1; //online log file
g_log->filelog = 0;
@@ -446,19 +437,6 @@ int logInit (void)
log_getconfig(g_log); log_getconfig(g_log);
// could put a loop here to check for all comps
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
if (g_log->log_component[i].filelog == 1 ) {
g_log->log_component[i].stream = fopen(g_log->log_component[i].filelog_name,"w");
g_log->log_component[i].fwrite = vfprintf;
} else if (g_log->log_component[i].filelog == 1 ) {
g_log->log_component[i].stream = fopen(g_log->filelog_name,"w");
g_log->log_component[i].fwrite = vfprintf;
} else if (g_log->onlinelog == 1 ) {
g_log->log_component[i].stream = stdout;
g_log->log_component[i].fwrite = vfprintf;
}
}
// set all unused component items to 0, they are for non predefined components // set all unused component items to 0, they are for non predefined components
for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { for (i=MAX_LOG_PREDEF_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
@@ -470,8 +448,6 @@ int logInit (void)
} }
char *log_getthreadname(char *threadname, int bufsize) { char *log_getthreadname(char *threadname, int bufsize) {
int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ; int rt = pthread_getname_np(pthread_self(), threadname,bufsize) ;
@@ -506,27 +482,58 @@ void logRecord_mt(const char *file, const char *func, int line, int comp, int le
( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""), ( (g_log->flag & FLAG_THREAD)?log_getthreadname(threadname,PR_SET_NAME+1):""),
format); format);
g_log->log_component[comp].fwrite(g_log->log_component[comp].stream,log_buffer, args); g_log->log_component[comp].vprint(g_log->log_component[comp].stream,log_buffer, args);
va_end(args); va_end(args);
} }
void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... ) {
va_list args;
char *wbuf;
switch(datatype) {
case LOG_DUMP_DOUBLE:
wbuf=malloc((buffsize * 10) + 64 );
break;
case LOG_DUMP_CHAR:
default:
wbuf=malloc((buffsize * 3 ) + 64 );
break;
}
va_start(args, format);
g_log->log_component[component].vprint(g_log->log_component[component].stream,format, args);
va_end(args);
if (wbuf != NULL) {
int pos=0;
for (int i=0; i<buffsize; i++) {
switch(datatype) {
case LOG_DUMP_DOUBLE:
pos = pos + sprintf(wbuf+pos,"%04.4lf ", (double)((double *)buffer)[i]);
break;
case LOG_DUMP_CHAR:
default:
pos = pos + sprintf(wbuf+pos,"%02x ", (unsigned char)((unsigned char *)buffer)[i]);
break;
}
}
sprintf(wbuf+pos,"\n");
g_log->log_component[component].print(g_log->log_component[component].stream,wbuf);
free(wbuf);
}
}
int set_log(int component, int level, int interval) int set_log(int component, int level)
{ {
/* Checking parameters */ /* Checking parameters */
DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS), DevCheck((component >= MIN_LOG_COMPONENTS) && (component < MAX_LOG_COMPONENTS),
component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS); component, MIN_LOG_COMPONENTS, MAX_LOG_COMPONENTS);
DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_ERR), level, NUM_LOG_LEVEL, DevCheck((level < NUM_LOG_LEVEL) && (level >= OAILOG_ERR), level, NUM_LOG_LEVEL,
OAILOG_ERR); OAILOG_ERR);
DevCheck((interval >= 0) && (interval <= 0xFF), interval, 0, 0xFF);
g_log->log_component[component].level = level; g_log->log_component[component].level = level;
g_log->log_component[component].savedlevel = level;
g_log->log_component[component].interval = interval;
return 0; return 0;
} }
@@ -536,32 +543,67 @@ int set_log(int component, int level, int interval)
void set_glog(int level) void set_glog(int level)
{ {
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) { for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
g_log->log_component[c].level = level; set_log(c, level);
} }
} }
void set_glog_onlinelog(int enable) void set_glog_onlinelog(int enable)
{ {
g_log->onlinelog = enable; for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
if ( enable ) {
g_log->log_component[c].level = g_log->log_component[c].savedlevel;
g_log->log_component[c].vprint = vfprintf;
g_log->log_component[c].print = fprintf;
g_log->log_component[c].stream = stdout;
} else {
g_log->log_component[c].level = -1;
}
}
} }
void set_glog_filelog(int enable) void set_glog_filelog(int enable)
{ {
g_log->filelog = enable; static FILE *fptr;
if ( enable ) {
fptr = fopen(g_log->filelog_name,"w");
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
close_component_filelog(c);
g_log->log_component[c].stream = fptr;
g_log->log_component[c].filelog = 1;
}
} else {
for (int c=0; c< MAX_LOG_COMPONENTS; c++ ) {
g_log->log_component[c].filelog = 0;
if (fptr != NULL) {
fclose(fptr);
}
g_log->log_component[c].stream = stdout;
}
}
} }
void set_component_filelog(int comp) void set_component_filelog(int comp)
{ {
if (g_log->log_component[comp].filelog == 0) { if (g_log->log_component[comp].stream == NULL || g_log->log_component[comp].stream == stdout) {
g_log->log_component[comp].filelog = 1;
if (g_log->log_component[comp].stream == NULL) {
g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w"); g_log->log_component[comp].stream = fopen(g_log->log_component[comp].filelog_name,"w");
} }
} g_log->log_component[comp].vprint = vfprintf;
g_log->log_component[comp].print = fprintf;
g_log->log_component[comp].filelog = 1;
}
void close_component_filelog(int comp)
{
g_log->log_component[comp].filelog = 0;
if (g_log->log_component[comp].stream != NULL && g_log->log_component[comp].stream != stdout ) {
fclose(g_log->log_component[comp].stream);
g_log->log_component[comp].stream = stdout;
}
g_log->log_component[comp].vprint = vfprintf;
g_log->log_component[comp].print = fprintf;
} }
/* /*
* for the two functions below, the passed array must have a final entry * for the two functions below, the passed array must have a final entry
@@ -616,15 +658,13 @@ int is_newline( char *str, int size)
void logClean (void) void logClean (void)
{ {
int i; int i;
LOG_I(PHY,"\n"); LOG_UI(PHY,"\n");
for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { for (i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
if (g_log->log_component[i].stream != NULL) { close_component_filelog(i);
fclose(g_log->log_component[i].stream);
}
} }
} }
@@ -650,8 +690,8 @@ int test_log(void)
LOG_D(MAC, "1 debug MAC \n"); LOG_D(MAC, "1 debug MAC \n");
LOG_W(MAC, "1 warning MAC \n"); LOG_W(MAC, "1 warning MAC \n");
set_log(EMU, OAILOG_INFO, FLAG_ONLINE); set_log(EMU, OAILOG_INFO);
set_log(MAC, OAILOG_WARNING, 0); set_log(MAC, OAILOG_WARNING);
LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n", LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n",
BUILD_VERSION, BUILD_DATE, BUILD_HOST); BUILD_VERSION, BUILD_DATE, BUILD_HOST);
@@ -661,7 +701,7 @@ int test_log(void)
LOG_I(MAC, "2 info MAC \n"); LOG_I(MAC, "2 info MAC \n");
set_log(MAC, OAILOG_NOTICE, 1); set_log(MAC, OAILOG_NOTICE);
LOG_ENTER(MAC); LOG_ENTER(MAC);
LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n", LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n",
@@ -670,8 +710,8 @@ int test_log(void)
LOG_W(MAC, "3 warning MAC \n"); LOG_W(MAC, "3 warning MAC \n");
LOG_I(MAC, "3 info MAC \n"); LOG_I(MAC, "3 info MAC \n");
set_log(MAC, LOG_DEBUG,1); set_log(MAC, LOG_DEBUG);
set_log(EMU, LOG_DEBUG,1); set_log(EMU, LOG_DEBUG);
LOG_ENTER(MAC); LOG_ENTER(MAC);
LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n", LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n",
@@ -681,8 +721,8 @@ int test_log(void)
LOG_I(MAC, "4 info MAC \n"); LOG_I(MAC, "4 info MAC \n");
set_log(MAC, LOG_DEBUG,0); set_log(MAC, LOG_DEBUG);
set_log(EMU, LOG_DEBUG,0); set_log(EMU, LOG_DEBUG);
LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n", LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n",
BUILD_VERSION, BUILD_DATE, BUILD_HOST); BUILD_VERSION, BUILD_DATE, BUILD_HOST);
@@ -691,8 +731,8 @@ int test_log(void)
LOG_I(MAC, "5 info MAC \n"); LOG_I(MAC, "5 info MAC \n");
set_log(MAC, LOG_TRACE,0X07F); set_log(MAC, LOG_TRACE);
set_log(EMU, LOG_TRACE,0X07F); set_log(EMU, LOG_TRACE);
LOG_ENTER(MAC); LOG_ENTER(MAC);
LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n", LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n",
+70 -44
View File
@@ -83,11 +83,10 @@ extern "C" {
* @{*/ * @{*/
# define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */ # define OAILOG_ERR 0 /*!< \brief critical error conditions, impact on "must have" fuctinalities */
# define OAILOG_FILE 1 /*!< \brief important informational messages, but everything OK */ # define OAILOG_WARNING 1 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */
# define OAILOG_WARNING 2 /*!< \brief warning conditions, shouldn't happen but doesn't impact "must have" functionalities */ # define OAILOG_INFO 2 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */
# define OAILOG_INFO 3 /*!< \brief informational messages most people don't need, shouldn't impact real-time behavior */ # define OAILOG_DEBUG 3 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */
# define OAILOG_DEBUG 4 /*!< \brief first level debug-level messages, for developers , may impact real-time behavior */ # define OAILOG_TRACE 4 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
# define OAILOG_TRACE 5 /*!< \brief second level debug-level messages, for developers ,likely impact real-time behavior*/
#define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG */ #define NUM_LOG_LEVEL 6 /*!< \brief the number of message levels users have with LOG */
/* @}*/ /* @}*/
@@ -128,21 +127,47 @@ extern "C" {
/** @defgroup macros to identify a debug entity /** @defgroup macros to identify a debug entity
* @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged * @ingroup each macro is a bit mask where the unique bit set identifies an entity to be debugged
* it allows to dynamically activate or not blocks of code * it allows to dynamically activate or not blocks of code. The LOG_MASKMAP_INIT macro
* is used to map a character string name to each debug bit, it allows to set or clear
* the corresponding bit via the defined name, from the configuration or from the telnet
* server.
* @brief * @brief
* @{*/ * @{*/
#define DEBUG_PRACH (1<<0) #define DEBUG_PRACH (1<<0)
#define DEBUG_RU (1<<1) #define DEBUG_RU (1<<1)
#define DEBUG_UE_PHYPROC (1<<2) #define DEBUG_UE_PHYPROC (1<<2)
#define DEBUG_LTEESTIM (1<<3) #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_CTRLSOCKET (1<<10) #define DEBUG_CTRLSOCKET (1<<10)
#define UE_TIMING (1<<20) #define UE_TIMING (1<<20)
#define SET_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask | O)
#define CLEAR_LOG_DEBUG(O) g_log->debug_mask = (g_log->debug_mask & (~O))
#define SET_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask | O) #define LOG_MASKMAP_INIT {\
#define CLEAR_LOG_MATLAB(O) g_log->matlab_mask = (g_log->matlab_mask & (~O)) {"PRACH", DEBUG_PRACH},\
{"RU", DEBUG_RU},\
{"LTEESTIM", DEBUG_LTEESTIM},\
{"CTRLSOCKET", DEBUG_CTRLSOCKET},\
{"UE_PHYPROC", DEBUG_UE_PHYPROC},\
{"DLCELLSPEC", DEBUG_DLCELLSPEC},\
{"ULSCH", DEBUG_ULSCH},\
{"RRC", DEBUG_RRC},\
{"PDCP", DEBUG_PDCP},\
{"DFT", DEBUG_DFT},\
{"UE_TIMING", UE_TIMING},\
{NULL,-1}\
}
#define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B)
#define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B))
#define SET_LOG_DUMP(B) g_log->genfile_mask = (g_log->genfile_mask | B)
#define CLEAR_LOG_DUMP(B) g_log->genfile_mask = (g_log->genfile_mask & (~B))
@@ -199,17 +224,18 @@ typedef struct {
int value; /*!< \brief integer value of mapping */ int value; /*!< \brief integer value of mapping */
} mapping; } mapping;
typedef int(*log_write_func_t)(FILE *stream, const char *format, va_list ap ); typedef int(*log_vprint_func_t)(FILE *stream, const char *format, va_list ap );
typedef int(*log_print_func_t)(FILE *stream, const char *format, ... );
typedef struct { typedef struct {
const char *name; const char *name;
int level; int level;
int flag; int savedlevel;
int interval; int flag;
int filelog; int filelog;
char *filelog_name; char *filelog_name;
FILE *stream; FILE *stream;
log_write_func_t fwrite; log_vprint_func_t vprint;
log_print_func_t print;
/* SR: make the log buffer component relative */ /* SR: make the log buffer component relative */
char log_buffer[MAX_LOG_TOTAL]; char log_buffer[MAX_LOG_TOTAL];
} log_component_t; } log_component_t;
@@ -218,12 +244,10 @@ typedef struct {
typedef struct { typedef struct {
log_component_t log_component[MAX_LOG_COMPONENTS]; log_component_t log_component[MAX_LOG_COMPONENTS];
char* level2string[NUM_LOG_LEVEL]; char* level2string[NUM_LOG_LEVEL];
int onlinelog;
int flag; int flag;
int filelog;
char* filelog_name; char* filelog_name;
uint64_t debug_mask; uint64_t debug_mask;
uint64_t matlab_mask; uint64_t genfile_mask;
} log_t; } log_t;
@@ -254,14 +278,15 @@ extern log_t *g_log;
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
int logInit (void); int logInit (void);
void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7))); void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...) __attribute__ ((format (printf, 6, 7)));
void log_dump(int component, void *buffer, int buffsize,int datatype, const char* format, ... );
int set_log(int component, int level, int interval); int set_log(int component, int level);
void set_glog(int level); void set_glog(int level);
void set_glog_onlinelog(int enable); void set_glog_onlinelog(int enable);
void set_glog_filelog(int enable); void set_glog_filelog(int enable);
void set_component_filelog(int comp); void set_component_filelog(int comp);
void close_component_filelog(int comp);
void set_component_consolelog(int comp);
int map_str_to_int(mapping *map, const char *str); int map_str_to_int(mapping *map, const char *str);
char *map_int_to_str(mapping *map, int val); char *map_int_to_str(mapping *map, int val);
void logClean (void); void logClean (void);
@@ -293,7 +318,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
#define LOG_CONFIG_LEVEL_FORMAT "%s_log_level" #define LOG_CONFIG_LEVEL_FORMAT "%s_log_level"
#define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile" #define LOG_CONFIG_LOGFILE_FORMAT "%s_log_infile"
#define LOG_CONFIG_DEBUG_FORMAT "%s_debug" #define LOG_CONFIG_DEBUG_FORMAT "%s_debug"
#define LOG_CONFIG_MATLAB_FORMAT "%s_matlab" #define LOG_CONFIG_GENFILE_FORMAT "%s_genfile"
#define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\ #define LOG_CONFIG_HELP_OPTIONS " list of comma separated options to enable log module behavior. Available options: \n"\
" nocolor: disable color usage in log messages\n"\ " nocolor: disable color usage in log messages\n"\
@@ -309,7 +334,7 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define LOG_GLOBALPARAMS_DESC { \ #define LOG_GLOBALPARAMS_DESC { \
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \ {LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, "Default log level for all componemts\n", 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0}, \ {LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, "Default console output option, for all components\n", 0, iptr:&(consolelog), defintval:1, TYPE_INT, 0}, \
{LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \ {LOG_CONFIG_STRING_GLOBAL_LOG_OPTIONS, LOG_CONFIG_HELP_OPTIONS, 0, strlistptr:NULL, defstrlistval:NULL, TYPE_STRINGLIST,0} \
} }
@@ -319,23 +344,25 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
* @ingroup _macro * @ingroup _macro
* @brief Macro used to call logIt function with different message levels * @brief Macro used to call logIt function with different message levels
* @{*/ * @{*/
#define LOG_DUMP_CHAR 0
// debugging macros(g_log->log_component[component].interval?logRecord_mt(__FILE__, __FUNCTION__, __LINE__, component, level, format, ##args):(void)0) #define LOG_DUMP_DOUBLE 1
// debugging macros
#define LOG_F LOG_I /* because LOG_F was originaly to dump a message or buffer but is also used as a regular level...., to dump use LOG_DUMPMSG */
# if T_TRACER # if T_TRACER
/* per component, level dependant macros */ /* per component, level dependant macros */
# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
# define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0) # define LOG_E(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} else { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ;}} while (0)
# define LOG_W(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} else { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)) ;}} while (0)
# define LOG_I(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} else { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ;}} while (0)
# define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0) # define LOG_D(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} else { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ;}} while (0)
# define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0) # define LOG_T(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} else { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ;}} while (0)
# define LOG_F(c, x...) do { if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_FILE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_FILE, x) ;}} 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->genfile_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
# define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */ # define nfapi_log(FILE, FNC, LN, COMP, LVL, F...) do { if (T_stdout) { logRecord_mt(__FILE__, __FUNCTION__, __LINE__,COMP, LVL, F) ;}} while (0) /* */
/* bitmask dependant macros, to isolate debugging code */ /* bitmask dependant macros, to isolate debugging code */
# define LOG_DEBUG_BEGIN(D) if (g_log->debug_mask & D) { # define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
# define LOG_DEBUG_END }
/* bitmask dependant macros, to generate matlab files */ /* bitmask dependant macros, to generate debug file such as matlab file or message dump */
# define LOG_M_BEGIN(D) if (g_log->matlab_mask & D) { # define LOG_GENFILEFLAG(D) (g_log->genfile_mask & D)
# define LOG_M_END }
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)/* */ # define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)/* */
/* define variable only used in LOG macro's */ /* define variable only used in LOG macro's */
# define LOG_VAR(A,B) A B # define LOG_VAR(A,B) A B
@@ -345,12 +372,11 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
# define LOG_E(c, x...) /* */ # define LOG_E(c, x...) /* */
# define LOG_D(c, x...) /* */ # define LOG_D(c, x...) /* */
# define LOG_T(c, x...) /* */ # define LOG_T(c, x...) /* */
# define LOG_F(c, x...) /* */
# define LOG_DUMPMSG(c, b, s, x...) /* */
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...) # define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
# define LOG_DEBUG_BEGIN(D) if (0) { # define LOG_DEBUGFLAG(D) ( 0 )
# define LOG_DEBUG_END } # define LOG_GENFILEFLAG(D) ( 0 )
# define LOG_M_BEGIN(D) if (0) {
# define LOG_M_END }
# define LOG_M(file, vector, data, len, dec, format) # define LOG_M(file, vector, data, len, dec, format)
# define LOG_VAR(A,B) # define LOG_VAR(A,B)
# endif /* T_TRACER */ # endif /* T_TRACER */
@@ -359,8 +385,8 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
/* unfiltered macros, usefull for simulators or messages at init time, before log is configured */ /* unfiltered macros, usefull for simulators or messages at init time, before log is configured */
#define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0) #define LOG_UM(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format);} while(0)
#define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0) #define LOG_UI(c, x...) do {logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ; } while(0)
#define LOG_UDUMPMSG(c, b, s, f, x...) do { log_dump(c, b, s, f, x) ;} while (0) /* */
/* @}*/ /* @}*/
+2 -2
View File
@@ -70,8 +70,8 @@ char *tmpstr;
char *shlibpath =NULL; char *shlibpath =NULL;
char *shlibversion=NULL; char *shlibversion=NULL;
char *cfgprefix; char *cfgprefix;
paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0}, paramdef_t LoaderParams[] ={{"shlibpath", NULL, 0, strptr:&shlibpath, defstrval:NULL, TYPE_STRING, 0, NULL},
{"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0}}; {"shlibversion", NULL, 0, strptr:&shlibversion, defstrval:"", TYPE_STRING, 0, NULL}};
int ret; int ret;
+6 -6
View File
@@ -72,13 +72,13 @@ typedef int(*getfarrayfunc_t)(loader_shlibfunc_t **funcarray);
#define DEFAULT_MAXSHLIBS 10 #define DEFAULT_MAXSHLIBS 10
loader_data_t loader_data; loader_data_t loader_data;
/*------------------------------------------------------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* LOADER parameters */ /* LOADER parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */ /* optname helpstr paramflags XXXptr defXXXval type numelt check func*/
/*------------------------------------------------------------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define LOADER_PARAMS_DESC { \ #define LOADER_PARAMS_DESC { \
{"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0}, \ {"shlibpath", NULL, PARAMFLAG_NOFREE, strptr:(char **)&(loader_data.shlibpath), defstrval:DEFAULT_PATH, TYPE_STRING, 0, NULL},\
{"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0}, \ {"maxshlibs", NULL, 0, uptr:&(loader_data.maxshlibs), defintval:DEFAULT_MAXSHLIBS, TYPE_UINT32, 0, NULL}\
} }
/*-------------------------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------------------------*/
+42 -30
View File
@@ -199,28 +199,29 @@ int proccmd_show(char *buf, int debug, telnet_printfunc_t prnt)
print_threads(buf,debug,prnt); print_threads(buf,debug,prnt);
} }
if (strcasestr(buf,"loglvl") != NULL) { if (strcasestr(buf,"loglvl") != NULL) {
prnt(" component level enabled\n"); prnt("\n component level enabled output\n");
for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) { for (int i=MIN_LOG_COMPONENTS; i < MAX_LOG_COMPONENTS; i++) {
if (g_log->log_component[i].name != NULL) { if (g_log->log_component[i].name != NULL) {
prnt("%02i %17.17s:%10.10s %s\n",i ,g_log->log_component[i].name, prnt("%02i %17.17s:%10.10s %s %s\n",i ,g_log->log_component[i].name,
map_int_to_str(log_level_names,g_log->log_component[i].level), map_int_to_str(log_level_names,(g_log->log_component[i].level>=0)?g_log->log_component[i].level:g_log->log_component[i].savedlevel),
((g_log->log_component[i].interval>0)?"Y":"N") ); ((g_log->log_component[i].level>=0)?"Y":"N"),
((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout"));
} }
} }
} }
if (strcasestr(buf,"logopt") != NULL) { if (strcasestr(buf,"logopt") != NULL) {
prnt(" option enabled\n"); prnt("\n option enabled\n");
for (int i=0; log_options[i].name != NULL; i++) { for (int i=0; log_options[i].name != NULL; i++) {
prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name, prnt("%02i %17.17s %10.10s \n",i ,log_options[i].name,
((g_log->flag & log_options[i].value)?"Y":"N") ); ((g_log->flag & log_options[i].value)?"Y":"N") );
} }
} }
if (strcasestr(buf,"dbgopt") != NULL) { if (strcasestr(buf,"dbgopt") != NULL) {
prnt(" option debug matlab\n"); prnt("\n module debug dumpfile\n");
for (int i=0; log_maskmap[i].name != NULL ; i++) { for (int i=0; log_maskmap[i].name != NULL ; i++) {
prnt("%02i %17.17s %5.5s %5.5s\n",i ,log_maskmap[i].name, 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->debug_mask & log_maskmap[i].value)?"Y":"N"),
((g_log->matlab_mask & log_maskmap[i].value)?"Y":"N") ); ((g_log->genfile_mask & log_maskmap[i].value)?"Y":"N") );
} }
} }
if (strcasestr(buf,"config") != NULL) { if (strcasestr(buf,"config") != NULL) {
@@ -337,15 +338,15 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
prnt("Available log levels: \n "); prnt("Available log levels: \n ");
for (int i=0; log_level_names[i].name != NULL; i++) for (int i=0; log_level_names[i].name != NULL; i++)
prnt("%s ",log_level_names[i].name); prnt("%s ",log_level_names[i].name);
prnt("\n"); prnt("\n\n");
prnt("Available display options: \n "); prnt("Available display options: \n ");
for (int i=0; log_options[i].name != NULL; i++) for (int i=0; log_options[i].name != NULL; i++)
prnt("%s ",log_options[i].name); prnt("%s ",log_options[i].name);
prnt("\n"); prnt("\n\n");
prnt("Available debug or matlab options: \n "); prnt("Available debug or genfile options: \n ");
for (int i=0; log_maskmap[i].name != NULL; i++) for (int i=0; log_maskmap[i].name != NULL; i++)
prnt("%s ",log_maskmap[i].name); prnt("%s ",log_maskmap[i].name);
prnt("\n"); prnt("\n\n");
proccmd_show("loglvl",debug,prnt); proccmd_show("loglvl",debug,prnt);
proccmd_show("logopt",debug,prnt); proccmd_show("logopt",debug,prnt);
proccmd_show("dbgopt",debug,prnt); proccmd_show("dbgopt",debug,prnt);
@@ -377,7 +378,7 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
else if (l == 2 && strcmp(logparam,"debug") == 0){ else if (l == 2 && strcmp(logparam,"debug") == 0){
optbit=map_str_to_int(log_maskmap,opt); optbit=map_str_to_int(log_maskmap,opt);
if (optbit < 0) { if (optbit < 0) {
prnt("debug flag %s unknown\n",opt); prnt("module %s unknown\n",opt);
} else { } else {
if (idx1 > 0) if (idx1 > 0)
SET_LOG_DEBUG(optbit); SET_LOG_DEBUG(optbit);
@@ -386,27 +387,27 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
proccmd_show("dbgopt",debug,prnt); proccmd_show("dbgopt",debug,prnt);
} }
} }
else if (l == 2 && strcmp(logparam,"matlab") == 0){ else if (l == 2 && strcmp(logparam,"dump") == 0){
optbit=map_str_to_int(log_maskmap,opt); optbit=map_str_to_int(log_maskmap,opt);
if (optbit < 0) { if (optbit < 0) {
prnt("matlab flag %s unknown\n",opt); prnt("module %s unknown\n",opt);
} else { } else {
if (idx1 > 0) if (idx1 > 0)
SET_LOG_MATLAB(optbit); SET_LOG_DUMP(optbit);
else else
CLEAR_LOG_MATLAB(optbit); CLEAR_LOG_DUMP(optbit);
proccmd_show("dbgopt",debug,prnt); proccmd_show("dbgopt",debug,prnt);
} }
} }
if (logparam != NULL) free(logparam); if (logparam != NULL) free(logparam);
if (opt != NULL) free(opt); if (opt != NULL) free(opt);
} else if ( s == 3 && logsubcmd != NULL) { } else if ( s == 3 && logsubcmd != NULL) {
int level, interval; int level, enable, filelog;
char *tmpstr=NULL; char *tmpstr=NULL;
char *logparam=NULL; char *logparam=NULL;
int l; int l;
level = interval = -1; level = enable = filelog = -1;
l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr); l=sscanf(logsubcmd,"%m[^'_']_%m[^'_']",&logparam,&tmpstr);
if (debug > 0) if (debug > 0)
prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr)); prnt("l=%i, %s %s\n",l,((logparam==NULL)?"\"\"":logparam), ((tmpstr==NULL)?"\"\"":tmpstr));
@@ -419,9 +420,13 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
} }
} else if (l ==1 ) { } else if (l ==1 ) {
if (strcmp(logparam,"enable") == 0) { if (strcmp(logparam,"enable") == 0) {
interval = 1; enable = 1;
} else if (strcmp(logparam,"disable") == 0) { } else if (strcmp(logparam,"disable") == 0) {
interval = 0; enable = 0;
} else if (strcmp(logparam,"file") == 0) {
filelog = 1 ;
} else if (strcmp(logparam,"nofile") == 0) {
filelog = 0 ;
} else { } else {
prnt("%s%s unknown log sub command \n",logparam, tmpstr); prnt("%s%s unknown log sub command \n",logparam, tmpstr);
} }
@@ -431,19 +436,26 @@ int s = sscanf(buf,"%ms %i-%i\n",&logsubcmd, &idx1,&idx2);
if (logparam != NULL) free(logparam); if (logparam != NULL) free(logparam);
if (tmpstr != NULL) free(tmpstr); if (tmpstr != NULL) free(tmpstr);
for (int i=idx1; i<=idx2 ; i++) { for (int i=idx1; i<=idx2 ; i++) {
if ( level >= 0 || enable >= 0) {
if (level < 0) { if (level < 0) {
level=g_log->log_component[i].level; level=g_log->log_component[i].level;
} }
if (interval < 0) { if (enable < 0) {
interval=g_log->log_component[i].interval; level= -1;
} }
set_log(i, level, interval); set_log(i, level);
prnt("log level comp %i %s set to %s (%s)\n", }
i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name), if ( filelog == 1 ) {
map_int_to_str(log_level_names,g_log->log_component[i].level), set_component_filelog(i);
((g_log->log_component[i].interval>0)?"enabled":"disabled")); }
if ( filelog == 0 ) {
close_component_filelog(i);
}
prnt("log level comp %i %s set to %s (%s) output: %s\n",
i,((g_log->log_component[i].name==NULL)?"":g_log->log_component[i].name),
map_int_to_str(log_level_names,g_log->log_component[i].level),
((g_log->log_component[i].level>=0)?"enabled":"disabled"),
((g_log->log_component[i].filelog>0)?g_log->log_component[i].filelog_name:"stdout"));
} }
} else { } else {
prnt("%s: wrong log command...\n",buf); prnt("%s: wrong log command...\n",buf);
+7 -5
View File
@@ -48,13 +48,15 @@ telnetshell_vardef_t proc_vardef[] = {
show: display current log configuration \n\ show: display current log configuration \n\
online, noonline: enable or disable console logs \n\ online, noonline: enable or disable console logs \n\
enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\ enable, disable id1-id2: enable or disable logs for components index id1 to id2 \n\
file, nofile id1-id2: enable or disable redirecting logs to file for components index id1 to id2 \n\
logfile name depends on component name and is printed in the show command \n\
level_<level> id1-id2: set log level to <level> for components index id1 to id2 \n\ level_<level> id1-id2: set log level to <level> for components index id1 to id2 \n\
use the show command to get the authorized values for <level> and the list of component \ use the show command to get the authorized values for \n\
indexes that can be used for id1 and id2 \n\ <level> and the list of component indexes that can be used for id1 and id2 \n\
print_<opt> <0|1> disable or enable the \"opt\" log option, use the show command to get \ print_<opt> <0|1> disable or enable the \"opt\" log option, use the show command to get \
the available options\n\ the available options\n\
matlab_<opt> debug_<func> disable or enable the debug code or matlab file generation \ dump_<mod> debug_<mod > disable or enable the debug file generation or debug code\
for \"func\" function. use the show command to get the available options\n" for \"mod\" module. use the show command to get the available modules\n"
#define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\ #define PROCCMD_THREAD_HELP_STRING " thread sub commands: \n\
<thread id> aff <core> : set affinity of thread <thread id> to core <core> \n\ <thread id> aff <core> : set affinity of thread <thread id> to core <core> \n\
+15 -15
View File
@@ -274,11 +274,11 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
LOG_M_BEGIN(DEBUG_LTEESTIM); if ( LOG_GENFILEFLAG(DEBUG_LTEESTIM)){
LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1); LOG_M("primary_sync0.m","psync0",primary_synch0_time,frame_parms->ofdm_symbol_size,1,1);
LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1); LOG_M("primary_sync1.m","psync1",primary_synch1_time,frame_parms->ofdm_symbol_size,1,1);
LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1); LOG_M("primary_sync2.m","psync2",primary_synch2_time,frame_parms->ofdm_symbol_size,1,1);
LOG_M_END }
return (1); return (1);
} }
@@ -460,18 +460,18 @@ int lte_sync_time(int **rxdata, ///rx data in time domain
LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2); LOG_I(PHY,"[UE] lte_sync_time: Sync source = %d, Peak found at pos %d, val = %d (%d dB)\n",sync_source,peak_pos,peak_val,dB_fixed(peak_val)/2);
LOG_M_BEGIN(DEBUG_LTEESTIM) if ( LOG_GENFILEFLAG(DEBUG_LTEESTIM)){
static int debug_cnt; static int debug_cnt;
if (debug_cnt == 0) { if (debug_cnt == 0) {
LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2); LOG_M("sync_corr0_ue.m","synccorr0",sync_corr_ue0,2*length,1,2);
LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2); LOG_M("sync_corr1_ue.m","synccorr1",sync_corr_ue1,2*length,1,2);
LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2); LOG_M("sync_corr2_ue.m","synccorr2",sync_corr_ue2,2*length,1,2);
LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1); LOG_M("rxdata0.m","rxd0",rxdata[0],length<<1,1,1);
// exit(-1); // exit(-1);
} else { } else {
debug_cnt++; debug_cnt++;
} }
LOG_M_END }
return(peak_pos); return(peak_pos);
+34 -37
View File
@@ -25,9 +25,9 @@
#include "PHY/defs_eNB.h" #include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h" #include "PHY/defs_UE.h"
#include "PHY/impl_defs_top.h" #include "PHY/impl_defs_top.h"
#include "common/utils/LOG/log.h"
//extern unsigned int lte_gold_table[3][20][2][14]; //extern unsigned int lte_gold_table[3][20][2][14];
//#define DEBUG_DL_CELL_SPEC
@@ -64,7 +64,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
else if ((p==1) && (l>0)) else if ((p==1) && (l>0))
nu = 0; nu = 0;
else { else {
printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l); LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1); return(-1);
} }
@@ -85,19 +85,19 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
// this is r_mprime from 3GPP 36-211 6.10.1.2 // this is r_mprime from 3GPP 36-211 6.10.1.2
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3; //output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
Ns,l,m,mprime_dword,mprime_qpsk_symb); Ns,l,m,mprime_dword,mprime_qpsk_symb);
printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
#endif }
mprime++; mprime++;
#ifdef DEBUG_DL_CELL_SPEC
if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
if (m<4) if (m<4)
printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
#endif }
k+=6;//b k+=6;//b
if (k >= eNB->frame_parms.ofdm_symbol_size) { if (k >= eNB->frame_parms.ofdm_symbol_size) {
@@ -105,7 +105,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *eNB,
k-=eNB->frame_parms.ofdm_symbol_size; k-=eNB->frame_parms.ofdm_symbol_size;
} }
// printf("** k %d\n",k); // LOG_I(PHY,"** k %d\n",k);
} }
return(0); return(0);
@@ -143,7 +143,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
else if ((p==1) && (l>0)) else if ((p==1) && (l>0))
nu = 0; nu = 0;
else { else {
printf("lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l); LOG_E(PHY,"lte_dl_cell_spec: p %d, l %d -> ERROR\n",p,l);
return(-1); return(-1);
} }
@@ -168,27 +168,24 @@ int lte_dl_cell_spec(PHY_VARS_eNB *eNB,
// this is r_mprime from 3GPP 36-211 6.10.1.2 // this is r_mprime from 3GPP 36-211 6.10.1.2
output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; output[k] = qpsk[(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3; //output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
Ns,l,m,mprime_dword,mprime_qpsk_symb); Ns,l,m,mprime_dword,mprime_qpsk_symb);
printf("index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); LOG_I(PHY,"index = %d (k %d)\n",(eNB->lte_gold_table[Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
#endif }
mprime++; mprime++;
#ifdef DEBUG_DL_CELL_SPEC if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
if (m<4)
LOG_I(PHY,"Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
}
if (m<4)
printf("Ns %d, l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
#endif
k+=6; k+=6;
if (k >= eNB->frame_parms.ofdm_symbol_size) { if (k >= eNB->frame_parms.ofdm_symbol_size) {
k++; // skip DC carrier k++; // skip DC carrier
k-=eNB->frame_parms.ofdm_symbol_size; k-=eNB->frame_parms.ofdm_symbol_size;
} }
// printf("** k %d\n",k); // LOG_I(PHY,"** k %d\n",k);
} }
return(0); return(0);
@@ -231,21 +228,21 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *ue,
// this is r_mprime from 3GPP 36-211 6.10.1.2 // this is r_mprime from 3GPP 36-211 6.10.1.2
output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; output[k] = qpsk[(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3];
#ifdef DEBUG_DL_CELL_SPEC if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", LOG_I(PHY,"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n",
Ns,l,m,mprime_dword,mprime_qpsk_symb); Ns,l,m,mprime_dword,mprime_qpsk_symb);
printf("index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); LOG_I(PHY,"index = %d (k %d)\n",(ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k);
#endif }
mprime++; mprime++;
#ifdef DEBUG_DL_CELL_SPEC if (LOG_DEBUGFLAG(DEBUG_DLCELLSPEC)) {
if (m<4) if (m<4)
printf("Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); LOG_I(PHY,"Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]);
#endif }
k++; k++;
// printf("** k %d\n",k); // LOG_I(PHY,"** k %d\n",k);
} }
return(0); return(0);
+1 -1
View File
@@ -220,7 +220,7 @@ void fill_pdcch_order(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,DCI_ALLOC_t *dci_a
break; break;
} }
LOG_I(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n", LOG_T(PHY,"%d.%d: DCI 1A: rnti %x, PDCCH order to do PRACH\n",
proc->frame_tx, proc->subframe_tx, rel8->rnti); proc->frame_tx, proc->subframe_tx, rel8->rnti);
} }
+103 -103
View File
@@ -153,25 +153,24 @@ void rx_prach0(PHY_VARS_eNB *eNB,
subframe = eNB->proc.subframe_prach_br; subframe = eNB->proc.subframe_prach_br;
prachF = eNB->prach_vars_br.prachF; prachF = eNB->prach_vars_br.prachF;
rxsigF = eNB->prach_vars_br.rxsigF[ce_level]; rxsigF = eNB->prach_vars_br.rxsigF[ce_level];
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)){
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(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", if (((ru->proc.frame_prach)&1023) < 20) LOG_I(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,ru->proc.frame_prach,subframe, br_flag,ce_level,ru->proc.frame_prach,subframe,
fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level], fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],
prach_ConfigIndex,rootSequenceIndex, prach_ConfigIndex,rootSequenceIndex,
eNB->prach_vars_br.repetition_number[ce_level], eNB->prach_vars_br.repetition_number[ce_level],
fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]); fp->prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]);
LOG_DEBUG_END }
} } else
else
#endif #endif
{ {
prach_ifftp = eNB->prach_vars.prach_ifft[0]; prach_ifftp = eNB->prach_vars.prach_ifft[0];
subframe = eNB->proc.subframe_prach; subframe = eNB->proc.subframe_prach;
prachF = eNB->prach_vars.prachF; prachF = eNB->prach_vars.prachF;
rxsigF = eNB->prach_vars.rxsigF[0]; rxsigF = eNB->prach_vars.rxsigF[0];
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)){
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(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 (((ru->proc.frame_prach)&1023) < 20) LOG_I(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);
LOG_DEBUG_END }
} }
} }
else { else {
@@ -179,20 +178,19 @@ LOG_DEBUG_END
if (br_flag == 1) { if (br_flag == 1) {
subframe = ru->proc.subframe_prach_br; subframe = ru->proc.subframe_prach_br;
rxsigF = ru->prach_rxsigF_br[ce_level]; rxsigF = ru->prach_rxsigF_br[ce_level];
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)){
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach (br_flag %d, ce_level %d) for frame %d subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", if (((ru->proc.frame_prach)&1023) < 20) LOG_I(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,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex); br_flag,ce_level,ru->proc.frame_prach,subframe,fp->prach_emtc_config_common.prach_ConfigInfo.prach_FreqOffset[ce_level],prach_ConfigIndex);
LOG_DEBUG_END }
} } else
else
#endif #endif
{ {
subframe = ru->proc.subframe_prach; subframe = ru->proc.subframe_prach;
rxsigF = ru->prach_rxsigF; rxsigF = ru->prach_rxsigF;
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)){
if (((ru->proc.frame_prach)&1023) < 20) LOG_I(PHY,"PRACH (RU) : running rx_prach for subframe %d, prach_FreqOffset %d, prach_ConfigIndex %d\n", if (((ru->proc.frame_prach)&1023) < 20) LOG_I(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); subframe,fp->prach_config_common.prach_ConfigInfo.prach_FreqOffset,prach_ConfigIndex);
LOG_DEBUG_END }
} }
} }
@@ -204,27 +202,25 @@ LOG_DEBUG_END
// DJP - indexing below in subframe zero takes us off the beginning of the array??? // 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]; prach[aa] = (int16_t*)&ru->common.rxdata[aa][(subframe*fp->samples_per_tti)-ru->N_TA_offset];
LOG_M_BEGIN(PRACH) if (LOG_GENFILEFLAG(PRACH)){
int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti); int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
int8_t dbEn0 = dB_fixed(en0); int8_t dbEn0 = dB_fixed(en0);
int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB; int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
char buffer[80]; char buffer[80];
if (dbEn0>32 && prach[0]!= NULL) if (dbEn0>32 && prach[0]!= NULL) {
{ static int counter=0;
static int counter=0; sprintf(buffer, "%s%d", "/tmp/prach_rx",counter);
sprintf(buffer, "%s%d", "/tmp/prach_rx",counter); LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13);
LOG_M(buffer,"prach_rx",prach[0],fp->samples_per_tti,1,13); }
if (dB_fixed(en0)>32) {
sprintf(buffer, "rach_dBm:%d",rach_dBm);
if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
(subframe*fp->samples_per_tti)-ru->N_TA_offset);
} }
if (dB_fixed(en0)>32) }
{
sprintf(buffer, "rach_dBm:%d",rach_dBm);
if (prach[0]!= NULL) LOG_M("prach_rx","prach_rx",prach[0],fp->samples_per_tti,1,1);
LOG_I(PHY,"RU %d, br_flag %d ce_level %d frame %d subframe %d per_tti:%d prach:%p (energy %d) TA:%d %s rxdata:%p index:%d\n",
ru->idx,br_flag,ce_level,ru->proc.frame_prach,subframe,fp->samples_per_tti,
prach[aa],dbEn0,ru->N_TA_offset,buffer,ru->common.rxdata[aa],
(subframe*fp->samples_per_tti)-ru->N_TA_offset);
}
LOG_M_END
} }
} }
@@ -306,9 +302,9 @@ LOG_M_END
if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))|| if (((eNB!=NULL) && (ru->function != NGFI_RAU_IF4p5))||
((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources ((eNB==NULL) && (ru->function == NGFI_RRU_IF4p5))) { // compute the DFTs of the PRACH temporal resources
// Do forward transform // Do forward transform
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(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); 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);
LOG_DEBUG_END }
for (aa=0; aa<nb_rx; aa++) { for (aa=0; aa<nb_rx; aa++) {
AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa); AssertFatal(prach[aa]!=NULL,"prach[%d] is null\n",aa);
prach2 = prach[aa] + (Ncp<<1); prach2 = prach[aa] + (Ncp<<1);
@@ -439,10 +435,10 @@ LOG_DEBUG_END
return; return;
} else if (eNB!=NULL) { } else if (eNB!=NULL) {
LOG_DEBUG_BEGIN(PRACH) if ( LOG_DEBUGFLAG(PRACH)) {
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
if ((en > 60)&&(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,eNB->proc.frame_rx,eNB->proc.subframe_rx,en); if ((en > 60)&&(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,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
LOG_DEBUG_END }
} }
// in case of RAU and prach received rx_thread wakes up prach // in case of RAU and prach received rx_thread wakes up prach
@@ -477,10 +473,10 @@ LOG_DEBUG_END
*max_preamble_energy=0; *max_preamble_energy=0;
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) { for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)){
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag); if (en>60) LOG_I(PHY,"frame %d, subframe %d : Trying preamble %d (br_flag %d)\n",ru->proc.frame_prach,subframe,preamble_index,br_flag);
LOG_DEBUG_END }
if (restricted_set == 0) { if (restricted_set == 0) {
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index // This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS))); preamble_offset = ((NCS==0)? preamble_index : (preamble_index/(N_ZC/NCS)));
@@ -563,11 +559,11 @@ LOG_DEBUG_END
} }
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex // Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)) {
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n", if (en>60) LOG_I(PHY,"frame %d, subframe %d : preamble index %d: offset %d, preamble shift %d (br_flag %d, en %d)\n",
ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en); ru->proc.frame_prach,subframe,preamble_index,preamble_offset,preamble_shift,br_flag,en);
LOG_DEBUG_END }
log2_ifft_size = 10; log2_ifft_size = 10;
fft_size = 6144; fft_size = 6144;
@@ -589,13 +585,13 @@ LOG_DEBUG_END
} }
memset(prachF, 0, sizeof(int16_t)*2*1024 ); memset(prachF, 0, sizeof(int16_t)*2*1024 );
LOG_M_BEGIN(PRACH) if (LOG_GENFILEFLAG(PRACH)) {
if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1); if (prach[0]!= NULL) LOG_M("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1); LOG_M("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1); LOG_M("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1); LOG_M("prach_rxF1.m","prach_rxF1",rxsigF[1],6144,1,1);
LOG_M_END }
for (aa=0;aa<nb_rx; aa++) { for (aa=0;aa<nb_rx; aa++) {
// Do componentwise product with Xu* on each antenna // Do componentwise product with Xu* on each antenna
@@ -623,10 +619,10 @@ LOG_M_END
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)])>>10; 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)])>>10;
} }
LOG_M_BEGIN(PRACH) if (LOG_GENFILEFLAG(PRACH)) {
if (aa==0) LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); 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); if (aa==1) LOG_M("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
LOG_M_END }
}// antennas_rx }// antennas_rx
} // new dft } // new dft
@@ -637,10 +633,10 @@ LOG_M_END
eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level])) eNB->frame_parms.prach_emtc_config_common.prach_ConfigInfo.prach_numRepetitionPerPreambleAttempt[ce_level]))
#endif #endif
{ {
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)){
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); 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",ru->proc.frame_prach,subframe,br_flag,en); if (en>60) LOG_I(PHY,"frame %d, subframe %d: Checking for peak in time-domain (br_flag %d, en %d)\n",ru->proc.frame_prach,subframe,br_flag,en);
LOG_DEBUG_END }
preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC)); preamble_shift2 = ((preamble_shift==0) ? 0 : ((preamble_shift<<log2_ifft_size)/N_ZC));
@@ -652,44 +648,48 @@ LOG_DEBUG_END
*max_preamble_energy = levdB; *max_preamble_energy = levdB;
*max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2; *max_preamble_delay = ((i*fft_size)>>log2_ifft_size)*update_TA/update_TA2;
*max_preamble = preamble_index; *max_preamble = preamble_index;
LOG_DEBUG_BEGIN(PRACH) if (LOG_DEBUGFLAG(PRACH)){
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
if ((en>60) && (br_flag==1)) 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",ru->proc.frame_prach,subframe,*max_preamble_energy,*max_preamble_delay,*max_preamble,br_flag,ce_level,levdB,lev); if ((en>60) && (br_flag==1))
LOG_DEBUG_END 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",
ru->proc.frame_prach,subframe,
*max_preamble_energy,*max_preamble_delay,
*max_preamble,br_flag,ce_level,levdB,lev);
}
} }
} }
} }
}// preamble_index }// preamble_index
LOG_M_BEGIN(PRACH) if (LOG_GENFILEFLAG(PRACH)) {
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840)); int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
if (en>60) { if (en>60) {
k = (12*n_ra_prb) - 6*fp->N_RB_UL; k = (12*n_ra_prb) - 6*fp->N_RB_UL;
if (k<0) k+=fp->ofdm_symbol_size; if (k<0) k+=fp->ofdm_symbol_size;
k*=12; k*=12;
k+=13; k+=13;
k*=2; k*=2;
if (br_flag == 0) { if (br_flag == 0) {
LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1); LOG_M("rxsigF.m","prach_rxF",&rxsigF[0][0],12288,1,1);
LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1); LOG_M("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
LOG_M("Xu.m","xu",Xu,N_ZC,1,1); LOG_M("Xu.m","xu",Xu,N_ZC,1,1);
LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1); LOG_M("prach_ifft0.m","prach_t0",prach_ifft,1024,1,1);
} }
else { else {
LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb); LOG_E(PHY,"Dumping prach (br_flag %d), k = %d (n_ra_prb %d)\n",br_flag,k,n_ra_prb);
LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1); LOG_M("rxsigF_br.m","prach_rxF_br",&rxsigF[0][0],12288,1,1);
LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1); LOG_M("prach_rxF_comp0_br.m","prach_rxF_comp0_br",prachF,1024,1,1);
LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1); LOG_M("Xu_br.m","xu_br",Xu,N_ZC,1,1);
LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1); LOG_M("prach_ifft0_br.m","prach_t0_br",prach_ifft,1024,1,1);
exit(-1); exit(-1);
} }
} }
LOG_M_END } /* LOG_GENFILEFLAG(PRACH) */
if (eNB) stop_meas(&eNB->rx_prach); if (eNB) stop_meas(&eNB->rx_prach);
} }
+33 -60
View File
@@ -33,7 +33,6 @@
#include "PHY/defs_eNB.h" #include "PHY/defs_eNB.h"
#include "PHY/phy_extern.h" #include "PHY/phy_extern.h"
#include "transport_eNB.h" #include "transport_eNB.h"
//#define DEBUG_ULSCH
#include "PHY/sse_intrin.h" #include "PHY/sse_intrin.h"
#include "transport_common_proto.h" #include "transport_common_proto.h"
#include "PHY/LTE_ESTIMATION/lte_estimation.h" #include "PHY/LTE_ESTIMATION/lte_estimation.h"
@@ -67,7 +66,7 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
// printf("Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH); LOG_T(PHY,"Doing lte_idft for Msc_PUSCH %d\n",Msc_PUSCH);
if (frame_parms->Ncp == 0) { // Normal prefix if (frame_parms->Ncp == 0) { // Normal prefix
z0 = z; z0 = z;
@@ -388,13 +387,13 @@ void lte_idft(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *z, uint16_t Msc_PUSCH)
for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) { for (i=0,ip=0; i<Msc_PUSCH; i++,ip+=4) {
z0[i] = ((uint32_t*)idft_out0)[ip]; z0[i] = ((uint32_t*)idft_out0)[ip];
/* if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
printf("out0 (%d,%d),(%d,%d),(%d,%d),(%d,%d)\n", LOG_I(PHY,"out0 (%d,%d),(%d,%d),(%d,%d),(%d,%d)\n",
((int16_t*)&idft_out0[ip])[0],((int16_t*)&idft_out0[ip])[1], ((int16_t*)&idft_out0[ip])[0],((int16_t*)&idft_out0[ip])[1],
((int16_t*)&idft_out0[ip+1])[0],((int16_t*)&idft_out0[ip+1])[1], ((int16_t*)&idft_out0[ip+1])[0],((int16_t*)&idft_out0[ip+1])[1],
((int16_t*)&idft_out0[ip+2])[0],((int16_t*)&idft_out0[ip+2])[1], ((int16_t*)&idft_out0[ip+2])[0],((int16_t*)&idft_out0[ip+2])[1],
((int16_t*)&idft_out0[ip+3])[0],((int16_t*)&idft_out0[ip+3])[1]); ((int16_t*)&idft_out0[ip+3])[0],((int16_t*)&idft_out0[ip+3])[1]);
*/ }
z1[i] = ((uint32_t*)idft_out0)[ip+1]; z1[i] = ((uint32_t*)idft_out0)[ip+1];
z2[i] = ((uint32_t*)idft_out0)[ip+2]; z2[i] = ((uint32_t*)idft_out0)[ip+2];
z3[i] = ((uint32_t*)idft_out0)[ip+3]; z3[i] = ((uint32_t*)idft_out0)[ip+3];
@@ -479,10 +478,7 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int i; int i;
// printf("qpsk llr for symbol %d (pos %d), llr offset %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),llr128U-(__m128i*)ulsch_llr);
for (i=0; i<(nb_rb*3); i++) { for (i=0; i<(nb_rb*3); i++) {
//printf("%d,%d,%d,%d,%d,%d,%d,%d\n",((int16_t *)rxF)[0],((int16_t *)rxF)[1],((int16_t *)rxF)[2],((int16_t *)rxF)[3],((int16_t *)rxF)[4],((int16_t *)rxF)[5],((int16_t *)rxF)[6],((int16_t *)rxF)[7]);
*(*llrp128) = *rxF; *(*llrp128) = *rxF;
rxF++; rxF++;
(*llrp128)++; (*llrp128)++;
@@ -593,7 +589,9 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; ch_mag =(int16x8_t*)&ul_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; ch_magb =(int16x8_t*)&ul_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
#endif #endif
// printf("symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0)); if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
LOG_UI(PHY,"symbol %d: mag %d, magb %d\n",symbol,_mm_extract_epi16(ch_mag[0],0),_mm_extract_epi16(ch_magb[0],0));
}
for (i=0; i<(nb_rb*3); i++) { for (i=0; i<(nb_rb*3); i++) {
@@ -736,9 +734,9 @@ void ulsch_extract_rbs_single(int32_t **rxdataF,
nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC nb_rb1 = cmin(cmax((int)(frame_parms->N_RB_UL) - (int)(2*first_rb),(int)0),(int)(2*nb_rb)); // 2 times no. RBs before the DC
nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC nb_rb2 = 2*nb_rb - nb_rb1; // 2 times no. RBs after the DC
#ifdef DEBUG_ULSCH if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
printf("ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2); LOG_UI(PHY,"ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d\n",nb_rb1,nb_rb2);
#endif }
rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)]; rxF_ext = &rxdataF_ext[aarx][(symbol*frame_parms->N_RB_UL*12)];
@@ -838,7 +836,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
#endif #endif
for (rb=0; rb<nb_rb; rb++) { for (rb=0; rb<nb_rb; rb++) {
// printf("comp: symbol %d rb %d\n",symbol,rb); LOG_D(PHY,"comp: symbol %d rb %d\n",symbol,rb);
// just compute channel magnitude without scaling, this is done after equalization for SC-FDMA // just compute channel magnitude without scaling, this is done after equalization for SC-FDMA
@@ -861,7 +859,7 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
mmtmpU1 = _mm_packs_epi32(mmtmpU0,mmtmpU0); mmtmpU1 = _mm_packs_epi32(mmtmpU0,mmtmpU0);
ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1); ul_ch_mag128[2] = _mm_unpacklo_epi16(mmtmpU1,mmtmpU1);
// printf("comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift); LOG_D(PHY,"comp: symbol %d rb %d => %d,%d,%d (output_shift %d)\n",symbol,rb,*((int16_t*)&ul_ch_mag128[0]),*((int16_t*)&ul_ch_mag128[1]),*((int16_t*)&ul_ch_mag128[2]),output_shift);
#elif defined(__arm__) #elif defined(__arm__)
@@ -1125,10 +1123,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe); harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm; Qm = ulsch[UE_id]->harq_processes[harq_pid]->Qm;
#ifdef DEBUG_ULSCH if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
printf("rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb); LOG_I(PHY,"rx_ulsch: harq_pid %d, nb_rb %d first_rb %d\n",harq_pid,ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,ulsch[UE_id]->harq_processes[harq_pid]->first_rb);
}
#endif //DEBUG_ULSCH
if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) { if (ulsch[UE_id]->harq_processes[harq_pid]->nb_rb == 0) {
LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti); LOG_E(PHY,"PUSCH (%d/%x) nb_rb=0!\n", harq_pid,ulsch[UE_id]->rnti);
@@ -1137,13 +1134,13 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) { for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
#ifdef DEBUG_ULSCH if(LOG_DEBUGFLAG(DEBUG_ULSCH)) {
printf("rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l, LOG_I(PHY,"rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p\n",l,
ulsch[UE_id]->harq_processes[harq_pid]->first_rb, ulsch[UE_id]->harq_processes[harq_pid]->first_rb,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
common_vars->rxdataF, common_vars->rxdataF,
pusch_vars->rxdataF_ext); pusch_vars->rxdataF_ext);
#endif //DEBUG_ULSCH }
ulsch_extract_rbs_single(common_vars->rxdataF, ulsch_extract_rbs_single(common_vars->rxdataF,
pusch_vars->rxdataF_ext, pusch_vars->rxdataF_ext,
@@ -1179,21 +1176,16 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i], pusch_vars->ulsch_power[i] = signal_energy_nodc(pusch_vars->drs_ch_estimates[i],
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor; ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12)/correction_factor;
/* printf("%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i])); LOG_D(PHY,"%4.4d.%d power harq_pid %d rb %2.2d TBS %2.2d (MPR_times_Ks %d correction %d) power %d dBtimes10\n", proc->frame_rx, proc->subframe_rx, harq_pid, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->TBS,MPR_times_100Ks,correction_factor,dB_fixed_times10(pusch_vars->ulsch_power[i]));
*/
} }
//LOG_M("rxdataF_ext.m","rxF_ext",pusch_vars->rxdataF_ext[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
//LOG_M("ulsch_chest.m","drs_est",pusch_vars->drs_ch_estimates[eNB_id][0],300*(frame_parms->symbols_per_tti-ulsch[UE_id]->srs_active),1,1);
ulsch_channel_level(pusch_vars->drs_ch_estimates, ulsch_channel_level(pusch_vars->drs_ch_estimates,
frame_parms, frame_parms,
avgU, avgU,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb); ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
// printf("[ULSCH] avg[0] %d\n",avgU[0]); LOG_D(PHY,"[ULSCH] avg[0] %d\n",avgU[0]);
avgs = 0; avgs = 0;
@@ -1205,9 +1197,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4; log2_maxh = (log2_approx(avgs)/2)+ log2_approx(frame_parms->nb_antennas_rx-1)+4;
#ifdef DEBUG_ULSCH
printf("[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs); LOG_D(PHY,"[ULSCH] log2_maxh = %d (%d,%d)\n",log2_maxh,avgU[0],avgs);
#endif
for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) { for (l=0; l<(frame_parms->symbols_per_tti-ulsch[UE_id]->harq_processes[harq_pid]->srs_active); l++) {
@@ -1229,9 +1221,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
log2_maxh); // log2_maxh+I0_shift log2_maxh); // log2_maxh+I0_shift
if (frame_parms->nb_antennas_rx > 1) if (frame_parms->nb_antennas_rx > 1)
ulsch_detection_mrc(frame_parms, ulsch_detection_mrc(frame_parms,
pusch_vars->rxdataF_comp, pusch_vars->rxdataF_comp,
@@ -1240,9 +1229,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
l, l,
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb); ulsch[UE_id]->harq_processes[harq_pid]->nb_rb);
// if ((eNB->measurements.n0_power_dB[0]+3)<pusch_vars->ulsch_power[0])
// if ((eNB->measurements.n0_power_dB[0]+3)<pusch_vars->ulsch_power[0]) {
if (23<pusch_vars->ulsch_power[0]) { if (23<pusch_vars->ulsch_power[0]) {
freq_equalization(frame_parms, freq_equalization(frame_parms,
pusch_vars->rxdataF_comp, pusch_vars->rxdataF_comp,
@@ -1254,22 +1241,9 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
} }
} }
//#ifdef DEBUG_ULSCH
// Inverse-Transform equalized outputs
// printf("Doing IDFTs\n");
lte_idft(frame_parms, lte_idft(frame_parms,
(uint32_t*)pusch_vars->rxdataF_comp[0], (uint32_t*)pusch_vars->rxdataF_comp[0],
ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12); ulsch[UE_id]->harq_processes[harq_pid]->nb_rb*12);
// printf("Done\n");
//#endif //DEBUG_ULSCH
llrp = (int16_t*)&pusch_vars->llr[0]; llrp = (int16_t*)&pusch_vars->llr[0];
@@ -1316,9 +1290,8 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
break; break;
default: default:
#ifdef DEBUG_ULSCH LOG_E(PHY,"ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
printf("ulsch_demodulation.c (rx_ulsch): Unknown Qm!!!!\n");
#endif //DEBUG_ULSCH
break; break;
} }
} }
@@ -1329,7 +1302,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
eNB_rxtx_proc_t *proc, eNB_rxtx_proc_t *proc,
uint8_t UE_index) uint8_t UE_index)
{ {
printf("[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index); LOG_I(PHY,"[PHY] EMUL eNB %d rx_ulsch_emul : subframe %d, UE_index %d\n",eNB->Mod_id,proc->subframe_rx,UE_index);
eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB; eNB->pusch_vars[UE_index]->ulsch_power[0] = 31622; //=45dB;
eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB; eNB->pusch_vars[UE_index]->ulsch_power[1] = 31622; //=45dB;
@@ -1344,7 +1317,7 @@ void rx_ulsch_emul(PHY_VARS_eNB *eNB,
harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe); harq_pid = subframe2harq_pid(&eNB->frame_parms,frame,subframe);
printf("Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n", LOG_UI(PHY,"Dumping ULSCH in subframe %d with harq_pid %d, round %d for NB_rb %d, TBS %d, Qm %d, N_symb %d\n",
subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb, subframe,harq_pid,round,eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb,
eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm, eNB->ulsch[UE_id]->harq_processes[harq_pid]->TBS,eNB->ulsch[UE_id]->harq_processes[harq_pid]->Qm,
eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch); eNB->ulsch[UE_id]->harq_processes[harq_pid]->Nsymb_pusch);
+80 -47
View File
@@ -2035,7 +2035,7 @@ static inline void transpose4_ooff(int16x4_t *x,int16x4_t *y,int off)
#endif #endif
// 16-point optimized DFT kernel // 16-point optimized DEBUG_DFT kernel
const static int16_t tw16[24] __attribute__((aligned(32))) = { 32767,0,30272,-12540,23169 ,-23170,12539 ,-30273, const static int16_t tw16[24] __attribute__((aligned(32))) = { 32767,0,30272,-12540,23169 ,-23170,12539 ,-30273,
32767,0,23169,-23170,0 ,-32767,-23170,-23170, 32767,0,23169,-23170,0 ,-32767,-23170,-23170,
@@ -3097,10 +3097,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1); dft64((int16_t*)(xtmp+32),(int16_t*)(ytmp+16),1);
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
/* LOG_M("dft128a.m","dfta",ytmp,64,1,1); LOG_M("dft128a.m","dfta",ytmp,64,1,1);
LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/ LOG_M("dft128b.m","dftb",ytmp+16,64,1,1);*/
}
for (i=0; i<16; i++) { for (i=0; i<16; i++) {
bfly2_16(ytmpp,ytmpp+16, bfly2_16(ytmpp,ytmpp+16,
y128p,y128p+16, y128p,y128p+16,
@@ -3149,9 +3149,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
} }
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
/* LOG_M("dft128out.m","dft128",y,128,1,1); LOG_M("dft128out.m","dft128",y,128,1,1);
exit(-1);*/ exit(-1);
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
@@ -3176,17 +3177,17 @@ void dft128(int16_t *x,int16_t *y,int scale)
transpose4_ooff_simd256(x256+10,xtmp+5,8); transpose4_ooff_simd256(x256+10,xtmp+5,8);
transpose4_ooff_simd256(x256+12,xtmp+6,8); transpose4_ooff_simd256(x256+12,xtmp+6,8);
transpose4_ooff_simd256(x256+14,xtmp+7,8); transpose4_ooff_simd256(x256+14,xtmp+7,8);
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
/* LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1); LOG_M("dft128ina_256.m","dftina",xtmp,64,1,1);
LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1); LOG_M("dft128inb_256.m","dftinb",xtmp+8,64,1,1);
*/ }
dft64((int16_t*)(xtmp),(int16_t*)ytmp,1); dft64((int16_t*)(xtmp),(int16_t*)ytmp,1);
dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1); dft64((int16_t*)(xtmp+8),(int16_t*)(ytmp+8),1);
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
/*LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1); LOG_M("dft128outa_256.m","dftouta",ytmp,64,1,1);
LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1); LOG_M("dft128outb_256.m","dftoutb",ytmp+8,64,1,1);
*/ }
for (i=0; i<8; i++) { for (i=0; i<8; i++) {
bfly2_16_256(ytmpp,ytmpp+8, bfly2_16_256(ytmpp,ytmpp+8,
@@ -3219,9 +3220,10 @@ void dft128(int16_t *x,int16_t *y,int scale)
y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256); y256[15] = mulhi_int16_simd256(y256[15],ONE_OVER_SQRT2_Q15_256);
} }
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
/* LOG_M("dft128.m","dft",y256,128,1,1); LOG_M("dft128.m","dft",y256,128,1,1);
exit(-1);*/ exit(-1);
}
} }
#endif #endif
@@ -5422,10 +5424,11 @@ void dft1536(int16_t *input, int16_t *output, int scale)
tmpo[1][i] = tmpo[1][i<<1]; tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1]; tmpo[2][i] = tmpo[2][i<<1];
}*/ }*/
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
// LOG_M("out0.m","o0",tmpo[0],2048,1,1); LOG_M("dft1536out0.m","o0",tmpo[0],2048,1,1);
// LOG_M("out1.m","o1",tmpo[1],2048,1,1); LOG_M("dft1536out1.m","o1",tmpo[1],2048,1,1);
// LOG_M("out2.m","o2",tmpo[2],2048,1,1); LOG_M("dft1536out2.m","o2",tmpo[2],2048,1,1);
}
for (i=0,i2=0; i<1024; i+=8,i2+=4) { for (i=0,i2=0; i<1024; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+1024+i),(simd_q15_t*)(output+2048+i),
@@ -5585,12 +5588,20 @@ void idft6144(int16_t *input, int16_t *output,int scale)
idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft2048((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); idft2048((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
LOG_M("idft6144in.m","in",input,6144,1,1);
LOG_M("idft6144out0.m","o0",tmpo[0],2048,1,1);
LOG_M("idft6144out1.m","o1",tmpo[1],2048,1,1);
LOG_M("idft6144out2.m","o2",tmpo[2],2048,1,1);
}
for (i=0,i2=0; i<4096; i+=8,i2+=4) { for (i=0,i2=0; i<4096; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
(simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i)); (simd_q15_t*)(twa6144+i),(simd_q15_t*)(twb6144+i));
} }
if (scale==1) { if (scale==1) {
for (i=0; i<96; i++) { for (i=0; i<96; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
@@ -5613,6 +5624,9 @@ void idft6144(int16_t *input, int16_t *output,int scale)
} }
} }
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
LOG_M("idft6144out.m","out",output,6144,1,1);
}
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
@@ -5643,10 +5657,11 @@ void dft6144(int16_t *input, int16_t *output,int scale)
tmpo[1][i] = tmpo[1][i<<1]; tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1]; tmpo[2][i] = tmpo[2][i<<1];
}*/ }*/
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
// LOG_M("out0.m","o0",tmpo[0],2048,1,1); LOG_M("ft6144out0.m","o0",tmpo[0],2048,1,1);
// LOG_M("out1.m","o1",tmpo[1],2048,1,1); LOG_M("ft6144out1.m","o1",tmpo[1],2048,1,1);
// LOG_M("out2.m","o2",tmpo[2],2048,1,1); LOG_M("ft6144out2.m","o2",tmpo[2],2048,1,1);
}
for (i=0,i2=0; i<4096; i+=8,i2+=4) { for (i=0,i2=0; i<4096; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+4096+i),(simd_q15_t*)(output+8192+i),
@@ -5707,10 +5722,11 @@ void dft12288(int16_t *input, int16_t *output,int scale)
tmpo[1][i] = tmpo[1][i<<1]; tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1]; tmpo[2][i] = tmpo[2][i<<1];
}*/ }*/
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
// LOG_M("out0.m","o0",tmpo[0],4096,1,1); LOG_M("dft12288out0.m","o0",tmpo[0],4096,1,1);
// LOG_M("out1.m","o1",tmpo[1],4096,1,1); LOG_M("dft12288out1.m","o1",tmpo[1],4096,1,1);
// LOG_M("out2.m","o2",tmpo[2],4096,1,1); LOG_M("dft12288out2.m","o2",tmpo[2],4096,1,1);
}
for (i=0,i2=0; i<8192; i+=8,i2+=4) { for (i=0,i2=0; i<8192; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
@@ -5758,9 +5774,18 @@ void idft12288(int16_t *input, int16_t *output,int scale)
} }
idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale); idft4096((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),scale);
idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale); idft4096((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),scale);
idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale); idft4096((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),scale);
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
LOG_M("idft12288in.m","in",input,12288,1,1);
LOG_M("idft12288out0.m","o0",tmpo[0],4096,1,1);
LOG_M("idft12288out1.m","o1",tmpo[1],4096,1,1);
LOG_M("idft12288out2.m","o2",tmpo[2],4096,1,1);
}
for (i=0,i2=0; i<8192; i+=8,i2+=4) { for (i=0,i2=0; i<8192; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+8192+i),(simd_q15_t*)(output+16384+i),
@@ -5790,8 +5815,9 @@ void idft12288(int16_t *input, int16_t *output,int scale)
} }
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
// LOG_M("out.m","out",output,6144,1,1); LOG_M("idft12288out.m","out",output,6144,1,1);
}
} }
int16_t twa18432[12288] __attribute__((aligned(32))); int16_t twa18432[12288] __attribute__((aligned(32)));
@@ -5920,16 +5946,18 @@ void dft24576(int16_t *input, int16_t *output,int scale)
tmpo[1][i] = tmpo[1][i<<1]; tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1]; tmpo[2][i] = tmpo[2][i<<1];
}*/ }*/
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
// LOG_M("out0.m","o0",tmpo[0],8192,1,1); LOG_M("dft24576out0.m","o0",tmpo[0],8192,1,1);
// LOG_M("out1.m","o1",tmpo[1],8192,1,1); LOG_M("dft24576out1.m","o1",tmpo[1],8192,1,1);
// LOG_M("out2.m","o2",tmpo[2],8192,1,1); LOG_M("dft24576out2.m","o2",tmpo[2],8192,1,1);
}
for (i=0,i2=0; i<16384; i+=8,i2+=4) { for (i=0,i2=0; i<16384; i+=8,i2+=4) {
bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]), bfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),(simd_q15_t*)(&tmpo[2][i2]),
(simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i), (simd_q15_t*)(output+i),(simd_q15_t*)(output+16384+i),(simd_q15_t*)(output+32768+i),
(simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i)); (simd_q15_t*)(twa24576+i),(simd_q15_t*)(twb24576+i));
} }
if (scale==1) { if (scale==1) {
for (i=0; i<384; i++) { for (i=0; i<384; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128); y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
@@ -5953,11 +5981,14 @@ void dft24576(int16_t *input, int16_t *output,int scale)
} }
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
if (LOG_GENFILEFLAG(DEBUG_DFT)) {
// LOG_M("out.m","out",output,24576,1,1); LOG_M("out.m","out",output,24576,1,1);
}
} }
void idft24576(int16_t *input, int16_t *output,int scale)
void idft24576(int16_t *input, int16_t *output)
{ {
int i,i2,j; int i,i2,j;
uint32_t tmp[3][8192] __attribute__((aligned(32))); uint32_t tmp[3][8192] __attribute__((aligned(32)));
@@ -5975,12 +6006,12 @@ void idft24576(int16_t *input, int16_t *output,int scale)
idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1); idft8192((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1); idft8192((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
/* if (LOG_GENFILEFLAG(DEBUG_DFT)) {
LOG_M("in.m","in",input,24576,1,1); LOG_M("idft24576in.m","in",input,24576,1,1);
LOG_M("out0.m","o0",tmpo[0],8192,1,1); LOG_M("idft24576out0.m","o0",tmpo[0],8192,1,1);
LOG_M("out1.m","o1",tmpo[1],8192,1,1); LOG_M("idft24576out1.m","o1",tmpo[1],8192,1,1);
LOG_M("out2.m","o2",tmpo[2],8192,1,1); LOG_M("idft24576out2.m","o2",tmpo[2],8192,1,1);
*/ }
for (i=0,i2=0; i<16384; i+=8,i2+=4) { for (i=0,i2=0; i<16384; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]), ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
@@ -6011,7 +6042,9 @@ void idft24576(int16_t *input, int16_t *output,int scale)
_mm_empty(); _mm_empty();
_m_empty(); _m_empty();
// LOG_M("out.m","out",output,24576,1,1); if (LOG_GENFILEFLAG(DEBUG_DFT)) {
LOG_M("idft24576out.m","out",output,24576,1,1);
}
} }
/// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d) /// THIS SECTION IS FOR ALL PUSCH DFTS (i.e. radix 2^a * 3^b * 4^c * 5^d)
File diff suppressed because it is too large Load Diff
+3 -18
View File
@@ -2046,24 +2046,9 @@ int main(int argc, char **argv)
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare); qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
if (dump_table == 1 ) { if (dump_table == 1 ) {
set_component_filelog(USIM); // file located in /tmp/usim.txt set_component_filelog(SIM); // file located in /tmp/usim.txt
int n; LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
LOG_F(USIM,"The transmitter raw data: \n"); LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"Thereceiver raw data: \n");
for (n=0; n< time_vector_tx.size; n++) {
printf("%f ", table_tx[n]);
LOG_F(USIM,"%f ", table_tx[n]);
}
LOG_F(USIM,"\n");
LOG_F(USIM,"The receiver raw data: \n");
for (n=0; n< time_vector_rx.size; n++) {
// printf("%f ", table_rx[n]);
LOG_F(USIM,"%f ", table_rx[n]);
}
LOG_F(USIM,"\n");
} }
double tx_median = table_tx[time_vector_tx.size/2]; double tx_median = table_tx[time_vector_tx.size/2];
+4 -17
View File
@@ -5016,24 +5016,11 @@ int main(int argc, char **argv)
if (dump_table == 1 ) { if (dump_table == 1 ) {
set_component_filelog(USIM); // file located in /tmp/usim.txt set_component_filelog(USIM); // file located in /tmp/usim.txt
int n; LOG_UDUMPMSG(RRC,(char *)table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,
LOG_F(USIM,"The transmitter raw data: \n"); "The transmitter raw data: \n");
LOG_UDUMPMSG(RRC,(char *)table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,
"The receiver raw data: \n");
for (n=0; n< time_vector_tx.size; n++) {
printf("%f ", table_tx[n]);
LOG_F(USIM,"%f ", table_tx[n]);
}
LOG_F(USIM,"\n");
LOG_F(USIM,"The receiver raw data: \n");
for (n=0; n< time_vector_rx.size; n++) {
// printf("%f ", table_rx[n]);
LOG_F(USIM,"%f ", table_rx[n]);
}
LOG_F(USIM,"\n");
}
double tx_median = table_tx[time_vector_tx.size/2]; double tx_median = table_tx[time_vector_tx.size/2];
double tx_q1 = table_tx[time_vector_tx.size/4]; double tx_q1 = table_tx[time_vector_tx.size/4];
+3 -18
View File
@@ -3851,24 +3851,9 @@ PMI_FEEDBACK:
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare); qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
if (dump_table == 1 ) { if (dump_table == 1 ) {
set_component_filelog(USIM); // file located in /tmp/usim.txt set_component_filelog(SIM); // file located in /tmp/usim.txt
int n; LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
LOG_F(USIM,"The transmitter raw data: \n"); LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
for (n=0; n< time_vector_tx.size; n++) {
printf("%f ", table_tx[n]);
LOG_F(USIM,"%f ", table_tx[n]);
}
LOG_F(USIM,"\n");
LOG_F(USIM,"The receiver raw data: \n");
for (n=0; n< time_vector_rx.size; n++) {
// printf("%f ", table_rx[n]);
LOG_F(USIM,"%f ", table_rx[n]);
}
LOG_F(USIM,"\n");
} }
double tx_median = table_tx[time_vector_tx.size/2]; double tx_median = table_tx[time_vector_tx.size/2];
+2 -17
View File
@@ -1491,24 +1491,9 @@ int main(int argc, char **argv)
qsort (table_rx, time_vector_rx.size, sizeof(double), &compare); qsort (table_rx, time_vector_rx.size, sizeof(double), &compare);
if (dump_table == 1 ) { if (dump_table == 1 ) {
int n;
set_component_filelog(SIM); // file located in /tmp/usim.txt set_component_filelog(SIM); // file located in /tmp/usim.txt
LOG_F(SIM,"The transmitter raw data: \n"); LOG_UDUMPMSG(SIM,table_tx,time_vector_tx.size,LOG_DUMP_DOUBLE,"The transmitter raw data: \n");
LOG_UDUMPMSG(SIM,table_rx,time_vector_rx.size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
for (n=0; n< time_vector_tx.size; n++) {
// printf("%f ", table_tx[n]);
LOG_F(SIM,"%f ", table_tx[n]);
}
LOG_F(SIM,"\n");
LOG_F(SIM,"The receiver raw data: \n");
for (n=0; n< time_vector_rx.size; n++) {
// printf("%f ", table_rx[n]);
LOG_F(SIM,"%f ", table_rx[n]);
}
LOG_F(SIM,"\n");
} }
double tx_median = table_tx[time_vector_tx.size/2]; double tx_median = table_tx[time_vector_tx.size/2];
+53 -51
View File
@@ -143,7 +143,7 @@ void *eNB_app_task(void *args_p)
uint32_t enb_id_start = 0; uint32_t enb_id_start = 0;
uint32_t enb_id_end = enb_id_start + enb_nb; uint32_t enb_id_end = enb_id_start + enb_nb;
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
uint32_t register_enb_pending; uint32_t register_enb_pending=0;
uint32_t registered_enb; uint32_t registered_enb;
long enb_register_retry_timer_id; long enb_register_retry_timer_id;
# endif # endif
@@ -182,15 +182,15 @@ void *eNB_app_task(void *args_p)
configure_rrc(enb_id); configure_rrc(enb_id);
} }
# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
/* Try to register each eNB */ /* Try to register each eNB */
registered_enb = 0; registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
# else } else {
/* Start L2L1 task */ /* Start L2L1 task */
msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE);
itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p); itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p);
# endif }
do { do {
// Wait for a message // Wait for a message
@@ -208,66 +208,68 @@ void *eNB_app_task(void *args_p)
LOG_I(ENB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p)); LOG_I(ENB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p));
break; break;
# if defined(ENABLE_USE_MME)
case S1AP_REGISTER_ENB_CNF: case S1AP_REGISTER_ENB_CNF:
LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p), if (EPC_MODE_ENABLED) {
S1AP_REGISTER_ENB_CNF(msg_p).nb_mme); LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
S1AP_REGISTER_ENB_CNF(msg_p).nb_mme);
DevAssert(register_enb_pending > 0); DevAssert(register_enb_pending > 0);
register_enb_pending--; register_enb_pending--;
/* Check if at least eNB is registered with one MME */ /* Check if at least eNB is registered with one MME */
if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) { if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) {
registered_enb++; registered_enb++;
} }
/* Check if all register eNB requests have been processed */ /* Check if all register eNB requests have been processed */
if (register_enb_pending == 0) { if (register_enb_pending == 0) {
if (registered_enb == enb_nb) { if (registered_enb == enb_nb) {
/* If all eNB are registered, start L2L1 task */ /* If all eNB are registered, start L2L1 task */
MessageDef *msg_init_p; MessageDef *msg_init_p;
msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE); msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE);
itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p); itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p);
} else { } else {
LOG_W(ENB_APP, " %d eNB not associated with a MME, retrying registration in %d seconds ...\n", LOG_W(ENB_APP, " %d eNB not associated with a MME, retrying registration in %d seconds ...\n",
enb_nb - registered_enb, ENB_REGISTER_RETRY_DELAY); enb_nb - registered_enb, ENB_REGISTER_RETRY_DELAY);
/* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */ /* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */
if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT, if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
NULL, &enb_register_retry_timer_id) < 0) { NULL, &enb_register_retry_timer_id) < 0) {
LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n"); LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n");
sleep(ENB_REGISTER_RETRY_DELAY);
/* Restart the registration process */
registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
}
}
}
sleep(ENB_REGISTER_RETRY_DELAY);
/* Restart the registration process */
registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
}
}
}
} /*if (EPC_MODE_ENABLED) */
break; break;
case S1AP_DEREGISTERED_ENB_IND: case S1AP_DEREGISTERED_ENB_IND:
LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p), if (EPC_MODE_ENABLED) {
S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme); LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, ITTI_MSG_NAME (msg_p),
S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme);
/* TODO handle recovering of registration */ /* TODO handle recovering of registration */
}
break; break;
case TIMER_HAS_EXPIRED: case TIMER_HAS_EXPIRED:
LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id); if (EPC_MODE_ENABLED) {
LOG_I(ENB_APP, " Received %s: timer_id %ld\n", ITTI_MSG_NAME (msg_p), TIMER_HAS_EXPIRED(msg_p).timer_id);
if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
/* Restart the registration process */
registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
}
if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) {
/* Restart the registration process */
registered_enb = 0;
register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p);
}
} /*if (EPC_MODE_ENABLED) */
break; break;
# endif
default: default:
LOG_E(ENB_APP, "Received unexpected message %s\n", ITTI_MSG_NAME (msg_p)); LOG_E(ENB_APP, "Received unexpected message %s\n", ITTI_MSG_NAME (msg_p));
+55 -103
View File
@@ -37,7 +37,7 @@
#include "UTIL/OTG/otg_externs.h" #include "UTIL/OTG/otg_externs.h"
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
# include "intertask_interface.h" # include "intertask_interface.h"
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
# include "s1ap_eNB.h" # include "s1ap_eNB.h"
# include "sctp_eNB_task.h" # include "sctp_eNB_task.h"
# endif # endif
@@ -198,11 +198,10 @@ void RCconfig_flexran()
/* eNB ID from configuration, as read in by RCconfig_RRC() */ /* eNB ID from configuration, as read in by RCconfig_RRC() */
if (!ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr) { if (!ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr) {
// Calculate a default eNB ID // Calculate a default eNB ID
# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED)
enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8); enb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8);
# else else
enb_id = i; enb_id = i;
# endif
} else { } else {
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr); enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
} }
@@ -546,32 +545,6 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
int32_t srb1_max_retx_threshold = 0; int32_t srb1_max_retx_threshold = 0;
int32_t my_int; int32_t my_int;
/*
int32_t otg_ue_id = 0;
char* otg_app_type = NULL;
char* otg_bg_traffic = NULL;
char* glog_level = NULL;
char* glog_verbosity = NULL;
char* hw_log_level = NULL;
char* hw_log_verbosity = NULL;
char* phy_log_level = NULL;
char* phy_log_verbosity = NULL;
char* mac_log_level = NULL;
char* mac_log_verbosity = NULL;
char* rlc_log_level = NULL;
char* rlc_log_verbosity = NULL;
char* pdcp_log_level = NULL;
char* pdcp_log_verbosity = NULL;
char* rrc_log_level = NULL;
char* rrc_log_verbosity = NULL;
char* udp_log_verbosity = NULL;
char* osa_log_level = NULL;
char* osa_log_verbosity = NULL;
*/
// for no gcc warnings // for no gcc warnings
(void)my_int; (void)my_int;
@@ -591,15 +564,16 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
CCsParams[I].chkPptr = &(config_check_CCparams[I]); CCsParams[I].chkPptr = &(config_check_CCparams[I]);
} }
/* get global parameters, defined outside any section in the config file */ /* get global parameters, defined outside any section in the config file */
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; num_enbs = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
AssertFatal (i<num_enbs, AssertFatal (i<num_enbs,
"Failed to parse config file no %ith element in %s \n",i, ENB_CONFIG_STRING_ACTIVE_ENBS); "Failed to parse config file no %ith element in %s \n",i, ENB_CONFIG_STRING_ACTIVE_ENBS);
#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) #if defined(ENABLE_ITTI)
if (EPC_MODE_ENABLED) {
if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) { if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
asn_debug = 0; asn_debug = 0;
asn1_xer_print = 0; asn1_xer_print = 0;
@@ -613,7 +587,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
asn_debug = 0; asn_debug = 0;
asn1_xer_print = 0; asn1_xer_print = 0;
} }
}
#endif #endif
@@ -628,14 +602,14 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
if (ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr == NULL) { if (ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr == NULL) {
// Calculate a default eNB ID // Calculate a default eNB ID
# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
uint32_t hash; uint32_t hash;
hash = s1ap_generate_eNB_id (); hash = s1ap_generate_eNB_id ();
enb_id = i + (hash & 0xFFFF8); enb_id = i + (hash & 0xFFFF8);
# else } else {
enb_id = i; enb_id = i;
# endif }
} else { } else {
enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr); enb_id = *(ENBParamList.paramarray[i][ENB_ENB_ID_IDX].uptr);
} }
@@ -2255,20 +2229,23 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
/* get global parameters, defined outside any section in the config file */ /* get global parameters, defined outside any section in the config file */
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) { #if defined(ENABLE_ITTI)
asn_debug = 0; if (EPC_MODE_ENABLED) {
asn1_xer_print = 0; if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
} else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) { asn_debug = 0;
asn_debug = 1; asn1_xer_print = 0;
asn1_xer_print = 1; } else if (strcasecmp( *(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr), ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
} else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) { asn_debug = 1;
asn_debug = 1; asn1_xer_print = 1;
asn1_xer_print = 2; } else if (strcasecmp(*(ENBSParams[ENB_ASN1_VERBOSITY_IDX].strptr) , ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
} else { asn_debug = 1;
asn_debug = 0; asn1_xer_print = 2;
asn1_xer_print = 0; } else {
asn_debug = 0;
asn1_xer_print = 0;
}
} }
#endif #endif
@@ -2291,17 +2268,17 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
if (ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr == NULL) { if (ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr == NULL) {
// Calculate a default eNB ID // Calculate a default eNB ID
# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
uint32_t hash; uint32_t hash;
hash = s1ap_generate_eNB_id (); hash = s1ap_generate_eNB_id ();
enb_id = k + (hash & 0xFFFF8); enb_id = k + (hash & 0xFFFF8);
# else } else {
enb_id = k; enb_id = k;
# endif }
} else { } else {
enb_id = *(ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr); enb_id = *(ENBParamList.paramarray[k][ENB_ENB_ID_IDX].uptr);
} }
// search if in active list // search if in active list
@@ -2349,11 +2326,7 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4_address,*(S1ParamList.paramarray[l][ENB_MME_IPV4_ADDRESS_IDX].strptr)); strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4_address,*(S1ParamList.paramarray[l][ENB_MME_IPV4_ADDRESS_IDX].strptr));
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6_address,*(S1ParamList.paramarray[l][ENB_MME_IPV6_ADDRESS_IDX].strptr)); strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6_address,*(S1ParamList.paramarray[l][ENB_MME_IPV6_ADDRESS_IDX].strptr));
if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_ACTIVE_IDX].strptr), "yes") == 0) {
#if defined(ENABLE_USE_MME)
EPC_MODE_ENABLED = 1;
#endif
}
if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) { if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4 = 1; S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4 = 1;
} else if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) { } else if (strcmp(*(S1ParamList.paramarray[l][ENB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) {
@@ -2368,12 +2341,12 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
// SCTP SETTING // SCTP SETTING
S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS; S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS;
S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS; S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS;
# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG); sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_SCTP_CONFIG);
config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix); config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix);
S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr); S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[ENB_SCTP_INSTREAMS_IDX].uptr);
S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr); S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[ENB_SCTP_OUTSTREAMS_IDX].uptr);
#endif }
sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); sprintf(aprefix,"%s.[%i].%s",ENB_CONFIG_STRING_ENB_LIST,k,ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
// NETWORK_INTERFACES // NETWORK_INTERFACES
@@ -2388,28 +2361,6 @@ int RCconfig_S1(MessageDef *msg_p, uint32_t i) {
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, address); strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, address);
/*
in_addr_t ipv4_address;
if (address) {
IPV4_STR_ADDR_TO_INT_NWBO ( address, ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" );
}
strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, inet_ntoa(ipv4_address));
// S1AP_REGISTER_ENB_REQ (msg_p).enb_port_for_S1U = enb_port_for_S1U;
S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME);
cidr = enb_ipv4_address_for_S1_MME;
address = strtok(cidr, "/");
if (address) {
IPV4_STR_ADDR_TO_INT_NWBO ( address, S1AP_REGISTER_ENB_REQ(msg_p).enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" );
}
*/
break; break;
} }
} }
@@ -2436,8 +2387,9 @@ void RCConfig(void) {
printf("Getting ENBSParams\n"); printf("Getting ENBSParams\n");
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
EPC_MODE_ENABLED = ((*ENBSParams[ENB_NOS1_IDX].uptr) == 0);
RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
if (RC.nb_inst > 0) { if (RC.nb_inst > 0) {
RC.nb_CC = (int *)malloc((1+RC.nb_inst)*sizeof(int)); RC.nb_CC = (int *)malloc((1+RC.nb_inst)*sizeof(int));
for (int i=0;i<RC.nb_inst;i++) { for (int i=0;i<RC.nb_inst;i++) {
+6 -12
View File
@@ -160,25 +160,19 @@ typedef enum {
/* global parameters, not under a specific section */ /* global parameters, not under a specific section */
#define ENB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity" #define ENB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity"
#define ENB_CONFIG_STRING_ACTIVE_ENBS "Active_eNBs" #define ENB_CONFIG_STRING_ACTIVE_ENBS "Active_eNBs"
#define ENB_CONFIG_STRING_NOS1 "noS1"
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* global configuration parameters */ /* global configuration parameters */
/* optname helpstr paramflags XXXptr defXXXval type numelt */ /* optname helpstr paramflags XXXptr defXXXval type numelt */
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define ENBSPARAMS_DESC { \ #define ENBSPARAMS_DESC { \
{ENB_CONFIG_STRING_ASN1_VERBOSITY, NULL, 0, uptr:NULL, defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE, TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_ASN1_VERBOSITY, NULL, 0, uptr:NULL, defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE, TYPE_STRING, 0}, \
{ENB_CONFIG_STRING_ACTIVE_ENBS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRINGLIST, 0} \ {ENB_CONFIG_STRING_ACTIVE_ENBS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRINGLIST, 0}, \
{ENB_CONFIG_STRING_NOS1, NULL, PARAMFLAG_BOOL, uptr:NULL, defintval:0, TYPE_UINT, 0}, \
} }
#define ENB_ASN1_VERBOSITY_IDX 0 #define ENB_ASN1_VERBOSITY_IDX 0
#define ENB_ACTIVE_ENBS_IDX 1 #define ENB_ACTIVE_ENBS_IDX 1
#define ENB_NOS1_IDX 2
/*
{ENB_CONFIG_STRING_COMPONENT_CARRIERS,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
{ENB_CONFIG_STRING_CC_NODE_FUNCTION,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
{ENB_CONFIG_STRING_CC_NODE_TIMING,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
{ENB_CONFIG_STRING_CC_NODE_SYNCH_REF,"", "", 0, uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0}, \
*/
/*------------------------------------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------------------------------------*/
+4 -19
View File
@@ -349,16 +349,10 @@ boolean_t pdcp_data_req(
* Ask sublayer to transmit data and check return value * Ask sublayer to transmit data and check return value
* to see if RLC succeeded * to see if RLC succeeded
*/ */
#ifdef PDCP_MSG_PRINT
int i=0;
LOG_F(PDCP,"[MSG] PDCP DL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
for (i = 0; i < pdcp_pdu_size; i++) { LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)pdcp_pdu_p->data,pdcp_pdu_size,
LOG_F(PDCP,"%02x ", ((uint8_t*)pdcp_pdu_p->data)[i]); "[MSG] PDCP DL %s PDU on rb_id %d\n",(srb_flagP)? "CONTROL" : "DATA", rb_idP);
}
LOG_F(PDCP,"\n");
#endif
rlc_status = rlc_data_req(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP, confirmP, pdcp_pdu_size, pdcp_pdu_p rlc_status = rlc_data_req(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP, confirmP, pdcp_pdu_size, pdcp_pdu_p
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
,sourceL2Id ,sourceL2Id
@@ -461,17 +455,8 @@ pdcp_data_ind(
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN);
LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)sdu_buffer_pP->data,sdu_buffer_sizeP,
#ifdef PDCP_MSG_PRINT "[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
int i=0;
LOG_F(PDCP,"[MSG] PDCP UL %s PDU on rb_id %d\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
for (i = 0; i < sdu_buffer_sizeP; i++) {
LOG_F(PDCP,"%02x ", ((uint8_t*)sdu_buffer_pP->data)[i]);
}
LOG_F(PDCP,"\n");
#endif
#if T_TRACER #if T_TRACER
if (ctxt_pP->enb_flag != ENB_FLAG_NO) if (ctxt_pP->enb_flag != ENB_FLAG_NO)
+25 -32
View File
@@ -43,9 +43,6 @@
#include "flexran_agent_extern.h" #include "flexran_agent_extern.h"
//#define RRC_DATA_REQ_DEBUG
//#define DEBUG_RRC 1
extern RAN_CONTEXT_t RC; extern RAN_CONTEXT_t RC;
@@ -68,10 +65,9 @@ mac_rrc_data_req(
uint8_t sfn = (uint8_t)((frameP>>2)&0xff); uint8_t sfn = (uint8_t)((frameP>>2)&0xff);
#ifdef DEBUG_RRC if (LOG_DEBUGFLAG(DEBUG_RRC)) {
int i; LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id); }
#endif
eNB_RRC_INST *rrc; eNB_RRC_INST *rrc;
rrc_eNB_carrier_data_t *carrier; rrc_eNB_carrier_data_t *carrier;
@@ -96,15 +92,15 @@ mac_rrc_data_req(
RC.rrc[Mod_idP]->carrier[CC_id].SIB1, RC.rrc[Mod_idP]->carrier[CC_id].SIB1,
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1); RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
#ifdef DEBUG_RRC if (LOG_DEBUGFLAG(DEBUG_RRC)) {
LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP); LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP);
for (i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1; i++) { for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1; i++) {
LOG_T(RRC,"%x.",buffer_pP[i]); LOG_T(RRC,"%x.",buffer_pP[i]);
} }
LOG_T(RRC,"\n"); LOG_T(RRC,"\n");
#endif } /* LOG_DEBUGFLAG(DEBUG_RRC) */
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1); return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB1);
} // All RFN mod 8 transmit SIB2-3 in SF 5 } // All RFN mod 8 transmit SIB2-3 in SF 5
@@ -113,15 +109,15 @@ mac_rrc_data_req(
RC.rrc[Mod_idP]->carrier[CC_id].SIB23, RC.rrc[Mod_idP]->carrier[CC_id].SIB23,
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23); RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
#ifdef DEBUG_RRC if (LOG_DEBUGFLAG(DEBUG_RRC)) {
LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP); LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP);
for (i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23; i++) { for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23; i++) {
LOG_T(RRC,"%x.",buffer_pP[i]); LOG_T(RRC,"%x.",buffer_pP[i]);
} }
LOG_T(RRC,"\n"); LOG_T(RRC,"\n");
#endif } /* LOG_DEBUGFLAG(DEBUG_RRC) */
return(RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23); return(RC.rrc[Mod_idP]->carrier[CC_id].sizeof_SIB23);
} else { } else {
return(0); return(0);
@@ -193,20 +189,17 @@ mac_rrc_data_req(
RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area], RC.rrc[Mod_idP]->carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]); RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
#ifdef DEBUG_RRC if (LOG_DEBUGFLAG(DEBUG_RRC)) {
LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP); LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
for (i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) { for (int i=0; i<RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) {
LOG_T(RRC,"%x.",buffer_pP[i]); LOG_T(RRC,"%x.",buffer_pP[i]);
} }
LOG_T(RRC,"\n"); LOG_T(RRC,"\n");
#endif } /* LOG_DEBUGFLAG(DEBUG_RRC) */
return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]); return (RC.rrc[Mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
// }
//else
//return(0);
} }
#endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0)) #endif // #if (RRC_VERSION >= MAKE_VERSION(10, 0, 0))
+1 -5
View File
@@ -42,7 +42,6 @@
#endif #endif
//#define RRC_DATA_REQ_DEBUG //#define RRC_DATA_REQ_DEBUG
//#define DEBUG_RRC 1
@@ -61,10 +60,7 @@ mac_rrc_data_req_ue(
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
{ {
#ifdef DEBUG_RRC LOG_D(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
int i;
LOG_I(RRC,"[eNB %d] mac_rrc_data_req to SRB ID=%d\n",Mod_idP,Srb_id);
#endif
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
+9 -9
View File
@@ -136,7 +136,7 @@ uint8_t do_MIB_NB_IoT(
carrier->MIB_NB_IoT, carrier->MIB_NB_IoT,
100); 100);
if(enc_rval.encoded <= 0) { if(enc_rval.encoded <= 0) {
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -394,7 +394,7 @@ uint8_t do_SIB1_NB_IoT(uint8_t Mod_id, int CC_id,
100); 100);
if (enc_rval.encoded > 0){ if (enc_rval.encoded > 0){
LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n", LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -897,7 +897,7 @@ uint8_t do_RRCConnectionSetup_NB_IoT(
100); 100);
if (enc_rval.encoded <= 0) { if (enc_rval.encoded <= 0) {
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -948,7 +948,7 @@ uint8_t do_SecurityModeCommand_NB_IoT(
buffer, buffer,
100); 100);
if (enc_rval.encoded <= 0) { if (enc_rval.encoded <= 0) {
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -1010,7 +1010,7 @@ uint8_t do_UECapabilityEnquiry_NB_IoT(
buffer, buffer,
100); 100);
if (enc_rval.encoded <= 0) { if (enc_rval.encoded <= 0) {
LOG_F(RRC, "ASN1 message encoding failed (%s, %lu)!\n", LOG_E(RRC, "ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -1105,7 +1105,7 @@ uint16_t do_RRCConnectionReconfiguration_NB_IoT(
buffer, buffer,
RRC_BUF_SIZE); RRC_BUF_SIZE);
if (enc_rval.encoded <= 0) { if (enc_rval.encoded <= 0) {
LOG_F(RRC, "ASN1 message encoding failed %s, %li\n", LOG_E(RRC, "ASN1 message encoding failed %s, %li\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -1152,7 +1152,7 @@ uint8_t do_RRCConnectionReestablishmentReject_NB_IoT(
buffer, buffer,
100); 100);
if (enc_rval.encoded <= 0) { if (enc_rval.encoded <= 0) {
LOG_F(RRC,"ASN1 message encoding failed (%s, %lu)!\n", LOG_E(RRC,"ASN1 message encoding failed (%s, %lu)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -1223,7 +1223,7 @@ uint8_t do_RRCConnectionReject_NB_IoT(
buffer, buffer,
100); 100);
if (enc_rval.encoded <= 0) { if (enc_rval.encoded <= 0) {
LOG_F(RRC, "ASN1 message encoding failed (%s, %ld)!\n", LOG_E(RRC, "ASN1 message encoding failed (%s, %ld)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
@@ -1351,7 +1351,7 @@ uint8_t do_RRCConnectionReestablishment_NB_IoT(
RRC_BUF_SIZE); RRC_BUF_SIZE);
if (enc_rval.encoded <= 0) { if (enc_rval.encoded <= 0) {
LOG_F(RRC, "ASN1 message encoding failed (%s, %li)!\n", LOG_E(RRC, "ASN1 message encoding failed (%s, %li)!\n",
enc_rval.failed_type->name, enc_rval.encoded); enc_rval.failed_type->name, enc_rval.encoded);
} }
+48 -48
View File
@@ -5558,9 +5558,9 @@ void *rrc_control_socket_thread_fct(void *arg)
//process the message //process the message
switch (sl_ctrl_msg_recv->type) { switch (sl_ctrl_msg_recv->type) {
case SESSION_INIT_REQ: case SESSION_INIT_REQ:
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type); LOG_UI(RRC,"Received SessionInitializationRequest on socket from ProSe App (msg type: %d)\n", sl_ctrl_msg_recv->type);
LOG_DEBUG_END }
//TODO: get SL_UE_STATE from lower layer //TODO: get SL_UE_STATE from lower layer
LOG_I(RRC,"Send UEStateInformation to ProSe App \n"); LOG_I(RRC,"Send UEStateInformation to ProSe App \n");
@@ -5579,12 +5579,12 @@ LOG_DEBUG_END
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type); LOG_UI(RRC,"[UEStateInformation] msg type: %d\n",ptr_ctrl_msg->type);
LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state); LOG_UI(RRC,"[UEStateInformation] UE state: %d\n",ptr_ctrl_msg->sidelinkPrimitive.ue_state);
LOG_DEBUG_END }
/* if (enable_notification > 0) { /* if (enable_notification > 0) {
//create thread to send status notification (for testing purpose, status notification will be sent e.g., every 20 seconds) //create thread to send status notification (for testing purpose, status notification will be sent e.g., every 20 seconds)
pthread_t notification_thread; pthread_t notification_thread;
@@ -5599,12 +5599,12 @@ LOG_DEBUG_END
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id; sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id;
groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id; groupL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id;
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); LOG_UI(RRC,"[GroupCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id); LOG_UI(RRC,"[GroupCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id); LOG_UI(RRC,"[GroupCommunicationEstablishReq] group Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress)); LOG_UI(RRC,"[GroupCommunicationEstablishReq] group IP Address: " IPV4_ADDR "\n",IPV4_ADDR_FORMAT(sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupIpAddress));
LOG_DEBUG_END }
//store sourceL2Id/groupL2Id //store sourceL2Id/groupL2Id
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id; UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
@@ -5764,20 +5764,20 @@ LOG_DEBUG_END
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type); LOG_UI(RRC,"[GroupCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id); LOG_UI(RRC,"[GroupCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
LOG_DEBUG_END }
break; break;
case GROUP_COMMUNICATION_RELEASE_REQ: case GROUP_COMMUNICATION_RELEASE_REQ:
printf("-----------------------------------\n"); printf("-----------------------------------\n");
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id); LOG_UI(RRC,"[GroupCommunicationReleaseRequest] Slrb Id: %i\n",sl_ctrl_msg_recv->sidelinkPrimitive.slrb_id);
LOG_DEBUG_END }
//reset groupL2ID from MAC LAYER //reset groupL2ID from MAC LAYER
UE_rrc_inst[module_id].groupL2Id = 0x00000000; UE_rrc_inst[module_id].groupL2Id = 0x00000000;
sourceL2Id = UE_rrc_inst[module_id].sourceL2Id; sourceL2Id = UE_rrc_inst[module_id].sourceL2Id;
@@ -5849,11 +5849,11 @@ LOG_DEBUG_END
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.sourceL2Id; sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.sourceL2Id;
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.destinationL2Id; destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.direct_comm_establish_req.destinationL2Id;
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); LOG_UI(RRC,"[DirectCommunicationEstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id); LOG_UI(RRC,"[DirectCommunicationEstablishReq] source Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.sourceL2Id);
LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id); LOG_UI(RRC,"[DirectCommunicationEstablishReq] destination Id: 0x%08x\n",sl_ctrl_msg_recv->sidelinkPrimitive.group_comm_establish_req.groupL2Id);
LOG_DEBUG_END }
//store sourceL2Id/destinationL2Id //store sourceL2Id/destinationL2Id
UE_rrc_inst[module_id].sourceL2Id = sourceL2Id; UE_rrc_inst[module_id].sourceL2Id = sourceL2Id;
@@ -6013,27 +6013,27 @@ LOG_DEBUG_END
} }
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
struct sidelink_ctrl_element *ptr_ctrl_msg = NULL; struct sidelink_ctrl_element *ptr_ctrl_msg = NULL;
ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf; ptr_ctrl_msg = (struct sidelink_ctrl_element *) send_buf;
LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type); LOG_UI(RRC,"[DirectCommunicationEstablishResponse] msg type: %d\n",ptr_ctrl_msg->type);
LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id); LOG_UI(RRC,"[DirectCommunicationEstablishResponse] slrb_id: %d\n",ptr_ctrl_msg->sidelinkPrimitive.slrb_id);
LOG_DEBUG_END }
break; break;
case PC5S_ESTABLISH_REQ: case PC5S_ESTABLISH_REQ:
type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type; type = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type;
sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id; sourceL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id;
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); LOG_UI(RRC,"[PC5EstablishReq] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX LOG_UI(RRC,"[PC5EstablishReq] type: %d\n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.type); //RX/TX
LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id); LOG_UI(RRC,"[PC5EstablishReq] source Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.sourceL2Id);
LOG_DEBUG_END }
if (type > 0) { if (type > 0) {
destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id; destinationL2Id = sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id;
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id); LOG_UI(RRC,"[PC5EstablishReq] destination Id: 0x%08x \n",sl_ctrl_msg_recv->sidelinkPrimitive.pc5s_establish_req.destinationL2Id);
LOG_DEBUG_END }
} }
//store sourceL2Id/destinationL2Id //store sourceL2Id/destinationL2Id
@@ -6244,9 +6244,9 @@ LOG_DEBUG_END
case PC5_DISCOVERY_MESSAGE: case PC5_DISCOVERY_MESSAGE:
LOG_DEBUG_BEGIN(DEBUG_CTRLSOCKET) if (LOG_DEBUGFLAG(DEBUG_CTRLSOCKET)){
LOG_UI(RRC,"[PC5DiscoveryMessage] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type); LOG_UI(RRC,"[PC5DiscoveryMessage] Received on socket from ProSe App (msg type: %d)\n",sl_ctrl_msg_recv->type);
LOG_DEBUG_END }
//prepare SL_Discovery buffer //prepare SL_Discovery buffer
if (UE_rrc_inst) { if (UE_rrc_inst) {
memcpy((void*)&UE_rrc_inst[module_id].SL_Discovery[0].Tx_buffer.Payload[0], (void*)&sl_ctrl_msg_recv->sidelinkPrimitive.pc5_discovery_message.payload[0], PC5_DISCOVERY_PAYLOAD_SIZE); memcpy((void*)&UE_rrc_inst[module_id].SL_Discovery[0].Tx_buffer.Payload[0], (void*)&sl_ctrl_msg_recv->sidelinkPrimitive.pc5_discovery_message.payload[0], PC5_DISCOVERY_PAYLOAD_SIZE);
-1
View File
@@ -43,7 +43,6 @@
#include "rrc_eNB_UE_context.h" #include "rrc_eNB_UE_context.h"
#include "common/ran_context.h" #include "common/ran_context.h"
#define DEBUG_RRC 1
extern RAN_CONTEXT_t RC; extern RAN_CONTEXT_t RC;
extern UE_MAC_INST *UE_mac_inst; extern UE_MAC_INST *UE_mac_inst;
+161 -348
View File
@@ -839,11 +839,6 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s*
protocol_ctxt_t ctxt; protocol_ctxt_t ctxt;
#if !defined(ENABLE_USE_MME)
module_id_t ue_module_id;
/* avoid gcc warnings */
(void)ue_module_id;
#endif
rnti_t rnti = ue_context_pP->ue_context.rnti; rnti_t rnti = ue_context_pP->ue_context.rnti;
if (enb_mod_idP >= NB_eNB_INST) { if (enb_mod_idP >= NB_eNB_INST) {
LOG_I(RRC, "eNB inst invalid (%d/%d) for UE %x!\n",enb_mod_idP, NB_eNB_INST,rnti); LOG_I(RRC, "eNB inst invalid (%d/%d) for UE %x!\n",enb_mod_idP, NB_eNB_INST,rnti);
@@ -858,20 +853,21 @@ rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s*
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, enb_mod_idP, ENB_FLAG_YES, rnti, 0, 0,enb_mod_idP); PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, enb_mod_idP, ENB_FLAG_YES, rnti, 0, 0,enb_mod_idP);
LOG_W(RRC, "[eNB %d] Removing UE RNTI %x\n", enb_mod_idP, rnti); LOG_W(RRC, "[eNB %d] Removing UE RNTI %x\n", enb_mod_idP, rnti);
#if defined(ENABLE_USE_MME) if(EPC_MODE_ENABLED) {
if((ue_context_pP->ue_context.ul_failure_timer >= 20000) &&
(mac_eNB_get_rrc_status(enb_mod_idP,rnti) >= RRC_CONNECTED)) { if((ue_context_pP->ue_context.ul_failure_timer >= 20000) &&
LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti); (mac_eNB_get_rrc_status(enb_mod_idP,rnti) >= RRC_CONNECTED)) {
rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti);
/* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered) rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost
* If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered)
* triggering the S1 UE Context Release Request procedure * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before
* in order to allow the UE to perform the NAS recovery * triggering the S1 UE Context Release Request procedure
* procedure, see TS 23.401 [17]. * in order to allow the UE to perform the NAS recovery
*/ * procedure, see TS 23.401 [17].
return; */
return;
} }
#endif }
// add UE info to freeList // add UE info to freeList
LOG_I(RRC, "put UE %x into freeList\n", rnti); LOG_I(RRC, "put UE %x into freeList\n", rnti);
put_UE_in_freelist(enb_mod_idP, rnti, 1); put_UE_in_freelist(enb_mod_idP, rnti, 1);
@@ -1018,17 +1014,13 @@ rrc_eNB_process_RRCConnectionSetupComplete(
T(T_ENB_RRC_CONNECTION_SETUP_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T(T_ENB_RRC_CONNECTION_SETUP_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
#if defined(ENABLE_USE_MME)
if (EPC_MODE_ENABLED == 1) { if (EPC_MODE_ENABLED == 1) {
// Forward message to S1AP layer // Forward message to S1AP layer
rrc_eNB_send_S1AP_NAS_FIRST_REQ( rrc_eNB_send_S1AP_NAS_FIRST_REQ(
ctxt_pP, ctxt_pP,
ue_context_pP, ue_context_pP,
rrcConnectionSetupComplete); rrcConnectionSetupComplete);
} else } else {
#endif
{
// RRC loop back (no S1AP), send SecurityModeCommand to UE // RRC loop back (no S1AP), send SecurityModeCommand to UE
rrc_eNB_generate_SecurityModeCommand( rrc_eNB_generate_SecurityModeCommand(
ctxt_pP, ctxt_pP,
@@ -1058,16 +1050,8 @@ rrc_eNB_generate_SecurityModeCommand(
ue_context_pP->ue_context.ciphering_algorithm, ue_context_pP->ue_context.ciphering_algorithm,
ue_context_pP->ue_context.integrity_algorithm); ue_context_pP->ue_context.integrity_algorithm);
#ifdef RRC_MSG_PRINT
uint16_t i=0;
LOG_F(RRC,"[MSG] RRC Security Mode Command\n");
for (i = 0; i < size; i++) { LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Security Mode Command\n");
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
#endif
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d)\n", PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d)\n",
@@ -1166,9 +1150,6 @@ rrc_eNB_generate_RRCConnectionReject(
) )
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
#ifdef RRC_MSG_PRINT
int cnt;
#endif
T(T_ENB_RRC_CONNECTION_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T(T_ENB_RRC_CONNECTION_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
@@ -1177,15 +1158,10 @@ rrc_eNB_generate_RRCConnectionReject(
do_RRCConnectionReject(ctxt_pP->module_id, do_RRCConnectionReject(ctxt_pP->module_id,
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload); (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload);
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,
LOG_F(RRC,"[MSG] RRCConnectionReject\n"); (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { "[MSG] RRCConnectionReject\n");
LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_TX_MESSAGE( MSC_LOG_TX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -1230,17 +1206,11 @@ rrc_eNB_generate_RRCConnectionReestablishment(
rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),
SRB_configList, SRB_configList,
&ue_context_pP->ue_context.physicalConfigDedicated); &ue_context_pP->ue_context.physicalConfigDedicated);
LOG_DUMPMSG(RRC,DEBUG_RRC,
#ifdef RRC_MSG_PRINT (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
LOG_F(RRC,"[MSG] RRCConnectionReestablishment\n"); RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
"[MSG] RRCConnectionReestablishment\n"
for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { );
LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]);
}
LOG_F(RRC,"\n");
#endif
// configure SRB1 for UE // configure SRB1 for UE
if (*SRB_configList != NULL) { if (*SRB_configList != NULL) {
@@ -1356,10 +1326,6 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
struct SRB_ToAddMod *SRB2_config = NULL; struct SRB_ToAddMod *SRB2_config = NULL;
struct DRB_ToAddMod *DRB_config = NULL; struct DRB_ToAddMod *DRB_config = NULL;
int i = 0; int i = 0;
# if defined(ENABLE_USE_MME)
int j = 0;
hashtable_rc_t h_rc;
#endif
uint8_t buffer[RRC_BUF_SIZE]; uint8_t buffer[RRC_BUF_SIZE];
uint16_t size; uint16_t size;
MeasObjectToAddModList_t *MeasObj_list = NULL; MeasObjectToAddModList_t *MeasObj_list = NULL;
@@ -1450,60 +1416,62 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
ue_context_pP->ue_context.Srb1.Active = 1; ue_context_pP->ue_context.Srb1.Active = 1;
//ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2; //ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2;
# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL; hashtable_rc_t h_rc;
uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id; int j;
uint32_t eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id; rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL;
eNB_RRC_INST *rrc_instance_p = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]; uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id;
if (eNB_ue_s1ap_id > 0) { uint32_t eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id;
h_rc = hashtable_get(rrc_instance_p->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&rrc_ue_s1ap_ids_p); eNB_RRC_INST *rrc_instance_p = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)];
if (h_rc == HASH_TABLE_OK) { if (eNB_ue_s1ap_id > 0) {
rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; h_rc = hashtable_get(rrc_instance_p->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&rrc_ue_s1ap_ids_p);
if (h_rc == HASH_TABLE_OK) {
rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti;
}
} }
} if (ue_initial_id != 0) {
if (ue_initial_id != 0) { h_rc = hashtable_get(rrc_instance_p->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&rrc_ue_s1ap_ids_p);
h_rc = hashtable_get(rrc_instance_p->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&rrc_ue_s1ap_ids_p); if (h_rc == HASH_TABLE_OK) {
if (h_rc == HASH_TABLE_OK) { rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti;
rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; }
} }
}
gtpv1u_enb_create_tunnel_req_t create_tunnel_req; gtpv1u_enb_create_tunnel_req_t create_tunnel_req;
/* Save e RAB information for later */ /* Save e RAB information for later */
memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req)); memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req));
for (j = 0, i = 0; i < NB_RB_MAX; i++) { for ( j = 0, i = 0; i < NB_RB_MAX; i++) {
if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED || ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_DONE) { if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED || ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_DONE) {
create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id; create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id;
create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid; create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid;
memcpy(&create_tunnel_req.sgw_addr[j], memcpy(&create_tunnel_req.sgw_addr[j],
&ue_context_pP->ue_context.e_rab[i].param.sgw_addr, &ue_context_pP->ue_context.e_rab[i].param.sgw_addr,
sizeof(transport_layer_addr_t)); sizeof(transport_layer_addr_t));
j++; j++;
}
} }
}
create_tunnel_req.rnti = ctxt_pP->rnti; // warning put zero above create_tunnel_req.rnti = ctxt_pP->rnti; // warning put zero above
create_tunnel_req.num_tunnels = j; create_tunnel_req.num_tunnels = j;
gtpv1u_update_s1u_tunnel( gtpv1u_update_s1u_tunnel(
ctxt_pP->instance, ctxt_pP->instance,
&create_tunnel_req, &create_tunnel_req,
reestablish_rnti); reestablish_rnti);
#endif } /* EPC_MODE_ENABLED */
/* Update RNTI in ue_context */ /* Update RNTI in ue_context */
ue_context_pP->ue_id_rnti = ctxt_pP->rnti; // here ue_id_rnti is just a key, may be something else ue_context_pP->ue_id_rnti = ctxt_pP->rnti; // here ue_id_rnti is just a key, may be something else
ue_context_pP->ue_context.rnti = ctxt_pP->rnti; ue_context_pP->ue_context.rnti = ctxt_pP->rnti;
# if defined(ENABLE_USE_MME) if(EPC_MODE_ENABLED) {
uint8_t send_security_mode_command = FALSE; uint8_t send_security_mode_command = FALSE;
rrc_pdcp_config_security( rrc_pdcp_config_security(
ctxt_pP, ctxt_pP,
ue_context_pP, ue_context_pP,
send_security_mode_command); send_security_mode_command);
LOG_D(RRC, "set security successfully \n"); LOG_D(RRC, "set security successfully \n");
#endif }
// Measurement ID list // Measurement ID list
MeasId_list = CALLOC(1, sizeof(*MeasId_list)); MeasId_list = CALLOC(1, sizeof(*MeasId_list));
memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); memset((void *)MeasId_list, 0, sizeof(*MeasId_list));
@@ -1869,15 +1837,9 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
, (SCellToAddMod_r10_t*)NULL , (SCellToAddMod_r10_t*)NULL
#endif #endif
); );
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
"[MSG] RRC Connection Reconfiguration\n");
#ifdef RRC_MSG_PRINT
LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
for (i = 0; i < size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
////////////////////////////////////////
#endif
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
@@ -1977,9 +1939,6 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
) )
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
#ifdef RRC_MSG_PRINT
int cnt;
#endif
int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti);
if(UE_id != -1){ if(UE_id != -1){
RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1;
@@ -1997,15 +1956,11 @@ rrc_eNB_generate_RRCConnectionReestablishmentReject(
do_RRCConnectionReestablishmentReject(ctxt_pP->module_id, do_RRCConnectionReestablishmentReject(ctxt_pP->module_id,
(uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload); (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload);
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,
LOG_F(RRC,"[MSG] RRCConnectionReestablishmentReject\n"); (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
"[MSG] RRCConnectionReestablishmentReject\n");
for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) {
LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_TX_MESSAGE( MSC_LOG_TX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -2336,15 +2291,8 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* co
#endif #endif
); );
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Connection Reconfiguration\n");
#ifdef RRC_MSG_PRINT
LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
for (i = 0; i < size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
////////////////////////////////////////
#endif
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
@@ -2606,15 +2554,8 @@ rrc_eNB_modify_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* cons
#endif #endif
); );
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
#ifdef RRC_MSG_PRINT "[MSG] RRC Connection Reconfiguration\n");
LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
for (i = 0; i < size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
////////////////////////////////////////
#endif
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
@@ -2731,15 +2672,8 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_release( const protocol_
#endif #endif
); );
ue_context_pP->ue_context.e_rab_release_command_flag = 1; ue_context_pP->ue_context.e_rab_release_command_flag = 1;
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
#ifdef RRC_MSG_PRINT "[MSG] RRC Connection Reconfiguration\n");
LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
for (i = 0; i < size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
////////////////////////////////////////
#endif
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
/* Free all NAS PDUs */ /* Free all NAS PDUs */
@@ -3460,15 +3394,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* cons
, (SCellToAddMod_r10_t*)NULL , (SCellToAddMod_r10_t*)NULL
#endif #endif
); );
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
#ifdef RRC_MSG_PRINT "[MSG] RRC Connection Reconfiguration\n");
LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
for (i = 0; i < size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
////////////////////////////////////////
#endif
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
@@ -4052,15 +3979,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
, (SCellToAddMod_r10_t*)NULL , (SCellToAddMod_r10_t*)NULL
#endif #endif
); );
LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)buffer,size,
#ifdef RRC_MSG_PRINT "[MSG] RRC Connection Reconfiguration\n");
LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n");
for (i = 0; i < size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
////////////////////////////////////////
#endif
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
@@ -5438,11 +5358,9 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
#ifdef PDCP_USE_NETLINK #ifdef PDCP_USE_NETLINK
int oip_ifup = 0; int oip_ifup = 0;
int dest_ip_offset = 0; int dest_ip_offset = 0;
module_id_t ue_module_id = -1;
/* avoid gcc warnings */ /* avoid gcc warnings */
(void)oip_ifup; (void)oip_ifup;
(void)dest_ip_offset; (void)dest_ip_offset;
(void)ue_module_id;
#endif #endif
uint8_t *kRRCenc = NULL; uint8_t *kRRCenc = NULL;
@@ -5585,6 +5503,7 @@ rrc_eNB_process_RRCConnectionReconfigurationComplete(
ctxt_pP->module_id + 1); // fourth octet ctxt_pP->module_id + 1); // fourth octet
if (oip_ifup == 0) { // interface is up --> send a config the DRB if (oip_ifup == 0) { // interface is up --> send a config the DRB
module_id_t ue_module_id;
dest_ip_offset = 8; dest_ip_offset = 8;
LOG_I(OIP, LOG_I(OIP,
"[eNB %d] Config the oai%d to send/receive pkt on DRB %ld to/from the protocol stack\n", "[eNB %d] Config the oai%d to send/receive pkt on DRB %ld to/from the protocol stack\n",
@@ -5754,16 +5673,10 @@ rrc_eNB_generate_RRCConnectionSetup(
SRB_configList, SRB_configList,
&ue_context_pP->ue_context.physicalConfigDedicated); &ue_context_pP->ue_context.physicalConfigDedicated);
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,
LOG_F(RRC,"[MSG] RRC Connection Setup\n"); (char *)(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload),
RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size,
for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { "[MSG] RRC Connection Setup\n");
LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]);
}
LOG_F(RRC,"\n");
//////////////////////////////////
#endif
// configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE
@@ -6111,15 +6024,10 @@ rrc_eNB_decode_ccch(
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload),
LOG_F(RRC,"[MSG] RRC Connection Reestablishment Request\n"); Srb_info->Rx_buffer.payload_size,
"[MSG] RRC Connection Reestablishment Request\n");
for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]);
}
LOG_F(RRC,"\n");
#endif
LOG_D(RRC, LOG_D(RRC,
PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) --> RRC_eNB\n", PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) --> RRC_eNB\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
@@ -6336,15 +6244,10 @@ rrc_eNB_decode_ccch(
T(T_ENB_RRC_CONNECTION_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T(T_ENB_RRC_CONNECTION_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Srb_info->Rx_buffer.Payload),
LOG_F(RRC,"[MSG] RRC Connection Request\n"); Srb_info->Rx_buffer.payload_size,
"[MSG] RRC Connection Request\n");
for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]);
}
LOG_F(RRC,"\n");
#endif
LOG_D(RRC, LOG_D(RRC,
PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB --- MAC_DATA_IND (rrcConnectionRequest on SRB0) --> RRC_eNB\n", PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB --- MAC_DATA_IND (rrcConnectionRequest on SRB0) --> RRC_eNB\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
@@ -6631,36 +6534,7 @@ rrc_eNB_decode_dcch(
sdu_sizeP, sdu_sizeP,
0, 0,
0); 0);
/*
#if defined(ENABLE_ITTI)
# if defined(DISABLE_ITTI_XER_PRINT)
{
MessageDef *message_p;
message_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_UL_DCCH_MESSAGE);
memcpy(&message_p->ittiMsg, (void *)ul_dcch_msg, sizeof(RrcUlDcchMessage));
itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, message_p);
}
# else
{
char message_string[10000];
size_t message_string_size;
if ((message_string_size =
xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg)) >= 0) {
MessageDef *msg_p;
msg_p = itti_alloc_new_message_sized(TASK_RRC_ENB, RRC_UL_DCCH, message_string_size + sizeof(IttiMsgText));
msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size;
memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size);
itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p);
}
}
# endif
#endif
*/
{ {
for (i = 0; i < sdu_sizeP; i++) { for (i = 0; i < sdu_sizeP; i++) {
LOG_T(RRC, "%x.", Rx_sdu[i]); LOG_T(RRC, "%x.", Rx_sdu[i]);
@@ -6714,15 +6588,9 @@ rrc_eNB_decode_dcch(
LOG_I(RRC, "Processing RRCConnectionReconfigurationComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); LOG_I(RRC, "Processing RRCConnectionReconfigurationComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break; break;
} }
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)(Rx_sdu),sdu_sizeP,
LOG_F(RRC,"[MSG] RRC Connection Reconfiguration Complete\n"); "[MSG] RRC Connection Reconfiguration Complete\n");
for (i = 0; i < sdu_sizeP; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
MSC_RRC_UE, MSC_RRC_UE,
@@ -6745,42 +6613,42 @@ rrc_eNB_decode_dcch(
RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) { RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) {
/*NN: revise the condition */ /*NN: revise the condition */
/*FK: left the condition as is for the case MME is used (S1 mode) but setting dedicated_DRB = 1 otherwise (noS1 mode) so that no second RRCReconfiguration message activationg more DRB is sent as this causes problems with the nasmesh driver.*/ /*FK: left the condition as is for the case MME is used (S1 mode) but setting dedicated_DRB = 1 otherwise (noS1 mode) so that no second RRCReconfiguration message activationg more DRB is sent as this causes problems with the nasmesh driver.*/
#if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){ if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){
dedicated_DRB = 1; dedicated_DRB = 1;
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
//clear //clear
int16_t UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); int16_t UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti);
if(UE_id == -1){ if(UE_id == -1){
LOG_E(RRC, LOG_E(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReconfigurationComplete without rnti %x, fault\n", PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReconfigurationComplete without rnti %x, fault\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ctxt_pP->rnti);
break; break;
} }
if(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1){ if(RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag == 1){
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n", PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld) C-RNTI Complete\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
dedicated_DRB = 2; dedicated_DRB = 2;
RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0; RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].crnti_reconfigurationcomplete_flag = 0;
} }
} else { } else {
dedicated_DRB = 0; dedicated_DRB = 0;
ue_context_p->ue_context.Status = RRC_RECONFIGURED; ue_context_p->ue_context.Status = RRC_RECONFIGURED;
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n", PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
} }
ue_context_p->ue_context.reestablishment_xid = -1; ue_context_p->ue_context.reestablishment_xid = -1;
#else } else {
dedicated_DRB = 1; dedicated_DRB = 1;
ue_context_p->ue_context.Status = RRC_RECONFIGURED; ue_context_p->ue_context.Status = RRC_RECONFIGURED;
LOG_I(RRC, LOG_I(RRC,
PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n",
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier);
#endif }
rrc_eNB_process_RRCConnectionReconfigurationComplete( rrc_eNB_process_RRCConnectionReconfigurationComplete(
ctxt_pP, ctxt_pP,
@@ -6795,7 +6663,6 @@ rrc_eNB_decode_dcch(
} }
} }
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
# if defined(ENABLE_USE_MME)
if (EPC_MODE_ENABLED == 1) { if (EPC_MODE_ENABLED == 1) {
if (dedicated_DRB == 1){ if (dedicated_DRB == 1){
// rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP, // rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP,
@@ -6867,8 +6734,6 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
// ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED; // ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED;
rrc_eNB_reconfigure_DRBs(ctxt_pP,ue_context_p); rrc_eNB_reconfigure_DRBs(ctxt_pP,ue_context_p);
} }
#endif
#endif #endif
break; break;
@@ -6876,15 +6741,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
LOG_F(RRC,"[MSG] RRC Connection Reestablishment Complete\n"); "[MSG] RRC Connection Reestablishment Complete\n");
for (i = 0; i < sdu_sizeP; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -6963,15 +6821,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
LOG_I(RRC, "Processing RRCConnectionSetupComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); LOG_I(RRC, "Processing RRCConnectionSetupComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break; break;
} }
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
LOG_F(RRC,"[MSG] RRC Connection SetupComplete\n"); "[MSG] RRC Connection SetupComplete\n");
for (i = 0; i < sdu_sizeP; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -7023,15 +6874,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
LOG_I(RRC, "Processing securityModeComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); LOG_I(RRC, "Processing securityModeComplete UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break; break;
} }
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
LOG_F(RRC,"[MSG] RRC Security Mode Complete\n"); "[MSG] RRC Security Mode Complete\n");
for (i = 0; i < sdu_sizeP; i++) eNB->pusch_vars[UE_id]{
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -7068,15 +6913,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
T(T_ENB_RRC_SECURITY_MODE_FAILURE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T(T_ENB_RRC_SECURITY_MODE_FAILURE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
LOG_F(RRC,"[MSG] RRC Security Mode Failure\n"); "[MSG] RRC Security Mode Failure\n");
for (i = 0; i < sdu_sizeP; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -7112,15 +6950,9 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
LOG_I(RRC, "Processing ueCapabilityInformation UE %x, ue_context_p is NULL\n", ctxt_pP->rnti); LOG_I(RRC, "Processing ueCapabilityInformation UE %x, ue_context_p is NULL\n", ctxt_pP->rnti);
break; break;
} }
#ifdef RRC_MSG_PRINT
LOG_F(RRC,"[MSG] RRC UECapablility Information \n");
for (i = 0; i < sdu_sizeP; i++) { LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); "[MSG] RRC UECapablility Information\n");
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -7174,22 +7006,22 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
ue_context_p->ue_context.UE_Capability = 0; ue_context_p->ue_context.UE_Capability = 0;
} }
#if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
if (EPC_MODE_ENABLED == 1) { if (EPC_MODE_ENABLED == 1) {
rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(ctxt_pP, rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(ctxt_pP,
ue_context_p, ue_context_p,
ul_dcch_msg); ul_dcch_msg);
}
} else {
ue_context_p->ue_context.nb_of_e_rabs = 1;
for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++){
ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW;
ue_context_p->ue_context.e_rab[i].param.e_rab_id = 1+i;
ue_context_p->ue_context.e_rab[i].param.qos.qci=9;
}
ue_context_p->ue_context.setup_e_rabs =ue_context_p->ue_context.nb_of_e_rabs;
} }
#else
ue_context_p->ue_context.nb_of_e_rabs = 1;
for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++){
ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW;
ue_context_p->ue_context.e_rab[i].param.e_rab_id = 1+i;
ue_context_p->ue_context.e_rab[i].param.qos.qci=9;
}
ue_context_p->ue_context.setup_e_rabs =ue_context_p->ue_context.nb_of_e_rabs;
#endif
rrc_eNB_generate_defaultRRCConnectionReconfiguration(ctxt_pP, rrc_eNB_generate_defaultRRCConnectionReconfiguration(ctxt_pP,
ue_context_p, ue_context_p,
@@ -7212,16 +7044,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
} }
LOG_D(RRC,"[MSG] RRC UL Information Transfer \n"); LOG_D(RRC,"[MSG] RRC UL Information Transfer \n");
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
LOG_F(RRC,"[MSG] RRC UL Information Transfer \n"); "[MSG] RRC UL Information Transfer \n");
for (i = 0; i < sdu_sizeP; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
@@ -7233,15 +7057,11 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
ue_context_p->ue_context.rnti, ue_context_p->ue_context.rnti,
sdu_sizeP); sdu_sizeP);
#if defined(ENABLE_USE_MME)
if (EPC_MODE_ENABLED == 1) { if (EPC_MODE_ENABLED == 1) {
rrc_eNB_send_S1AP_UPLINK_NAS(ctxt_pP, rrc_eNB_send_S1AP_UPLINK_NAS(ctxt_pP,
ue_context_p, ue_context_p,
ul_dcch_msg); ul_dcch_msg);
} }
#endif
break; break;
case UL_DCCH_MessageType__c1_PR_counterCheckResponse: case UL_DCCH_MessageType__c1_PR_counterCheckResponse:
@@ -7307,15 +7127,8 @@ if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) {
//case UL_DCCH_MessageType__messageClassExtension__c2_PR_sidelinkUEInformation_r12: //SidelinkUEInformation //case UL_DCCH_MessageType__messageClassExtension__c2_PR_sidelinkUEInformation_r12: //SidelinkUEInformation
LOG_I(RRC,"THINH [UL_DCCH_MessageType__messageClassExtension_PR_c2]\n"); LOG_I(RRC,"THINH [UL_DCCH_MessageType__messageClassExtension_PR_c2]\n");
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,(char *)Rx_sdu,sdu_sizeP,
LOG_F(RRC,"[MSG] SidelinkUEInformation\n"); "[MSG] RRC SidelinkUEInformation \n");
for (i = 0; i < sdu_sizeP; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]);
}
LOG_F(RRC,"\n");
#endif
MSC_LOG_RX_MESSAGE( MSC_LOG_RX_MESSAGE(
MSC_RRC_ENB, MSC_RRC_ENB,
+1 -9
View File
@@ -945,16 +945,8 @@ rrc_eNB_process_S1AP_DOWNLINK_NAS(
S1AP_DOWNLINK_NAS (msg_p).nas_pdu.length, S1AP_DOWNLINK_NAS (msg_p).nas_pdu.length,
S1AP_DOWNLINK_NAS (msg_p).nas_pdu.buffer); S1AP_DOWNLINK_NAS (msg_p).nas_pdu.buffer);
#ifdef RRC_MSG_PRINT LOG_DUMPMSG(RRC,DEBUG_RRC,buffer,length,"[MSG] RRC DL Information Transfer\n");
int i=0;
LOG_F(RRC,"[MSG] RRC DL Information Transfer\n");
for (i = 0; i < length; i++) {
LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]);
}
LOG_F(RRC,"\n");
#endif
/* /*
* switch UL or DL NAS message without RRC piggybacked to SRB2 if active. * switch UL or DL NAS message without RRC piggybacked to SRB2 if active.
*/ */
+2 -2
View File
@@ -60,7 +60,7 @@ int create_tasks(uint32_t enb_nb)
} }
} }
# if defined(ENABLE_USE_MME) if (EPC_MODE_ENABLED) {
if (enb_nb > 0) { if (enb_nb > 0) {
if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) { if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) {
LOG_E(SCTP, "Create task for SCTP failed\n"); LOG_E(SCTP, "Create task for SCTP failed\n");
@@ -84,7 +84,7 @@ int create_tasks(uint32_t enb_nb)
} }
} }
# endif } /* if (EPC_MODE_ENABLED) */
if (enb_nb > 0) { if (enb_nb > 0) {
LOG_I(RRC,"Creating RRC eNB Task\n"); LOG_I(RRC,"Creating RRC eNB Task\n");
+7 -7
View File
@@ -1882,13 +1882,13 @@ void *ru_thread_synch(void *arg) {
LOG_I(PHY,"Estimated sync_pos %d, peak_val %d => timing offset %d\n",sync_pos,peak_val,ru->rx_offset); LOG_I(PHY,"Estimated sync_pos %d, peak_val %d => timing offset %d\n",sync_pos,peak_val,ru->rx_offset);
LOG_M_BEGIN(RU) if (LOG_DEBUGFLAG(RU)) {
if ((peak_val > 300000) && (sync_pos > 0)) { if ((peak_val > 300000) && (sync_pos > 0)) {
LOG_M("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2); LOG_M("ru_sync.m","sync",(void*)&sync_corr[0],fp->samples_per_tti*5,1,2);
LOG_M("ru_rx.m","rxs",&(ru->eNB_list[0]->common_vars.rxdata[0][0]),fp->samples_per_tti*10,1,1); LOG_M("ru_rx.m","rxs",&(ru->eNB_list[0]->common_vars.rxdata[0][0]),fp->samples_per_tti*10,1,1);
exit(-1); exit(-1);
} }
LOG_M_END }
ru->in_synch=1; ru->in_synch=1;
} }
} }
+2 -2
View File
@@ -788,7 +788,7 @@ int stop_L1L2(module_id_t enb_id)
oai_exit = 1; oai_exit = 1;
if (!RC.ru) { if (!RC.ru) {
LOG_F(ENB_APP, "no RU configured\n"); LOG_UI(ENB_APP, "no RU configured\n");
return -1; return -1;
} }
@@ -967,7 +967,7 @@ int main( int argc, char **argv )
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
printf("ITTI init\n"); printf("ITTI init, useMME: %i\n" ,EPC_MODE_ENABLED);
itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info); itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info);
// initialize mscgen log after ITTI // initialize mscgen log after ITTI
+9 -9
View File
@@ -831,17 +831,17 @@ int main( int argc, char **argv )
set_taus_seed (0); set_taus_seed (0);
set_log(HW, OAILOG_DEBUG, 1); set_log(HW, OAILOG_DEBUG );
set_log(PHY, OAILOG_INFO, 1); set_log(PHY, OAILOG_INFO );
set_log(MAC, OAILOG_INFO, 1); set_log(MAC, OAILOG_INFO );
set_log(RLC, OAILOG_INFO, 1); set_log(RLC, OAILOG_INFO );
set_log(PDCP, OAILOG_INFO, 1); set_log(PDCP, OAILOG_INFO );
set_log(OTG, OAILOG_INFO, 1); set_log(OTG, OAILOG_INFO );
set_log(RRC, OAILOG_INFO, 1); set_log(RRC, OAILOG_INFO );
#if defined(ENABLE_ITTI) #if defined(ENABLE_ITTI)
set_log(SIM, OAILOG_INFO, 1); set_log(SIM, OAILOG_INFO );
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
set_log(NAS, OAILOG_INFO, 1); set_log(NAS, OAILOG_INFO );
# endif # endif
#endif #endif