IPSEC: support GCM in ESP
[vpp.git] / src / vnet / session / application_worker.c
index 9dfa3aa..a8edad3 100644 (file)
@@ -321,6 +321,30 @@ app_worker_connect_notify (app_worker_t * app_wrk, session_t * s, u32 opaque)
                                                 s, s == 0 /* is_fail */ );
 }
 
+int
+app_worker_close_notify (app_worker_t * app_wrk, session_t * s)
+{
+  application_t *app = application_get (app_wrk->app_index);
+  app->cb_fns.session_disconnect_callback (s);
+  return 0;
+}
+
+int
+app_worker_reset_notify (app_worker_t * app_wrk, session_t * s)
+{
+  application_t *app = application_get (app_wrk->app_index);
+  app->cb_fns.session_reset_callback (s);
+  return 0;
+}
+
+int
+app_worker_builtin_rx (app_worker_t * app_wrk, session_t * s)
+{
+  application_t *app = application_get (app_wrk->app_index);
+  app->cb_fns.builtin_app_rx_callback (s);
+  return 0;
+}
+
 int
 app_worker_own_session (app_worker_t * app_wrk, session_t * s)
 {
@@ -437,7 +461,7 @@ app_worker_first_listener (app_worker_t * app_wrk, u8 fib_proto,
    hash_foreach (handle, sm_index, app_wrk->listeners_table, ({
      listener = listen_session_get_from_handle (handle);
      if (listener->session_type == sst
-        && listener->enqueue_epoch != SESSION_PROXY_LISTENER_INDEX)
+        && !(listener->flags & SESSION_F_PROXY))
        return listener;
    }));
   /* *INDENT-ON* */
@@ -460,8 +484,7 @@ app_worker_proxy_listener (app_worker_t * app_wrk, u8 fib_proto,
   /* *INDENT-OFF* */
    hash_foreach (handle, sm_index, app_wrk->listeners_table, ({
      listener = listen_session_get_from_handle (handle);
-     if (listener->session_type == sst
-        && listener->enqueue_epoch == SESSION_PROXY_LISTENER_INDEX)
+     if (listener->session_type == sst && (listener->flags & SESSION_F_PROXY))
        return listener;
    }));
   /* *INDENT-ON* */
@@ -530,20 +553,12 @@ app_send_io_evt_rx (app_worker_t * app_wrk, session_t * s, u8 lock)
 
   if (PREDICT_FALSE (s->session_state != SESSION_STATE_READY
                     && s->session_state != SESSION_STATE_LISTENING))
-    {
-      /* Session is closed so app will never clean up. Flush rx fifo */
-      if (s->session_state == SESSION_STATE_CLOSED)
-       svm_fifo_dequeue_drop_all (s->rx_fifo);
-      return 0;
-    }
+    return 0;
 
   if (app_worker_application_is_builtin (app_wrk))
-    {
-      application_t *app = application_get (app_wrk->app_index);
-      return app->cb_fns.builtin_app_rx_callback (s);
-    }
+    return app_worker_builtin_rx (app_wrk, s);
 
-  if (svm_fifo_has_event (s->rx_fifo) || svm_fifo_is_empty (s->rx_fifo))
+  if (svm_fifo_has_event (s->rx_fifo))
     return 0;
 
   mq = app_wrk->event_queue;
@@ -562,7 +577,7 @@ app_send_io_evt_rx (app_worker_t * app_wrk, session_t * s, u8 lock)
   ASSERT (!svm_msg_q_msg_is_invalid (&msg));
 
   evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg);
-  evt->fifo = s->rx_fifo;
+  evt->session_index = s->rx_fifo->client_session_index;
   evt->event_type = SESSION_IO_EVT_RX;
 
   (void) svm_fifo_set_event (s->rx_fifo);
@@ -599,7 +614,7 @@ app_send_io_evt_tx (app_worker_t * app_wrk, session_t * s, u8 lock)
 
   evt = (session_event_t *) svm_msg_q_msg_data (mq, &msg);
   evt->event_type = SESSION_IO_EVT_TX;
-  evt->fifo = s->tx_fifo;
+  evt->session_index = s->tx_fifo->client_session_index;
 
   return app_enqueue_evt (mq, &msg, lock);
 }
@@ -608,9 +623,8 @@ app_send_io_evt_tx (app_worker_t * app_wrk, session_t * s, u8 lock)
 typedef int (app_send_evt_handler_fn) (app_worker_t *app,
                                       session_t *s,
                                       u8 lock);
-static app_send_evt_handler_fn * const app_send_evt_handler_fns[3] = {
+static app_send_evt_handler_fn * const app_send_evt_handler_fns[2] = {
     app_send_io_evt_rx,
-    0,
     app_send_io_evt_tx,
 };
 /* *INDENT-ON* */