#include <IPv6ErrorHandling.h>
Protected Member Functions | |
virtual void | initialize () |
virtual void | handleMessage (cMessage *msg) |
virtual void | displayType1Msg (int code) |
virtual void | displayType2Msg () |
virtual void | displayType3Msg (int code) |
virtual void | displayType4Msg (int code) |
void IPv6ErrorHandling::handleMessage | ( | cMessage * | msg | ) | [protected, virtual] |
00036 { 00037 ICMPv6Message *icmpv6Msg = check_and_cast<ICMPv6Message *>(msg); 00038 IPv6Datagram *d = check_and_cast<IPv6Datagram *>(icmpv6Msg->getEncapsulatedMsg()); 00039 int type = (int)icmpv6Msg->getType(); 00040 int code; 00041 EV << " Type: " << type; 00042 if (dynamic_cast<ICMPv6DestUnreachableMsg *>(icmpv6Msg)) 00043 { 00044 ICMPv6DestUnreachableMsg *msg2 = (ICMPv6DestUnreachableMsg *)icmpv6Msg; 00045 code = msg2->getCode(); 00046 EV << " Code: " << code; 00047 } 00048 else if (dynamic_cast<ICMPv6PacketTooBigMsg *>(icmpv6Msg)) 00049 { 00050 ICMPv6PacketTooBigMsg *msg2 = (ICMPv6PacketTooBigMsg *)icmpv6Msg; 00051 code = 0; 00052 } 00053 else if (dynamic_cast<ICMPv6TimeExceededMsg *>(icmpv6Msg)) 00054 { 00055 ICMPv6TimeExceededMsg *msg2 = (ICMPv6TimeExceededMsg *)icmpv6Msg; 00056 code = msg2->getCode(); 00057 EV << " Code: " << code; 00058 } 00059 else if (dynamic_cast<ICMPv6ParamProblemMsg *>(icmpv6Msg)) 00060 { 00061 ICMPv6ParamProblemMsg *msg2 = (ICMPv6ParamProblemMsg *)icmpv6Msg; 00062 code = msg2->getCode(); 00063 EV << " Code: " << code; 00064 } 00065 00066 EV << " Byte length: " << d->getByteLength() 00067 << " Src: " << d->getSrcAddress() 00068 << " Dest: " << d->getDestAddress() 00069 << " Time: " << simTime() 00070 << "\n"; 00071 00072 if (type == 1) 00073 displayType1Msg(code); 00074 else if (type == 2) 00075 displayType2Msg(); 00076 else if (type == 3) 00077 displayType3Msg(code); 00078 else if (type == 4) 00079 displayType4Msg(code); 00080 else 00081 EV << "Unknown Error Type!" << endl; 00082 delete icmpv6Msg; 00083 }
void IPv6ErrorHandling::displayType1Msg | ( | int | code | ) | [protected, virtual] |
Referenced by handleMessage().
00086 { 00087 EV << "Destination Unreachable: "; 00088 if (code == 0) 00089 EV << "no route to destination\n"; 00090 else if (code == 1) 00091 EV << "communication with destination administratively prohibited\n"; 00092 else if (code == 3) 00093 EV << "address unreachable\n"; 00094 else if (code == 4) 00095 EV << "port unreachable\n"; 00096 else 00097 EV << "Unknown Error Code!\n"; 00098 }
void IPv6ErrorHandling::displayType2Msg | ( | ) | [protected, virtual] |
Referenced by handleMessage().
00101 { 00102 EV << "Packet Too Big" << endl; 00103 //Code is always 0 and ignored by the receiver. 00104 }
void IPv6ErrorHandling::displayType3Msg | ( | int | code | ) | [protected, virtual] |
Referenced by handleMessage().
00107 { 00108 EV << "Time Exceeded Message: "; 00109 if (code == 0) 00110 EV << "hop limit exceeded in transit\n"; 00111 else if (code == 1) 00112 EV << "fragment reassembly time exceeded\n"; 00113 else 00114 EV << "Unknown Error Code!\n"; 00115 }
void IPv6ErrorHandling::displayType4Msg | ( | int | code | ) | [protected, virtual] |
Referenced by handleMessage().
00118 { 00119 EV << "Parameter Problem Message: "; 00120 if (code == 0) 00121 EV << "erroneous header field encountered\n"; 00122 else if (code == 1) 00123 EV << "unrecognized Next Header type encountered\n"; 00124 else if (code == 2) 00125 EV << "unrecognized IPv6 option encountered\n"; 00126 else 00127 EV << "Unknown Error Code!\n"; 00128 }