Commit e329ba78 authored by frtabu's avatar frtabu

fix command line parsing for config_getlist, also improve help processing and...

fix command line parsing for config_getlist, also improve help processing and fix probe (opt) parameters processing
parent 8260607e
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#include <errno.h> #include <errno.h>
#include <platform_types.h> #include <platform_types.h>
#include "config_userapi.h" #include "config_userapi.h"
#include "../utils/LOG/log.h"
int parse_stringlist(paramdef_t *cfgoptions, char *val) { int parse_stringlist(paramdef_t *cfgoptions, char *val) {
char *atoken; char *atoken;
...@@ -74,15 +74,15 @@ int processoption(paramdef_t *cfgoptions, char *value) { ...@@ -74,15 +74,15 @@ int processoption(paramdef_t *cfgoptions, char *value) {
if ( value == NULL) { if ( value == NULL) {
if( (cfgoptions->paramflags &PARAMFLAG_BOOL) == 0 ) { /* not a boolean, argument required */ if( (cfgoptions->paramflags &PARAMFLAG_BOOL) == 0 ) { /* not a boolean, argument required */
fprintf(stderr,"[CONFIG] command line, option %s requires an argument\n",cfgoptions->optname); CONFIG_PRINTF_ERROR("[CONFIG] command line, option %s requires an argument\n",cfgoptions->optname);
exit_fun("[CONFIG] command line parsing fatal error");
return 0;
} else { /* boolean value option without argument, set value to true*/ } else { /* boolean value option without argument, set value to true*/
tmpval = defbool; tmpval = defbool;
} }
} }
switch(cfgoptions->type) { switch(cfgoptions->type) {
char *charptr;
case TYPE_STRING: case TYPE_STRING:
if (cfgoptions->numelt == 0 ) { if (cfgoptions->numelt == 0 ) {
config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval)+1); config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval)+1);
...@@ -106,14 +106,24 @@ int processoption(paramdef_t *cfgoptions, char *value) { ...@@ -106,14 +106,24 @@ int processoption(paramdef_t *cfgoptions, char *value) {
case TYPE_UINT8: case TYPE_UINT8:
case TYPE_INT8: case TYPE_INT8:
config_check_valptr(cfgoptions, (char **)&(cfgoptions->iptr),sizeof(int32_t)); config_check_valptr(cfgoptions, (char **)&(cfgoptions->iptr),sizeof(int32_t));
config_assign_int(cfgoptions,cfgoptions->optname,(int32_t)strtol(tmpval,NULL,0)); config_assign_int(cfgoptions,cfgoptions->optname,(int32_t)strtol(tmpval,&charptr,0));
if( *charptr != 0) {
CONFIG_PRINTF_ERROR("[CONFIG] command line, option %s requires an integer argument\n",cfgoptions->optname);
}
optisset=1; optisset=1;
break; break;
case TYPE_UINT64: case TYPE_UINT64:
case TYPE_INT64: case TYPE_INT64:
config_check_valptr(cfgoptions, (char **)&(cfgoptions->i64ptr),sizeof(uint64_t)); config_check_valptr(cfgoptions, (char **)&(cfgoptions->i64ptr),sizeof(uint64_t));
*(cfgoptions->i64ptr)=strtoll(tmpval,NULL,0); *(cfgoptions->i64ptr)=strtoll(tmpval,&charptr,0);
if( *charptr != 0) {
CONFIG_PRINTF_ERROR("[CONFIG] command line, option %s requires an integer argument\n",cfgoptions->optname);
}
printf_cmdl("[CONFIG] %s set to %lli from command line\n", cfgoptions->optname, (long long)*(cfgoptions->i64ptr)); printf_cmdl("[CONFIG] %s set to %lli from command line\n", cfgoptions->optname, (long long)*(cfgoptions->i64ptr));
optisset=1; optisset=1;
break; break;
...@@ -124,7 +134,12 @@ int processoption(paramdef_t *cfgoptions, char *value) { ...@@ -124,7 +134,12 @@ int processoption(paramdef_t *cfgoptions, char *value) {
case TYPE_DOUBLE: case TYPE_DOUBLE:
config_check_valptr(cfgoptions, (char **)&(cfgoptions->dblptr),sizeof(double)); config_check_valptr(cfgoptions, (char **)&(cfgoptions->dblptr),sizeof(double));
*(cfgoptions->dblptr) = strtof(tmpval,NULL); *(cfgoptions->dblptr) = strtof(tmpval,&charptr);
if( *charptr != 0) {
CONFIG_PRINTF_ERROR("[CONFIG] command line, option %s requires a double argument\n",cfgoptions->optname);
}
printf_cmdl("[CONFIG] %s set to %lf from command line\n", cfgoptions->optname, *(cfgoptions->dblptr)); printf_cmdl("[CONFIG] %s set to %lf from command line\n", cfgoptions->optname, *(cfgoptions->dblptr));
optisset=1; optisset=1;
break; break;
...@@ -133,7 +148,7 @@ int processoption(paramdef_t *cfgoptions, char *value) { ...@@ -133,7 +148,7 @@ int processoption(paramdef_t *cfgoptions, char *value) {
break; break;
default: default:
fprintf(stderr,"[CONFIG] command line, %s type %i not supported\n",cfgoptions->optname, cfgoptions->type); CONFIG_PRINTF_ERROR("[CONFIG] command line, %s type %i not supported\n",cfgoptions->optname, cfgoptions->type);
break; break;
} /* switch on param type */ } /* switch on param type */
...@@ -176,8 +191,11 @@ int config_check_unknown_cmdlineopt(char *prefix) { ...@@ -176,8 +191,11 @@ int config_check_unknown_cmdlineopt(char *prefix) {
} }
} }
printf_cmdl("[CONFIG] %i unknown option(s) in command line starting with %s (section %s)\n", if (unknowndetected > 0) {
unknowndetected,testprefix,((prefix==NULL)?"":prefix)); CONFIG_PRINTF_ERROR("[CONFIG] %i unknown option(s) in command line starting with %s (section %s)\n",
unknowndetected,testprefix,((prefix==NULL)?"":prefix));
}
return unknowndetected; return unknowndetected;
} /* config_check_unknown_cmdlineopt */ } /* config_check_unknown_cmdlineopt */
...@@ -200,7 +218,7 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) ...@@ -200,7 +218,7 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix)
if (pp == NULL || strcasecmp(pp,config_get_if()->argv[i] ) == 0 ) { if (pp == NULL || strcasecmp(pp,config_get_if()->argv[i] ) == 0 ) {
if( prefix == NULL) { if( prefix == NULL) {
config_printhelp(cfgoptions,numoptions); config_printhelp(cfgoptions,numoptions,"(root section)");
if ( ! ( CONFIG_ISFLAGSET(CONFIG_NOEXITONHELP))) if ( ! ( CONFIG_ISFLAGSET(CONFIG_NOEXITONHELP)))
exit_fun("[CONFIG] Exiting after displaying help\n"); exit_fun("[CONFIG] Exiting after displaying help\n");
...@@ -209,8 +227,7 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) ...@@ -209,8 +227,7 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix)
pp=strtok_r(NULL, " ",&tokctx); pp=strtok_r(NULL, " ",&tokctx);
if ( prefix != NULL && pp != NULL && strncasecmp(prefix,pp,strlen(pp)) == 0 ) { if ( prefix != NULL && pp != NULL && strncasecmp(prefix,pp,strlen(pp)) == 0 ) {
printf ("Help for %s section:\n",prefix); config_printhelp(cfgoptions,numoptions,prefix);
config_printhelp(cfgoptions,numoptions);
if ( ! (CONFIG_ISFLAGSET(CONFIG_NOEXITONHELP))) { if ( ! (CONFIG_ISFLAGSET(CONFIG_NOEXITONHELP))) {
fprintf(stderr,"[CONFIG] %s %i section %s:", __FILE__, __LINE__, prefix); fprintf(stderr,"[CONFIG] %s %i section %s:", __FILE__, __LINE__, prefix);
...@@ -273,16 +290,4 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) ...@@ -273,16 +290,4 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix)
} /* fin du while */ } /* fin du while */
printf_cmdl("[CONFIG] %s %i options set from command line\n",((prefix == NULL) ? "(root)":prefix),j); printf_cmdl("[CONFIG] %s %i options set from command line\n",((prefix == NULL) ? "(root)":prefix),j);
if ( !(CONFIG_ISFLAGSET( CONFIG_NOCHECKUNKOPT )) ) {
i=config_check_unknown_cmdlineopt(prefix);
if (i > 0) {
fprintf(stderr,"[CONFIG] %i unknown options for section %s detected in command line\n",
i,((prefix==NULL)?"\"root section\"":prefix));
exit_fun(" Exiting after detecting errors in command line \n");
}
}
return j;
} /* parse_cmdline*/ } /* parse_cmdline*/
...@@ -36,12 +36,15 @@ ...@@ -36,12 +36,15 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <platform_types.h>
#define CONFIG_LOADCONFIG_MAIN #define CONFIG_LOADCONFIG_MAIN
#include "config_load_configmodule.h" #include "config_load_configmodule.h"
#include "config_userapi.h" #include "config_userapi.h"
#include "../utils/LOG/log.h"
#define CONFIG_SHAREDLIBFORMAT "libparams_%s.so" #define CONFIG_SHAREDLIBFORMAT "libparams_%s.so"
int load_config_sharedlib(configmodule_interface_t *cfgptr) { int load_config_sharedlib(configmodule_interface_t *cfgptr) {
void *lib_handle; void *lib_handle;
char fname[128]; char fname[128];
...@@ -198,7 +201,7 @@ configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t init ...@@ -198,7 +201,7 @@ configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t init
} }
if ( strstr(argv[i], "help_config") != NULL ) { if ( strstr(argv[i], "help_config") != NULL ) {
config_printhelp(Config_Params,CONFIG_PARAMLENGTH(Config_Params)); config_printhelp(Config_Params,CONFIG_PARAMLENGTH(Config_Params),CONFIG_SECTIONNAME);
exit(0); exit(0);
} }
...@@ -304,7 +307,7 @@ configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t init ...@@ -304,7 +307,7 @@ configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t init
if (cfgmode != NULL) free(cfgmode); if (cfgmode != NULL) free(cfgmode);
if (CONFIG_ISFLAGSET(CONFIG_ABORT)) { if (CONFIG_ISFLAGSET(CONFIG_ABORT)) {
config_printhelp(Config_Params,CONFIG_PARAMLENGTH(Config_Params)); config_printhelp(Config_Params,CONFIG_PARAMLENGTH(Config_Params),CONFIG_SECTIONNAME );
// exit(-1); // exit(-1);
} }
......
...@@ -51,7 +51,6 @@ ...@@ -51,7 +51,6 @@
#define CONFIG_PRINTPARAMS 1 // print parameters values while processing #define CONFIG_PRINTPARAMS 1 // print parameters values while processing
#define CONFIG_DEBUGPTR (1<<1) // print memory allocation/free debug messages #define CONFIG_DEBUGPTR (1<<1) // print memory allocation/free debug messages
#define CONFIG_DEBUGCMDLINE (1<<2) // print command line processing messages #define CONFIG_DEBUGCMDLINE (1<<2) // print command line processing messages
#define CONFIG_NOCHECKUNKOPT (1<<3) // disable check unprocessed (so invalid) command line options
#define CONFIG_NOABORTONCHKF (1<<4) // disable abort execution when parameter checking function fails #define CONFIG_NOABORTONCHKF (1<<4) // disable abort execution when parameter checking function fails
#define CONFIG_NOEXITONHELP (1<<19) // do not exit after printing help #define CONFIG_NOEXITONHELP (1<<19) // do not exit after printing help
#define CONFIG_HELP (1<<20) // print help message #define CONFIG_HELP (1<<20) // print help message
...@@ -109,5 +108,7 @@ extern configmodule_interface_t *cfgptr; ...@@ -109,5 +108,7 @@ extern configmodule_interface_t *cfgptr;
#define CONFIG_ENABLECMDLINEONLY (1<<1) #define CONFIG_ENABLECMDLINEONLY (1<<1)
extern configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t initflags); extern configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t initflags);
extern void end_configmodule(void); extern void end_configmodule(void);
#define CONFIG_PRINTF_ERROR(f, x... ) if (isLogInitDone ()) { LOG_E(ENB_APP,f,x);} else {printf(f,x);}; if ( !CONFIG_ISFLAGSET(CONFIG_NOABORTONCHKF) ) exit_fun("exit because configuration failed\n");
#endif /* INCLUDE_CONFIG_LOADCONFIGMODULE_H */ #endif /* INCLUDE_CONFIG_LOADCONFIGMODULE_H */
...@@ -39,15 +39,13 @@ ...@@ -39,15 +39,13 @@
#include <errno.h> #include <errno.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <platform_types.h> #include <platform_types.h>
#include "config_userapi.h" #include "config_userapi.h"
#include "../utils/LOG/log.h"
configmodule_interface_t *config_get_if(void) { configmodule_interface_t *config_get_if(void) {
if (cfgptr == NULL) { if (cfgptr == NULL) {
fprintf(stderr,"[CONFIG] %s %d config module not initialized\n",__FILE__, __LINE__); CONFIG_PRINTF_ERROR("[CONFIG] %s %d config module not initialized\n",__FILE__,__LINE__);
exit(-1);
} }
return cfgptr; return cfgptr;
...@@ -66,9 +64,8 @@ char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) { ...@@ -66,9 +64,8 @@ char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) {
config_get_if()->numptrs++; config_get_if()->numptrs++;
} }
} else { } else {
fprintf(stderr, "[CONFIG] %s %d option %s, cannot allocate pointer: %s \n", CONFIG_PRINTF_ERROR("[CONFIG] %s %d option %s, cannot allocate pointer: %s \n",
__FILE__, __LINE__, cfgoptions->optname, strerror(errno)); __FILE__, __LINE__, cfgoptions->optname, strerror(errno));
exit(-1);
} }
} }
...@@ -78,9 +75,8 @@ char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) { ...@@ -78,9 +75,8 @@ char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) {
if (*ptr != NULL) { if (*ptr != NULL) {
return *ptr; return *ptr;
} else { } else {
fprintf(stderr,"[CONFIG] %s %d option %s, definition error: value pointer is NULL, declared as %i bytes allocated\n", CONFIG_PRINTF_ERROR("[CONFIG] %s %d option %s, definition error: value pointer is NULL, declared as %i bytes allocated\n",
__FILE__, __LINE__,cfgoptions->optname, cfgoptions->numelt); __FILE__, __LINE__,cfgoptions->optname, cfgoptions->numelt);
exit(-1);
} }
} }
...@@ -95,8 +91,7 @@ char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) { ...@@ -95,8 +91,7 @@ char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) {
config_get_if()->numptrs++; config_get_if()->numptrs++;
} }
} else { } else {
fprintf (stderr,"[CONFIG] %s %d malloc error\n",__FILE__, __LINE__); CONFIG_PRINTF_ERROR("[CONFIG] %s %d malloc error\n",__FILE__, __LINE__);
exit(-1);
} }
} }
...@@ -157,8 +152,7 @@ void config_assign_processedint(paramdef_t *cfgoption, int val) { ...@@ -157,8 +152,7 @@ void config_assign_processedint(paramdef_t *cfgoption, int val) {
if ( cfgoption->processedvalue != NULL) { if ( cfgoption->processedvalue != NULL) {
*(cfgoption->processedvalue) = val; *(cfgoption->processedvalue) = val;
} else { } else {
fprintf (stderr,"[CONFIG] %s %d malloc error\n",__FILE__, __LINE__); CONFIG_PRINTF_ERROR("[CONFIG] %s %d malloc error\n",__FILE__, __LINE__);
exit(-1);
} }
} }
...@@ -177,15 +171,17 @@ int config_get_processedint(paramdef_t *cfgoption) { ...@@ -177,15 +171,17 @@ int config_get_processedint(paramdef_t *cfgoption) {
return ret; return ret;
} }
void config_printhelp(paramdef_t *params,int numparams) { void config_printhelp(paramdef_t *params,int numparams, char *prefix) {
printf("\n-----Help for section %-26s: %03i entries------\n",(prefix==NULL)?"(root section)":prefix ,numparams);
for (int i=0 ; i<numparams ; i++) { for (int i=0 ; i<numparams ; i++) {
if ( params[i].helpstr != NULL) { printf(" %s%s: %s",
printf("%s%s: %s", (strlen(params[i].optname) <= 1) ? "-" : "--",
(strlen(params[i].optname) <= 1) ? "-" : "--", params[i].optname,
params[i].optname, (params[i].helpstr != NULL)?params[i].helpstr:"Help string not specified");
params[i].helpstr); } /* for on params entries */
}
} printf("--------------------------------------------------------------------\n\n");
} }
int config_execcheck(paramdef_t *params,int numparams, char *prefix) { int config_execcheck(paramdef_t *params,int numparams, char *prefix) {
...@@ -202,11 +198,7 @@ int config_execcheck(paramdef_t *params,int numparams, char *prefix) { ...@@ -202,11 +198,7 @@ int config_execcheck(paramdef_t *params,int numparams, char *prefix) {
} }
if (st != 0) { if (st != 0) {
fprintf(stderr,"[CONFIG] config_execcheck: section %s %i parameters with wrong value\n", prefix, -st); CONFIG_PRINTF_ERROR("[CONFIG] config_execcheck: section %s %i parameters with wrong value\n", prefix, -st);
if ( CONFIG_ISFLAGSET(CONFIG_NOABORTONCHKF) == 0) {
exit_fun("exit because configuration failed\n");
}
} }
return st; return st;
...@@ -263,6 +255,7 @@ int config_getlist(paramlist_def_t *ParamList, paramdef_t *params, int numparams ...@@ -263,6 +255,7 @@ int config_getlist(paramlist_def_t *ParamList, paramdef_t *params, int numparams
for (int i = 0; i < ParamList->numelt; ++i) { for (int i = 0; i < ParamList->numelt; ++i) {
// TODO config_process_cmdline? // TODO config_process_cmdline?
sprintf(cfgpath, "%s.[%i]", newprefix, i); sprintf(cfgpath, "%s.[%i]", newprefix, i);
config_process_cmdline(ParamList->paramarray[i],numparams,cfgpath);
config_execcheck(ParamList->paramarray[i], numparams, cfgpath); config_execcheck(ParamList->paramarray[i], numparams, cfgpath);
} }
......
...@@ -49,7 +49,7 @@ extern "C" ...@@ -49,7 +49,7 @@ extern "C"
/* utility functions, to be used by configuration module and/or configuration libraries */ /* utility functions, to be used by configuration module and/or configuration libraries */
extern configmodule_interface_t *config_get_if(void); extern configmodule_interface_t *config_get_if(void);
extern char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) ; extern char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) ;
extern void config_printhelp(paramdef_t *,int numparams); extern void config_printhelp(paramdef_t *,int numparams, char *prefix);
extern int config_process_cmdline(paramdef_t *params,int numparams, char *prefix); extern int config_process_cmdline(paramdef_t *params,int numparams, char *prefix);
extern void config_assign_processedint(paramdef_t *cfgoption, int val); extern void config_assign_processedint(paramdef_t *cfgoption, int val);
extern void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val); extern void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val);
......
...@@ -219,7 +219,6 @@ void log_getconfig(log_t *g_log) { ...@@ -219,7 +219,6 @@ void log_getconfig(log_t *g_log) {
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_dump[sizeof(log_maskmap)/sizeof(mapping)]; paramdef_t logparams_dump[sizeof(log_maskmap)/sizeof(mapping)];
CONFIG_SETRTFLAG(CONFIG_NOCHECKUNKOPT);
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) {
...@@ -305,8 +304,8 @@ void log_getconfig(log_t *g_log) { ...@@ -305,8 +304,8 @@ void log_getconfig(log_t *g_log) {
} }
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_CLEARRTFLAG(CONFIG_NOCHECKUNKOPT);
config_get( logparams_dump,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX); config_get( logparams_dump,(sizeof(log_maskmap)/sizeof(mapping)) - 1 ,CONFIG_STRING_LOG_PREFIX);
config_check_unknown_cmdlineopt(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++) {
......
...@@ -345,6 +345,8 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int ...@@ -345,6 +345,8 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
} }
#define LOG_OPTIONS_IDX 2 #define LOG_OPTIONS_IDX 2
/*----------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------*/
/** @defgroup _debugging debugging macros /** @defgroup _debugging debugging macros
* @ingroup _macro * @ingroup _macro
......
...@@ -12,15 +12,17 @@ ...@@ -12,15 +12,17 @@
#include "common/config/config_userapi.h" #include "common/config/config_userapi.h"
#define QUIT(x) do { \ #define QUIT(x) do { \
printf("T tracer: QUIT: %s\n", x); \ printf("T tracer: QUIT: %s\n", x); \
exit(1); \ exit(1); \
} while (0) } while (0)
/* array used to activate/disactivate a log */ /* array used to activate/disactivate a log */
static int T_IDs[T_NUMBER_OF_IDS]; static int T_IDs[T_NUMBER_OF_IDS];
int *T_active = T_IDs; int *T_active = T_IDs;
int T_stdout = 1; int T_stdout = 1;
static int T_socket; static int T_socket;
/* T_cache /* T_cache
...@@ -32,125 +34,159 @@ volatile int *T_freelist_head = &_T_freelist_head; ...@@ -32,125 +34,159 @@ volatile int *T_freelist_head = &_T_freelist_head;
T_cache_t *T_cache; T_cache_t *T_cache;
#if BASIC_SIMULATOR #if BASIC_SIMULATOR
/* global variables used by T_GET_SLOT, see in T.h */ /* global variables used by T_GET_SLOT, see in T.h */
volatile uint64_t T_next_id; volatile uint64_t T_next_id;
volatile uint64_t T_active_id; volatile uint64_t T_active_id;
#endif #endif
static void get_message(int s) static void get_message(int s) {
{
char t; char t;
int l; int l;
int id; int id;
int is_on; int is_on;
if (read(s, &t, 1) != 1) QUIT("get_message fails"); if (read(s, &t, 1) != 1) QUIT("get_message fails");
printf("T tracer: got mess %d\n", t);
printf("T tracer: got mess %d\n", t);
switch (t) { switch (t) {
case 0: case 0:
/* toggle all those IDs */
/* optimze? (too much syscalls) */ /* toggle all those IDs */
if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails"); /* optimze? (too much syscalls) */
while (l) { if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
if (read(s, &id, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
T_IDs[id] = 1 - T_IDs[id]; while (l) {
l--; if (read(s, &id, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
}
break; T_IDs[id] = 1 - T_IDs[id];
case 1: l--;
/* set IDs as given */ }
/* optimize? */
if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails"); break;
id = 0;
while (l) { case 1:
if (read(s, &is_on, sizeof(int)) != sizeof(int))
QUIT("get_message fails"); /* set IDs as given */
T_IDs[id] = is_on; /* optimize? */
id++; if (read(s, &l, sizeof(int)) != sizeof(int)) QUIT("get_message fails");
l--;
} id = 0;
break;
case 2: break; /* do nothing, this message is to wait for local tracer */ while (l) {
if (read(s, &is_on, sizeof(int)) != sizeof(int))
QUIT("get_message fails");
T_IDs[id] = is_on;
id++;
l--;
}
break;
case 2:
break; /* do nothing, this message is to wait for local tracer */
} }
} }
static void *T_receive_thread(void *_) static void *T_receive_thread(void *_) {
{
while (1) get_message(T_socket); while (1) get_message(T_socket);
return NULL; return NULL;
} }
static void new_thread(void *(*f)(void *), void *data) static void new_thread(void *(*f)(void *), void *data) {
{
pthread_t t; pthread_t t;
pthread_attr_t att; pthread_attr_t att;
if (pthread_attr_init(&att)) if (pthread_attr_init(&att)) {
{ fprintf(stderr, "pthread_attr_init err\n"); exit(1); } fprintf(stderr, "pthread_attr_init err\n");
if (pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED)) exit(1);
{ fprintf(stderr, "pthread_attr_setdetachstate err\n"); exit(1); } }
if (pthread_create(&t, &att, f, data))
{ fprintf(stderr, "pthread_create err\n"); exit(1); } if (pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED)) {
if (pthread_attr_destroy(&att)) fprintf(stderr, "pthread_attr_setdetachstate err\n");
{ fprintf(stderr, "pthread_attr_destroy err\n"); exit(1); } exit(1);
}
if (pthread_create(&t, &att, f, data)) {
fprintf(stderr, "pthread_create err\n");
exit(1);
}
if (pthread_attr_destroy(&att)) {
fprintf(stderr, "pthread_attr_destroy err\n");
exit(1);
}
} }
/* defined in local_tracer.c */ /* defined in local_tracer.c */
void T_local_tracer_main(int remote_port, int wait_for_tracer, void T_local_tracer_main(int remote_port, int wait_for_tracer,
int local_socket, void *shm_array); int local_socket, void *shm_array);
/* We monitor the tracee and the local tracer processes. /* We monitor the tracee and the local tracer processes.
* When one dies we forcefully kill the other. * When one dies we forcefully kill the other.
*/ */
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
static void monitor_and_kill(int child1, int child2) static void monitor_and_kill(int child1, int child2) {
{
int child; int child;
int status; int status;
child = wait(&status); child = wait(&status);
if (child == -1) perror("wait"); if (child == -1) perror("wait");
kill(child1, SIGKILL); kill(child1, SIGKILL);
kill(child2, SIGKILL); kill(child2, SIGKILL);
exit(0); exit(0);
} }
void T_init(int remote_port, int wait_for_tracer, int dont_fork) void T_init(int remote_port, int wait_for_tracer, int dont_fork) {
{
int socket_pair[2]; int socket_pair[2];
int s; int s;
int child1, child2; int child1, child2;
int i; int i;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair)) if (socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair)) {
{ perror("socketpair"); abort(); } perror("socketpair");
abort();
}
/* setup shared memory */ /* setup shared memory */
T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t), T_cache = mmap(NULL, T_CACHE_SIZE * sizeof(T_cache_t),
PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
if (T_cache == MAP_FAILED)
{ perror("mmap"); abort(); } if (T_cache == MAP_FAILED) {
perror("mmap");
abort();
}
/* let's garbage the memory to catch some potential problems /* let's garbage the memory to catch some potential problems
* (think multiprocessor sync issues, barriers, etc.) * (think multiprocessor sync issues, barriers, etc.)
*/ */
memset(T_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t)); memset(T_cache, 0x55, T_CACHE_SIZE * sizeof(T_cache_t));
for (i = 0; i < T_CACHE_SIZE; i++) T_cache[i].busy = 0; for (i = 0; i < T_CACHE_SIZE; i++) T_cache[i].busy = 0;
/* child1 runs the local tracer and child2 (or main) runs the tracee */ /* child1 runs the local tracer and child2 (or main) runs the tracee */
child1 = fork();
if (child1 == -1) abort();
child1 = fork(); if (child1 == -1) abort();
if (child1 == 0) { if (child1 == 0) {
close(socket_pair[1]); close(socket_pair[1]);
T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0], T_local_tracer_main(remote_port, wait_for_tracer, socket_pair[0],
T_cache); T_cache);
exit(0); exit(0);
} }
close(socket_pair[0]); close(socket_pair[0]);
if (dont_fork == 0) { if (dont_fork == 0) {
child2 = fork(); if (child2 == -1) abort(); child2 = fork();
if (child2 == -1) abort();
if (child2 != 0) { if (child2 != 0) {
close(socket_pair[1]); close(socket_pair[1]);
munmap(T_cache, T_CACHE_SIZE * sizeof(T_cache_t)); munmap(T_cache, T_CACHE_SIZE * sizeof(T_cache_t));
...@@ -161,27 +197,21 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) ...@@ -161,27 +197,21 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork)
s = socket_pair[1]; s = socket_pair[1];
/* wait for first message - initial list of active T events */ /* wait for first message - initial list of active T events */
get_message(s); get_message(s);
T_socket = s; T_socket = s;
new_thread(T_receive_thread, NULL); new_thread(T_receive_thread, NULL);
} }
void T_Config_Init(void) void T_Config_Init(void) {
{
int T_port; /* by default we wait for the tracer */ int T_port; /* by default we wait for the tracer */
int T_nowait; /* default port to listen to to wait for the tracer */ int T_nowait; /* default port to listen to to wait for the tracer */
int T_dont_fork; /* default is to fork, see 'T_init' to understand */ int T_dont_fork; /* default is to fork, see 'T_init' to understand */
paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC; paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC;
/* for a cleaner config file, TTracer params should be defined in a /* for a cleaner config file, TTracer params should be defined in a
* specific section... * specific section...
*/ */
config_get(ttraceparams, config_get(ttraceparams,
sizeof(ttraceparams) / sizeof(paramdef_t), sizeof(ttraceparams) / sizeof(paramdef_t),
TTRACER_CONFIG_PREFIX); TTRACER_CONFIG_PREFIX);
/* compatibility: look for TTracer command line options in root section */ /* compatibility: look for TTracer command line options in root section */
config_process_cmdline(ttraceparams, config_process_cmdline(ttraceparams,
sizeof(ttraceparams) / sizeof(paramdef_t), sizeof(ttraceparams) / sizeof(paramdef_t),
......
...@@ -33,26 +33,23 @@ This header file must be included */ ...@@ -33,26 +33,23 @@ This header file must be included */
#define OPT_H_ #define OPT_H_
#ifndef sys_include #ifndef sys_include
#define sys_include #define sys_include
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netdb.h> #include <netdb.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <time.h> #include <time.h>
#endif #endif
#ifndef project_include #ifndef project_include
#define project_include #define project_include
#include "common/utils/LOG/log_if.h" #include "common/utils/LOG/log_if.h"
// #include "UTIL/LOG/log_extern.h" #include "PHY/impl_defs_lte.h"
//#include "PHY/defs.h"
//#include "PHY/extern.h"
#include "PHY/impl_defs_lte.h"
#endif #endif
#define PACKET_MAC_LTE_DEFAULT_UDP_PORT (9999) #define PACKET_MAC_LTE_DEFAULT_UDP_PORT (9999)
...@@ -65,6 +62,32 @@ typedef guint8 gboolean; ...@@ -65,6 +62,32 @@ typedef guint8 gboolean;
#include "packet-mac-lte.h" #include "packet-mac-lte.h"
#include "mac_pcap.h" #include "mac_pcap.h"
/* OPT parameters definitions */
#define OPT_CONFIGPREFIX "opt"
#define CONFIG_HLP_TYPEMON "Type of L2 monitoring messages: none,pcap,wireshark \n"
#define CONFIG_HLP_L2MONIP "ip address for wireshark messages \n"
#define CONFIG_HLP_L2MONPATH "file path for pcap messages on localhost \n"
/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters for LOG utility */
/* optname helpstr paramflags XXXptr defXXXval type numelt */
/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#define OPT_PARAMS_DESC { \
{"type" , CONFIG_HLP_TYPEMON, 0, strptr:&in_type, defstrval:"none", TYPE_STRING, 0}, \
{"ip" , CONFIG_HLP_L2MONIP, 0, strptr:&in_ip, defstrval:"127.0.0.1", TYPE_STRING, 0}, \
{"path" , CONFIG_HLP_L2MONPATH, 0, strptr:&in_path, defstrval:"/tmp/oai_opt.pcap", TYPE_STRING, 0}, \
}
#define OPTTYPE_IDX 0
/* check function for opt parameters */
#define OPTTYPE_OKSTRINGS {"none","pcap","wireshark"}
#define OPTTYPE_VALUES {OPT_NONE,OPT_PCAP,OPT_WIRESHARK}
#define OPTPARAMS_CHECK_DESC { \
{ .s3a= { config_checkstr_assign_integer, OPTTYPE_OKSTRINGS,OPTTYPE_VALUES ,3}} ,\
{ .s5= {NULL }} , \
{ .s5= {NULL }} , \
}
#ifdef OCP_FRAMEWORK #ifdef OCP_FRAMEWORK
#include <enums.h> #include <enums.h>
#else #else
...@@ -82,9 +105,7 @@ typedef enum radio_type_e { ...@@ -82,9 +105,7 @@ typedef enum radio_type_e {
RADIO_TYPE_MAX RADIO_TYPE_MAX
} radio_type_t; } radio_type_t;
extern trace_mode_t opt_type;
extern char in_ip[40];
extern char in_path[FILENAME_MAX];
/** /**
* function def * function def
...@@ -94,7 +115,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size, ...@@ -94,7 +115,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe, int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
int oob_event, int oob_event_value); int oob_event, int oob_event_value);
int init_opt(char *path, char *ip); int init_opt(void);
void terminate_opt(void); void terminate_opt(void);
......
This diff is collapsed.
...@@ -39,67 +39,58 @@ char *parallel_config=NULL; ...@@ -39,67 +39,58 @@ char *parallel_config=NULL;
char *worker_config=NULL; char *worker_config=NULL;
uint64_t get_softmodem_optmask(void) { uint64_t get_softmodem_optmask(void) {
return softmodem_params.optmask; return softmodem_params.optmask;
} }
uint64_t set_softmodem_optmask(uint64_t bitmask) { uint64_t set_softmodem_optmask(uint64_t bitmask) {
softmodem_params.optmask = softmodem_params.optmask | bitmask; softmodem_params.optmask = softmodem_params.optmask | bitmask;
return softmodem_params.optmask; return softmodem_params.optmask;
} }
softmodem_params_t* get_softmodem_params(void) { softmodem_params_t *get_softmodem_params(void) {
return &softmodem_params; return &softmodem_params;
} }
void get_common_options(void) void get_common_options(void) {
{ uint32_t online_log_messages;
uint32_t glog_level ;
uint32_t start_telnetsrv;
uint32_t online_log_messages; uint32_t noS1;
uint32_t glog_level ; uint32_t nokrnmod;
uint32_t start_telnetsrv; uint32_t nonbiot;
uint32_t noS1; paramdef_t cmdline_params[] =CMDLINE_PARAMS_DESC ;
uint32_t nokrnmod; paramdef_t cmdline_logparams[] =CMDLINE_LOGPARAMS_DESC ;
uint32_t nonbiot; checkedparam_t cmdline_log_CheckParams[] = CMDLINE_LOGPARAMS_CHECK_DESC;
paramdef_t cmdline_params[] =CMDLINE_PARAMS_DESC ; config_get( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
paramdef_t cmdline_logparams[] =CMDLINE_LOGPARAMS_DESC ; config_set_checkfunctions(cmdline_logparams, cmdline_log_CheckParams,
sizeof(cmdline_logparams)/sizeof(paramdef_t));
config_get( cmdline_logparams,sizeof(cmdline_logparams)/sizeof(paramdef_t),NULL);
config_process_cmdline( cmdline_params,sizeof(cmdline_params)/sizeof(paramdef_t),NULL);
if (strlen(in_path) > 0) {
opt_type = OPT_PCAP;
opt_enabled=1;
printf("Enabling OPT for PCAP with the following file %s \n",in_path);
}
if (strlen(in_ip) > 0) {
opt_enabled=1;
opt_type = OPT_WIRESHARK;
printf("Enabling OPT for wireshark for local interface");
}
config_process_cmdline( cmdline_logparams,sizeof(cmdline_logparams)/sizeof(paramdef_t),NULL);
if(config_isparamset(cmdline_logparams,CMDLINE_ONLINELOG_IDX)) { if(config_isparamset(cmdline_logparams,CMDLINE_ONLINELOG_IDX)) {
set_glog_onlinelog(online_log_messages); set_glog_onlinelog(online_log_messages);
} }
if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) { if(config_isparamset(cmdline_logparams,CMDLINE_GLOGLEVEL_IDX)) {
set_glog(glog_level); set_glog(glog_level);
} }
if (start_telnetsrv) { if (start_telnetsrv) {
load_module_shlib("telnetsrv",NULL,0,NULL); load_module_shlib("telnetsrv",NULL,0,NULL);
} }
if (noS1) { if (noS1) {
set_softmodem_optmask(SOFTMODEM_NOS1_BIT); set_softmodem_optmask(SOFTMODEM_NOS1_BIT);
} }
if (nokrnmod) { if (nokrnmod) {
set_softmodem_optmask(SOFTMODEM_NOKRNMOD_BIT); set_softmodem_optmask(SOFTMODEM_NOKRNMOD_BIT);
} }
if (nonbiot) { if (nonbiot) {
set_softmodem_optmask(SOFTMODEM_NONBIOT_BIT); set_softmodem_optmask(SOFTMODEM_NONBIOT_BIT);
} }
if(parallel_config != NULL) set_parallel_conf(parallel_config); if(parallel_config != NULL) set_parallel_conf(parallel_config);
if(worker_config != NULL) set_worker_conf(worker_config); if(worker_config != NULL) set_worker_conf(worker_config);
} }
...@@ -305,9 +305,6 @@ void exit_function(const char *file, const char *function, const int line, const ...@@ -305,9 +305,6 @@ void exit_function(const char *file, const char *function, const int line, const
} }
sleep(1); //allow lte-softmodem threads to exit first sleep(1); //allow lte-softmodem threads to exit first
#if defined(ENABLE_ITTI)
itti_terminate_tasks (TASK_UNKNOWN);
#endif
exit(1); exit(1);
} }
...@@ -449,7 +446,7 @@ static void get_options(void) { ...@@ -449,7 +446,7 @@ static void get_options(void) {
NB_eNB_INST = RC.nb_inst; NB_eNB_INST = RC.nb_inst;
printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,RC.nb_RU); printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,RC.nb_RU);
if (!SOFTMODEM_NONBIOT) { if (!IS_SOFTMODEM_NONBIOT) {
load_NB_IoT(); load_NB_IoT();
printf(" nb_nbiot_rrc_inst %d, nb_nbiot_L1_inst %d, nb_nbiot_macrlc_inst %d\n", printf(" nb_nbiot_rrc_inst %d, nb_nbiot_L1_inst %d, nb_nbiot_macrlc_inst %d\n",
RC.nb_nb_iot_rrc_inst, RC.nb_nb_iot_L1_inst, RC.nb_nb_iot_macrlc_inst); RC.nb_nb_iot_rrc_inst, RC.nb_nb_iot_L1_inst, RC.nb_nb_iot_macrlc_inst);
...@@ -505,7 +502,8 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) { ...@@ -505,7 +502,8 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
} }
void wait_RUs(void) { void wait_RUs(void) {
LOG_I(PHY,"Waiting for RUs to be configured ... RC.ru_mask:%02lx\n", RC.ru_mask); /* do not modify the following LOG_UI message, which is used by CI */
LOG_UI(ENB_APP,"Waiting for RUs to be configured ... RC.ru_mask:%02lx\n", RC.ru_mask);
// wait for all RUs to be configured over fronthaul // wait for all RUs to be configured over fronthaul
pthread_mutex_lock(&RC.ru_mutex); pthread_mutex_lock(&RC.ru_mutex);
...@@ -678,7 +676,6 @@ int main( int argc, char **argv ) { ...@@ -678,7 +676,6 @@ int main( int argc, char **argv ) {
set_latency_target(); set_latency_target();
logInit(); logInit();
printf("Reading in command-line options\n"); printf("Reading in command-line options\n");
CONFIG_SETRTFLAG(CONFIG_NOCHECKUNKOPT);
get_options (); get_options ();
if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) { if (CONFIG_ISFLAGSET(CONFIG_ABORT) ) {
...@@ -689,14 +686,6 @@ int main( int argc, char **argv ) { ...@@ -689,14 +686,6 @@ int main( int argc, char **argv ) {
#if T_TRACER #if T_TRACER
T_Config_Init(); T_Config_Init();
#endif #endif
ret=config_check_unknown_cmdlineopt(NULL);
if (ret != 0) {
LOG_E(ENB_APP, "%i unknown options in command line\n",ret);
exit_fun("");
}
CONFIG_CLEARRTFLAG(CONFIG_NOCHECKUNKOPT);
//randominit (0); //randominit (0);
set_taus_seed (0); set_taus_seed (0);
printf("configuring for RAU/RRU\n"); printf("configuring for RAU/RRU\n");
...@@ -717,12 +706,7 @@ int main( int argc, char **argv ) { ...@@ -717,12 +706,7 @@ int main( int argc, char **argv ) {
MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX); MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX);
#endif #endif
init_opt();
if (opt_type != OPT_NONE) {
if (init_opt(in_path, in_ip) == -1)
LOG_E(OPT,"failed to run OPT \n");
}
#ifdef PDCP_USE_NETLINK #ifdef PDCP_USE_NETLINK
printf("PDCP netlink\n"); printf("PDCP netlink\n");
netlink_init(); netlink_init();
...@@ -947,13 +931,7 @@ if (nfapi_mode==2) {// VNF ...@@ -947,13 +931,7 @@ if (nfapi_mode==2) {// VNF
sync_var=0; sync_var=0;
pthread_cond_broadcast(&sync_cond); pthread_cond_broadcast(&sync_cond);
pthread_mutex_unlock(&sync_mutex); pthread_mutex_unlock(&sync_mutex);
ret=config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS); config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS);
if (ret != 0) {
LOG_E(ENB_APP, "%i unknown options in command line (invalid section name)\n",ret);
exit_fun("");
}
// wait for end of program // wait for end of program
printf("TYPE <CTRL-C> TO TERMINATE\n"); printf("TYPE <CTRL-C> TO TERMINATE\n");
//getchar(); //getchar();
...@@ -1008,9 +986,7 @@ if (nfapi_mode==2) {// VNF ...@@ -1008,9 +986,7 @@ if (nfapi_mode==2) {// VNF
} }
free_lte_top(); free_lte_top();
printf("About to call end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
end_configmodule(); end_configmodule();
printf("Called end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
pthread_cond_destroy(&sync_cond); pthread_cond_destroy(&sync_cond);
pthread_mutex_destroy(&sync_mutex); pthread_mutex_destroy(&sync_mutex);
pthread_cond_destroy(&nfapi_sync_cond); pthread_cond_destroy(&nfapi_sync_cond);
...@@ -1029,9 +1005,7 @@ if (nfapi_mode==2) {// VNF ...@@ -1029,9 +1005,7 @@ if (nfapi_mode==2) {// VNF
} }
} }
if (opt_enabled == 1) terminate_opt();
terminate_opt();
logClean(); logClean();
printf("Bye.\n"); printf("Bye.\n");
return 0; return 0;
......
This diff is collapsed.
...@@ -456,7 +456,6 @@ static void get_options(void) { ...@@ -456,7 +456,6 @@ static void get_options(void) {
CONFIG_SETRTFLAG(CONFIG_NOEXITONHELP); CONFIG_SETRTFLAG(CONFIG_NOEXITONHELP);
/* unknown parameters on command line will be checked in main /* unknown parameters on command line will be checked in main
after all init have been performed */ after all init have been performed */
CONFIG_SETRTFLAG(CONFIG_NOCHECKUNKOPT);
get_common_options(); get_common_options();
get_uethreads_params(); get_uethreads_params();
paramdef_t cmdline_uemodeparams[] =CMDLINE_UEMODEPARAMS_DESC; paramdef_t cmdline_uemodeparams[] =CMDLINE_UEMODEPARAMS_DESC;
...@@ -754,7 +753,6 @@ int main( int argc, char **argv ) { ...@@ -754,7 +753,6 @@ int main( int argc, char **argv ) {
for (int i=0; i<MAX_NUM_CCs; i++) tx_max_power[i]=23; for (int i=0; i<MAX_NUM_CCs; i++) tx_max_power[i]=23;
CONFIG_SETRTFLAG(CONFIG_NOCHECKUNKOPT);
get_options (); get_options ();
printf("Running with %d UE instances\n",NB_UE_INST); printf("Running with %d UE instances\n",NB_UE_INST);
...@@ -791,7 +789,6 @@ int main( int argc, char **argv ) { ...@@ -791,7 +789,6 @@ int main( int argc, char **argv ) {
#if T_TRACER #if T_TRACER
T_Config_Init(); T_Config_Init();
#endif #endif
CONFIG_CLEARRTFLAG(CONFIG_NOCHECKUNKOPT);
//randominit (0); //randominit (0);
set_taus_seed (0); set_taus_seed (0);
cpuf=get_cpu_freq_GHz(); cpuf=get_cpu_freq_GHz();
...@@ -808,12 +805,7 @@ int main( int argc, char **argv ) { ...@@ -808,12 +805,7 @@ int main( int argc, char **argv ) {
MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX); MSC_INIT(MSC_E_UTRAN, THREAD_MAX+TASK_MAX);
#endif #endif
init_opt();
if (opt_type != OPT_NONE) {
if (init_opt(in_path, in_ip) == -1)
LOG_E(OPT,"failed to run OPT \n");
}
#ifdef PDCP_USE_NETLINK #ifdef PDCP_USE_NETLINK
printf("PDCP netlink\n"); printf("PDCP netlink\n");
netlink_init(); netlink_init();
...@@ -1077,13 +1069,7 @@ int main( int argc, char **argv ) { ...@@ -1077,13 +1069,7 @@ int main( int argc, char **argv ) {
} }
#endif #endif
ret=config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS); config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS);
if (ret != 0) {
LOG_E(ENB_APP, "%i unknown options in command line (invalid section name)\n",ret);
exit_fun("");
}
printf("Sending sync to all threads (%p,%p,%p)\n",&sync_var,&sync_cond,&sync_mutex); printf("Sending sync to all threads (%p,%p,%p)\n",&sync_var,&sync_cond,&sync_mutex);
pthread_mutex_lock(&sync_mutex); pthread_mutex_lock(&sync_mutex);
sync_var=0; sync_var=0;
...@@ -1134,9 +1120,7 @@ int main( int argc, char **argv ) { ...@@ -1134,9 +1120,7 @@ int main( int argc, char **argv ) {
if (PHY_vars_UE_g[0][0]->rfdevice.trx_end_func) if (PHY_vars_UE_g[0][0]->rfdevice.trx_end_func)
PHY_vars_UE_g[0][0]->rfdevice.trx_end_func(&PHY_vars_UE_g[0][0]->rfdevice); PHY_vars_UE_g[0][0]->rfdevice.trx_end_func(&PHY_vars_UE_g[0][0]->rfdevice);
if (opt_enabled == 1) terminate_opt();
terminate_opt();
logClean(); logClean();
printf("Bye.\n"); printf("Bye.\n");
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment