A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
icmpv4.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 
21 #ifndef ICMPV4_H
22 #define ICMPV4_H
23 
24 #include "ns3/header.h"
25 #include "ns3/ptr.h"
26 #include "ns3/ipv4-header.h"
27 #include <stdint.h>
28 
29 namespace ns3 {
30 
31 class Packet;
32 
33 class Icmpv4Header : public Header
34 {
35 public:
36  enum {
39  ECHO = 8,
41  };
42 
43  void EnableChecksum (void);
44  void SetType (uint8_t type);
45  void SetCode (uint8_t code);
46 
47  uint8_t GetType (void) const;
48  uint8_t GetCode (void) const;
49 
50  static TypeId GetTypeId (void);
51  Icmpv4Header ();
52  virtual ~Icmpv4Header ();
53  virtual TypeId GetInstanceTypeId (void) const;
54  virtual uint32_t GetSerializedSize (void) const;
55  virtual void Serialize (Buffer::Iterator start) const;
56  virtual uint32_t Deserialize (Buffer::Iterator start);
57  virtual void Print (std::ostream &os) const;
58 
59 private:
60  uint8_t m_type;
61  uint8_t m_code;
63 };
64 
65 class Icmpv4Echo : public Header
66 {
67 public:
68  void SetIdentifier (uint16_t id);
69  void SetSequenceNumber (uint16_t seq);
71  uint16_t GetIdentifier (void) const;
72  uint16_t GetSequenceNumber (void) const;
73  uint32_t GetDataSize (void) const;
74  uint32_t GetData (uint8_t payload[]) const;
75 
76 
77  static TypeId GetTypeId (void);
78  Icmpv4Echo ();
79  virtual ~Icmpv4Echo ();
80  virtual TypeId GetInstanceTypeId (void) const;
81  virtual uint32_t GetSerializedSize (void) const;
82  virtual void Serialize (Buffer::Iterator start) const;
83  virtual uint32_t Deserialize (Buffer::Iterator start);
84  virtual void Print (std::ostream &os) const;
85 private:
86  uint16_t m_identifier;
87  uint16_t m_sequence;
88  uint8_t *m_data;
89  uint32_t m_dataSize;
90 };
91 
93 {
94 public:
95  enum {
102  };
103  static TypeId GetTypeId (void);
106 
107  void SetNextHopMtu (uint16_t mtu);
108  uint16_t GetNextHopMtu (void) const;
109 
111  void SetHeader (Ipv4Header header);
112 
113  void GetData (uint8_t payload[8]) const;
114  Ipv4Header GetHeader (void) const;
115 
116 private:
117  virtual TypeId GetInstanceTypeId (void) const;
118  virtual uint32_t GetSerializedSize (void) const;
119  virtual void Serialize (Buffer::Iterator start) const;
120  virtual uint32_t Deserialize (Buffer::Iterator start);
121  virtual void Print (std::ostream &os) const;
122 private:
123  uint16_t m_nextHopMtu;
125  uint8_t m_data[8];
126 };
127 
128 
130 {
131 public:
132  enum {
135  };
136 
138  void SetHeader (Ipv4Header header);
139 
140  void GetData (uint8_t payload[8]) const;
141  Ipv4Header GetHeader (void) const;
142 
143  static TypeId GetTypeId (void);
145  virtual ~Icmpv4TimeExceeded ();
146  virtual TypeId GetInstanceTypeId (void) const;
147  virtual uint32_t GetSerializedSize (void) const;
148  virtual void Serialize (Buffer::Iterator start) const;
149  virtual uint32_t Deserialize (Buffer::Iterator start);
150  virtual void Print (std::ostream &os) const;
151 
152 private:
154  uint8_t m_data[8];
155 };
156 
157 } // namespace ns3
158 
159 #endif /* ICMPV4_H */
Protocol header serialization and deserialization.
Definition: header.h:42
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:262
virtual TypeId GetInstanceTypeId(void) const
Definition: icmpv4.cc:338
void SetType(uint8_t type)
Definition: icmpv4.cc:108
void GetData(uint8_t payload[8]) const
Definition: icmpv4.cc:321
uint8_t GetCode(void) const
Definition: icmpv4.cc:126
virtual TypeId GetInstanceTypeId(void) const
Definition: icmpv4.cc:225
void SetHeader(Ipv4Header header)
Definition: icmpv4.cc:315
uint16_t m_sequence
Definition: icmpv4.h:87
void SetData(Ptr< const Packet > data)
Definition: icmpv4.cc:309
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:456
uint32_t GetDataSize(void) const
Definition: icmpv4.cc:184
static TypeId GetTypeId(void)
Definition: icmpv4.cc:197
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:473
uint8_t m_code
Definition: icmpv4.h:61
static TypeId GetTypeId(void)
Definition: icmpv4.cc:36
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:487
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:92
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:462
virtual ~Icmpv4Header()
Definition: icmpv4.cc:51
uint16_t GetIdentifier(void) const
Definition: icmpv4.cc:172
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:101
iterator in a Buffer instance
Definition: buffer.h:98
uint16_t GetNextHopMtu(void) const
Definition: icmpv4.cc:302
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:237
void SetCode(uint8_t code)
Definition: icmpv4.cc:114
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:68
Packet header for IPv4.
Definition: ipv4-header.h:31
uint32_t m_dataSize
Definition: icmpv4.h:89
void EnableChecksum(void)
Definition: icmpv4.cc:56
static TypeId GetTypeId(void)
Definition: icmpv4.cc:276
uint8_t data[writeSize]
Ipv4Header m_header
Definition: icmpv4.h:153
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:231
uint8_t m_data[8]
Definition: icmpv4.h:154
void SetHeader(Ipv4Header header)
Definition: icmpv4.cc:426
void SetData(Ptr< const Packet > data)
Definition: icmpv4.cc:420
void SetNextHopMtu(uint16_t mtu)
Definition: icmpv4.cc:296
virtual TypeId GetInstanceTypeId(void) const
Definition: icmpv4.cc:62
virtual ~Icmpv4Echo()
Definition: icmpv4.cc:217
uint32_t GetData(uint8_t payload[]) const
Definition: icmpv4.cc:190
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:362
void SetData(Ptr< const Packet > data)
Definition: icmpv4.cc:151
virtual ~Icmpv4TimeExceeded()
Definition: icmpv4.cc:445
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:344
uint16_t m_identifier
Definition: icmpv4.h:86
void GetData(uint8_t payload[8]) const
Definition: icmpv4.cc:432
void SetSequenceNumber(uint16_t seq)
Definition: icmpv4.cc:145
uint8_t GetType(void) const
Definition: icmpv4.cc:120
virtual TypeId GetInstanceTypeId(void) const
Definition: icmpv4.cc:450
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:245
uint16_t GetSequenceNumber(void) const
Definition: icmpv4.cc:178
Ipv4Header GetHeader(void) const
Definition: icmpv4.cc:327
static TypeId GetTypeId(void)
Definition: icmpv4.cc:399
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:74
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:377
a unique identifier for an interface.
Definition: type-id.h:49
Ipv4Header GetHeader(void) const
Definition: icmpv4.cc:438
void SetIdentifier(uint16_t id)
Definition: icmpv4.cc:139
bool m_calcChecksum
Definition: icmpv4.h:62
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:350
uint8_t * m_data
Definition: icmpv4.h:88
uint8_t m_type
Definition: icmpv4.h:60