IPSEC-GRE: fixes and API update to common types.
[vpp.git] / src / vnet / session / session_node.c
index 7cbd0d9..8167947 100644 (file)
@@ -819,13 +819,11 @@ session_tx_fifo_dequeue_internal (vlib_main_t * vm,
                                  session_event_t * e, int *n_tx_pkts)
 {
   session_t *s = wrk->ctx.s;
-  application_t *app;
 
   if (PREDICT_FALSE (s->session_state >= SESSION_STATE_TRANSPORT_CLOSED))
     return 0;
-  app = application_get (s->t_app_index);
   svm_fifo_unset_event (s->tx_fifo);
-  return app->cb_fns.builtin_app_tx_callback (s);
+  return transport_custom_tx (session_get_transport_proto (s), s);
 }
 
 always_inline session_t *
@@ -858,7 +856,6 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
   f64 now = vlib_time_now (vm);
   int n_tx_packets = 0, i, rv;
   app_worker_t *app_wrk;
-  application_t *app;
   svm_msg_q_t *mq;
   void (*fp) (void *);
 
@@ -930,6 +927,7 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
              clib_warning ("session was freed!");
              continue;
            }
+         CLIB_PREFETCH (s->tx_fifo, 2 * CLIB_CACHE_LINE_BYTES, LOAD);
          wrk->ctx.s = s;
          /* Spray packets in per session type frames, since they go to
           * different nodes */
@@ -974,8 +972,7 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
            continue;
          svm_fifo_unset_event (s->rx_fifo);
          app_wrk = app_worker_get (s->app_wrk_index);
-         app = application_get (app_wrk->app_index);
-         app->cb_fns.builtin_app_rx_callback (s);
+         app_worker_builtin_rx (app_wrk, s);
          break;
        case SESSION_IO_EVT_BUILTIN_TX:
          s = session_get_from_handle_if_valid (e->session_handle);