From 5354ad8a26f694c55b27b867ffd054004db720f0 Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Thu, 10 Apr 2025 21:12:44 +0200 Subject: [PATCH] Add support for TYPE_IPV4ADDR in yaml config module --- common/config/yaml/config_yaml.cpp | 15 ++++++++++ common/config/yaml/tests/CMakeLists.txt | 1 + common/config/yaml/tests/test_ipv4.yaml | 4 +++ common/config/yaml/tests/test_yaml_config.cpp | 30 +++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 common/config/yaml/tests/test_ipv4.yaml diff --git a/common/config/yaml/config_yaml.cpp b/common/config/yaml/config_yaml.cpp index 108dee1ac2..138163ce0e 100644 --- a/common/config/yaml/config_yaml.cpp +++ b/common/config/yaml/config_yaml.cpp @@ -25,6 +25,8 @@ 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" } #include #include @@ -98,6 +100,9 @@ void SetDefault(configmodule_interface_t *cfg, paramdef_t *param) 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); } @@ -186,6 +191,16 @@ void SetNonDefault(configmodule_interface_t *cfg, const YAML::Node &node, paramd } break; } + case TYPE_IPV4ADDR: { + std::string ipv4addr = node[optname].as(); + char* ipv4addr_ptr = strdup(ipv4addr.c_str()); + int rst = config_assign_ipv4addr(cfg, param, ipv4addr_ptr); + free(ipv4addr_ptr); + if (rst < 0) { + fprintf(stderr,"[LIBCONFIG] %s not valid for %s \n", ipv4addr.c_str(), optname.c_str()); + } + break; + } default: AssertFatal(false, "Unhandled type %d", param->type); } diff --git a/common/config/yaml/tests/CMakeLists.txt b/common/config/yaml/tests/CMakeLists.txt index 6290f2fc15..d33fa57658 100644 --- a/common/config/yaml/tests/CMakeLists.txt +++ b/common/config/yaml/tests/CMakeLists.txt @@ -10,3 +10,4 @@ configure_file(test_string.yaml test_string.yaml COPYONLY) configure_file(test_list_of_mappings.yml test_list_of_mappings.yml COPYONLY) configure_file(test_int_array.yaml test_int_array.yaml COPYONLY) configure_file(test_read_mapping_as_list.yaml test_read_mapping_as_list.yaml COPYONLY) +configure_file(test_ipv4.yaml test_ipv4.yaml COPYONLY) diff --git a/common/config/yaml/tests/test_ipv4.yaml b/common/config/yaml/tests/test_ipv4.yaml new file mode 100644 index 0000000000..c7d1b4866f --- /dev/null +++ b/common/config/yaml/tests/test_ipv4.yaml @@ -0,0 +1,4 @@ +test: + ipv4_1: 0.0.0.0 + ipv4_2: 192.168.0.1 + #ipv4_3: check default diff --git a/common/config/yaml/tests/test_yaml_config.cpp b/common/config/yaml/tests/test_yaml_config.cpp index deaa52cd1a..384a1f406c 100644 --- a/common/config/yaml/tests/test_yaml_config.cpp +++ b/common/config/yaml/tests/test_yaml_config.cpp @@ -391,6 +391,36 @@ TEST(yaml_config, test_read_mapping_as_list) { end_configmodule(cfg); } +TEST(yaml_config, test_read_ipv4) { + configmodule_interface_t *cfg = static_cast(calloc(1, sizeof(*cfg))); + cfg->cfgP[0] = strdup("test_ipv4.yaml"); + EXPECT_EQ(config_yaml_init(cfg), 0); + + paramdef_t p = {}; + p.type = TYPE_IPV4ADDR; + strncpy(p.optname, "ipv4_1", sizeof(p.optname) - 1); + uint32_t addr = 0; + p.uptr = &addr; + p.defstrval = nullptr; + char prefix[] = "test"; + config_yaml_get(cfg, &p, 1, prefix); + printf("%x\n", addr); + + strncpy(p.optname, "ipv4_2", sizeof(p.optname) - 1); + config_yaml_get(cfg, &p, 1, prefix); + printf("%x\n", addr); + + p.defstrval = strdup("10.0.0.1"); + strncpy(p.optname, "ipv4_3", sizeof(p.optname) - 1); + config_yaml_get(cfg, &p, 1, prefix); + printf("%x\n", addr); + + config_yaml_end(cfg); + free(cfg->cfgP[0]); + end_configmodule(cfg); + free(p.defstrval); +} + int main(int argc, char** argv) { logInit();