if (svm_fifo_max_dequeue (s->rx_fifo))
app->cb_fns.builtin_app_rx_callback (s);
if (!(s->flags & SESSION_F_APP_CLOSED))
- app->cb_fns.session_disconnect_callback (s);
+ {
+ s->flags |= SESSION_F_TPT_INIT_CLOSE;
+ app->cb_fns.session_disconnect_callback (s);
+ }
}
else
{
if (svm_fifo_max_dequeue (s->rx_fifo))
app->cb_fns.builtin_app_rx_callback (s);
if (!(s->flags & SESSION_F_APP_CLOSED))
- app->cb_fns.session_disconnect_callback (s);
+ {
+ s->flags |= SESSION_F_TPT_INIT_CLOSE;
+ app->cb_fns.session_disconnect_callback (s);
+ }
}
else
{
case SESSION_CTRL_EVT_DISCONNECTED:
s = session_get (evt->session_index, thread_index);
s->flags &= ~SESSION_F_RX_READY;
- if (!(s->flags & SESSION_F_APP_CLOSED))
- app->cb_fns.session_disconnect_callback (s);
+ if (s->flags & SESSION_F_APP_CLOSED)
+ break;
+ s->flags |= SESSION_F_TPT_INIT_CLOSE;
+ app->cb_fns.session_disconnect_callback (s);
break;
case SESSION_CTRL_EVT_RESET:
s = session_get (evt->session_index, thread_index);
s->flags &= ~SESSION_F_RX_READY;
- if (!(s->flags & SESSION_F_APP_CLOSED))
- app->cb_fns.session_reset_callback (s);
+ if (s->flags & SESSION_F_APP_CLOSED)
+ break;
+ s->flags |= SESSION_F_TPT_INIT_CLOSE;
+ app->cb_fns.session_reset_callback (s);
break;
case SESSION_CTRL_EVT_UNLISTEN_REPLY:
if (is_builtin)
_ (HALF_OPEN, "half-open") \
_ (APP_CLOSED, "app-closed") \
_ (IS_CLESS, "connectionless") \
- _ (RX_READY, "rx-ready")
+ _ (RX_READY, "rx-ready") \
+ _ (TPT_INIT_CLOSE, "transport-init-close")
typedef enum session_flags_bits_
{
transport_connection_flags_t flags;
int i, last = -1;
- flags = va_arg (*args, transport_connection_flags_t);
+ flags = va_arg (*args, u32);
for (i = 0; i < TRANSPORT_CONNECTION_N_FLAGS; i++)
if (flags & (1 << i))
s = format (s, "%Upacer: %U\n", format_white_space, indent,
format_transport_pacer, &tc->pacer, tc->thread_index);
s = format (s, "%Utransport: flags: %U\n", format_white_space, indent,
- format_transport_flags, tc->flags);
+ format_transport_flags, (u32) tc->flags);
}
return s;
}
TRANSPORT_CONNECTION_F_##sym = 1 << TRANSPORT_CONNECTION_F_BIT_##sym,
foreach_transport_connection_flag
#undef _
-} transport_connection_flags_t;
+} __clib_packed transport_connection_flags_t;
typedef struct _spacer
{
u8 opaque_conn_id[TRANSPORT_CONN_ID_LEN];
};
- u32 s_index; /**< Parent session index */
- u32 c_index; /**< Connection index in transport pool */
+ u32 s_index; /**< Parent session index */
+ u32 c_index; /**< Connection index in transport pool */
clib_thread_index_t thread_index; /**< Worker-thread index */
- u8 flags; /**< Transport specific flags */
- u8 dscp; /**< Differentiated Services Code Point */
+ transport_connection_flags_t flags; /**< Transport specific flags */
+ u8 dscp; /**< Differentiated Services Code Point */
/*fib_node_index_t rmt_fei;
dpo_id_t rmt_dpo; */