tmp, tmp);
smm->configured_v6_halfopen_table_memory = tmp;
}
+ else if (unformat (input, "local-endpoints-table-memory %U",
+ unformat_memory_size, &tmp))
+ {
+ if (tmp >= 0x100000000)
+ return clib_error_return (0, "memory size %llx (%lld) too large",
+ tmp, tmp);
+ smm->local_endpoints_table_memory = tmp;
+ }
+ else if (unformat (input, "local-endpoints-table-buckets %d",
+ &smm->local_endpoints_table_buckets))
+ ;
else
return clib_error_return (0, "unknown input `%U'",
format_unformat_error, input);
stream_session_t *listen_sessions[SESSION_N_TYPES];
/** Per-proto, per-worker enqueue epoch counters */
- u8 *current_enqueue_epoch[TRANSPORT_N_PROTO];
+ u32 *current_enqueue_epoch[TRANSPORT_N_PROTO];
/** Per-proto, per-worker thread vector of sessions to enqueue */
u32 **session_to_enqueue[TRANSPORT_N_PROTO];
/** vpp fifo event queue */
unix_shared_memory_queue_t **vpp_event_queues;
+ /** Unique segment name counter */
+ u32 unique_segment_name_counter;
+
+ /** Per transport rx function that can either dequeue or peek */
+ session_fifo_rx_fn *session_tx_fns[SESSION_N_TYPES];
+
+ /** Session manager is enabled */
+ u8 is_enabled;
+
/** vpp fifo event queue configured length */
u32 configured_event_queue_length;
+ /*
+ * Config parameters
+ */
+
/** session table size parameters */
u32 configured_v4_session_table_buckets;
u32 configured_v4_session_table_memory;
u32 configured_v6_halfopen_table_buckets;
u32 configured_v6_halfopen_table_memory;
- /** Unique segment name counter */
- u32 unique_segment_name_counter;
-
- /** Per transport rx function that can either dequeue or peek */
- session_fifo_rx_fn *session_tx_fns[SESSION_N_TYPES];
-
- /** Session manager is enabled */
- u8 is_enabled;
+ /** Transport table (preallocation) size parameters */
+ u32 local_endpoints_table_memory;
+ u32 local_endpoints_table_buckets;
/** Preallocate session config parameter */
u32 preallocated_sessions;
/* Can retransmit for closed sessions but can't do anything if
* session is not ready or closed */
if (PREDICT_FALSE (s0->session_state < SESSION_STATE_READY))
- continue;
+ {
+ vec_add1 (smm->pending_event_vector[my_thread_index], *e0);
+ continue;
+ }
/* Spray packets in per session type frames, since they go to
* different nodes */
rv = (smm->session_tx_fns[s0->session_type]) (vm, node, smm, e0, s0,
transport_init (void)
{
vlib_thread_main_t *vtm = vlib_get_thread_main ();
- u32 local_endpoints_table_buckets = 250000;
- u32 local_endpoints_table_memory = 512 << 20;
+ session_manager_main_t *smm = vnet_get_session_manager_main ();
u32 num_threads;
+ if (smm->local_endpoints_table_buckets == 0)
+ smm->local_endpoints_table_buckets = 250000;
+ if (smm->local_endpoints_table_memory == 0)
+ smm->local_endpoints_table_memory = 512 << 20;
+
/* Initialize [port-allocator] random number seed */
port_allocator_seed = (u32) clib_cpu_time_now ();
clib_bihash_init_24_8 (&local_endpoints_table, "local endpoints table",
- local_endpoints_table_buckets,
- local_endpoints_table_memory);
+ smm->local_endpoints_table_buckets,
+ smm->local_endpoints_table_memory);
num_threads = 1 /* main thread */ + vtm->n_threads;
if (num_threads > 1)
clib_spinlock_init (&local_endpoints_lock);
tcp_config_fn (vlib_main_t * vm, unformat_input_t * input)
{
tcp_main_t *tm = vnet_get_tcp_main ();
- u64 tmp;
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
{
else if (unformat (input, "preallocated-half-open-connections %d",
&tm->preallocated_half_open_connections))
;
- else if (unformat (input, "local-endpoints-table-memory %U",
- unformat_memory_size, &tmp))
- {
- if (tmp >= 0x100000000)
- return clib_error_return (0, "memory size %llx (%lld) too large",
- tmp, tmp);
- tm->local_endpoints_table_memory = tmp;
- }
- else if (unformat (input, "local-endpoints-table-buckets %d",
- &tm->local_endpoints_table_buckets))
- ;
-
else if (unformat (input, "buffer-fail-fraction %f",
&tm->buffer_fail_fraction))
;
u32 preallocated_connections;
u32 preallocated_half_open_connections;
- /** Transport table (preallocation) size parameters */
- u32 local_endpoints_table_memory;
- u32 local_endpoints_table_buckets;
-
/** Vectors of src addresses. Optional unless one needs > 63K active-opens */
ip4_address_t *ip4_src_addresses;
u32 last_v4_address_rotor;
if (tc->state >= TCP_STATE_ESTABLISHED)
{
/* Lost FIN, retransmit and return */
- if (tc->state == TCP_STATE_FIN_WAIT_1)
+ if (tcp_is_lost_fin (tc))
{
tcp_send_fin (tc);
tc->rto_boff += 1;
else
{
ASSERT (tc->state == TCP_STATE_CLOSED);
- if (CLIB_DEBUG)
- TCP_DBG ("connection state: %U", format_tcp_connection, tc, 2);
return;
}
}