entity_addr_t addr,
int priority)
{
- if (addr.get_port() == 0) {
- // no port; try both msgr2 and legacy
- 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);
- if (!contains(addr)) {
- add(name + "-legacy", 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);
- if (!contains(addr)) {
- add(name + "-legacy", entity_addrvec_t(addr));
+ if (addr.get_type() != entity_addr_t::TYPE_V1ORV2) {
+ // a v1: or v2: prefix was specified
+ if (addr.get_port() == 0) {
+ // use default port
+ if (addr.get_type() == entity_addr_t::TYPE_MSGR2) {
+ addr.set_port(CEPH_MON_PORT_IANA);
+ } else if (addr.get_type() == entity_addr_t::TYPE_LEGACY) {
+ addr.set_port(CEPH_MON_PORT_LEGACY);
+ } else {
+ // wth
+ return;
+ }
+ if (!contains(addr)) {
+ add(name, entity_addrvec_t(addr));
+ }
+ } else {
+ if (!contains(addr)) {
+ add(name, entity_addrvec_t(addr), priority);
+ }
}
} else {
- // assume msgr2
- addr.set_type(entity_addr_t::TYPE_MSGR2);
- if (!contains(addr)) {
- add(name, entity_addrvec_t(addr), priority);
+ // no v1: or v2: prefix specified
+ if (addr.get_port() == 0) {
+ // no port; try both msgr2 and legacy
+ 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);
+ if (!contains(addr)) {
+ add(name + "-legacy", 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);
+ if (!contains(addr)) {
+ add(name + "-legacy", entity_addrvec_t(addr));
+ }
+ } else {
+ // assume msgr2
+ addr.set_type(entity_addr_t::TYPE_MSGR2);
+ if (!contains(addr)) {
+ add(name, entity_addrvec_t(addr), priority);
+ }
}
}
}
const std::string &prefix)
{
vector<entity_addr_t> addrs;
- if (!parse_ip_port_vec(ips.c_str(), addrs)) {
+ if (!parse_ip_port_vec(ips.c_str(), addrs, entity_addr_t::TYPE_V1ORV2)) {
return -EINVAL;
}
if (addrs.empty())
return -EINVAL;
vector<entity_addr_t> addrs;
- bool success = parse_ip_port_vec(hosts, addrs);
+ bool success = parse_ip_port_vec(hosts, addrs, entity_addr_t::TYPE_V1ORV2);
free(hosts);
if (!success)
return -EINVAL;