tcp: fix syn-sent reset

Change-Id: I4a811672b27c70bf0e9652c175c7f4168ec40ed7
Signed-off-by: Florin Coras <fcoras@cisco.com>
This commit is contained in:
Florin Coras
2018-12-20 10:16:01 -08:00
parent fd0d50879f
commit 1af9ab58fc

View File

@ -292,6 +292,8 @@ tcp_connection_reset (tcp_connection_t * tc)
* cleanly close the connection */
tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, TCP_CLOSEWAIT_TIME);
stream_session_reset_notify (&tc->connection);
tc->state = TCP_STATE_CLOSED;
TCP_EVT_DBG (TCP_EVT_STATE_CHANGE, tc);
break;
case TCP_STATE_CLOSE_WAIT:
case TCP_STATE_FIN_WAIT_1:
@ -299,12 +301,12 @@ tcp_connection_reset (tcp_connection_t * tc)
case TCP_STATE_CLOSING:
tcp_connection_timers_reset (tc);
tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, TCP_CLOSEWAIT_TIME);
tc->state = TCP_STATE_CLOSED;
TCP_EVT_DBG (TCP_EVT_STATE_CHANGE, tc);
break;
case TCP_STATE_CLOSED:
return;
break;
}
tc->state = TCP_STATE_CLOSED;
TCP_EVT_DBG (TCP_EVT_STATE_CHANGE, tc);
}
/**
@ -329,7 +331,7 @@ tcp_connection_close (tcp_connection_t * tc)
switch (tc->state)
{
case TCP_STATE_SYN_SENT:
tc->state = TCP_STATE_CLOSED;
/* Do nothing. Establish timer will pop and cleanup the connection */
break;
case TCP_STATE_SYN_RCVD:
tcp_connection_timers_reset (tc);
@ -1219,8 +1221,9 @@ tcp_timer_establish_handler (u32 conn_index)
if (tc)
{
ASSERT (tc->state == TCP_STATE_SYN_SENT);
session_stream_connect_notify (&tc->connection, 1 /* fail */ );
TCP_DBG ("establish pop: %U", format_tcp_connection, tc, 2);
/* Notify app if we haven't tried to clean this up already */
if (!(tc->flags & TCP_CONN_HALF_OPEN_DONE))
session_stream_connect_notify (&tc->connection, 1 /* fail */ );
}
else
{
@ -1228,7 +1231,6 @@ tcp_timer_establish_handler (u32 conn_index)
/* note: the connection may have already disappeared */
if (PREDICT_FALSE (tc == 0))
return;
TCP_DBG ("establish pop: %U", format_tcp_connection, tc, 2);
ASSERT (tc->state == TCP_STATE_SYN_RCVD);
/* Start cleanup. App wasn't notified yet so use delete notify as
* opposed to delete to cleanup session layer state. */