Changes from Pascal Rouseau:

diff -u -r1.1 TCPReno.cc
--- TCPReno.cc  4 Aug 2005 10:49:09 -0000   1.1
+++ TCPReno.cc  29 Nov 2005 00:19:20 -0000
@@ -132,8 +132,9 @@
         conn->retransmitOneSegment();

         // enter slow start
+        // "set cwnd to ssthresh plus 3 times the segment size." (rfc 2001)
         recalculateSlowStartThreshold();
-        state->snd_cwnd = 3*state->snd_mss;  // note: in Tahoe we used one MSS not 3 (=dupacks)
+        state->snd_cwnd = state->ssthresh + 3*state->snd_mss;  // 20051129 (1)
         if (cwndVector) cwndVector->record(state->snd_cwnd);

         tcpEV << "set cwnd=" << state->snd_cwnd << ", ssthresh=" << state->ssthresh << "\n";
@@ -155,6 +156,9 @@
         state->snd_cwnd += state->snd_mss;
         tcpEV << "Reno on dupAck>3: Fast Recovery: inflating cwnd by MSS, new cwnd=" << state->snd_cwnd << "\n";
         if (cwndVector) cwndVector->record(state->snd_cwnd);
+
+        // cwnd increased, try sending
+        sendData();  // 20051129 (2)
     }
 }

Other issues

- MSS:

       in INET, MSS is currently defined as 1024

- Retransmission timeout (issues (3))

      in TCPReno::processRexmitTimer(), we have
         conn->retransmitData()
      which retransmits all segments
      they suggest it should be
         conn->retransmitOneSegment()
      I tried -- it didn't look very good... it produced very long silent periods... very poor performance
      looks like it couldn't handle multiple drops (ie. when the single retransmitted segment got lost)

      Ahmet: after the timer expiry Ahmet Sekercioglu says: all the segments are sent.

- Advertised window:

     btw win=14 packets vs 64K -- I think it needs to match the queue sizes.
     Currently we are allowing 128 packets to be sent while our queues are configured
     to store only 50 -- that's bound for disaster. At minimum, every queue capacity
     should be be greater than the window...
     real life window is 64K, but every host/router has surely more than 64K buffer space for queues!!!!

       -> yes queue capacity should be at least equal to the window capacity.
       -> says: let's set the default window size = 64 mss

Retransmission timer

 - I think I found something else. During the startup there's a ~3s silence, although current
   retransmission timeout is only 1.5s then!!!  Turns out we restart the timer every time we
   receive something, so arriving dupacks kept postponing the retransmisson -- I suppose this
   should not be done.

   The code is in TCPBaseAlg::receivedDataAck(uint32 firstSeqAcked)
