From 30d3095ef2a0737fc6d5a9fc9f68f6f30c0f066d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 23 May 2018 11:42:25 -0500 Subject: [PATCH] common/options: add addrvec option type Signed-off-by: Sage Weil --- src/common/config.h | 5 ++++- src/common/options.cc | 6 ++++++ src/common/options.h | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/common/config.h b/src/common/config.h index b6bb31dcd46..89a4677d76e 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -81,6 +81,7 @@ public: double md_config_t::*, bool md_config_t::*, entity_addr_t md_config_t::*, + entity_addrvec_t md_config_t::*, uuid_d md_config_t::*> member_ptr_t; // For use when intercepting configuration updates @@ -130,7 +131,7 @@ public: typedef enum { OPT_INT, OPT_LONGLONG, OPT_STR, OPT_DOUBLE, OPT_FLOAT, OPT_BOOL, - OPT_ADDR, OPT_U32, OPT_U64, OPT_UUID + OPT_ADDR, OPT_ADDRVEC, OPT_U32, OPT_U64, OPT_UUID } opt_type_t; // Create a new md_config_t structure. @@ -364,6 +365,7 @@ public: #define OPTION_OPT_FLOAT(name) double name; #define OPTION_OPT_BOOL(name) bool name; #define OPTION_OPT_ADDR(name) entity_addr_t name; +#define OPTION_OPT_ADDRVEC(name) entity_addrvec_t name; #define OPTION_OPT_U32(name) uint64_t name; #define OPTION_OPT_U64(name) uint64_t name; #define OPTION_OPT_UUID(name) uuid_d name; @@ -381,6 +383,7 @@ public: #undef OPTION_OPT_FLOAT #undef OPTION_OPT_BOOL #undef OPTION_OPT_ADDR +#undef OPTION_OPT_ADDRVEC #undef OPTION_OPT_U32 #undef OPTION_OPT_U64 #undef OPTION_OPT_UUID diff --git a/src/common/options.cc b/src/common/options.cc index bf94649e4be..827aa03a710 100644 --- a/src/common/options.cc +++ b/src/common/options.cc @@ -242,6 +242,12 @@ int Option::parse_value( return -EINVAL; } *out = addr; + } else if (type == Option::TYPE_ADDR) { + entity_addrvec_t addr; + if (!addr.parse(val.c_str())){ + return -EINVAL; + } + *out = addr; } else if (type == Option::TYPE_UUID) { uuid_d uuid; if (!uuid.parse(val.c_str())) { diff --git a/src/common/options.h b/src/common/options.h index 7643ea8397b..2d6925c1d89 100644 --- a/src/common/options.h +++ b/src/common/options.h @@ -19,6 +19,7 @@ struct Option { TYPE_FLOAT, TYPE_BOOL, TYPE_ADDR, + TYPE_ADDRVEC, TYPE_UUID, TYPE_SIZE, TYPE_SECS, @@ -32,6 +33,7 @@ struct Option { case TYPE_FLOAT: return "double"; case TYPE_BOOL: return "bool"; case TYPE_ADDR: return "entity_addr_t"; + case TYPE_ADDRVEC: return "entity_addrvec_t"; case TYPE_UUID: return "uuid_d"; case TYPE_SIZE: return "size_t"; case TYPE_SECS: return "secs"; @@ -86,6 +88,7 @@ struct Option { double, bool, entity_addr_t, + entity_addrvec_t, std::chrono::seconds, size_t, uuid_d>; @@ -154,6 +157,8 @@ struct Option { value = false; break; case TYPE_ADDR: value = entity_addr_t(); break; + case TYPE_ADDRVEC: + value = entity_addrvec_t(); break; case TYPE_UUID: value = uuid_d(); break; case TYPE_SIZE: -- 2.39.5