Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __ICMPv6_H__
00021 #define __ICMPv6_H__
00022
00023 #include <omnetpp.h>
00024 #include "RoutingTable6Access.h"
00025 #include "IPv6Datagram.h"
00026 #include "ICMPv6Message_m.h"
00027 #include "IPv6ControlInfo.h"
00028
00029
00033 class INET_API ICMPv6 : public cSimpleModule
00034 {
00035 public:
00049 virtual void sendErrorMessage(IPv6Datagram *datagram, ICMPv6Type type, int code);
00050
00058 virtual void sendErrorMessage(cPacket *transportPacket, IPv6ControlInfo *ctrl, ICMPv6Type type, int code);
00059
00060 protected:
00061
00062 virtual void sendToIP(ICMPv6Message *msg, const IPv6Address& dest);
00063 virtual void sendToIP(ICMPv6Message *msg);
00064
00065 virtual ICMPv6Message *createDestUnreachableMsg(int code);
00066 virtual ICMPv6Message *createPacketTooBigMsg(int mtu);
00067 virtual ICMPv6Message *createTimeExceededMsg(int code);
00068 virtual ICMPv6Message *createParamProblemMsg(int code);
00069
00070 protected:
00074 virtual void initialize();
00075
00080 virtual void handleMessage(cMessage *msg);
00081 virtual void processICMPv6Message(ICMPv6Message *);
00082
00086 virtual void processEchoRequest(ICMPv6EchoRequestMsg *);
00087
00091 virtual void processEchoReply(ICMPv6EchoReplyMsg *);
00092
00097 virtual void sendEchoRequest(cPacket *);
00098
00102 virtual bool validateDatagramPromptingError(IPv6Datagram *datagram);
00103
00104 virtual void errorOut(ICMPv6Message *);
00105 };
00106
00107
00108 #endif
00109
00110