mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 15:43:32 +01:00
Turn circuitmux.c comments into module docs.
This commit is contained in:
parent
35df48b189
commit
56933787d5
@ -4,6 +4,69 @@
|
|||||||
/**
|
/**
|
||||||
* \file circuitmux.c
|
* \file circuitmux.c
|
||||||
* \brief Circuit mux/cell selection abstraction
|
* \brief Circuit mux/cell selection abstraction
|
||||||
|
*
|
||||||
|
* A circuitmux is responsible for <b>MU</b>ltiple<b>X</b>ing all of the
|
||||||
|
* circuits that are writing on a single channel. It keeps track of which of
|
||||||
|
* these circuits has something to write (aka, "active" circuits), and which
|
||||||
|
* one should write next. A circuitmux corresponds 1:1 with a channel.
|
||||||
|
*
|
||||||
|
* There can be different implementations of the circuitmux's rules (which
|
||||||
|
* decide which circuit is next to write).
|
||||||
|
*
|
||||||
|
* A circuitmux exposes three distinct
|
||||||
|
* interfaces to other components:
|
||||||
|
*
|
||||||
|
* To channels, which each have a circuitmux_t, the supported operations
|
||||||
|
* (invoked from relay.c) are:
|
||||||
|
*
|
||||||
|
* circuitmux_get_first_active_circuit():
|
||||||
|
*
|
||||||
|
* Pick one of the circuitmux's active circuits to send cells from.
|
||||||
|
*
|
||||||
|
* circuitmux_notify_xmit_cells():
|
||||||
|
*
|
||||||
|
* Notify the circuitmux that cells have been sent on a circuit.
|
||||||
|
*
|
||||||
|
* To circuits, the exposed operations are:
|
||||||
|
*
|
||||||
|
* circuitmux_attach_circuit():
|
||||||
|
*
|
||||||
|
* Attach a circuit to the circuitmux; this will allocate any policy-
|
||||||
|
* specific data wanted for this circuit and add it to the active
|
||||||
|
* circuits list if it has queued cells.
|
||||||
|
*
|
||||||
|
* circuitmux_detach_circuit():
|
||||||
|
*
|
||||||
|
* Detach a circuit from the circuitmux, freeing associated structures.
|
||||||
|
*
|
||||||
|
* circuitmux_clear_num_cells():
|
||||||
|
*
|
||||||
|
* Clear the circuitmux's cell counter for this circuit.
|
||||||
|
*
|
||||||
|
* circuitmux_set_num_cells():
|
||||||
|
*
|
||||||
|
* Set the circuitmux's cell counter for this circuit. One of
|
||||||
|
* circuitmuc_clear_num_cells() or circuitmux_set_num_cells() MUST be
|
||||||
|
* called when the number of cells queued on a circuit changes.
|
||||||
|
*
|
||||||
|
* See circuitmux.h for the circuitmux_policy_t data structure, which contains
|
||||||
|
* a table of function pointers implementing a circuit selection policy, and
|
||||||
|
* circuitmux_ewma.c for an example of a circuitmux policy. Circuitmux
|
||||||
|
* policies can be manipulated with:
|
||||||
|
*
|
||||||
|
* circuitmux_get_policy():
|
||||||
|
*
|
||||||
|
* Return the current policy for a circuitmux_t, if any.
|
||||||
|
*
|
||||||
|
* circuitmux_clear_policy():
|
||||||
|
*
|
||||||
|
* Remove a policy installed on a circuitmux_t, freeing all associated
|
||||||
|
* data. The circuitmux will revert to the built-in round-robin behavior.
|
||||||
|
*
|
||||||
|
* circuitmux_set_policy():
|
||||||
|
*
|
||||||
|
* Install a policy on a circuitmux_t; the appropriate callbacks will be
|
||||||
|
* made to attach all existing circuits to the new policy.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "or.h"
|
#include "or.h"
|
||||||
@ -39,64 +102,6 @@ typedef struct circuit_muxinfo_s circuit_muxinfo_t;
|
|||||||
* Structures for circuitmux.c
|
* Structures for circuitmux.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
* A circuitmux is a collection of circuits; it tracks which subset
|
|
||||||
* of the attached circuits are 'active' (i.e., have cells available
|
|
||||||
* to transmit) and how many cells on each. It expoes three distinct
|
|
||||||
* interfaces to other components:
|
|
||||||
*
|
|
||||||
* To channels, which each have a circuitmux_t, the supported operations
|
|
||||||
* are:
|
|
||||||
*
|
|
||||||
* circuitmux_get_first_active_circuit():
|
|
||||||
*
|
|
||||||
* Pick one of the circuitmux's active circuits to send cells from.
|
|
||||||
*
|
|
||||||
* circuitmux_notify_xmit_cells():
|
|
||||||
*
|
|
||||||
* Notify the circuitmux that cells have been sent on a circuit.
|
|
||||||
*
|
|
||||||
* To circuits, the exposed operations are:
|
|
||||||
*
|
|
||||||
* circuitmux_attach_circuit():
|
|
||||||
*
|
|
||||||
* Attach a circuit to the circuitmux; this will allocate any policy-
|
|
||||||
* specific data wanted for this circuit and add it to the active
|
|
||||||
* circuits list if it has queued cells.
|
|
||||||
*
|
|
||||||
* circuitmux_detach_circuit():
|
|
||||||
*
|
|
||||||
* Detach a circuit from the circuitmux, freeing associated structures.
|
|
||||||
*
|
|
||||||
* circuitmux_clear_num_cells():
|
|
||||||
*
|
|
||||||
* Clear the circuitmux's cell counter for this circuit.
|
|
||||||
*
|
|
||||||
* circuitmux_set_num_cells():
|
|
||||||
*
|
|
||||||
* Set the circuitmux's cell counter for this circuit.
|
|
||||||
*
|
|
||||||
* See circuitmux.h for the circuitmux_policy_t data structure, which contains
|
|
||||||
* a table of function pointers implementing a circuit selection policy, and
|
|
||||||
* circuitmux_ewma.c for an example of a circuitmux policy. Circuitmux
|
|
||||||
* policies can be manipulated with:
|
|
||||||
*
|
|
||||||
* circuitmux_get_policy():
|
|
||||||
*
|
|
||||||
* Return the current policy for a circuitmux_t, if any.
|
|
||||||
*
|
|
||||||
* circuitmux_clear_policy():
|
|
||||||
*
|
|
||||||
* Remove a policy installed on a circuitmux_t, freeing all associated
|
|
||||||
* data. The circuitmux will revert to the built-in round-robin behavior.
|
|
||||||
*
|
|
||||||
* circuitmux_set_policy():
|
|
||||||
*
|
|
||||||
* Install a policy on a circuitmux_t; the appropriate callbacks will be
|
|
||||||
* made to attach all existing circuits to the new policy.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct circuitmux_s {
|
struct circuitmux_s {
|
||||||
/* Keep count of attached, active circuits */
|
/* Keep count of attached, active circuits */
|
||||||
unsigned int n_circuits, n_active_circuits;
|
unsigned int n_circuits, n_active_circuits;
|
||||||
|
Loading…
Reference in New Issue
Block a user