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

通讯编程

开发平台:

Visual C++

  1. /* -*- Mode:C++; c-basic-offset:8; tab-width:8 -*- */
  2. /*
  3.  * Copyright (c) 1997 Regents of the University of California.
  4.  * All rights reserved.
  5.  * 
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. All advertising materials mentioning features or use of this software
  15.  *    must display the following acknowledgement:
  16.  *  This product includes software developed by the MASH Research
  17.  *  Group at the University of California Berkeley.
  18.  * 4. Neither the name of the University nor of the Research Group may be
  19.  *    used to endorse or promote products derived from this software without
  20.  *    specific prior written permission.
  21.  * 
  22.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  23.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  26.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32.  * SUCH DAMAGE.
  33.  *
  34.  * @(#) $Header: /cvsroot/nsnam/ns-2/trace/trace.h,v 1.34 2003/08/21 18:22:02 haldar Exp $
  35.  */
  36. #ifndef ns_trace_h
  37. #define ns_trace_h
  38. #define NUMFLAGS 8
  39. #include <math.h> // floor
  40. #include "packet.h"
  41. #include "basetrace.h"
  42. /* Tracing has evolved into two types, packet tracing and event tracing.
  43. Class Trace essentially supports packet tracing. 
  44. However in addition to the basic tracing properties (that it derives from a BaseTrace class), pkt-tracing also requires to inherit some of the Connector class properties as well.
  45. Hence Trace should be renamed as ConnectorTrace in the future.
  46. And it shall have a BaseTrace * variable, where BaseTrace class supporting pure tracing functionalities and should be the parent class for all subsequent trace-related classes.
  47. */
  48. class Trace : public Connector {
  49. protected:
  50. nsaddr_t src_;
  51.         nsaddr_t dst_;
  52.         int callback_;
  53.         virtual void format(int tt, int s, int d, Packet* p);
  54.         void annotate(const char* s);
  55. int show_tcphdr_;  // bool flags; backward compat
  56. int show_sctphdr_; // bool flags; backward compat
  57. void callback();
  58. public:
  59. Trace(int type);
  60.         ~Trace();
  61. BaseTrace *pt_;    // support for pkt tracing
  62. int type_;
  63.         int command(int argc, const char*const* argv);
  64. static int get_seqno(Packet* p);
  65.         void recv(Packet* p, Handler*);
  66. void recvOnly(Packet *p);
  67. //Default rounding is to 6 digits after decimal
  68. //#define PRECISION 1.0E+6
  69. //According to freeBSD /usr/include/float.h 15 is the number of digits 
  70. // in a double.  We can specify all of them, because we're rounding to
  71. // 6 digits after the decimal and and %g removes trailing zeros.
  72. //#define TIME_FORMAT "%.15g"
  73. // annoying way of tackling sprintf rounding platform 
  74. // differences :
  75. // use round(Scheduler::instance().clock()) instead of 
  76. // Scheduler::instance().clock().
  77. //static double round (double x, double precision=PRECISION) {
  78. //return (double)floor(x*precision + 0.5)/precision;
  79. //}
  80. virtual void write_nam_trace(const char *s);
  81. void trace(TracedVar* var);
  82. //void namdump();
  83. };
  84. class DequeTrace : public Trace {
  85. public:
  86. DequeTrace(int type) : Trace(type) {}
  87. ~DequeTrace();
  88. void recv(Packet* p, Handler*);
  89. };
  90. #endif