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
Summary: safety check, in case someone passes in a bad config
Reviewed By: mjoras
Differential Revision: D21383830
fbshipit-source-id: 60ab9e9e350855d6013c39590fb5c0d4a8e4f1ef
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
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
Summary: Extract out logging of all relavent routing info into a separate method
Reviewed By: sharmafb
Differential Revision: D21217339
fbshipit-source-id: 7982a4d9a3f3549a470e543e0a14aac1c6dec5f0
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
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
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
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
Summary: generic API for setting socket Options on both client and server
Reviewed By: yangchi
Differential Revision: D19763928
fbshipit-source-id: 7078eb8738aebc192bbace2498aaf9489526efff
Summary: deref a folly::Expected can throw if it's an error
Reviewed By: mjoras
Differential Revision: D19977541
fbshipit-source-id: d8f841c1c685c91c4ebd7d3a2ceb4aa1110de06b
Summary: no more surprises in upper layer
Reviewed By: mjoras
Differential Revision: D19976510
fbshipit-source-id: 3487e9aa2cb28d7bc748f13bc2bbc393216b4a8a
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
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
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
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
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
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
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
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
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
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
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
Summary: Simplify a bit of the server handling logic.
Reviewed By: sharma95
Differential Revision: D17194278
fbshipit-source-id: 356b3e2673d5befead571b2d0bae8418fb9629da
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
Summary: Enable/disable partial reliability in transport settings of a QUIC server run-time.
Reviewed By: yangchi
Differential Revision: D16135672
fbshipit-source-id: 93c1175263ec03dc707764520ee73c1c2fd449c9
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
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