A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
lr-wpan-mac-header.cc
Go to the documentation of this file.
1
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2011 The Boeing Company
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: kwong yin <kwong-sang.yin@boeing.com>
19
*/
20
#include "
lr-wpan-mac-header.h
"
21
#include <ns3/address-utils.h>
22
23
namespace
ns3
{
24
25
NS_OBJECT_ENSURE_REGISTERED
(LrWpanMacHeader);
26
27
// TODO: Test Compressed PAN Id, Security Enabled, different size Key
28
29
LrWpanMacHeader::LrWpanMacHeader
()
30
{
31
SetType
(
LRWPAN_MAC_DATA
);
// Assume Data frame
32
SetSecDisable
();
// Assume there is No Aux Sec but
33
SetNoFrmPend
();
// No Frame Pending
34
SetNoAckReq
();
// No Ack Frame will be expected from recipient
35
SetNoPanIdComp
();
// No PAN Id Compression since no addresses
36
SetFrmCtrlRes
(0);
// Initialize the 3 reserved bits to 0
37
SetDstAddrMode
(
NOADDR
);
// Assume there will be no src and dst address
38
SetSrcAddrMode
(
NOADDR
);
39
SetFrameVer
(1);
//Indicates an IEEE 802.15.4 frame
40
}
41
42
43
LrWpanMacHeader::LrWpanMacHeader
(
enum
LrWpanMacType
wpanMacType,
44
uint8_t seqNum)
45
{
46
SetType
(wpanMacType);
47
SetSeqNum
(seqNum);
48
SetSecDisable
();
// Assume there is No Aux Sec but
49
SetNoFrmPend
();
// No Frame Pending
50
SetNoAckReq
();
// No Ack Frame will be expected from recipient
51
SetNoPanIdComp
();
// No PAN Id Compression since no addresses
52
SetFrmCtrlRes
(0);
// Initialize the 3 reserved bits to 0
53
SetDstAddrMode
(
NOADDR
);
// Assume there will be no src and dst address
54
SetSrcAddrMode
(
NOADDR
);
55
SetFrameVer
(1);
//Indicates an IEEE 802.15.4 frame
56
}
57
58
59
LrWpanMacHeader::~LrWpanMacHeader
()
60
{
61
}
62
63
64
enum
LrWpanMacHeader::LrWpanMacType
65
LrWpanMacHeader::GetType
(
void
)
const
66
{
67
switch
(
m_fctrlFrmType
)
68
{
69
case
0:
70
return
LRWPAN_MAC_BEACON
;
71
break
;
72
case
1:
73
return
LRWPAN_MAC_DATA
;
74
break
;
75
case
2:
76
return
LRWPAN_MAC_ACKNOWLEDGMENT
;
77
break
;
78
case
3:
79
return
LRWPAN_MAC_COMMAND
;
80
break
;
81
default
:
82
return
LRWPAN_MAC_RESERVED
;
83
}
84
}
85
86
87
88
uint16_t
89
LrWpanMacHeader::GetFrameControl
(
void
)
const
90
{
91
uint16_t val = 0;
92
93
val =
m_fctrlFrmType
& (0x07);
// Bit 0-2
94
val |= (
m_fctrlSecU
<< 3) & (0x01 << 3);
// Bit 3
95
val |= (
m_fctrlFrmPending
<< 4) & (0x01 << 4);
// Bit 4
96
val |= (
m_fctrlAckReq
<< 5) & (0x01 << 5);
// Bit 5
97
val |= (
m_fctrlPanIdComp
<< 6) & (0x01 << 6);
// Bit 6
98
val |= (
m_fctrlReserved
<< 7) & (0x07 << 7);
// Bit 7-9
99
val |= (
m_fctrlDstAddrMode
<< 10) & (0x03 << 10);
// Bit 10-11
100
val |= (
m_fctrlFrmVer
<< 12) & (0x03 << 12);
// Bit 12-13
101
val |= (
m_fctrlSrcAddrMode
<< 14) & (0x03 << 14);
// Bit 14-15
102
return
val;
103
104
}
105
106
bool
107
LrWpanMacHeader::IsSecEnable
(
void
)
const
108
{
109
return
(
m_fctrlSecU
== 1);
110
}
111
112
bool
113
LrWpanMacHeader::IsFrmPend
(
void
)
const
114
{
115
return
(
m_fctrlFrmPending
== 1);
116
}
117
118
bool
119
LrWpanMacHeader::IsAckReq
(
void
)
const
120
{
121
return
(
m_fctrlAckReq
== 1);
122
}
123
124
bool
125
LrWpanMacHeader::IsPanIdComp
(
void
)
const
126
{
127
return
(
m_fctrlPanIdComp
== 1);
128
}
129
130
uint8_t
131
LrWpanMacHeader::GetFrmCtrlRes
(
void
)
const
132
{
133
return
(
m_fctrlReserved
);
134
}
135
136
uint8_t
137
LrWpanMacHeader::GetDstAddrMode
(
void
)
const
138
{
139
return
m_fctrlDstAddrMode
;
140
}
141
142
uint8_t
143
LrWpanMacHeader::GetFrameVer
(
void
)
const
144
{
145
return
m_fctrlFrmVer
;
146
}
147
148
uint8_t
149
LrWpanMacHeader::GetSrcAddrMode
(
void
)
const
150
{
151
return
m_fctrlSrcAddrMode
;
152
}
153
154
155
uint8_t
156
LrWpanMacHeader::GetSeqNum
(
void
)
const
157
{
158
return
(
m_SeqNum
);
159
}
160
161
162
uint16_t
163
LrWpanMacHeader::GetDstPanId
(
void
)
const
164
{
165
return
(
m_addrDstPanId
);
166
}
167
168
169
Mac16Address
170
LrWpanMacHeader::GetShortDstAddr
(
void
)
const
171
{
172
return
(
m_addrShortDstAddr
);
173
}
174
Mac64Address
175
LrWpanMacHeader::GetExtDstAddr
(
void
)
const
176
{
177
return
(
m_addrExtDstAddr
);
178
}
179
180
uint16_t
181
LrWpanMacHeader::GetSrcPanId
(
void
)
const
182
{
183
return
(
m_addrSrcPanId
);
184
}
185
186
187
188
Mac16Address
189
LrWpanMacHeader::GetShortSrcAddr
(
void
)
const
190
{
191
return
(
m_addrShortSrcAddr
);
192
}
193
Mac64Address
194
LrWpanMacHeader::GetExtSrcAddr
(
void
)
const
195
{
196
return
(
m_addrExtSrcAddr
);
197
}
198
199
200
uint8_t
201
LrWpanMacHeader::GetSecControl
(
void
)
const
202
{
203
uint8_t val = 0;
204
205
val =
m_secctrlSecLevel
& (0x7);
// Bit 0-2
206
val |= (
m_secctrlKeyIdMode
<< 3) & (0x3 << 3);
// Bit 3-4
207
val |= (
m_secctrlReserved
<< 5) & (0x7 << 5);
// Bit 5-7
208
209
return
(val);
210
}
211
212
uint32_t
213
LrWpanMacHeader::GetFrmCounter
(
void
)
const
214
{
215
return
(
m_auxFrmCntr
);
216
}
217
218
uint8_t
219
LrWpanMacHeader::GetSecLevel
(
void
)
const
220
{
221
return
(
m_secctrlSecLevel
);
222
}
223
224
uint8_t
225
LrWpanMacHeader::GetKeyIdMode
(
void
)
const
226
{
227
return
(
m_secctrlKeyIdMode
);
228
}
229
230
uint8_t
231
LrWpanMacHeader::GetSecCtrlReserved
(
void
)
const
232
{
233
return
(
m_secctrlReserved
);
234
}
235
236
uint32_t
237
LrWpanMacHeader::GetKeyIdSrc32
(
void
)
const
238
{
239
return
(
m_auxKeyIdKeySrc32
);
240
}
241
242
uint64_t
243
LrWpanMacHeader::GetKeyIdSrc64
(
void
)
const
244
{
245
246
return
(
m_auxKeyIdKeySrc64
);
247
}
248
249
uint8_t
250
LrWpanMacHeader::GetKeyIdIndex
(
void
)
const
251
{
252
return
(
m_auxKeyIdKeyIndex
);
253
}
254
255
bool
256
LrWpanMacHeader::IsBeacon
(
void
)
const
257
{
258
return
(
m_fctrlFrmType
==
LRWPAN_MAC_BEACON
);
259
}
260
261
bool
262
LrWpanMacHeader::IsData
(
void
)
const
263
{
264
return
(
m_fctrlFrmType
==
LRWPAN_MAC_DATA
);
265
}
266
267
bool
268
LrWpanMacHeader::IsAcknowledgment
(
void
)
const
269
{
270
return
(
m_fctrlFrmType
==
LRWPAN_MAC_ACKNOWLEDGMENT
);
271
}
272
273
bool
274
LrWpanMacHeader::IsCommand
(
void
)
const
275
{
276
return
(
m_fctrlFrmType
==
LRWPAN_MAC_COMMAND
);
277
}
278
279
280
281
void
282
LrWpanMacHeader::SetType
(
enum
LrWpanMacType
wpanMacType)
283
{
284
m_fctrlFrmType
= wpanMacType;
285
}
286
287
288
void
289
LrWpanMacHeader::SetFrameControl
(uint16_t frameControl)
290
{
291
m_fctrlFrmType
= (frameControl) & (0x07);
// Bit 0-2
292
m_fctrlSecU
= (frameControl >> 3) & (0x01);
// Bit 3
293
m_fctrlFrmPending
= (frameControl >> 4) & (0x01);
// Bit 4
294
m_fctrlAckReq
= (frameControl >> 5) & (0x01);
// Bit 5
295
m_fctrlPanIdComp
= (frameControl >> 6) & (0x01);
// Bit 6
296
m_fctrlReserved
= (frameControl >> 7) & (0x07);
// Bit 7-9
297
m_fctrlDstAddrMode
= (frameControl >> 10) & (0x03);
// Bit 10-11
298
m_fctrlFrmVer
= (frameControl >> 12) & (0x03);
// Bit 12-13
299
m_fctrlSrcAddrMode
= (frameControl >> 14) & (0x03);
// Bit 14-15
300
}
301
302
303
void
304
LrWpanMacHeader::SetSecEnable
(
void
)
305
{
306
m_fctrlSecU
= 1;
307
}
308
309
310
void
311
LrWpanMacHeader::SetSecDisable
(
void
)
312
{
313
m_fctrlSecU
= 0;
314
}
315
316
317
void
318
LrWpanMacHeader::SetFrmPend
(
void
)
319
{
320
m_fctrlFrmPending
= 1;
321
}
322
323
324
void
325
LrWpanMacHeader::SetNoFrmPend
(
void
)
326
{
327
m_fctrlFrmPending
= 0;
328
}
329
330
331
void
332
LrWpanMacHeader::SetAckReq
(
void
)
333
{
334
m_fctrlAckReq
= 1;
335
}
336
337
338
void
339
LrWpanMacHeader::SetNoAckReq
(
void
)
340
{
341
m_fctrlAckReq
= 0;
342
}
343
344
345
void
346
LrWpanMacHeader::SetPanIdComp
(
void
)
347
{
348
m_fctrlPanIdComp
= 1;
349
}
350
351
352
void
LrWpanMacHeader::SetNoPanIdComp
(
void
)
353
{
354
m_fctrlPanIdComp
= 0;
355
}
356
357
void
358
LrWpanMacHeader::SetFrmCtrlRes
(uint8_t res)
359
{
360
m_fctrlReserved
= res;
361
}
362
363
void
364
LrWpanMacHeader::SetDstAddrMode
(uint8_t addrMode)
365
{
366
m_fctrlDstAddrMode
= addrMode;
367
}
368
369
370
void
371
LrWpanMacHeader::SetFrameVer
(uint8_t ver)
372
{
373
m_fctrlFrmVer
= ver;
374
}
375
376
377
void
378
LrWpanMacHeader::SetSrcAddrMode
(uint8_t addrMode)
379
{
380
m_fctrlSrcAddrMode
= addrMode;
381
}
382
383
384
void
385
LrWpanMacHeader::SetSeqNum
(uint8_t seqNum)
386
{
387
m_SeqNum
= seqNum;
388
}
389
390
void
391
LrWpanMacHeader::SetSrcAddrFields
(uint16_t panId,
392
Mac16Address
addr)
393
{
394
m_addrSrcPanId
= panId;
395
m_addrShortSrcAddr
= addr;
396
}
397
398
void
399
LrWpanMacHeader::SetSrcAddrFields
(uint16_t panId,
400
Mac64Address
addr)
401
{
402
m_addrSrcPanId
= panId;
403
m_addrExtSrcAddr
= addr;
404
}
405
406
void
407
LrWpanMacHeader::SetDstAddrFields
(uint16_t panId,
408
Mac16Address
addr)
409
{
410
m_addrDstPanId
= panId;
411
m_addrShortDstAddr
= addr;
412
}
413
void
414
LrWpanMacHeader::SetDstAddrFields
(uint16_t panId,
415
Mac64Address
addr)
416
{
417
m_addrDstPanId
= panId;
418
m_addrExtDstAddr
= addr;
419
}
420
void
421
LrWpanMacHeader::SetSecControl
(uint8_t secControl)
422
{
423
m_secctrlSecLevel
= (secControl) & (0x07);
// Bit 0-2
424
m_secctrlKeyIdMode
= (secControl >> 3) & (0x03);
// Bit 3-4
425
m_secctrlReserved
= (secControl >> 5) & (0x07);
// Bit 5-7
426
}
427
428
void
429
LrWpanMacHeader::SetFrmCounter
(uint32_t frmCntr)
430
{
431
m_auxFrmCntr
= frmCntr;
432
}
433
434
void
435
LrWpanMacHeader::SetSecLevel
(uint8_t secLevel)
436
{
437
m_secctrlSecLevel
= secLevel;
438
}
439
440
void
441
LrWpanMacHeader::SetKeyIdMode
(uint8_t keyIdMode)
442
{
443
m_secctrlKeyIdMode
= keyIdMode;
444
}
445
446
void
447
LrWpanMacHeader::SetSecCtrlReserved
(uint8_t res)
448
{
449
m_secctrlReserved
= res;
450
}
451
452
void
453
LrWpanMacHeader::SetKeyId
(uint8_t keyIndex)
454
{
455
m_auxKeyIdKeyIndex
= keyIndex;
456
}
457
458
459
void
460
LrWpanMacHeader::SetKeyId
(uint32_t keySrc,
461
uint8_t keyIndex)
462
{
463
m_auxKeyIdKeyIndex
= keyIndex;
464
m_auxKeyIdKeySrc32
= keySrc;
465
}
466
467
468
void
469
LrWpanMacHeader::SetKeyId
(uint64_t keySrc,
470
uint8_t keyIndex)
471
{
472
m_auxKeyIdKeyIndex
= keyIndex;
473
m_auxKeyIdKeySrc64
= keySrc;
474
}
475
476
TypeId
477
LrWpanMacHeader::GetTypeId
(
void
)
478
{
479
static
TypeId
tid =
TypeId
(
"ns3::LrWpanMacHeader"
)
480
.
SetParent
<
Header
> ()
481
.SetGroupName (
"LrWpan"
)
482
.AddConstructor<
LrWpanMacHeader
> ();
483
return
tid;
484
}
485
486
TypeId
487
LrWpanMacHeader::GetInstanceTypeId
(
void
)
const
488
{
489
return
GetTypeId
();
490
}
491
492
void
493
LrWpanMacHeader::Print
(std::ostream &os)
const
494
{
495
os <<
" Frame Type = "
<< (uint32_t)
m_fctrlFrmType
<<
", Sec Enable = "
<< (uint32_t)
m_fctrlSecU
496
<<
", Frame Pending = "
<< (uint32_t)
m_fctrlFrmPending
<<
", Ack Request = "
<< (uint32_t)
m_fctrlAckReq
497
<<
", PAN ID Compress = "
<< (uint32_t)
m_fctrlPanIdComp
<<
", Frame Vers = "
<< (uint32_t)
m_fctrlFrmVer
498
<<
", Dst Addrs Mode = "
<< (uint32_t)
m_fctrlDstAddrMode
<<
", Src Addr Mode = "
<< (uint32_t)
m_fctrlSrcAddrMode
;
499
500
os <<
", Sequence Num = "
<<
static_cast<
uint16_t
>
(
m_SeqNum
);
501
502
switch
(
m_fctrlDstAddrMode
)
503
{
504
case
NOADDR
:
505
break
;
506
case
SHORTADDR
:
507
os <<
", Dst Addr Pan ID = "
<<
static_cast<
uint16_t
>
(
m_addrDstPanId
)
508
<<
", m_addrShortDstAddr = "
<<
m_addrShortDstAddr
;
509
break
;
510
case
EXTADDR
:
511
os <<
", Dst Addr Pan ID = "
<<
static_cast<
uint16_t
>
(
m_addrDstPanId
)
512
<<
", m_addrExtDstAddr = "
<<
m_addrExtDstAddr
;
513
break
;
514
}
515
516
switch
(
m_fctrlSrcAddrMode
)
517
{
518
case
NOADDR
:
519
break
;
520
case
SHORTADDR
:
521
os <<
", Src Addr Pan ID = "
<<
static_cast<
uint16_t
>
(
m_addrSrcPanId
)
522
<<
", m_addrShortSrcAddr = "
<<
m_addrShortSrcAddr
;
523
break
;
524
case
EXTADDR
:
525
os <<
", Src Addr Pan ID = "
<<
static_cast<
uint32_t
>
(
m_addrSrcPanId
)
526
<<
", m_addrExtSrcAddr = "
<<
m_addrExtDstAddr
;
527
break
;
528
}
529
530
if
(
IsSecEnable
())
531
{
532
os <<
" Security Level = "
<<
static_cast<
uint32_t
>
(
m_secctrlSecLevel
)
533
<<
", Key Id Mode = "
<<
static_cast<
uint32_t
>
(
m_secctrlKeyIdMode
)
534
<<
", Frame Counter = "
<<
static_cast<
uint32_t
>
(
m_auxFrmCntr
);
535
536
switch
(
m_secctrlKeyIdMode
)
537
{
538
case
IMPLICIT
:
539
break
;
540
case
NOKEYSOURCE
:
541
os <<
", Key Id - Key Index = "
<<
static_cast<
uint32_t
>
(
m_auxKeyIdKeyIndex
);
542
break
;
543
case
SHORTKEYSOURCE
:
544
os <<
", Key Id - Key Source 32 ="
<<
static_cast<
uint32_t
>
(
m_auxKeyIdKeySrc32
)
545
<<
", Key Id - Key Index = "
<<
static_cast<
uint32_t
>
(
m_auxKeyIdKeyIndex
);
546
break
;
547
case
LONGKEYSOURCE
:
548
os <<
", Key Id - Key Source 64 ="
<<
static_cast<
uint64_t
>
(
m_auxKeyIdKeySrc64
)
549
<<
", Key Id - Key Index = "
<<
static_cast<
uint32_t
>
(
m_auxKeyIdKeyIndex
);
550
break
;
551
}
552
}
553
}
554
555
uint32_t
556
LrWpanMacHeader::GetSerializedSize
(
void
)
const
557
{
558
/*
559
* Each mac header will have
560
* Frame Control : 2 octet
561
* Sequence Number : 1 Octet
562
* Dst PAN Id : 0/2 Octet
563
* Dst Address : 0/2/8 octet
564
* Src PAN Id : 0/2 octet
565
* Src Address : 0/2/8 octet
566
* Aux Sec Header : 0/5/6/10/14 octet
567
*/
568
569
uint32_t size = 3;
570
571
switch
(
m_fctrlDstAddrMode
)
572
{
573
case
NOADDR
:
574
break
;
575
case
SHORTADDR
:
576
size += 4;
577
break
;
578
case
EXTADDR
:
579
size += 10;
580
break
;
581
}
582
583
switch
(
m_fctrlSrcAddrMode
)
584
{
585
case
NOADDR
:
586
break
;
587
case
SHORTADDR
:
588
// check if PAN Id compression is enabled
589
if
(!
IsPanIdComp
())
590
{
591
size += 4;
592
}
593
else
594
{
595
size += 2;
596
}
597
break
;
598
case
EXTADDR
:
599
// check if PAN Id compression is enabled
600
if
(!
IsPanIdComp
())
601
{
602
size += 10;
603
}
604
else
605
{
606
size += 8;
607
}
608
break
;
609
}
610
611
612
// check if security is enabled
613
if
(
IsSecEnable
())
614
{
615
size += 5;
616
switch
(
m_secctrlKeyIdMode
)
617
{
618
case
IMPLICIT
:
619
break
;
620
case
NOKEYSOURCE
:
621
size += 1;
622
break
;
623
case
SHORTKEYSOURCE
:
624
size += 5;
625
break
;
626
case
LONGKEYSOURCE
:
627
size += 9;
628
break
;
629
}
630
}
631
return
(size);
632
}
633
634
635
void
636
LrWpanMacHeader::Serialize
(
Buffer::Iterator
start
)
const
637
{
638
Buffer::Iterator
i =
start
;
639
uint16_t frameControl =
GetFrameControl
();
640
641
i.
WriteHtolsbU16
(frameControl);
642
i.
WriteU8
(
GetSeqNum
());
643
644
switch
(
m_fctrlDstAddrMode
)
645
{
646
case
NOADDR
:
647
break
;
648
case
SHORTADDR
:
649
i.
WriteHtolsbU16
(
GetDstPanId
());
650
WriteTo
(i,
m_addrShortDstAddr
);
651
break
;
652
case
EXTADDR
:
653
i.
WriteHtolsbU16
(
GetDstPanId
());
654
WriteTo
(i,
m_addrExtDstAddr
);
655
break
;
656
}
657
658
switch
(
m_fctrlSrcAddrMode
)
659
{
660
case
NOADDR
:
661
break
;
662
case
SHORTADDR
:
663
if
(!
IsPanIdComp
())
664
{
665
i.
WriteHtolsbU16
(
GetSrcPanId
());
666
}
667
WriteTo
(i,
m_addrShortSrcAddr
);
668
break
;
669
case
EXTADDR
:
670
if
(!
IsPanIdComp
())
671
{
672
i.
WriteHtolsbU16
(
GetSrcPanId
());
673
}
674
WriteTo
(i,
m_addrExtSrcAddr
);
675
break
;
676
}
677
678
if
(
IsSecEnable
())
679
{
680
i.
WriteU8
(
GetSecControl
());
681
i.
WriteHtolsbU32
(
GetFrmCounter
());
682
683
switch
(
m_secctrlKeyIdMode
)
684
{
685
case
IMPLICIT
:
686
break
;
687
case
NOKEYSOURCE
:
688
i.
WriteU8
(
GetKeyIdIndex
());
689
break
;
690
case
SHORTKEYSOURCE
:
691
i.
WriteHtolsbU32
(
GetKeyIdSrc32
());
692
i.
WriteU8
(
GetKeyIdIndex
());
693
break
;
694
case
LONGKEYSOURCE
:
695
i.
WriteHtolsbU64
(
GetKeyIdSrc64
());
696
i.
WriteU8
(
GetKeyIdIndex
());
697
break
;
698
}
699
}
700
}
701
702
703
uint32_t
704
LrWpanMacHeader::Deserialize
(
Buffer::Iterator
start
)
705
{
706
707
Buffer::Iterator
i =
start
;
708
uint16_t frameControl = i.
ReadLsbtohU16
();
709
SetFrameControl
(frameControl);
710
711
SetSeqNum
(i.
ReadU8
());
712
switch
(
m_fctrlDstAddrMode
)
713
{
714
case
NOADDR
:
715
break
;
716
case
SHORTADDR
:
717
m_addrDstPanId
= i.
ReadLsbtohU16
();
718
ReadFrom
(i,
m_addrShortDstAddr
);
719
break
;
720
case
EXTADDR
:
721
m_addrDstPanId
= i.
ReadLsbtohU16
();
722
ReadFrom
(i,
m_addrExtDstAddr
);
723
break
;
724
}
725
726
switch
(
m_fctrlSrcAddrMode
)
727
{
728
case
NOADDR
:
729
break
;
730
case
SHORTADDR
:
731
if
(!
IsPanIdComp
())
732
{
733
m_addrSrcPanId
= i.
ReadLsbtohU16
();
734
}
735
else
736
{
737
if
(
m_fctrlDstAddrMode
> 0)
738
{
739
m_addrSrcPanId
=
m_addrDstPanId
;
740
}
741
}
742
ReadFrom
(i,
m_addrShortSrcAddr
);
743
break
;
744
case
EXTADDR
:
745
if
(!
IsPanIdComp
())
746
{
747
m_addrSrcPanId
= i.
ReadLsbtohU16
();
748
}
749
else
750
{
751
if
(
m_fctrlDstAddrMode
> 0)
752
{
753
m_addrSrcPanId
=
m_addrDstPanId
;
754
}
755
}
756
ReadFrom
(i,
m_addrExtSrcAddr
);
757
break
;
758
}
759
760
if
(
IsSecEnable
())
761
{
762
SetSecControl
(i.
ReadU8
());
763
SetFrmCounter
(i.
ReadLsbtohU32
());
764
765
switch
(
m_secctrlKeyIdMode
)
766
{
767
case
IMPLICIT
:
768
break
;
769
case
NOKEYSOURCE
:
770
SetKeyId
(i.
ReadU8
());
771
break
;
772
case
SHORTKEYSOURCE
:
773
SetKeyId
(i.
ReadLsbtohU32
(),i.
ReadU8
());
774
break
;
775
case
LONGKEYSOURCE
:
776
SetKeyId
(i.
ReadLsbtohU64
(),i.
ReadU8
());
777
break
;
778
}
779
}
780
return
i.
GetDistanceFrom
(
start
);
781
}
782
783
}
//namespace ns3
784
785
ns3::Buffer::Iterator
iterator in a Buffer instance
Definition:
buffer.h:99
ns3::Buffer::Iterator::WriteHtolsbU16
void WriteHtolsbU16(uint16_t data)
Definition:
buffer.cc:911
ns3::Buffer::Iterator::ReadLsbtohU32
uint32_t ReadLsbtohU32(void)
Definition:
buffer.cc:1077
ns3::Buffer::Iterator::WriteU8
void WriteU8(uint8_t data)
Definition:
buffer.h:869
ns3::Buffer::Iterator::WriteHtolsbU32
void WriteHtolsbU32(uint32_t data)
Definition:
buffer.cc:918
ns3::Buffer::Iterator::ReadU8
uint8_t ReadU8(void)
Definition:
buffer.h:1021
ns3::Buffer::Iterator::WriteHtolsbU64
void WriteHtolsbU64(uint64_t data)
Definition:
buffer.cc:927
ns3::Buffer::Iterator::ReadLsbtohU16
uint16_t ReadLsbtohU16(void)
Definition:
buffer.cc:1066
ns3::Buffer::Iterator::ReadLsbtohU64
uint64_t ReadLsbtohU64(void)
Definition:
buffer.cc:1094
ns3::Buffer::Iterator::GetDistanceFrom
uint32_t GetDistanceFrom(Iterator const &o) const
Definition:
buffer.cc:788
ns3::Header
Protocol header serialization and deserialization.
Definition:
header.h:43
ns3::Header::Deserialize
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
ns3::LrWpanMacHeader
Represent the Mac Header with the Frame Control and Sequence Number fields.
Definition:
lr-wpan-mac-header.h:54
ns3::LrWpanMacHeader::SetNoAckReq
void SetNoAckReq(void)
Set the Frame Control field "Ack. Request" bit to false.
Definition:
lr-wpan-mac-header.cc:339
ns3::LrWpanMacHeader::m_secctrlSecLevel
uint8_t m_secctrlSecLevel
Auxiliary security header - Security Control field - Bit 0-2.
Definition:
lr-wpan-mac-header.h:430
ns3::LrWpanMacHeader::m_fctrlDstAddrMode
uint8_t m_fctrlDstAddrMode
Frame Control field Bit 10-11 = 0 - No DstAddr, 2 - ShtDstAddr, 3 - ExtDstAddr.
Definition:
lr-wpan-mac-header.h:410
ns3::LrWpanMacHeader::m_auxFrmCntr
uint32_t m_auxFrmCntr
Auxiliary security header - Frame Counter (4 Octets)
Definition:
lr-wpan-mac-header.h:427
ns3::LrWpanMacHeader::Print
void Print(std::ostream &os) const
Definition:
lr-wpan-mac-header.cc:493
ns3::LrWpanMacHeader::LrWpanMacType
LrWpanMacType
The possible MAC types, see IEEE 802.15.4-2006, Table 79.
Definition:
lr-wpan-mac-header.h:61
ns3::LrWpanMacHeader::LRWPAN_MAC_BEACON
@ LRWPAN_MAC_BEACON
LRWPAN_MAC_BEACON.
Definition:
lr-wpan-mac-header.h:62
ns3::LrWpanMacHeader::LRWPAN_MAC_COMMAND
@ LRWPAN_MAC_COMMAND
LRWPAN_MAC_COMMAND.
Definition:
lr-wpan-mac-header.h:65
ns3::LrWpanMacHeader::LRWPAN_MAC_DATA
@ LRWPAN_MAC_DATA
LRWPAN_MAC_DATA.
Definition:
lr-wpan-mac-header.h:63
ns3::LrWpanMacHeader::LRWPAN_MAC_ACKNOWLEDGMENT
@ LRWPAN_MAC_ACKNOWLEDGMENT
LRWPAN_MAC_ACKNOWLEDGMENT.
Definition:
lr-wpan-mac-header.h:64
ns3::LrWpanMacHeader::LRWPAN_MAC_RESERVED
@ LRWPAN_MAC_RESERVED
LRWPAN_MAC_RESERVED.
Definition:
lr-wpan-mac-header.h:66
ns3::LrWpanMacHeader::SetSecEnable
void SetSecEnable(void)
Set the Frame Control field "Security Enabled" bit to true.
Definition:
lr-wpan-mac-header.cc:304
ns3::LrWpanMacHeader::m_fctrlReserved
uint8_t m_fctrlReserved
Frame Control field Bit 7-9.
Definition:
lr-wpan-mac-header.h:409
ns3::LrWpanMacHeader::m_SeqNum
uint8_t m_SeqNum
Sequence Number (1 Octet)
Definition:
lr-wpan-mac-header.h:415
ns3::LrWpanMacHeader::m_auxKeyIdKeySrc32
uint32_t m_auxKeyIdKeySrc32
Auxiliary security header - Key Source (4 Octets)
Definition:
lr-wpan-mac-header.h:442
ns3::LrWpanMacHeader::GetExtSrcAddr
Mac64Address GetExtSrcAddr(void) const
Get the Source Extended address.
Definition:
lr-wpan-mac-header.cc:194
ns3::LrWpanMacHeader::SetKeyIdMode
void SetKeyIdMode(uint8_t keyIdMode)
Set the Security Control field "Key Identifier Mode" bits (2 bits)
Definition:
lr-wpan-mac-header.cc:441
ns3::LrWpanMacHeader::m_addrShortSrcAddr
Mac16Address m_addrShortSrcAddr
Src Short addr (0 or 2 Octets)
Definition:
lr-wpan-mac-header.h:422
ns3::LrWpanMacHeader::m_secctrlReserved
uint8_t m_secctrlReserved
Auxiliary security header - Security Control field - Bit 5-7.
Definition:
lr-wpan-mac-header.h:438
ns3::LrWpanMacHeader::LrWpanMacHeader
LrWpanMacHeader(void)
Definition:
lr-wpan-mac-header.cc:29
ns3::LrWpanMacHeader::SetFrmCtrlRes
void SetFrmCtrlRes(uint8_t res)
Set the Frame Control field "Reserved" bits.
Definition:
lr-wpan-mac-header.cc:358
ns3::LrWpanMacHeader::SetFrmPend
void SetFrmPend(void)
Set the Frame Control field "Frame Pending" bit to true.
Definition:
lr-wpan-mac-header.cc:318
ns3::LrWpanMacHeader::SetAckReq
void SetAckReq(void)
Set the Frame Control field "Ack. Request" bit to true.
Definition:
lr-wpan-mac-header.cc:332
ns3::LrWpanMacHeader::SetSeqNum
void SetSeqNum(uint8_t seqNum)
Set the Sequence number.
Definition:
lr-wpan-mac-header.cc:385
ns3::LrWpanMacHeader::SetPanIdComp
void SetPanIdComp(void)
Set the Frame Control field "PAN ID Compression" bit to true.
Definition:
lr-wpan-mac-header.cc:346
ns3::LrWpanMacHeader::GetSrcAddrMode
uint8_t GetSrcAddrMode(void) const
Get the Source Addressing Mode of Frame control field.
Definition:
lr-wpan-mac-header.cc:149
ns3::LrWpanMacHeader::IsBeacon
bool IsBeacon(void) const
Returns true if the header is a beacon.
Definition:
lr-wpan-mac-header.cc:256
ns3::LrWpanMacHeader::SetSrcAddrMode
void SetSrcAddrMode(uint8_t addrMode)
Set the Source address mode.
Definition:
lr-wpan-mac-header.cc:378
ns3::LrWpanMacHeader::m_fctrlAckReq
uint8_t m_fctrlAckReq
Frame Control field Bit 5.
Definition:
lr-wpan-mac-header.h:407
ns3::LrWpanMacHeader::m_fctrlPanIdComp
uint8_t m_fctrlPanIdComp
Frame Control field Bit 6 = 0 - no compression, 1 - using only DstPanId for both Src and DstPanId.
Definition:
lr-wpan-mac-header.h:408
ns3::LrWpanMacHeader::IsFrmPend
bool IsFrmPend(void) const
Check if Frame Pending bit of Frame Control is enabled.
Definition:
lr-wpan-mac-header.cc:113
ns3::LrWpanMacHeader::SetSrcAddrFields
void SetSrcAddrFields(uint16_t panId, Mac16Address addr)
Set Source address fields.
Definition:
lr-wpan-mac-header.cc:391
ns3::LrWpanMacHeader::GetExtDstAddr
Mac64Address GetExtDstAddr(void) const
Get the Destination Extended address.
Definition:
lr-wpan-mac-header.cc:175
ns3::LrWpanMacHeader::GetTypeId
static TypeId GetTypeId(void)
Get the type ID.
Definition:
lr-wpan-mac-header.cc:477
ns3::LrWpanMacHeader::GetSeqNum
uint8_t GetSeqNum(void) const
Get the frame Sequence number.
Definition:
lr-wpan-mac-header.cc:156
ns3::LrWpanMacHeader::SetType
void SetType(enum LrWpanMacType wpanMacType)
Set the Frame Control field "Frame Type" bits.
Definition:
lr-wpan-mac-header.cc:282
ns3::LrWpanMacHeader::GetDstPanId
uint16_t GetDstPanId(void) const
Get the Destination PAN ID.
Definition:
lr-wpan-mac-header.cc:163
ns3::LrWpanMacHeader::~LrWpanMacHeader
~LrWpanMacHeader(void)
Definition:
lr-wpan-mac-header.cc:59
ns3::LrWpanMacHeader::GetType
enum LrWpanMacType GetType(void) const
Get the header type.
Definition:
lr-wpan-mac-header.cc:65
ns3::LrWpanMacHeader::m_fctrlSrcAddrMode
uint8_t m_fctrlSrcAddrMode
Frame Control field Bit 14-15 = 0 - No SrcAddr, 2 - ShtSrcAddr, 3 - ExtSrcAddr.
Definition:
lr-wpan-mac-header.h:412
ns3::LrWpanMacHeader::m_fctrlFrmType
uint8_t m_fctrlFrmType
Frame Control field Bit 0-2 = 0 - Beacon, 1 - Data, 2 - Ack, 3 - Command.
Definition:
lr-wpan-mac-header.h:404
ns3::LrWpanMacHeader::GetKeyIdMode
uint8_t GetKeyIdMode(void) const
Get the Auxiliary Security Header - Security Control - Key Identifier Mode bits.
Definition:
lr-wpan-mac-header.cc:225
ns3::LrWpanMacHeader::GetSecLevel
uint8_t GetSecLevel(void) const
Get the Auxiliary Security Header - Security Control - Security Level bits.
Definition:
lr-wpan-mac-header.cc:219
ns3::LrWpanMacHeader::SetDstAddrFields
void SetDstAddrFields(uint16_t panId, Mac16Address addr)
Set Destination address fields.
Definition:
lr-wpan-mac-header.cc:407
ns3::LrWpanMacHeader::SetDstAddrMode
void SetDstAddrMode(uint8_t addrMode)
Set the Destination address mode.
Definition:
lr-wpan-mac-header.cc:364
ns3::LrWpanMacHeader::GetFrmCounter
uint32_t GetFrmCounter(void) const
Get the Auxiliary Security Header - Frame Counter Octects.
Definition:
lr-wpan-mac-header.cc:213
ns3::LrWpanMacHeader::GetShortSrcAddr
Mac16Address GetShortSrcAddr(void) const
Get the Source Short address.
Definition:
lr-wpan-mac-header.cc:189
ns3::LrWpanMacHeader::SetFrmCounter
void SetFrmCounter(uint32_t frmCntr)
Set the auxiliary security header "Frame Counter" octet.
Definition:
lr-wpan-mac-header.cc:429
ns3::LrWpanMacHeader::IsData
bool IsData(void) const
Returns true if the header is a data.
Definition:
lr-wpan-mac-header.cc:262
ns3::LrWpanMacHeader::m_secctrlKeyIdMode
uint8_t m_secctrlKeyIdMode
Auxiliary security header - Security Control field - Bit 3-4 will indicate size of Key Id.
Definition:
lr-wpan-mac-header.h:431
ns3::LrWpanMacHeader::m_auxKeyIdKeySrc64
uint64_t m_auxKeyIdKeySrc64
Auxiliary security header - Key Source (8 Octets)
Definition:
lr-wpan-mac-header.h:443
ns3::LrWpanMacHeader::NOADDR
@ NOADDR
Definition:
lr-wpan-mac-header.h:74
ns3::LrWpanMacHeader::SHORTADDR
@ SHORTADDR
Definition:
lr-wpan-mac-header.h:76
ns3::LrWpanMacHeader::EXTADDR
@ EXTADDR
Definition:
lr-wpan-mac-header.h:77
ns3::LrWpanMacHeader::GetSerializedSize
uint32_t GetSerializedSize(void) const
Definition:
lr-wpan-mac-header.cc:556
ns3::LrWpanMacHeader::Serialize
void Serialize(Buffer::Iterator start) const
Definition:
lr-wpan-mac-header.cc:636
ns3::LrWpanMacHeader::GetSecControl
uint8_t GetSecControl(void) const
Get the Auxiliary Security Header - Security Control Octect.
Definition:
lr-wpan-mac-header.cc:201
ns3::LrWpanMacHeader::GetFrmCtrlRes
uint8_t GetFrmCtrlRes(void) const
Get the Reserved bits of Frame control field.
Definition:
lr-wpan-mac-header.cc:131
ns3::LrWpanMacHeader::IsSecEnable
bool IsSecEnable(void) const
Check if Security Enabled bit of Frame Control is enabled.
Definition:
lr-wpan-mac-header.cc:107
ns3::LrWpanMacHeader::m_fctrlFrmPending
uint8_t m_fctrlFrmPending
Frame Control field Bit 4.
Definition:
lr-wpan-mac-header.h:406
ns3::LrWpanMacHeader::SetFrameControl
void SetFrameControl(uint16_t frameControl)
Set the whole Frame Control field.
Definition:
lr-wpan-mac-header.cc:289
ns3::LrWpanMacHeader::SetSecCtrlReserved
void SetSecCtrlReserved(uint8_t res)
Set the Security Control field "Reserved" bits (3 bits)
Definition:
lr-wpan-mac-header.cc:447
ns3::LrWpanMacHeader::GetFrameVer
uint8_t GetFrameVer(void) const
Get the Frame Version of Frame control field.
Definition:
lr-wpan-mac-header.cc:143
ns3::LrWpanMacHeader::GetShortDstAddr
Mac16Address GetShortDstAddr(void) const
Get the Destination Short address.
Definition:
lr-wpan-mac-header.cc:170
ns3::LrWpanMacHeader::IsCommand
bool IsCommand(void) const
Returns true if the header is a command.
Definition:
lr-wpan-mac-header.cc:274
ns3::LrWpanMacHeader::SetNoPanIdComp
void SetNoPanIdComp(void)
Set the Frame Control field "PAN ID Compression" bit to false.
Definition:
lr-wpan-mac-header.cc:352
ns3::LrWpanMacHeader::SetSecLevel
void SetSecLevel(uint8_t secLevel)
Set the Security Control field "Security Level" bits (3 bits)
Definition:
lr-wpan-mac-header.cc:435
ns3::LrWpanMacHeader::IsAckReq
bool IsAckReq(void) const
Check if Ack.
Definition:
lr-wpan-mac-header.cc:119
ns3::LrWpanMacHeader::GetFrameControl
uint16_t GetFrameControl(void) const
Get the Frame control field.
Definition:
lr-wpan-mac-header.cc:89
ns3::LrWpanMacHeader::SetKeyId
void SetKeyId(uint8_t keyIndex)
Set the Key Index.
Definition:
lr-wpan-mac-header.cc:453
ns3::LrWpanMacHeader::SetSecDisable
void SetSecDisable(void)
Set the Frame Control field "Security Enabled" bit to false.
Definition:
lr-wpan-mac-header.cc:311
ns3::LrWpanMacHeader::GetSecCtrlReserved
uint8_t GetSecCtrlReserved(void) const
Get the Auxiliary Security Header - Security Control - Reserved bits.
Definition:
lr-wpan-mac-header.cc:231
ns3::LrWpanMacHeader::m_addrExtSrcAddr
Mac64Address m_addrExtSrcAddr
Src Ext addr (0 or 8 Octets)
Definition:
lr-wpan-mac-header.h:423
ns3::LrWpanMacHeader::m_addrExtDstAddr
Mac64Address m_addrExtDstAddr
Dst Ext addr (0 or 8 Octets)
Definition:
lr-wpan-mac-header.h:420
ns3::LrWpanMacHeader::m_addrDstPanId
uint16_t m_addrDstPanId
Dst PAN id (0 or 2 Octets)
Definition:
lr-wpan-mac-header.h:418
ns3::LrWpanMacHeader::SetFrameVer
void SetFrameVer(uint8_t ver)
Set the Frame version.
Definition:
lr-wpan-mac-header.cc:371
ns3::LrWpanMacHeader::m_addrShortDstAddr
Mac16Address m_addrShortDstAddr
Dst Short addr (0 or 2 Octets)
Definition:
lr-wpan-mac-header.h:419
ns3::LrWpanMacHeader::m_addrSrcPanId
uint16_t m_addrSrcPanId
Src PAN id (0 or 2 Octets)
Definition:
lr-wpan-mac-header.h:421
ns3::LrWpanMacHeader::m_fctrlFrmVer
uint8_t m_fctrlFrmVer
Frame Control field Bit 12-13.
Definition:
lr-wpan-mac-header.h:411
ns3::LrWpanMacHeader::IMPLICIT
@ IMPLICIT
Definition:
lr-wpan-mac-header.h:85
ns3::LrWpanMacHeader::SHORTKEYSOURCE
@ SHORTKEYSOURCE
Definition:
lr-wpan-mac-header.h:87
ns3::LrWpanMacHeader::NOKEYSOURCE
@ NOKEYSOURCE
Definition:
lr-wpan-mac-header.h:86
ns3::LrWpanMacHeader::LONGKEYSOURCE
@ LONGKEYSOURCE
Definition:
lr-wpan-mac-header.h:88
ns3::LrWpanMacHeader::m_auxKeyIdKeyIndex
uint8_t m_auxKeyIdKeyIndex
Auxiliary security header - Key Index (1 Octet)
Definition:
lr-wpan-mac-header.h:446
ns3::LrWpanMacHeader::IsAcknowledgment
bool IsAcknowledgment(void) const
Returns true if the header is an ack.
Definition:
lr-wpan-mac-header.cc:268
ns3::LrWpanMacHeader::GetInstanceTypeId
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition:
lr-wpan-mac-header.cc:487
ns3::LrWpanMacHeader::GetKeyIdSrc64
uint64_t GetKeyIdSrc64(void) const
Get the Auxiliary Security Header - Key Identifier - Key Source (4 Octects)
Definition:
lr-wpan-mac-header.cc:243
ns3::LrWpanMacHeader::GetSrcPanId
uint16_t GetSrcPanId(void) const
Get the Source PAN ID.
Definition:
lr-wpan-mac-header.cc:181
ns3::LrWpanMacHeader::IsPanIdComp
bool IsPanIdComp(void) const
Check if PAN ID Compression bit of Frame Control is enabled.
Definition:
lr-wpan-mac-header.cc:125
ns3::LrWpanMacHeader::GetDstAddrMode
uint8_t GetDstAddrMode(void) const
Get the Dest.
Definition:
lr-wpan-mac-header.cc:137
ns3::LrWpanMacHeader::m_fctrlSecU
uint8_t m_fctrlSecU
Frame Control field Bit 3 = 0 - no AuxSecHdr , 1 - security enabled AuxSecHdr present.
Definition:
lr-wpan-mac-header.h:405
ns3::LrWpanMacHeader::GetKeyIdIndex
uint8_t GetKeyIdIndex(void) const
Get the Auxiliary Security Header - Key Identifier - Key Index.
Definition:
lr-wpan-mac-header.cc:250
ns3::LrWpanMacHeader::GetKeyIdSrc32
uint32_t GetKeyIdSrc32(void) const
Get the Auxiliary Security Header - Key Identifier - Key Source (2 Octects)
Definition:
lr-wpan-mac-header.cc:237
ns3::LrWpanMacHeader::SetSecControl
void SetSecControl(uint8_t secLevel)
Set the auxiliary security header "Security Control" octet.
Definition:
lr-wpan-mac-header.cc:421
ns3::LrWpanMacHeader::SetNoFrmPend
void SetNoFrmPend(void)
Set the Frame Control field "Frame Pending" bit to false.
Definition:
lr-wpan-mac-header.cc:325
ns3::Mac16Address
This class can contain 16 bit addresses.
Definition:
mac16-address.h:42
ns3::Mac64Address
an EUI-64 address
Definition:
mac64-address.h:44
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
NS_OBJECT_ENSURE_REGISTERED
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition:
object-base.h:45
lr-wpan-mac-header.h
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::WriteTo
void WriteTo(Buffer::Iterator &i, Ipv4Address ad)
Write an Ipv4Address to a Buffer.
Definition:
address-utils.cc:28
ns3::ReadFrom
void ReadFrom(Buffer::Iterator &i, Ipv4Address &ad)
Read an Ipv4Address from a Buffer.
Definition:
address-utils.cc:70
visualizer.core.start
def start()
Definition:
core.py:1853
src
lr-wpan
model
lr-wpan-mac-header.cc
Generated on Tue Feb 6 2024 19:21:21 for ns-3 by
1.9.1