vcl/ldp: add write msg function and fine tuning
[vpp.git] / src / vnet / tcp / tcp.c
index 4a63f3b..7f6a087 100644 (file)
@@ -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);