X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ftcp%2Ftcp.c;h=7f6a087b2f37823f288eeec31cc13f858746ffbb;hb=b0f662fe93f1db0098f7b50306c2f084644788b1;hp=4a63f3bc00cd41c67a42b2efe584193f97ca5477;hpb=85a3ddd4c854c6217272d8be031cfcb04d2e7685;p=vpp.git diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c index 4a63f3bc00c..7f6a087b2f3 100644 --- a/src/vnet/tcp/tcp.c +++ b/src/vnet/tcp/tcp.c @@ -241,7 +241,7 @@ void tcp_connection_del (tcp_connection_t * tc) { TCP_EVT_DBG (TCP_EVT_DELETE, tc); - stream_session_delete_notify (&tc->connection); + session_transport_delete_notify (&tc->connection); tcp_connection_cleanup (tc); } @@ -279,19 +279,20 @@ tcp_connection_reset (tcp_connection_t * tc) { case TCP_STATE_SYN_RCVD: /* Cleanup everything. App wasn't notified yet */ - stream_session_delete_notify (&tc->connection); + session_transport_delete_notify (&tc->connection); tcp_connection_cleanup (tc); break; case TCP_STATE_SYN_SENT: session_stream_connect_notify (&tc->connection, 1 /* fail */ ); - tcp_connection_cleanup (tc); + tcp_connection_set_state (tc, TCP_STATE_CLOSED); + tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, TCP_CLEANUP_TIME); break; case TCP_STATE_ESTABLISHED: tcp_connection_timers_reset (tc); /* Set the cleanup timer, in case the session layer/app don't * cleanly close the connection */ tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, TCP_CLOSEWAIT_TIME); - stream_session_reset_notify (&tc->connection); + session_transport_reset_notify (&tc->connection); tcp_connection_set_state (tc, TCP_STATE_CLOSED); break; case TCP_STATE_CLOSE_WAIT: @@ -303,10 +304,11 @@ tcp_connection_reset (tcp_connection_t * tc) tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, TCP_CLOSEWAIT_TIME); /* Make sure we mark the session as closed. In some states we may * be still trying to send data */ - session_stream_close_notify (&tc->connection); + session_transport_closed_notify (&tc->connection); tcp_connection_set_state (tc, TCP_STATE_CLOSED); break; case TCP_STATE_CLOSED: + case TCP_STATE_TIME_WAIT: break; default: TCP_DBG ("reset state: %u", tc->state); @@ -1224,7 +1226,7 @@ tcp_timer_establish_handler (u32 conn_index) 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. */ - stream_session_delete_notify (&tc->connection); + session_transport_delete_notify (&tc->connection); tc->timers[TCP_TIMER_ESTABLISH] = TCP_TIMER_HANDLE_INVALID; tcp_connection_cleanup (tc); } @@ -1262,7 +1264,7 @@ tcp_timer_waitclose_handler (u32 conn_index) { case TCP_STATE_CLOSE_WAIT: tcp_connection_timers_reset (tc); - session_stream_close_notify (&tc->connection); + session_transport_closed_notify (&tc->connection); if (!(tc->flags & TCP_CONN_FINPNDG)) { @@ -1293,10 +1295,10 @@ tcp_timer_waitclose_handler (u32 conn_index) * is closed. We haven't sent everything but we did try. */ tcp_cong_recovery_off (tc); tcp_send_fin (tc); - rto = clib_max (tc->rto >> tc->rto_boff, 1); + rto = clib_max ((tc->rto >> tc->rto_boff) * TCP_TO_TIMER_TICK, 1); tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, - clib_min (rto * TCP_TO_TIMER_TICK, TCP_2MSL_TIME)); - session_stream_close_notify (&tc->connection); + clib_min (rto, TCP_2MSL_TIME)); + session_transport_closed_notify (&tc->connection); } else { @@ -1311,7 +1313,7 @@ tcp_timer_waitclose_handler (u32 conn_index) tcp_connection_timers_reset (tc); tcp_connection_set_state (tc, TCP_STATE_CLOSED); tcp_timer_set (tc, TCP_TIMER_WAITCLOSE, TCP_CLEANUP_TIME); - session_stream_close_notify (&tc->connection); + session_transport_closed_notify (&tc->connection); break; default: tcp_connection_del (tc);