]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/options: add addrvec option type
authorSage Weil <sage@redhat.com>
Wed, 23 May 2018 16:42:25 +0000 (11:42 -0500)
committerSage Weil <sage@redhat.com>
Tue, 3 Jul 2018 18:01:08 +0000 (13:01 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/config.h
src/common/options.cc
src/common/options.h

index b6bb31dcd460296009f62cfa670ff9f1ca8d75d4..89a4677d76e0ed2482c94441fde705b7523618a1 100644 (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
index bf94649e4bedfd7c27b8ad5088698d2add80a336..827aa03a7107ab11548e2da67446769886a1e4aa 100644 (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())) {
index 7643ea8397b45e03b0b4bb12c37b2039b349e6a2..2d6925c1d897235e90b8eb31bf554c7b7844842f 100644 (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: