trace.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:8k
- /*
- * Copyright (c) 1991,1993 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the Computer Systems
- * Engineering Group at Lawrence Berkeley Laboratory.
- * 4. Neither the name of the University nor of the Laboratory may be used
- * to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) $Header: /cvsroot/nsnam/nam-1/trace.h,v 1.38 2003/01/28 03:22:38 buchheim Exp $ (LBL)
- */
- #ifndef nam_trace_h
- #define nam_trace_h
- #include "tclcl.h"
- #include "animator.h"
- #include "parser.h"
- class NamStream;
- //class ParseTable;
- #define TRACE_LINE_MAXLEN 256
- /*
- * 'packet' events (hop, enqueue, dequeue & drop) all have the same
- * format: the src & dst node and a description of the packet.
- */
- #define PTYPELEN 16
- #define CONVLEN 32
- #define FORWARDS 1
- #define BACKWARDS -1
- #define TIME_EOF -1
- #define TIME_BOF -2
- struct PacketAttr {
- int size;
- int attr;
- int id;
- int energy ;
- int esrc ;
- int edst ;
- double wBcastDuration;
- double wBcastRadius;
- char type[PTYPELEN];
- char wtype[PTYPELEN]; //AGT,RTR or MAC
- char convid[CONVLEN];
- };
- struct PacketEvent {
- int src;
- int dst;
- PacketAttr pkt;
- PacketAttr namgraph_flags; // for ignoring namgraph flags
- };
- struct VarEvent {
- /* Var event stuff */
- int str;
- //char * str;
- };
- /*XXX don't really want these fixed size*/
- #define MAXNAME 20
- #define MAXVALUE 256
- struct AgentAttr {
- char name[MAXNAME];
- int expired;
- };
-
- struct AgentEvent {
- /*Agent event stuff*/
- int src;
- /*dst is only set if it's an interface agent*/
- int dst;
- AgentAttr agent;
- };
- struct FeatureAttr {
- char name[MAXNAME];
- char value[MAXVALUE];
- char oldvalue[MAXVALUE];
- char agent[MAXNAME];
- int expired;
- char type;
- };
- struct FeatureEvent {
- int src;
- /*XXX not sure we need dst here*/
- int dst;
- FeatureAttr feature;
- };
-
- struct LinkAttr {
- double rate; // Link Bandwith (Rate)
- double delay; // Link Delay
- double length; // length
- double angle; // orientation
- char state[MAXVALUE];
- char color[MAXNAME];
- char oldColor[MAXNAME];
- char dlabel[MAXNAME]; // label beneath a link
- char odlabel[MAXNAME]; // old dlabel
- char direction[MAXNAME]; // direction of the label
- char odirection[MAXNAME];
- char dcolor[MAXNAME]; // label color
- char odcolor[MAXNAME];
- };
- struct LinkEvent {
- int src;
- int dst;
- LinkAttr link;
- };
- struct LanLinkEvent {
- int src;
- int dst;
- double angle;
- };
- struct LayoutLanEvent {
- char name[MAXVALUE];
- double rate;
- double delay;
- double angle;
- };
- struct NodeMarkAttr {
- char name[MAXVALUE];
- char shape[MAXNAME];
- char color[MAXNAME];
- int expired;
- };
- struct NodeMarkEvent {
- int src;
- NodeMarkAttr mark;
- };
- struct NodeAttr {
- int addr;
- char state[MAXNAME];
- char dlabel[MAXNAME]; // label beneath a node
- char odlabel[MAXNAME]; // old dlabel
- char color[MAXNAME];
- char oldColor[MAXNAME];
- char direction[MAXNAME]; // direction of the label
- char odirection[MAXNAME];
- char lcolor[MAXNAME]; // inside label color
- char olcolor[MAXNAME];
- char dcolor[MAXNAME]; // label color
- char odcolor[MAXNAME];
- };
- struct NodeEvent {
- int src;
- /*dst is only set if it's an interface event*/
- int dst;
- NodeAttr node;
- NodeMarkAttr mark; // Added for dynamic nodes
- double x;
- double y;
- double z; // Not fully implemented
- double x_vel_;
- double y_vel_;
- double stoptime;
- double size;
- int wireless;
- };
- const int GROUP_EVENT_JOIN = 1;
- const int GROUP_EVENT_LEAVE = 2;
- struct GroupAttr {
- char name[MAXNAME];
- int flag; /* 1: join, 2: leave, 3: create new group */
- int mbr;
- };
- struct GroupEvent {
- int src; /* group address */
- GroupAttr grp;
- };
- struct RouteAttr {
- int expired;
- int neg;
- double timeout;
- int pktsrc;
- int group;
- char mode[MAXVALUE];
- };
- struct RouteEvent {
- int src;
- int dst;
- RouteAttr route;
- };
- struct HierarchicalAddressEvent {
- int hierarchy;
- int portshift;
- char portmask[MAXNAME];
- int multicast_shift;
- int multicast_mask;
-
- int nodeshift;
- int nodemask;
- };
- struct ColorEvent {
- int id;
- char color[MAXNAME];
- };
- struct QueueEvent {
- int src;
- int dst;
- double angle;
- };
- struct WirelessEvent {
- int x;
- int y;
- };
- struct TrafficSourceEvent {
- int id;
- int agent_id;
- };
- struct TraceEvent {
- double time; /* event time */
- long offset; /* XXX trace file offset */
- int lineno; /* XXX trace file line no. */
- int tt; /* type: h,+,-,d */
- union {
- PacketEvent pe;
- VarEvent ve;
- AgentEvent ae;
- FeatureEvent fe;
- LinkEvent le;
- LanLinkEvent lle;
- LayoutLanEvent layoutle;
- NodeEvent ne;
- RouteEvent re;
- NodeMarkEvent me;
- GroupEvent ge;
- HierarchicalAddressEvent hae;
- ColorEvent ce;
- QueueEvent qe;
- WirelessEvent we;
- };
- char version[MAXNAME];
- int dummy; // Used for variables that are discarded
- char dummy_str[MAXNAME]; // Used for variables that are discarded
- bool valid;
- char image[TRACE_LINE_MAXLEN];
- };
- class TraceHandler : public TclObject {
- public:
- TraceHandler() : nam_(0) {}
- TraceHandler(const char *animator) {
- nam_ = (NetworkAnimator *)TclObject::lookup(animator);
- }
- virtual void update(double) = 0;
- virtual void reset(double) = 0;
- virtual void handle(const TraceEvent&, double now, int direction) = 0;
- inline NetworkAnimator* nam() { return nam_; }
- protected:
- NetworkAnimator *nam_;
- };
- struct TraceHandlerList {
- TraceHandler* th;
- TraceHandlerList* next;
- };
- class Trace : public TclObject {
- public:
- Trace(const char * fname, const char * animator);
- ~Trace();
- int command(int argc, const char*const* argv);
- int ReadEvent(double, TraceEvent&);
- void scan();
- void rewind(long);
- int nextLine();
- double nextTime() { return (pending_.time); }
- double Maxtime() { return (maxtime_); }
- double Mintime() { return (mintime_); }
- int valid();
- NetworkAnimator* nam() { return nam_; }
- Trace* next_;
- private:
- void addHandler(TraceHandler*);
- void settime(double now, int timeSliderClicked);
- void findLastLine();
- TraceHandlerList* handlers_;
- int lineno_;
- double maxtime_;
- double mintime_;
- double now_;
- NamStream *nam_stream_;
- int direction_; // 1 = Forwards, -1 = Backwards
- double last_event_time_; // Used for reporting trace syntax timing errors
- TraceEvent pending_;
- char fileName_[256];
- NetworkAnimator * nam_;
- int skipahead_mode_;
- int count_;
-
- ParseTable * parse_table_;
- };
- #endif