release 3.5 (2005-09-15) - fixed problem with HB pkt size being dependent on arch. 32-bit and 64-bit architectures had different size HB pkts due to the hack I had with a dest pointer in the packet payload. - added new extensions which combines MultipleFastRtx and Timestamp extensions. It's called MfrTimestamp. - bug fix. The tcl bindable initial cwnd was only setting the cwnd before data was ever sent, but was not propagated down to other appropriate places, such as after cwnd reductions due to loss or idle periods. - added the two-level threshold algorithm. The changePrimaryThresh_ variable can be used in tcl scripts to set the beta threshold for automatically changing the primary destination after some path error count is exceeded. - added a new feature to allow us to simulate overheads of reactive routing protocols used in MANETs. The purpose is to be able to see how features like failover, heartbeating, etc function with such routing protocols, without having to actually simulate MANETs in ns. Two TCL bindable variables have been added: routeCalcDelay_ and routeCacheLifetime_. Also, two traceable variables, timeoutCount_ and rcdCount_, have been added to track the occurance and total number of timeouts and route calculation delays. - bug fix. Stephan Baucke noticed that sometimes wrong RTT samples are taken due to a flaw in the implementation of Karn's algorithm. He also provided the fix, which is only two lines of code: 1 in FastRtx() and 1 in Timeout(). - added a TCL bindable variable, dormantAction_. This variable controls the action the sender takes when in the dormant state (ie, all destinations have failed). The possible choices are DORMANT_HOP (0), DORMANT_PRIMARY (1), and DORMANT_LASTDEST (2). DORMANT_HOP means the sender keeps hopping to different destinations each time a timeout occurs. DORMANT_PRIMARY means that the sender uses only the primary. DORMANT_LASTDEST means that the sender continues to use the last destination used before the dormant state was entered. - modified HB interval calculation to reflect the change in the implementer's guide. The jitter applied to a heartbeat was meant to be a small variance of the RTO, but the RFC's wording currently implies a wide variance due. The implementer's guide modifies the wording to be "On an idle destination address that is allowed to heartbeat, a HEARTBEAT chunk is RECOMMENDED to be sent once per RTO of that destination address plus the protocol parameter 'HB.interval' , with jittering of +/- 50% of the RTO value" - bug fix. HBs with one heartbeat timer wasn't sending another HB immediately after a timed out HB. However, this fix causes another bug, which I can't fix without making signficant changes (which I don't want to do now). The problem is that since not much state is maintained for HBs, an outstanding HB may be forgotten about if another HB is sent to any destination before the outstanding HB gets acked or times out. This behavior may cause some occasional quirks such as incorrect RTT measurements, extended failure periods, etc. I'll need to address this issue at a later point in time. - added two traceable variables (frCount_, mfrCount_) which allows you to track the number of times that fast retransmit and multiple fast retransmit get invoked. These counters are incremented each time the algorithm is invoked, and NOT for each tsn. frCount_ will count only the first time a fast rtx is invoked for a tsn(s). mfrCount_ will count subsequent fast rtx of already fast rtx'd tsns. Added by Armando Caro and Keyur Shah . - bug fix. The way the code is maintaining state for chunks marked for retransmission sometimes caused failure detection to take longer than Path.Max.Retrans. When a failure occurs, some data may have made it through before the failure, but the sacks got lost. When the sender retransmits the first outstanding to the alternate destination, the receiver will sack all the data whose sacks got lost. We don't want these sacks to clear the error counter, or else failover would take longer, but this is what the code WAS doing. Now, the error counter is cleared by cum acked data ONLY if the TSNs are not marked for timeout retransmission. The side-effect to this change is that SACKs that arrive late due to RTT spikes will not properly reset the error counter. Also, TSNs at the right edge of the window are many times unnecessarily marked for retransmission during timeout; so when the SACKs for these TSNs arrive, they cannot clear the error counter either. These changes also affects RTT updates. - bug fix. The recover variables for fast rtx (both for plain fast rtx and multiple fast rtx) were not being set correctly. The code was just using the last tsn in the send buffer, which is not always the highest outstanding at any given point in time. - bug fix. HbAfterRto should not send a HB after an RTO if the timeout retransmission is being sent to the same destination. In other words, if there are no active alternate destinations, then the data retransmission must go to the same destination regardless of the retransmission policy. - bug fix. Under some scenarios when the cumack moved, newly acked TSNs were not clearing the error counter for the destination it was sent. Now anytime a TSN is newly acked by either a new cumack or GapAck, the error counter for that TSN's destination is cleared. - bug fix. RtxMarkedChunks was controlling the Max.Burst and BundleControlChunks too soon, and could potentially miscount the burst or transmit packets that ONLY had control chunks. We didn't observe any such scenarios, but the change should avoid this possibility. Report and fix by Jana Iyengar . - bug fix. If a TSN is retransmitted to an alternate destination and it is lower than the lowest TSN outstanding on that alternate destination, the timer for that alternate destination should be restarted. This wasn't happening. Report by Jana Iyengar . - bug fix. Heartbeats were not being generated using a jittering interval of 15-45 secs. For some reason, they were being generated at 16 sec intervals. - Made initial RTO, min RTO, max RTO, fast rtx trigger, and sack delay tcl bindable variables. - bug fix. Retransmissions were not properly calculating the peer rwnd. (I have no clue why this wasn't caught earlier!) - added another extension (called MfrHbAfterRto) which combines MultipleFastRtx and HbAfterRto. - added another experimental retransmission policy for multihomed hosts. Setting rtxToAlt_ to 2, fast rtx goes to the same destination and timeout rtx goes to an alternate destination. - merged sctp-newreno extension into the core of sctp. Since the NewReno changes are now in the implementer's guide, it makes sense to make the main version of SCTP include these changes. With NewReno as the base SCTP, I pushed the changes into the SCTP extensions (sctp-hbAfterRto, sctp-multipleFastRtx, sctp-timestamp) - first release since SCTP was merged into ns-2's main distribution. We have now dropped support for ns-allinone-2.1b8. -------------------------------------------------------------------------------- release 3.4 (2003-08-14) - bug fix. DupTsns were not being deleted properly in DeleteNode(). Report and fix by Tonci Juric . - bug fix. DupTsns were not cleared once reported, so the same duptsns were continously reported until the end of the association. Instead, they should be reported once only. Report by Sourabh Ladha and Patricio Barletta . - bug fix. ClearList() wasn't using the list passed in. Report and fix by Patricio Barletta . - fix compile error. Some gcc versions were complaining that hdr_sctp::offset_ was multiply defined in all the SCTP extensions' .cc files. Simply removed declaration from all files except sctp.cc. Report and fix by Michael Tüxen - bug fix. Timeouts were not resetting missing report counter. Report by Patricio Barletta . - changed default chunk size to 1468 to reflect what avg simulation would want -------------------------------------------------------------------------------- release 3.3 (2003-07-11) - moved from using Random::random() to using Random::uniform() to avoid problems with the test suite output conflicts when migrating to new versions of ns. - removed 2 tests from test suite: sctp-legacyApp and sctp-rebundleChunks. they were removed because they use Random::exponential(), which causes tests to fail from version to version of ns. - new test suite output which reflects changes of random function used. - bug fix. Keyur and I found anoamlous behavior when simulating specific drops. Sometimes, more drops actually improved behavior. Jana and I determined it was a bug. PartialBytesAcked was being incorrectly incremented if there were TSNs already GapAcked when transitioning from SlowStart to CongestionAvoidance. The TSNs GapAcked in SlowStart should not be used to increment PartialBytesAcked when the sender goes into CongestionAvoidance. - added experimental MultipleFastRtx extension, which implements Caro's Algorithm for fast retransmits. The algorithm introduces a uiFastRtxRecover variable which maintains the highest tsn outstanding at the time of a tsn's retransmit. That way, once a tsn has been retransmitted, only missing reports triggered by tsns beyond uiFastRtxRecover may trigger yet another fast rtx of the same tsn. This extension was Armando Caro's idea. - added experimental HbAfterRto extension, which immediately sends a heartbeat after a TimeoutRtx. The idea is to give the destinations a chance to get an RTT measurement after the RTO is backed off. The hope is to avoid unnecessarily large RTOs (especially on the alternate destinations). This extension was Randall Stewart's idea. - bug fix. GenOneDataChunk() was using the wrong variable for incrementing the outstanding bytes, which sometimes created problems for non-FTP applications. Report and fix by Stephan Baucke . - added experimental Timestamp extention, which allows RTT measurements to be made per packet on both original transmissions and retransmissions. This extension was Armando Caro's idea. - added experimental extension called NewReno, which introduces recovery state similar to that of TCP NewReno to avoid multiple cwnd cuts in a single window (ie, round trip). Since SCTP is multihomed, recovery state is maintained per destination. This extension was actually suggested by Johan Garcia, but implemented by Armando Caro and Keyur Shah. However, Randall Stewart already had this feature in his KAME implementation, but didn't include the change in the implementer's draft (yet). - bug fix. According to RFC2960, "RTT measurements SHOULD be made no more than once per round-trip for a given destination transport address." Although the measurements weren't being done for every DATA chunk, they were being done more than once per round-trip. -------------------------------------------------------------------------------- release 3.2 (2002-12-13) - bug fix. If chunks were rebundled differently during retransmissions than they were during the original transmissions, the bundling wasn't done properly. In particular, the 4-byte boundary padding wasn't done. Hence, the receiver tried to read a packet misaligned chunks. Report by Stephan Baucke , Marcello Pantaleo , and Damir Prusac . - bug fix. non-sctp aware apps which were trying to use the Agent variable size_ as the packet size (or max app write size) were failing. The SCTP agent now sets size_ to the max data size of an app write for such applications. Report by Stephan Baucke , Marcello Pantaleo , and Damir Prusac . - bug fix. modified ProcessGapAckBlocks() so that sender only trusts gap ack info from last SACK. otherwise, renegging (which our simulation doesn't do) or out of order SACKs would give the sender an incorrect view of the peer's rwnd. in other words, if a SACK doesn't gap ack a chunk which was previously gap acked, the sender must reflect this change and make the chunk outstanding again. - modified all emails to spam-blocking syntax. why? cause this code gets posted on the net, and we have been receiving an increasing amount of spam since the first posting of this code. - bug fix. COOKIE_ECHO wasn't handled correctly when received in the ESTABLISHED state. so under conditions where the COOKIE_ACK was lost, the association never established. one side would remain in the COOKIE_ECHOED state, while the other remained in the ESTABLISHED state. report and bug fix by Martin Duke - bug fix. Timeouts on INIT and COOKIE_ECHO chunks were not backing off their timers properly or applying the Max.Init.Retransmits limit. report and bug fix by Martin Duke - bug fix. Heartbeats were scheduled before assocation was established. So in extreme situations where INITs are repeatedly lost, HBs were sent before the association was established. Also new test case & output to ensure that this bug is fixed. report and bug fix by Martin Duke - fixed typo in README - added tcl bindable option to make all retransmissions go to the same destination unless it is inactive. this is experimental behavior. -------------------------------------------------------------------------------- release 3.1 (2002-07-02) - bug fix. calculation error for rtt updates on heartbeat acks. - bug fix. rtx timer wasn't being restarted when the first outstanding on a destination wasn't the first one in the send buffer for that destination. - bug fix. retransmissions were sometimes running into probs in that oustanding bytes and peer rwnd were not accurate. - added a tcl boundable variable 'ipHeaderSize_' which sets the IP header size. the default is 20 bytes (IPv4 without any options). NOTE: this has changed from the previous constant of 40 bytes for IPv6. it has been changed to match the TCP default. - bug fix. sometimes failovers were incorrectly restored. - bug fix. "A destination transport address is considered "idle" if no new chunk which can be used for updating path RTT (usually including first transmission DATA, INIT, COOKIE ECHO, HEARTBEAT etc.) and no HEARTBEAT has been sent to it within the current heartbeat period of that address." However, the code was incorrectly counting retransmissions. - added support for the "close" command. now the application stop command can be used in the tcl scripts to close the connection. (eg, "ftp0 stop") - added rudimentary fragmentation for legacy applications. the idea was not to really have SCTP fragmentation (which would involve more complexity), but instead insert a shim for backwards compatibility (eg, "ftp send 12000"). so a message which doesn't fit into a single packet is broken up for SCTP, so that SCTP doesn't have to fragment. report by Sumathi Elangovan - some rtx bug fixes. - updated sctp.README to include list and description of sctp provided "commands", which are definitely needed for multihoming. - added support for ns-2's standard debug_ flag, which simply sets all bits in the debugMask_ - fixed bugs which were causing some ns-2 validation scripts to fail. test-suite-wireless-lan-tora crashes with a bus error, but that isn't sctp's fault; it crashed with the original ns version 2.1b8. - added support for sampling based tracing by introducing the "print" command. request/report by ShaoJian Fu (Jerick) . - bug fix. the cwnd and rwnd gating was ignoring app msg size, and the code incorrectly assumed an infinite data source (eg, ftp). report by Sumathi Elangovan . - bug fix. probes were sending empty sctp packets with no chunks. report by Janardhan Iyengar - bug fix. incorrectly included the padded bytes in the chunk length field. report and fix by Denio Mariz - added test suite for sctp, thanks to Gerard Heinz - fixed heartbeat structure/packet so that it meets the 2-byte boundary requirement for SPARC architectures - MAJOR bug fix. crashed sometimes during calls to Tcl_Write(). - added sctp support to cmu-trace (with help of from Florina Almenárez ) -------------------------------------------------------------------------------- release 3.0 (2002-4-23) - added support for: 6.4 Multi-homed SCTP Endpoints 8.1 Endpoint Failure Detection 8.2 Path Failure Detection 8.3 Path Heartbeat (without upper layer control) - incorporated implementor's guide (up to -04) changes o reset partial_bytes_acked upon detection of packet losses o cwnd gated by its full use while in Slow Start mode o new fast rtx algorithm - revamped rtx code to fix fast rtx and timeout rtx related bugs - fixed memory leaks - wireless/mobile node related bug fix (reported by Zhengliang Yi ) - AppData's bug fix related to msgs < 16 bytes (reported by Denio Mariz ) - minor bug fix by Mohammed Atiquzzaman -------------------------------------------------------------------------------- release 2.2 (2002-1-9) - bug fixes o slow start calculation in AdjustCwnd(), found by Ye Guanhua o always sacked first incoming packet at beginning of association -------------------------------------------------------------------------------- release 2.1 (2001-10-2) - bug fix (uninitialized uiAdvancedPeerAckPoint) -------------------------------------------------------------------------------- release 2 (2001-8-22) - upper layer ns-2 API supports legacy ns-2 apps and future sctp-aware apps - supports unreliable data mode extension - bug fixes -------------------------------------------------------------------------------- release 1 (2001-7-11) - original release