u8 n_bufs_per_seg;
CLIB_CACHE_LINE_ALIGN_MARK (cacheline1);
session_dgram_hdr_t hdr;
+
+ /** Vector of tx buffer free lists */
+ u32 *tx_buffers;
} session_tx_context_t;
typedef struct session_evt_elt
/** Context for session tx */
session_tx_context_t ctx;
- /** Vector of tx buffer free lists */
- u32 *tx_buffers;
-
/** Pool of session event list elements */
session_evt_elt_t *event_elts;
/** Clib file for timerfd. Used only if adaptive mode is on */
uword timerfd_file;
+ /** List of pending connects for first worker */
+ clib_llist_index_t pending_connects;
+
+ /** Flag that is set if main thread signaled to handle connects */
+ u32 pending_connects_ntf;
+
+ /** Main thread loops in poll mode without a connect */
+ u32 no_connect_loops;
+
#if SESSION_DEBUG
/** last event poll time by thread */
clib_time_type_t last_event_poll;
* Trade memory for speed, for now */
u32 *session_type_to_next;
+ /** Thread for cl and ho that rely on cl allocs */
+ u32 transport_cl_thread;
+
transport_proto_t last_transport_proto_type;
/*
#define TRANSPORT_PROTO_INVALID (session_main.last_transport_proto_type + 1)
#define TRANSPORT_N_PROTOS (session_main.last_transport_proto_type + 1)
-static inline session_evt_elt_t *
-session_evt_elt_alloc (session_worker_t * wrk)
-{
- session_evt_elt_t *elt;
- pool_get (wrk->event_elts, elt);
- return elt;
-}
-
-static inline void
-session_evt_elt_free (session_worker_t * wrk, session_evt_elt_t * elt)
-{
- pool_put (wrk->event_elts, elt);
-}
-
static inline void
session_evt_add_old (session_worker_t * wrk, session_evt_elt_t * elt)
{
clib_llist_add_tail (wrk->event_elts, evt_list, elt,
- pool_elt_at_index (wrk->event_elts, wrk->old_head));
+ clib_llist_elt (wrk->event_elts, wrk->old_head));
}
static inline void
session_evt_add_head_old (session_worker_t * wrk, session_evt_elt_t * elt)
{
clib_llist_add (wrk->event_elts, evt_list, elt,
- pool_elt_at_index (wrk->event_elts, wrk->old_head));
+ clib_llist_elt (wrk->event_elts, wrk->old_head));
}
session_evt_alloc_ctrl (session_worker_t * wrk)
{
session_evt_elt_t *elt;
- elt = session_evt_elt_alloc (wrk);
+ clib_llist_get (wrk->event_elts, elt);
clib_llist_add_tail (wrk->event_elts, evt_list, elt,
- pool_elt_at_index (wrk->event_elts, wrk->ctrl_head));
+ clib_llist_elt (wrk->event_elts, wrk->ctrl_head));
return elt;
}
session_evt_alloc_new (session_worker_t * wrk)
{
session_evt_elt_t *elt;
- elt = session_evt_elt_alloc (wrk);
+ clib_llist_get (wrk->event_elts, elt);
clib_llist_add_tail (wrk->event_elts, evt_list, elt,
- pool_elt_at_index (wrk->event_elts, wrk->new_head));
+ clib_llist_elt (wrk->event_elts, wrk->new_head));
return elt;
}
session_evt_alloc_old (session_worker_t * wrk)
{
session_evt_elt_t *elt;
- elt = session_evt_elt_alloc (wrk);
+ clib_llist_get (wrk->event_elts, elt);
clib_llist_add_tail (wrk->event_elts, evt_list, elt,
- pool_elt_at_index (wrk->event_elts, wrk->old_head));
+ clib_llist_elt (wrk->event_elts, wrk->old_head));
return elt;
}
session_send_io_evt_to_thread (s->tx_fifo, SESSION_IO_EVT_TX);
}
+always_inline u32
+transport_cl_thread (void)
+{
+ return session_main.transport_cl_thread;
+}
+
/*
* Listen sessions
*/