session vcl: refactor builtin tx event for main tx
[vpp.git] / src / vnet / session / session_node.c
index c67d63f..c61e89b 100644 (file)
@@ -1776,11 +1776,13 @@ session_event_dispatch_io (session_worker_t * wrk, vlib_node_runtime_t * node,
       app_wrk = app_worker_get (s->app_wrk_index);
       app_worker_builtin_rx (app_wrk, s);
       break;
-    case SESSION_IO_EVT_BUILTIN_TX:
-      s = session_get_from_handle_if_valid (e->session_handle);
+    case SESSION_IO_EVT_TX_MAIN:
+      s = session_get_if_valid (e->session_index, 0 /* main thread */);
+      if (PREDICT_FALSE (!s))
+       break;
       wrk->ctx.s = s;
       if (PREDICT_TRUE (s != 0))
-       session_tx_fifo_dequeue_internal (wrk, node, elt, n_tx_packets);
+       (smm->session_tx_fns[s->session_type]) (wrk, node, elt, n_tx_packets);
       break;
     default:
       clib_warning ("unhandled event type %d", e->event_type);
@@ -1936,6 +1938,8 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
       if (wrk->trans_head == ((wrk->trans_tail + 1) & (wrk->trans_size - 1)))
        return 0;
       wrk->batch = vlib_dma_batch_new (vm, wrk->config_index);
+      if (!wrk->batch)
+       return 0;
     }
 
   /*