state = state_t::connecting;
set_write_state(write_state_t::delay);
+ // we don't know my ephemeral port yet
+ conn.set_ephemeral_port(0, SocketConnection::side_t::none);
ceph_assert(!socket);
conn.peer_addr = _peer_addr;
conn.set_peer_type(_peer_type);
::decode(caddr, p);
ceph_assert(p.end());
validate_peer_addr(saddr, conn.peer_addr);
-
- conn.side = SocketConnection::side_t::connector;
- conn.socket_port = caddr.get_port();
+ conn.set_ephemeral_port(caddr.get_port(),
+ SocketConnection::side_t::connector);
return messenger.learned_addr(caddr);
}).then([this] {
// encode/send client's handshake header
ceph_assert(!socket);
conn.peer_addr.u = _peer_addr.u;
conn.peer_addr.set_port(0);
- conn.side = SocketConnection::side_t::acceptor;
- conn.socket_port = _peer_addr.get_port();
+ conn.set_ephemeral_port(_peer_addr.get_port(),
+ SocketConnection::side_t::acceptor);
socket = std::move(sock);
messenger.accept_conn(
seastar::static_pointer_cast<SocketConnection>(conn.shared_from_this()));
ceph_assert(state == state_t::NONE);
ceph_assert(!socket);
conn.target_addr = _peer_addr;
+ conn.set_ephemeral_port(_peer_addr.get_port(),
+ SocketConnection::side_t::acceptor);
socket = std::move(sock);
logger().info("{} ProtocolV2::start_accept(): peer_addr={}", conn, _peer_addr);
messenger.accept_conn(
{
trigger_state(state_t::CONNECTING, write_state_t::delay, true);
seastar::with_gate(pending_dispatch, [this] {
+ // we don't know my socket_port yet
+ conn.set_ephemeral_port(0, SocketConnection::side_t::none);
enable_recording();
global_seq = messenger.get_global_seq();
logger().debug("{} UPDATE: gs={}", conn, global_seq);
dispatch_reset();
abort_in_close();
}
+ conn.set_ephemeral_port(_my_addr_from_peer.get_port(),
+ SocketConnection::side_t::connector);
if (messenger.get_myaddrs().empty() ||
messenger.get_myaddrs().front().is_blank_ip()) {
return messenger.learned_addr(_my_addr_from_peer);
out << " >> " << get_peer_name() << " " << peer_addr;
} else if (side == side_t::acceptor) {
out << " >> " << get_peer_name() << " " << peer_addr
- << "@" << socket_port;
+ << "@" << ephemeral_port;
} else { // side == side_t::connector
- out << "@" << socket_port
+ out << "@" << ephemeral_port
<< " >> " << get_peer_name() << " " << peer_addr;
}
}
SocketMessenger& messenger;
std::unique_ptr<Protocol> protocol;
- // if acceptor side, socket_port is different from peer_addr.get_port();
- // if connector side, socket_port is different from my_addr.get_port().
+ // if acceptor side, ephemeral_port is different from peer_addr.get_port();
+ // if connector side, ephemeral_port is different from my_addr.get_port().
enum class side_t {
none,
acceptor,
connector
};
side_t side = side_t::none;
- uint16_t socket_port = 0;
+ uint16_t ephemeral_port = 0;
+ void set_ephemeral_port(uint16_t port, side_t _side) {
+ ephemeral_port = port;
+ side = _side;
+ }
ceph::net::Policy<ceph::thread::Throttle> policy;
uint64_t features;