author | Natale Patriciello <natale.patriciello@gmail.com> |
Fri, 16 Oct 2015 10:43:36 -0700 | |
changeset 11715 | e4f633dc1140 |
parent 11259 | ea2f6a3ed14e |
permissions | -rw-r--r-- |
7385
10beb0e53130
standardize emacs c++ mode comments
Vedran Mileti? <rivanvx@gmail.com>
parents:
7176
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
2 |
/* |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
3 |
* Copyright (c) 2008 INRIA |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
4 |
* |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
7 |
* published by the Free Software Foundation; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
8 |
* |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
12 |
* GNU General Public License for more details. |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
13 |
* |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
17 |
* |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
18 |
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
19 |
*/ |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
20 |
|
3820 | 21 |
#include "icmpv4.h" |
22 |
#include "ns3/packet.h" |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
23 |
#include "ns3/log.h" |
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
24 |
|
10968
2d29fee2b7b8
[Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
10652
diff
changeset
|
25 |
namespace ns3 { |
3820 | 26 |
|
10968
2d29fee2b7b8
[Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
10652
diff
changeset
|
27 |
NS_LOG_COMPONENT_DEFINE ("Icmpv4Header"); |
3820 | 28 |
|
29 |
/******************************************************** |
|
30 |
* Icmpv4Header |
|
31 |
********************************************************/ |
|
32 |
||
10652
dc18deba4502
[doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
10410
diff
changeset
|
33 |
NS_OBJECT_ENSURE_REGISTERED (Icmpv4Header); |
6301 | 34 |
|
3820 | 35 |
TypeId |
36 |
Icmpv4Header::GetTypeId (void) |
|
37 |
{ |
|
38 |
static TypeId tid = TypeId ("ns3::Icmpv4Header") |
|
39 |
.SetParent<Header> () |
|
11259
ea2f6a3ed14e
SetGroupName for internet module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
10968
diff
changeset
|
40 |
.SetGroupName ("Internet") |
3820 | 41 |
.AddConstructor<Icmpv4Header> () |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
42 |
; |
3820 | 43 |
return tid; |
44 |
} |
|
45 |
Icmpv4Header::Icmpv4Header () |
|
46 |
: m_type (0), |
|
47 |
m_code (0), |
|
48 |
m_calcChecksum (false) |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
49 |
{ |
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
50 |
NS_LOG_FUNCTION (this); |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
51 |
} |
3820 | 52 |
Icmpv4Header::~Icmpv4Header () |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
53 |
{ |
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
54 |
NS_LOG_FUNCTION (this); |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
55 |
} |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
56 |
void |
3820 | 57 |
Icmpv4Header::EnableChecksum (void) |
58 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
59 |
NS_LOG_FUNCTION (this); |
3820 | 60 |
m_calcChecksum = true; |
61 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
62 |
TypeId |
3820 | 63 |
Icmpv4Header::GetInstanceTypeId (void) const |
64 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
65 |
NS_LOG_FUNCTION (this); |
3820 | 66 |
return GetTypeId (); |
67 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
68 |
uint32_t |
3820 | 69 |
Icmpv4Header::GetSerializedSize (void) const |
70 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
71 |
NS_LOG_FUNCTION (this); |
3820 | 72 |
return 4; |
73 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
74 |
void |
3820 | 75 |
Icmpv4Header::Serialize (Buffer::Iterator start) const |
76 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
77 |
NS_LOG_FUNCTION (this << &start); |
3820 | 78 |
Buffer::Iterator i = start; |
79 |
i.WriteU8 (m_type); |
|
80 |
i.WriteU8 (m_code); |
|
81 |
i.WriteHtonU16 (0); |
|
82 |
if (m_calcChecksum) |
|
83 |
{ |
|
84 |
i = start; |
|
85 |
uint16_t checksum = i.CalculateIpChecksum (i.GetSize ()); |
|
86 |
i = start; |
|
87 |
i.Next (2); |
|
88 |
i.WriteU16 (checksum); |
|
89 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
90 |
|
3820 | 91 |
} |
92 |
uint32_t |
|
93 |
Icmpv4Header::Deserialize (Buffer::Iterator start) |
|
94 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
95 |
NS_LOG_FUNCTION (this << &start); |
3820 | 96 |
m_type = start.ReadU8 (); |
97 |
m_code = start.ReadU8 (); |
|
7061 | 98 |
start.Next (2); // uint16_t checksum = start.ReadNtohU16 (); |
3820 | 99 |
return 4; |
100 |
} |
|
101 |
void |
|
102 |
Icmpv4Header::Print (std::ostream &os) const |
|
103 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
104 |
NS_LOG_FUNCTION (this << &os); |
3820 | 105 |
os << "type=" << (uint32_t)m_type << ", code=" << (uint32_t)m_code; |
106 |
} |
|
107 |
||
108 |
void |
|
109 |
Icmpv4Header::SetType (uint8_t type) |
|
110 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
111 |
NS_LOG_FUNCTION (this << static_cast<uint32_t> (type)); |
3820 | 112 |
m_type = type; |
113 |
} |
|
114 |
void |
|
115 |
Icmpv4Header::SetCode (uint8_t code) |
|
116 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
117 |
NS_LOG_FUNCTION (this << static_cast<uint32_t> (code)); |
3820 | 118 |
m_code = code; |
119 |
} |
|
120 |
uint8_t |
|
121 |
Icmpv4Header::GetType (void) const |
|
122 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
123 |
NS_LOG_FUNCTION (this); |
3820 | 124 |
return m_type; |
125 |
} |
|
126 |
uint8_t |
|
127 |
Icmpv4Header::GetCode (void) const |
|
128 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
129 |
NS_LOG_FUNCTION (this); |
3820 | 130 |
return m_code; |
131 |
} |
|
132 |
||
133 |
/******************************************************** |
|
134 |
* Icmpv4Echo |
|
135 |
********************************************************/ |
|
6301 | 136 |
|
10652
dc18deba4502
[doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
10410
diff
changeset
|
137 |
NS_OBJECT_ENSURE_REGISTERED (Icmpv4Echo); |
6301 | 138 |
|
3820 | 139 |
void |
140 |
Icmpv4Echo::SetIdentifier (uint16_t id) |
|
141 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
142 |
NS_LOG_FUNCTION (this << id); |
3820 | 143 |
m_identifier = id; |
144 |
} |
|
145 |
void |
|
146 |
Icmpv4Echo::SetSequenceNumber (uint16_t seq) |
|
147 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
148 |
NS_LOG_FUNCTION (this << seq); |
3820 | 149 |
m_sequence = seq; |
150 |
} |
|
151 |
void |
|
152 |
Icmpv4Echo::SetData (Ptr<const Packet> data) |
|
153 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
154 |
NS_LOG_FUNCTION (this << *data); |
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
155 |
|
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
156 |
uint32_t size = data->GetSize (); |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
157 |
// |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
158 |
// All kinds of optimizations are possible, but let's not get carried away |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
159 |
// since this is probably a very uncommon thing in the big picture. |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
160 |
// |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
161 |
// N.B. Zero is a legal size for the alloc below even though a hardcoded zero |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
162 |
// would result in warning. |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
163 |
// |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
164 |
if (size != m_dataSize) |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
165 |
{ |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
166 |
delete [] m_data; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
167 |
m_data = new uint8_t[size]; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
168 |
m_dataSize = size; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
169 |
} |
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
170 |
data->CopyData (m_data, size); |
3820 | 171 |
} |
172 |
uint16_t |
|
173 |
Icmpv4Echo::GetIdentifier (void) const |
|
174 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
175 |
NS_LOG_FUNCTION (this); |
3820 | 176 |
return m_identifier; |
177 |
} |
|
178 |
uint16_t |
|
179 |
Icmpv4Echo::GetSequenceNumber (void) const |
|
180 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
181 |
NS_LOG_FUNCTION (this); |
3820 | 182 |
return m_sequence; |
183 |
} |
|
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
184 |
uint32_t |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
185 |
Icmpv4Echo::GetDataSize (void) const |
3820 | 186 |
{ |
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
187 |
NS_LOG_FUNCTION (this); |
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
188 |
return m_dataSize; |
3820 | 189 |
} |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
190 |
uint32_t |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
191 |
Icmpv4Echo::GetData (uint8_t payload[]) const |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
192 |
{ |
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
193 |
NS_LOG_FUNCTION (this << payload); |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
194 |
memcpy (payload, m_data, m_dataSize); |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
195 |
return m_dataSize; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
196 |
} |
3820 | 197 |
TypeId |
198 |
Icmpv4Echo::GetTypeId (void) |
|
199 |
{ |
|
200 |
static TypeId tid = TypeId ("ns3::Icmpv4Echo") |
|
201 |
.SetParent<Header> () |
|
11259
ea2f6a3ed14e
SetGroupName for internet module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
10968
diff
changeset
|
202 |
.SetGroupName ("Internet") |
3820 | 203 |
.AddConstructor<Icmpv4Echo> () |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
204 |
; |
3820 | 205 |
return tid; |
206 |
} |
|
207 |
Icmpv4Echo::Icmpv4Echo () |
|
208 |
: m_identifier (0), |
|
209 |
m_sequence (0), |
|
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
210 |
m_dataSize (0) |
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
211 |
{ |
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
212 |
NS_LOG_FUNCTION (this); |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
213 |
// |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
214 |
// After construction, m_data is always valid until destruction. This is true |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
215 |
// even if m_dataSize is zero. |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
216 |
// |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
217 |
m_data = new uint8_t[m_dataSize]; |
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
218 |
} |
3820 | 219 |
Icmpv4Echo::~Icmpv4Echo () |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
220 |
{ |
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
221 |
NS_LOG_FUNCTION (this); |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
222 |
delete [] m_data; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
223 |
m_data = 0; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
224 |
m_dataSize = 0; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
225 |
} |
3820 | 226 |
TypeId |
227 |
Icmpv4Echo::GetInstanceTypeId (void) const |
|
228 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
229 |
NS_LOG_FUNCTION (this); |
3820 | 230 |
return GetTypeId (); |
231 |
} |
|
232 |
uint32_t |
|
233 |
Icmpv4Echo::GetSerializedSize (void) const |
|
234 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
235 |
NS_LOG_FUNCTION (this); |
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
236 |
return 4 + m_dataSize; |
3820 | 237 |
} |
238 |
void |
|
239 |
Icmpv4Echo::Serialize (Buffer::Iterator start) const |
|
240 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
241 |
NS_LOG_FUNCTION (this << &start); |
3820 | 242 |
start.WriteHtonU16 (m_identifier); |
243 |
start.WriteHtonU16 (m_sequence); |
|
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
244 |
start.Write (m_data, m_dataSize); |
3820 | 245 |
} |
246 |
uint32_t |
|
247 |
Icmpv4Echo::Deserialize (Buffer::Iterator start) |
|
248 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
249 |
NS_LOG_FUNCTION (this << &start); |
3820 | 250 |
m_identifier = start.ReadNtohU16 (); |
251 |
m_sequence = start.ReadNtohU16 (); |
|
252 |
NS_ASSERT (start.GetSize () >= 4); |
|
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
253 |
uint32_t size = start.GetSize () - 4; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
254 |
if (size != m_dataSize) |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
255 |
{ |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
256 |
delete [] m_data; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
257 |
m_data = new uint8_t[size]; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
258 |
m_dataSize = size; |
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
259 |
} |
4521
981e2f0b696b
no need to keep around a Ptr<Packet>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3820
diff
changeset
|
260 |
start.Read (m_data, m_dataSize); |
4575
ee3191a0b560
variable size buffer for icmpv4 echo header
Craig Dowell <craigdo@ee.washington.edu>
parents:
4521
diff
changeset
|
261 |
return m_dataSize; |
3820 | 262 |
} |
263 |
void |
|
264 |
Icmpv4Echo::Print (std::ostream &os) const |
|
265 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
266 |
NS_LOG_FUNCTION (this << &os); |
3820 | 267 |
os << "identifier=" << m_identifier << ", sequence=" << m_sequence; |
268 |
} |
|
269 |
||
270 |
||
271 |
/******************************************************** |
|
272 |
* Icmpv4DestinationUnreachable |
|
273 |
********************************************************/ |
|
274 |
||
10652
dc18deba4502
[doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
10410
diff
changeset
|
275 |
NS_OBJECT_ENSURE_REGISTERED (Icmpv4DestinationUnreachable); |
6301 | 276 |
|
3820 | 277 |
TypeId |
278 |
Icmpv4DestinationUnreachable::GetTypeId (void) |
|
279 |
{ |
|
280 |
static TypeId tid = TypeId ("ns3::Icmpv4DestinationUnreachable") |
|
281 |
.SetParent<Header> () |
|
11259
ea2f6a3ed14e
SetGroupName for internet module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
10968
diff
changeset
|
282 |
.SetGroupName ("Internet") |
3820 | 283 |
.AddConstructor<Icmpv4DestinationUnreachable> () |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
284 |
; |
3820 | 285 |
return tid; |
286 |
} |
|
287 |
Icmpv4DestinationUnreachable::Icmpv4DestinationUnreachable () |
|
288 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
289 |
NS_LOG_FUNCTION (this); |
3820 | 290 |
// make sure that thing is initialized to get initialized bytes |
291 |
// when the ip payload's size is smaller than 8 bytes. |
|
292 |
for (uint8_t j = 0; j < 8; j++) |
|
293 |
{ |
|
294 |
m_data[j] = 0; |
|
295 |
} |
|
296 |
} |
|
297 |
||
298 |
void |
|
299 |
Icmpv4DestinationUnreachable::SetNextHopMtu (uint16_t mtu) |
|
300 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
301 |
NS_LOG_FUNCTION (this << mtu); |
3820 | 302 |
m_nextHopMtu = mtu; |
303 |
} |
|
304 |
uint16_t |
|
305 |
Icmpv4DestinationUnreachable::GetNextHopMtu (void) const |
|
306 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
307 |
NS_LOG_FUNCTION (this); |
3820 | 308 |
return m_nextHopMtu; |
309 |
} |
|
310 |
||
311 |
void |
|
312 |
Icmpv4DestinationUnreachable::SetData (Ptr<const Packet> data) |
|
313 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
314 |
NS_LOG_FUNCTION (this << *data); |
3820 | 315 |
data->CopyData (m_data, 8); |
316 |
} |
|
317 |
void |
|
318 |
Icmpv4DestinationUnreachable::SetHeader (Ipv4Header header) |
|
319 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
320 |
NS_LOG_FUNCTION (this << header); |
3820 | 321 |
m_header = header; |
322 |
} |
|
323 |
void |
|
324 |
Icmpv4DestinationUnreachable::GetData (uint8_t payload[8]) const |
|
325 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
326 |
NS_LOG_FUNCTION (this << payload); |
3820 | 327 |
memcpy (payload, m_data, 8); |
328 |
} |
|
329 |
Ipv4Header |
|
330 |
Icmpv4DestinationUnreachable::GetHeader (void) const |
|
331 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
332 |
NS_LOG_FUNCTION (this); |
3820 | 333 |
return m_header; |
334 |
} |
|
335 |
||
336 |
||
337 |
Icmpv4DestinationUnreachable::~Icmpv4DestinationUnreachable () |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
338 |
{ |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
339 |
} |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
340 |
TypeId |
3820 | 341 |
Icmpv4DestinationUnreachable::GetInstanceTypeId (void) const |
342 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
343 |
NS_LOG_FUNCTION (this); |
3820 | 344 |
return GetTypeId (); |
345 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
346 |
uint32_t |
3820 | 347 |
Icmpv4DestinationUnreachable::GetSerializedSize (void) const |
348 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
349 |
NS_LOG_FUNCTION (this); |
3820 | 350 |
return 4 + m_header.GetSerializedSize () + 8; |
351 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
352 |
void |
3820 | 353 |
Icmpv4DestinationUnreachable::Serialize (Buffer::Iterator start) const |
354 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
355 |
NS_LOG_FUNCTION (this << &start); |
3820 | 356 |
start.WriteU16 (0); |
357 |
start.WriteHtonU16 (m_nextHopMtu); |
|
358 |
uint32_t size = m_header.GetSerializedSize (); |
|
359 |
m_header.Serialize (start); |
|
360 |
start.Next (size); |
|
361 |
start.Write (m_data, 8); |
|
362 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
363 |
|
3820 | 364 |
uint32_t |
365 |
Icmpv4DestinationUnreachable::Deserialize (Buffer::Iterator start) |
|
366 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
367 |
NS_LOG_FUNCTION (this << &start); |
3820 | 368 |
Buffer::Iterator i = start; |
369 |
i.Next (2); |
|
370 |
m_nextHopMtu = i.ReadNtohU16 (); |
|
371 |
uint32_t read = m_header.Deserialize (i); |
|
372 |
i.Next (read); |
|
373 |
for (uint8_t j = 0; j < 8; j++) |
|
374 |
{ |
|
375 |
m_data[j] = i.ReadU8 (); |
|
376 |
} |
|
377 |
return i.GetDistanceFrom (start); |
|
378 |
} |
|
379 |
void |
|
380 |
Icmpv4DestinationUnreachable::Print (std::ostream &os) const |
|
381 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
382 |
NS_LOG_FUNCTION (this << &os); |
3820 | 383 |
m_header.Print (os); |
384 |
os << " org data="; |
|
385 |
for (uint8_t i = 0; i < 8; i++) |
|
386 |
{ |
|
387 |
os << (uint32_t) m_data[i]; |
|
388 |
if (i != 8) |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
389 |
{ |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
390 |
os << " "; |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
391 |
} |
3820 | 392 |
} |
393 |
} |
|
394 |
||
395 |
/******************************************************** |
|
396 |
* Icmpv4TimeExceeded |
|
397 |
********************************************************/ |
|
398 |
||
10652
dc18deba4502
[doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents:
10410
diff
changeset
|
399 |
NS_OBJECT_ENSURE_REGISTERED (Icmpv4TimeExceeded); |
6301 | 400 |
|
3820 | 401 |
TypeId |
402 |
Icmpv4TimeExceeded::GetTypeId (void) |
|
403 |
{ |
|
404 |
static TypeId tid = TypeId ("ns3::Icmpv4TimeExceeded") |
|
405 |
.SetParent<Header> () |
|
11259
ea2f6a3ed14e
SetGroupName for internet module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
10968
diff
changeset
|
406 |
.SetGroupName ("Internet") |
3820 | 407 |
.AddConstructor<Icmpv4TimeExceeded> () |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
408 |
; |
3820 | 409 |
return tid; |
410 |
} |
|
411 |
Icmpv4TimeExceeded::Icmpv4TimeExceeded () |
|
412 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
413 |
NS_LOG_FUNCTION (this); |
3820 | 414 |
// make sure that thing is initialized to get initialized bytes |
415 |
// when the ip payload's size is smaller than 8 bytes. |
|
416 |
for (uint8_t j = 0; j < 8; j++) |
|
417 |
{ |
|
418 |
m_data[j] = 0; |
|
419 |
} |
|
420 |
} |
|
421 |
||
422 |
||
423 |
void |
|
424 |
Icmpv4TimeExceeded::SetData (Ptr<const Packet> data) |
|
425 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
426 |
NS_LOG_FUNCTION (this << *data); |
3820 | 427 |
data->CopyData (m_data, 8); |
428 |
} |
|
429 |
void |
|
430 |
Icmpv4TimeExceeded::SetHeader (Ipv4Header header) |
|
431 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
432 |
NS_LOG_FUNCTION (this << header); |
3820 | 433 |
m_header = header; |
434 |
} |
|
435 |
void |
|
436 |
Icmpv4TimeExceeded::GetData (uint8_t payload[8]) const |
|
437 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
438 |
NS_LOG_FUNCTION (this << payload); |
3820 | 439 |
memcpy (payload, m_data, 8); |
440 |
} |
|
441 |
Ipv4Header |
|
442 |
Icmpv4TimeExceeded::GetHeader (void) const |
|
443 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
444 |
NS_LOG_FUNCTION (this); |
3820 | 445 |
return m_header; |
446 |
} |
|
447 |
||
448 |
||
449 |
Icmpv4TimeExceeded::~Icmpv4TimeExceeded () |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
450 |
{ |
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
451 |
NS_LOG_FUNCTION (this); |
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
452 |
} |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
453 |
TypeId |
3820 | 454 |
Icmpv4TimeExceeded::GetInstanceTypeId (void) const |
455 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
456 |
NS_LOG_FUNCTION (this); |
3820 | 457 |
return GetTypeId (); |
458 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
459 |
uint32_t |
3820 | 460 |
Icmpv4TimeExceeded::GetSerializedSize (void) const |
461 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
462 |
NS_LOG_FUNCTION (this); |
3820 | 463 |
return 4 + m_header.GetSerializedSize () + 8; |
464 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
465 |
void |
3820 | 466 |
Icmpv4TimeExceeded::Serialize (Buffer::Iterator start) const |
467 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
468 |
NS_LOG_FUNCTION (this << &start); |
3820 | 469 |
start.WriteU32 (0); |
470 |
uint32_t size = m_header.GetSerializedSize (); |
|
471 |
m_header.Serialize (start); |
|
472 |
start.Next (size); |
|
473 |
start.Write (m_data, 8); |
|
474 |
} |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
475 |
|
3820 | 476 |
uint32_t |
477 |
Icmpv4TimeExceeded::Deserialize (Buffer::Iterator start) |
|
478 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
479 |
NS_LOG_FUNCTION (this << &start); |
3820 | 480 |
Buffer::Iterator i = start; |
481 |
i.Next (4); |
|
482 |
uint32_t read = m_header.Deserialize (i); |
|
483 |
i.Next (read); |
|
484 |
for (uint8_t j = 0; j < 8; j++) |
|
485 |
{ |
|
486 |
m_data[j] = i.ReadU8 (); |
|
487 |
} |
|
488 |
return i.GetDistanceFrom (start); |
|
489 |
} |
|
490 |
void |
|
491 |
Icmpv4TimeExceeded::Print (std::ostream &os) const |
|
492 |
{ |
|
9704
1db7690f8e8f
Partially clean up function logging of internet module.
Kristijan Lenkovi? <k.lenkovic@me.com>
parents:
7385
diff
changeset
|
493 |
NS_LOG_FUNCTION (this << &os); |
3820 | 494 |
m_header.Print (os); |
495 |
os << " org data="; |
|
496 |
for (uint8_t i = 0; i < 8; i++) |
|
497 |
{ |
|
498 |
os << (uint32_t) m_data[i]; |
|
499 |
if (i != 8) |
|
7176
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
500 |
{ |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
501 |
os << " "; |
9f2663992e99
internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7061
diff
changeset
|
502 |
} |
3820 | 503 |
} |
504 |
} |
|
505 |
||
506 |
} // namespace ns3 |