tor  master
Data Structures | Macros | Typedefs | Functions
circuitmux.h File Reference

Header file for circuitmux.c. More...

#include "or.h"
#include "testsupport.h"
Include dependency graph for circuitmux.h:
This graph shows which files directly or indirectly include this file:

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
 

Functions

void circuitmux_assert_okay (circuitmux_t *cmux)
 
circuitmux_tcircuitmux_alloc (void)
 
void circuitmux_detach_all_circuits (circuitmux_t *cmux, smartlist_t *detached_out)
 
void circuitmux_free_ (circuitmux_t *cmux)
 
void circuitmux_clear_policy (circuitmux_t *cmux)
 
 MOCK_DECL (const circuitmux_policy_t *, circuitmux_get_policy,(circuitmux_t *cmux))
 
void circuitmux_set_policy (circuitmux_t *cmux, const circuitmux_policy_t *pol)
 
cell_direction_t circuitmux_attached_circuit_direction (circuitmux_t *cmux, circuit_t *circ)
 
int circuitmux_is_circuit_attached (circuitmux_t *cmux, circuit_t *circ)
 
int circuitmux_is_circuit_active (circuitmux_t *cmux, circuit_t *circ)
 
unsigned int circuitmux_num_cells_for_circuit (circuitmux_t *cmux, circuit_t *circ)
 
 MOCK_DECL (unsigned int, circuitmux_num_cells,(circuitmux_t *cmux))
 
unsigned int circuitmux_num_circuits (circuitmux_t *cmux)
 
unsigned int circuitmux_num_active_circuits (circuitmux_t *cmux)
 
int64_t circuitmux_count_queued_destroy_cells (const channel_t *chan, const circuitmux_t *cmux)
 
circuit_tcircuitmux_get_first_active_circuit (circuitmux_t *cmux, destroy_cell_queue_t **destroy_queue_out)
 
void circuitmux_notify_xmit_cells (circuitmux_t *cmux, circuit_t *circ, unsigned int n_cells)
 
void circuitmux_notify_xmit_destroy (circuitmux_t *cmux)
 
 MOCK_DECL (void, circuitmux_attach_circuit,(circuitmux_t *cmux, circuit_t *circ, cell_direction_t direction))
 
 MOCK_DECL (void, circuitmux_detach_circuit,(circuitmux_t *cmux, circuit_t *circ))
 
void circuitmux_clear_num_cells (circuitmux_t *cmux, circuit_t *circ)
 
void circuitmux_set_num_cells (circuitmux_t *cmux, circuit_t *circ, unsigned int n_cells)
 
void circuitmux_append_destroy_cell (channel_t *chan, circuitmux_t *cmux, circid_t circ_id, uint8_t reason)
 
void circuitmux_mark_destroyed_circids_usable (circuitmux_t *cmux, channel_t *chan)
 
 MOCK_DECL (int, circuitmux_compare_muxes,(circuitmux_t *cmux_1, circuitmux_t *cmux_2))
 

Detailed Description

Header file for circuitmux.c.

Macro Definition Documentation

◆ TO_CMUX_POL_CIRC_DATA

#define TO_CMUX_POL_CIRC_DATA (   x)    (&((x)->base_))

Convert a circuitmux_policy_circ_data_t subtype to a circuitmux_policy_circ_data_t.

◆ TO_CMUX_POL_DATA

#define TO_CMUX_POL_DATA (   x)    (&((x)->base_))

Convert a circuitmux_policy_data_t subtype to a circuitmux_policy_data_t.

Function Documentation

◆ circuitmux_attached_circuit_direction()

cell_direction_t circuitmux_attached_circuit_direction ( circuitmux_t cmux,
circuit_t circ 
)

Query the direction of an attached circuit

◆ circuitmux_clear_num_cells()

void circuitmux_clear_num_cells ( circuitmux_t cmux,
circuit_t circ 
)

Clear the cell counter for a circuit on a circuitmux

Here is the call graph for this function:

◆ circuitmux_clear_policy()

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.

Here is the call graph for this function:

◆ circuitmux_detach_all_circuits()

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.

Here is the caller graph for this function:

◆ circuitmux_free_()

void circuitmux_free_ ( circuitmux_t cmux)

Free a circuitmux_t; the circuits must be detached first with circuitmux_detach_all_circuits().

◆ circuitmux_get_first_active_circuit()

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.

Here is the caller graph for this function:

◆ circuitmux_is_circuit_active()

int circuitmux_is_circuit_active ( circuitmux_t cmux,
circuit_t circ 
)

Query whether a circuit is active on a circuitmux

◆ circuitmux_is_circuit_attached()

int circuitmux_is_circuit_attached ( circuitmux_t cmux,
circuit_t circ 
)

Query whether a circuit is attached to a circuitmux

◆ circuitmux_mark_destroyed_circids_usable()

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().

Here is the call graph for this function:

◆ circuitmux_notify_xmit_cells()

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.

◆ circuitmux_notify_xmit_destroy()

void circuitmux_notify_xmit_destroy ( circuitmux_t cmux)

Notify the circuitmux that a destroy was sent, so we can update the counter.

◆ circuitmux_num_active_circuits()

unsigned int circuitmux_num_active_circuits ( circuitmux_t cmux)

Query total number of circuits active on a circuitmux

◆ circuitmux_num_cells_for_circuit()

unsigned int circuitmux_num_cells_for_circuit ( circuitmux_t cmux,
circuit_t circ 
)

Query number of available cells for a circuit on a circuitmux

◆ circuitmux_num_circuits()

unsigned int circuitmux_num_circuits ( circuitmux_t cmux)

Query total number of circuits attached to a circuitmux

◆ circuitmux_set_num_cells()

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

Here is the caller graph for this function:

◆ circuitmux_set_policy()

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.

Here is the call graph for this function:
Here is the caller graph for this function: