/** Allocate a new or_circuit_t, connected to <b>p_conn</b> as * <b>p_circ_id</b>. If <b>p_conn</b> is NULL, the circuit is unattached. */ or_circuit_t * or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn) { /* CircIDs */ or_circuit_t *circ; circ = tor_malloc_zero(sizeof(or_circuit_t)); circ->_base.magic = OR_CIRCUIT_MAGIC; if (p_conn) circuit_set_p_circid_orconn(circ, p_circ_id, p_conn); circ->remaining_relay_early_cells = MAX_RELAY_EARLY_CELLS_PER_CIRCUIT; init_circuit_base(TO_CIRCUIT(circ)); /* Initialize the cell_ewma_t structure */ /* Initialize the cell counts to 0 */ circ->p_cell_ewma.cell_count = 0.0; circ->p_cell_ewma.last_adjusted_tick = cell_ewma_get_tick(); circ->p_cell_ewma.is_for_p_conn = 1; /* It's not in any heap yet. */ circ->p_cell_ewma.heap_index = -1; return circ; }
static circuitmux_policy_data_t * ewma_alloc_cmux_data(circuitmux_t *cmux) { ewma_policy_data_t *pol = NULL; tor_assert(cmux); pol = tor_malloc_zero(sizeof(*pol)); pol->base_.magic = EWMA_POL_DATA_MAGIC; pol->active_circuit_pqueue = smartlist_new(); pol->active_circuit_pqueue_last_recalibrated = cell_ewma_get_tick(); return TO_CMUX_POL_DATA(pol); }
/** Initialize the common elements in a circuit_t, and add it to the global * list. */ static void init_circuit_base(circuit_t *circ) { tor_gettimeofday(&circ->timestamp_created); circ->package_window = circuit_initial_package_window(); circ->deliver_window = CIRCWINDOW_START; /* Initialize the cell_ewma_t structure */ circ->n_cell_ewma.last_adjusted_tick = cell_ewma_get_tick(); circ->n_cell_ewma.cell_count = 0.0; circ->n_cell_ewma.heap_index = -1; circ->n_cell_ewma.is_for_p_conn = 0; circuit_add(circ); }
static circuitmux_policy_circ_data_t * ewma_alloc_circ_data(circuitmux_t *cmux, circuitmux_policy_data_t *pol_data, circuit_t *circ, cell_direction_t direction, unsigned int cell_count) { ewma_policy_circ_data_t *cdata = NULL; tor_assert(cmux); tor_assert(pol_data); tor_assert(circ); tor_assert(direction == CELL_DIRECTION_OUT || direction == CELL_DIRECTION_IN); /* Shut the compiler up without triggering -Wtautological-compare */ (void)cell_count; cdata = tor_malloc_zero(sizeof(*cdata)); cdata->base_.magic = EWMA_POL_CIRC_DATA_MAGIC; cdata->circ = circ; /* * Initialize the cell_ewma_t structure (formerly in * init_circuit_base()) */ cdata->cell_ewma.last_adjusted_tick = cell_ewma_get_tick(); cdata->cell_ewma.cell_count = 0.0; cdata->cell_ewma.heap_index = -1; if (direction == CELL_DIRECTION_IN) { cdata->cell_ewma.is_for_p_chan = 1; } else { cdata->cell_ewma.is_for_p_chan = 0; } return TO_CMUX_POL_CIRC_DATA(cdata); }