Connect Prop#324 using ProtoVer and Prop#332 ntor handshake
We need to write code that enables the congestion control code only if FlowCtrl=2 ProtoVer is present, and the circuit handshake from Prop 332 agrees that the consensus says that congestion control is enabled.
Here's a checklist of properties to make sure we hit:
-
Congestion control is off by default (cc_alg=0 by default) -
Onion Service Descriptor can list equivalent of FlowCtrl=2 Protover -
Client does not attempt negotiation unless Exit or Onion Service lists FlowCtrl=2 and consensus says cc_alg != 0 -
If exit sees cc_alg=0, but it got a negotiation attempt, it replies with a nack, and both endpoints MUST free their congestion control object (to use the old fixed sendme code). -
Negotiate the 'sendme_inc' value to agree using Prop#332 (formerly called cc_circwindow_inc). -
Send 'cc_xon_rate' for future drop cell enforcement of XON/XOFF ratelimits -
One-sided (non-negotiated) bounds limits on consensus parameters wrt each other (See Prop#324 Section 6.5)
See #40377 (closed) for previous discussions about negotiation.
Edited by Mike Perry