]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: fix IP inference
authorSage Weil <sage@redhat.com>
Sat, 12 Jan 2019 12:47:59 +0000 (06:47 -0600)
committerSage Weil <sage@redhat.com>
Tue, 15 Jan 2019 02:45:28 +0000 (20:45 -0600)
socket_addr is *our* socket address; target_addr is the remote peer's
socket address.  We are inferring the remote's IP address here.

Fixes: http://tracker.ceph.com/issues/37882
Signed-off-by: Sage Weil <sage@redhat.com>
src/msg/async/ProtocolV1.cc
src/msg/async/ProtocolV2.cc

index e6e6bfc10ad0356cb984148074664d32925cb84a..5dda0b2df8ae6e27e7552c49d4c798d57a7742eb 100644 (file)
@@ -1794,7 +1794,7 @@ CtPtr ProtocolV1::handle_client_banner(char *buffer, int r) {
   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->socket_addr.u;
+    peer_addr.set_sockaddr(connection->target_addr.get_sockaddr());
     peer_addr.set_port(port);
 
     ldout(cct, 0) << __func__ << " accept peer addr is really " << peer_addr
index d9fe7f82ee43378c20c3b4f79d0ce62cd9de27a2..bfa9f0175e2dfb58d9b67f8c2a3d56e29d4b5ab7 100644 (file)
@@ -1837,10 +1837,10 @@ CtPtr ProtocolV2::handle_client_addrvec(char *buffer, int r) {
     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->socket_addr.u;
+      peer_addr.set_sockaddr(connection->target_addr.get_sockaddr());
       peer_addr.set_port(port);
       ldout(cct, 0) << __func__ << " accept peer addr is really " << peer_addr
-                    << " (socket is " << connection->socket_addr << ")"
+                    << " (target is " << connection->target_addr << ")"
                     << dendl;
       peer_addr_p = &peer_addr;
     }