Tor 0.4.9.8
Loading...
Searching...
No Matches
conflux.h File Reference

Public APIs for conflux multipath support. More...

Go to the source code of this file.

Data Structures

struct  conflux_msg_t
 

Macros

#define CONFLUX_FOR_EACH_LEG_BEGIN(cfx, var)
 
#define CONFLUX_FOR_EACH_LEG_END(var)
 
#define CONFLUX_NUM_LEGS(cfx)
 
#define conflux_relay_msg_free(msg)
 

Functions

size_t conflux_handle_oom (size_t bytes_to_remove)
 
uint64_t conflux_get_total_bytes_allocation (void)
 
uint64_t conflux_get_circ_bytes_allocation (const circuit_t *circ)
 
void conflux_clear_ooo_q (conflux_t *cfx)
 
size_t conflux_msg_alloc_cost (conflux_msg_t *msg)
 
void conflux_update_rtt (conflux_t *cfx, circuit_t *circ, uint64_t rtt_usec)
 
circuit_tconflux_decide_circ_for_send (conflux_t *cfx, circuit_t *orig_circ, uint8_t relay_command)
 
circuit_tconflux_decide_next_circ (conflux_t *cfx)
 
int conflux_process_switch_command (circuit_t *in_circ, crypt_path_t *layer_hint, const relay_msg_t *msg)
 
bool conflux_should_multiplex (int relay_command)
 
bool conflux_process_relay_msg (conflux_t *cfx, circuit_t *in_circ, crypt_path_t *layer_hint, const relay_msg_t *msg)
 
conflux_msg_tconflux_dequeue_relay_msg (circuit_t *circ)
 
void conflux_note_cell_sent (conflux_t *cfx, circuit_t *circ, uint8_t relay_command)
 
void conflux_relay_msg_free_ (conflux_msg_t *msg)
 

Detailed Description

Public APIs for conflux multipath support.

Definition in file conflux.h.

Macro Definition Documentation

◆ CONFLUX_FOR_EACH_LEG_BEGIN

◆ CONFLUX_FOR_EACH_LEG_END

#define CONFLUX_FOR_EACH_LEG_END ( var)
Value:
SMARTLIST_FOREACH_END(var)

Definition at line 22 of file conflux.h.

◆ CONFLUX_NUM_LEGS

#define CONFLUX_NUM_LEGS ( cfx)
Value:
(smartlist_len(cfx->legs))

Helper: Return the number of legs a conflux object has.

Definition at line 26 of file conflux.h.

Referenced by cfx_add_leg(), cfx_del_leg(), conflux_decide_circ_cwndrtt(), conflux_decide_circ_lowrtt(), conflux_decide_circ_minrtt(), linked_circuit_closed(), and linked_circuit_free().

◆ conflux_relay_msg_free

#define conflux_relay_msg_free ( msg)
Value:
FREE_AND_NULL(conflux_msg_t, conflux_relay_msg_free_, (msg))
void conflux_relay_msg_free_(conflux_msg_t *msg)
Definition conflux.c:1022

Definition at line 69 of file conflux.h.

Function Documentation

◆ conflux_clear_ooo_q()

void conflux_clear_ooo_q ( conflux_t * cfx)

Free all cells in the ooo_q of the given cfx which updates the total_ooo_q_bytes.

Must be called before freeing the queue itself.

Definition at line 219 of file conflux.c.

◆ conflux_decide_circ_for_send()

circuit_t * conflux_decide_circ_for_send ( conflux_t * cfx,
circuit_t * orig_circ,
uint8_t relay_command )

This function is called when we want to send a relay cell on a conflux, as well as when we want to compute available space in to package from streams.

It determines the circuit that relay command should be sent on, and sends a SWITCH cell if necessary.

It returns the circuit we should send on. If no circuits are ready to send, it returns NULL.

Definition at line 489 of file conflux.c.

Referenced by relay_send_command_from_edge_().

◆ conflux_decide_next_circ()

circuit_t * conflux_decide_next_circ ( conflux_t * cfx)

Returns the circuit that conflux would send on next, if conflux_decide_circ_for_send were called. This is used to compute available space in the package window.

Definition at line 659 of file conflux.c.

Referenced by circuit_get_package_window(), circuit_resume_edge_reading_helper(), conflux_can_send(), and conflux_decide_circ_for_send().

◆ conflux_dequeue_relay_msg()

conflux_msg_t * conflux_dequeue_relay_msg ( circuit_t * circ)

Dequeue the top cell from our queue.

Returns the cell as a conflux_cell_t, or NULL if the queue is empty or has a hole.

Definition at line 967 of file conflux.c.

Referenced by connection_edge_process_relay_cell().

◆ conflux_get_circ_bytes_allocation()

uint64_t conflux_get_circ_bytes_allocation ( const circuit_t * circ)

Return the total memory allocation the circuit is using by conflux. If this circuit is not a Conflux circuit, 0 is returned.

Definition at line 181 of file conflux.c.

Referenced by circuits_handle_oom().

◆ conflux_get_total_bytes_allocation()

uint64_t conflux_get_total_bytes_allocation ( void )

Return the total memory allocation in bytes by the subsystem.

At the moment, only out of order queues are consiered.

Definition at line 194 of file conflux.c.

Referenced by cell_queues_check_size().

◆ conflux_handle_oom()

size_t conflux_handle_oom ( size_t bytes_to_remove)

The OOM handler is asking us to try to free at least bytes_to_remove.

Definition at line 201 of file conflux.c.

Referenced by cell_queues_check_size().

◆ conflux_msg_alloc_cost()

size_t conflux_msg_alloc_cost ( conflux_msg_t * msg)

Return the total number of required allocated to store msg.

Definition at line 47 of file conflux.c.

Referenced by conflux_dequeue_relay_msg(), and conflux_process_relay_msg().

◆ conflux_note_cell_sent()

void conflux_note_cell_sent ( conflux_t * cfx,
circuit_t * circ,
uint8_t relay_command )

Called after conflux actually sent a cell on a circuit. This function updates sequence number counters, and switch counters.

Definition at line 578 of file conflux.c.

Referenced by relay_send_command_from_edge_().

◆ conflux_process_relay_msg()

bool conflux_process_relay_msg ( conflux_t * cfx,
circuit_t * in_circ,
crypt_path_t * layer_hint,
const relay_msg_t * msg )

Process an incoming relay cell for conflux. Called from connection_edge_process_relay_cell().

Returns true if the conflux system now has well-ordered cells to deliver to streams, false otherwise.

Definition at line 885 of file conflux.c.

Referenced by connection_edge_process_relay_cell().

◆ conflux_process_switch_command()

int conflux_process_switch_command ( circuit_t * in_circ,
crypt_path_t * layer_hint,
const relay_msg_t * msg )

Validate and handle RELAY_COMMAND_CONFLUX_SWITCH.

Definition at line 787 of file conflux.c.

Referenced by handle_relay_msg().

◆ conflux_relay_msg_free_()

void conflux_relay_msg_free_ ( conflux_msg_t * msg)

Free a given conflux msg object.

Definition at line 1022 of file conflux.c.

◆ conflux_should_multiplex()

bool conflux_should_multiplex ( int relay_command)

Determine if we should multiplex a specific relay command or not.

TODO: Version of this that is the set of forbidden commands on linked circuits

Definition at line 59 of file conflux.c.

Referenced by conflux_decide_circ_for_send(), conflux_note_cell_sent(), connection_edge_process_relay_cell(), and relay_send_command_from_edge_().

◆ conflux_update_rtt()

void conflux_update_rtt ( conflux_t * cfx,
circuit_t * circ,
uint64_t rtt_usec )

Called when we have a new RTT estimate for a circuit.

Definition at line 708 of file conflux.c.

Referenced by congestion_control_dispatch_cc_alg().