#include <IPv6ErrorHandling.h>
List of all members.
Detailed Description
Error Handling: print out received error for IPv6
Member Function Documentation
void IPv6ErrorHandling::displayType1Msg |
( |
int |
code | ) |
[protected, virtual] |
Referenced by handleMessage().
{
EV << "Destination Unreachable: ";
if (code == 0)
EV << "no route to destination\n";
else if (code == 1)
EV << "communication with destination administratively prohibited\n";
else if (code == 3)
EV << "address unreachable\n";
else if (code == 4)
EV << "port unreachable\n";
else
EV << "Unknown Error Code!\n";
}
void IPv6ErrorHandling::displayType2Msg |
( |
| ) |
[protected, virtual] |
void IPv6ErrorHandling::displayType3Msg |
( |
int |
code | ) |
[protected, virtual] |
Referenced by handleMessage().
{
EV << "Time Exceeded Message: ";
if (code == 0)
EV << "hop limit exceeded in transit\n";
else if (code == 1)
EV << "fragment reassembly time exceeded\n";
else
EV << "Unknown Error Code!\n";
}
void IPv6ErrorHandling::displayType4Msg |
( |
int |
code | ) |
[protected, virtual] |
Referenced by handleMessage().
{
EV << "Parameter Problem Message: ";
if (code == 0)
EV << "erroneous header field encountered\n";
else if (code == 1)
EV << "unrecognized Next Header type encountered\n";
else if (code == 2)
EV << "unrecognized IPv6 option encountered\n";
else
EV << "Unknown Error Code!\n";
}
void IPv6ErrorHandling::handleMessage |
( |
cMessage * |
msg | ) |
[protected, virtual] |
{
ICMPv6Message *icmpv6Msg = check_and_cast<ICMPv6Message *>(msg);
IPv6Datagram *d = check_and_cast<IPv6Datagram *>(icmpv6Msg->getEncapsulatedPacket());
int type = (int)icmpv6Msg->getType();
int code;
EV << " Type: " << type;
if (dynamic_cast<ICMPv6DestUnreachableMsg *>(icmpv6Msg))
{
ICMPv6DestUnreachableMsg *msg2 = (ICMPv6DestUnreachableMsg *)icmpv6Msg;
code = msg2->getCode();
EV << " Code: " << code;
}
else if (dynamic_cast<ICMPv6PacketTooBigMsg *>(icmpv6Msg))
{
ICMPv6PacketTooBigMsg *msg2 = (ICMPv6PacketTooBigMsg *)icmpv6Msg;
code = 0;
}
else if (dynamic_cast<ICMPv6TimeExceededMsg *>(icmpv6Msg))
{
ICMPv6TimeExceededMsg *msg2 = (ICMPv6TimeExceededMsg *)icmpv6Msg;
code = msg2->getCode();
EV << " Code: " << code;
}
else if (dynamic_cast<ICMPv6ParamProblemMsg *>(icmpv6Msg))
{
ICMPv6ParamProblemMsg *msg2 = (ICMPv6ParamProblemMsg *)icmpv6Msg;
code = msg2->getCode();
EV << " Code: " << code;
}
EV << " Byte length: " << d->getByteLength()
<< " Src: " << d->getSrcAddress()
<< " Dest: " << d->getDestAddress()
<< " Time: " << simTime()
<< "\n";
if (type == 1)
displayType1Msg(code);
else if (type == 2)
displayType2Msg();
else if (type == 3)
displayType3Msg(code);
else if (type == 4)
displayType4Msg(code);
else
EV << "Unknown Error Type!" << endl;
delete icmpv6Msg;
}
void IPv6ErrorHandling::initialize |
( |
| ) |
[protected, virtual] |
The documentation for this class was generated from the following files: