src/internet-stack/icmpv4.h
changeset 3820 c04ecfdce1ef
child 4521 981e2f0b696b
equal deleted inserted replaced
3819:37b316422064 3820:c04ecfdce1ef
       
     1 #ifndef ICMPV4_H
       
     2 #define ICMPV4_H
       
     3 
       
     4 #include "ns3/header.h"
       
     5 #include "ns3/ptr.h"
       
     6 #include "ns3/ipv4-header.h"
       
     7 #include <stdint.h>
       
     8 
       
     9 namespace ns3 {
       
    10 
       
    11 class Packet;
       
    12 
       
    13 class Icmpv4Header : public Header
       
    14 {
       
    15 public:
       
    16   enum {
       
    17     ECHO_REPLY = 0,
       
    18     DEST_UNREACH = 3,
       
    19     ECHO = 8,
       
    20     TIME_EXCEEDED = 11
       
    21   };
       
    22 
       
    23   void EnableChecksum (void);
       
    24   void SetType (uint8_t type);
       
    25   void SetCode (uint8_t code);
       
    26 
       
    27   uint8_t GetType (void) const;
       
    28   uint8_t GetCode (void) const;
       
    29 
       
    30   static TypeId GetTypeId (void);
       
    31   Icmpv4Header ();
       
    32   virtual ~Icmpv4Header ();
       
    33   virtual TypeId GetInstanceTypeId (void) const;
       
    34   virtual uint32_t GetSerializedSize (void) const;
       
    35   virtual void Serialize (Buffer::Iterator start) const;
       
    36   virtual uint32_t Deserialize (Buffer::Iterator start);
       
    37   virtual void Print (std::ostream &os) const;
       
    38 
       
    39 private:
       
    40   uint8_t m_type;
       
    41   uint8_t m_code;
       
    42   bool m_calcChecksum;
       
    43 };
       
    44 
       
    45 class Icmpv4Echo : public Header
       
    46 {
       
    47 public:
       
    48   void SetIdentifier (uint16_t id);
       
    49   void SetSequenceNumber (uint16_t seq);
       
    50   void SetData (Ptr<const Packet> data);
       
    51   uint16_t GetIdentifier (void) const;
       
    52   uint16_t GetSequenceNumber (void) const;
       
    53   Ptr<const Packet> GetData (void) const;
       
    54 
       
    55 
       
    56   static TypeId GetTypeId (void);
       
    57   Icmpv4Echo ();
       
    58   virtual ~Icmpv4Echo ();
       
    59   virtual TypeId GetInstanceTypeId (void) const;
       
    60   virtual uint32_t GetSerializedSize (void) const;
       
    61   virtual void Serialize (Buffer::Iterator start) const;
       
    62   virtual uint32_t Deserialize (Buffer::Iterator start);
       
    63   virtual void Print (std::ostream &os) const;
       
    64 private:
       
    65   uint16_t m_identifier;
       
    66   uint16_t m_sequence;
       
    67   Ptr<Packet> m_data;
       
    68 };
       
    69 
       
    70 class Icmpv4DestinationUnreachable : public Header
       
    71 {
       
    72 public:
       
    73   enum {
       
    74     NET_UNREACHABLE = 0,
       
    75     HOST_UNREACHABLE = 1,
       
    76     PROTOCOL_UNREACHABLE = 2,
       
    77     PORT_UNREACHABLE = 3,
       
    78     FRAG_NEEDED = 4,
       
    79     SOURCE_ROUTE_FAILED = 5
       
    80   };
       
    81   static TypeId GetTypeId (void);
       
    82   Icmpv4DestinationUnreachable ();
       
    83   virtual ~Icmpv4DestinationUnreachable ();
       
    84 
       
    85   void SetNextHopMtu (uint16_t mtu);
       
    86   uint16_t GetNextHopMtu (void) const;
       
    87 
       
    88   void SetData (Ptr<const Packet> data);
       
    89   void SetHeader (Ipv4Header header);
       
    90 
       
    91   void GetData (uint8_t payload[8]) const;
       
    92   Ipv4Header GetHeader (void) const;
       
    93 
       
    94 private:
       
    95   virtual TypeId GetInstanceTypeId (void) const;
       
    96   virtual uint32_t GetSerializedSize (void) const;
       
    97   virtual void Serialize (Buffer::Iterator start) const;
       
    98   virtual uint32_t Deserialize (Buffer::Iterator start);
       
    99   virtual void Print (std::ostream &os) const;
       
   100 private:
       
   101   uint16_t m_nextHopMtu;
       
   102   Ipv4Header m_header;
       
   103   uint8_t m_data[8];
       
   104 };
       
   105 
       
   106 
       
   107 class Icmpv4TimeExceeded : public Header
       
   108 {
       
   109 public:
       
   110   enum {
       
   111     TIME_TO_LIVE = 0,
       
   112     FRAGMENT_REASSEMBLY = 1
       
   113   };
       
   114 
       
   115   void SetData (Ptr<const Packet> data);
       
   116   void SetHeader (Ipv4Header header);
       
   117 
       
   118   void GetData (uint8_t payload[8]) const;
       
   119   Ipv4Header GetHeader (void) const;
       
   120 
       
   121   static TypeId GetTypeId (void);
       
   122   Icmpv4TimeExceeded ();
       
   123   virtual ~Icmpv4TimeExceeded ();
       
   124   virtual TypeId GetInstanceTypeId (void) const;
       
   125   virtual uint32_t GetSerializedSize (void) const;
       
   126   virtual void Serialize (Buffer::Iterator start) const;
       
   127   virtual uint32_t Deserialize (Buffer::Iterator start);
       
   128   virtual void Print (std::ostream &os) const;
       
   129 
       
   130 private:
       
   131   Ipv4Header m_header;
       
   132   uint8_t m_data[8];
       
   133 };
       
   134 
       
   135 } // namespace ns3
       
   136 
       
   137 #endif /* ICMPV4_H */