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.