A Discrete-Event Network Simulator
API
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 
40 class Icmpv4Header : public Header
41 {
42 public:
43  enum {
46  ECHO = 8,
48  };
49 
53  void EnableChecksum (void);
54 
59  void SetType (uint8_t type);
60 
65  void SetCode (uint8_t code);
66 
71  uint8_t GetType (void) const;
76  uint8_t GetCode (void) const;
77 
82  static TypeId GetTypeId (void);
83  Icmpv4Header ();
84  virtual ~Icmpv4Header ();
85 
86  virtual TypeId GetInstanceTypeId (void) const;
87  virtual uint32_t GetSerializedSize (void) const;
88  virtual void Serialize (Buffer::Iterator start) const;
89  virtual uint32_t Deserialize (Buffer::Iterator start);
90  virtual void Print (std::ostream &os) const;
91 
92 private:
93  uint8_t m_type;
94  uint8_t m_code;
96 };
97 
103 class Icmpv4Echo : public Header
104 {
105 public:
110  void SetIdentifier (uint16_t id);
115  void SetSequenceNumber (uint16_t seq);
125  uint16_t GetIdentifier (void) const;
130  uint16_t GetSequenceNumber (void) const;
135  uint32_t GetDataSize (void) const;
141  uint32_t GetData (uint8_t payload[]) const;
142 
143 
148  static TypeId GetTypeId (void);
149  Icmpv4Echo ();
150  virtual ~Icmpv4Echo ();
151  virtual TypeId GetInstanceTypeId (void) const;
152  virtual uint32_t GetSerializedSize (void) const;
153  virtual void Serialize (Buffer::Iterator start) const;
154  virtual uint32_t Deserialize (Buffer::Iterator start);
155  virtual void Print (std::ostream &os) const;
156 private:
157  uint16_t m_identifier;
158  uint16_t m_sequence;
159  uint8_t *m_data;
160  uint32_t m_dataSize;
161 };
162 
169 {
170 public:
171  enum {
178  };
179 
184  static TypeId GetTypeId (void);
187 
192  void SetNextHopMtu (uint16_t mtu);
197  uint16_t GetNextHopMtu (void) const;
198 
208  void SetHeader (Ipv4Header header);
209 
214  void GetData (uint8_t payload[8]) const;
219  Ipv4Header GetHeader (void) const;
220 
221 private:
222  virtual TypeId GetInstanceTypeId (void) const;
223  virtual uint32_t GetSerializedSize (void) const;
224  virtual void Serialize (Buffer::Iterator start) const;
225  virtual uint32_t Deserialize (Buffer::Iterator start);
226  virtual void Print (std::ostream &os) const;
227 private:
228  uint16_t m_nextHopMtu;
230  uint8_t m_data[8];
231 };
232 
233 
240 {
241 public:
242  enum {
245  };
246 
256  void SetHeader (Ipv4Header header);
257 
262  void GetData (uint8_t payload[8]) const;
267  Ipv4Header GetHeader (void) const;
268 
273  static TypeId GetTypeId (void);
275  virtual ~Icmpv4TimeExceeded ();
276  virtual TypeId GetInstanceTypeId (void) const;
277  virtual uint32_t GetSerializedSize (void) const;
278  virtual void Serialize (Buffer::Iterator start) const;
279  virtual uint32_t Deserialize (Buffer::Iterator start);
280  virtual void Print (std::ostream &os) const;
281 
282 private:
284  uint8_t m_data[8];
285 };
286 
287 } // namespace ns3
288 
289 #endif /* ICMPV4_H */
Protocol header serialization and deserialization.
Definition: header.h:42
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:266
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: icmpv4.cc:343
void SetType(uint8_t type)
Set ICMP type.
Definition: icmpv4.cc:109
void GetData(uint8_t payload[8]) const
Get the ICMP carried data.
Definition: icmpv4.cc:326
uint8_t GetCode(void) const
Get ICMP code.
Definition: icmpv4.cc:127
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: icmpv4.cc:227
void SetHeader(Ipv4Header header)
Set the ICMP carried IPv4 header.
Definition: icmpv4.cc:320
uint16_t m_sequence
sequence number
Definition: icmpv4.h:158
ICMP Time Exceeded header.
Definition: icmpv4.h:239
void SetData(Ptr< const Packet > data)
Set the ICMP carried data.
Definition: icmpv4.cc:314
def start()
Definition: core.py:1482
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:462
uint32_t GetDataSize(void) const
Get the Echo data size.
Definition: icmpv4.cc:185
static TypeId GetTypeId(void)
Get ICMP type.
Definition: icmpv4.cc:198
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:479
uint8_t m_code
ICMP code.
Definition: icmpv4.h:94
static TypeId GetTypeId(void)
Get the type ID.
Definition: icmpv4.cc:36
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:493
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:93
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:468
virtual ~Icmpv4Header()
Definition: icmpv4.cc:52
Base class for all the ICMP packet headers.
Definition: icmpv4.h:40
uint16_t GetIdentifier(void) const
Get the Echo identifier.
Definition: icmpv4.cc:173
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:102
iterator in a Buffer instance
Definition: buffer.h:98
uint16_t GetNextHopMtu(void) const
Get the next hop MTU.
Definition: icmpv4.cc:307
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:239
void SetCode(uint8_t code)
Set ICMP code.
Definition: icmpv4.cc:115
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:69
Packet header for IPv4.
Definition: ipv4-header.h:33
uint16_t m_nextHopMtu
next hop MTU
Definition: icmpv4.h:228
uint32_t m_dataSize
data size
Definition: icmpv4.h:160
void EnableChecksum(void)
Enables ICMP Checksum calculation.
Definition: icmpv4.cc:57
static TypeId GetTypeId(void)
Get ICMP type.
Definition: icmpv4.cc:280
uint8_t data[writeSize]
Ipv4Header m_header
carried IPv4 header
Definition: icmpv4.h:283
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:233
uint8_t m_data[8]
carried data
Definition: icmpv4.h:284
void SetHeader(Ipv4Header header)
Set the ICMP carried IPv4 header.
Definition: icmpv4.cc:432
void SetData(Ptr< const Packet > data)
Get the ICMP carried data.
Definition: icmpv4.cc:426
void SetNextHopMtu(uint16_t mtu)
Set the next hop MTU.
Definition: icmpv4.cc:301
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: icmpv4.cc:63
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ipv4Header m_header
carried IPv4 header
Definition: icmpv4.h:229
virtual ~Icmpv4Echo()
Definition: icmpv4.cc:219
ICMP Echo header.
Definition: icmpv4.h:103
uint32_t GetData(uint8_t payload[]) const
Get the Echo data.
Definition: icmpv4.cc:191
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:367
void SetData(Ptr< const Packet > data)
Set the Echo data.
Definition: icmpv4.cc:152
virtual ~Icmpv4TimeExceeded()
Definition: icmpv4.cc:451
virtual uint32_t GetSerializedSize(void) const
Definition: icmpv4.cc:349
uint16_t m_identifier
identifier
Definition: icmpv4.h:157
void GetData(uint8_t payload[8]) const
Get the ICMP carried data.
Definition: icmpv4.cc:438
ICMP Destination Unreachable header.
Definition: icmpv4.h:168
void SetSequenceNumber(uint16_t seq)
Set the Echo sequence number.
Definition: icmpv4.cc:146
uint8_t GetType(void) const
Get ICMP type.
Definition: icmpv4.cc:121
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: icmpv4.cc:456
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition: icmpv4.cc:247
uint16_t GetSequenceNumber(void) const
Get the Echo sequence number.
Definition: icmpv4.cc:179
Ipv4Header GetHeader(void) const
Get the ICMP carried IPv4 header.
Definition: icmpv4.cc:332
static TypeId GetTypeId(void)
Get ICMP type.
Definition: icmpv4.cc:404
uint8_t m_data[8]
carried data
Definition: icmpv4.h:230
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:75
virtual void Print(std::ostream &os) const
Definition: icmpv4.cc:382
a unique identifier for an interface.
Definition: type-id.h:58
Ipv4Header GetHeader(void) const
Get the ICMP carried IPv4 header.
Definition: icmpv4.cc:444
void SetIdentifier(uint16_t id)
Set the Echo identifier.
Definition: icmpv4.cc:140
bool m_calcChecksum
true if checksum is calculated
Definition: icmpv4.h:95
virtual void Serialize(Buffer::Iterator start) const
Definition: icmpv4.cc:355
uint8_t * m_data
data
Definition: icmpv4.h:159
uint8_t m_type
ICMP type.
Definition: icmpv4.h:93