]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: never fill out port in myaddr if we didn't bind
authorSage Weil <sage@redhat.com>
Fri, 25 Jan 2019 20:12:27 +0000 (14:12 -0600)
committerSage Weil <sage@redhat.com>
Fri, 25 Jan 2019 20:12:59 +0000 (14:12 -0600)
If we are a client and didn't bind, then we should not fill in the port for our
address.  The one the peer sent us is just the random port our outgoing connection
happened to land on!

Signed-off-by: Sage Weil <sage@redhat.com>
src/msg/async/AsyncMessenger.cc

index c8403130d4207759ee7d0b12c7597aa1da944e2b..cbb3972792384fb4ff24bfc19271edeb9fa69a25 100644 (file)
@@ -886,6 +886,9 @@ bool AsyncMessenger::learned_addr(const entity_addr_t &peer_addr_for_me)
     if (my_addrs->empty()) {
       auto a = peer_addr_for_me;
       a.set_nonce(nonce);
+      if (!did_bind) {
+       a.set_port(0);
+      }
       set_myaddrs(entity_addrvec_t(a));
       ldout(cct,10) << __func__ << " had no addrs" << dendl;
     } else {
@@ -895,7 +898,11 @@ bool AsyncMessenger::learned_addr(const entity_addr_t &peer_addr_for_me)
        if (a.get_family() == peer_addr_for_me.get_family()) {
          entity_addr_t t = peer_addr_for_me;
          t.set_type(a.get_type());
-         t.set_port(a.get_port());
+         if (!did_bind) {
+           t.set_port(0);
+         } else {        
+           t.set_port(a.get_port());
+         }
          t.set_nonce(a.get_nonce());
          ldout(cct,10) << __func__ << " " << a << " -> " << t << dendl;
          a = t;