cnat: Add calico/k8s src policy
[vpp.git] / src / plugins / hs_apps / proxy.c
index 6dd3f56..834d03f 100644 (file)
@@ -309,7 +309,7 @@ proxy_rx_callback (session_t * s)
       if (svm_fifo_set_event (ao_tx_fifo))
        {
          u32 ao_thread_index = ao_tx_fifo->master_thread_index;
-         u32 ao_session_index = ao_tx_fifo->master_session_index;
+         u32 ao_session_index = ao_tx_fifo->shr->master_session_index;
          if (session_send_io_evt_to_thread_custom (&ao_session_index,
                                                    ao_thread_index,
                                                    SESSION_IO_EVT_TX))
@@ -434,21 +434,28 @@ active_open_connected_callback (u32 app_index, u32 opaque,
   proxy_session_t *ps;
   u8 thread_index = vlib_get_thread_index ();
 
-  if (err)
-    {
-      clib_warning ("connection %d failed!", opaque);
-      ASSERT (0);
-      return 0;
-    }
-
   /*
    * Setup proxy session handle.
    */
   clib_spinlock_lock_if_init (&pm->sessions_lock);
 
   ps = pool_elt_at_index (pm->sessions, opaque);
-  ps->vpp_active_open_handle = session_handle (s);
-  ps->active_open_establishing = 0;
+
+  /* Connection failed */
+  if (err)
+    {
+      vnet_disconnect_args_t _a, *a = &_a;
+
+      a->handle = ps->vpp_server_handle;
+      a->app_index = pm->server_app_index;
+      vnet_disconnect_session (a);
+      ps->po_disconnected = 1;
+    }
+  else
+    {
+      ps->vpp_active_open_handle = session_handle (s);
+      ps->active_open_establishing = 0;
+    }
 
   /* Passive open session was already closed! */
   if (ps->po_disconnected)
@@ -468,7 +475,7 @@ active_open_connected_callback (u32 app_index, u32 opaque,
    * Reset the active-open tx-fifo master indices so the active-open session
    * will receive data, etc.
    */
-  s->tx_fifo->master_session_index = s->session_index;
+  s->tx_fifo->shr->master_session_index = s->session_index;
   s->tx_fifo->master_thread_index = s->thread_index;
 
   /*
@@ -479,9 +486,6 @@ active_open_connected_callback (u32 app_index, u32 opaque,
   s->tx_fifo->refcnt++;
   s->rx_fifo->refcnt++;
 
-  svm_fifo_init_ooo_lookup (s->tx_fifo, 1 /* deq ooo */ );
-  svm_fifo_init_ooo_lookup (s->rx_fifo, 0 /* enq ooo */ );
-
   hash_set (pm->proxy_session_by_active_open_handle,
            ps->vpp_active_open_handle, opaque);
 
@@ -528,7 +532,7 @@ active_open_rx_callback (session_t * s)
   if (svm_fifo_set_event (proxy_tx_fifo))
     {
       u8 thread_index = proxy_tx_fifo->master_thread_index;
-      u32 session_index = proxy_tx_fifo->master_session_index;
+      u32 session_index = proxy_tx_fifo->shr->master_session_index;
       return session_send_io_evt_to_thread_custom (&session_index,
                                                   thread_index,
                                                   SESSION_IO_EVT_TX);