api: multiple connections per process
[vpp.git] / src / vcl / vcl_private.c
index a572fd4..b14fdee 100644 (file)
@@ -191,6 +191,9 @@ vcl_worker_alloc_and_init ()
   if (vcl_get_worker_index () != ~0)
     return 0;
 
+  /* Use separate heap map entry for worker */
+  clib_mem_set_thread_index ();
+
   if (pool_elts (vcm->workers) == vcm->cfg.max_workers)
     {
       VDBG (0, "max-workers %u limit reached", vcm->cfg.max_workers);
@@ -273,6 +276,12 @@ vcl_worker_set_bapi (void)
   return -1;
 }
 
+svm_msg_q_t *
+vcl_worker_ctrl_mq (vcl_worker_t * wrk)
+{
+  return wrk->ctrl_mq;
+}
+
 void
 vcl_segment_table_add (u64 segment_handle, u32 svm_segment_index)
 {
@@ -307,7 +316,7 @@ void
 vcl_cleanup_bapi (void)
 {
   socket_client_main_t *scm = &socket_client_main;
-  api_main_t *am = &api_main;
+  api_main_t *am = vlibapi_get_main ();
 
   am->my_client_index = ~0;
   am->my_registration = 0;
@@ -346,9 +355,9 @@ vcl_session_read_ready (vcl_session_t * session)
     return clib_fifo_elts (session->accept_evts_fifo);
 
   if (vcl_session_is_ct (session))
-    return svm_fifo_max_dequeue (session->ct_rx_fifo);
+    return svm_fifo_max_dequeue_cons (session->ct_rx_fifo);
 
-  return svm_fifo_max_dequeue (session->rx_fifo);
+  return svm_fifo_max_dequeue_cons (session->rx_fifo);
 }
 
 int
@@ -365,7 +374,7 @@ vcl_session_write_ready (vcl_session_t * session)
   if (PREDICT_FALSE (session->session_state & STATE_LISTEN))
     {
       if (session->tx_fifo)
-       return svm_fifo_max_enqueue (session->tx_fifo);
+       return svm_fifo_max_enqueue_prod (session->tx_fifo);
       else
        return VPPCOM_EBADFD;
     }
@@ -383,9 +392,9 @@ vcl_session_write_ready (vcl_session_t * session)
     }
 
   if (vcl_session_is_ct (session))
-    return svm_fifo_max_enqueue (session->ct_tx_fifo);
+    return svm_fifo_max_enqueue_prod (session->ct_tx_fifo);
 
-  return svm_fifo_max_enqueue (session->tx_fifo);
+  return svm_fifo_max_enqueue_prod (session->tx_fifo);
 }
 
 /*