mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
Unify setting default parameters in config libraries
Add common function config_common_getdefault
This commit is contained in:
@@ -308,3 +308,63 @@ void config_assign_int(configmodule_interface_t *cfg, paramdef_t *cfgoptions, ch
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Assigns the default value to a configuration parameter if available.
|
||||
*
|
||||
* This function checks the type of the parameter and assigns its default value
|
||||
* if it is defined. It handles various parameter types, including strings, integers,
|
||||
* arrays, doubles, IPv4 addresses, and lists. If the parameter is marked with
|
||||
* PARAMFLAG_DONOTREAD, it is ignored.
|
||||
*
|
||||
* @param[in] cfg Pointer to the configuration module interface.
|
||||
* @param[in] cfgoption Pointer to the parameter definition structure.
|
||||
* @param[in] prefix Optional prefix for the parameter name (can be NULL).
|
||||
* @return 1 if the default value was set, 0 if ignored, or -1 on error/unsupported type.
|
||||
*/
|
||||
int config_common_getdefault(configmodule_interface_t *cfg, paramdef_t *cfgoption, char *prefix)
|
||||
{
|
||||
if( (cfgoption->paramflags & PARAMFLAG_DONOTREAD) != 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch(cfgoption->type) {
|
||||
case TYPE_STRING:
|
||||
return config_setdefault_string(cfg, cfgoption, prefix);
|
||||
|
||||
case TYPE_STRINGLIST:
|
||||
return config_setdefault_stringlist(cfg, cfgoption, prefix);
|
||||
|
||||
case TYPE_UINT8:
|
||||
case TYPE_INT8:
|
||||
case TYPE_UINT16:
|
||||
case TYPE_INT16:
|
||||
case TYPE_UINT32:
|
||||
case TYPE_INT32:
|
||||
case TYPE_MASK:
|
||||
return config_setdefault_int(cfg, cfgoption, prefix);
|
||||
|
||||
case TYPE_UINT64:
|
||||
case TYPE_INT64:
|
||||
return config_setdefault_int64(cfg, cfgoption, prefix);
|
||||
|
||||
case TYPE_UINTARRAY:
|
||||
case TYPE_INTARRAY:
|
||||
return config_setdefault_intlist(cfg, cfgoption, prefix);
|
||||
|
||||
case TYPE_DOUBLE:
|
||||
return config_setdefault_double(cfg, cfgoption, prefix);
|
||||
|
||||
case TYPE_IPV4ADDR:
|
||||
return config_setdefault_ipv4addr(cfg, cfgoption, prefix);
|
||||
|
||||
case TYPE_LIST:
|
||||
// No default value for list type
|
||||
fprintf(stderr,"[CONFIG] %s.%s TYPE_LIST has no default value\n", prefix, cfgoption->optname);
|
||||
return -1;
|
||||
|
||||
default:
|
||||
fprintf(stderr,"[CONFIG] %s.%s type %i not supported\n", prefix, cfgoption->optname, cfgoption->type);
|
||||
return -1;
|
||||
} /* switch on param type */
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ int config_setdefault_double(configmodule_interface_t *cfg, paramdef_t *cfgoptio
|
||||
int config_setdefault_ipv4addr(configmodule_interface_t *cfg, paramdef_t *cfgoptions, char *prefix);
|
||||
void *config_allocate_new(configmodule_interface_t *cfg, int sz, bool autoFree);
|
||||
void config_assign_int(configmodule_interface_t *cfg, paramdef_t *cfgoptions, char *fullname, int val);
|
||||
int config_common_getdefault(configmodule_interface_t *cfg, paramdef_t *cfgoption, char *prefix);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -356,7 +356,7 @@ int config_libconfig_get(configmodule_interface_t *cfg, paramdef_t *cfgoptions,
|
||||
snprintf( *cfgoptions[i].strptr , cfgoptions[i].numelt, "%s", str);
|
||||
printf_params(cfg, "[LIBCONFIG] %s: \"%s\"\n", cfgpath, *cfgoptions[i].strptr);
|
||||
} else {
|
||||
defval = config_setdefault_string(cfg, &cfgoptions[i], prefix);
|
||||
defval = config_common_getdefault(cfg, &cfgoptions[i], prefix);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -367,7 +367,7 @@ int config_libconfig_get(configmodule_interface_t *cfg, paramdef_t *cfgoptions,
|
||||
if ( setting != NULL) {
|
||||
read_strlist(cfg, &cfgoptions[i], setting, cfgpath);
|
||||
} else {
|
||||
defval = config_setdefault_stringlist(cfg, &(cfgoptions[i]), prefix);
|
||||
defval = config_common_getdefault(cfg, &(cfgoptions[i]), prefix);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -383,7 +383,7 @@ int config_libconfig_get(configmodule_interface_t *cfg, paramdef_t *cfgoptions,
|
||||
config_check_valptr(cfg, &(cfgoptions[i]), sizeof(*cfgoptions[i].iptr), 1);
|
||||
config_assign_int(cfg, &(cfgoptions[i]), cfgpath, u);
|
||||
} else {
|
||||
defval = config_setdefault_int(cfg, &(cfgoptions[i]), prefix);
|
||||
defval = config_common_getdefault(cfg, &(cfgoptions[i]), prefix);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -401,7 +401,7 @@ int config_libconfig_get(configmodule_interface_t *cfg, paramdef_t *cfgoptions,
|
||||
printf_params(cfg, "[LIBCONFIG] %s: %ld\n", cfgpath, *cfgoptions[i].i64ptr);
|
||||
}
|
||||
} else {
|
||||
defval = config_setdefault_int64(cfg, &(cfgoptions[i]), prefix);
|
||||
defval = config_common_getdefault(cfg, &(cfgoptions[i]), prefix);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -413,7 +413,7 @@ int config_libconfig_get(configmodule_interface_t *cfg, paramdef_t *cfgoptions,
|
||||
if ( setting != NULL) {
|
||||
read_intarray(cfg, &cfgoptions[i], setting, cfgpath);
|
||||
} else {
|
||||
defval = config_setdefault_intlist(cfg, &(cfgoptions[i]), prefix);
|
||||
defval = config_common_getdefault(cfg, &(cfgoptions[i]), prefix);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -424,14 +424,14 @@ int config_libconfig_get(configmodule_interface_t *cfg, paramdef_t *cfgoptions,
|
||||
*cfgoptions[i].dblptr = dbl;
|
||||
printf_params(cfg, "[LIBCONFIG] %s: %lf\n", cfgpath, *(cfgoptions[i].dblptr));
|
||||
} else {
|
||||
defval = config_setdefault_double(cfg, &(cfgoptions[i]), prefix);
|
||||
defval = config_common_getdefault(cfg, &(cfgoptions[i]), prefix);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case TYPE_IPV4ADDR:
|
||||
if ( !config_lookup_string(&(libconfig_privdata.cfg),cfgpath, (const char **)&str)) {
|
||||
defval = config_setdefault_ipv4addr(cfg, &(cfgoptions[i]), prefix);
|
||||
defval = config_common_getdefault(cfg, &(cfgoptions[i]), prefix);
|
||||
} else {
|
||||
int rst = config_assign_ipv4addr(cfg, cfgoptions, str);
|
||||
|
||||
|
||||
@@ -25,8 +25,7 @@ extern "C" {
|
||||
#include "common/config/config_userapi.h"
|
||||
void *config_allocate_new(configmodule_interface_t *cfg, int sz, bool autoFree);
|
||||
void config_check_valptr(configmodule_interface_t *cfg, paramdef_t *cfgoptions, int elt_sz, int nb_elt);
|
||||
#include "../config_userapi.h"
|
||||
#include "../config_common.h"
|
||||
int config_common_getdefault(configmodule_interface_t *cfg, paramdef_t *cfgoption, char *prefix);
|
||||
}
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
@@ -44,71 +43,6 @@ class YamlConfig {
|
||||
}
|
||||
};
|
||||
|
||||
void SetDefault(configmodule_interface_t *cfg, paramdef_t *param)
|
||||
{
|
||||
switch (param->type) {
|
||||
case TYPE_INT:
|
||||
*param->iptr = param->defintval;
|
||||
break;
|
||||
case TYPE_UINT:
|
||||
*param->uptr = param->defuintval;
|
||||
break;
|
||||
case TYPE_STRING:
|
||||
if (param->defstrval != nullptr) {
|
||||
if (param->numelt == 0) {
|
||||
config_check_valptr(cfg, param, 1, strlen(param->defstrval) + 1);
|
||||
}
|
||||
sprintf(*param->strptr, "%s", param->defstrval);
|
||||
}
|
||||
break;
|
||||
case TYPE_INT8:
|
||||
*param->i8ptr = param->defintval;
|
||||
break;
|
||||
case TYPE_UINT8:
|
||||
*param->u8ptr = param->defuintval;
|
||||
break;
|
||||
case TYPE_INT16:
|
||||
*param->i16ptr = param->defintval;
|
||||
break;
|
||||
case TYPE_UINT16:
|
||||
*param->u16ptr = param->defuintval;
|
||||
break;
|
||||
case TYPE_INT64:
|
||||
*param->i64ptr = param->defint64val;
|
||||
break;
|
||||
case TYPE_UINT64:
|
||||
*param->u64ptr = param->defint64val;
|
||||
break;
|
||||
case TYPE_DOUBLE:
|
||||
*param->dblptr = param->defdblval;
|
||||
break;
|
||||
case TYPE_MASK:
|
||||
*param->uptr = param->defuintval;
|
||||
break;
|
||||
case TYPE_STRINGLIST:
|
||||
if (param->defstrlistval != nullptr) {
|
||||
param->strlistptr = param->defstrlistval;
|
||||
}
|
||||
break;
|
||||
case TYPE_INTARRAY:
|
||||
if (param->defintarrayval) {
|
||||
param->iptr = param->defintarrayval;
|
||||
}
|
||||
break;
|
||||
case TYPE_UINTARRAY:
|
||||
if (param->defintarrayval) {
|
||||
param->uptr = (uint32_t *)param->defintarrayval;
|
||||
}
|
||||
break;
|
||||
case TYPE_IPV4ADDR:
|
||||
config_setdefault_ipv4addr(cfg, param, param->defstrval);
|
||||
break;
|
||||
default:
|
||||
AssertFatal(false, "Unhandled type %d", param->type);
|
||||
}
|
||||
param->paramflags |= PARAMFLAG_PARAMSETDEF;
|
||||
}
|
||||
|
||||
void SetNonDefault(configmodule_interface_t *cfg, const YAML::Node &node, paramdef_t *param)
|
||||
{
|
||||
auto optname = std::string(param->optname);
|
||||
@@ -213,7 +147,7 @@ void GetParams(configmodule_interface_t *cfg, const YAML::Node &node, paramdef_t
|
||||
if (node && node[std::string(params[i].optname)]) {
|
||||
SetNonDefault(cfg, node, ¶ms[i]);
|
||||
} else {
|
||||
SetDefault(cfg, ¶ms[i]);
|
||||
config_common_getdefault(cfg, ¶ms[i], nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user