sctp-cmt.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2006-2007 by the Protocol Engineering Lab, U of Delaware
  3.  * All rights reserved.
  4.  *
  5.  * Protocol Engineering Lab web page : http://pel.cis.udel.edu/
  6.  *
  7.  * Paul D. Amer         <amer@@cis,udel,edu>
  8.  * Janardhan R. Iyengar <iyengar@@cis,udel,edu>
  9.  * Preethi Natarajan    <nataraja@@cis,udel,edu>
  10.  * Nasif Ekiz           <nekiz@@cis,udel,edu>
  11.  *
  12.  * Redistribution and use in source and binary forms, with or without
  13.  * modification, are permitted provided that the following conditions
  14.  * are met:
  15.  *
  16.  * 1. Redistributions of source code must retain the above copyright
  17.  *    notice, this list of conditions and the following disclaimer.
  18.  *
  19.  * 2. Redistributions in binary form must reproduce the above copyright
  20.  *    notice, this list of conditions and the following disclaimer in the
  21.  *    documentation and/or other materials provided with the distribution.
  22.  *
  23.  * 3. Neither the name of the University nor of the Laboratory may be used
  24.  *    to endorse or promote products derived from this software without
  25.  *    specific prior written permission.
  26.  *
  27.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  28.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  29.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  30.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  31.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  32.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  33.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  34.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  35.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  36.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  37.  * SUCH DAMAGE.
  38.  */
  39. /* Concurrent Multipath Transfer extension: To allow SCTP to correctly use
  40.  * multiple paths available at the transport.
  41.  */
  42. #ifndef ns_sctp_cmt_h
  43. #define ns_sctp_cmt_h
  44. #include "agent.h"
  45. #include "node.h"
  46. #include "packet.h"
  47. #include "sctp.h"
  48. /* CMT rtx policies
  49.  */
  50. typedef enum CmtRtxPolicy_E
  51. {
  52.   RTX_ASAP,
  53.   RTX_TO_SAME,
  54.   RTX_SSTHRESH,
  55.   RTX_LOSSRATE,
  56.   RTX_CWND
  57. };
  58. class SctpCMTAgent : public virtual SctpAgent 
  59. {
  60. public:
  61.   SctpCMTAgent();
  62.   void Timeout(SctpChunkType_E, SctpDest_S*);
  63.   void SackGenTimerExpiration();
  64. protected:
  65.   void  delay_bind_init_all();
  66.   int   delay_bind_dispatch(const char *varName, const char *localName,
  67.     TclObject *tracer);
  68.   /* initialization stuff
  69.    */
  70.   void OptionReset();
  71.   void Reset();
  72.   /* tracing functions
  73.    */
  74.   void TraceAll();
  75.   void TraceVar(const char*);
  76.   void trace(TracedVar*);
  77.   
  78.   /* sending functions
  79.    */
  80.   void      AddToSendBuffer(SctpDataChunkHdr_S *, int, u_int, SctpDest_S *);
  81.   int       GenChunk(SctpChunkType_E, u_char *);
  82.   void      SendBufferDequeueUpTo(u_int);
  83.   void      FastRtx();
  84.   Boolean_E AnyMarkedChunks();
  85.   void      MarkChunkForRtx(SctpSendBufferNode_S *, MarkedForRtx_E);
  86.   void      RtxMarkedChunks(SctpRtxLimit_E);
  87.   void      recv(Packet *pkt, Handler*);
  88.   void      SendMuch();
  89.   
  90.   /* processing functions
  91.    */
  92.   Boolean_E   ProcessGapAckBlocks(u_char *, Boolean_E);
  93.   void        ProcessSackChunk(u_char *);
  94.   int         ProcessChunk(u_char *, u_char **);
  95.   u_int       GetHighestOutstandingTsn(SctpDest_S *);
  96.   void        HeartbeatGenTimerExpiration(double);
  97.   /* new CMT functions
  98.    */
  99.   SctpDest_S* SelectRtxDest(SctpSendBufferNode_S*, SctpRtxLimit_E);
  100.   void        SetSharedCCParams(SctpDest_S*);
  101.   char*       PrintDestStatus(SctpDest_S*);
  102.   /* new CMT-PF function
  103.    */
  104.   SctpDest_S* SelectFromPFDests();
  105.   /******* Variables *******/
  106.   
  107.   /* JRI-TODO: Take out options for SFR and CUC algos.
  108.    */
  109.   Boolean_E eUseCmtReordering;  // use CMT's reordering algo? (was CACC)
  110.   Boolean_E eUseCmtCwnd;        // use CMT's cwnd growth algo?
  111.   Boolean_E eUseCmtDelAck;      // use CMT's delayed ack algo?
  112.   /* Variables for CMT delayed ack algo
  113.    */
  114.   u_int uiNumPacketsSacked;    // number of packets acked by SACK (sack->flags)
  115.   u_int uiNumDestsSacked;      // number of dests acked by SACK (inferred)
  116.   CmtRtxPolicy_E eCmtRtxPolicy;
  117.   /* CMT-PF: Use the possibly failed state in RTX_SSTHRESH policy?
  118.    */
  119.   Boolean_E eUseCmtPF;  
  120.   /* CMT-PF: Value for Cwnd when PF path becomes ACTIVE again.
  121.    */
  122.   u_int uiCmtPFCwnd;
  123.   /* CMT-PF: Track last adv rwnd
  124.    */
  125.   u_int uiArwnd;
  126.   /* CMT-PF: Trace variables 
  127.    */
  128.   TracedInt tiCountPFToActiveNewData; // Count of PF->Active state changes 
  129.                                       // for new data (in SendMuch)
  130.   TracedInt tiCountPFToActiveRtxms;   // Count of PF->Active state changes
  131.                                       // for retransmissions (in SelectRtxDest)
  132. };
  133. #endif