gfe-relnote: In QUIC, Enable multiple packet number support in uber_received_packet_manager. Not used yet, not protected.
PiperOrigin-RevId: 239821420
Change-Id: Iae12d214d8ecf65dfe4918f12e528ea1001ce5f2
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index f213d35..2c7df67 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -357,6 +357,7 @@
GetQuicReloadableFlag(quic_validate_packet_number_post_decryption)),
use_uber_received_packet_manager_(
received_packet_manager_.decide_when_to_send_acks() &&
+ validate_packet_number_post_decryption_ &&
GetQuicReloadableFlag(quic_use_uber_received_packet_manager)) {
if (ack_mode_ == ACK_DECIMATION) {
QUIC_RELOADABLE_FLAG_COUNT(quic_enable_ack_decimation);
@@ -825,7 +826,7 @@
const bool is_awaiting =
use_uber_received_packet_manager_
? uber_received_packet_manager_.IsAwaitingPacket(
- header.packet_number)
+ last_decrypted_packet_level_, header.packet_number)
: received_packet_manager_.IsAwaitingPacket(header.packet_number);
if (!is_awaiting) {
if (framer_.IsIetfStatelessResetPacket(header)) {
@@ -959,7 +960,8 @@
// frames, since the processing may result in sending a bundled ack.
if (use_uber_received_packet_manager_) {
uber_received_packet_manager_.RecordPacketReceived(
- last_header_, time_of_last_received_packet_);
+ last_decrypted_packet_level_, last_header_,
+ time_of_last_received_packet_);
} else {
received_packet_manager_.RecordPacketReceived(
last_header_, time_of_last_received_packet_);
@@ -1167,7 +1169,8 @@
largest_seen_packet_with_stop_waiting_ = last_header_.packet_number;
if (use_uber_received_packet_manager_) {
- uber_received_packet_manager_.DontWaitForPacketsBefore(frame.least_unacked);
+ uber_received_packet_manager_.DontWaitForPacketsBefore(
+ last_decrypted_packet_level_, frame.least_unacked);
} else {
received_packet_manager_.DontWaitForPacketsBefore(frame.least_unacked);
}
@@ -1490,9 +1493,9 @@
if (received_packet_manager_.decide_when_to_send_acks()) {
if (use_uber_received_packet_manager_) {
uber_received_packet_manager_.MaybeUpdateAckTimeout(
- should_last_packet_instigate_acks_, last_header_.packet_number,
- time_of_last_received_packet_, clock_->ApproximateNow(),
- sent_packet_manager_.GetRttStats(),
+ should_last_packet_instigate_acks_, last_decrypted_packet_level_,
+ last_header_.packet_number, time_of_last_received_packet_,
+ clock_->ApproximateNow(), sent_packet_manager_.GetRttStats(),
sent_packet_manager_.delayed_ack_time());
} else {
received_packet_manager_.MaybeUpdateAckTimeout(
@@ -1656,6 +1659,7 @@
const QuicFrame QuicConnection::GetUpdatedAckFrame() {
if (use_uber_received_packet_manager_) {
return uber_received_packet_manager_.GetUpdatedAckFrame(
+ QuicUtils::GetPacketNumberSpace(encryption_level_),
clock_->ApproximateNow());
}
return received_packet_manager_.GetUpdatedAckFrame(clock_->ApproximateNow());
@@ -1961,7 +1965,8 @@
if (received_packet_manager_.decide_when_to_send_acks()) {
const QuicTime ack_timeout =
use_uber_received_packet_manager_
- ? uber_received_packet_manager_.GetAckTimeout()
+ ? uber_received_packet_manager_.GetAckTimeout(
+ QuicUtils::GetPacketNumberSpace(encryption_level_))
: received_packet_manager_.ack_timeout();
if (ack_timeout.IsInitialized() &&
ack_timeout <= clock_->ApproximateNow()) {
@@ -2088,7 +2093,8 @@
if (validate_packet_number_post_decryption_) {
const bool is_awaiting =
use_uber_received_packet_manager_
- ? uber_received_packet_manager_.IsAwaitingPacket(packet_number)
+ ? uber_received_packet_manager_.IsAwaitingPacket(
+ last_decrypted_packet_level_, packet_number)
: received_packet_manager_.IsAwaitingPacket(packet_number);
if (!is_awaiting) {
QUIC_DLOG(INFO) << ENDPOINT << "Packet " << packet_number
@@ -2273,7 +2279,9 @@
if (received_packet_manager_.decide_when_to_send_acks()) {
if (use_uber_received_packet_manager_) {
has_pending_ack =
- uber_received_packet_manager_.GetAckTimeout().IsInitialized();
+ uber_received_packet_manager_
+ .GetAckTimeout(QuicUtils::GetPacketNumberSpace(encryption_level_))
+ .IsInitialized();
} else {
has_pending_ack = received_packet_manager_.ack_timeout().IsInitialized();
}
@@ -3271,7 +3279,9 @@
if (connection_->received_packet_manager_.decide_when_to_send_acks()) {
const QuicTime ack_timeout =
connection_->use_uber_received_packet_manager_
- ? connection_->uber_received_packet_manager_.GetAckTimeout()
+ ? connection_->uber_received_packet_manager_.GetAckTimeout(
+ QuicUtils::GetPacketNumberSpace(
+ connection_->encryption_level_))
: connection_->received_packet_manager_.ack_timeout();
if (ack_timeout.IsInitialized()) {
if (ack_timeout <= connection_->clock_->ApproximateNow() &&
@@ -3597,7 +3607,7 @@
bool QuicConnection::ack_frame_updated() const {
if (use_uber_received_packet_manager_) {
- return uber_received_packet_manager_.AckFrameUpdated();
+ return uber_received_packet_manager_.IsAckFrameUpdated();
}
return received_packet_manager_.ack_frame_updated();
}
@@ -3746,6 +3756,7 @@
if (no_stop_waiting_frames_) {
if (use_uber_received_packet_manager_) {
uber_received_packet_manager_.DontWaitForPacketsBefore(
+ last_decrypted_packet_level_,
sent_packet_manager_.largest_packet_peer_knows_is_acked());
} else {
received_packet_manager_.DontWaitForPacketsBefore(
@@ -3818,7 +3829,7 @@
num_packets_received_since_last_ack_sent_ = 0;
if (received_packet_manager_.decide_when_to_send_acks()) {
if (use_uber_received_packet_manager_) {
- uber_received_packet_manager_.ResetAckStates();
+ uber_received_packet_manager_.ResetAckStates(encryption_level_);
} else {
received_packet_manager_.ResetAckStates();
}
@@ -3905,7 +3916,8 @@
QuicPacketNumber QuicConnection::GetLargestReceivedPacket() const {
if (use_uber_received_packet_manager_) {
- return uber_received_packet_manager_.GetLargestObserved();
+ return uber_received_packet_manager_.GetLargestObserved(
+ last_decrypted_packet_level_);
}
return received_packet_manager_.GetLargestObserved();
}