00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef __cmu_trace__
00040 #define __cmu_trace__
00041
00042 #include "trace.h"
00043 #include "god.h"
00044
00045 #ifndef __PRETTY_FUNCTION__
00046 #define __PRETTY_FUNCTION__ ("")
00047 #endif
00048
00049
00050
00051
00052 #define DROP 'D'
00053 #define RECV 'r'
00054 #define SEND 's'
00055 #define FWRD 'f'
00056
00057
00058 #define EOT 'x'
00059
00060
00061
00062 #define TR_ROUTER 0x01
00063 #define TR_MAC 0x02
00064 #define TR_IFQ 0x04
00065 #define TR_AGENT 0x08
00066
00067 #define TR_PHY 0x10
00068
00069 #define DROP_END_OF_SIMULATION "END"
00070 #define DROP_MAC_COLLISION "COL"
00071 #define DROP_MAC_DUPLICATE "DUP"
00072 #define DROP_MAC_PACKET_ERROR "ERR"
00073 #define DROP_MAC_RETRY_COUNT_EXCEEDED "RET"
00074 #define DROP_MAC_INVALID_STATE "STA"
00075 #define DROP_MAC_BUSY "BSY"
00076 #define DROP_MAC_INVALID_DST "DST"
00077 #define DROP_MAC_SLEEP "SLP" // smac sleep state
00078
00079 #define DROP_RTR_NO_ROUTE "NRTE" // no route
00080 #define DROP_RTR_ROUTE_LOOP "LOOP" // routing loop
00081 #define DROP_RTR_TTL "TTL" // ttl reached zero
00082 #define DROP_RTR_QFULL "IFQ" // queue full
00083 #define DROP_RTR_QTIMEOUT "TOUT" // packet expired
00084 #define DROP_RTR_MAC_CALLBACK "CBK" // MAC callback
00085 #define DROP_RTR_SALVAGE "SAL"
00086
00087 #define DROP_IFQ_QFULL "IFQ" // no buffer space in IFQ
00088 #define DROP_IFQ_ARP_FULL "ARP" // dropped by ARP
00089 #define DROP_IFQ_FILTER "FIL"
00090
00091 #define DROP_OUTSIDE_SUBNET "OUT" // dropped by base stations if received rtg updates from nodes outside its domain.
00092
00093 #define MAX_ID_LEN 3
00094 #define MAX_NODE 4096
00095
00101 class PacketTracer
00102 {
00103 public:
00104 PacketTracer();
00105 virtual ~PacketTracer();
00106 void setNext(PacketTracer *next);
00107 PacketTracer *getNext();
00108 int format_unknow(Packet *p, int offset, BaseTrace *pt_, int newtrace);
00109 protected:
00110 virtual int format(Packet *p, int offset, BaseTrace *pt_, int newtrace) = 0;
00111 PacketTracer *next_;
00112 };
00113
00114
00115 class CMUTrace : public Trace {
00116 public:
00117 CMUTrace(const char *s, char t);
00118 void recv(Packet *p, Handler *h);
00119 void recv(Packet *p, const char* why);
00120
00121 static void addPacketTracer(PacketTracer *pt);
00122
00123
00124 private:
00125 char tracename[MAX_ID_LEN + 1];
00126 int nodeColor[MAX_NODE];
00127 int tracetype;
00128 MobileNode *node_;
00129 int newtrace_;
00130
00131
00132 static double bradius;
00133 static double radius_scaling_factor_;
00134 static double duration_scaling_factor_;
00135 static void calculate_broadcast_parameters();
00136
00137
00138 int initialized() { return node_ && 1; }
00139 int node_energy();
00140 int command(int argc, const char*const* argv);
00141 void format(Packet *p, const char *why);
00142
00143 void nam_format(Packet *p, int offset);
00144
00145 void format_phy(Packet *p, int offset);
00146
00147 void format_mac_common(Packet *p, const char *why, int offset);
00148 void format_mac(Packet *p, int offset);
00149 void format_smac(Packet *p, int offset);
00150 void format_ip(Packet *p, int offset);
00151
00152 void format_arp(Packet *p, int offset);
00153 void format_hdlc(Packet *p, int offset);
00154 void format_dsr(Packet *p, int offset);
00155 void format_msg(Packet *p, int offset);
00156 void format_tcp(Packet *p, int offset);
00157 void format_sctp(Packet *p, int offset);
00158 void format_rtp(Packet *p, int offset);
00159 void format_tora(Packet *p, int offset);
00160 void format_imep(Packet *p, int offset);
00161 void format_aodv(Packet *p, int offset);
00162 void format_olsr(Packet* p, int offset);
00163 void format_cdswl(Packet* p, int offset);
00164
00165
00166 static PacketTracer *pktTrc_;
00167
00168 };
00169
00170 #endif