Skip to content

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.

Cc: @nickm @dgoulet

Edited by Mike Perry
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information