}
} else {
// no v1: or v2: prefix specified
- if (addr.get_port() == 0) {
- // no port; try both msgr2 and legacy
+ if (addr.get_port() == CEPH_MON_PORT_LEGACY) {
+ // legacy port implies legacy addr
+ addr.set_type(entity_addr_t::TYPE_LEGACY);
+ if (!contains(addr)) {
+ add(name + "-legacy", entity_addrvec_t(addr));
+ }
+ } else if (addr.get_port() == CEPH_MON_PORT_IANA) {
+ // iana port implies msgr2 addr
addr.set_type(entity_addr_t::TYPE_MSGR2);
- addr.set_port(CEPH_MON_PORT_IANA);
if (!contains(addr)) {
add(name, entity_addrvec_t(addr));
}
- addr.set_type(entity_addr_t::TYPE_LEGACY);
- addr.set_port(CEPH_MON_PORT_LEGACY);
+ } else if (addr.get_port() == 0) {
+ // no port; try both msgr2 and legacy ports
+ addr.set_type(entity_addr_t::TYPE_MSGR2);
+ addr.set_port(CEPH_MON_PORT_IANA);
if (!contains(addr)) {
- add(name + "-legacy", entity_addrvec_t(addr));
+ add(name, entity_addrvec_t(addr));
}
- } else if (addr.get_port() == CEPH_MON_PORT_LEGACY) {
- // legacy port implies legacy addr
addr.set_type(entity_addr_t::TYPE_LEGACY);
+ addr.set_port(CEPH_MON_PORT_LEGACY);
if (!contains(addr)) {
add(name + "-legacy", entity_addrvec_t(addr));
}
} else {
- // assume msgr2
+ // try both msgr2 and legacy on specified port
addr.set_type(entity_addr_t::TYPE_MSGR2);
if (!contains(addr)) {
add(name, entity_addrvec_t(addr), priority);
}
+ addr.set_type(entity_addr_t::TYPE_LEGACY);
+ if (!contains(addr)) {
+ add(name + "-legacy", entity_addrvec_t(addr), priority);
+ }
}
}
}
<< ": error " << res << std::endl;
continue;
}
+ // the 'mon addr' field is a legacy field, so assume anything
+ // there on a weird port is a v1 address, and do not handle
+ // addrvecs.
entity_addr_t addr;
- if (!addr.parse(val.c_str())) {
+ if (!addr.parse(val.c_str(), nullptr, entity_addr_t::TYPE_LEGACY)) {
errout << "unable to parse address for mon." << mon_name
<< ": addr='" << val << "'" << std::endl;
continue;