• Main Page
  • Classes
  • Files
  • File List

/Users/yzchen/ns/ns-allinone-2.33/ns-2.33/trace/trace.h

00001 /* -*-  Mode:C++; c-basic-offset:8; tab-width:8 -*- */
00002 /*
00003  * Copyright (c) 1997 Regents of the University of California.
00004  * All rights reserved.
00005  * 
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions
00008  * are met:
00009  * 1. Redistributions of source code must retain the above copyright
00010  *    notice, this list of conditions and the following disclaimer.
00011  * 2. Redistributions in binary form must reproduce the above copyright
00012  *    notice, this list of conditions and the following disclaimer in the
00013  *    documentation and/or other materials provided with the distribution.
00014  * 3. All advertising materials mentioning features or use of this software
00015  *    must display the following acknowledgement:
00016  *      This product includes software developed by the MASH Research
00017  *      Group at the University of California Berkeley.
00018  * 4. Neither the name of the University nor of the Research Group may be
00019  *    used to endorse or promote products derived from this software without
00020  *    specific prior written permission.
00021  * 
00022  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
00023  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00024  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00025  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
00026  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00027  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00028  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00029  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00031  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00032  * SUCH DAMAGE.
00033  *
00034  * @(#) $Header: /cvsroot/nsnam/ns-2/trace/trace.h,v 1.34 2003/08/21 18:22:02 haldar Exp $
00035  */
00036 
00037 #ifndef ns_trace_h
00038 #define ns_trace_h
00039 
00040 #define NUMFLAGS 8
00041 
00042 #include <math.h> // floor
00043 #include "packet.h"
00044 #include "basetrace.h"
00045 
00046 
00047 /* Tracing has evolved into two types, packet tracing and event tracing.
00048 Class Trace essentially supports packet tracing. 
00049 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.
00050 
00051 Hence Trace should be renamed as ConnectorTrace in the future.
00052 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.
00053 */
00054 
00055 class Trace : public Connector {
00056 protected:
00057         nsaddr_t src_;
00058         nsaddr_t dst_;
00059         int callback_;
00060 
00061         virtual void format(int tt, int s, int d, Packet* p);
00062         void annotate(const char* s);
00063         int show_tcphdr_;  // bool flags; backward compat
00064         int show_sctphdr_; // bool flags; backward compat
00065         void callback();
00066 public:
00067         Trace(int type);
00068         ~Trace();
00069 
00070         BaseTrace *pt_;    // support for pkt tracing
00071 
00072         int type_;      
00073         int command(int argc, const char*const* argv);
00074         static int get_seqno(Packet* p);
00075         void recv(Packet* p, Handler*);
00076         void recvOnly(Packet *p);
00077 
00078         //Default rounding is to 6 digits after decimal
00079         //#define PRECISION 1.0E+6
00080         //According to freeBSD /usr/include/float.h 15 is the number of digits 
00081         // in a double.  We can specify all of them, because we're rounding to
00082         // 6 digits after the decimal and and %g removes trailing zeros.
00083         //#define TIME_FORMAT "%.15g"
00084         // annoying way of tackling sprintf rounding platform 
00085         // differences :
00086         // use round(Scheduler::instance().clock()) instead of 
00087         // Scheduler::instance().clock().
00088         //static double round (double x, double precision=PRECISION) {
00089         //return (double)floor(x*precision + 0.5)/precision;
00090         //}
00091 
00092         virtual void write_nam_trace(const char *s);
00093         void trace(TracedVar* var);
00094         //void namdump();
00095 };
00096 
00097 class DequeTrace : public Trace {
00098 public:
00099         DequeTrace(int type) : Trace(type) {}
00100         ~DequeTrace();
00101         void recv(Packet* p, Handler*);
00102 
00103 };
00104 
00105 
00106 #endif

Generated on Tue Aug 10 2010 16:16:08 for ns-2.33 by  doxygen 1.7.1