common/options: add addrvec option type

Signed-off-by: Sage Weil <sage@redhat.com>
This commit is contained in:
Sage Weil 2018-05-23 11:42:25 -05:00
parent 628927d5ba
commit 30d3095ef2
3 changed files with 15 additions and 1 deletions

View File

@ -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

View File

@ -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())) {

View File

@ -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: