From: Ricardo Dias Date: Wed, 16 Jan 2019 16:47:43 +0000 (+0000) Subject: msg/async: msgr2: fix peer_addrs discovery X-Git-Tag: v14.1.0~271^2~21 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a9c879089e126b327eedff2f5afbd59417f98343;p=ceph.git msg/async: msgr2: fix peer_addrs discovery Signed-off-by: Ricardo Dias --- diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index 736e9d43ed9d..aab4f3dfc8cf 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -2514,32 +2514,34 @@ CtPtr ProtocolV2::handle_client_ident(char *payload, uint32_t length) { if (client_ident.addrs().empty()) { connection->set_peer_addr(connection->target_addr); } else { - entity_addr_t peer_addr = client_ident.addrs().msgr2_addr(); + for (auto &peer_addr : client_ident.addrs().v) { + if (peer_addr.is_blank_ip()) { + // peer apparently doesn't know what ip they have; figure it out for + // them. + int port = peer_addr.get_port(); + peer_addr.u = connection->target_addr.u; + peer_addr.set_port(port); + ldout(cct, 0) << __func__ << " peer addr is really " << peer_addr + << " (socket is " << connection->target_addr << ")" + << dendl; + } + } - ldout(cct, 10) << __func__ << " peer addr is " << peer_addr << dendl; + entity_addr_t peer_addr = client_ident.addrs().msgr2_addr(); if (peer_addr.type == entity_addr_t::TYPE_NONE) { - // no address is known + // no v2 address is known peer_addr = client_ident.addrs().legacy_addr(); peer_addr.set_type(entity_addr_t::TYPE_MSGR2); - } else if (peer_addr.is_blank_ip()) { - // peer apparently doesn't know what ip they have; figure it out for them. - int port = peer_addr.get_port(); - peer_addr.u = connection->target_addr.u; - peer_addr.set_port(port); - peer_addr.set_type(entity_addr_t::TYPE_MSGR2); - } - ldout(cct, 0) << __func__ << " peer addr is really " << peer_addr - << " (socket is " << connection->target_addr << ")" - << dendl; - connection->target_addr = peer_addr; - entity_addrvec_t addrs; - addrs.v.push_back(peer_addr); - for (const auto &addr : client_ident.addrs().v) { - if (addr.type != entity_addr_t::TYPE_MSGR2) { + entity_addrvec_t addrs; + addrs.v.push_back(peer_addr); + for (const auto &addr : client_ident.addrs().v) { addrs.v.push_back(addr); } + connection->set_peer_addrs(addrs); + } else { + connection->set_peer_addrs(client_ident.addrs()); } - connection->set_peer_addrs(addrs); + connection->target_addr = peer_addr; } peer_name = entity_name_t(connection->get_peer_type(), client_ident.gid());