1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-25 15:43:13 +03:00
Commit Graph

30 Commits

Author SHA1 Message Date
Yang Chi
c9933dbb6a add largest acked packet sent time and appLimited into Quic AckEvent
Summary:
Bug fix. Since we changed the iteration order of ack processing to be
in reverse order of packet numbers, there has been a bug and both BBR and Cubic
has been using the earliest acked packet instead of the largest acked packet as
the largest acked packet.

Reviewed By: mjoras

Differential Revision: D17909490

fbshipit-source-id: 15310aad53b4a9e5190ed65c3b2df496db77b1ae
2019-10-16 10:48:40 -07:00
Subodh Iyengar
8ad7d05693 use custom variant type for errors
Summary: Use the custom variant type for errors.

Reviewed By: yangchi

Differential Revision: D17826935

fbshipit-source-id: 2bf0c3e1cc8ca84b504d201fd6c2a4266878b715
2019-10-09 22:37:40 -07:00
Amaury Séchet
a0ebc3995b Fusion QuicFizzFactory into FizzCryptoFactory (#44)
Summary:
They are strongly coupled, which indicate this is probably better to do it as one class.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/44

Reviewed By: mjoras

Differential Revision: D17590918

Pulled By: yangchi

fbshipit-source-id: 2eaca079fd760107eefd2b74fa612d7a0c8b3001
2019-10-08 22:17:02 -07:00
Subodh Iyengar
68c332acb1 Use custom variant type for write frames
Summary:
Use the custom variant type for write frames as well, now that
we use them for read frames.

Reviewed By: mjoras

Differential Revision: D17776862

fbshipit-source-id: 47093146d0f1565c22e5393ed012c70e2e23d279
2019-10-07 22:43:31 -07:00
Yang Chi
405dde4fde Handling Acks in descending order of the packet number
Summary:
We erase packets from outstandingPackets list during ack handling.
Currently we handle acks in ascending order of the acked packet number, then
erase() the acked packet. Each erase() call only erase one packet, and it can
potentally make std::deque to move a few elements following the erased one.

This diff changes it to handle acks in descending order, and also erase acked
packets in continuous groups. This reduces erase() calls, and also reduces the
possibility that std::deque needs to move following elements in the erase().

Reviewed By: mjoras

Differential Revision: D17579683

fbshipit-source-id: 8bc11f6a7875beb70dc46c497857ab694df7b6a5
2019-10-07 16:44:43 -07:00
Samuel Miller
36043b390e Adding const State* arg to TicketCipher->decrypt()
Summary: Having access to the state when decrypting tickets gives us more control over ticket acceptance policies.

Reviewed By: knekritz

Differential Revision: D17528945

fbshipit-source-id: a3cb3d4c0917f2494f5669f283cda70776b608c6
2019-10-02 13:00:47 -07:00
Subodh Iyengar
04baa15a04 Custom variant type for packetheader
Summary:
Make a custom variant type for PacketHeader. By not relying on boost::variant
this reduces the code size of the implementation.

This uses a combination of a union type as well as a enum type to emulate a variant

Reviewed By: yangchi

Differential Revision: D17187589

fbshipit-source-id: 00c2b9b8dd3f3e73af766d84888b13b9d867165a
2019-09-19 17:31:47 -07:00
Matt Joras
049b512646 Write stream frame header and data separately.
Summary:
Prior to this diff we would clone out an entire flow control's worth of data from the writebuffer and then clone out a smaller portion of that to write into the packet builder. This is extremely wasteful when we have a large flow control window.

Additionally we would always write the stream data length field even when we are going to fill the remainder of the packet with the current stream frame. By first calculating the amount of data that needs to can be written and writing the header, we can now omit the data length field when we can fill the whole packet.

Reviewed By: yangchi

Differential Revision: D15769514

fbshipit-source-id: 95ac74eebcde87dd06de54405d7f69c42362e29c
2019-08-22 15:59:41 -07:00
Amaury Séchet
cbd77a3603 Extend CryptoFactory with makePacketNumberCipher (#40)
Summary:
The CryptoFactory is extended with makePacketNumberCipher . In order to support that feature, FizzCryptoFactory now explicitly takes a QuicFizzFactory as argument instead of a generic fizz::Factory, which is the only type that is used in practice anyways.

The cypher argument was removed because:
1/ Only one cypher is used at all. Fizz also supports ChaCha20, but using it in mvfst will throw an exception.
2/ it seems like the factory should know what cypher it is dealing with.

If a choice of cypher needs to be supported going forward, it can be done by adding state to FizzCryptoFactory.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/40

Reviewed By: mjoras

Differential Revision: D16785274

Pulled By: yangchi

fbshipit-source-id: a1c490e34c5ddd107e8e068d8b127c1ed00a59ec
2019-08-16 08:52:43 -07:00
Amaury Séchet
8a927b4655 Cleanup support to create mock of fizz:Aead as it is not required anymore. (#39)
Summary:
After https://github.com/facebookincubator/mvfst/issues/35 , the facility to mock fizz::Aead is not required anymore. Either the test depends on fizz's behavior, in which case a mock was never appropriate, or it doesn, in which case a quic::Aead is more appropriate.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/39

Reviewed By: mjoras

Differential Revision: D16785265

Pulled By: yangchi

fbshipit-source-id: ba74155ab7e8ed1c261c58569db0690781d85fe1
2019-08-16 08:52:43 -07:00
Amaury Séchet
dade592442 Remove warning in TestUtils.cpp by telling the compiler that some code is unrecheable.
Summary: Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/37

Reviewed By: yangchi

Differential Revision: D16729459

Pulled By: lnicco

fbshipit-source-id: dd031d1798b8aa700fc9ed73ff5e90e77f99ff7f
2019-08-09 07:51:13 -07:00
Bonnie Xu
3203074c41 Reduce number of padding frames
Summary: Reduce the number of padding frames that are generated, to decrease overall qlog size.

Reviewed By: sharma95

Differential Revision: D16533449

fbshipit-source-id: 68f9c48e265576bff098dfeee87e576e86a32330
2019-07-29 10:16:30 -07:00
Matt Joras
2f528e68c0 Draft-22 invariants change
Summary:
Draft-22 onwards uses two one byte length fields to encode connection ID length instead of one one byte length field.

To support this without disrupting existing clients we need to make our parsing version dependent. This diff accomplishes it by special casing the existing Facebook client QUIC version (0xfaceb000), and changing the default Facebook client version going forward to 0xfaceb001.

Note that this diff also changes the behavior of the ticket transport parameters. When we changed from draft-18 to draft-19 transport parameters I apparently forgot to update the ticket transport parameters to the new format.

Reviewed By: yangchi

Differential Revision: D16205090

fbshipit-source-id: e74a92fa959d308f4bb43bad76e58d4b58d07322
2019-07-16 17:59:58 -07:00
Bonnie Xu
ff1c36c25a Added ConnectionClose event to Quic
Summary: Added ConnectionClose event to Quic.

Reviewed By: sharma95

Differential Revision: D16097522

fbshipit-source-id: c46d63ac75246ad93a3c617383f1b9a26d0e0b4f
2019-07-12 07:05:40 -07:00
Yang Chi
7548623843 Rename generate.*Packet.* functions in Quic test utils to create.*Packet.*
Summary:
There is already a createPacket util function in this file. Rename the
newly added generate* functions to make this consistent

Reviewed By: sharma95

Differential Revision: D15948954

fbshipit-source-id: 67e7addefc839226b98d81a3808d37519ce001af
2019-06-21 17:34:51 -07:00
Amaury Séchet
d83cfb6c30 Decouple fizz::Aead and quic::Aead . This makes a large chunk of the codebase fizz agnostic. (#16)
Summary:
This is based on top of https://github.com/facebookincubator/mvfst/issues/15 .

Now that the codebase have been refactored to use Aead/fizz:Aead and MockAead/fizz::test::MockAead in proper places, it is time to ensures the aren't aliases of each others anymore.

This introduces FizzAead as a wrapper for fizz::Aead that implements quic::Aead and forward all calls. Most of the codebase now uses quic::Aead, which a significant step toward being able to swap it for another implementation.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/16

Reviewed By: yangchi

Differential Revision: D15474068

Pulled By: mjoras

fbshipit-source-id: 7cccc9909a45ea538409645644641e39a58bf81d
2019-06-18 16:29:29 -07:00
Bonnie Xu
141dffce6a Fix QLogger test
Summary:
Fixed failing QLogger test.

Addresses reports https://our.intern.facebook.com/intern/test/281474989481205?ref_report_id=1876540 and https://our.intern.facebook.com/intern/test/844424942913490?ref_report_id=1876793.

Reviewed By: mjoras

Differential Revision: D15877059

fbshipit-source-id: e071d4ce7f70ffbd0d021f4f0e3edca7bcc51228
2019-06-18 13:44:43 -07:00
Bonnie Xu
805029b648 Added functionality to construct toDynamic objects
Summary: Converting stored QLog events into a toDynamic object that aligns with QLog format.

Reviewed By: sharma95

Differential Revision: D15725495

fbshipit-source-id: 0721a2d6858cfd99e191e3dfdc5f25f544106c86
2019-06-17 19:29:43 -07:00
Bonnie Xu
1affb7e49d Interface for QLogger
Summary:
Interface for QLogger:
- Takes in a Quic packet (`VersionNegotiation`, `RegularQuicWritePacket`, `RegularQuicPacket`)
- Stores it in QLogger
  - each packet is an event
  - each frame becomes a log

Reviewed By: sharma95

Differential Revision: D15581299

fbshipit-source-id: dedf933f47e2e8769109aa1e45ff38c2bf013714
2019-06-14 11:48:34 -07:00
Bonnie Xu
2762cc1597 Setup stateless reset token
Summary: Replace hard coded stateless reset token with a token from the stateless reset token generator.

Reviewed By: yangchi

Differential Revision: D15481858

fbshipit-source-id: 30c96843c38c616600466b2fabb6defd5fcc5799
2019-06-13 08:44:53 -07:00
Alex Guzman
63d8271b4d Expire cached PSKs when initial handshake is stale
Summary: After a given amount of time, discards PSKs whose handshakes are too old.

Reviewed By: knekritz

Differential Revision: D14174662

fbshipit-source-id: ef505af91732c1030c6ce27835db49cf07d9c506
2019-06-10 13:56:00 -07:00
Yang Chi
bdd52cf52f change Quic congestion controller end of recovery to a time target
Summary:
given packet number space has been split to 3 spaces, using a single
PacketNum isn't enough to serve the end of recovery tracking. Instead, use a
TimePoint value.

Reviewed By: sharma95

Differential Revision: D15219240

fbshipit-source-id: baf05828279789eb0aa170b49a177510ea07836f
2019-05-31 15:41:05 -07:00
Amaury Séchet
d6c88ab4b0 Decouple fizz:test::MockAead from MockAead. Use the former for code that actually needs fizz. (#15)
Summary:
This is based on top of #12 .

It logically split MockAead and fizz::MockAead in preparation for separation of the two.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/15

Reviewed By: yangchi

Differential Revision: D15474045

Pulled By: mjoras

fbshipit-source-id: b61a5cb08ddae0add66a6c37e156eddaef118e0c
2019-05-30 09:16:07 -07:00
Amaury Séchet
f26cd1f62d Add a bridge to fizz::Aead (#12)
Summary:
This introduce quic::Aead as a simple typedef to fizz::Aead and update the codebase to use quic::Aead . This should not impact the functionality of the code in any way.

This is a first step toward introducing an interface that is specific for mvfst so that mvfst can swap fizz for something else.
Pull Request resolved: https://github.com/facebookincubator/mvfst/pull/12

Reviewed By: JunqiWang

Differential Revision: D15335324

Pulled By: mjoras

fbshipit-source-id: fef166a9a5c2cbae08ad9511d0abd749f330c221
2019-05-29 11:54:08 -07:00
Bonnie Xu
f4ae0a1efd Updated files to change syntax.
Summary: Changed existing chrono syntax to chrono_literals syntax.

Reviewed By: mjoras, sharma95

Differential Revision: D15374649

fbshipit-source-id: 40033e90cca226266ef85e4fec629f290bc5dae6
2019-05-20 12:10:46 -07:00
Junqi Wang
d20ea53ec1 Update quic psk cache to d-20
Summary:
Fixed QuicClientTransportIntegrationTest:
SetUp() shouldn't set maxStreams manually. Instead, client should read serverTransportParams after 1 rtt.
The tests used to call createBidiStream right after client->start(), changed that to only sending data after onTransportReady.

Reviewed By: mjoras

Differential Revision: D15293209

fbshipit-source-id: 88e739d72f1fad76666af003d446d068e6d5fac7
2019-05-10 16:19:43 -07:00
Junqi Wang
92b8876ebf Update 0-rtt ticket transport params to d-20
Reviewed By: mjoras

Differential Revision: D15293208

fbshipit-source-id: 4ea5bf6c2c335a5c034341086f9348451bed827e
2019-05-10 16:19:43 -07:00
Alan Frindell
90e5e1b3f1 Split stream state machine into send and receive state machines
Summary: This is step 1 for removing reset on reset, since the send side may need to transition to waiting for a reset ack while the read side is an any state.

Reviewed By: lnicco

Differential Revision: D15075849

fbshipit-source-id: 1e094942a8a1ca9a01d4161cd6309b4136a9cfbf
2019-05-06 14:05:31 -07:00
udippant
79032c7b9b fbshipit-source-id: f498ac5e677b2931d937ba78edd4373ba04dca2a 2019-04-25 21:33:43 -07:00
udippant
50d4939e9e Initial commit of mvfst 2019-04-22 23:42:46 -07:00