Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

trace.h

Go to the documentation of this file.
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: /nfs/jade/vint/CVSROOT/ns-2/trace/trace.h,v 1.33 2001/05/21 19:27:32 haldar Exp $
00035  */
00036 
00037 #ifndef ns_trace_h
00038 #define ns_trace_h
00039 
00040 #define NUMFLAGS 7
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         void callback();
00065 public:
00066         Trace(int type);
00067         ~Trace();
00068 
00069         BaseTrace *pt_;    // support for pkt tracing
00070 
00071         int type_;      
00072         int command(int argc, const char*const* argv);
00073         static int get_seqno(Packet* p);
00074         void recv(Packet* p, Handler*);
00075         void recvOnly(Packet *p);
00076 
00077         //Default rounding is to 6 digits after decimal
00078         //#define PRECISION 1.0E+6
00079         //According to freeBSD /usr/include/float.h 15 is the number of digits 
00080         // in a double.  We can specify all of them, because we're rounding to
00081         // 6 digits after the decimal and and %g removes trailing zeros.
00082         //#define TIME_FORMAT "%.15g"
00083         // annoying way of tackling sprintf rounding platform 
00084         // differences :
00085         // use round(Scheduler::instance().clock()) instead of 
00086         // Scheduler::instance().clock().
00087         //static double round (double x, double precision=PRECISION) {
00088         //return (double)floor(x*precision + 0.5)/precision;
00089         //}
00090 
00091         virtual void write_nam_trace(const char *s);
00092         void trace(TracedVar* var);
00093         //void namdump();
00094 };
00095 
00096 class DequeTrace : public Trace {
00097 public:
00098         DequeTrace(int type) : Trace(type) {}
00099         ~DequeTrace();
00100         void recv(Packet* p, Handler*);
00101 
00102 };
00103 
00104 
00105 #endif

Generated on Tue Apr 20 12:14:37 2004 for NS2.26SourcesOriginal by doxygen 1.3.3