Add srtt to TimeWaitConnectionInfo. Also add GFE_CODE_COUNT recording information when a packet is processed in time wait list. Logging only, not protected. PiperOrigin-RevId: 325331048 Change-Id: I97d32d7687a3f25c4d9599c51e838b6f2caca38e
diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc index 2ba39e2..f171610 100644 --- a/quic/core/quic_dispatcher.cc +++ b/quic/core/quic_dispatcher.cc
@@ -784,7 +784,8 @@ it->first, action, TimeWaitConnectionInfo( VersionHasIetfInvariantHeader(connection->transport_version()), - connection->termination_packets())); + connection->termination_packets(), + connection->sent_packet_manager().GetRttStats()->smoothed_rtt())); session_map_.erase(it); }
diff --git a/quic/core/quic_time_wait_list_manager.cc b/quic/core/quic_time_wait_list_manager.cc index 1a88048..575f079 100644 --- a/quic/core/quic_time_wait_list_manager.cc +++ b/quic/core/quic_time_wait_list_manager.cc
@@ -50,7 +50,15 @@ TimeWaitConnectionInfo::TimeWaitConnectionInfo( bool ietf_quic, std::vector<std::unique_ptr<QuicEncryptedPacket>>* termination_packets) - : ietf_quic(ietf_quic) { + : TimeWaitConnectionInfo(ietf_quic, + termination_packets, + QuicTime::Delta::Zero()) {} + +TimeWaitConnectionInfo::TimeWaitConnectionInfo( + bool ietf_quic, + std::vector<std::unique_ptr<QuicEncryptedPacket>>* termination_packets, + QuicTime::Delta srtt) + : ietf_quic(ietf_quic), srtt(srtt) { if (termination_packets != nullptr) { this->termination_packets.swap(*termination_packets); } @@ -132,6 +140,13 @@ // Increment the received packet count. ConnectionIdData* connection_data = &it->second; ++(connection_data->num_packets); + const QuicTime now = clock_->ApproximateNow(); + QuicTime::Delta delta = QuicTime::Delta::Zero(); + if (now > connection_data->time_added) { + delta = now - connection_data->time_added; + } + OnPacketReceivedForKnownConnection(connection_data->num_packets, delta, + connection_data->info.srtt); if (!ShouldSendResponse(connection_data->num_packets)) { QUIC_DLOG(INFO) << "Processing " << connection_id << " in time wait state: "
diff --git a/quic/core/quic_time_wait_list_manager.h b/quic/core/quic_time_wait_list_manager.h index 429566b..cf6a7ff 100644 --- a/quic/core/quic_time_wait_list_manager.h +++ b/quic/core/quic_time_wait_list_manager.h
@@ -32,6 +32,10 @@ TimeWaitConnectionInfo( bool ietf_quic, std::vector<std::unique_ptr<QuicEncryptedPacket>>* termination_packets); + TimeWaitConnectionInfo( + bool ietf_quic, + std::vector<std::unique_ptr<QuicEncryptedPacket>>* termination_packets, + QuicTime::Delta srtt); TimeWaitConnectionInfo(const TimeWaitConnectionInfo& other) = delete; TimeWaitConnectionInfo(TimeWaitConnectionInfo&& other) = default; @@ -40,6 +44,7 @@ bool ietf_quic; std::vector<std::unique_ptr<QuicEncryptedPacket>> termination_packets; + QuicTime::Delta srtt; }; // Maintains a list of all connection_ids that have been recently closed. A @@ -240,6 +245,12 @@ // false if the map is empty or the oldest connection has not expired. bool MaybeExpireOldestConnection(QuicTime expiration_time); + // Called when a packet is received for a connection in this time wait list. + virtual void OnPacketReceivedForKnownConnection( + int /*num_packets*/, + QuicTime::Delta /*delta*/, + QuicTime::Delta /*srtt*/) const {} + std::unique_ptr<QuicEncryptedPacket> BuildIetfStatelessResetPacket( QuicConnectionId connection_id);