summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2021-11-04 00:47:19 +0000
committerMike Perry <mikeperry-git@torproject.org>2022-02-22 19:28:34 +0000
commit1b1c26108050ebf8d739b6c6ce68925cf022ea3c (patch)
treef2020b72338b12ef09d3ec7d91a7b93ed71198ea
parent76bdadce121b0c33f46bb3d4e5eb0e8dc3277614 (diff)
downloadtor-1b1c26108050ebf8d739b6c6ce68925cf022ea3c.tar.gz
tor-1b1c26108050ebf8d739b6c6ce68925cf022ea3c.zip
Protover flag handling for congestion control negotiation
-rw-r--r--src/core/or/or.h7
-rw-r--r--src/core/or/protover.c6
-rw-r--r--src/core/or/protover.h5
-rw-r--r--src/core/or/versions.c11
4 files changed, 14 insertions, 15 deletions
diff --git a/src/core/or/or.h b/src/core/or/or.h
index 22846872a0..885c0e8b11 100644
--- a/src/core/or/or.h
+++ b/src/core/or/or.h
@@ -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;
diff --git a/src/core/or/protover.c b/src/core/or/protover.c
index 8405a720fb..ff986b62e2 100644
--- a/src/core/or/protover.c
+++ b/src/core/or/protover.c
@@ -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";
}
/*
diff --git a/src/core/or/protover.h b/src/core/or/protover.h
index ae258d74a5..410a67a9f7 100644
--- a/src/core/or/protover.h
+++ b/src/core/or/protover.h
@@ -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`
diff --git a/src/core/or/versions.c b/src/core/or/versions.c
index 052351120e..9913b3ee31 100644
--- a/src/core/or/versions.c
+++ b/src/core/or/versions.c
@@ -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);