Make QuicConnection to do reverse path validation based on IETF version instead of bool validate_client_addresses_. PiperOrigin-RevId: 538238187
diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc index c08ed47..f4974a2 100644 --- a/quiche/quic/core/http/end_to_end_test.cc +++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -2873,8 +2873,7 @@ // Send a request using the new socket. SendSynchronousBarRequestAndCheckResponse(); - if (!version_.HasIetfQuicFrames() || - !client_->client()->session()->connection()->validate_client_address()) { + if (!version_.HasIetfQuicFrames()) { return; } QuicConnection* client_connection = GetClientConnection(); @@ -3149,7 +3148,6 @@ TEST_P(EndToEndTest, ConnectionMigrationNewTokenForNewIp) { ASSERT_TRUE(Initialize()); if (!version_.HasIetfQuicFrames() || - !client_->client()->session()->connection()->validate_client_address() || GetQuicFlag(quic_enforce_strict_amplification_factor)) { return; } @@ -3476,8 +3474,7 @@ EXPECT_EQ(old_address.host(), new_address.host()); EXPECT_NE(old_address.port(), new_address.port()); - if (!version_.HasIetfQuicFrames() || - !GetClientConnection()->validate_client_address()) { + if (!version_.HasIetfQuicFrames()) { return; } @@ -5314,8 +5311,7 @@ TEST_P(EndToEndTest, ClientValidateNewNetwork) { ASSERT_TRUE(Initialize()); - if (!version_.HasIetfQuicFrames() || - !GetClientConnection()->validate_client_address()) { + if (!version_.HasIetfQuicFrames()) { return; } client_.reset(EndToEndTest::CreateQuicClient(nullptr)); @@ -5539,7 +5535,7 @@ // Client should have received a PATH_CHALLENGE. QuicConnection* client_connection = GetClientConnection(); ASSERT_TRUE(client_connection); - EXPECT_EQ(client_connection->validate_client_address() ? 1u : 0, + EXPECT_EQ(1u, client_connection->GetStats().num_connectivity_probing_received); server_thread_->Pause();
diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc index f78f11a..fc5e097 100644 --- a/quiche/quic/core/quic_connection.cc +++ b/quiche/quic/core/quic_connection.cc
@@ -641,14 +641,13 @@ if (config.HasClientRequestedIndependentOption(kINVC, perspective_)) { send_connection_close_for_invalid_version_ = true; } - validate_client_addresses_ = framer_.version().HasIetfQuicFrames(); // Having connection_migration_use_new_cid_ depends on the same set of flags // and connection option on both client and server sides has the advantage of: // 1) Less chance of skew in using new connection ID or not between client // and server in unit tests with random flag combinations. // 2) Client side's rollout can be protected by the same connection option. connection_migration_use_new_cid_ = - validate_client_addresses_ && + framer_.version().HasIetfQuicFrames() && GetQuicReloadableFlag(quic_connection_migration_use_new_cid_v2); if (connection_migration_use_new_cid_ && @@ -1681,21 +1680,6 @@ // Only respond to the 1st PATH_CHALLENGE in the packet. return true; } - if (!validate_client_addresses_) { - return OnPathChallengeFrameInternal(frame); - } - { - // TODO(danzh) inline OnPathChallengeFrameInternal() once - // validate_client_addresses_ is deprecated. - if (!OnPathChallengeFrameInternal(frame)) { - return false; - } - } - return connected_; -} - -bool QuicConnection::OnPathChallengeFrameInternal( - const QuicPathChallengeFrame& frame) { should_proactively_validate_peer_address_on_path_challenge_ = false; // UpdatePacketContent() may start reverse path validation. if (!UpdatePacketContent(PATH_CHALLENGE_FRAME)) { @@ -1706,8 +1690,8 @@ } // On the server side, send response to the source address of the current // incoming packet according to RFC9000. - // On the client side, send response to the default peer address which should - // be on an existing path with a pre-assigned a destination CID. + // On the client side, send response to the default peer address which + // should be on an existing path with a pre-assigned a destination CID. const QuicSocketAddress effective_peer_address_to_respond = perspective_ == Perspective::IS_CLIENT ? effective_peer_address() @@ -1720,37 +1704,40 @@ FindOnPathConnectionIds(last_received_packet_info_.destination_address, effective_peer_address_to_respond, &client_cid, &server_cid); - QuicPacketCreator::ScopedPeerAddressContext context( - &packet_creator_, direct_peer_address_to_respond, client_cid, server_cid, - connection_migration_use_new_cid_); - if (should_proactively_validate_peer_address_on_path_challenge_) { - // Conditions to proactively validate peer address: - // The perspective is server - // The PATH_CHALLENGE is received on an unvalidated alternative path. - // The connection isn't validating migrated peer address, which is of - // higher prority. - QUIC_DVLOG(1) << "Proactively validate the effective peer address " - << effective_peer_address_to_respond; - QUIC_CODE_COUNT_N(quic_kick_off_client_address_validation, 2, 6); - ValidatePath(std::make_unique<ReversePathValidationContext>( - default_path_.self_address, direct_peer_address_to_respond, - effective_peer_address_to_respond, this), - std::make_unique<ReversePathValidationResultDelegate>( - this, peer_address()), - PathValidationReason::kReversePathValidation); - } - has_path_challenge_in_current_packet_ = true; - MaybeUpdateAckTimeout(); - // Queue or send PATH_RESPONSE. - if (!SendPathResponse(frame.data_buffer, direct_peer_address_to_respond, - effective_peer_address_to_respond)) { - QUIC_CODE_COUNT(quic_failed_to_send_path_response); - } - // TODO(b/150095588): change the stats to - // num_valid_path_challenge_received. - ++stats_.num_connectivity_probing_received; + { + QuicPacketCreator::ScopedPeerAddressContext context( + &packet_creator_, direct_peer_address_to_respond, client_cid, + server_cid, connection_migration_use_new_cid_); + if (should_proactively_validate_peer_address_on_path_challenge_) { + // Conditions to proactively validate peer address: + // The perspective is server + // The PATH_CHALLENGE is received on an unvalidated alternative path. + // The connection isn't validating migrated peer address, which is of + // higher prority. + QUIC_DVLOG(1) << "Proactively validate the effective peer address " + << effective_peer_address_to_respond; + QUIC_CODE_COUNT_N(quic_kick_off_client_address_validation, 2, 6); + ValidatePath( + std::make_unique<ReversePathValidationContext>( + default_path_.self_address, direct_peer_address_to_respond, + effective_peer_address_to_respond, this), + std::make_unique<ReversePathValidationResultDelegate>(this, + peer_address()), + PathValidationReason::kReversePathValidation); + } + has_path_challenge_in_current_packet_ = true; + MaybeUpdateAckTimeout(); + // Queue or send PATH_RESPONSE. + if (!SendPathResponse(frame.data_buffer, direct_peer_address_to_respond, + effective_peer_address_to_respond)) { + QUIC_CODE_COUNT(quic_failed_to_send_path_response); + } + // TODO(b/150095588): change the stats to + // num_valid_path_challenge_received. + ++stats_.num_connectivity_probing_received; - // SendPathResponse() might cause connection to be closed. + // Flushing packet creator might cause connection to be closed. + } return connected_; } @@ -2710,7 +2697,7 @@ << sent_packet_manager_.GetLargestObserved() << ", highest_packet_sent_before_effective_peer_migration_ = " << highest_packet_sent_before_effective_peer_migration_; - if (!validate_client_addresses_ && + if (!framer_.version().HasIetfQuicFrames() && active_effective_peer_migration_type_ != NO_CHANGE && sent_packet_manager_.GetLargestObserved().IsInitialized() && (!highest_packet_sent_before_effective_peer_migration_.IsInitialized() || @@ -5116,7 +5103,7 @@ active_effective_peer_migration_type_ != PORT_CHANGE; active_effective_peer_migration_type_ = NO_CHANGE; ++stats_.num_validated_peer_migration; - if (!validate_client_addresses_) { + if (!framer_.version().HasIetfQuicFrames()) { return; } if (debug_visitor_ != nullptr) { @@ -5142,7 +5129,7 @@ // TODO(fayang): Currently, all peer address change type are allowed. Need to // add a method ShouldAllowPeerAddressChange(PeerAddressChangeType type) to // determine whether |type| is allowed. - if (!validate_client_addresses_) { + if (!framer_.version().HasIetfQuicFrames()) { if (type == NO_CHANGE) { QUIC_BUG(quic_bug_10511_35) << "EffectivePeerMigration started without address change."; @@ -5362,7 +5349,7 @@ visitor_->OnConnectionMigration(active_effective_peer_migration_type_); if (active_effective_peer_migration_type_ != PORT_CHANGE && active_effective_peer_migration_type_ != IPV4_SUBNET_CHANGE && - !validate_client_addresses_) { + !framer_.version().HasIetfQuicFrames()) { sent_packet_manager_.OnConnectionMigration(/*reset_send_algorithm=*/false); } } @@ -5445,19 +5432,7 @@ << "The peer is probing a new path with effective peer address " << current_effective_peer_address << ", self address " << last_received_packet_info_.destination_address; - if (!validate_client_addresses_) { - QuicConnectionId client_cid; - absl::optional<StatelessResetToken> stateless_reset_token; - FindMatchingOrNewClientConnectionIdOrToken( - default_path_, alternative_path_, - last_received_packet_info_.destination_connection_id, &client_cid, - &stateless_reset_token); - alternative_path_ = - PathState(last_received_packet_info_.destination_address, - current_effective_peer_address, client_cid, - last_received_packet_info_.destination_connection_id, - stateless_reset_token); - } else if (!default_path_.validated) { + if (!default_path_.validated) { // Skip reverse path validation because either handshake hasn't // completed or the connection is validating the default path. Using // PATH_CHALLENGE to validate alternative client address before @@ -5585,9 +5560,6 @@ // non-probing frame. // TODO(fayang): When multiple packet number spaces is supported, only // start peer migration for the application data. - if (!validate_client_addresses_) { - UpdatePeerAddress(last_received_packet_info_.source_address); - } StartEffectivePeerMigration(current_effective_peer_migration_type_); } else { UpdatePeerAddress(last_received_packet_info_.source_address); @@ -7300,7 +7272,7 @@ std::unique_ptr<SendAlgorithmInterface> QuicConnection::OnPeerIpAddressChanged() { - QUICHE_DCHECK(validate_client_addresses_); + QUICHE_DCHECK(framer_.version().HasIetfQuicFrames()); std::unique_ptr<SendAlgorithmInterface> old_send_algorithm = sent_packet_manager_.OnConnectionMigration( /*reset_send_algorithm=*/true);
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h index 0cd4394..e1832ab 100644 --- a/quiche/quic/core/quic_connection.h +++ b/quiche/quic/core/quic_connection.h
@@ -1260,8 +1260,6 @@ // session map. virtual std::vector<QuicConnectionId> GetActiveServerConnectionIds() const; - bool validate_client_address() const { return validate_client_addresses_; } - bool connection_migration_use_new_cid() const { return connection_migration_use_new_cid_; } @@ -1420,10 +1418,6 @@ default_path_.bytes_received_before_address_validation += length; } - void set_validate_client_addresses(bool value) { - validate_client_addresses_ = value; - } - bool defer_send_in_response_to_packets() const { return defer_send_in_response_to_packets_; } @@ -1969,11 +1963,6 @@ // validated. bool IsReceivedPeerAddressValidated() const; - // Called after receiving PATH_CHALLENGE. Update packet content and - // alternative path state if the current packet is from a non-default path. - // Return true if framer should continue processing the packet. - bool OnPathChallengeFrameInternal(const QuicPathChallengeFrame& frame); - // Check the state of the multi-port alternative path and initiate path // migration. void MaybeMigrateToMultiPortPath();
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc index 8822a9a..fae2512 100644 --- a/quiche/quic/core/quic_connection_test.cc +++ b/quiche/quic/core/quic_connection_test.cc
@@ -1774,7 +1774,7 @@ EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt()); EXPECT_EQ(1u, manager_->GetConsecutivePtoCount()); EXPECT_EQ(manager_->GetSendAlgorithm(), send_algorithm_); - if (connection_.validate_client_address()) { + if (version().HasIetfQuicFrames()) { EXPECT_EQ(NO_CHANGE, connection_.active_effective_peer_migration_type()); EXPECT_EQ(1u, connection_.GetStats().num_validated_peer_migration); EXPECT_EQ(1u, connection_.num_linkable_client_migration()); @@ -1783,7 +1783,7 @@ TEST_P(QuicConnectionTest, PeerIpAddressChangeAtServer) { set_perspective(Perspective::IS_SERVER); - if (!connection_.validate_client_address() || + if (!version().SupportsAntiAmplificationLimit() || GetQuicFlag(quic_enforce_strict_amplification_factor)) { return; } @@ -2056,7 +2056,7 @@ EXPECT_EQ(kPeerAddress, connection_.peer_address()); EXPECT_EQ(kNewEffectivePeerAddress, connection_.effective_peer_address()); EXPECT_EQ(kPeerAddress, writer_->last_write_peer_address()); - if (connection_.validate_client_address()) { + if (GetParam().version.HasIetfQuicFrames()) { EXPECT_EQ(NO_CHANGE, connection_.active_effective_peer_migration_type()); EXPECT_EQ(1u, connection_.GetStats().num_validated_peer_migration); EXPECT_EQ(1u, connection_.num_linkable_client_migration()); @@ -2069,7 +2069,7 @@ connection_.ReturnEffectivePeerAddressForNextPacket(kNewEffectivePeerAddress); EXPECT_CALL(visitor_, OnConnectionMigration(PORT_CHANGE)).Times(0); - if (!connection_.validate_client_address()) { + if (!GetParam().version.HasIetfQuicFrames()) { // ack_frame is used to complete the migration started by the last packet, // we need to make sure a new migration does not start after the previous // one is completed. @@ -2095,7 +2095,7 @@ kFinalPeerAddress, ENCRYPTION_FORWARD_SECURE); EXPECT_EQ(kFinalPeerAddress, connection_.peer_address()); EXPECT_EQ(kNewerEffectivePeerAddress, connection_.effective_peer_address()); - if (connection_.validate_client_address()) { + if (GetParam().version.HasIetfQuicFrames()) { EXPECT_EQ(NO_CHANGE, connection_.active_effective_peer_migration_type()); EXPECT_EQ(send_algorithm_, connection_.sent_packet_manager().GetSendAlgorithm()); @@ -2110,7 +2110,7 @@ connection_.ReturnEffectivePeerAddressForNextPacket( kNewestEffectivePeerAddress); EXPECT_CALL(visitor_, OnConnectionMigration(IPV6_TO_IPV4_CHANGE)).Times(1); - if (!connection_.validate_client_address()) { + if (!GetParam().version.HasIetfQuicFrames()) { EXPECT_CALL(*send_algorithm_, OnConnectionMigration()).Times(1); } ProcessFramePacketWithAddresses(MakeCryptoFrame(), kSelfAddress, @@ -2119,7 +2119,7 @@ EXPECT_EQ(kNewestEffectivePeerAddress, connection_.effective_peer_address()); EXPECT_EQ(IPV6_TO_IPV4_CHANGE, connection_.active_effective_peer_migration_type()); - if (connection_.validate_client_address()) { + if (GetParam().version.HasIetfQuicFrames()) { EXPECT_NE(send_algorithm_, connection_.sent_packet_manager().GetSendAlgorithm()); EXPECT_EQ(kFinalPeerAddress, writer_->last_write_peer_address()); @@ -2586,15 +2586,13 @@ .Times(1); } else { EXPECT_CALL(visitor_, OnPacketReceived(_, _, _)).Times(0); - if (connection_.validate_client_address()) { - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) - .Times(AtLeast(1u)) - .WillOnce(Invoke([&]() { - EXPECT_EQ(1u, writer_->path_challenge_frames().size()); - EXPECT_EQ(1u, writer_->path_response_frames().size()); - payload = writer_->path_challenge_frames().front().data_buffer; - })); - } + EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) + .Times(AtLeast(1u)) + .WillOnce(Invoke([&]() { + EXPECT_EQ(1u, writer_->path_challenge_frames().size()); + EXPECT_EQ(1u, writer_->path_response_frames().size()); + payload = writer_->path_challenge_frames().front().data_buffer; + })); } // Process a probing packet from a new peer address on server side // is effectively receiving a connectivity probing. @@ -2636,24 +2634,7 @@ EXPECT_EQ(2 * received->length(), QuicConnectionPeer::BytesReceivedOnAlternativePath(&connection_)); - bool success = false; - if (!connection_.validate_client_address()) { - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) - .Times(AtLeast(1u)) - .WillOnce(Invoke([&]() { - EXPECT_EQ(1u, writer_->path_challenge_frames().size()); - payload = writer_->path_challenge_frames().front().data_buffer; - })); - - connection_.ValidatePath( - std::make_unique<TestQuicPathValidationContext>( - connection_.self_address(), kNewPeerAddress, writer_.get()), - std::make_unique<TestValidationResultDelegate>( - &connection_, connection_.self_address(), kNewPeerAddress, - &success), - PathValidationReason::kReasonUnknown); - } - EXPECT_EQ((connection_.validate_client_address() ? 2 : 3) * bytes_sent, + EXPECT_EQ(2 * bytes_sent, QuicConnectionPeer::BytesSentOnAlternativePath(&connection_)); QuicFrames frames; frames.push_back(QuicFrame(QuicPathResponseFrame(99, payload))); @@ -2662,9 +2643,7 @@ ENCRYPTION_FORWARD_SECURE); EXPECT_LT(2 * received->length(), QuicConnectionPeer::BytesReceivedOnAlternativePath(&connection_)); - if (connection_.validate_client_address()) { - EXPECT_TRUE(QuicConnectionPeer::IsAlternativePathValidated(&connection_)); - } + EXPECT_TRUE(QuicConnectionPeer::IsAlternativePathValidated(&connection_)); // Receiving another probing packet from a newer address with a different // port shouldn't trigger another reverse path validation. QuicSocketAddress kNewerPeerAddress(QuicIpAddress::Loopback4(), @@ -2676,8 +2655,7 @@ clock_.Now())); ProcessReceivedPacket(kSelfAddress, kNewerPeerAddress, *received); EXPECT_FALSE(connection_.HasPendingPathValidation()); - EXPECT_EQ(connection_.validate_client_address(), - QuicConnectionPeer::IsAlternativePathValidated(&connection_)); + EXPECT_TRUE(QuicConnectionPeer::IsAlternativePathValidated(&connection_)); } // Process another packet with the old peer address on server side will not @@ -11630,13 +11608,11 @@ // This packet isn't sent actually, instead it is buffered in the // connection. EXPECT_EQ(1u, writer_->packets_write_attempts()); - if (connection_.validate_client_address()) { - EXPECT_EQ(1u, writer_->path_response_frames().size()); - EXPECT_EQ(0, - memcmp(&path_challenge_payload, - &writer_->path_response_frames().front().data_buffer, - sizeof(path_challenge_payload))); - } + EXPECT_EQ(1u, writer_->path_response_frames().size()); + EXPECT_EQ(0, + memcmp(&path_challenge_payload, + &writer_->path_response_frames().front().data_buffer, + sizeof(path_challenge_payload))); EXPECT_EQ(1u, writer_->path_challenge_frames().size()); EXPECT_EQ(1u, writer_->padding_frames().size()); EXPECT_EQ(kNewPeerAddress, writer_->last_write_peer_address()); @@ -11645,25 +11621,13 @@ // Only one PATH_CHALLENGE should be sent out. EXPECT_EQ(0u, writer_->path_challenge_frames().size()); })); - bool success = false; - if (connection_.validate_client_address()) { - // Receiving a PATH_CHALLENGE from the new peer address should trigger - // address validation. - QuicFrames frames; - frames.push_back( - QuicFrame(QuicPathChallengeFrame(0, path_challenge_payload))); - ProcessFramesPacketWithAddresses(frames, kSelfAddress, kNewPeerAddress, - ENCRYPTION_FORWARD_SECURE); - } else { - // Manually start to validate the new peer address. - connection_.ValidatePath( - std::make_unique<TestQuicPathValidationContext>( - connection_.self_address(), kNewPeerAddress, writer_.get()), - std::make_unique<TestValidationResultDelegate>( - &connection_, connection_.self_address(), kNewPeerAddress, - &success), - PathValidationReason::kReasonUnknown); - } + // Receiving a PATH_CHALLENGE from the new peer address should trigger address + // validation. + QuicFrames frames; + frames.push_back( + QuicFrame(QuicPathChallengeFrame(0, path_challenge_payload))); + ProcessFramesPacketWithAddresses(frames, kSelfAddress, kNewPeerAddress, + ENCRYPTION_FORWARD_SECURE); EXPECT_EQ(1u, writer_->packets_write_attempts()); // Try again with the new socket blocked from the beginning. The 2nd @@ -11877,8 +11841,7 @@ /*port=*/23456); EXPECT_CALL(visitor_, OnConnectionMigration(IPV6_TO_IPV4_CHANGE)); - EXPECT_CALL(*send_algorithm_, OnConnectionMigration()) - .Times(connection_.validate_client_address() ? 0u : 1u); + EXPECT_CALL(*send_algorithm_, OnConnectionMigration()).Times(0u); EXPECT_CALL(visitor_, OnStreamFrame(_)) .WillOnce(Invoke([=](const QuicStreamFrame& frame) { // Send some data on the stream. The STREAM_FRAME should be built into @@ -11888,8 +11851,7 @@ return notifier_.WriteOrBufferData(frame.stream_id, data.length(), NO_FIN); })); - EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) - .Times(connection_.validate_client_address() ? 0u : 1u); + EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0u); ProcessFramesPacketWithAddresses(frames, kSelfAddress, kNewPeerAddress, ENCRYPTION_FORWARD_SECURE); @@ -11897,20 +11859,16 @@ // PATH_RESPONSE_FRAME. EXPECT_EQ(1u, writer_->stream_frames().size()); EXPECT_EQ(1u, writer_->path_response_frames().size()); - EXPECT_EQ(connection_.validate_client_address() ? 1u : 0u, - writer_->path_challenge_frames().size()); + EXPECT_EQ(1u, writer_->path_challenge_frames().size()); // The final check is to ensure that the random data in the response // matches the random data from the challenge. EXPECT_EQ(0, memcmp(path_frame_buffer.data(), &(writer_->path_response_frames().front().data_buffer), sizeof(path_frame_buffer))); - EXPECT_EQ(connection_.validate_client_address() ? 1u : 0u, - writer_->path_challenge_frames().size()); + EXPECT_EQ(1u, writer_->path_challenge_frames().size()); EXPECT_EQ(1u, writer_->padding_frames().size()); EXPECT_EQ(kNewPeerAddress, writer_->last_write_peer_address()); - if (connection_.validate_client_address()) { - EXPECT_TRUE(connection_.HasPendingPathValidation()); - } + EXPECT_TRUE(connection_.HasPendingPathValidation()); } TEST_P(QuicConnectionTest, ReceiveStreamFrameFollowingPathChallenge) { @@ -11939,16 +11897,14 @@ memcmp(path_frame_buffer.data(), &(writer_->path_response_frames().front().data_buffer), sizeof(path_frame_buffer))); - EXPECT_EQ(connection_.validate_client_address() ? 1u : 0u, - writer_->path_challenge_frames().size()); + EXPECT_EQ(1u, writer_->path_challenge_frames().size()); EXPECT_EQ(1u, writer_->padding_frames().size()); EXPECT_EQ(kNewPeerAddress, writer_->last_write_peer_address()); received_packet_size = QuicConnectionPeer::BytesReceivedOnAlternativePath(&connection_); })); EXPECT_CALL(visitor_, OnConnectionMigration(IPV6_TO_IPV4_CHANGE)); - EXPECT_CALL(*send_algorithm_, OnConnectionMigration()) - .Times(connection_.validate_client_address() ? 0u : 1u); + EXPECT_CALL(*send_algorithm_, OnConnectionMigration()).Times(0u); EXPECT_CALL(visitor_, OnStreamFrame(_)) .WillOnce(Invoke([=](const QuicStreamFrame& frame) { // Send some data on the stream. The STREAM_FRAME should be built into a @@ -11961,9 +11917,6 @@ ProcessFramesPacketWithAddresses(frames, kSelfAddress, kNewPeerAddress, ENCRYPTION_FORWARD_SECURE); - if (!connection_.validate_client_address()) { - return; - } EXPECT_TRUE(connection_.HasPendingPathValidation()); EXPECT_EQ(0u, QuicConnectionPeer::BytesReceivedOnAlternativePath(&connection_)); @@ -14224,7 +14177,7 @@ TEST_P(QuicConnectionTest, ProbedOnAnotherPathAfterPeerIpAddressChangeAtServer) { PathProbeTestInit(Perspective::IS_SERVER); - if (!connection_.validate_client_address()) { + if (!version().HasIetfQuicFrames()) { return; } @@ -14987,7 +14940,7 @@ // Regression test for b/182571515 TEST_P(QuicConnectionTest, LostDataThenGetAcknowledged) { set_perspective(Perspective::IS_SERVER); - if (!connection_.validate_client_address() || + if (!version().SupportsAntiAmplificationLimit() || GetQuicFlag(quic_enforce_strict_amplification_factor)) { return; } @@ -15398,7 +15351,7 @@ // Regression test for b/201643321. TEST_P(QuicConnectionTest, FailedToRetransmitShlo) { - if (!version().HasIetfQuicFrames() || + if (!version().SupportsAntiAmplificationLimit() || GetQuicFlag(quic_enforce_strict_amplification_factor)) { return; }