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))
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)
* 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;
/*
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);
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);