]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Protover flag handling for congestion control negotiation
authorMike Perry <mikeperry-git@torproject.org>
Thu, 4 Nov 2021 00:47:19 +0000 (00:47 +0000)
committerMike Perry <mikeperry-git@torproject.org>
Tue, 22 Feb 2022 19:28:34 +0000 (19:28 +0000)
src/core/or/or.h
src/core/or/protover.c
src/core/or/protover.h
src/core/or/versions.c

index 22846872a07a7910c1b85afb19085583b22c5738..885c0e8b11ad00437f331b6e373450a1e4b7cfa7 100644 (file)
@@ -732,10 +732,9 @@ typedef struct protover_summary_flags_t {
    * negotiate hs circuit setup padding. Requires Padding=2. */
   unsigned int supports_hs_setup_padding : 1;
 
-  /** True iff this router supports ntor3 _and_ supports negotiating
-   * additional circuit parameters via the handshake used in ntor3.
-   */
-  unsigned int supports_ntor3_and_param_negotiation : 1;
+  /** True iff this router supports congestion control.
+   * Requires both FlowCtrl=2 *and* Relay=4 */
+  unsigned int supports_congestion_control : 1;
 } protover_summary_flags_t;
 
 typedef struct routerinfo_t routerinfo_t;
index 8405a720fb6833961037af86d15b4e1d864a60fc..ff986b62e2c1715c49b737eb6864ce22327a006d 100644 (file)
@@ -430,13 +430,11 @@ protover_get_supported_protocols(void)
    * XXX: WARNING!
    */
 
-  /* TODO-324: Add a new Relay=* and a new FlowCtrl=* version to indicate
-   * support for Ntorv3 and prop324.  Make sure they get into the spec. */
   return
     "Cons=1-2 "
     "Desc=1-2 "
     "DirCache=2 "
-    "FlowCtrl=1 "
+    "FlowCtrl=1-2 "
     "HSDir=2 "
     "HSIntro=4-5 "
     "HSRend=1-2 "
@@ -448,7 +446,7 @@ protover_get_supported_protocols(void)
 #endif
     "Microdesc=1-2 "
     "Padding=2 "
-    "Relay=1-3";
+    "Relay=1-4";
 }
 
 /*
index ae258d74a5bc35eaba4317ac7154c10953fc0e1f..410a67a9f71d9d9dbba2ad8372f414272f716121 100644 (file)
@@ -35,6 +35,8 @@ struct smartlist_t;
 /** The protover version number where relays can consider IPv6 connections
  *  canonical */
 #define PROTOVER_RELAY_CANONICAL_IPV6 3
+/** The protover version number where relays can accept ntorv3 */
+#define PROTOVER_RELAY_NTOR_V3 4
 
 /** The protover version number that signifies HSv3 intro point support */
 #define PROTOVER_HS_INTRO_V3 4
@@ -51,6 +53,9 @@ struct smartlist_t;
 /** The protover that signals support for HS circuit setup padding machines */
 #define PROTOVER_HS_SETUP_PADDING 2
 
+/** The protover that signals support for congestion control */
+#define PROTOVER_FLOWCTRL_CC 2
+
 /** List of recognized subprotocols. */
 /// C_RUST_COUPLED: src/rust/protover/ffi.rs `translate_to_rust`
 /// C_RUST_COUPLED: src/rust/protover/protover.rs `Proto`
index 052351120edfe8567c8eb07444ad6893ca0ef167..9913b3ee316dc4d0c868e9615097d83500360a98 100644 (file)
@@ -482,14 +482,11 @@ memoize_protover_summary(protover_summary_flags_t *out,
     protocol_list_supports_protocol(protocols, PRT_PADDING,
                                     PROTOVER_HS_SETUP_PADDING);
 
-  /* TODO-324: Set these flags based on real values.
-  out->supports_ntor3_and_param_negotiation =
-    protocol_list_supports_protocol(protocols, PRT_RELAY,
-                                    XXXX)
-    &&
+  out->supports_congestion_control =
     protocol_list_supports_protocol(protocols, PRT_FLOWCTRL,
-                                    XXXX);
-  */
+                                    PROTOVER_FLOWCTRL_CC) &&
+    protocol_list_supports_protocol(protocols, PRT_RELAY,
+                                    PROTOVER_RELAY_NTOR_V3);
 
   protover_summary_flags_t *new_cached = tor_memdup(out, sizeof(*out));
   cached = strmap_set(protover_summary_map, protocols, new_cached);