summaryrefslogtreecommitdiffstats
path: root/net/quic/congestion_control/hybrid_slow_start.h
Commit message (Collapse)AuthorAgeFilesLines
* Landing Recent QUIC changes until 2/7/2016 10:04 UTCfayang2016-02-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Define commonly used QUIC enums as int8_t to save memory and fix a static_assert. No functional change. Merge internal change: 113961942 https://codereview.chromium.org/1696523002/ Fix references to global symbols in base/log_severity.h. Merge internal change: 114061047 https://codereview.chromium.org/1685363003/ QUIC |ProofSource|: don't retain ownership of |out_certs|. The |ProofSource| API had returned a pointer to data of which it retained ownership. This is incompatible with the assumption that the |ProofSource| object can be safely destructed. Taking it on faith that there is a sound performance reason to avoid a copy in this case, this CL instead introduces a reference count (using shared_ptr) for the data in question. change QUIC proof source to use a reference-counted pointer to return certificates. No functional change expected. Merge internal change: 113980698 https://codereview.chromium.org/1689233003/ Use emplace_back instead of push_back in QUIC now that Chromium style guide allows it. Merge internal change: 113963690 https://codereview.chromium.org/1688193002/ Remove QuicSession::CloseConnectionWithDetails and call connection()->SendConnectionCloseWithDetails directly. QuicSession::CloseConnectionWithDetails is not pulling its weight as a helper method: hardly saves any characters, just means there's yet another path to closing a connection. Merge internal change: 113947119 https://codereview.chromium.org/1684263003/ QUIC: Send a connection close packet in response to a packet lacking version flag before version negotiated. Merge internal change: 113942068 https://codereview.chromium.org/1681223005/ Limits QUIC's local IP/port change verification to server-side. Since connection migration is currently designed to be client-initiated, this CL allows local IP and/or port changes at a client. Merge internal change: 113922841 https://codereview.chromium.org/1689823002/ Resets QUIC's RTO and TLP counts on connection migration. RTO and TLP counts are path-related SentPacketManager variables, and should be reset when the peer's address changes. This is particularly important at the client when early connection migration may be triggered via timeouts. Merge internal change: 113892226 https://codereview.chromium.org/1688683004/ Add keying material exporter to QUIC for token binding adds unused (for now) method to QuicCryptoStream Merge internal change: 113887857 https://codereview.chromium.org/1680423003/ Adding a QUIC_BUG stream-existence sanity check to the opt build Merge internal change: 113883554 https://codereview.chromium.org/1691593002/ Fix the comment for QUIC_CONNECTION_CANCELLED which is currently unused, but will be used by Chrome soon. n/a - comment only Merge internal change: 113877479 https://codereview.chromium.org/1685253002/ removing a log line which never should have been checked in Merge internal change: 113853229 https://codereview.chromium.org/1682373004/ Moving priorities out of shared QUIC !SPDY code Finishing the clean-up started in November (whew!) to pull priority APIs out of the base QUIC libraries. Should be a functional no-op since we stopped using the priority field when we switched to the new write blocked list. This whole set of changes should make moving to the H2 style dependency tree somewhat simpler. Merge internal change: 113848994 https://codereview.chromium.org/1680243004/ Move DeterminePeerAddressChangeType() from QuicConnection to QuicUtils. Merge internal change: 113774550 https://codereview.chromium.org/1687883002/ Deprecate FLAGS_quic_limit_max_cwnd. Merge internal change: 113769379 https://codereview.chromium.org/1688763002/ Add a QUIC_BUG to QuicCryptoServerStream::OnHandshakeMessage. Merge internal change: 113746027 https://codereview.chromium.org/1690573004/ Re-order logic and variable declarations in QUIC bandwidth resumption logic. No behavior change. Merge internal change: 113737889 https://codereview.chromium.org/1686853002/ Reorder QUIC struct fields based on ClassLayoutOptimizer. No functional change. Merge internal change: 113704971 https://codereview.chromium.org/1683913002/ Add an enum to replace a boolean "from_peer" argument when closing QUIC connections. No behavior change. It appears that nothing in google3 uses the old from_peer argument, but I'm planning on using it in an upcoming CL which will log connection closes in TransportConnectionStats. Merge internal change: 113669690 https://codereview.chromium.org/1687633002/ Rename CloseConnection to OnUnrecoverableError in the QuicPacketCreator visitor. No behavior change. Merge internal change: 113636823 https://codereview.chromium.org/1682153002/ Factor out common TCP sender functionality into a new TcpCubicSenderBase class from TcpCubicSender and TcpCubicBytesSender. Merge internal change: 113634514 https://codereview.chromium.org/1684723002/ Make CacheNetworkParameters logging unconditional. protected by FLAGS_quic_log_received_parameters Previously, we would only log the CachedNetworkParameters received from the client to the TransportConnectionStats when we actually USED the parameters to do bandwidth-resumption. Bandwidth-resumption is currently disabled, so we have no insight into what these parameters contain. The client is sending them. We're just not recording them to the log. In this flag-protected CL, we will unconditionally log the received CachedNetworkParameters to the TransportConnectionStats. This way we can study them (if we want), to see how we might use them in the future. Merge internal change: 113633148 https://codereview.chromium.org/1682553002/ Remove the unused QUIC method LossAlgorithmInterface::DetectLostPackets. n/a(Unused code) Merge internal change: 113630418 https://codereview.chromium.org/1680743004/ Drop non-awaited revived packet. Merge internal change: 113574317 https://codereview.chromium.org/1681753002/ deprecating FLAGS_quic_write_blocked_list Merge internal change: 113549613 https://codereview.chromium.org/1678873003/ Add some log message context to QUIC_BUG in received_packet_manager Merge internal change: 113548899 https://codereview.chromium.org/1681493003/ Minor refactor to QUIC's HybridSlowStart. No functional change. Merge internal change: 113542148 https://codereview.chromium.org/1678933002/ Add wtrace agent to quic test_tools visibility and TAP test patterns n/a (visibility and TAP pattern changes only) Merge internal change: 113520970 https://codereview.chromium.org/1681493003/ BUG= Review URL: https://codereview.chromium.org/1694813003 Cr-Commit-Position: refs/heads/master@{#375325}
* Switch to standard integer types in net/.Avi Drissman2015-12-201-2/+4
| | | | | | | | | BUG=488550 TBR=mmenke@chromium.org Review URL: https://codereview.chromium.org/1535363003 . Cr-Commit-Position: refs/heads/master@{#366297}
* Ran clang-format on all .h/.cc files in net/quic. No behavior change.rjshade2015-12-181-3/+1
| | | | | | | | | | find ./net/quic/ \( -iname \*.h -o -iname \*.cc \) -exec clang-format -i --style="{BasedOnStyle: Chromium, Standard: Cpp11}" {} \; BUG= Review URL: https://codereview.chromium.org/1535113003 Cr-Commit-Position: refs/heads/master@{#366144}
* Landing Recent QUIC changes until 8/24/2015 18:33 UTC.rtenneti2015-08-281-9/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | relnote: Rename "sequence number" to "packet number" in the QUIC code. Merge internal change: 101368603 https://codereview.chromium.org/1321603002/ relnote: Fixes a crash bug where when two packets were sent when write blocked, the second would sometimes succeed and then writes occurred out of order. Merge internal change: 101355922 https://codereview.chromium.org/1313373003/ relnote: Update QUIC's fec_alarm with a 1ms granularity to avoid setting it so often. Setting this alarm currently consumes over 1% of CPU on bandaid, even though FEC is disabled for most users. Merge internal change: 101213426 https://codereview.chromium.org/1322433004/ QUIC - small changes to keep the code similar to internal source. Internal release not: Add required header file and fully qualify std::max() and std::min(). These are currently implicitly included through base/scoped_ptr.h, which is going away. relnote: n/a (compilation fix in QUIC strike register) Merge internal change: 101113179 https://codereview.chromium.org/1315253002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/1317113003 Cr-Commit-Position: refs/heads/master@{#346090}
* Remove unused private fields in net/.mlamouri2015-07-061-3/+1
| | | | | | | | | | This needed in order to use "= delete" for DISALLOW_COPY_AND_ASSIGN. BUG=447445 Review URL: https://codereview.chromium.org/1224623002 Cr-Commit-Position: refs/heads/master@{#337450}
* Land Recent QUIC Changes until 04/30/2015.rtenneti2015-05-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Deprecate --FLAGS_quic_do_not_retransmit_for_reset_streams. Merge internal change: 92249265 https://codereview.chromium.org/1111703003/ Remove QUIC v23 This means that the headers stream only speaks SPDY/4. This removes the congestion feedback tag vector from the handshake. Merge internal change: 92245766 https://codereview.chromium.org/1115883002/ Fix a minor bug in TcpCubicSender in the conversion from packets to bytes. Merge internal change: 92010035 https://codereview.chromium.org/1103163006/ Don't calculate or send bandwidth resumption source address tokens when the bandwidth resumption experiment is disabled. Estimated to save 0.5% of CPU on bandaid. Merge internal change: 92003353 https://codereview.chromium.org/1113833003/ Allocate encrypted packets into a buffer on the stack. Estimated to save ~4% of CPU. Merge internal change: 92000931 https://codereview.chromium.org/1115873002/ Flag-protected. Add SREJ support to quic crypto server config. ProcessClientHello and BuildRejection now take two extra arugments, indicating a) that the server should generate stateless rejects and b) if stateless, the new connection ID that should be added to the message. In theory, every reject emitted could be a stateless reject. The tests have been modified with two new parameters: 1. Stateless reject support enabled via flag. 2. Server configured to emit stateless rejects. They then check to ensure that, if enabled, the reject is formatted correctly. In chromium, set FLAGS_enable_quic_stateless_reject_support to false. Merge internal change: 91946386 https://codereview.chromium.org/1112693005/ Break out QUIC's balsa-specific SPDY utilities from SpdyUtils to SpdyBalsaUtils to help ease the process of merging to Chrome. Merge internal change: 91854176 https://codereview.chromium.org/1112923002/ Prevent a crash when the stream frame is NULL. Log an detailed DFATAL and close the connection instead. Merge internal change: 91820383 https://codereview.chromium.org/1111413004/ Doing a better job of cleaning up quic udp proxy state. Fully tearing down the client we use for probing connectivity to core when we do UDP proxying, while preserving the file descriptor. Chrome specific change: make CleanUpUDPSocket virtual. Merge internal change: 91805238 https://codereview.chromium.org/1120433002/ Update QuicPacketGeneratorTest to save every packet when it's serialized into a vector instead of into separate variables. Test only change. Merge internal change: 91631596 https://codereview.chromium.org/1105283003/ Update QuicPacketGeneratorTest to save every packet when it's serialized into a vector instead of into separate variables. Test only change. Merge internal change: 91631596 https://codereview.chromium.org/1105283003/ Change QuicPacketGenerator's destructor to use the more compact for syntax. No functional change. Merge internal change: 91620560 https://codereview.chromium.org/1117503002/ Adding a comment to make clear the toy server is a toy. Merge internal change: 91604221 https://codereview.chromium.org/1113713002/ Minor code QUIC readability improvements. No functional changes. Merge internal change: 91545808 https://codereview.chromium.org/1116543002/ Add QuicClientCryptoConfig stateless-reject support. (This change is not flag-protected, since it only affects the client-side.) When the QuicClientCryptoConfig receives a stateless reject, it will read the server-designated connection ID from the reject message. It will store that ID in its cached config for subsequent use. The Cache itself can now store a server-designated connection-id for one-time use. Clients can query the cache to see whether it stores a server-designated connection-ID. If so, the client can consume the ID. Subsequent queries will indicate that there is no server-designated connection-ID until another stateless reject is returned. Note: Currently, the cached config state only stores one server-designated connection ID at a time. Merge internal change: 91419089 https://codereview.chromium.org/1116463004/ Adding EXPECT_CALLs to prevent gMock warnings. Replacing scoped_ptr with unique_ptr. Lowering some DLOG(INFO)s to DVLOG(1). n/a (Tests and debug logging only.) Merge internal change: 91343963 https://codereview.chromium.org/1117483002/ Remove unused argument TransmissionType from QUIC's ShouldGeneratePacket. No functional change. Merge internal change: 91300968 https://codereview.chromium.org/1113553003/ Reorganize the packet validity check code. Add checks to not create connections for packets with large seq. nos. or truncated conn. IDs. Reorganize the packet validity checks to make the packet sequence number accessible to the dispatcher's packet-classification logic: Put most of the logic in OnUnauthenticatedHeader, which is called after the sequence number is decoded. Add validity checks and tests of the validity checks. Merge internal change: 91299299 https://codereview.chromium.org/1110243002/ Setting QoS for UDP proxy backends (two machine canary on internal servers). Merge internal change: 91293512 https://codereview.chromium.org/1109793006/ R=rch@chromium.org Review URL: https://codereview.chromium.org/1115853003 Cr-Commit-Position: refs/heads/master@{#327851}
* Land Recent QUIC Changes until 04/15/2015rch2015-04-181-14/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce new QUIC tag for stateless rejects. Merge internal change: 91210526 https://codereview.chromium.org/1097573003/ Add the option to estimate bandwidth by using the max of the recent samples rather than the average. Default to true in prod. Full implementation of make-tcp-fast's windowed max over 8 RTTs to come later. Merge internal change: 90885261 https://codereview.chromium.org/1091913002/ Temporarily fix a flaky QUIC EndToEndTest until b/19572432 is fixed. Merge internal change: 90710547 https://codereview.chromium.org/1084403006/ Remove extraneous FEC interface from QuicFramer. No functional change. Merge internal change: 90653152 https://codereview.chromium.org/1092783004/ Create a new TCP cubic mode with a min CWND of 4 packets, but with a pacing rate as low as 1 packet per RTT. Merge internal change: 90646967 https://codereview.chromium.org/1097553004/ Remove common cert set 0 from QUIC. Common cert set 0 was generated 2 years ago (or so) at the inception of the QUIC project. The version of the GIA cert which it contains is expired, so the set essentially server no purpose. Common cert set 1 was generated back in July and contains a current version of GIA. Merge internal change: 90426581 https://codereview.chromium.org/1092843002/ Allow QUIC's LargePostNoPacketLoss test to have some packets lost until b/16460210 is fixed. Merge internal change: 90417911 https://codereview.chromium.org/1084323004/ Reorganize incoming packet validity checks. Most behavior unchanged, but QUIC connection requests that are flagged for time-wait and also have a not-understood version now get a version negotiation packet. Add tests to verify the various validity checks have the desired effect. Merge internal change: 90277728 https://codereview.chromium.org/1090063004/ Stop explicitly setting header fields with their default values. Pull out packet construction into a ConstructPacket method. Merge internal change: 90276965 https://codereview.chromium.org/1092833002/ Use C++11 delegate constructors to avoid constructor body duplication. Merge internal change: 90275058 https://codereview.chromium.org/1090113002/ No need to have a QuicPacketHeader member variable: it's not expensive to build, and building a new one each time ensures it doesn't contain unexpected values. Merge internal change: 90274866 https://codereview.chromium.org/1065543003/ Augment QUIC_VERSION_25 by removing unused error_details field from QuicRstStreamFrame The error field is populated, but error_details string is never used. Merge internal change: 90259315 https://codereview.chromium.org/1091863002/ Stop storing QuicSession's flow controller in a scoped_ptr. Every session has a flow controller nowadays. We never change or delete it, no longer needs to be in a scoped_ptr. Merge internal change: 90250975 https://codereview.chromium.org/1097603002/ Additional tests to verify that a connection is closed when a decryptable packet with damaged payload is processed. Add a debug logging message. Merge internal change: 90188127 https://codereview.chromium.org/1094743002/ Tidy up some comments in QuicConnection, and remove linebreak in method signature. https://codereview.chromium.org/1090073002/ Initialize all fields in the default QuicServerId constructor Fixed QuicServerId constructor to initialize all fields. Merge internal change: 90180296 https://codereview.chromium.org/1061783004/ Implement QUIC version 25 which supports SPDY/4 style header blocks. Merge internal change: 90161489 https://codereview.chromium.org/1094733002/ Remove DFATAL on double close of a QUIC connection, silent early return instead. No behavior change. This DFATAL is a relic from the old days when the code was much simpler and we could easily verify that CloseConnection wasn't being called from multiple places in the current stack. Multiple calls to CloseConnection are not dangerous. Quoting rch: "the code is significantly more complex now and reasoning about where we are in the call stack of other methods which might have also closed the connection seems really daunting." Merge internal change: 90156411 https://codereview.chromium.org/1096563002/ add a version() convenience method to ReliableQuicStream. Merge internal change: 89979074 https://codereview.chromium.org/1096493005/ deprecate --FLAGS_quic_small_default_packet_size Merge internal change: 89899060 https://codereview.chromium.org/1070393003/ Remove QUIC's ack train detection code because it's never used now that pacing is always enabled. Merge internal change: 89890425 https://codereview.chromium.org/1097533002/ Review URL: https://codereview.chromium.org/1091923002 Cr-Commit-Position: refs/heads/master@{#325772}
* Land Recent QUIC Changes.rtenneti2014-11-141-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Deprecate the FLAGS_quic_unified_timeouts flag. Merge internal change: 79701104 https://codereview.chromium.org/733633002/ Disable QUIC's hybrid slow start ack train detection when pacing is enabled. Merge internal change: 79683942 https://codereview.chromium.org/719423003/ Allow for 5% overhead in the receive buffer for UDP and IP overhead not included in the encrypted size, as well as ack only packets. Merge internal change: 79432913 https://codereview.chromium.org/726973002/ Remove unused leaky bucket code from QUIC. dead code removal. Merge internal change: 79422503 https://codereview.chromium.org/732703002/ Always enable pacing with QUIC's BBR implementation. Merge internal change: 79419749 https://codereview.chromium.org/729593002/ Use max TCP window from quic_protocol.h in TCP test. Merge internal change: 79419683 https://codereview.chromium.org/730613002/ Rollback of internal changelist 79217544. *** Reason for rollback *** Possible corrupted pointer dereference in CL 78946498 must be rolled back. *** Original change description *** Fix QUIC end_to_end_test flakiness introduced by CL 78946498 N/A. Should affect tests only. CL 789464989 introduced some new tests for the "Small Red Button", a flag that, when enabled, forces QUIC to disconnect all active sessions and start rejecting traffic. Problem: The new CL made the end_to_end tests extremely flaky. Many tests for the new flag would check conditions on the client after the flag had been enabled. When the flag change itself took time on the server, the... *** Merge internal change: 79416786 https://codereview.chromium.org/731593002/ Change size_t to QuicByteCount for max_packet_length. Merge internal change: 79375184 https://codereview.chromium.org/722103005/ Move is_secure_ from QuicSession to QuicConnection. Should have done this originally, apologies. Followup CL will pass is_secure into QuicSentPacketManager where it will be used to decide on initial CWND. QuicConnection owns the sent packet manager and is constructed before the QuicSession. Merge internal change: 79360426 https://codereview.chromium.org/727863002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/729633002 Cr-Commit-Position: refs/heads/master@{#304266}
* Land Recent QUIC Changes.rtenneti@chromium.org2014-04-201-21/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Minor change to QUIC's hybrid slow start to start the round at the first closely spaced ack pair. Merge internal change: 65018864 https://codereview.chromium.org/242663002/ Fixes bug where a revived packet's header was not being populated correctly from the received FEC packet's header. Added tests to verify that revived packet headers are correctly regenerated for varying sequence number and connection id lengths. Moving closer towards FEC correctness in code. Bug fixes to FEC packet revival code, and additional tests for revived packets. Merge internal change: 65009931 https://codereview.chromium.org/242223003/ Remove mostly redundant FramerVisitorCapturingPublicReset from net/quic/test_tools/quic_test_utils.h. Use SimpleQuicFramer in QuicConnectionTest and remove mostly redundant FramerVisitorCapturingFrames. Merge internal change: 65008278, 65067000 https://codereview.chromium.org/241643004/ Changes found while sync'ing internal source code with chromium code. - Minor comment change. - Added using statement. Merge internal change: 64933978 https://codereview.chromium.org/242643002/ Large fixes and simplifications to QUIC's HybridSlowStart to correctly determine the start and end of rounds. Previously the assumption was that the available window was 0 only at the end of a sending burst, but in reality that's only accurate for the first burst, so the resulting code did not work as intended and rounds were likely cut very short. Merge internal change: 64911496 https://codereview.chromium.org/242633002/ Add a bytes_spuriously_retransmitted, max_packet_size, and congestion_window to QuicConnectionStats and populate the TcpStats with cwnd and bytes_spuriously_retransmitted. Merge internal change: 64890213 https://codereview.chromium.org/242533002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/243813002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264954 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-04-181-11/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Disable QuicFlowController for QUIC versions < QUIC_VERSION_17 Chrome Beta was happily advertising a flow control receive window of length 0, under the assumption that because the version of QUIC being spoken didn't support flow control, a zero length window advertisement would have no adverse effects. On the server end, the refactoring in internal change: 64733866 resulted in the QUIC version not being checked when querying QuicFlowController::IsBlocked. IsBlocked would look at the client's advertised receive window, and conclude that no data could be sent. This would never change as the flow control accounting is protected behind version checks. Ultimately this means that once a stream was marked as write blocked, it would never resume writing: https://codereview.chromium.org/242453002/diff/1/net/quic/quic_session.cc?context=&column_width=80 (line# 286) resulting in a connection timeout. This CL explicitly disables the QuicFlowController when the negotiated QUIC version is < QUIC_VERSION_17. Merge internal change: 65137349 This internal change was LGTM'ed by rch. Wanted to port this change to disable flow control. https://codereview.chromium.org/242583002/ Downgrading rst stream codes which wouldn't be recognized by the peer. chromium: fixed chromium's unit tests to use AdjustErrorForVersion. Merge internal change: 64783797 https://codereview.chromium.org/242483002/ Added WriteResult::WriteResult method for internal use. Merge internal change: 64780998 https://codereview.chromium.org/242293003/ QUIC: When sending a RST stream for flow control accounting purposes, include a more descriptive error code. Prompted by alyssar's comment in internal change: 61236803 Chromium specific code: + deleted unused ConstructRstPacket method from QuicNetworkTransactionTest. + Changed ConstructRstPacket to use the new descriptive error code. Merge internal change: 64774941 https://codereview.chromium.org/242093003/ Pull out flow control functionality from ReliableQuicStream into a new class, QuicFlowController. Without this refactoring, all the accounting of bytes sent/buffered/consumed, comparisons of these with limits to decide if blocked or not, will be duplicated in ReliableQuicStream and QuicConnection. Putting all this in a new class means it's easier to have more comprehensive testing, simplifies ReliableQuicStream, and will make it much easier to add Connection level flow control (work in progress internal change: 63944402). Refactor of QUIC stream flow control. No behavior change, still protected behind FLAGS_enable_quic_stream_flow_control. This flag is currently disabled. Merge internal change: 64733866 https://codereview.chromium.org/242453002/ Plumbs through delta_largest_observed from QuicSentPackerManager::HandleAckForSentPacket, up to the QuicAckNotifier. Eventually these values get to the QuicFasterStatsGatherer which now performs a more accurate RT calculation. The important changes are in QuicSentPacketManager (pulling the delta out of ReceivedInfo), and in QuicFasterStatsGatherer (doing the new calculation of RT). The rest is plumbing and updating tests. Improve accuracy of QUIC FasterStats RT calculation by using the delta time included with delayed ACKs. Merge internal change: 64721749 https://codereview.chromium.org/241783002/ Fixed a bug in QuicPacketCreator when FEC was used for unsupported versions, and made packet_creator tests run across all supported versions of QUIC. Merge internal change: 64701677 https://codereview.chromium.org/241483004/ Fix to ensure hybrid slow start is reset when QUIC's retransmission timer fires. Merge internal change: 64698621 https://codereview.chromium.org/241563002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/242593002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264889 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changes.rtenneti@chromium.org2014-04-011-2/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Refactor hybrid slow start in QUIC to create a simpler interface between it an TCPCubicSender. In preparation for BBR. Merge internal change: 64031462 https://codereview.chromium.org/218993002/ Don't log decryption errors in AeadBaseDecrypter::Decrypt. Instead, have QuicFramer::DecryptPayload log a warning message if both trial decryptions fail. Merge internal change: 63977728 https://codereview.chromium.org/218983002/ QUIC refactor to remove a return value which was always true. Merge internal change: 63977684 https://codereview.chromium.org/218913003/ Simplify the bytes_consumed computation in QuicPacketCreator::CreateStreamFrame. Does not change behavior. Merge internal change: 63900899 https://codereview.chromium.org/218873003/ Fixing a broken test for quic. cr/63542972 added the proxy flag on outbound packets. Unfortunately, this broke our tests using the magic header. This CL provides hooks for clearing that bit of data. Adding a virtual function to quic client so we can fix a test. Merge internal change: 63898585 https://codereview.chromium.org/218963003/ + Use QuicServerKey tuple (host, port, is_https) instead of server_hostname, while creating QuicClientSession, QuicCryptoClientStream, QuicCryptoClientConfig, QuicClient, QuicTestClient, etc objects. + QuicServerKey is used as the key to access QUIC server config information from all caches. + Added couple of new unit tests for HostPortPair class. + Added unit tests for QuicServerId for privacy mode combination with host, port, is_https. Merge internal change: 63891842 https://codereview.chromium.org/218923002/ R=rch@chromium.org Review URL: https://codereview.chromium.org/216713003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260810 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC changes.rtenneti@chromium.org2013-08-201-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Moving QUIC over to the new QUIC/SPDY write blocked list template. Fixing all QUIC streams to a single priority for now. Merge internal change: 50911466 Factoring out the spdy write blocked logic into a utility Spdy and Quic can share. Merge internal change: 50897578 Moving the quic dispatcher from using the WriteBlockedList to using a generic linked hash map, in preperation to adding priorities to the WriteBlockedList. Merge internal change: 50728003 QUIC dead code removal. Merge internal change: 50710912 Clarify batch mode in packet generator. Merge internal change: 50587122 Minor spacing/wording fixes to DLOG messages in quic_connection. Merge internal change: 50574131 Define kDefaultRetransmissionTime once in QuicConnectionTest. Merge internal change: 50571883 Deleted FramePackingAckResponse from chromium and will do the same on server side in another CL. Improve frame packing of acks and other frames when acks are received. Merge internal change: 50521649 Fix TODO in quic_connection.cc Merge internal change: 50515632 R=rch@chromium.org Review URL: https://chromiumcodereview.appspot.com/22801008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218500 0039d316-1c4b-4281-b951-d872f2087c98
* Land Recent QUIC Changesrtenneti@chromium.org2013-03-141-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handle versioning by closing the connection on version mismatch for now. Merge internal change: 43606997 Number of cleanups from landing recent crypto changes. Merge internal change: 43606111 Added delta_time_largest_observed to ReceivedPacketInfo to calculate accurate RTT. Merge internal change: 43582099 Implement server-side QUIC key expansion. The derived keys are still not being used yet. TODO: Code is in crypto_test_utils needs to be enabled. Merge internal change: 43570937 Added AbandoningPacket to congestion control to avoid issue with FEC. Merge internal change: 43570099 Wait infinite (aka wait for next ack) is not handled correctly. Merge internal change: 43558636 Enable faster stats for QUIC. Merge internal change: 43557310 Implement QUIC key expansion on the client side. The keys are not being used yet. Merge internal change: 43515237 Add missing quic_stats files. Track some connection stats. Merge internal change: 43506869 Fix bug in WriteQueuedPackets Merge internal change: 43499600 Small comment change in crypto_handshake's ProcessServerHello method. Merge internal change: 43448804 R=rch@chromium.org BUG= Review URL: https://chromiumcodereview.appspot.com/12806002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188096 0039d316-1c4b-4281-b951-d872f2087c98
* Land recent QUIC changes.rch@chromium.org2013-02-031-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Count the number of retransmissions for a packet due to RTO and explicit nacks and implement exponential backoff based on number of retransmissions. Merge internal change: 41823946 QuicConnection now packetizes acks and congestion control frames even more lazily and packs control frames with up to 1 stream frame. Merge internal change: 41805161 Remove nitty-gritties of QuicFramer from QuicTimeWaitListManager and remove some static methods from QuicFramer. Merge internal change: 41795314 Store socket addresses in QuicConnection.h instead of pushing it down to QuicFramer.h and getting it back from there. Merge internal change: 41768211 Retransmit largest_observed_ packet if its missing. Merge internal change: 41743584 Split framer packet creation into size determination and packet creation methods in order to ensure the maximum number of frames are fit into a single packet. Merge internal change: 41702016 Handle packet reordering for queued packets. Merge internal change: 41701179 Bug fix for retransmission order. Merge internal change: 41638847 Adding basic dispatcher stats for QUIC Merge internal change: 41630921 Minor fixes in quic_connection.cc Merge internal change: 41610652 Use priority queue to maintain the list of sequence numbers to be retransmitted. This will enable us to do an exponential backoff for lost packets. Merge internal change: 41582526 Adding DISALLOW_COPY_AND_ASSIGN to all congestion control classes that were missing it. And a few nits. Merge internal change: 41580553 Break circular dependency between quic_protocol.h and quic_bandwidth.h Merge internal change: 41578776 Fix uninitialized memory access in quic_framer_test. Merge internal change: 41558816 Cleanup, consolidated quic_send_scheduler with quic_congestion_manager Merge internal change: 41549823 Set the retransmit alarm only when we successfully write the packet to the socket instead of setting it when we attempt to write. Merge internal change: 41547192 Introduced QuicByteCount and moved TCP receive_bytes packing to QuicFramer where it belongs. Merge internal change: 41546840 Fix a bug with how FEC groups were being created in QUIC. Now opening multiple and always closing the group. Merge internal change: 41538221 Removing QUIC logspam Merge internal change: 41537896 Exposing ReadPublicHeader and ReadPublicResetPacket static methods which don't take a dependency on reader_(unlike Process..() methods). Merge internal change: 41535886 Use "test" not "testing" for test namespaces to be consistent with other QUIC code. Merge internal change: 41534488 Fix a number of minor issues that came up in landing recent chrome changes. Merge internal change: 41531793 Removed the QuicReceiptMetricsCollector and started using the ReceiveAlgorithmInterface directly in the CongestionManager. The QuicReceiptMetricsCollector did not provide any functionality. Merge internal change: 41486246 Integrating new quic bandwidth class Merge internal change: 41473682 R=jar@chromium.org BUG= Review URL: https://chromiumcodereview.appspot.com/12145002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@180299 0039d316-1c4b-4281-b951-d872f2087c98
* Implement TCP congestion control classes in QUIC.rch@chromium.org2012-12-071-0/+63
Review URL: https://chromiumcodereview.appspot.com/11414169 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171867 0039d316-1c4b-4281-b951-d872f2087c98