A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
ipv4-header.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2005 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
#include "ns3/assert.h"
22
#include "ns3/abort.h"
23
#include "ns3/log.h"
24
#include "ns3/header.h"
25
#include "
ipv4-header.h
"
26
27
namespace
ns3
{
28
29
NS_LOG_COMPONENT_DEFINE
(
"Ipv4Header"
);
30
31
NS_OBJECT_ENSURE_REGISTERED
(Ipv4Header);
32
33
Ipv4Header::Ipv4Header
()
34
: m_calcChecksum (false),
35
m_payloadSize (0),
36
m_identification (0),
37
m_tos (0),
38
m_ttl (0),
39
m_protocol (0),
40
m_flags (0),
41
m_fragmentOffset (0),
42
m_checksum (0),
43
m_goodChecksum (true),
44
m_headerSize(5*4)
45
{
46
}
47
48
void
49
Ipv4Header::EnableChecksum
(
void
)
50
{
51
NS_LOG_FUNCTION
(
this
);
52
m_calcChecksum
=
true
;
53
}
54
55
void
56
Ipv4Header::SetPayloadSize
(uint16_t size)
57
{
58
NS_LOG_FUNCTION
(
this
<< size);
59
m_payloadSize
= size;
60
}
61
uint16_t
62
Ipv4Header::GetPayloadSize
(
void
)
const
63
{
64
NS_LOG_FUNCTION
(
this
);
65
return
m_payloadSize
;
66
}
67
68
uint16_t
69
Ipv4Header::GetIdentification
(
void
)
const
70
{
71
NS_LOG_FUNCTION
(
this
);
72
return
m_identification
;
73
}
74
void
75
Ipv4Header::SetIdentification
(uint16_t identification)
76
{
77
NS_LOG_FUNCTION
(
this
<< identification);
78
m_identification
= identification;
79
}
80
81
void
82
Ipv4Header::SetTos
(uint8_t tos)
83
{
84
NS_LOG_FUNCTION
(
this
<<
static_cast<
uint32_t
>
(tos));
85
m_tos
= tos;
86
}
87
88
void
89
Ipv4Header::SetDscp
(
DscpType
dscp)
90
{
91
NS_LOG_FUNCTION
(
this
<< dscp);
92
m_tos
&= 0x3;
// Clear out the DSCP part, retain 2 bits of ECN
93
m_tos
|= (dscp << 2);
94
}
95
96
void
97
Ipv4Header::SetEcn
(
EcnType
ecn)
98
{
99
NS_LOG_FUNCTION
(
this
<< ecn);
100
m_tos
&= 0xFC;
// Clear out the ECN part, retain 6 bits of DSCP
101
m_tos
|= ecn;
102
}
103
104
Ipv4Header::DscpType
105
Ipv4Header::GetDscp
(
void
)
const
106
{
107
NS_LOG_FUNCTION
(
this
);
108
// Extract only first 6 bits of TOS byte, i.e 0xFC
109
return
DscpType
((
m_tos
& 0xFC) >> 2);
110
}
111
112
std::string
113
Ipv4Header::DscpTypeToString
(
DscpType
dscp)
const
114
{
115
NS_LOG_FUNCTION
(
this
<< dscp);
116
switch
(dscp)
117
{
118
case
DscpDefault
:
119
return
"Default"
;
120
case
DSCP_CS1
:
121
return
"CS1"
;
122
case
DSCP_AF11
:
123
return
"AF11"
;
124
case
DSCP_AF12
:
125
return
"AF12"
;
126
case
DSCP_AF13
:
127
return
"AF13"
;
128
case
DSCP_CS2
:
129
return
"CS2"
;
130
case
DSCP_AF21
:
131
return
"AF21"
;
132
case
DSCP_AF22
:
133
return
"AF22"
;
134
case
DSCP_AF23
:
135
return
"AF23"
;
136
case
DSCP_CS3
:
137
return
"CS3"
;
138
case
DSCP_AF31
:
139
return
"AF31"
;
140
case
DSCP_AF32
:
141
return
"AF32"
;
142
case
DSCP_AF33
:
143
return
"AF33"
;
144
case
DSCP_CS4
:
145
return
"CS4"
;
146
case
DSCP_AF41
:
147
return
"AF41"
;
148
case
DSCP_AF42
:
149
return
"AF42"
;
150
case
DSCP_AF43
:
151
return
"AF43"
;
152
case
DSCP_CS5
:
153
return
"CS5"
;
154
case
DSCP_EF
:
155
return
"EF"
;
156
case
DSCP_CS6
:
157
return
"CS6"
;
158
case
DSCP_CS7
:
159
return
"CS7"
;
160
default
:
161
return
"Unrecognized DSCP"
;
162
};
163
}
164
165
166
Ipv4Header::EcnType
167
Ipv4Header::GetEcn
(
void
)
const
168
{
169
NS_LOG_FUNCTION
(
this
);
170
// Extract only last 2 bits of TOS byte, i.e 0x3
171
return
EcnType
(
m_tos
& 0x3);
172
}
173
174
std::string
175
Ipv4Header::EcnTypeToString
(
EcnType
ecn)
const
176
{
177
NS_LOG_FUNCTION
(
this
<< ecn);
178
switch
(ecn)
179
{
180
case
ECN_NotECT
:
181
return
"Not-ECT"
;
182
case
ECN_ECT1
:
183
return
"ECT (1)"
;
184
case
ECN_ECT0
:
185
return
"ECT (0)"
;
186
case
ECN_CE
:
187
return
"CE"
;
188
default
:
189
return
"Unknown ECN"
;
190
};
191
}
192
193
uint8_t
194
Ipv4Header::GetTos
(
void
)
const
195
{
196
NS_LOG_FUNCTION
(
this
);
197
return
m_tos
;
198
}
199
void
200
Ipv4Header::SetMoreFragments
(
void
)
201
{
202
NS_LOG_FUNCTION
(
this
);
203
m_flags
|=
MORE_FRAGMENTS
;
204
}
205
void
206
Ipv4Header::SetLastFragment
(
void
)
207
{
208
NS_LOG_FUNCTION
(
this
);
209
m_flags
&= ~MORE_FRAGMENTS;
210
}
211
bool
212
Ipv4Header::IsLastFragment
(
void
)
const
213
{
214
NS_LOG_FUNCTION
(
this
);
215
return
!(
m_flags
&
MORE_FRAGMENTS
);
216
}
217
218
void
219
Ipv4Header::SetDontFragment
(
void
)
220
{
221
NS_LOG_FUNCTION
(
this
);
222
m_flags
|=
DONT_FRAGMENT
;
223
}
224
void
225
Ipv4Header::SetMayFragment
(
void
)
226
{
227
NS_LOG_FUNCTION
(
this
);
228
m_flags
&= ~DONT_FRAGMENT;
229
}
230
bool
231
Ipv4Header::IsDontFragment
(
void
)
const
232
{
233
NS_LOG_FUNCTION
(
this
);
234
return
(
m_flags
&
DONT_FRAGMENT
);
235
}
236
237
void
238
Ipv4Header::SetFragmentOffset
(uint16_t offsetBytes)
239
{
240
NS_LOG_FUNCTION
(
this
<< offsetBytes);
241
// check if the user is trying to set an invalid offset
242
NS_ABORT_MSG_IF
((offsetBytes & 0x7),
"offsetBytes must be multiple of 8 bytes"
);
243
m_fragmentOffset
= offsetBytes;
244
}
245
uint16_t
246
Ipv4Header::GetFragmentOffset
(
void
)
const
247
{
248
NS_LOG_FUNCTION
(
this
);
249
// -fstrict-overflow sensitive, see bug 1868
250
if
(
m_fragmentOffset
+
m_payloadSize
> 65535 - 5*4 )
251
{
252
NS_LOG_WARN
(
"Fragment will exceed the maximum packet size once reassembled"
);
253
}
254
255
return
m_fragmentOffset
;
256
}
257
258
void
259
Ipv4Header::SetTtl
(uint8_t ttl)
260
{
261
NS_LOG_FUNCTION
(
this
<<
static_cast<
uint32_t
>
(ttl));
262
m_ttl
= ttl;
263
}
264
uint8_t
265
Ipv4Header::GetTtl
(
void
)
const
266
{
267
NS_LOG_FUNCTION
(
this
);
268
return
m_ttl
;
269
}
270
271
uint8_t
272
Ipv4Header::GetProtocol
(
void
)
const
273
{
274
NS_LOG_FUNCTION
(
this
);
275
return
m_protocol
;
276
}
277
void
278
Ipv4Header::SetProtocol
(uint8_t protocol)
279
{
280
NS_LOG_FUNCTION
(
this
<<
static_cast<
uint32_t
>
(protocol));
281
m_protocol
= protocol;
282
}
283
284
void
285
Ipv4Header::SetSource
(
Ipv4Address
source)
286
{
287
NS_LOG_FUNCTION
(
this
<< source);
288
m_source
= source;
289
}
290
Ipv4Address
291
Ipv4Header::GetSource
(
void
)
const
292
{
293
NS_LOG_FUNCTION
(
this
);
294
return
m_source
;
295
}
296
297
void
298
Ipv4Header::SetDestination
(
Ipv4Address
dst)
299
{
300
NS_LOG_FUNCTION
(
this
<< dst);
301
m_destination
= dst;
302
}
303
Ipv4Address
304
Ipv4Header::GetDestination
(
void
)
const
305
{
306
NS_LOG_FUNCTION
(
this
);
307
return
m_destination
;
308
}
309
310
311
bool
312
Ipv4Header::IsChecksumOk
(
void
)
const
313
{
314
NS_LOG_FUNCTION
(
this
);
315
return
m_goodChecksum
;
316
}
317
318
TypeId
319
Ipv4Header::GetTypeId
(
void
)
320
{
321
static
TypeId
tid =
TypeId
(
"ns3::Ipv4Header"
)
322
.
SetParent
<
Header
> ()
323
.SetGroupName (
"Internet"
)
324
.AddConstructor<
Ipv4Header
> ()
325
;
326
return
tid;
327
}
328
TypeId
329
Ipv4Header::GetInstanceTypeId
(
void
)
const
330
{
331
NS_LOG_FUNCTION
(
this
);
332
return
GetTypeId
();
333
}
334
void
335
Ipv4Header::Print
(std::ostream &os)
const
336
{
337
NS_LOG_FUNCTION
(
this
<< &os);
338
// ipv4, right ?
339
std::string flags;
340
if
(
m_flags
== 0)
341
{
342
flags =
"none"
;
343
}
344
else
if
((
m_flags
&
MORE_FRAGMENTS
) &&
345
(
m_flags
&
DONT_FRAGMENT
))
346
{
347
flags =
"MF|DF"
;
348
}
349
else
if
(
m_flags
&
DONT_FRAGMENT
)
350
{
351
flags =
"DF"
;
352
}
353
else
if
(
m_flags
&
MORE_FRAGMENTS
)
354
{
355
flags =
"MF"
;
356
}
357
else
358
{
359
flags =
"XX"
;
360
}
361
os <<
"tos 0x"
<< std::hex <<
m_tos
<< std::dec <<
" "
362
<<
"DSCP "
<<
DscpTypeToString
(
GetDscp
()) <<
" "
363
<<
"ECN "
<<
EcnTypeToString
(
GetEcn
()) <<
" "
364
<<
"ttl "
<<
m_ttl
<<
" "
365
<<
"id "
<<
m_identification
<<
" "
366
<<
"protocol "
<<
m_protocol
<<
" "
367
<<
"offset (bytes) "
<<
m_fragmentOffset
<<
" "
368
<<
"flags ["
<< flags <<
"] "
369
<<
"length: "
<< (
m_payloadSize
+ 5 * 4)
370
<<
" "
371
<<
m_source
<<
" > "
<<
m_destination
372
;
373
}
374
uint32_t
375
Ipv4Header::GetSerializedSize
(
void
)
const
376
{
377
NS_LOG_FUNCTION
(
this
);
378
//return 5 * 4;
379
return
m_headerSize
;
380
}
381
382
void
383
Ipv4Header::Serialize
(
Buffer::Iterator
start
)
const
384
{
385
NS_LOG_FUNCTION
(
this
<< &
start
);
386
Buffer::Iterator
i =
start
;
387
388
uint8_t verIhl = (4 << 4) | (5);
389
i.
WriteU8
(verIhl);
390
i.
WriteU8
(
m_tos
);
391
i.
WriteHtonU16
(
m_payloadSize
+ 5*4);
392
i.
WriteHtonU16
(
m_identification
);
393
uint32_t
fragmentOffset =
m_fragmentOffset
/ 8;
394
uint8_t flagsFrag = (fragmentOffset >> 8) & 0x1f;
395
if
(
m_flags
&
DONT_FRAGMENT
)
396
{
397
flagsFrag |= (1<<6);
398
}
399
if
(
m_flags
&
MORE_FRAGMENTS
)
400
{
401
flagsFrag |= (1<<5);
402
}
403
i.
WriteU8
(flagsFrag);
404
uint8_t frag = fragmentOffset & 0xff;
405
i.
WriteU8
(frag);
406
i.
WriteU8
(
m_ttl
);
407
i.
WriteU8
(
m_protocol
);
408
i.
WriteHtonU16
(0);
409
i.
WriteHtonU32
(
m_source
.
Get
());
410
i.
WriteHtonU32
(
m_destination
.
Get
());
411
412
if
(
m_calcChecksum
)
413
{
414
i =
start
;
415
uint16_t checksum = i.
CalculateIpChecksum
(20);
416
NS_LOG_LOGIC
(
"checksum="
<<checksum);
417
i =
start
;
418
i.
Next
(10);
419
i.
WriteU16
(checksum);
420
}
421
}
422
uint32_t
423
Ipv4Header::Deserialize
(
Buffer::Iterator
start
)
424
{
425
NS_LOG_FUNCTION
(
this
<< &
start
);
426
Buffer::Iterator
i =
start
;
427
428
uint8_t verIhl = i.
ReadU8
();
429
uint8_t ihl = verIhl & 0x0f;
430
uint16_t headerSize = ihl * 4;
431
432
if
((verIhl >> 4) != 4)
433
{
434
NS_LOG_WARN
(
"Trying to decode a non-IPv4 header, refusing to do it."
);
435
return
0;
436
}
437
438
m_tos
= i.
ReadU8
();
439
uint16_t size = i.
ReadNtohU16
();
440
m_payloadSize
= size - headerSize;
441
m_identification
= i.
ReadNtohU16
();
442
uint8_t flags = i.
ReadU8
();
443
m_flags
= 0;
444
if
(flags & (1<<6))
445
{
446
m_flags
|=
DONT_FRAGMENT
;
447
}
448
if
(flags & (1<<5))
449
{
450
m_flags
|=
MORE_FRAGMENTS
;
451
}
452
i.
Prev
();
453
m_fragmentOffset
= i.
ReadU8
() & 0x1f;
454
m_fragmentOffset
<<= 8;
455
m_fragmentOffset
|= i.
ReadU8
();
456
m_fragmentOffset
<<= 3;
457
m_ttl
= i.
ReadU8
();
458
m_protocol
= i.
ReadU8
();
459
m_checksum
= i.
ReadU16
();
460
/* i.Next (2); // checksum */
461
m_source
.
Set
(i.
ReadNtohU32
());
462
m_destination
.
Set
(i.
ReadNtohU32
());
463
m_headerSize
= headerSize;
464
465
if
(
m_calcChecksum
)
466
{
467
i =
start
;
468
uint16_t checksum = i.
CalculateIpChecksum
(headerSize);
469
NS_LOG_LOGIC
(
"checksum="
<<checksum);
470
471
m_goodChecksum
= (checksum == 0);
472
}
473
return
GetSerializedSize
();
474
}
475
476
}
// namespace ns3
ns3::Buffer::Iterator
iterator in a Buffer instance
Definition:
buffer.h:99
ns3::Buffer::Iterator::ReadNtohU16
uint16_t ReadNtohU16(void)
Definition:
buffer.h:946
ns3::Buffer::Iterator::CalculateIpChecksum
uint16_t CalculateIpChecksum(uint16_t size)
Calculate the checksum.
Definition:
buffer.cc:1134
ns3::Buffer::Iterator::WriteU8
void WriteU8(uint8_t data)
Definition:
buffer.h:869
ns3::Buffer::Iterator::Next
void Next(void)
go forward by one byte
Definition:
buffer.h:845
ns3::Buffer::Iterator::WriteU16
void WriteU16(uint16_t data)
Definition:
buffer.cc:871
ns3::Buffer::Iterator::ReadU16
uint16_t ReadU16(void)
Definition:
buffer.h:1029
ns3::Buffer::Iterator::ReadU8
uint8_t ReadU8(void)
Definition:
buffer.h:1021
ns3::Buffer::Iterator::WriteHtonU16
void WriteHtonU16(uint16_t data)
Definition:
buffer.h:905
ns3::Buffer::Iterator::Prev
void Prev(void)
go backward by one byte
Definition:
buffer.h:851
ns3::Buffer::Iterator::WriteHtonU32
void WriteHtonU32(uint32_t data)
Definition:
buffer.h:924
ns3::Buffer::Iterator::ReadNtohU32
uint32_t ReadNtohU32(void)
Definition:
buffer.h:970
ns3::Header
Protocol header serialization and deserialization.
Definition:
header.h:43
ns3::Ipv4Address
Ipv4 addresses are stored in host order in this class.
Definition:
ipv4-address.h:41
ns3::Ipv4Address::Get
uint32_t Get(void) const
Get the host-order 32-bit IP address.
Definition:
ipv4-address.cc:214
ns3::Ipv4Address::Set
void Set(uint32_t address)
input address is in host order.
Definition:
ipv4-address.cc:220
ns3::Ipv4Header
Packet header for IPv4.
Definition:
ipv4-header.h:34
ns3::Ipv4Header::GetDscp
DscpType GetDscp(void) const
Definition:
ipv4-header.cc:105
ns3::Ipv4Header::SetMoreFragments
void SetMoreFragments(void)
This packet is not the last packet of a fragmented ipv4 packet.
Definition:
ipv4-header.cc:200
ns3::Ipv4Header::m_source
Ipv4Address m_source
source address
Definition:
ipv4-header.h:258
ns3::Ipv4Header::SetDestination
void SetDestination(Ipv4Address destination)
Definition:
ipv4-header.cc:298
ns3::Ipv4Header::GetTypeId
static TypeId GetTypeId(void)
Get the type ID.
Definition:
ipv4-header.cc:319
ns3::Ipv4Header::m_fragmentOffset
uint16_t m_fragmentOffset
Fragment offset.
Definition:
ipv4-header.h:257
ns3::Ipv4Header::EcnTypeToString
std::string EcnTypeToString(EcnType ecn) const
Definition:
ipv4-header.cc:175
ns3::Ipv4Header::SetLastFragment
void SetLastFragment(void)
This packet is the last packet of a fragmented ipv4 packet.
Definition:
ipv4-header.cc:206
ns3::Ipv4Header::MORE_FRAGMENTS
@ MORE_FRAGMENTS
Definition:
ipv4-header.h:246
ns3::Ipv4Header::DONT_FRAGMENT
@ DONT_FRAGMENT
Definition:
ipv4-header.h:245
ns3::Ipv4Header::GetSerializedSize
virtual uint32_t GetSerializedSize(void) const
Definition:
ipv4-header.cc:375
ns3::Ipv4Header::m_ttl
uint32_t m_ttl
TTL.
Definition:
ipv4-header.h:254
ns3::Ipv4Header::m_protocol
uint32_t m_protocol
Protocol.
Definition:
ipv4-header.h:255
ns3::Ipv4Header::SetPayloadSize
void SetPayloadSize(uint16_t size)
Definition:
ipv4-header.cc:56
ns3::Ipv4Header::Print
virtual void Print(std::ostream &os) const
Definition:
ipv4-header.cc:335
ns3::Ipv4Header::Deserialize
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition:
ipv4-header.cc:423
ns3::Ipv4Header::m_identification
uint16_t m_identification
identification
Definition:
ipv4-header.h:252
ns3::Ipv4Header::GetIdentification
uint16_t GetIdentification(void) const
Definition:
ipv4-header.cc:69
ns3::Ipv4Header::GetFragmentOffset
uint16_t GetFragmentOffset(void) const
Definition:
ipv4-header.cc:246
ns3::Ipv4Header::GetTos
uint8_t GetTos(void) const
Definition:
ipv4-header.cc:194
ns3::Ipv4Header::GetSource
Ipv4Address GetSource(void) const
Definition:
ipv4-header.cc:291
ns3::Ipv4Header::m_payloadSize
uint16_t m_payloadSize
payload size
Definition:
ipv4-header.h:251
ns3::Ipv4Header::SetTtl
void SetTtl(uint8_t ttl)
Definition:
ipv4-header.cc:259
ns3::Ipv4Header::IsDontFragment
bool IsDontFragment(void) const
Definition:
ipv4-header.cc:231
ns3::Ipv4Header::m_tos
uint32_t m_tos
TOS, also used as DSCP + ECN value.
Definition:
ipv4-header.h:253
ns3::Ipv4Header::m_goodChecksum
bool m_goodChecksum
true if checksum is correct
Definition:
ipv4-header.h:261
ns3::Ipv4Header::SetMayFragment
void SetMayFragment(void)
If you need to fragment this packet, you can do it.
Definition:
ipv4-header.cc:225
ns3::Ipv4Header::SetDscp
void SetDscp(DscpType dscp)
Set DSCP Field.
Definition:
ipv4-header.cc:89
ns3::Ipv4Header::SetDontFragment
void SetDontFragment(void)
Don't fragment this packet: if you need to anyway, drop it.
Definition:
ipv4-header.cc:219
ns3::Ipv4Header::GetDestination
Ipv4Address GetDestination(void) const
Definition:
ipv4-header.cc:304
ns3::Ipv4Header::m_destination
Ipv4Address m_destination
destination address
Definition:
ipv4-header.h:259
ns3::Ipv4Header::GetEcn
EcnType GetEcn(void) const
Definition:
ipv4-header.cc:167
ns3::Ipv4Header::EnableChecksum
void EnableChecksum(void)
Enable checksum calculation for this header.
Definition:
ipv4-header.cc:49
ns3::Ipv4Header::EcnType
EcnType
ECN Type defined in RFC 3168
Definition:
ipv4-header.h:113
ns3::Ipv4Header::ECN_ECT0
@ ECN_ECT0
Definition:
ipv4-header.h:117
ns3::Ipv4Header::ECN_NotECT
@ ECN_NotECT
Definition:
ipv4-header.h:115
ns3::Ipv4Header::ECN_ECT1
@ ECN_ECT1
Definition:
ipv4-header.h:116
ns3::Ipv4Header::ECN_CE
@ ECN_CE
Definition:
ipv4-header.h:118
ns3::Ipv4Header::m_checksum
uint16_t m_checksum
checksum
Definition:
ipv4-header.h:260
ns3::Ipv4Header::m_headerSize
uint16_t m_headerSize
IP header size.
Definition:
ipv4-header.h:262
ns3::Ipv4Header::SetEcn
void SetEcn(EcnType ecn)
Set ECN Field.
Definition:
ipv4-header.cc:97
ns3::Ipv4Header::DscpType
DscpType
DiffServ codepoints.
Definition:
ipv4-header.h:71
ns3::Ipv4Header::DSCP_AF23
@ DSCP_AF23
Definition:
ipv4-header.h:83
ns3::Ipv4Header::DSCP_CS2
@ DSCP_CS2
Definition:
ipv4-header.h:80
ns3::Ipv4Header::DscpDefault
@ DscpDefault
Definition:
ipv4-header.h:72
ns3::Ipv4Header::DSCP_AF31
@ DSCP_AF31
Definition:
ipv4-header.h:86
ns3::Ipv4Header::DSCP_AF32
@ DSCP_AF32
Definition:
ipv4-header.h:87
ns3::Ipv4Header::DSCP_AF13
@ DSCP_AF13
Definition:
ipv4-header.h:78
ns3::Ipv4Header::DSCP_AF22
@ DSCP_AF22
Definition:
ipv4-header.h:82
ns3::Ipv4Header::DSCP_AF43
@ DSCP_AF43
Definition:
ipv4-header.h:93
ns3::Ipv4Header::DSCP_AF11
@ DSCP_AF11
Definition:
ipv4-header.h:76
ns3::Ipv4Header::DSCP_CS3
@ DSCP_CS3
Definition:
ipv4-header.h:85
ns3::Ipv4Header::DSCP_AF42
@ DSCP_AF42
Definition:
ipv4-header.h:92
ns3::Ipv4Header::DSCP_AF21
@ DSCP_AF21
Definition:
ipv4-header.h:81
ns3::Ipv4Header::DSCP_AF33
@ DSCP_AF33
Definition:
ipv4-header.h:88
ns3::Ipv4Header::DSCP_AF12
@ DSCP_AF12
Definition:
ipv4-header.h:77
ns3::Ipv4Header::DSCP_CS5
@ DSCP_CS5
Definition:
ipv4-header.h:95
ns3::Ipv4Header::DSCP_EF
@ DSCP_EF
Definition:
ipv4-header.h:96
ns3::Ipv4Header::DSCP_CS4
@ DSCP_CS4
Definition:
ipv4-header.h:90
ns3::Ipv4Header::DSCP_CS7
@ DSCP_CS7
Definition:
ipv4-header.h:99
ns3::Ipv4Header::DSCP_CS6
@ DSCP_CS6
Definition:
ipv4-header.h:98
ns3::Ipv4Header::DSCP_CS1
@ DSCP_CS1
Definition:
ipv4-header.h:75
ns3::Ipv4Header::DSCP_AF41
@ DSCP_AF41
Definition:
ipv4-header.h:91
ns3::Ipv4Header::GetProtocol
uint8_t GetProtocol(void) const
Definition:
ipv4-header.cc:272
ns3::Ipv4Header::DscpTypeToString
std::string DscpTypeToString(DscpType dscp) const
Definition:
ipv4-header.cc:113
ns3::Ipv4Header::m_flags
uint32_t m_flags
flags
Definition:
ipv4-header.h:256
ns3::Ipv4Header::GetPayloadSize
uint16_t GetPayloadSize(void) const
Definition:
ipv4-header.cc:62
ns3::Ipv4Header::SetProtocol
void SetProtocol(uint8_t num)
Definition:
ipv4-header.cc:278
ns3::Ipv4Header::SetFragmentOffset
void SetFragmentOffset(uint16_t offsetBytes)
The offset is measured in bytes for the packet start.
Definition:
ipv4-header.cc:238
ns3::Ipv4Header::SetIdentification
void SetIdentification(uint16_t identification)
Definition:
ipv4-header.cc:75
ns3::Ipv4Header::IsChecksumOk
bool IsChecksumOk(void) const
Definition:
ipv4-header.cc:312
ns3::Ipv4Header::IsLastFragment
bool IsLastFragment(void) const
Definition:
ipv4-header.cc:212
ns3::Ipv4Header::GetInstanceTypeId
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition:
ipv4-header.cc:329
ns3::Ipv4Header::Serialize
virtual void Serialize(Buffer::Iterator start) const
Definition:
ipv4-header.cc:383
ns3::Ipv4Header::SetTos
void SetTos(uint8_t tos)
Definition:
ipv4-header.cc:82
ns3::Ipv4Header::SetSource
void SetSource(Ipv4Address source)
Definition:
ipv4-header.cc:285
ns3::Ipv4Header::Ipv4Header
Ipv4Header()
Construct a null IPv4 header.
Definition:
ipv4-header.cc:33
ns3::Ipv4Header::m_calcChecksum
bool m_calcChecksum
true if the checksum must be calculated
Definition:
ipv4-header.h:249
ns3::Ipv4Header::GetTtl
uint8_t GetTtl(void) const
Definition:
ipv4-header.cc:265
ns3::TypeId
a unique identifier for an interface.
Definition:
type-id.h:59
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition:
type-id.cc:922
uint32_t
NS_ABORT_MSG_IF
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition:
abort.h:108
NS_LOG_COMPONENT_DEFINE
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition:
log.h:205
NS_LOG_LOGIC
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition:
log.h:289
NS_LOG_FUNCTION
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Definition:
log-macros-enabled.h:244
NS_LOG_WARN
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition:
log.h:265
NS_OBJECT_ENSURE_REGISTERED
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition:
object-base.h:45
ipv4-header.h
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
visualizer.core.start
def start()
Definition:
core.py:1853
src
internet
model
ipv4-header.cc
Generated on Sun May 1 2022 12:01:30 for ns-3 by
1.9.3