tor
master
|
Header file for circuitmux.c. More...
Go to the source code of this file.
Data Structures | |
struct | circuitmux_policy_s |
struct | circuitmux_policy_data_s |
struct | circuitmux_policy_circ_data_s |
Macros | |
#define | TO_CMUX_POL_DATA(x) (&((x)->base_)) |
#define | TO_CMUX_POL_CIRC_DATA(x) (&((x)->base_)) |
#define | circuitmux_free(cmux) FREE_AND_NULL(circuitmux_t, circuitmux_free_, (cmux)) |
Typedefs | |
typedef struct circuitmux_policy_s | circuitmux_policy_t |
typedef struct circuitmux_policy_data_s | circuitmux_policy_data_t |
typedef struct circuitmux_policy_circ_data_s | circuitmux_policy_circ_data_t |
Header file for circuitmux.c.
#define TO_CMUX_POL_CIRC_DATA | ( | x | ) | (&((x)->base_)) |
Convert a circuitmux_policy_circ_data_t subtype to a circuitmux_policy_circ_data_t.
#define TO_CMUX_POL_DATA | ( | x | ) | (&((x)->base_)) |
Convert a circuitmux_policy_data_t subtype to a circuitmux_policy_data_t.
cell_direction_t circuitmux_attached_circuit_direction | ( | circuitmux_t * | cmux, |
circuit_t * | circ | ||
) |
Query the direction of an attached circuit
void circuitmux_clear_num_cells | ( | circuitmux_t * | cmux, |
circuit_t * | circ | ||
) |
Clear the cell counter for a circuit on a circuitmux
void circuitmux_clear_policy | ( | circuitmux_t * | cmux | ) |
Remove any policy installed on cmux; all policy data will be freed and cmux behavior will revert to the built-in round-robin active_circuits mechanism.
void circuitmux_detach_all_circuits | ( | circuitmux_t * | cmux, |
smartlist_t * | detached_out | ||
) |
Detach all circuits from a circuitmux (use before circuitmux_free())
If detached_out is non-NULL, add every detached circuit_t to detached_out.
void circuitmux_free_ | ( | circuitmux_t * | cmux | ) |
Free a circuitmux_t; the circuits must be detached first with circuitmux_detach_all_circuits().
circuit_t* circuitmux_get_first_active_circuit | ( | circuitmux_t * | cmux, |
destroy_cell_queue_t ** | destroy_queue_out | ||
) |
Pick a circuit to send from, using the active circuits list or a circuitmux policy if one is available. This is called from channel.c.
If we would rather send a destroy cell, return NULL and set *destroy_queue_out to the destroy queue.
If we have nothing to send, set *destroy_queue_out to NULL and return NULL.
int circuitmux_is_circuit_active | ( | circuitmux_t * | cmux, |
circuit_t * | circ | ||
) |
Query whether a circuit is active on a circuitmux
int circuitmux_is_circuit_attached | ( | circuitmux_t * | cmux, |
circuit_t * | circ | ||
) |
Query whether a circuit is attached to a circuitmux
void circuitmux_mark_destroyed_circids_usable | ( | circuitmux_t * | cmux, |
channel_t * | chan | ||
) |
Reclaim all circuit IDs currently marked as unusable on chan because of pending destroy cells in cmux.
This function must be called AFTER circuits are unlinked from the (channel, circuid-id) map with circuit_unlink_all_from_channel(), but before calling circuitmux_free().
void circuitmux_notify_xmit_cells | ( | circuitmux_t * | cmux, |
circuit_t * | circ, | ||
unsigned int | n_cells | ||
) |
Notify the circuitmux that cells have been sent on a circuit; this is called from channel.c.
void circuitmux_notify_xmit_destroy | ( | circuitmux_t * | cmux | ) |
Notify the circuitmux that a destroy was sent, so we can update the counter.
unsigned int circuitmux_num_active_circuits | ( | circuitmux_t * | cmux | ) |
Query total number of circuits active on a circuitmux
unsigned int circuitmux_num_cells_for_circuit | ( | circuitmux_t * | cmux, |
circuit_t * | circ | ||
) |
Query number of available cells for a circuit on a circuitmux
unsigned int circuitmux_num_circuits | ( | circuitmux_t * | cmux | ) |
Query total number of circuits attached to a circuitmux
void circuitmux_set_num_cells | ( | circuitmux_t * | cmux, |
circuit_t * | circ, | ||
unsigned int | n_cells | ||
) |
Set the cell counter for a circuit on a circuitmux
void circuitmux_set_policy | ( | circuitmux_t * | cmux, |
const circuitmux_policy_t * | pol | ||
) |
Set policy; allocate for new policy, detach all circuits from old policy if any, attach them to new policy, and free old policy data.