#include <TCPDump.h>
Public Member Functions | |
TCPDumper (std::ostream &o) | |
void | dump (bool l2r, const char *label, IPDatagram *dgram, const char *comment=NULL) |
void | dumpIPv6 (bool l2r, const char *label, IPv6Datagram_Base *dgram, const char *comment=NULL) |
void | dump (bool l2r, const char *label, TCPSegment *tcpseg, const std::string &srcAddr, const std::string &destAddr, const char *comment=NULL) |
void | dump (const char *label, const char *msg) |
Protected Attributes | |
int | seq |
std::ostream * | outp |
|
00024 { 00025 outp = &out; 00026 }
|
|
00133 { 00134 std::ostream& out = *outp; 00135 00136 // seq and time (not part of the tcpdump format) 00137 char buf[30]; 00138 sprintf(buf,"[%.3f%s] ", simulation.simTime(), label); 00139 out << buf; 00140 00141 out << msg << "\n"; 00142 }
|
|
00076 { 00077 std::ostream& out = *outp; 00078 00079 // seq and time (not part of the tcpdump format) 00080 char buf[30]; 00081 sprintf(buf,"[%.3f%s] ", simulation.simTime(), label); 00082 out << buf; 00083 00084 // src/dest 00085 if (l2r) 00086 { 00087 out << srcAddr << "." << tcpseg->srcPort() << " > "; 00088 out << destAddr << "." << tcpseg->destPort() << ": "; 00089 } 00090 else 00091 { 00092 out << destAddr << "." << tcpseg->destPort() << " < "; 00093 out << srcAddr << "." << tcpseg->srcPort() << ": "; 00094 } 00095 00096 // flags 00097 bool flags = false; 00098 if (tcpseg->synBit()) {flags=true; out << "S";} 00099 if (tcpseg->finBit()) {flags=true; out << "F";} 00100 if (tcpseg->pshBit()) {flags=true; out << "P";} 00101 if (tcpseg->rstBit()) {flags=true; out << "R";} 00102 if (!flags) {out << ".";} 00103 out << " "; 00104 00105 // data-seqno 00106 if (tcpseg->payloadLength()>0 || tcpseg->synBit()) 00107 { 00108 out << tcpseg->sequenceNo() << ":" << tcpseg->sequenceNo()+tcpseg->payloadLength(); 00109 out << "(" << tcpseg->payloadLength() << ") "; 00110 } 00111 00112 // ack 00113 if (tcpseg->ackBit()) 00114 out << "ack " << tcpseg->ackNo() << " "; 00115 00116 // window 00117 out << "win " << tcpseg->window() << " "; 00118 00119 // urgent 00120 if (tcpseg->urgBit()) 00121 out << "urg " << tcpseg->urgentPointer() << " "; 00122 00123 // options (not supported by TCPSegment yet) 00124 00125 // comment 00126 if (comment) 00127 out << "# " << comment; 00128 00129 out << endl; 00130 }
|
|
00029 { 00030 cMessage *encapmsg = dgram->encapsulatedMsg(); 00031 if (dynamic_cast<TCPSegment *>(encapmsg)) 00032 { 00033 // if TCP, dump as TCP 00034 dump(l2r, label, (TCPSegment *)encapmsg, dgram->srcAddress().str(), dgram->destAddress().str(), comment); 00035 } 00036 else 00037 { 00038 // some other packet, dump what we can 00039 std::ostream& out = *outp; 00040 00041 // seq and time (not part of the tcpdump format) 00042 char buf[30]; 00043 sprintf(buf,"[%.3f%s] ", simulation.simTime(), label); 00044 out << buf; 00045 00046 // packet class and name 00047 out << "? " << encapmsg->className() << " \"" << encapmsg->name() << "\"\n"; 00048 } 00049 }
|
|
00053 { 00054 cMessage *encapmsg = dgram->encapsulatedMsg(); 00055 if (dynamic_cast<TCPSegment *>(encapmsg)) 00056 { 00057 // if TCP, dump as TCP 00058 dump(l2r, label, (TCPSegment *)encapmsg, dgram->srcAddress().str(), dgram->destAddress().str(), comment); 00059 } 00060 else 00061 { 00062 // some other packet, dump what we can 00063 std::ostream& out = *outp; 00064 00065 // seq and time (not part of the tcpdump format) 00066 char buf[30]; 00067 sprintf(buf,"[%.3f%s] ", simulation.simTime(), label); 00068 out << buf; 00069 00070 // packet class and name 00071 out << "? " << encapmsg->className() << " \"" << encapmsg->name() << "\"\n"; 00072 } 00073 }
|
|
|
|
|