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

通讯编程

开发平台:

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.  * Armando L. Caro Jr. <acaro@@cis,udel,edu>
  9.  *
  10.  * Armando's debugging output system. 
  11.  * Based on a previous version written by Phill Conrad and Ed Golden.
  12.  *
  13.  * Redistribution and use in source and binary forms, with or without
  14.  * modification, are permitted provided that the following conditions
  15.  * are met:
  16.  *
  17.  * 1. Redistributions of source code must retain the above copyright
  18.  *    notice, this list of conditions and the following disclaimer.
  19.  *
  20.  * 2. Redistributions in binary form must reproduce the above copyright
  21.  *    notice, this list of conditions and the following disclaimer in the
  22.  *    documentation and/or other materials provided with the distribution.
  23.  *
  24.  * 3. Neither the name of the University nor of the Laboratory may be used
  25.  *    to endorse or promote products derived from this software without
  26.  *    specific prior written permission.
  27.  *
  28.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  29.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  30.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  31.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  32.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  33.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  34.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  35.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  36.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  37.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  38.  * SUCH DAMAGE.
  39.  *
  40.  * @(#) $Header: /cvsroot/nsnam/ns-2/sctp/sctpDebug.h,v 1.5 2007/06/17 21:44:46 tom_henderson Exp $ (UD/PEL)
  41.  */
  42. #ifndef ns_sctpDebug_h
  43. #define ns_sctpDebug_h
  44. void sctpDebugEmptyPrintf (char const *format, ...);
  45. #if(DEBUG)
  46. /* debug variable format:  __dbg_FunctionName
  47.  */
  48. #define __dbg_command                          0x00000001
  49. #define __dbg_Reset                            0x00000001
  50. #define __dbg_OptionReset                      0x00000001
  51. #define __dbg_ControlChunkReservation          0x00000001
  52. #define __dbg_recv                             0x00000002
  53. #define __dbg_sendmsg                          0x00000004
  54. #define __dbg_GenChunk                         0x00000008
  55. #define __dbg_GetNextDataChunkSize             0x00000010
  56. #define __dbg_GenOneDataChunk                  0x00000010
  57. #define __dbg_GenMultipleDataChunks            0x00000010
  58. #define __dbg_BundleControlChunks              0x00000010
  59. #define __dbg_GetHighestOutstandingTsn         0x00000020
  60. #define __dbg_FastRtx                          0x00000020
  61. #define __dbg_StartT3RtxTimer                  0x00000020
  62. #define __dbg_StopT3RtxTimer                   0x00000020
  63. #define __dbg_Timeout                          0x00000020
  64. #define __dbg_TimeoutRtx                       0x00000020
  65. #define __dbg_T1InitTimerExpiration            0x00000020
  66. #define __dbg_T1CookieTimerExpiration          0x00000020
  67. #define __dbg_SackGenTimerExpiration           0x00000020
  68. #define __dbg_MarkChunkForRtx                  0x00000020
  69. #define __dbg_AnyMarkedChunks                  0x00000020
  70. #define __dbg_RtxMarkedChunks                  0x00000020
  71. #define __dbg_AddToSendBuffer                  0x00000040
  72. #define __dbg_RttUpdate                        0x00000080
  73. #define __dbg_SendBufferDequeueUpTo            0x00000100
  74. #define __dbg_AdjustCwnd                       0x00000200
  75. #define __dbg_UpdateHighestTsn                 0x00000400
  76. #define __dbg_IsDuplicateChunk                 0x00000400
  77. #define __dbg_InsertDuplicateTsn               0x00000400
  78. #define __dbg_UpdateCumAck                     0x00000800
  79. #define __dbg_UpdateRecvTsnBlocks              0x00000800
  80. #define __dbg_AdvancePeerAckPoint              0x00001000
  81. #define __dbg_ProcessForwardTsnChunk           0x00001000
  82. #define __dbg_ProcessInitChunk                 0x00002000
  83. #define __dbg_ProcessInitAckChunk              0x00002000
  84. #define __dbg_ProcessDataChunk                 0x00004000
  85. #define __dbg_ProcessGapAckBlocks              0x00004000
  86. #define __dbg_ProcessSackChunk                 0x00004000
  87. #define __dbg_ProcessChunk                     0x00008000
  88. #define __dbg_ProcessOptionChunk               0x00008000
  89. #define __dbg_NextChunk                        0x00010000
  90. #define __dbg_SetSource                        0x00020000
  91. #define __dbg_SetDestination                   0x00020000
  92. #define __dbg_SendPacket                       0x00020000
  93. #define __dbg_TotalOutstanding                 0x00020000
  94. #define __dbg_SendMuch                         0x00020000
  95. #define __dbg_PassToUpperLayer                 0x00040000
  96. #define __dbg_InsertInStreamBuffer             0x00080000
  97. #define __dbg_PassToStream                     0x00080000
  98. #define __dbg_UpdateAllStreams                 0x00080000
  99. #define __dbg_AddInterface                     0x00100000
  100. #define __dbg_AddDestination                   0x00100000
  101. #define __dbg_SetPrimary                       0x00100000
  102. #define __dbg_ForceSource                      0x00100000
  103. #define __dbg_GetNextDest                      0x00200000
  104. #define __dbg_CwndDegradeTimerExpiration       0x00400000
  105. #define __dbg_CalcHeartbeatTime                0x00400000
  106. #define __dbg_SendHeartbeat                    0x00400000
  107. #define __dbg_HeartbeatGenTimerExpiration      0x00400000
  108. #define __dbg_ProcessHeartbeatAckChunk         0x00400000
  109. #define __dbg_Close                            0x00800000
  110. /* functions which process optional chunks
  111.  */
  112. #define __dbg_ProcessTimestampChunk            0x01000000
  113. /* optional functions for simulated reactive routing protocols (for MANETs, etc)
  114.  */
  115. #define __dbg_RouteCacheFlushTimerExpiration   0x02000000
  116. #define __dbg_RouteCalcDelayTimerExpiration    0x02000000
  117. /* CMT debugging
  118.  */
  119. #define __dbg_SelectRtxDest                    0x04000000
  120. /* verbose debugging functions
  121.  */
  122. #define __dbg_DumpSendBuffer                   0x80000000
  123. /* CMT-PF debugging
  124.  */
  125. #define __dbg_SelectFromPFDests                0x10000000
  126. /**************************** DEBUGGING MACROS **************************/
  127. /* For Function Entry 
  128.  *
  129.  * example usage:   DBG_I(SomeFunctionName);
  130.  */
  131. #define DBG_I(funcName) 
  132.         if(fhpDebugFile != NULL) /* make sure output file is open! */ 
  133.           if (uiDebugMask & __dbg_##funcName) 
  134.     {fprintf(fhpDebugFile, "[%s] <I> n", #funcName);}
  135. /* For Printing Details
  136.  *
  137.  * example usage:
  138.  *          DBG_PL(SomeFunctionName, "testing") DBG_PR;
  139.  *          DBG_PL(SomeFunctionName, "current someValue=%d"), someValue DBG_PR;
  140.  */
  141. #define DBG_PL(funcName, format) 
  142.         if(fhpDebugFile != NULL) /* make sure output file is open! */ 
  143.           if (uiDebugMask & __dbg_##funcName) 
  144.     fprintf(fhpDebugFile, "[%s] " format "n", #funcName
  145. #define DBG_PR )
  146. /* For Calling Debugging Functions
  147.  * 
  148.  * example usage:
  149.  *          DBG_F(SomeFunctionName, SomeDebugFunction(param1, parm2, ...) );
  150.  *
  151.  * Note: both SomeFunctionName and SomeDebugFunction debug bits must be set
  152.  */
  153. #define DBG_F(funcName, debugFuncCall) 
  154.         if(fhpDebugFile != NULL) /* make sure output file is open! */ 
  155.           if (uiDebugMask & __dbg_##funcName) 
  156.     debugFuncCall
  157. /* For executing blocks of code only if debug bit is set
  158.  *
  159.  * example usage:
  160.  *          DBG_IF(SomeFunctionName)
  161.  *            {
  162.  *              // block of code goes here
  163.  *            }
  164.  */
  165. #define DBG_IF(funcName) 
  166.         if(fhpDebugFile != NULL) /* make sure output file is open! */ 
  167.           if (uiDebugMask & __dbg_##funcName)
  168. /* For Function Exit
  169.  *
  170.  * example usage:    DBG_X(SomeFunctionName);
  171.  */
  172. #define DBG_X(funcName) 
  173.         if(fhpDebugFile != NULL) /* make sure output file is open! */ 
  174.           if (uiDebugMask & __dbg_##funcName) 
  175.     {fprintf(fhpDebugFile, "[%s] <X> n", #funcName);}
  176. #define DBG_FOPEN() 
  177.         if(fhpDebugFile == NULL) /* only open file once! */ 
  178.           { 
  179.      if(iDebugFileIndex >= 0) 
  180.        { 
  181.  char cpFileName[256]; 
  182.  sprintf(cpFileName, "debug.SctpAgent.%d", iDebugFileIndex); 
  183.  fhpDebugFile = fopen(cpFileName, "w"); 
  184.        } 
  185.      else 
  186.        fhpDebugFile = stdout; 
  187.   }
  188. #else  /* DEBUG is not defined, then preprocess these macros out! */
  189. #define DBG_I(bitmask)            { /* empty */ }
  190. /* This is a HACK!!! ...but who cares, it's only debugging and gcc should strip
  191.  * it out anyway.
  192.  */
  193. #define DBG_PL(funcName, format)  if(0) sctpDebugEmptyPrintf (""
  194. #define DBG_PR                    )
  195. #define DBG_F(funcName, debugFuncCall)  { /* empty */ }
  196. #define DBG_IF(funcName)          if(0)
  197. #define DBG_X(funcName)           { /* empty */ }
  198. #define DBG_FOPEN()               { /* empty */ }
  199. #endif
  200. #endif