From: Radoslaw Zarzynski Date: Sun, 18 Dec 2022 22:43:28 +0000 (+0000) Subject: common: make pick_address() aware about public_bind_addr X-Git-Tag: v17.2.6~31^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2757ede2d6021c291b1c5f2bd2c6c0da5374d5a5;p=ceph.git common: make pick_address() aware about public_bind_addr Fixes: https://tracker.ceph.com/issues/58779 Signed-off-by: Radoslaw Zarzynski (cherry picked from commit a235be23685964a4832167fb5504a49697ec058d) --- diff --git a/src/common/pick_address.cc b/src/common/pick_address.cc index 0ab19292582b..b1a36e072912 100644 --- a/src/common/pick_address.cc +++ b/src/common/pick_address.cc @@ -14,6 +14,7 @@ #include "common/pick_address.h" +#include #include #include #include @@ -354,10 +355,13 @@ int pick_addresses( addrs->v.clear(); unsigned addrt = (flags & (CEPH_PICK_ADDRESS_PUBLIC | + CEPH_PICK_ADDRESS_PUBLIC_BIND | CEPH_PICK_ADDRESS_CLUSTER)); - if (addrt == 0 || - addrt == (CEPH_PICK_ADDRESS_PUBLIC | - CEPH_PICK_ADDRESS_CLUSTER)) { + // TODO: move to std::popcount when it's available for all release lines + // we are interested in (quincy was a blocker at the time of writing) + if (std::bitset(addrt).count() != 1) { + // these flags are mutually exclusive and one of them must be + // always set (in other words: it's mode selection). return -EINVAL; } unsigned msgrv = flags & (CEPH_PICK_ADDRESS_MSGR1 | @@ -400,6 +404,13 @@ int pick_addresses( networks = cct->_conf.get_val("public_network"); interfaces = cct->_conf.get_val("public_network_interface"); + } else if (addrt & CEPH_PICK_ADDRESS_PUBLIC_BIND) { + addr = cct->_conf.get_val("public_bind_addr"); + // XXX: we don't support _network nor _network_interface for + // the public_bind addrs yet. + if (addr.is_blank_ip()) { + return -ENOENT; + } } else { addr = cct->_conf.get_val("cluster_addr"); networks = cct->_conf.get_val("cluster_network"); diff --git a/src/common/pick_address.h b/src/common/pick_address.h index 1faf60dbd75b..4fd77e546f10 100644 --- a/src/common/pick_address.h +++ b/src/common/pick_address.h @@ -20,6 +20,7 @@ class entity_addrvec_t; #define CEPH_PICK_ADDRESS_IPV6 0x20 #define CEPH_PICK_ADDRESS_PREFER_IPV4 0x40 #define CEPH_PICK_ADDRESS_DEFAULT_MON_PORTS 0x80 +#define CEPH_PICK_ADDRESS_PUBLIC_BIND 0x100 #ifndef WITH_SEASTAR /*