This is an automated email from the ASF dual-hosted git repository. masaori pushed a commit to branch quic-latest in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 976cec2ac7fc7932a0890ab8decdd532a7c1f3b5 Author: Masaori Koshiba <[email protected]> AuthorDate: Tue May 29 14:05:41 2018 +0900 Print dcid and scid in debug log to identify quic connection Only change logs in QUICNetVConnection. Other components will be fixed. --- iocore/net/P_QUICNetVConnection.h | 16 ++++++++-- iocore/net/QUICNetVConnection.cc | 64 ++++++++++++++++++++++++++++----------- iocore/net/quic/Mock.h | 6 ++++ iocore/net/quic/QUICConnection.h | 1 + iocore/net/quic/QUICTypes.cc | 6 ++++ iocore/net/quic/QUICTypes.h | 1 + 6 files changed, 73 insertions(+), 21 deletions(-) diff --git a/iocore/net/P_QUICNetVConnection.h b/iocore/net/P_QUICNetVConnection.h index 94f6ccf..3398aa6 100644 --- a/iocore/net/P_QUICNetVConnection.h +++ b/iocore/net/P_QUICNetVConnection.h @@ -74,6 +74,9 @@ #define QUIC_OP_HANDSHAKE 0x16 +// Size of connection ids for debug log : e.g. aaaaaaaa-bbbbbbbb\0 +static constexpr size_t MAX_CIDS_SIZE = 8 + 1 + 8 + 1; + // class QUICNextProtocolSet; // struct QUICCertLookup; @@ -195,6 +198,7 @@ public: QUICConnectionId peer_connection_id() const override; QUICConnectionId original_connection_id() const override; QUICConnectionId connection_id() const override; + std::string_view cids() const override; const QUICFiveTuple five_tuple() const override; uint32_t maximum_quic_packet_size() const override; uint32_t minimum_quic_packet_size() override; @@ -228,11 +232,14 @@ private: QUICPacketType _last_received_packet_type = QUICPacketType::UNINITIALIZED; std::random_device _rnd; - QUICConnectionId _peer_quic_connection_id; - QUICConnectionId _original_quic_connection_id; - QUICConnectionId _quic_connection_id; + QUICConnectionId _peer_quic_connection_id; // dst cid + QUICConnectionId _original_quic_connection_id; // dst cid of initial packet from client + QUICConnectionId _quic_connection_id; // src cid QUICFiveTuple _five_tuple; + char _cids_data[MAX_CIDS_SIZE] = {0}; + std::string_view _cids; + UDPConnection *_udp_con = nullptr; QUICPacketHandler *_packet_handler = nullptr; QUICPacketFactory _packet_factory; @@ -332,6 +339,9 @@ private: void _handle_idle_timeout(); + void _update_cids(); + void _update_peer_cid(const QUICConnectionId &new_cid); + QUICPacketUPtr _the_final_packet = QUICPacketFactory::create_null_packet(); QUICStatelessResetToken _reset_token; diff --git a/iocore/net/QUICNetVConnection.cc b/iocore/net/QUICNetVConnection.cc index 8126bac..bd216a7 100644 --- a/iocore/net/QUICNetVConnection.cc +++ b/iocore/net/QUICNetVConnection.cc @@ -42,13 +42,15 @@ #define STATE_FROM_VIO(_x) ((NetState *)(((char *)(_x)) - STATE_VIO_OFFSET)) #define STATE_VIO_OFFSET ((uintptr_t) & ((NetState *)0)->vio) -#define QUICConDebug(fmt, ...) Debug("quic_net", "[%" PRIx64 "] " fmt, this->_peer_quic_connection_id.l64(), ##__VA_ARGS__) +#define QUICConDebug(fmt, ...) Debug("quic_net", "[%s] " fmt, this->cids().data(), ##__VA_ARGS__) -#define QUICConVDebug(fmt, ...) Debug("v_quic_net", "[%" PRIx64 "] " fmt, this->_peer_quic_connection_id.l64(), ##__VA_ARGS__) +#define QUICConVDebug(fmt, ...) Debug("v_quic_net", "[%s] " fmt, this->cids().data(), ##__VA_ARGS__) -#define QUICError(fmt, ...) \ - Debug("quic_net", "[%" PRIx64 "] " fmt, this->_peer_quic_connection_id.l64(), ##__VA_ARGS__); \ - Error("quic_net [%" PRIx64 "] " fmt, this->_peer_quic_connection_id.l64(), ##__VA_ARGS__) +#define QUICFCDebug(fmt, ...) Debug("quic_flow_ctrl", "[%s] " fmt, this->cids().data(), ##__VA_ARGS__) + +#define QUICError(fmt, ...) \ + Debug("quic_net", "[%s] " fmt, this->cids().data(), ##__VA_ARGS__); \ + Error("quic_net [%s] " fmt, this->cids().data(), ##__VA_ARGS__) static constexpr uint32_t IPV4_HEADER_SIZE = 20; static constexpr uint32_t IPV6_HEADER_SIZE = 40; @@ -84,8 +86,10 @@ QUICNetVConnection::init(QUICConnectionId peer_cid, QUICConnectionId original_ci this->_ctable->insert(this->_original_quic_connection_id, this); } - QUICConDebug("Connection ID %" PRIx64 " has been changed to %" PRIx64, this->_original_quic_connection_id.l64(), - this->_quic_connection_id.l64()); + this->_update_cids(); + + // TODO: print full cids + QUICConDebug("dcid=%08" PRIx32 " scid=%08" PRIx32, this->_peer_quic_connection_id.h32(), this->_quic_connection_id.h32()); } bool @@ -339,6 +343,12 @@ QUICNetVConnection::connection_id() const return this->_quic_connection_id; } +std::string_view +QUICNetVConnection::cids() const +{ + return this->_cids; +} + const QUICFiveTuple QUICNetVConnection::five_tuple() const { @@ -457,8 +467,8 @@ QUICNetVConnection::handle_frame(std::shared_ptr<const QUICFrame> frame) switch (frame->type()) { case QUICFrameType::MAX_DATA: this->_remote_flow_controller->forward_limit(std::static_pointer_cast<const QUICMaxDataFrame>(frame)->maximum_data()); - Debug("quic_flow_ctrl", "Connection [%" PRIx64 "] [REMOTE] %" PRIu64 "/%" PRIu64, this->_peer_quic_connection_id.l64(), - this->_remote_flow_controller->current_offset(), this->_remote_flow_controller->current_limit()); + QUICFCDebug("[REMOTE] %" PRIu64 "/%" PRIu64, this->_remote_flow_controller->current_offset(), + this->_remote_flow_controller->current_limit()); this->_schedule_packet_write_ready(); break; @@ -1247,8 +1257,8 @@ QUICNetVConnection::_packetize_frames() ++frame_count; if (frame->type() == QUICFrameType::STREAM) { int ret = this->_remote_flow_controller->update(this->_stream_manager->total_offset_sent()); - Debug("quic_flow_ctrl", "Connection [%" PRIx64 "] [REMOTE] %" PRIu64 "/%" PRIu64, this->_peer_quic_connection_id.l64(), - this->_remote_flow_controller->current_offset(), this->_remote_flow_controller->current_limit()); + QUICFCDebug("[REMOTE] %" PRIu64 "/%" PRIu64, this->_remote_flow_controller->current_offset(), + this->_remote_flow_controller->current_limit()); ink_assert(ret == 0); } this->_store_frame(buf, len, retransmittable, current_packet_type, std::move(frame)); @@ -1319,8 +1329,8 @@ QUICNetVConnection::_recv_and_ack(QUICPacketUPtr packet) } int ret = this->_local_flow_controller->update(this->_stream_manager->total_offset_received()); - Debug("quic_flow_ctrl", "Connection [%" PRIx64 "] [LOCAL] %" PRIu64 "/%" PRIu64, this->_peer_quic_connection_id.l64(), - this->_local_flow_controller->current_offset(), this->_local_flow_controller->current_limit()); + QUICFCDebug("[LOCAL] %" PRIu64 "/%" PRIu64, this->_local_flow_controller->current_offset(), + this->_local_flow_controller->current_limit()); if (ret != 0) { return QUICErrorUPtr(new QUICConnectionError(QUICTransErrorCode::FLOW_CONTROL_ERROR)); } @@ -1410,10 +1420,10 @@ QUICNetVConnection::_init_flow_control_params(const std::shared_ptr<const QUICTr this->_local_flow_controller->set_limit(local_initial_max_data); this->_remote_flow_controller->set_limit(remote_initial_max_data); - Debug("quic_flow_ctrl", "Connection [%" PRIx64 "] [LOCAL] %" PRIu64 "/%" PRIu64, this->_peer_quic_connection_id.l64(), - this->_local_flow_controller->current_offset(), this->_local_flow_controller->current_limit()); - Debug("quic_flow_ctrl", "Connection [%" PRIx64 "] [REMOTE] %" PRIu64 "/%" PRIu64, this->_peer_quic_connection_id.l64(), - this->_remote_flow_controller->current_offset(), this->_remote_flow_controller->current_limit()); + QUICFCDebug("[LOCAL] %" PRIu64 "/%" PRIu64, this->_local_flow_controller->current_offset(), + this->_local_flow_controller->current_limit()); + QUICFCDebug("[REMOTE] %" PRIu64 "/%" PRIu64, this->_remote_flow_controller->current_offset(), + this->_remote_flow_controller->current_limit()); } void @@ -1451,7 +1461,7 @@ QUICNetVConnection::_dequeue_recv_packet(QUICPacketCreationResult &result) // FIXME src connection id could be zero ? if so, check packet header type. if (src_cid != QUICConnectionId::ZERO()) { if (this->_peer_quic_connection_id != src_cid) { - this->_peer_quic_connection_id = src_cid; + this->_update_peer_cid(src_cid); } } } @@ -1752,3 +1762,21 @@ QUICNetVConnection::_validate_new_path() ink_hrtime rto = this->_loss_detector->current_rto_period(); this->_schedule_path_validation_timeout(3 * rto); } + +void +QUICNetVConnection::_update_cids() +{ + snprintf(this->_cids_data, sizeof(this->_cids_data), "%08" PRIx32 "-%08" PRIx32 "", this->_peer_quic_connection_id.h32(), + this->_quic_connection_id.h32()); + + this->_cids = {this->_cids_data, sizeof(this->_cids_data)}; +} + +void +QUICNetVConnection::_update_peer_cid(const QUICConnectionId &new_cid) +{ + QUICConDebug("dcid: %08" PRIx32 " -> %08" PRIx32, this->_peer_quic_connection_id.h32(), new_cid.h32()); + + this->_peer_quic_connection_id = new_cid; + this->_update_cids(); +} diff --git a/iocore/net/quic/Mock.h b/iocore/net/quic/Mock.h index b713554..761e96f 100644 --- a/iocore/net/quic/Mock.h +++ b/iocore/net/quic/Mock.h @@ -169,6 +169,12 @@ public: return QUICFiveTuple(); } + std::string_view + cids() const override + { + return std::string_view("00000000-00000000"sv); + } + uint32_t transmit_packet(QUICPacketUPtr packet) override { diff --git a/iocore/net/quic/QUICConnection.h b/iocore/net/quic/QUICConnection.h index 1f7cd8f..2b4b5e1 100644 --- a/iocore/net/quic/QUICConnection.h +++ b/iocore/net/quic/QUICConnection.h @@ -39,6 +39,7 @@ public: virtual QUICConnectionId peer_connection_id() const = 0; virtual QUICConnectionId original_connection_id() const = 0; virtual QUICConnectionId connection_id() const = 0; + virtual std::string_view cids() const = 0; virtual const QUICFiveTuple five_tuple() const = 0; /* diff --git a/iocore/net/quic/QUICTypes.cc b/iocore/net/quic/QUICTypes.cc index 33a43e2..be89426 100644 --- a/iocore/net/quic/QUICTypes.cc +++ b/iocore/net/quic/QUICTypes.cc @@ -285,3 +285,9 @@ QUICConnectionId::l64() const } return v; } + +uint32_t +QUICConnectionId::h32() const +{ + return static_cast<uint32_t>(QUICIntUtil::read_nbytes_as_uint(this->_id, 4)); +} diff --git a/iocore/net/quic/QUICTypes.h b/iocore/net/quic/QUICTypes.h index abc8ea1..7b26777 100644 --- a/iocore/net/quic/QUICTypes.h +++ b/iocore/net/quic/QUICTypes.h @@ -245,6 +245,7 @@ public: * This is just for debugging. */ uint64_t l64() const; + uint32_t h32() const; uint8_t length() const; bool is_zero() const; -- To stop receiving notification emails like this one, please contact [email protected].
