1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-10 21:22:20 +03:00
Commit Graph

49 Commits

Author SHA1 Message Date
Dan Melnic
15a40e76bc QUIC server support for async recvmsg
Summary: QUIC server support for async recvmsg

Reviewed By: mjoras

Differential Revision: D21235170

fbshipit-source-id: df18fa2bf7e6b58a4c2b3a302dd3c1949204c563
2020-06-08 10:46:34 -07:00
Dan Melnic
4520c24378 Fix QuicServerWorker::getReadBuffer
Summary: Fix QuicServerWorker::getReadBuffer

Reviewed By: mjoras

Differential Revision: D21675710

fbshipit-source-id: 4272ba54fecc8fd116b47ece6c2b2291213e481a
2020-05-21 10:34:04 -07:00
Matt Joras
30bff94e85 Introduce new connection rate limits.
Summary:
This introduces a rate limit to new connections created by a worker.

Right now it will simply send a VN, but eventually this will only issue a RETRY for unverified initials.

Reviewed By: udippant

Differential Revision: D21614905

fbshipit-source-id: 1832fbdad525c53fb1cb810aa9d7bae868c267d6
2020-05-18 16:40:43 -07:00
Yang Chi
1f0f29c2bb Fallback to chained memory data path if the batching mode isn't GSO
Summary: safety check, in case someone passes in a bad config

Reviewed By: mjoras

Differential Revision: D21383830

fbshipit-source-id: 60ab9e9e350855d6013c39590fb5c0d4a8e4f1ef
2020-05-07 10:56:26 -07:00
Matt Joras
989352e12f Back out "avoid unnecessary userspace routing of packets"
Summary: As in title.

Reviewed By: lnicco

Differential Revision: D21337477

fbshipit-source-id: 6fa71a638172a9b017170ec2f8c6c6639a6e1d3d
2020-04-30 18:58:36 -07:00
Matt Joras
6339b8dd92 Back out "send reset instead of silently dropping packets due to misrouting"
Summary: As in title.

Reviewed By: udippant

Differential Revision: D21337383

fbshipit-source-id: fd66b91ef9520704e841c2976979959b846b9e12
2020-04-30 18:58:35 -07:00
Yang Chi
081b63ffce Give QuicServerWorker an output buffer for GSO write with continuous memory
Summary: as title

Reviewed By: mjoras

Differential Revision: D20919833

fbshipit-source-id: 8cd9674d7bccf115cbdac5b976ba70e5dcb70e14
2020-04-28 22:14:20 -07:00
Udip Pant
76037a9a1d send reset instead of silently dropping packets due to misrouting
Summary:
There were some TODOs left in the QuicServerWorker where we silently drop
packets.

Reviewed By: mjoras, yangchi

Differential Revision: D21235150

fbshipit-source-id: eb546ea6d792915cf3155370758e837318530a38
2020-04-27 11:25:28 -07:00
Udip Pant
1b57db5da4 avoid unnecessary userspace routing of packets
Summary:
for initial or zero-rtt packets, or in the case of short-header packets, if the
worker-id already matches, we do not need to do any userspace routing of
packets.

Reviewed By: mjoras

Differential Revision: D21219335

fbshipit-source-id: 988614530960a621a02c0375f4a507b333f66e69
2020-04-24 11:49:55 -07:00
Udip Pant
bf71c1364a cleanup logging of routing info in QuicServerWorker
Summary: Extract out logging of all relavent routing info into a separate method

Reviewed By: sharmafb

Differential Revision: D21217339

fbshipit-source-id: 7982a4d9a3f3549a470e543e0a14aac1c6dec5f0
2020-04-24 11:49:55 -07:00
Dan Melnic
1cbdf1cd0a Add quic client and server GRO support
Summary: Add quic client and server GRO support

Reviewed By: mjoras

Differential Revision: D20876123

fbshipit-source-id: d32f8ea8b6ede3df56465746166907b1e1754c57
2020-04-20 13:11:56 -07:00
Luca Niccolini
5ca21a5278 rename infoCallback to statsCallback
Summary:
```
find ./quic | xargs -I{} sed -i "s/infoCallback/statsCallback/g" {}
find ./quic | xargs -I{} sed -i "s/InfoCallback/StatsCallback/g" {}
```

(Note: this ignores all push blocking failures!)

Reviewed By: mjoras

Differential Revision: D20860675

fbshipit-source-id: 4fe99a375b5983da51b6727d7f40788f89083ab3
2020-04-11 11:16:51 -07:00
Matt Joras
a230720c3c Avoid throwing an exception on decoding Connection IDs
Summary: This can happen more often than we'd like, and there's no reason to force throwing the exception when we can instead validate the length first.

Reviewed By: udippant

Differential Revision: D20770869

fbshipit-source-id: 93e2349b02d6d2067f345b5fa9decee800c84ea6
2020-04-05 19:47:44 -07:00
Yang Chi
59a394e8f5 New Quic packet drop reason for the case TransportFactory refuses to create
Summary: as title

Reviewed By: mjoras

Differential Revision: D20629105

fbshipit-source-id: b156a03055dbe2c665aac51d924fd024ebf4e9b7
2020-03-31 00:04:43 -07:00
Yedidya Feldblum
ace2cc78a6 Unqualify uses of folly::AsyncUDPSocket::ReadCallback::OnDataAvailableParams
Summary: Unqualify nearly all uses of `folly::AsyncUDPSocket::ReadCallback::OnDataAvailableParams` since nearly all uses already have `OnDataAvailableParams` in scope.

Differential Revision: D20450063

fbshipit-source-id: c0fd49a7eace44a6edc8086762c44753224788dd
2020-03-16 02:57:30 -07:00
Dan Melnic
ba5ef797a5 Add UDP GRO support
Summary: Add UDP GRO support

Reviewed By: mjoras

Differential Revision: D20347326

fbshipit-source-id: be3c31f070c4f2c1ef84f9e2df60f49a5fcabd93
2020-03-13 10:12:22 -07:00
Yang Chi
9cea11f2bd QuicServerWorker rejects CID already present in CID Map
Summary:
The CID Algo can possibly generate a CID that's already in the map.
This diff adds a mechanism to reject such CID and try another one.
ServerStateMachine will loop encoding CIDs until either QuicServerWorker no
longer rejects, or encode fails

Reviewed By: udippant, vchynarov

Differential Revision: D20251043

fbshipit-source-id: a38e4e8b33007779a9710c32057d47f32f7d1774
2020-03-09 16:06:22 -07:00
Yang Chi
1b6810a828 Track bound QuicServerTransport with both raw pointers and weak_ptrs
Summary: For safety reason.

Reviewed By: mjoras

Differential Revision: D20041431

fbshipit-source-id: 6535afa25ab7ed80870912a6402ff21254dc9014
2020-03-04 17:07:29 -08:00
TJ Yin
a396f62335 Replace folly::Optional::hasValue() by has_value()
Differential Revision: D19882830

fbshipit-source-id: 031217f9890351022bc8d171f0ccd7e045dd6972
2020-02-26 08:40:44 -08:00
Yang Chi
85117a7339 new quic stats callback for incoming client initials
Summary: as title

Reviewed By: lnicco

Differential Revision: D20104477

fbshipit-source-id: da43366447cfbd17d9e635f07c06b893e7138ea2
2020-02-25 19:02:59 -08:00
Viktor Chynarov
63899b41af QuicServerWorker error logging for duplicate CIDs
Summary:
The `QuicServerWorker` routing layer only retains mapping of a
single cid -> transport pair. However, in the case of two different
connections eventually having the same CID, both of those connections
will each believe they have that CID, while the routing layer
will only route to one of them.

When one connection is closed and the mappings are removed for all of its CIDs,
this MAY close the other connection inadvertently.

Reviewed By: yangchi

Differential Revision: D20046389

fbshipit-source-id: 2ab225725a4410d6665ee0a0536dc1f48c0c49ba
2020-02-25 12:20:32 -08:00
Luca Niccolini
39db4700c0 allow custom socket options
Summary: generic API for setting socket Options on both client and server

Reviewed By: yangchi

Differential Revision: D19763928

fbshipit-source-id: 7078eb8738aebc192bbace2498aaf9489526efff
2020-02-21 22:11:40 -08:00
Yang Chi
87e3e9f8af Replace deref parseCid result with explicit error checking
Summary: deref a folly::Expected can throw if it's an error

Reviewed By: mjoras

Differential Revision: D19977541

fbshipit-source-id: d8f841c1c685c91c4ebd7d3a2ceb4aa1110de06b
2020-02-19 15:54:12 -08:00
Yang Chi
5f51f4436f Exception-free Quic ConnIdAlgo
Summary: no more surprises in upper layer

Reviewed By: mjoras

Differential Revision: D19976510

fbshipit-source-id: 3487e9aa2cb28d7bc748f13bc2bbc393216b4a8a
2020-02-19 15:54:11 -08:00
Matt Joras
c1ec43136d Check if we can parse before parsing the DCID.
Summary: As in title.

Reviewed By: yangchi

Differential Revision: D19943642

fbshipit-source-id: f99699b3a7697970445ac1f9e0e15a916940d841
2020-02-17 21:07:35 -08:00
Yang Chi
65a6c9bfe2 Remove Sheding APIs from QuicServerTransport
Summary:
The current shedding APIs in the transport would accept a new
connection and then immediately close it. This will fail the request and waste server resources.

This diff
removes all the Shedding functions from transport and let upper layer handle
it.

Reviewed By: udippant

Differential Revision: D19729902

fbshipit-source-id: 6daab5902235b6daa8d059b51cc1229d1042f892
2020-02-05 17:29:17 -08:00
Udip Pant
21a7efb2e3 remove constraints of 4-bytes minimum len for connection-id
Summary:
New QUIC draft no longer has this limitation for connection-id, and allows
connid of len 0 -> 20.

This diff removes the constraints. I still kept the requirement for
*server-chosen* conn-id

Reviewed By: mjoras, lnicco

Differential Revision: D19507366

fbshipit-source-id: 4c73f45617f40b29d47d2d86b7598f6c95588d0a
2020-01-23 21:59:49 -08:00
Anton Frolov
1482011db5 Remove UNLIKELY and LIKELY calls from mvfst
Summary:
All instancesi of LIKELY and UNLIKELY probably should be removed. We will
add them back in if we see pathologies in performance profiles.

Reviewed By: mjoras

Differential Revision: D19163441

fbshipit-source-id: c4c2494d18ecfd28f00af1e68ecaf1e85c1a2e10
2020-01-06 17:44:07 -08:00
Yang Chi
332b3c340c Use original server cid chosen by client for source addr based routing
Summary:
Currently, before server generate the destination CID, we route packets with client's address, port and client's source connection ID. But now that client can use 0-len source connection ID, the different connections from the same client address and port will be routed to the same server connections.

This diff changes it to use client's initial destination connection ID as part of the routing key.

Reviewed By: udippant

Differential Revision: D19268354

fbshipit-source-id: 837f5bd2f1e3a74957afacf7aabad922b1719219
2020-01-06 08:58:12 -08:00
Udip Pant
ba79292fa9 reset existing (takeover) socket when rebinding to different address
Reviewed By: afrind

Differential Revision: D18925452

fbshipit-source-id: dc431cbf899eb8e21a18d421a640e4f0649743cb
2019-12-20 17:29:28 -08:00
Subodh Iyengar
d2fa2cbcd6 process multiple packets on recvmsg
Summary:
In the current client code we read one packet, go back to epoll, and then read
another packet. This is not very efficient.

This changes it so that we can read multiple packets in one go from an epoll
callback.

This only performs changes on the client

Reviewed By: mjoras

Differential Revision: D18797962

fbshipit-source-id: 81be82111064ade4fe3a07b1d9d3d01e180f29f5
2019-12-04 12:04:10 -08:00
Udip Pant
80b3a9f393 add more checks for internally forwarded data
Summary:
This adds checks for forwarded data on all the possible branches that lead to
forwarding of packets to another process

Reviewed By: mjoras

Differential Revision: D18416971

fbshipit-source-id: 22dc3fd63de615904a411f90164a138bf0ef56e0
2019-11-18 11:05:36 -08:00
Udip Pant
024bbbba29 retry few times if there's a conflict in takeover handler address
Reviewed By: sharma95

Differential Revision: D17403844

fbshipit-source-id: 3084335be30e2376a6888ba24e21aa63bb040e3e
2019-11-18 11:05:36 -08:00
Yang Chi
97cfde6af3 Remove Quic transport from source address map after usage of Cid data
Summary:
Before any CID is available, the source address routing
table might be the only owner of the transport. Removing the transport from
there deletes the transport. connectionIdData param is a const ref to a member
of the connection state owned by the transport. So deleting transport also
deletes this vector, which makes the const ref invalidated.

Reviewed By: vchynarov

Differential Revision: D18253200

fbshipit-source-id: 728b15d0872164ba6549a32e10a5a3611e808f27
2019-11-01 11:32:25 -07:00
Konstantin Tsoy
553352c2e5 Always create pacer timer on server worker start
Summary: Always create pacing timer on server worker start.

Reviewed By: yangchi

Differential Revision: D18231097

fbshipit-source-id: 598bf6f746f3b07020fa9336ebe33ba2283767e1
2019-10-31 11:19:17 -07:00
Viktor Chynarov
27536bc1e4 Delete all transport connIds from server connIdMap on unbound [3/3]
Summary:
This diff is the one that introduces+passes the test of multiple server conn
ids routing to a single transport.

Currently, there is still only one time in non-test code that more than one
server connection id is added. This diff ensures when we call connectionUnbound
we remove all associated connection ids.

Reviewed By: udippant

Differential Revision: D17479563

fbshipit-source-id: 8d0ebbf26251f7bef44cdea53dfd4ff93ab465ae
2019-10-09 08:25:07 -07:00
Yang Chi
6b41822007 Fix use after free in QuicServerWorker
Summary:
If the server connection is never generated, source address map may
have the only shared_ptr to the transport. Erase from the map then use the
transport is clearly a use-after-free bug.

Reviewed By: udippant, lnicco

Differential Revision: D17733297

fbshipit-source-id: 80d141293458920a0ba6c5eaed14dcbeec17d3ff
2019-10-02 23:00:49 -07:00
Udip Pant
e3b792e7f1 set IP_PMTUDISC_PROBE instead of dontFragment (i.e. PMTUDISC_DO)
Summary:
mvfst will need to handle pmtu in an app specific way. So just set DF bits but
not pmtu.

Reviewed By: siyengar

Differential Revision: D17624134

fbshipit-source-id: 14f445bbb6a971efb8a3d550c84c3d4af53f8517
2019-09-27 13:14:33 -07:00
Viktor Chynarov
2bd01800f3 Use set of transports instead of connIdMap for server shutdown [2/x]
Summary:
Currently, there is a 1:1 relationship between conn Id and transports. So for
all connections with a bound connection id, we iterate over all
connectionIdMap_ entries and delete the associate transport.

This won't work if connectionIdMap_ will map multiple conn ids to a single
transport.

Reviewed By: JunqiWang

Differential Revision: D17456965

fbshipit-source-id: 8923540abf205cfd10ad09d637e8c05790b4acf9
2019-09-27 07:57:44 -07:00
Viktor Chynarov
4ace4b5c21 Create helper for version negotiation in QuicServerWorker [2/x]
Summary: Simplify a bit of the server handling logic.

Reviewed By: sharma95

Differential Revision: D17194278

fbshipit-source-id: 356b3e2673d5befead571b2d0bae8418fb9629da
2019-09-25 14:26:55 -07:00
Udip Pant
e22d2df950 avoid possibility of loop during packet forwarding
Reviewed By: lnicco

Differential Revision: D17401129

fbshipit-source-id: db255f313311acd462e7bee1a33c45191ef8c3df
2019-09-19 17:14:53 -07:00
Viktor Chynarov
b9bbc0d858 Remove clientConnId from ServerConnIdParams
Summary:
This parameter duplicates the one in the QuicConnectionStateBase.

It is set everywhere the canonical one is, and it isn't used directly in any
manner that is separate from QuicConnectionStateBase::clientConnId.

This diff changes the following:

 * removed clientConnId from ServerConnIdParams
 * add setter to directly initialize clientConnId on the transport from the
   connection
 * update tests

Reviewed By: udippant

Differential Revision: D16711180

fbshipit-source-id: 63e667aa0df8a79757f18fb3ffc178c7c9613e1a
2019-08-19 15:04:14 -07:00
Bonnie Xu
61bf94680a add QUIC_STATS for Stateless Reset
Summary: Added QUIC_STATS for stateless reset.

Reviewed By: afrind

Differential Revision: D16679632

fbshipit-source-id: a80179fd4f2f9b2cb1297af47687b4b8a190de84
2019-08-16 16:24:56 -07:00
Konstantin Tsoy
41d4c6afbe Add run-time partial reliability setting override
Summary: Enable/disable partial reliability in transport settings of a QUIC server run-time.

Reviewed By: yangchi

Differential Revision: D16135672

fbshipit-source-id: 93c1175263ec03dc707764520ee73c1c2fd449c9
2019-07-08 22:12:33 -07:00
Aman Sharma
a38d9157fd Plumbing to override transport parameters
Summary:
I've added in some plumbing to enable us to override transport settings based on a specific `(datacenter, vip, server port, client prefix)` tuple.

  +-------------------------------------+
  |         HTTPRevProxyService         |
  +-------------------------------------+
                     |    Get the vip name, the datacenter,
                     |    and the server port. Create a lambda that
                     |    takes in the client IP address and applies
                     V    overrides to the transport settings.
  +-------------------------------------+
  |           ProxygenHQServer          |
  +-------------------------------------+
                     |
                     |    Pass on the lambda
                     |
                     V
  +-------------------------------------+
  |             QuicServer              |
  +-------------------------------------+
                     |
                     |    Pass on the lambda
                     |
                     V
  +-------------------------------------+
  |          QuicServerWorker           |
  +-------------------------------------+
                     |    Call the lambda (passing in the
                     |    client IP address) when we create
                     |    a QuicSocket, and set the transport
                     V    settings apprpriately
  +-------------------------------------+
  |         QuicServerTransport         |
  +-------------------------------------+

Reviewed By: udippant

Differential Revision: D15227915

fbshipit-source-id: 23c94aa558b381eae13f98ae06c6a97125c1a071
2019-06-24 14:31:23 -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
Leonidas Kontothanassis
ddc845a855 Add connection drop logic for QUIC
Summary: Add connection drop logic for QUIC

Reviewed By: mjoras

Differential Revision: D15361528

fbshipit-source-id: 55d9bf9d818786f23c9c6d600ca928ba7b265d4f
2019-05-23 10:03:18 -07:00
udippant
163ce02a6f Sync changes to rename onNewStream and CongestionController factory 2019-04-24 17:44:31 -07:00
udippant
50d4939e9e Initial commit of mvfst 2019-04-22 23:42:46 -07:00