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
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.
#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;
#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
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())) {
TYPE_FLOAT,
TYPE_BOOL,
TYPE_ADDR,
+ TYPE_ADDRVEC,
TYPE_UUID,
TYPE_SIZE,
TYPE_SECS,
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";
double,
bool,
entity_addr_t,
+ entity_addrvec_t,
std::chrono::seconds,
size_t,
uuid_d>;
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: