29#define CONFLUX_ENABLED_MIN (0)
30#define CONFLUX_ENABLED_MAX (1)
31#define CONFLUX_ENABLED_DEFAULT (1)
35#define LOW_EXIT_THRESHOLD_MIN (0)
36#define LOW_EXIT_THRESHOLD_MAX (10000)
37#define LOW_EXIT_THRESHOLD_DEFAULT (6000)
40#define MAX_LINKED_SET_MIN (0)
41#define MAX_LINKED_SET_MAX (UINT8_MAX)
42#define MAX_LINKED_SET_DEFAULT (10)
45#define MAX_PREBUILT_SET_MIN (0)
46#define MAX_PREBUILT_SET_MAX (UINT8_MAX)
47#define MAX_PREBUILT_SET_DEFAULT (3)
50#define MAX_UNLINKED_LEG_RETRY_DEFAULT (3)
51#define MAX_UNLINKED_LEG_RETRY_MIN (0)
52#define MAX_UNLINKED_LEG_RETRY_MAX (UINT8_MAX)
55#define NUM_LEGS_SET_MIN (0)
56#define NUM_LEGS_SET_MAX (UINT8_MAX)
57#define NUM_LEGS_SET_DEFAULT (2)
60#define MAX_LEGS_SET_MIN (3)
61#define MAX_LEGS_SET_MAX (UINT8_MAX)
62#define MAX_LEGS_SET_DEFAULT (8)
65#define CFX_SEND_PCT_MIN (0)
66#define CFX_SEND_PCT_MAX (255)
67#define CFX_SEND_PCT_DFLT 100
70#define CFX_DRAIN_PCT_MIN (0)
71#define CFX_DRAIN_PCT_MAX (255)
72#define CFX_DRAIN_PCT_DFLT 0
75#define MAX_OOO_QUEUE_BYTES_MIN (0)
76#define MAX_OOO_QUEUE_BYTES_MAX (INT32_MAX)
77#define MAX_OOO_QUEUE_BYTES_DEFAULT MAX_OOO_QUEUE_BYTES_MAX
84static bool conflux_enabled = CONFLUX_ENABLED_DEFAULT;
86static uint8_t max_linked_set = MAX_LINKED_SET_DEFAULT;
88static uint8_t max_prebuilt_set = MAX_PREBUILT_SET_DEFAULT;
91STATIC uint32_t max_unlinked_leg_retry = MAX_UNLINKED_LEG_RETRY_DEFAULT;
93static uint8_t num_legs_set = NUM_LEGS_SET_DEFAULT;
95static uint8_t max_legs_set = MAX_LEGS_SET_DEFAULT;
99static double low_exit_threshold_ratio =
100 LOW_EXIT_THRESHOLD_DEFAULT / (double)LOW_EXIT_THRESHOLD_MAX;
102static uint8_t cfx_drain_pct = CFX_DRAIN_PCT_DFLT;
103static uint8_t cfx_send_pct = CFX_SEND_PCT_DFLT;
107static uint32_t max_ooo_queue_bytes = MAX_OOO_QUEUE_BYTES_DEFAULT;
111static double exit_conflux_ratio = 0.0;
118 double supported = 0.0;
126 if (!rs->is_exit || rs->is_bad_exit) {
129 if (rs->pv.supports_conflux) {
133 } SMARTLIST_FOREACH_END(rs);
135 if (total_exits > 0) {
137 supported / total_exits;
139 exit_conflux_ratio = 0.0;
142 log_info(
LD_GENERAL,
"Consensus has %.2f %% Exit relays supporting Conflux",
143 exit_conflux_ratio * 100.0);
168 tor_assert(CONST_TO_ORIGIN_CIRCUIT(circ)->cpath);
169 tor_assert(CONST_TO_ORIGIN_CIRCUIT(circ)->cpath->prev);
170 if (!CONST_TO_ORIGIN_CIRCUIT(circ)->cpath->prev->ccontrol)
183 if (server_mode(opts)) {
185 static ratelim_t rlimit = RATELIM_INIT(60 * 60);
188 "This tor is a relay and ConfluxEnabled is set to 0. "
189 "We would ask you to please write to us on "
190 "tor-relays@lists.torproject.org or file a bug explaining "
191 "why you have disabled this option. Without news from you, "
192 "we might end up marking your relay as a BadExit.");
199 return conflux_enabled;
204conflux_params_get_max_linked_set(
void)
206 return max_linked_set;
211conflux_params_get_max_prebuilt(
void)
216 if (exit_conflux_ratio <= 0.0) {
222 if (exit_conflux_ratio < low_exit_threshold_ratio) {
225 return max_prebuilt_set;
230conflux_params_get_max_unlinked_leg_retry(
void)
232 return max_unlinked_leg_retry;
237conflux_params_get_num_legs_set(
void)
244conflux_params_get_max_legs_set(
void)
251conflux_params_get_drain_pct(
void)
253 return cfx_drain_pct;
258conflux_params_get_send_pct(
void)
265conflux_params_get_max_oooq(
void)
267 return max_ooo_queue_bytes;
278 CONFLUX_ENABLED_DEFAULT,
279 CONFLUX_ENABLED_MIN, CONFLUX_ENABLED_MAX);
281 low_exit_threshold_ratio =
283 LOW_EXIT_THRESHOLD_DEFAULT,
284 LOW_EXIT_THRESHOLD_MIN, LOW_EXIT_THRESHOLD_MAX) /
285 (double)LOW_EXIT_THRESHOLD_MAX;
289 MAX_LINKED_SET_DEFAULT,
290 MAX_LINKED_SET_MIN, MAX_LINKED_SET_MAX);
294 MAX_PREBUILT_SET_DEFAULT,
295 MAX_PREBUILT_SET_MIN, MAX_PREBUILT_SET_MAX);
297 max_unlinked_leg_retry =
299 MAX_UNLINKED_LEG_RETRY_DEFAULT,
300 MAX_UNLINKED_LEG_RETRY_MIN,
301 MAX_UNLINKED_LEG_RETRY_MAX);
305 NUM_LEGS_SET_DEFAULT,
306 NUM_LEGS_SET_MIN, NUM_LEGS_SET_MAX);
310 MAX_LEGS_SET_DEFAULT,
311 MAX_LEGS_SET_MIN, MAX_LEGS_SET_MAX);
325 MAX_OOO_QUEUE_BYTES_DEFAULT,
326 MAX_OOO_QUEUE_BYTES_MIN,
327 MAX_OOO_QUEUE_BYTES_MAX);
329 count_exit_with_conflux_support(ns);
Header file for circuitlist.c.
#define CIRCUIT_IS_ORIGIN(c)
const or_options_t * get_options(void)
Header file for config.c.
Header file for conflux_params.c.
bool congestion_control_enabled(void)
Public APIs for congestion control.
int32_t networkstatus_get_param(const networkstatus_t *ns, const char *param_name, int32_t default_val, int32_t min_val, int32_t max_val)
Header file for networkstatus.c.
Networkstatus consensus/vote structure.
Master header file for Tor-specific functionality.
Origin circuit structure.
char * rate_limit_log(ratelim_t *lim, time_t now)
Header file for routermode.c.
Routerstatus (consensus entry) structure.
#define SMARTLIST_FOREACH_BEGIN(sl, type, var)
struct congestion_control_t * ccontrol
smartlist_t * routerstatus_list