diff options
author | Andrea Shepard <andrea@torproject.org> | 2013-06-13 20:32:31 -0700 |
---|---|---|
committer | Andrea Shepard <andrea@torproject.org> | 2013-06-13 21:59:01 -0700 |
commit | 459aada4d0e2ca1c4538fb6f4ef4e275ae162600 (patch) | |
tree | 1c8242f0455b99a10792670977b3341ef7beb8e4 /src/or/or.h | |
parent | 6fc3997307b1a2729dcc651102e79b195698b6af (diff) | |
download | tor-459aada4d0e2ca1c4538fb6f4ef4e275ae162600.tar.gz tor-459aada4d0e2ca1c4538fb6f4ef4e275ae162600.zip |
Don't queue more cells as a middle relay than the spec allows to be in flight
Diffstat (limited to 'src/or/or.h')
-rw-r--r-- | src/or/or.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/or/or.h b/src/or/or.h index daff6de933..fbf6f52c75 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -543,6 +543,8 @@ typedef enum { #define CIRCUIT_PURPOSE_IS_ESTABLISHED_REND(p) \ ((p) == CIRCUIT_PURPOSE_C_REND_JOINED || \ (p) == CIRCUIT_PURPOSE_S_REND_JOINED) +/** True iff the circuit_t c is actually an or_circuit_t */ +#define CIRCUIT_IS_ORCIRC(c) (((circuit_t *)(c))->magic == OR_CIRCUIT_MAGIC) /** How many circuits do we want simultaneously in-progress to handle * a given stream? */ @@ -820,6 +822,18 @@ typedef enum { /** Amount to increment a stream window when we get a stream SENDME. */ #define STREAMWINDOW_INCREMENT 50 +/** Maximum number of queued cells on a circuit for which we are the + * midpoint before we give up and kill it. This must be >= circwindow + * to avoid killing innocent circuits. The ORCIRC_MAX_MIDDLE_KILL_THRESH + * ratio controls the margin of error between emitting a warning and + * killing the circuit. + */ +#define ORCIRC_MAX_MIDDLE_CELLS CIRCWINDOW_START_MAX +/** Ratio of hard (circuit kill) to soft (warning) thresholds for the + * ORCIRC_MAX_MIDDLE_CELLS tests. + */ +#define ORCIRC_MAX_MIDDLE_KILL_THRESH (1.1f) + /* Cell commands. These values are defined in tor-spec.txt. */ #define CELL_PADDING 0 #define CELL_CREATE 1 @@ -3157,6 +3171,12 @@ typedef struct or_circuit_t { * exit-ward queues of this circuit; reset every time when writing * buffer stats to disk. */ uint64_t total_cell_waiting_time; + + /** Maximum cell queue size for a middle relay; this is stored per circuit + * so append_cell_to_circuit_queue() can adjust it if it changes. If set + * to zero, it is initialized to the default value. + */ + uint32_t max_middle_cells; } or_circuit_t; /** Convert a circuit subtype to a circuit_t. */ |