Commit 55732deb authored by Raphael Defosseux's avatar Raphael Defosseux

Astyling the common files

Signed-off-by: default avatarRaphael Defosseux <raphael.defosseux@eurecom.fr>
parent df5fe4ff
...@@ -39,40 +39,38 @@ ...@@ -39,40 +39,38 @@
#include "config_userapi.h" #include "config_userapi.h"
int parse_stringlist(paramdef_t *cfgoptions, char *val) int parse_stringlist(paramdef_t *cfgoptions, char *val) {
{ char *atoken;
char *atoken; char *tokctx;
char *tokctx; char *tmpval=strdup(val);
char *tmpval=strdup(val); int numelt=0;
int numelt=0;
cfgoptions->numelt=0; cfgoptions->numelt=0;
atoken=strtok_r(tmpval, ",",&tokctx); atoken=strtok_r(tmpval, ",",&tokctx);
while(atoken != NULL) { while(atoken != NULL) {
numelt++ ; numelt++ ;
atoken=strtok_r(NULL, ",",&tokctx); atoken=strtok_r(NULL, ",",&tokctx);
} }
free(tmpval); free(tmpval);
config_check_valptr(cfgoptions,(char **)&(cfgoptions->strlistptr), sizeof(char *) * numelt); config_check_valptr(cfgoptions,(char **)&(cfgoptions->strlistptr), sizeof(char *) * numelt);
cfgoptions->numelt=numelt; cfgoptions->numelt=numelt;
atoken=strtok_r(val, ",",&tokctx); atoken=strtok_r(val, ",",&tokctx);
for( int i=0; i<cfgoptions->numelt && atoken != NULL ; i++) { for( int i=0; i<cfgoptions->numelt && atoken != NULL ; i++) {
config_check_valptr(cfgoptions,&(cfgoptions->strlistptr[i]),strlen(atoken)+1); config_check_valptr(cfgoptions,&(cfgoptions->strlistptr[i]),strlen(atoken)+1);
sprintf(cfgoptions->strlistptr[i],"%s",atoken); sprintf(cfgoptions->strlistptr[i],"%s",atoken);
printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]); printf_params("[LIBCONFIG] %s[%i]: %s\n", cfgoptions->optname,i,cfgoptions->strlistptr[i]);
atoken=strtok_r(NULL, ",",&tokctx); atoken=strtok_r(NULL, ",",&tokctx);
} }
return (cfgoptions->numelt > 0); return (cfgoptions->numelt > 0);
} }
int processoption(paramdef_t *cfgoptions, char *value) int processoption(paramdef_t *cfgoptions, char *value) {
{ char *tmpval = value;
char *tmpval = value; int optisset=0;
int optisset=0; char defbool[2]="1";
char defbool[2]="1";
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 */
...@@ -82,8 +80,8 @@ char defbool[2]="1"; ...@@ -82,8 +80,8 @@ char defbool[2]="1";
tmpval = defbool; tmpval = defbool;
} }
} }
switch(cfgoptions->type)
{ switch(cfgoptions->type) {
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);
...@@ -91,6 +89,7 @@ char defbool[2]="1"; ...@@ -91,6 +89,7 @@ char defbool[2]="1";
} else { } else {
sprintf( (char *)(cfgoptions->strptr), "%s",tmpval); sprintf( (char *)(cfgoptions->strptr), "%s",tmpval);
} }
printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, tmpval); printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, tmpval);
optisset=1; optisset=1;
break; break;
...@@ -98,6 +97,7 @@ char defbool[2]="1"; ...@@ -98,6 +97,7 @@ char defbool[2]="1";
case TYPE_STRINGLIST: case TYPE_STRINGLIST:
optisset=parse_stringlist(cfgoptions,tmpval); optisset=parse_stringlist(cfgoptions,tmpval);
break; break;
case TYPE_UINT32: case TYPE_UINT32:
case TYPE_INT32: case TYPE_INT32:
case TYPE_UINT16: case TYPE_UINT16:
...@@ -108,6 +108,7 @@ char defbool[2]="1"; ...@@ -108,6 +108,7 @@ char defbool[2]="1";
config_assign_int(cfgoptions,cfgoptions->optname,(int32_t)strtol(tmpval,NULL,0)); config_assign_int(cfgoptions,cfgoptions->optname,(int32_t)strtol(tmpval,NULL,0));
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));
...@@ -115,10 +116,11 @@ char defbool[2]="1"; ...@@ -115,10 +116,11 @@ char defbool[2]="1";
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;
case TYPE_UINTARRAY: case TYPE_UINTARRAY:
case TYPE_INTARRAY: case TYPE_INTARRAY:
break; break;
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,NULL);
...@@ -127,24 +129,24 @@ char defbool[2]="1"; ...@@ -127,24 +129,24 @@ char defbool[2]="1";
break; break;
case TYPE_IPV4ADDR: case TYPE_IPV4ADDR:
break; break;
default: default:
fprintf(stderr,"[CONFIG] command line, %s type %i not supported\n",cfgoptions->optname, cfgoptions->type); fprintf(stderr,"[CONFIG] command line, %s type %i not supported\n",cfgoptions->optname, cfgoptions->type);
break; break;
} /* switch on param type */ } /* switch on param type */
if (optisset == 1) { if (optisset == 1) {
cfgoptions->paramflags = cfgoptions->paramflags | PARAMFLAG_PARAMSET; cfgoptions->paramflags = cfgoptions->paramflags | PARAMFLAG_PARAMSET;
} }
return optisset; return optisset;
} }
int config_check_cmdlineopt(char *prefix) int config_check_cmdlineopt(char *prefix) {
{ int unknowndetected=0;
int unknowndetected=0; char testprefix[CONFIG_MAXOPTLENGTH]="";
char testprefix[CONFIG_MAXOPTLENGTH]=""; int finalcheck = 0;
int finalcheck = 0;
if (prefix != NULL) { if (prefix != NULL) {
if (strcmp(prefix,CONFIG_CHECKALLSECTIONS) == 0) if (strcmp(prefix,CONFIG_CHECKALLSECTIONS) == 0)
...@@ -156,8 +158,11 @@ int finalcheck = 0; ...@@ -156,8 +158,11 @@ int finalcheck = 0;
for (int i=1; i<config_get_if()->argc ; i++) { for (int i=1; i<config_get_if()->argc ; i++) {
if ( !finalcheck && strstr(config_get_if()->argv[i],testprefix) == NULL ) continue; if ( !finalcheck && strstr(config_get_if()->argv[i],testprefix) == NULL ) continue;
if ( !finalcheck && testprefix[0]==0 && index(config_get_if()->argv[i],'.') != NULL) continue; if ( !finalcheck && testprefix[0]==0 && index(config_get_if()->argv[i],'.') != NULL) continue;
if ( !finalcheck && config_get_if()->argv[i][0] == '-' && isdigit(config_get_if()->argv[i][1])) continue; if ( !finalcheck && config_get_if()->argv[i][0] == '-' && isdigit(config_get_if()->argv[i][1])) continue;
if ( (config_get_if()->argv_info[i] & CONFIG_CMDLINEOPT_PROCESSED) == 0 ) { if ( (config_get_if()->argv_info[i] & CONFIG_CMDLINEOPT_PROCESSED) == 0 ) {
fprintf(stderr,"[CONFIG] unknown option: %s\n", fprintf(stderr,"[CONFIG] unknown option: %s\n",
config_get_if()->argv[i] ); config_get_if()->argv[i] );
...@@ -165,39 +170,42 @@ int finalcheck = 0; ...@@ -165,39 +170,42 @@ int finalcheck = 0;
} }
} }
printf_cmdl("[CONFIG] %i unknown option(s) in command line starting with %s (section %s)\n", printf_cmdl("[CONFIG] %i unknown option(s) in command line starting with %s (section %s)\n",
unknowndetected,testprefix,((prefix==NULL)?"":prefix)); unknowndetected,testprefix,((prefix==NULL)?"":prefix));
return unknowndetected; return unknowndetected;
} /* parse_cmdline*/ } /* parse_cmdline*/
int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) {
{
int c = config_get_if()->argc; int c = config_get_if()->argc;
int i,j; int i,j;
char *pp; char *pp;
char cfgpath[CONFIG_MAXOPTLENGTH]; char cfgpath[CONFIG_MAXOPTLENGTH];
j = 0; j = 0;
i = 0; i = 0;
while (c > 0 ) { while (c > 0 ) {
char *oneargv = strdup(config_get_if()->argv[i]); /* we use strtok_r which modifies its string paramater, and we don't want argv to be modified */ char *oneargv = strdup(config_get_if()->argv[i]); /* we use strtok_r which modifies its string paramater, and we don't want argv to be modified */
/* first check help options, either --help, -h or --help_<section> */ /* first check help options, either --help, -h or --help_<section> */
if (strncmp(oneargv, "-h",2) == 0 || strncmp(oneargv, "--help",6) == 0 ) { if (strncmp(oneargv, "-h",2) == 0 || strncmp(oneargv, "--help",6) == 0 ) {
char *tokctx; char *tokctx;
pp=strtok_r(oneargv, "_",&tokctx); pp=strtok_r(oneargv, "_",&tokctx);
config_get_if()->argv_info[i] |= CONFIG_CMDLINEOPT_PROCESSED; config_get_if()->argv_info[i] |= CONFIG_CMDLINEOPT_PROCESSED;
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);
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");
} }
} else { } else {
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); printf ("Help for %s section:\n",prefix);
config_printhelp(cfgoptions,numoptions); 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);
exit_fun(" Exiting after displaying help\n"); exit_fun(" Exiting after displaying help\n");
...@@ -208,24 +216,29 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) ...@@ -208,24 +216,29 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix)
/* now, check for non help options */ /* now, check for non help options */
if (oneargv[0] == '-') { if (oneargv[0] == '-') {
for(int n=0;n<numoptions;n++) { for(int n=0; n<numoptions; n++) {
if ( ( cfgoptions[n].paramflags & PARAMFLAG_DISABLECMDLINE) != 0) { if ( ( cfgoptions[n].paramflags & PARAMFLAG_DISABLECMDLINE) != 0) {
continue; continue;
} }
if (prefix != NULL) { if (prefix != NULL) {
sprintf(cfgpath,"%s.%s",prefix,cfgoptions[n].optname); sprintf(cfgpath,"%s.%s",prefix,cfgoptions[n].optname);
} else { } else {
sprintf(cfgpath,"%s",cfgoptions[n].optname); sprintf(cfgpath,"%s",cfgoptions[n].optname);
} }
if ( ((strlen(oneargv) == 2) && (strcmp(oneargv + 1,cfgpath) == 0)) || /* short option, one "-" */ if ( ((strlen(oneargv) == 2) && (strcmp(oneargv + 1,cfgpath) == 0)) || /* short option, one "-" */
((strlen(oneargv) > 2) && (strcmp(oneargv + 2,cfgpath ) == 0 )) ) { ((strlen(oneargv) > 2) && (strcmp(oneargv + 2,cfgpath ) == 0 )) ) {
char *valptr=NULL; char *valptr=NULL;
int ret; int ret;
config_get_if()->argv_info[i] |= CONFIG_CMDLINEOPT_PROCESSED; config_get_if()->argv_info[i] |= CONFIG_CMDLINEOPT_PROCESSED;
if (c > 0) { if (c > 0) {
pp = config_get_if()->argv[i+1]; pp = config_get_if()->argv[i+1];
if (pp != NULL ) { if (pp != NULL ) {
ret = strlen(pp); ret = strlen(pp);
if (ret > 0 ) { if (ret > 0 ) {
if (pp[0] != '-') if (pp[0] != '-')
valptr=pp; valptr=pp;
...@@ -234,28 +247,36 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) ...@@ -234,28 +247,36 @@ int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix)
} }
} }
} }
j += processoption(&(cfgoptions[n]), valptr); j += processoption(&(cfgoptions[n]), valptr);
if ( valptr != NULL ) { if ( valptr != NULL ) {
i++; i++;
config_get_if()->argv_info[i] |= CONFIG_CMDLINEOPT_PROCESSED; config_get_if()->argv_info[i] |= CONFIG_CMDLINEOPT_PROCESSED;
c--; c--;
} }
break; break;
} }
} /* for n... */ } /* for n... */
} /* if (oneargv[0] == '-') */ } /* if (oneargv[0] == '-') */
free(oneargv); free(oneargv);
i++; i++;
c--; c--;
} /* 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 )) ) { if ( !(CONFIG_ISFLAGSET( CONFIG_NOCHECKUNKOPT )) ) {
i=config_check_cmdlineopt(prefix); i=config_check_cmdlineopt(prefix);
if (i > 0) { if (i > 0) {
fprintf(stderr,"[CONFIG] %i unknown options for section %s detected in command line\n", fprintf(stderr,"[CONFIG] %i unknown options for section %s detected in command line\n",
i,((prefix==NULL)?"\"root section\"":prefix)); i,((prefix==NULL)?"\"root section\"":prefix));
exit_fun(" Exiting after detecting errors in command line \n"); exit_fun(" Exiting after detecting errors in command line \n");
} }
} }
return j; return j;
} /* parse_cmdline*/ } /* parse_cmdline*/
...@@ -42,17 +42,15 @@ ...@@ -42,17 +42,15 @@
#include "config_userapi.h" #include "config_userapi.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]; char libname[FILENAME_MAX];
char libname[FILENAME_MAX]; int st;
int st;
st=0; st=0;
sprintf(libname,CONFIG_SHAREDLIBFORMAT,cfgptr->cfgmode); sprintf(libname,CONFIG_SHAREDLIBFORMAT,cfgptr->cfgmode);
lib_handle = dlopen(libname,RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE); lib_handle = dlopen(libname,RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE);
if (!lib_handle) { if (!lib_handle) {
fprintf(stderr,"[CONFIG] %s %d Error calling dlopen(%s): %s\n",__FILE__, __LINE__, libname,dlerror()); fprintf(stderr,"[CONFIG] %s %d Error calling dlopen(%s): %s\n",__FILE__, __LINE__, libname,dlerror());
st = -1; st = -1;
...@@ -71,6 +69,7 @@ int st; ...@@ -71,6 +69,7 @@ int st;
sprintf (fname,"config_%s_get",cfgptr->cfgmode); sprintf (fname,"config_%s_get",cfgptr->cfgmode);
cfgptr->get = dlsym(lib_handle,fname); cfgptr->get = dlsym(lib_handle,fname);
if (cfgptr->get == NULL ) { if (cfgptr->get == NULL ) {
printf("[CONFIG] %s %d no function %s for config mode %s\n", printf("[CONFIG] %s %d no function %s for config mode %s\n",
__FILE__, __LINE__,fname, cfgptr->cfgmode); __FILE__, __LINE__,fname, cfgptr->cfgmode);
...@@ -79,6 +78,7 @@ int st; ...@@ -79,6 +78,7 @@ int st;
sprintf (fname,"config_%s_getlist",cfgptr->cfgmode); sprintf (fname,"config_%s_getlist",cfgptr->cfgmode);
cfgptr->getlist = dlsym(lib_handle,fname); cfgptr->getlist = dlsym(lib_handle,fname);
if (cfgptr->getlist == NULL ) { if (cfgptr->getlist == NULL ) {
printf("[CONFIG] %s %d no function %s for config mode %s\n", printf("[CONFIG] %s %d no function %s for config mode %s\n",
__FILE__, __LINE__,fname, cfgptr->cfgmode); __FILE__, __LINE__,fname, cfgptr->cfgmode);
...@@ -87,6 +87,7 @@ int st; ...@@ -87,6 +87,7 @@ int st;
sprintf (fname,"config_%s_end",cfgptr->cfgmode); sprintf (fname,"config_%s_end",cfgptr->cfgmode);
cfgptr->end = dlsym(lib_handle,fname); cfgptr->end = dlsym(lib_handle,fname);
if (cfgptr->getlist == NULL ) { if (cfgptr->getlist == NULL ) {
printf("[CONFIG] %s %d no function %s for config mode %s\n", printf("[CONFIG] %s %d no function %s for config mode %s\n",
__FILE__, __LINE__,fname, cfgptr->cfgmode); __FILE__, __LINE__,fname, cfgptr->cfgmode);
...@@ -102,29 +103,29 @@ int nooptfunc(void) { ...@@ -102,29 +103,29 @@ int nooptfunc(void) {
}; };
int config_cmdlineonly_getlist(paramlist_def_t *ParamList, int config_cmdlineonly_getlist(paramlist_def_t *ParamList,
paramdef_t *params, int numparams, char *prefix) paramdef_t *params, int numparams, char *prefix) {
{
ParamList->numelt = 0; ParamList->numelt = 0;
return 0; return 0;
} }
int config_cmdlineonly_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) int config_cmdlineonly_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) {
{
int defval; int defval;
int fatalerror=0; int fatalerror=0;
int numdefvals=0; int numdefvals=0;
for(int i=0; i<numoptions; i++) {
for(int i=0;i<numoptions;i++) {
defval=0; defval=0;
switch(cfgoptions[i].type) { switch(cfgoptions[i].type) {
case TYPE_STRING: case TYPE_STRING:
defval=config_setdefault_string(&(cfgoptions[i]), prefix); defval=config_setdefault_string(&(cfgoptions[i]), prefix);
break; break;
case TYPE_STRINGLIST: case TYPE_STRINGLIST:
defval=config_setdefault_stringlist(&(cfgoptions[i]), prefix); defval=config_setdefault_stringlist(&(cfgoptions[i]), prefix);
break; break;
case TYPE_UINT8: case TYPE_UINT8:
case TYPE_INT8: case TYPE_INT8:
case TYPE_UINT16: case TYPE_UINT16:
...@@ -134,94 +135,106 @@ int config_cmdlineonly_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) ...@@ -134,94 +135,106 @@ int config_cmdlineonly_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
case TYPE_MASK: case TYPE_MASK:
defval=config_setdefault_int(&(cfgoptions[i]), prefix); defval=config_setdefault_int(&(cfgoptions[i]), prefix);
break; break;
case TYPE_UINT64: case TYPE_UINT64:
case TYPE_INT64: case TYPE_INT64:
defval=config_setdefault_int64(&(cfgoptions[i]), prefix); defval=config_setdefault_int64(&(cfgoptions[i]), prefix);
break; break;
case TYPE_UINTARRAY: case TYPE_UINTARRAY:
case TYPE_INTARRAY: case TYPE_INTARRAY:
defval=config_setdefault_intlist(&(cfgoptions[i]), prefix); defval=config_setdefault_intlist(&(cfgoptions[i]), prefix);
break; break;
case TYPE_DOUBLE: case TYPE_DOUBLE:
defval=config_setdefault_double(&(cfgoptions[i]), prefix); defval=config_setdefault_double(&(cfgoptions[i]), prefix);
break; break;
case TYPE_IPV4ADDR: case TYPE_IPV4ADDR:
defval=config_setdefault_ipv4addr(&(cfgoptions[i]), prefix); defval=config_setdefault_ipv4addr(&(cfgoptions[i]), prefix);
break; break;
default: default:
fprintf(stderr,"[CONFIG] %s.%s type %i not supported\n",prefix, cfgoptions[i].optname,cfgoptions[i].type); fprintf(stderr,"[CONFIG] %s.%s type %i not supported\n",prefix, cfgoptions[i].optname,cfgoptions[i].type);
fatalerror=1; fatalerror=1;
break; break;
} /* switch on param type */ } /* switch on param type */
if (defval == 1) { if (defval == 1) {
numdefvals++; numdefvals++;
cfgoptions[i].paramflags = cfgoptions[i].paramflags | PARAMFLAG_PARAMSETDEF; cfgoptions[i].paramflags = cfgoptions[i].paramflags | PARAMFLAG_PARAMSETDEF;
} }
} /* for loop on options */ } /* for loop on options */
printf("[CONFIG] %s: %i/%i parameters successfully set \n", printf("[CONFIG] %s: %i/%i parameters successfully set \n",
((prefix == NULL)?"(root)":prefix), ((prefix == NULL)?"(root)":prefix),
numdefvals,numoptions ); numdefvals,numoptions );
if (fatalerror == 1) { if (fatalerror == 1) {
fprintf(stderr,"[CONFIG] fatal errors found when assigning %s parameters \n", fprintf(stderr,"[CONFIG] fatal errors found when assigning %s parameters \n",
prefix); prefix);
} }
return numdefvals; return numdefvals;
} }
configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t initflags) configmodule_interface_t *load_configmodule(int argc, char **argv, uint32_t initflags) {
{ char *cfgparam=NULL;
char *cfgparam=NULL; char *modeparams=NULL;
char *modeparams=NULL; char *cfgmode=NULL;
char *cfgmode=NULL; char *strtokctx=NULL;
char *strtokctx=NULL; char *atoken;
char *atoken; uint32_t tmpflags=0;
uint32_t tmpflags=0; int i;
int i; int OoptIdx=-1;
int OoptIdx=-1;
/* first parse the command line to look for the -O option */
/* first parse the command line to look for the -O option */ for (i = 0; i<argc; i++) {
for (i = 0;i<argc;i++) {
if (strlen(argv[i]) < 2) continue; if (strlen(argv[i]) < 2) continue;
if ( argv[i][1] == 'O' && i < (argc -1)) { if ( argv[i][1] == 'O' && i < (argc -1)) {
cfgparam = argv[i+1]; cfgparam = argv[i+1];
OoptIdx=i; OoptIdx=i;
} }
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));
exit(0); exit(0);
} }
if ( (strcmp(argv[i]+1, "h") == 0) || (strstr(argv[i]+1, "help_") != NULL ) ) { if ( (strcmp(argv[i]+1, "h") == 0) || (strstr(argv[i]+1, "help_") != NULL ) ) {
tmpflags = CONFIG_HELP; tmpflags = CONFIG_HELP;
} }
} }
/* look for the OAI_CONFIGMODULE environement variable */ /* look for the OAI_CONFIGMODULE environement variable */
if ( cfgparam == NULL ) { if ( cfgparam == NULL ) {
cfgparam = getenv("OAI_CONFIGMODULE"); cfgparam = getenv("OAI_CONFIGMODULE");
} }
/* default different for UE and softmodem because UE doesn't use config file*/ /* default different for UE and softmodem because UE doesn't use config file*/
/* and -O option is not mandatory for UE */ /* and -O option is not mandatory for UE */
/* phy simulators behave as UE */ /* phy simulators behave as UE */
/* test of exec name would better be replaced by a parameter to the l */ /* test of exec name would better be replaced by a parameter to the l */
/* oad_configmodule function */ /* oad_configmodule function */
if (cfgparam == NULL) { if (cfgparam == NULL) {
tmpflags = tmpflags | CONFIG_NOOOPT; tmpflags = tmpflags | CONFIG_NOOOPT;
if ( initflags & CONFIG_ENABLECMDLINEONLY) { if ( initflags & CONFIG_ENABLECMDLINEONLY) {
cfgparam = CONFIG_CMDLINEONLY ":dbgl0" ; cfgparam = CONFIG_CMDLINEONLY ":dbgl0" ;
} else { } else {
cfgparam = CONFIG_CMDLINEONLY ":dbgl0" ;cfgparam = CONFIG_LIBCONFIGFILE ":" DEFAULT_CFGFILENAME; cfgparam = CONFIG_CMDLINEONLY ":dbgl0" ;
cfgparam = CONFIG_LIBCONFIGFILE ":" DEFAULT_CFGFILENAME;
} }
} }
/* parse the config parameters to set the config source */ /* parse the config parameters to set the config source */
i = sscanf(cfgparam,"%m[^':']:%ms",&cfgmode,&modeparams); i = sscanf(cfgparam,"%m[^':']:%ms",&cfgmode,&modeparams);
if (i< 0) { if (i< 0) {
fprintf(stderr,"[CONFIG] %s, %d, sscanf error parsing config source %s: %s\n", __FILE__, __LINE__,cfgparam, strerror(errno)); fprintf(stderr,"[CONFIG] %s, %d, sscanf error parsing config source %s: %s\n", __FILE__, __LINE__,cfgparam, strerror(errno));
exit(-1) ; exit(-1) ;
} } else if ( i == 1 ) {
else if ( i == 1 ) {
/* -O argument doesn't contain ":" separator, assume -O <conf file> option, default cfgmode to libconfig /* -O argument doesn't contain ":" separator, assume -O <conf file> option, default cfgmode to libconfig
with one parameter, the path to the configuration file cfgmode must not be NULL */ with one parameter, the path to the configuration file cfgmode must not be NULL */
modeparams=cfgmode; modeparams=cfgmode;
...@@ -231,6 +244,7 @@ int OoptIdx=-1; ...@@ -231,6 +244,7 @@ int OoptIdx=-1;
cfgptr = calloc(sizeof(configmodule_interface_t),1); cfgptr = calloc(sizeof(configmodule_interface_t),1);
cfgptr->argv_info = calloc(sizeof(int32_t), argc); cfgptr->argv_info = calloc(sizeof(int32_t), argc);
cfgptr->argv_info[0] |= CONFIG_CMDLINEOPT_PROCESSED; cfgptr->argv_info[0] |= CONFIG_CMDLINEOPT_PROCESSED;
if (OoptIdx >= 0) { if (OoptIdx >= 0) {
cfgptr->argv_info[OoptIdx] |= CONFIG_CMDLINEOPT_PROCESSED; cfgptr->argv_info[OoptIdx] |= CONFIG_CMDLINEOPT_PROCESSED;
cfgptr->argv_info[OoptIdx+1] |= CONFIG_CMDLINEOPT_PROCESSED; cfgptr->argv_info[OoptIdx+1] |= CONFIG_CMDLINEOPT_PROCESSED;
...@@ -242,30 +256,34 @@ int OoptIdx=-1; ...@@ -242,30 +256,34 @@ int OoptIdx=-1;
cfgptr->cfgmode=strdup(cfgmode); cfgptr->cfgmode=strdup(cfgmode);
cfgptr->num_cfgP=0; cfgptr->num_cfgP=0;
atoken=strtok_r(modeparams,":",&strtokctx); atoken=strtok_r(modeparams,":",&strtokctx);
while ( cfgptr->num_cfgP< CONFIG_MAX_OOPT_PARAMS && atoken != NULL) { while ( cfgptr->num_cfgP< CONFIG_MAX_OOPT_PARAMS && atoken != NULL) {
/* look for debug level in the config parameters, it is commom to all config mode /* look for debug level in the config parameters, it is commom to all config mode
and will be removed frome the parameter array passed to the shared module */ and will be removed frome the parameter array passed to the shared module */
char *aptr; char *aptr;
aptr=strcasestr(atoken,"dbgl"); aptr=strcasestr(atoken,"dbgl");
if (aptr != NULL) { if (aptr != NULL) {
cfgptr->rtflags = cfgptr->rtflags | strtol(aptr+4,NULL,0); cfgptr->rtflags = cfgptr->rtflags | strtol(aptr+4,NULL,0);
} else { } else {
cfgptr->cfgP[cfgptr->num_cfgP] = strdup(atoken); cfgptr->cfgP[cfgptr->num_cfgP] = strdup(atoken);
cfgptr->num_cfgP++; cfgptr->num_cfgP++;
} }
atoken = strtok_r(NULL,":",&strtokctx); atoken = strtok_r(NULL,":",&strtokctx);
} }
printf("[CONFIG] get parameters from %s ",cfgmode); printf("[CONFIG] get parameters from %s ",cfgmode);
for (i=0;i<cfgptr->num_cfgP; i++) {
for (i=0; i<cfgptr->num_cfgP; i++) {
printf("%s ",cfgptr->cfgP[i]); printf("%s ",cfgptr->cfgP[i]);
} }
printf(", debug flags: 0x%08x\n",cfgptr->rtflags); printf(", debug flags: 0x%08x\n",cfgptr->rtflags);
if (strstr(cfgparam,CONFIG_CMDLINEONLY) == NULL) { if (strstr(cfgparam,CONFIG_CMDLINEONLY) == NULL) {
i=load_config_sharedlib(cfgptr); i=load_config_sharedlib(cfgptr);
if (i == 0) { if (i == 0) {
printf("[CONFIG] config module %s loaded\n",cfgmode); printf("[CONFIG] config module %s loaded\n",cfgmode);
Config_Params[CONFIGPARAM_DEBUGFLAGS_IDX].uptr=&(cfgptr->rtflags); Config_Params[CONFIGPARAM_DEBUGFLAGS_IDX].uptr=&(cfgptr->rtflags);
...@@ -281,22 +299,22 @@ int OoptIdx=-1; ...@@ -281,22 +299,22 @@ int OoptIdx=-1;
cfgptr->end = (configmodule_endfunc_t)nooptfunc; cfgptr->end = (configmodule_endfunc_t)nooptfunc;
} }
if (modeparams != NULL) free(modeparams); if (modeparams != NULL) free(modeparams);
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));
// exit(-1); // exit(-1);
} }
return cfgptr; return cfgptr;
} }
/* free memory allocated when reading parameters */ /* free memory allocated when reading parameters */
/* config module could be initialized again after this call */ /* config module could be initialized again after this call */
void end_configmodule(void) void end_configmodule(void) {
{
if (cfgptr != NULL) { if (cfgptr != NULL) {
if (cfgptr->end != NULL) { if (cfgptr->end != NULL) {
printf ("[CONFIG] calling config module end function...\n"); printf ("[CONFIG] calling config module end function...\n");
...@@ -304,29 +322,32 @@ void end_configmodule(void) ...@@ -304,29 +322,32 @@ void end_configmodule(void)
} }
printf ("[CONFIG] free %u config value pointers\n",cfgptr->numptrs); printf ("[CONFIG] free %u config value pointers\n",cfgptr->numptrs);
for(int i=0; i<cfgptr->numptrs ; i++) { for(int i=0; i<cfgptr->numptrs ; i++) {
if (cfgptr->ptrs[i] != NULL) { if (cfgptr->ptrs[i] != NULL) {
free(cfgptr->ptrs[i]); free(cfgptr->ptrs[i]);
cfgptr->ptrs[i]=NULL; cfgptr->ptrs[i]=NULL;
} }
} }
cfgptr->numptrs=0; cfgptr->numptrs=0;
} }
} }
/* free all memory used by config module */ /* free all memory used by config module */
/* should be called only at program exit */ /* should be called only at program exit */
void free_configmodule(void) void free_configmodule(void) {
{
if (cfgptr != NULL) { if (cfgptr != NULL) {
end_configmodule(); end_configmodule();
if( cfgptr->cfgmode != NULL) free(cfgptr->cfgmode); if( cfgptr->cfgmode != NULL) free(cfgptr->cfgmode);
printf ("[CONFIG] free %u config parameter pointers\n",cfgptr->num_cfgP); printf ("[CONFIG] free %u config parameter pointers\n",cfgptr->num_cfgP);
for (int i=0; i<cfgptr->num_cfgP; i++) { for (int i=0; i<cfgptr->num_cfgP; i++) {
if ( cfgptr->cfgP[i] != NULL) free(cfgptr->cfgP[i]); if ( cfgptr->cfgP[i] != NULL) free(cfgptr->cfgP[i]);
} }
free(cfgptr); free(cfgptr);
cfgptr=NULL; cfgptr=NULL;
} }
......
...@@ -61,8 +61,7 @@ typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP); ...@@ -61,8 +61,7 @@ typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP);
typedef int(*configmodule_getfunc_t)(paramdef_t *,int numparams, char *prefix); typedef int(*configmodule_getfunc_t)(paramdef_t *,int numparams, char *prefix);
typedef int(*configmodule_getlistfunc_t)(paramlist_def_t *, paramdef_t *,int numparams, char *prefix); typedef int(*configmodule_getlistfunc_t)(paramlist_def_t *, paramdef_t *,int numparams, char *prefix);
typedef void(*configmodule_endfunc_t)(void); typedef void(*configmodule_endfunc_t)(void);
typedef struct configmodule_interface typedef struct configmodule_interface {
{
int argc; int argc;
char **argv; char **argv;
uint32_t *argv_info; uint32_t *argv_info;
...@@ -91,11 +90,11 @@ static char config_helpstr [] = "\n lte-softmodem -O [config mode]<:dbgl[debugfl ...@@ -91,11 +90,11 @@ static char config_helpstr [] = "\n lte-softmodem -O [config mode]<:dbgl[debugfl
static paramdef_t Config_Params[] = { static paramdef_t Config_Params[] = {
/*-----------------------------------------------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------------------------------------------*/
/* config parameters for config module */ /* config parameters for config module */
/* optname helpstr paramflags XXXptr defXXXval type numelt */ /* optname helpstr paramflags XXXptr defXXXval type numelt */
/*-----------------------------------------------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------------------------------------------*/
{"debugflags", config_helpstr, 0, uptr:NULL, defintval:0, TYPE_MASK, 0}, {"debugflags", config_helpstr, 0, uptr:NULL, defintval:0, TYPE_MASK, 0},
}; };
#else #else
......
...@@ -99,8 +99,7 @@ typedef union checkedparam { ...@@ -99,8 +99,7 @@ typedef union checkedparam {
/* paramdef is used to describe a parameter, array of paramdef_t strustures is used as the main parameter in */ /* paramdef is used to describe a parameter, array of paramdef_t strustures is used as the main parameter in */
/* config apis used to retrieve parameters values */ /* config apis used to retrieve parameters values */
typedef struct paramdef typedef struct paramdef {
{
char optname[MAX_OPTNAME_SIZE]; /* parameter name, can be used as long command line option */ char optname[MAX_OPTNAME_SIZE]; /* parameter name, can be used as long command line option */
char *helpstr; /* help string */ char *helpstr; /* help string */
unsigned int paramflags; /* value is a "ored" combination of above PARAMFLAG_XXXX values */ unsigned int paramflags; /* value is a "ored" combination of above PARAMFLAG_XXXX values */
......
This diff is collapsed.
...@@ -48,7 +48,7 @@ extern "C" ...@@ -48,7 +48,7 @@ extern "C"
#define CONFIG_ISPARAMFLAGSET(P,F) ( !!(P.paramflags & F)) #define CONFIG_ISPARAMFLAGSET(P,F) ( !!(P.paramflags & F))
/* 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);
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);
......
This diff is collapsed.
...@@ -45,11 +45,11 @@ ...@@ -45,11 +45,11 @@
#include <time.h> #include <time.h>
#include <stdint.h> #include <stdint.h>
#ifndef __STDC_FORMAT_MACROS #ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS
#endif #endif
#include <inttypes.h> #include <inttypes.h>
#ifndef _GNU_SOURCE #ifndef _GNU_SOURCE
#define _GNU_SOURCE #define _GNU_SOURCE
#endif #endif
#include <pthread.h> #include <pthread.h>
#include "T.h" #include "T.h"
...@@ -164,7 +164,7 @@ extern "C" { ...@@ -164,7 +164,7 @@ extern "C" {
{"NAS", DEBUG_NAS},\ {"NAS", DEBUG_NAS},\
{"UE_TIMING", UE_TIMING},\ {"UE_TIMING", UE_TIMING},\
{NULL,-1}\ {NULL,-1}\
} }
...@@ -250,7 +250,7 @@ typedef struct { ...@@ -250,7 +250,7 @@ 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 flag; int flag;
char* filelog_name; char *filelog_name;
uint64_t debug_mask; uint64_t debug_mask;
uint64_t dump_mask; uint64_t dump_mask;
} log_t; } log_t;
...@@ -271,9 +271,9 @@ void log_set_instance_type (log_instance_type_t instance); ...@@ -271,9 +271,9 @@ void log_set_instance_type (log_instance_type_t instance);
log_t *g_log; log_t *g_log;
#else #else
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
extern log_t *g_log; extern log_t *g_log;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
...@@ -284,7 +284,7 @@ extern log_t *g_log; ...@@ -284,7 +284,7 @@ extern log_t *g_log;
int logInit (void); int logInit (void);
int isLogInitDone (void); int isLogInitDone (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, ... ); void log_dump(int component, void *buffer, int buffsize,int datatype, const char *format, ... );
int set_log(int component, int level); int set_log(int component, int level);
void set_glog(int level); void set_glog(int level);
...@@ -339,10 +339,10 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int ...@@ -339,10 +339,10 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
/* optname help paramflags XXXptr defXXXval type numelt */ /* optname help paramflags XXXptr defXXXval type numelt */
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
#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:&(consolelog), 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} \
} }
#define LOG_OPTIONS_IDX 2 #define LOG_OPTIONS_IDX 2
/*----------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------*/
...@@ -355,22 +355,22 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int ...@@ -355,22 +355,22 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
// debugging macros // 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 */ #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_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_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_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)
/* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */ /* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */ # define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
# 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_DEBUGFLAG(D) (g_log->debug_mask & D) # define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
/* bitmask dependant macros, to generate debug file such as matlab file or message dump */ /* bitmask dependant macros, to generate debug file such as matlab file or message dump */
# define LOG_DUMPFLAG(D) (g_log->dump_mask & D) # define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
# define LOG_M(file, vector, data, len, dec, format) do { 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
# else /* T_TRACER: remove all debugging and tracing messages, except errors */ # else /* T_TRACER: remove all debugging and tracing messages, except errors */
# define LOG_I(c, x...) /* */ # define LOG_I(c, x...) /* */
...@@ -420,7 +420,7 @@ static __inline__ uint64_t rdtsc(void) { ...@@ -420,7 +420,7 @@ static __inline__ uint64_t rdtsc(void) {
extern double cpuf; extern double cpuf;
static inline uint64_t checkTCPU(int timeout, char * file, int line) { static inline uint64_t checkTCPU(int timeout, char *file, int line) {
static uint64_t __thread lastCPUTime=0; static uint64_t __thread lastCPUTime=0;
static uint64_t __thread last=0; static uint64_t __thread last=0;
uint64_t cur=rdtsc(); uint64_t cur=rdtsc();
...@@ -429,25 +429,29 @@ static inline uint64_t checkTCPU(int timeout, char * file, int line) { ...@@ -429,25 +429,29 @@ static inline uint64_t checkTCPU(int timeout, char * file, int line) {
uint64_t CPUTime=CPUt.tv_sec*1000*1000+CPUt.tv_nsec/1000; uint64_t CPUTime=CPUt.tv_sec*1000*1000+CPUt.tv_nsec/1000;
double microCycles=(double)(cpuf*1000); double microCycles=(double)(cpuf*1000);
int duration=(int)((cur-last)/microCycles); int duration=(int)((cur-last)/microCycles);
if ( last!=0 && duration > timeout ) { if ( last!=0 && duration > timeout ) {
//struct timespec ts; //struct timespec ts;
//clock_gettime(CLOCK_MONOTONIC, &ts); //clock_gettime(CLOCK_MONOTONIC, &ts);
printf("%s:%d lte-ue delay %d (exceed %d), CPU for this period: %lld\n", file, line, printf("%s:%d lte-ue delay %d (exceed %d), CPU for this period: %lld\n", file, line,
duration, timeout, (long long)CPUTime-lastCPUTime ); duration, timeout, (long long)CPUTime-lastCPUTime );
} }
last=cur; last=cur;
lastCPUTime=CPUTime; lastCPUTime=CPUTime;
return cur; return cur;
} }
static inline unsigned long long checkT(int timeout, char * file, int line) { static inline unsigned long long checkT(int timeout, char *file, int line) {
static unsigned long long __thread last=0; static unsigned long long __thread last=0;
unsigned long long cur=rdtsc(); unsigned long long cur=rdtsc();
int microCycles=(int)(cpuf*1000); int microCycles=(int)(cpuf*1000);
int duration=(int)((cur-last)/microCycles); int duration=(int)((cur-last)/microCycles);
if ( last!=0 && duration > timeout ) if ( last!=0 && duration > timeout )
printf("%s:%d lte-ue delay %d (exceed %d)\n", file, line, printf("%s:%d lte-ue delay %d (exceed %d)\n", file, line,
duration, timeout); duration, timeout);
last=cur; last=cur;
return cur; return cur;
} }
...@@ -458,7 +462,7 @@ typedef struct m { ...@@ -458,7 +462,7 @@ typedef struct m {
uint64_t maxArray[11]; uint64_t maxArray[11];
} Meas; } Meas;
static inline void printMeas(char * txt, Meas *M, int period) { static inline void printMeas(char *txt, Meas *M, int period) {
if (M->iterations%period == 0 ) { if (M->iterations%period == 0 ) {
char txt2[512]; char txt2[512];
sprintf(txt2,"%s avg=%" PRIu64 " iterations=%" PRIu64 " max=%" sprintf(txt2,"%s avg=%" PRIu64 " iterations=%" PRIu64 " max=%"
...@@ -476,13 +480,13 @@ static inline void printMeas(char * txt, Meas *M, int period) { ...@@ -476,13 +480,13 @@ static inline void printMeas(char * txt, Meas *M, int period) {
} }
} }
static inline int cmpint(const void* a, const void* b) { static inline int cmpint(const void *a, const void *b) {
uint64_t* aa=(uint64_t*)a; uint64_t *aa=(uint64_t *)a;
uint64_t* bb=(uint64_t*)b; uint64_t *bb=(uint64_t *)b;
return (int)(*aa-*bb); return (int)(*aa-*bb);
} }
static inline void updateTimes(uint64_t start, Meas *M, int period, char * txt) { static inline void updateTimes(uint64_t start, Meas *M, int period, char *txt) {
if (start!=0) { if (start!=0) {
uint64_t end=rdtsc(); uint64_t end=rdtsc();
long long diff=(end-start)/(cpuf*1000); long long diff=(end-start)/(cpuf*1000);
......
...@@ -8,27 +8,35 @@ char **unique_ids; ...@@ -8,27 +8,35 @@ char **unique_ids;
int unique_ids_size; int unique_ids_size;
int unique_ids_maxsize; int unique_ids_maxsize;
int cmp(const void *p1, const void *p2) int cmp(const void *p1, const void *p2) {
{ return strcmp(*(char *const *)p1, *(char *const *)p2);
return strcmp(*(char * const *)p1, *(char * const *)p2);
} }
/* return 1 if s was not already known, 0 if it was */ /* return 1 if s was not already known, 0 if it was */
int new_unique_id(char *s, char *input_file) int new_unique_id(char *s, char *input_file) {
{
if (unique_ids_size) if (unique_ids_size)
if (bsearch(&s, unique_ids, unique_ids_size, sizeof(char *), cmp) != NULL) { if (bsearch(&s, unique_ids, unique_ids_size, sizeof(char *), cmp) != NULL) {
printf("error: ID %s is not unique in %s\n", s, input_file); printf("error: ID %s is not unique in %s\n", s, input_file);
return 0; return 0;
} }
if (unique_ids_size == unique_ids_maxsize) { if (unique_ids_size == unique_ids_maxsize) {
unique_ids_maxsize += 256; unique_ids_maxsize += 256;
unique_ids = realloc(unique_ids, unique_ids_maxsize * sizeof(char *)); unique_ids = realloc(unique_ids, unique_ids_maxsize * sizeof(char *));
if (unique_ids == NULL) { printf("error: out of memory\n"); abort(); }
if (unique_ids == NULL) {
printf("error: out of memory\n");
abort();
} }
}
unique_ids[unique_ids_size] = strdup(s); unique_ids[unique_ids_size] = strdup(s);
if (unique_ids[unique_ids_size] == NULL)
{ printf("error: out of memory\n"); abort(); } if (unique_ids[unique_ids_size] == NULL) {
printf("error: out of memory\n");
abort();
}
unique_ids_size++; unique_ids_size++;
qsort(unique_ids, unique_ids_size, sizeof(char *), cmp); qsort(unique_ids, unique_ids_size, sizeof(char *), cmp);
return 1; return 1;
...@@ -38,14 +46,17 @@ char *bufname; ...@@ -38,14 +46,17 @@ char *bufname;
int bufname_size; int bufname_size;
int bufname_maxsize; int bufname_maxsize;
void putname(int c) void putname(int c) {
{
if (bufname_size == bufname_maxsize) { if (bufname_size == bufname_maxsize) {
bufname_maxsize += 256; bufname_maxsize += 256;
bufname = realloc(bufname, bufname_maxsize); bufname = realloc(bufname, bufname_maxsize);
if (bufname == NULL)
{ printf("error: memory allocation error\n"); exit(1); } if (bufname == NULL) {
printf("error: memory allocation error\n");
exit(1);
}
} }
bufname[bufname_size] = c; bufname[bufname_size] = c;
bufname_size++; bufname_size++;
} }
...@@ -54,42 +65,54 @@ char *bufvalue; ...@@ -54,42 +65,54 @@ char *bufvalue;
int bufvalue_size; int bufvalue_size;
int bufvalue_maxsize; int bufvalue_maxsize;
void putvalue(int c) void putvalue(int c) {
{
if (bufvalue_size == bufvalue_maxsize) { if (bufvalue_size == bufvalue_maxsize) {
bufvalue_maxsize += 256; bufvalue_maxsize += 256;
bufvalue = realloc(bufvalue, bufvalue_maxsize); bufvalue = realloc(bufvalue, bufvalue_maxsize);
if (bufvalue == NULL)
{ printf("error: memory allocation error\n"); exit(1); } if (bufvalue == NULL) {
printf("error: memory allocation error\n");
exit(1);
}
} }
bufvalue[bufvalue_size] = c; bufvalue[bufvalue_size] = c;
bufvalue_size++; bufvalue_size++;
} }
void smash_spaces(FILE *f) void smash_spaces(FILE *f) {
{
int c; int c;
while (1) { while (1) {
c = fgetc(f); c = fgetc(f);
if (isspace(c)) continue; if (isspace(c)) continue;
if (c == ' ') continue; if (c == ' ') continue;
if (c == '\t') continue; if (c == '\t') continue;
if (c == '\n') continue; if (c == '\n') continue;
if (c == 10 || c == 13) continue; if (c == 10 || c == 13) continue;
if (c == '#') { if (c == '#') {
while (1) { while (1) {
c = fgetc(f); c = fgetc(f);
if (c == '\n' || c == EOF) break; if (c == '\n' || c == EOF) break;
} }
continue; continue;
} }
break; break;
} }
if (c != EOF) ungetc(c, f); if (c != EOF) ungetc(c, f);
} }
void get_line(FILE *f, char **name, char **value) void get_line(FILE *f, char **name, char **value) {
{
int c; int c;
bufname_size = 0; bufname_size = 0;
bufvalue_size = 0; bufvalue_size = 0;
...@@ -97,23 +120,39 @@ void get_line(FILE *f, char **name, char **value) ...@@ -97,23 +120,39 @@ void get_line(FILE *f, char **name, char **value)
*value = NULL; *value = NULL;
smash_spaces(f); smash_spaces(f);
c = fgetc(f); c = fgetc(f);
while (!(c == '=' || isspace(c) || c == EOF)) { putname(c); c = fgetc(f); }
while (!(c == '=' || isspace(c) || c == EOF)) {
putname(c);
c = fgetc(f);
}
if (c == EOF) return; if (c == EOF) return;
putname(0); putname(0);
while (!(c == EOF || c == '=')) c = fgetc(f); while (!(c == EOF || c == '=')) c = fgetc(f);
if (c == EOF) return; if (c == EOF) return;
smash_spaces(f); smash_spaces(f);
c = fgetc(f); c = fgetc(f);
while (!(c == 10 || c == 13 || c == EOF)) { putvalue(c); c = fgetc(f); }
while (!(c == 10 || c == 13 || c == EOF)) {
putvalue(c);
c = fgetc(f);
}
putvalue(0); putvalue(0);
if (bufname_size <= 1) return; if (bufname_size <= 1) return;
if (bufvalue_size <= 1) return; if (bufvalue_size <= 1) return;
*name = bufname; *name = bufname;
*value = bufvalue; *value = bufvalue;
} }
int main(int n, char **v) int main(int n, char **v) {
{
FILE *in; FILE *in;
FILE *out; FILE *out;
char *name; char *name;
...@@ -121,36 +160,54 @@ int main(int n, char **v) ...@@ -121,36 +160,54 @@ int main(int n, char **v)
char *in_name; char *in_name;
char *out_name; char *out_name;
if (n != 3) { printf("error: gimme <source> <dest>\n"); exit(1); } if (n != 3) {
printf("error: gimme <source> <dest>\n");
exit(1);
}
n = 0; n = 0;
in_name = v[1]; in_name = v[1];
out_name = v[2]; out_name = v[2];
in = fopen(in_name, "r");
if (in == NULL) {
perror(in_name);
exit(1);
}
in = fopen(in_name, "r"); if (in == NULL) { perror(in_name); exit(1); } out = fopen(out_name, "w");
out = fopen(out_name, "w"); if (out == NULL) { perror(out_name); exit(1); }
if (out == NULL) {
perror(out_name);
exit(1);
}
fprintf(out, "/* generated file, do not edit by hand */\n\n"); fprintf(out, "/* generated file, do not edit by hand */\n\n");
while (1) { while (1) {
get_line(in, &name, &value); get_line(in, &name, &value);
if (name == NULL) break; if (name == NULL) break;
if (isspace(value[strlen(value)-1])) { if (isspace(value[strlen(value)-1])) {
printf("error: bad value '%s' (no space at the end please!)\n", value); printf("error: bad value '%s' (no space at the end please!)\n", value);
unlink(out_name); unlink(out_name);
exit(1); exit(1);
} }
if (!strcmp(name, "ID")) { if (!strcmp(name, "ID")) {
if (!new_unique_id(value, in_name)) { unlink(out_name); exit(1); } if (!new_unique_id(value, in_name)) {
unlink(out_name);
exit(1);
}
fprintf(out, "#define T_%s T_ID(%d)\n", value, n); fprintf(out, "#define T_%s T_ID(%d)\n", value, n);
n++; n++;
} }
} }
fprintf(out, "#define T_NUMBER_OF_IDS %d\n", n);
fprintf(out, "#define T_NUMBER_OF_IDS %d\n", n);
fclose(in); fclose(in);
fclose(out); fclose(out);
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