::decode(h.connect, p);
conn.set_peer_type(h.connect.host_type);
conn.policy = messenger.get_policy(h.connect.host_type);
+ if (!conn.policy.lossy && !conn.policy.server && conn.target_addr.get_port() <= 0) {
+ logger().error("{} we don't know how to reconnect to peer {}",
+ conn, conn.target_addr);
+ throw std::system_error(
+ make_error_code(ceph::net::error::bad_peer_address));
+ }
return socket->read(h.connect.authorizer_len);
}).then([this] (bufferlist authorizer) {
memset(&h.reply, 0, sizeof(h.reply));
conn.peer_addr = paddr;
logger().debug("{} UPDATE: peer_addr={}", conn, conn.peer_addr);
conn.target_addr = conn.peer_addr;
+ if (!conn.policy.lossy && !conn.policy.server && conn.target_addr.get_port() <= 0) {
+ logger().warn("{} we don't know how to reconnect to peer {}",
+ conn, conn.target_addr);
+ throw std::system_error(
+ make_error_code(ceph::net::error::bad_peer_address));
+ }
conn.set_peer_id(client_ident.gid());
client_cookie = client_ident.cookie();
for (auto& addr : boost::join(front_addrs.v, back_addrs.v)) {
addr.set_port(0);
}
+
+ using ceph::net::SocketPolicy;
+ front_msgr.set_policy(entity_name_t::TYPE_OSD,
+ SocketPolicy::stateless_server(0));
+ back_msgr.set_policy(entity_name_t::TYPE_OSD,
+ SocketPolicy::stateless_server(0));
return seastar::when_all_succeed(start_messenger(front_msgr, front_addrs),
start_messenger(back_msgr, back_addrs))
.then([this] {
osdmap = std::move(map);
return load_pgs();
}).then([this] {
+
+ uint64_t osd_required =
+ CEPH_FEATURE_UID |
+ CEPH_FEATURE_PGID64 |
+ CEPH_FEATURE_OSDENC;
+ using ceph::net::SocketPolicy;
+
+ public_msgr.set_default_policy(SocketPolicy::stateless_server(0));
+ public_msgr.set_policy(entity_name_t::TYPE_MON,
+ SocketPolicy::lossy_client(osd_required));
+ public_msgr.set_policy(entity_name_t::TYPE_MGR,
+ SocketPolicy::lossy_client(osd_required));
+ public_msgr.set_policy(entity_name_t::TYPE_OSD,
+ SocketPolicy::stateless_server(0));
+
+ cluster_msgr.set_default_policy(SocketPolicy::stateless_server(0));
+ cluster_msgr.set_policy(entity_name_t::TYPE_MON,
+ SocketPolicy::lossy_client(0));
+ cluster_msgr.set_policy(entity_name_t::TYPE_OSD,
+ SocketPolicy::lossless_peer(osd_required));
+ cluster_msgr.set_policy(entity_name_t::TYPE_CLIENT,
+ SocketPolicy::stateless_server(0));
+
dispatchers.push_front(this);
dispatchers.push_front(monc.get());
dispatchers.push_front(mgrc.get());