Tor
0.4.7.0-alpha-dev
|
#include <circuitpadding.h>
Data Fields | |
circpad_hist_index_t | histogram_len |
circpad_hist_token_t | histogram [CIRCPAD_MAX_HISTOGRAM_LEN] |
circpad_delay_t | histogram_edges [CIRCPAD_MAX_HISTOGRAM_LEN+1] |
uint32_t | histogram_total_tokens |
circpad_distribution_t | iat_dist |
circpad_delay_t | dist_max_sample_usec |
circpad_delay_t | dist_added_shift_usec |
circpad_distribution_t | length_dist |
uint16_t | start_length |
uint64_t | max_length |
unsigned | length_includes_nonpadding: 1 |
circpad_statenum_t | next_state [CIRCPAD_NUM_EVENTS] |
unsigned | use_rtt_estimate: 1 |
circpad_removal_t | token_removal |
A state of a padding state machine. The information here are immutable and represent the initial form of the state; it does not get updated as things happen. The mutable information that gets updated in runtime are carried in a circpad_machine_runtime_t.
This struct describes the histograms and/or probability distributions, as well as parameters of a single state in the adaptive padding machine. Instances of this struct exist in global circpad machine definitions that come from torrc or the consensus.
Definition at line 294 of file circuitpadding.h.
circpad_hist_token_t histogram[CIRCPAD_MAX_HISTOGRAM_LEN] |
The histogram itself: an array of uint16s of tokens, whose widths are exponentially spaced, in microseconds.
This array must have histogram_len elements that are strictly monotonically increasing.
Definition at line 335 of file circuitpadding.h.
circpad_hist_index_t histogram_len |
If a histogram is used for this state, this specifies the number of bins of this histogram. Histograms must have at least 2 bins.
In particular, the following histogram:
Tokens
#0 | #2 | #3 | (infinity bin) | ||
---|---|---|---|---|---|
would be specified the following way: histogram_len = 6; histogram[] = { 6, 10, 6, 7, 9, 6 } histogram_edges[] = { 0, 100, 200, 350, 500, 1000 }
The final bin is called the "infinity bin" and if it's chosen we don't schedule any padding. The infinity bin is strange because its lower edge is the max value of possible non-infinite delay allowed by this histogram, and its upper edge is CIRCPAD_DELAY_INFINITE. You can tell if the infinity bin is chosen by inspecting its bin index or inspecting its upper edge.
If a delay probability distribution is used for this state, this is set to 0.
Definition at line 329 of file circuitpadding.h.
Referenced by circpad_machine_setup_tokens(), and padding_machine_state_is_valid().
uint32_t histogram_total_tokens |
Total number of tokens in this histogram. This is a constant and is not decremented every time we spend a token. It's used for initializing and refilling the histogram.
Definition at line 347 of file circuitpadding.h.
circpad_distribution_t iat_dist |
Represents a delay probability distribution (aka IAT distribution). It's a parametrized way of encoding inter-packet delay information in microseconds. It can be used instead of histograms.
If it is used, token_removal below must be set to CIRCPAD_TOKEN_REMOVAL_NONE.
Start_usec, range_sec, and rtt_estimates are still applied to the results of sampling from this distribution (range_sec is used as a max).
Definition at line 360 of file circuitpadding.h.
Referenced by circpad_distribution_sample_iat_delay(), and circpad_machine_sample_delay().
circpad_distribution_t length_dist |
The length dist is a parameterized way of encoding how long this state machine runs in terms of sent padding cells or all sent cells. Values are sampled from this distribution, clamped to max_len, and then start_len is added to that value.
It may be specified instead of or in addition to the infinity bins and bins empty conditions.
Definition at line 380 of file circuitpadding.h.
Referenced by circpad_choose_state_length().
unsigned length_includes_nonpadding |
Should we decrement length when we see a nonpadding packet? XXX: Are there any machines that actually want to set this to 0? There may not be. OTOH, it's only a bit..
Definition at line 389 of file circuitpadding.h.
uint64_t max_length |
A cap on the length value that can be sampled from the length_dist
Definition at line 384 of file circuitpadding.h.
circpad_statenum_t next_state[CIRCPAD_NUM_EVENTS] |
This is an array that specifies the next state to transition to upon receipt an event matching the indicated array index.
This aborts our scheduled packet and switches to the state corresponding to the index of the array. Tokens are filled upon this transition.
States are allowed to transition to themselves, which means re-schedule a new padding timer. They are also allowed to temporarily "transition" to the "IGNORE" and "CANCEL" pseudo-states. See defines below for details on state behavior and meaning.
Definition at line 404 of file circuitpadding.h.
uint16_t start_length |
A minimum length value, added to the output of length_dist
Definition at line 382 of file circuitpadding.h.
circpad_removal_t token_removal |
This specifies the token removal strategy to use upon padding and non-padding activity.
Definition at line 416 of file circuitpadding.h.
Referenced by circpad_machine_remove_token(), and circpad_machine_setup_tokens().
unsigned use_rtt_estimate |
If true, estimate the RTT from this relay to the exit/website and add that to start_usec for use as the histogram bin 0 start delay.
Right now this is only supported for relay-side state machines.
Definition at line 412 of file circuitpadding.h.