read the "circwindow" parameter from the consensus

backport of c43859c5c1
backport of 0d13e0ed14
This commit is contained in:
Roger Dingledine 2009-10-14 17:07:32 -04:00
parent 83c3f118db
commit 2394336426
7 changed files with 31 additions and 8 deletions

View File

@ -10,6 +10,11 @@ Changes in version 0.2.1.20 - 2009-??-??
contains more than one signature from the same voter. Bugfix on contains more than one signature from the same voter. Bugfix on
0.2.0.3-alpha. 0.2.0.3-alpha.
o Major features:
- Tor now reads the "circwindow" parameter out of the consensus,
and uses that value for its circuit package window rather than the
default of 1000 cells. Begins the implementation of proposal 168.
o New directory authorities: o New directory authorities:
- Set up urras (run by Jacob Appelbaum) as the seventh v3 directory - Set up urras (run by Jacob Appelbaum) as the seventh v3 directory
authority. authority.

View File

@ -1829,7 +1829,7 @@ onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice)
hop->extend_info = extend_info_dup(choice); hop->extend_info = extend_info_dup(choice);
hop->package_window = CIRCWINDOW_START; hop->package_window = circuit_initial_package_window();
hop->deliver_window = CIRCWINDOW_START; hop->deliver_window = CIRCWINDOW_START;
return 0; return 0;

View File

@ -361,6 +361,19 @@ circuit_purpose_to_controller_string(uint8_t purpose)
} }
} }
/** Pick a reasonable package_window to start out for our circuits.
* Originally this was hard-coded at 1000, but now the consensus votes
* on the answer. See proposal 168. */
int32_t
circuit_initial_package_window(void)
{
int32_t num = networkstatus_get_param(NULL, "circwindow", CIRCWINDOW_START);
/* If the consensus tells us a negative number, we'd assert. */
if (num < 0)
num = CIRCWINDOW_START;
return num;
}
/** Initialize the common elements in a circuit_t, and add it to the global /** Initialize the common elements in a circuit_t, and add it to the global
* list. */ * list. */
static void static void
@ -368,7 +381,7 @@ init_circuit_base(circuit_t *circ)
{ {
circ->timestamp_created = time(NULL); circ->timestamp_created = time(NULL);
circ->package_window = CIRCWINDOW_START; circ->package_window = circuit_initial_package_window();
circ->deliver_window = CIRCWINDOW_START; circ->deliver_window = CIRCWINDOW_START;
circuit_add(circ); circuit_add(circ);

View File

@ -1889,14 +1889,18 @@ networkstatus_dump_bridge_status_to_file(time_t now)
} }
/** Return the value of a integer parameter from the networkstatus <b>ns</b> /** Return the value of a integer parameter from the networkstatus <b>ns</b>
* whose name is <b>param_name</b>. Return <b>default_val</b> if ns is NULL, * whose name is <b>param_name</b>. If <b>ns</b> is NULL, try loading the
* or if it has no parameter called <b>param_name</b>. */ * latest consensus ourselves. Return <b>default_val</b> if no latest
* consensus, or if it has no parameter called <b>param_name</b>. */
int32_t int32_t
networkstatus_get_param(networkstatus_t *ns, const char *param_name, networkstatus_get_param(networkstatus_t *ns, const char *param_name,
int32_t default_val) int32_t default_val)
{ {
size_t name_len; size_t name_len;
if (!ns) /* if they pass in null, go find it ourselves */
ns = networkstatus_get_latest_consensus();
if (!ns || !ns->net_params) if (!ns || !ns->net_params)
return default_val; return default_val;

View File

@ -1853,9 +1853,9 @@ typedef struct crypt_path_t {
struct crypt_path_t *prev; /**< Link to previous crypt_path_t in the struct crypt_path_t *prev; /**< Link to previous crypt_path_t in the
* circuit. */ * circuit. */
int package_window; /**< How many bytes are we allowed to originate ending int package_window; /**< How many cells are we allowed to originate ending
* at this step? */ * at this step? */
int deliver_window; /**< How many bytes are we willing to deliver originating int deliver_window; /**< How many cells are we willing to deliver originating
* at this step? */ * at this step? */
} crypt_path_t; } crypt_path_t;
@ -2789,6 +2789,7 @@ void circuit_set_n_circid_orconn(circuit_t *circ, circid_t id,
or_connection_t *conn); or_connection_t *conn);
void circuit_set_state(circuit_t *circ, uint8_t state); void circuit_set_state(circuit_t *circ, uint8_t state);
void circuit_close_all_marked(void); void circuit_close_all_marked(void);
int32_t circuit_initial_package_window(void);
origin_circuit_t *origin_circuit_new(void); origin_circuit_t *origin_circuit_new(void);
or_circuit_t *or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn); or_circuit_t *or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn);
circuit_t *circuit_get_by_circid_orconn(circid_t circ_id, circuit_t *circuit_get_by_circid_orconn(circid_t circ_id,

View File

@ -703,7 +703,7 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const char *request,
/* set the windows to default. these are the windows /* set the windows to default. these are the windows
* that alice thinks bob has. * that alice thinks bob has.
*/ */
hop->package_window = CIRCWINDOW_START; hop->package_window = circuit_initial_package_window();
hop->deliver_window = CIRCWINDOW_START; hop->deliver_window = CIRCWINDOW_START;
onion_append_to_cpath(&circ->cpath, hop); onion_append_to_cpath(&circ->cpath, hop);

View File

@ -1556,7 +1556,7 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
/* set the windows to default. these are the windows /* set the windows to default. these are the windows
* that bob thinks alice has. * that bob thinks alice has.
*/ */
hop->package_window = CIRCWINDOW_START; hop->package_window = circuit_initial_package_window();
hop->deliver_window = CIRCWINDOW_START; hop->deliver_window = CIRCWINDOW_START;
onion_append_to_cpath(&circuit->cpath, hop); onion_append_to_cpath(&circuit->cpath, hop);