A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
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 recepient
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 recepient
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::IsSecDisable
(
void
)
const
114
{
115
return
(
m_fctrlSecU
== 0);
116
}
117
118
bool
119
LrWpanMacHeader::IsFrmPend
(
void
)
const
120
{
121
return
(
m_fctrlFrmPending
== 1);
122
}
123
124
bool
125
LrWpanMacHeader::IsNoFrmPend
(
void
)
const
126
{
127
return
(
m_fctrlFrmPending
== 0);
128
}
129
130
bool
131
LrWpanMacHeader::IsAckReq
(
void
)
const
132
{
133
return
(
m_fctrlAckReq
== 1);
134
}
135
136
bool
137
LrWpanMacHeader::IsNoAckReq
(
void
)
const
138
{
139
return
(
m_fctrlAckReq
== 0);
140
}
141
142
bool
143
LrWpanMacHeader::IsPanIdComp
(
void
)
const
144
{
145
return
(
m_fctrlPanIdComp
== 1);
146
}
147
148
bool
149
LrWpanMacHeader::IsNoPanIdComp
(
void
)
const
150
{
151
return
(
m_fctrlPanIdComp
== 0);
152
}
153
154
uint8_t
155
LrWpanMacHeader::GetFrmCtrlRes
(
void
)
const
156
{
157
return
(
m_fctrlReserved
);
158
}
159
160
uint8_t
161
LrWpanMacHeader::GetDstAddrMode
(
void
)
const
162
{
163
return
m_fctrlDstAddrMode
;
164
}
165
166
uint8_t
167
LrWpanMacHeader::GetFrameVer
(
void
)
const
168
{
169
return
m_fctrlFrmVer
;
170
}
171
172
uint8_t
173
LrWpanMacHeader::GetSrcAddrMode
(
void
)
const
174
{
175
return
m_fctrlSrcAddrMode
;
176
}
177
178
179
uint8_t
180
LrWpanMacHeader::GetSeqNum
(
void
)
const
181
{
182
return
(
m_SeqNum
);
183
}
184
185
186
uint16_t
187
LrWpanMacHeader::GetDstPanId
(
void
)
const
188
{
189
return
(
m_addrDstPanId
);
190
}
191
192
193
Mac16Address
194
LrWpanMacHeader::GetShortDstAddr
(
void
)
const
195
{
196
return
(
m_addrShortDstAddr
);
197
}
198
Mac64Address
199
LrWpanMacHeader::GetExtDstAddr
(
void
)
const
200
{
201
return
(
m_addrExtDstAddr
);
202
}
203
204
uint16_t
205
LrWpanMacHeader::GetSrcPanId
(
void
)
const
206
{
207
return
(
m_addrSrcPanId
);
208
}
209
210
211
212
Mac16Address
213
LrWpanMacHeader::GetShortSrcAddr
(
void
)
const
214
{
215
return
(
m_addrShortSrcAddr
);
216
}
217
Mac64Address
218
LrWpanMacHeader::GetExtSrcAddr
(
void
)
const
219
{
220
return
(
m_addrExtSrcAddr
);
221
}
222
223
224
uint8_t
225
LrWpanMacHeader::GetSecControl
(
void
)
const
226
{
227
uint8_t val = 0;
228
229
val =
m_secctrlSecLevel
& (0x7);
// Bit 0-2
230
val |= (
m_secctrlKeyIdMode
<< 3) & (0x3 << 3);
// Bit 3-4
231
val |= (
m_secctrlReserved
<< 5) & (0x7 << 5);
// Bit 5-7
232
233
return
(val);
234
}
235
236
uint32_t
237
LrWpanMacHeader::GetFrmCounter
(
void
)
const
238
{
239
return
(
m_auxFrmCntr
);
240
}
241
242
uint8_t
243
LrWpanMacHeader::GetSecLevel
(
void
)
const
244
{
245
return
(
m_secctrlSecLevel
);
246
}
247
248
uint8_t
249
LrWpanMacHeader::GetKeyIdMode
(
void
)
const
250
{
251
return
(
m_secctrlKeyIdMode
);
252
}
253
254
uint8_t
255
LrWpanMacHeader::GetsecctrlReserved
(
void
)
const
256
{
257
return
(
m_secctrlReserved
);
258
}
259
260
uint32_t
261
LrWpanMacHeader::GetKeyIdSrc32
(
void
)
const
262
{
263
return
(
m_auxKeyIdKeySrc32
);
264
}
265
266
uint64_t
267
LrWpanMacHeader::GetKeyIdSrc64
(
void
)
const
268
{
269
270
return
(
m_auxKeyIdKeySrc64
);
271
}
272
273
uint8_t
274
LrWpanMacHeader::GetKeyIdIndex
(
void
)
const
275
{
276
return
(
m_auxKeyIdKeyIndex
);
277
}
278
279
280
bool
281
LrWpanMacHeader::IsBeacon
(
void
)
const
282
{
283
return
(
m_fctrlFrmType
==
LRWPAN_MAC_BEACON
);
284
}
285
286
287
288
bool
289
LrWpanMacHeader::IsData
(
void
)
const
290
{
291
return
(
m_fctrlFrmType
==
LRWPAN_MAC_DATA
);
292
}
293
294
295
296
bool
297
LrWpanMacHeader::IsAcknowledgment
(
void
)
const
298
{
299
return
(
m_fctrlFrmType
==
LRWPAN_MAC_ACKNOWLEDGMENT
);
300
}
301
302
303
304
bool
305
LrWpanMacHeader::IsCommand
(
void
)
const
306
{
307
return
(
m_fctrlFrmType
==
LRWPAN_MAC_COMMAND
);
308
}
309
310
311
312
void
313
LrWpanMacHeader::SetType
(
enum
LrWpanMacType
wpanMacType)
314
{
315
m_fctrlFrmType
= wpanMacType;
316
}
317
318
319
void
320
LrWpanMacHeader::SetFrameControl
(uint16_t frameControl)
321
{
322
m_fctrlFrmType
= (frameControl) & (0x07);
// Bit 0-2
323
m_fctrlSecU
= (frameControl >> 3) & (0x01);
// Bit 3
324
m_fctrlFrmPending
= (frameControl >> 4) & (0x01);
// Bit 4
325
m_fctrlAckReq
= (frameControl >> 5) & (0x01);
// Bit 5
326
m_fctrlPanIdComp
= (frameControl >> 6) & (0x01);
// Bit 6
327
m_fctrlReserved
= (frameControl >> 7) & (0x07);
// Bit 7-9
328
m_fctrlDstAddrMode
= (frameControl >> 10) & (0x03);
// Bit 10-11
329
m_fctrlFrmVer
= (frameControl >> 12) & (0x03);
// Bit 12-13
330
m_fctrlSrcAddrMode
= (frameControl >> 14) & (0x03);
// Bit 14-15
331
}
332
333
334
void
335
LrWpanMacHeader::SetSecEnable
(
void
)
336
{
337
m_fctrlSecU
= 1;
338
}
339
340
341
void
342
LrWpanMacHeader::SetSecDisable
(
void
)
343
{
344
m_fctrlSecU
= 0;
345
}
346
347
348
void
349
LrWpanMacHeader::SetFrmPend
(
void
)
350
{
351
m_fctrlFrmPending
= 1;
352
}
353
354
355
void
356
LrWpanMacHeader::SetNoFrmPend
(
void
)
357
{
358
m_fctrlFrmPending
= 0;
359
}
360
361
362
void
363
LrWpanMacHeader::SetAckReq
(
void
)
364
{
365
m_fctrlAckReq
= 1;
366
}
367
368
369
void
370
LrWpanMacHeader::SetNoAckReq
(
void
)
371
{
372
m_fctrlAckReq
= 0;
373
}
374
375
376
void
377
LrWpanMacHeader::SetPanIdComp
(
void
)
378
{
379
m_fctrlPanIdComp
= 1;
380
}
381
382
383
void
LrWpanMacHeader::SetNoPanIdComp
(
void
)
384
{
385
m_fctrlPanIdComp
= 0;
386
}
387
388
void
389
LrWpanMacHeader::SetFrmCtrlRes
(uint8_t res)
390
{
391
m_fctrlReserved
= res;
392
}
393
394
void
395
LrWpanMacHeader::SetDstAddrMode
(uint8_t addrMode)
396
{
397
m_fctrlDstAddrMode
= addrMode;
398
}
399
400
401
void
402
LrWpanMacHeader::SetFrameVer
(uint8_t ver)
403
{
404
m_fctrlFrmVer
= ver;
405
}
406
407
408
void
409
LrWpanMacHeader::SetSrcAddrMode
(uint8_t addrMode)
410
{
411
m_fctrlSrcAddrMode
= addrMode;
412
}
413
414
415
void
416
LrWpanMacHeader::SetSeqNum
(uint8_t seqNum)
417
{
418
m_SeqNum
= seqNum;
419
}
420
421
void
422
LrWpanMacHeader::SetSrcAddrFields
(uint16_t panId,
423
Mac16Address
addr)
424
{
425
m_addrSrcPanId
= panId;
426
m_addrShortSrcAddr
= addr;
427
}
428
429
void
430
LrWpanMacHeader::SetSrcAddrFields
(uint16_t panId,
431
Mac64Address
addr)
432
{
433
m_addrSrcPanId
= panId;
434
m_addrExtSrcAddr
= addr;
435
}
436
437
void
438
LrWpanMacHeader::SetDstAddrFields
(uint16_t panId,
439
Mac16Address
addr)
440
{
441
m_addrDstPanId
= panId;
442
m_addrShortDstAddr
= addr;
443
}
444
void
445
LrWpanMacHeader::SetDstAddrFields
(uint16_t panId,
446
Mac64Address
addr)
447
{
448
m_addrDstPanId
= panId;
449
m_addrExtDstAddr
= addr;
450
}
451
void
452
LrWpanMacHeader::SetSecControl
(uint8_t secControl)
453
{
454
m_secctrlSecLevel
= (secControl) & (0x07);
// Bit 0-2
455
m_secctrlKeyIdMode
= (secControl >> 3) & (0x03);
// Bit 3-4
456
m_secctrlReserved
= (secControl >> 5) & (0x07);
// Bit 5-7
457
}
458
459
void
460
LrWpanMacHeader::SetFrmCounter
(uint32_t frmCntr)
461
{
462
m_auxFrmCntr
= frmCntr;
463
}
464
465
void
466
LrWpanMacHeader::SetSecLevel
(uint8_t secLevel)
467
{
468
m_secctrlSecLevel
= secLevel;
469
}
470
471
void
472
LrWpanMacHeader::SetKeyIdMode
(uint8_t keyIdMode)
473
{
474
m_secctrlKeyIdMode
= keyIdMode;
475
}
476
477
void
478
LrWpanMacHeader::SetsecctrlReserved
(uint8_t res)
479
{
480
m_secctrlReserved
= res;
481
}
482
483
void
484
LrWpanMacHeader::SetKeyId
(uint8_t keyIndex)
485
{
486
m_auxKeyIdKeyIndex
= keyIndex;
487
}
488
489
490
void
491
LrWpanMacHeader::SetKeyId
(uint32_t keySrc,
492
uint8_t keyIndex)
493
{
494
m_auxKeyIdKeyIndex
= keyIndex;
495
m_auxKeyIdKeySrc32
= keySrc;
496
}
497
498
499
void
500
LrWpanMacHeader::SetKeyId
(uint64_t keySrc,
501
uint8_t keyIndex)
502
{
503
m_auxKeyIdKeyIndex
= keyIndex;
504
m_auxKeyIdKeySrc64
= keySrc;
505
}
506
507
508
std::string
509
LrWpanMacHeader::GetName
(
void
)
const
510
{
511
return
"LrWpan MAC Header"
;
512
}
513
514
TypeId
515
LrWpanMacHeader::GetTypeId
(
void
)
516
{
517
static
TypeId
tid =
TypeId
(
"ns3::LrWpanMacHeader"
)
518
.
SetParent
<
Header
> ()
519
.AddConstructor<LrWpanMacHeader> ();
520
return
tid;
521
}
522
523
524
TypeId
525
LrWpanMacHeader::GetInstanceTypeId
(
void
)
const
526
{
527
return
GetTypeId
();
528
}
529
530
void
531
LrWpanMacHeader::PrintFrameControl
(std::ostream &os)
const
532
{
533
os <<
" Frame Type = "
<< (uint32_t)
m_fctrlFrmType
<<
", Sec Enable = "
<< (uint32_t)
m_fctrlSecU
534
<<
", Frame Pending = "
<< (uint32_t)
m_fctrlFrmPending
<<
", Ack Request = "
<< (uint32_t)
m_fctrlAckReq
535
<<
", PAN ID Compress = "
<< (uint32_t)
m_fctrlPanIdComp
<<
", Frame Vers = "
<< (uint32_t)
m_fctrlFrmVer
536
<<
", Dst Addrs Mode = "
<< (uint32_t)
m_fctrlDstAddrMode
<<
", Src Addr Mode = "
<< (uint32_t)
m_fctrlSrcAddrMode
;
537
}
538
539
void
540
LrWpanMacHeader::Print
(std::ostream &os)
const
541
{
542
PrintFrameControl
(os);
543
os <<
", Sequence Num = "
<<
static_cast<
uint16_t
>
(
m_SeqNum
);
544
545
switch
(
m_fctrlDstAddrMode
)
546
{
547
case
NOADDR
:
548
break
;
549
case
SHORTADDR
:
550
os <<
", Dst Addr Pan ID = "
<<
static_cast<
uint16_t
>
(
m_addrDstPanId
)
551
<<
", m_addrShortDstAddr = "
<<
m_addrShortDstAddr
;
552
break
;
553
case
EXTADDR
:
554
os <<
", Dst Addr Pan ID = "
<<
static_cast<
uint16_t
>
(
m_addrDstPanId
)
555
<<
", m_addrExtDstAddr = "
<<
m_addrExtDstAddr
;
556
break
;
557
}
558
559
switch
(
m_fctrlSrcAddrMode
)
560
{
561
case
NOADDR
:
562
break
;
563
case
SHORTADDR
:
564
os <<
", Src Addr Pan ID = "
<<
static_cast<
uint16_t
>
(
m_addrSrcPanId
)
565
<<
", m_addrShortSrcAddr = "
<<
m_addrShortSrcAddr
;
566
break
;
567
case
EXTADDR
:
568
os <<
", Src Addr Pan ID = "
<<
static_cast<
uint32_t
>
(
m_addrSrcPanId
)
569
<<
", m_addrExtSrcAddr = "
<<
m_addrExtDstAddr
;
570
break
;
571
}
572
573
if
(
IsSecEnable
())
574
{
575
os <<
" Security Level = "
<<
static_cast<
uint32_t
>
(
m_secctrlSecLevel
)
576
<<
", Key Id Mode = "
<< static_cast<uint32_t> (
m_secctrlKeyIdMode
)
577
<<
", Frame Counter = "
<<
static_cast<
uint32_t
>
(
m_auxFrmCntr
);
578
579
switch
(
m_secctrlKeyIdMode
)
580
{
581
case
IMPLICIT
:
582
break
;
583
case
NOKEYSOURCE
:
584
os <<
", Key Id - Key Index = "
<<
static_cast<
uint32_t
>
(
m_auxKeyIdKeyIndex
);
585
break
;
586
case
SHORTKEYSOURCE
:
587
os <<
", Key Id - Key Source 32 ="
<<
static_cast<
uint32_t
>
(
m_auxKeyIdKeySrc32
)
588
<<
", Key Id - Key Index = "
<< static_cast<uint32_t> (
m_auxKeyIdKeyIndex
);
589
break
;
590
case
LONGKEYSOURCE
:
591
os <<
", Key Id - Key Source 64 ="
<<
static_cast<
uint64_t
>
(
m_auxKeyIdKeySrc64
)
592
<<
", Key Id - Key Index = "
<< static_cast<uint32_t> (
m_auxKeyIdKeyIndex
);
593
break
;
594
}
595
}
596
}
597
598
uint32_t
599
LrWpanMacHeader::GetSerializedSize
(
void
)
const
600
{
601
/*
602
* Each mac header will have
603
* Frame Control : 2 octet
604
* Sequence Number : 1 Octet
605
* Dst PAN Id : 0/2 Octet
606
* Dst Address : 0/2/8 octet
607
* Src PAN Id : 0/2 octet
608
* Src Address : 0/2/8 octet
609
* Aux Sec Header : 0/5/6/10/14 octet
610
*/
611
612
uint32_t size = 3;
613
614
switch
(
m_fctrlDstAddrMode
)
615
{
616
case
NOADDR
:
617
break
;
618
case
SHORTADDR
:
619
size += 4;
620
break
;
621
case
EXTADDR
:
622
size += 10;
623
break
;
624
}
625
626
switch
(
m_fctrlSrcAddrMode
)
627
{
628
case
NOADDR
:
629
break
;
630
case
SHORTADDR
:
631
// check if PAN Id compression is enabled
632
if
(
IsNoPanIdComp
())
633
{
634
size += 4;
635
}
636
else
637
{
638
size += 2;
639
}
640
break
;
641
case
EXTADDR
:
642
// check if PAN Id compression is enabled
643
if
(
IsNoPanIdComp
())
644
{
645
size += 10;
646
}
647
else
648
{
649
size += 8;
650
}
651
break
;
652
}
653
654
655
// check if security is enabled
656
if
(
IsSecEnable
())
657
{
658
size += 5;
659
switch
(
m_secctrlKeyIdMode
)
660
{
661
case
IMPLICIT
:
662
break
;
663
case
NOKEYSOURCE
:
664
size += 1;
665
break
;
666
case
SHORTKEYSOURCE
:
667
size += 5;
668
break
;
669
case
LONGKEYSOURCE
:
670
size += 9;
671
break
;
672
}
673
}
674
return
(size);
675
}
676
677
678
void
679
LrWpanMacHeader::Serialize
(
Buffer::Iterator
start
)
const
680
{
681
Buffer::Iterator
i =
start
;
682
uint16_t frameControl =
GetFrameControl
();
683
684
i.
WriteHtolsbU16
(frameControl);
685
i.
WriteU8
(
GetSeqNum
());
686
687
switch
(
m_fctrlDstAddrMode
)
688
{
689
case
NOADDR
:
690
break
;
691
case
SHORTADDR
:
692
i.
WriteHtolsbU16
(
GetDstPanId
());
693
WriteTo
(i,
m_addrShortDstAddr
);
694
break
;
695
case
EXTADDR
:
696
i.
WriteHtolsbU16
(
GetDstPanId
());
697
WriteTo
(i,
m_addrExtDstAddr
);
698
break
;
699
}
700
701
switch
(
m_fctrlSrcAddrMode
)
702
{
703
case
NOADDR
:
704
break
;
705
case
SHORTADDR
:
706
if
(
IsNoPanIdComp
())
707
{
708
i.
WriteHtolsbU16
(
GetSrcPanId
());
709
}
710
WriteTo
(i,
m_addrShortSrcAddr
);
711
break
;
712
case
EXTADDR
:
713
if
(
IsNoPanIdComp
())
714
{
715
i.
WriteHtolsbU16
(
GetSrcPanId
());
716
}
717
WriteTo
(i,
m_addrExtSrcAddr
);
718
break
;
719
}
720
721
if
(
IsSecEnable
())
722
{
723
i.
WriteU8
(
GetSecControl
());
724
i.
WriteHtolsbU32
(
GetFrmCounter
());
725
726
switch
(
m_secctrlKeyIdMode
)
727
{
728
case
IMPLICIT
:
729
break
;
730
case
NOKEYSOURCE
:
731
i.
WriteU8
(
GetKeyIdIndex
());
732
break
;
733
case
SHORTKEYSOURCE
:
734
i.
WriteHtolsbU32
(
GetKeyIdSrc32
());
735
i.
WriteU8
(
GetKeyIdIndex
());
736
break
;
737
case
LONGKEYSOURCE
:
738
i.
WriteHtolsbU64
(
GetKeyIdSrc64
());
739
i.
WriteU8
(
GetKeyIdIndex
());
740
break
;
741
}
742
}
743
}
744
745
746
uint32_t
747
LrWpanMacHeader::Deserialize
(
Buffer::Iterator
start
)
748
{
749
750
Buffer::Iterator
i =
start
;
751
uint16_t frameControl = i.
ReadLsbtohU16
();
752
SetFrameControl
(frameControl);
753
754
SetSeqNum
(i.
ReadU8
());
755
switch
(
m_fctrlDstAddrMode
)
756
{
757
case
NOADDR
:
758
break
;
759
case
SHORTADDR
:
760
m_addrDstPanId
= i.
ReadLsbtohU16
();
761
ReadFrom
(i,
m_addrShortDstAddr
);
762
break
;
763
case
EXTADDR
:
764
m_addrDstPanId
= i.
ReadLsbtohU16
();
765
ReadFrom
(i,
m_addrExtDstAddr
);
766
break
;
767
}
768
769
switch
(
m_fctrlSrcAddrMode
)
770
{
771
case
NOADDR
:
772
break
;
773
case
SHORTADDR
:
774
if
(
IsNoPanIdComp
())
775
{
776
m_addrSrcPanId
= i.
ReadLsbtohU16
();
777
}
778
else
779
{
780
if
(
m_fctrlDstAddrMode
> 0)
781
{
782
m_addrSrcPanId
=
m_addrDstPanId
;
783
}
784
}
785
ReadFrom
(i,
m_addrShortSrcAddr
);
786
break
;
787
case
EXTADDR
:
788
if
(
IsNoPanIdComp
())
789
{
790
m_addrSrcPanId
= i.
ReadLsbtohU16
();
791
}
792
else
793
{
794
if
(
m_fctrlDstAddrMode
> 0)
795
{
796
m_addrSrcPanId
=
m_addrDstPanId
;
797
}
798
}
799
ReadFrom
(i,
m_addrExtSrcAddr
);
800
break
;
801
}
802
803
if
(
IsSecEnable
())
804
{
805
SetSecControl
(i.
ReadU8
());
806
SetFrmCounter
(i.
ReadLsbtohU32
());
807
808
switch
(
m_secctrlKeyIdMode
)
809
{
810
case
IMPLICIT
:
811
break
;
812
case
NOKEYSOURCE
:
813
SetKeyId
(i.
ReadU8
());
814
break
;
815
case
SHORTKEYSOURCE
:
816
SetKeyId
(i.
ReadLsbtohU32
(),i.
ReadU8
());
817
break
;
818
case
LONGKEYSOURCE
:
819
SetKeyId
(i.
ReadLsbtohU64
(),i.
ReadU8
());
820
break
;
821
}
822
}
823
return
i.
GetDistanceFrom
(start);
824
}
825
826
// ----------------------------------------------------------------------------------------------------------
827
828
829
}
//namespace ns3
830
831
ns3::Header
Protocol header serialization and deserialization.
Definition:
header.h:42
ns3::LrWpanMacHeader::GetName
std::string GetName(void) const
Definition:
lr-wpan-mac-header.cc:509
ns3::LrWpanMacHeader::SetNoFrmPend
void SetNoFrmPend(void)
Definition:
lr-wpan-mac-header.cc:356
ns3::LrWpanMacHeader::~LrWpanMacHeader
~LrWpanMacHeader(void)
Definition:
lr-wpan-mac-header.cc:59
ns3::LrWpanMacHeader::SetSecDisable
void SetSecDisable(void)
Definition:
lr-wpan-mac-header.cc:342
ns3::LrWpanMacHeader::m_fctrlDstAddrMode
uint8_t m_fctrlDstAddrMode
Definition:
lr-wpan-mac-header.h:196
ns3::LrWpanMacHeader::IsPanIdComp
bool IsPanIdComp(void) const
Definition:
lr-wpan-mac-header.cc:143
ns3::LrWpanMacHeader::m_fctrlSecU
uint8_t m_fctrlSecU
Definition:
lr-wpan-mac-header.h:191
ns3::LrWpanMacHeader::GetKeyIdMode
uint8_t GetKeyIdMode(void) const
Definition:
lr-wpan-mac-header.cc:249
NS_OBJECT_ENSURE_REGISTERED
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
Definition:
object-base.h:38
ns3::LrWpanMacHeader::EXTADDR
Definition:
lr-wpan-mac-header.h:71
ns3::LrWpanMacHeader::SHORTADDR
Definition:
lr-wpan-mac-header.h:70
ns3::LrWpanMacHeader::SetKeyId
void SetKeyId(uint8_t keyIndex)
Definition:
lr-wpan-mac-header.cc:484
ns3::ReadFrom
void ReadFrom(Buffer::Iterator &i, Ipv4Address &ad)
Read an Ipv4Address from a Buffer.
Definition:
address-utils.cc:70
ns3::LrWpanMacHeader::GetKeyIdSrc32
uint32_t GetKeyIdSrc32(void) const
Definition:
lr-wpan-mac-header.cc:261
ns3::LrWpanMacHeader::SetNoPanIdComp
void SetNoPanIdComp(void)
Definition:
lr-wpan-mac-header.cc:383
ns3::LrWpanMacHeader::SetNoAckReq
void SetNoAckReq(void)
Definition:
lr-wpan-mac-header.cc:370
ns3::LrWpanMacHeader::m_secctrlReserved
uint8_t m_secctrlReserved
Definition:
lr-wpan-mac-header.h:224
ns3::WriteTo
void WriteTo(Buffer::Iterator &i, Ipv4Address ad)
Write an Ipv4Address to a Buffer.
Definition:
address-utils.cc:28
ns3::LrWpanMacHeader::m_secctrlKeyIdMode
uint8_t m_secctrlKeyIdMode
Definition:
lr-wpan-mac-header.h:217
ns3::LrWpanMacHeader::GetSecLevel
uint8_t GetSecLevel(void) const
Definition:
lr-wpan-mac-header.cc:243
ns3::LrWpanMacHeader::m_addrShortDstAddr
Mac16Address m_addrShortDstAddr
Definition:
lr-wpan-mac-header.h:205
ns3::LrWpanMacHeader::SetSeqNum
void SetSeqNum(uint8_t seqNum)
Definition:
lr-wpan-mac-header.cc:416
visualizer.core.start
def start
Definition:
core.py:1482
ns3::LrWpanMacHeader::m_addrDstPanId
uint16_t m_addrDstPanId
Definition:
lr-wpan-mac-header.h:204
ns3::LrWpanMacHeader::LRWPAN_MAC_RESERVED
Definition:
lr-wpan-mac-header.h:63
ns3::LrWpanMacHeader::IsBeacon
bool IsBeacon(void) const
Definition:
lr-wpan-mac-header.cc:281
ns3::LrWpanMacHeader::m_fctrlFrmPending
uint8_t m_fctrlFrmPending
Definition:
lr-wpan-mac-header.h:192
ns3::LrWpanMacHeader::LrWpanMacType
LrWpanMacType
Definition:
lr-wpan-mac-header.h:57
ns3::LrWpanMacHeader::m_addrSrcPanId
uint16_t m_addrSrcPanId
Definition:
lr-wpan-mac-header.h:207
ns3::LrWpanMacHeader::GetShortSrcAddr
Mac16Address GetShortSrcAddr(void) const
Definition:
lr-wpan-mac-header.cc:213
ns3::LrWpanMacHeader::SetAckReq
void SetAckReq(void)
Definition:
lr-wpan-mac-header.cc:363
ns3::LrWpanMacHeader::SetFrmCounter
void SetFrmCounter(uint32_t frmCntr)
Definition:
lr-wpan-mac-header.cc:460
ns3::Buffer::Iterator::GetDistanceFrom
uint32_t GetDistanceFrom(Iterator const &o) const
Definition:
buffer.cc:811
ns3::LrWpanMacHeader::IsNoAckReq
bool IsNoAckReq(void) const
Definition:
lr-wpan-mac-header.cc:137
ns3::Buffer::Iterator
iterator in a Buffer instance
Definition:
buffer.h:98
ns3::LrWpanMacHeader::SetSrcAddrFields
void SetSrcAddrFields(uint16_t panId, Mac16Address addr)
Definition:
lr-wpan-mac-header.cc:422
ns3::LrWpanMacHeader::LRWPAN_MAC_BEACON
Definition:
lr-wpan-mac-header.h:59
ns3::Mac64Address
an EUI-64 address
Definition:
mac64-address.h:41
ns3::LrWpanMacHeader::IsData
bool IsData(void) const
Definition:
lr-wpan-mac-header.cc:289
ns3::LrWpanMacHeader::SetKeyIdMode
void SetKeyIdMode(uint8_t keyIdMode)
Definition:
lr-wpan-mac-header.cc:472
ns3::LrWpanMacHeader::GetFrmCtrlRes
uint8_t GetFrmCtrlRes(void) const
Definition:
lr-wpan-mac-header.cc:155
ns3::LrWpanMacHeader::Serialize
void Serialize(Buffer::Iterator start) const
Definition:
lr-wpan-mac-header.cc:679
ns3::LrWpanMacHeader::m_auxKeyIdKeySrc32
uint32_t m_auxKeyIdKeySrc32
Definition:
lr-wpan-mac-header.h:228
ns3::LrWpanMacHeader::NOADDR
Definition:
lr-wpan-mac-header.h:68
ns3::LrWpanMacHeader::PrintFrameControl
void PrintFrameControl(std::ostream &os) const
Definition:
lr-wpan-mac-header.cc:531
ns3::LrWpanMacHeader::SetSecEnable
void SetSecEnable(void)
Definition:
lr-wpan-mac-header.cc:335
ns3::LrWpanMacHeader::m_auxKeyIdKeySrc64
uint64_t m_auxKeyIdKeySrc64
Definition:
lr-wpan-mac-header.h:229
ns3::LrWpanMacHeader::GetsecctrlReserved
uint8_t GetsecctrlReserved(void) const
Definition:
lr-wpan-mac-header.cc:255
ns3::LrWpanMacHeader::LRWPAN_MAC_DATA
Definition:
lr-wpan-mac-header.h:60
ns3::LrWpanMacHeader::GetFrameControl
uint16_t GetFrameControl(void) const
Definition:
lr-wpan-mac-header.cc:89
ns3::LrWpanMacHeader::GetExtDstAddr
Mac64Address GetExtDstAddr(void) const
Definition:
lr-wpan-mac-header.cc:199
ns3::LrWpanMacHeader::GetSerializedSize
uint32_t GetSerializedSize(void) const
Definition:
lr-wpan-mac-header.cc:599
ns3::LrWpanMacHeader::m_addrExtDstAddr
Mac64Address m_addrExtDstAddr
Definition:
lr-wpan-mac-header.h:206
ns3::LrWpanMacHeader::LRWPAN_MAC_COMMAND
Definition:
lr-wpan-mac-header.h:62
ns3::LrWpanMacHeader::SetFrameVer
void SetFrameVer(uint8_t ver)
Definition:
lr-wpan-mac-header.cc:402
ns3::LrWpanMacHeader::GetSecControl
uint8_t GetSecControl(void) const
Definition:
lr-wpan-mac-header.cc:225
ns3::LrWpanMacHeader::IsSecEnable
bool IsSecEnable(void) const
Definition:
lr-wpan-mac-header.cc:107
ns3::LrWpanMacHeader::IsAckReq
bool IsAckReq(void) const
Definition:
lr-wpan-mac-header.cc:131
ns3::LrWpanMacHeader::m_SeqNum
uint8_t m_SeqNum
Definition:
lr-wpan-mac-header.h:201
ns3::LrWpanMacHeader::SetType
void SetType(enum LrWpanMacType wpanMacType)
Definition:
lr-wpan-mac-header.cc:313
ns3::LrWpanMacHeader::SetFrmCtrlRes
void SetFrmCtrlRes(uint8_t res)
Definition:
lr-wpan-mac-header.cc:389
ns3::LrWpanMacHeader::IMPLICIT
Definition:
lr-wpan-mac-header.h:76
ns3::LrWpanMacHeader::SetPanIdComp
void SetPanIdComp(void)
Definition:
lr-wpan-mac-header.cc:377
ns3::LrWpanMacHeader::m_auxKeyIdKeyIndex
uint8_t m_auxKeyIdKeyIndex
Definition:
lr-wpan-mac-header.h:232
ns3::LrWpanMacHeader::GetSrcAddrMode
uint8_t GetSrcAddrMode(void) const
Definition:
lr-wpan-mac-header.cc:173
ns3::LrWpanMacHeader::m_addrShortSrcAddr
Mac16Address m_addrShortSrcAddr
Definition:
lr-wpan-mac-header.h:208
ns3::LrWpanMacHeader::SetDstAddrMode
void SetDstAddrMode(uint8_t addrMode)
Definition:
lr-wpan-mac-header.cc:395
ns3::LrWpanMacHeader::m_fctrlPanIdComp
uint8_t m_fctrlPanIdComp
Definition:
lr-wpan-mac-header.h:194
lr-wpan-mac-header.h
ns3::LrWpanMacHeader::Print
void Print(std::ostream &os) const
Definition:
lr-wpan-mac-header.cc:540
ns3::LrWpanMacHeader::IsAcknowledgment
bool IsAcknowledgment(void) const
Definition:
lr-wpan-mac-header.cc:297
ns3::LrWpanMacHeader::GetShortDstAddr
Mac16Address GetShortDstAddr(void) const
Definition:
lr-wpan-mac-header.cc:194
ns3::LrWpanMacHeader::GetSrcPanId
uint16_t GetSrcPanId(void) const
Definition:
lr-wpan-mac-header.cc:205
ns3::LrWpanMacHeader::IsNoPanIdComp
bool IsNoPanIdComp(void) const
Definition:
lr-wpan-mac-header.cc:149
ns3::LrWpanMacHeader::GetKeyIdSrc64
uint64_t GetKeyIdSrc64(void) const
Definition:
lr-wpan-mac-header.cc:267
ns3::LrWpanMacHeader::IsFrmPend
bool IsFrmPend(void) const
Definition:
lr-wpan-mac-header.cc:119
ns3::Mac16Address
This class can contain 16 bit addresses.
Definition:
mac16-address.h:39
ns3::LrWpanMacHeader::m_addrExtSrcAddr
Mac64Address m_addrExtSrcAddr
Definition:
lr-wpan-mac-header.h:209
ns3::LrWpanMacHeader::m_secctrlSecLevel
uint8_t m_secctrlSecLevel
Definition:
lr-wpan-mac-header.h:216
ns3::LrWpanMacHeader::LRWPAN_MAC_ACKNOWLEDGMENT
Definition:
lr-wpan-mac-header.h:61
ns3::LrWpanMacHeader::NOKEYSOURCE
Definition:
lr-wpan-mac-header.h:77
ns3::LrWpanMacHeader::SetDstAddrFields
void SetDstAddrFields(uint16_t panId, Mac16Address addr)
Definition:
lr-wpan-mac-header.cc:438
ns3::LrWpanMacHeader::SetSecControl
void SetSecControl(uint8_t secLevel)
Definition:
lr-wpan-mac-header.cc:452
ns3::Buffer::Iterator::WriteHtolsbU16
void WriteHtolsbU16(uint16_t data)
Definition:
buffer.cc:939
ns3::LrWpanMacHeader::GetFrameVer
uint8_t GetFrameVer(void) const
Definition:
lr-wpan-mac-header.cc:167
ns3::LrWpanMacHeader::GetInstanceTypeId
virtual TypeId GetInstanceTypeId(void) const
Definition:
lr-wpan-mac-header.cc:525
ns3::LrWpanMacHeader::GetExtSrcAddr
Mac64Address GetExtSrcAddr(void) const
Definition:
lr-wpan-mac-header.cc:218
ns3::LrWpanMacHeader::GetKeyIdIndex
uint8_t GetKeyIdIndex(void) const
Definition:
lr-wpan-mac-header.cc:274
ns3::LrWpanMacHeader::Deserialize
uint32_t Deserialize(Buffer::Iterator start)
Definition:
lr-wpan-mac-header.cc:747
ns3::LrWpanMacHeader::GetFrmCounter
uint32_t GetFrmCounter(void) const
Definition:
lr-wpan-mac-header.cc:237
ns3::LrWpanMacHeader::SetFrmPend
void SetFrmPend(void)
Definition:
lr-wpan-mac-header.cc:349
ns3::Buffer::Iterator::WriteU8
void WriteU8(uint8_t data)
Definition:
buffer.h:876
ns3::LrWpanMacHeader::SetsecctrlReserved
void SetsecctrlReserved(uint8_t res)
Definition:
lr-wpan-mac-header.cc:478
ns3::Buffer::Iterator::WriteHtolsbU64
void WriteHtolsbU64(uint64_t data)
Definition:
buffer.cc:955
ns3::LrWpanMacHeader::SetFrameControl
void SetFrameControl(uint16_t frameControl)
Definition:
lr-wpan-mac-header.cc:320
ns3::LrWpanMacHeader::IsCommand
bool IsCommand(void) const
Definition:
lr-wpan-mac-header.cc:305
ns3::LrWpanMacHeader::SetSrcAddrMode
void SetSrcAddrMode(uint8_t addrMode)
Definition:
lr-wpan-mac-header.cc:409
ns3::LrWpanMacHeader::GetTypeId
static TypeId GetTypeId(void)
Definition:
lr-wpan-mac-header.cc:515
ns3::Buffer::Iterator::ReadU8
uint8_t ReadU8(void)
Definition:
buffer.h:1028
ns3::LrWpanMacHeader::m_fctrlReserved
uint8_t m_fctrlReserved
Definition:
lr-wpan-mac-header.h:195
ns3::LrWpanMacHeader::GetSeqNum
uint8_t GetSeqNum(void) const
Definition:
lr-wpan-mac-header.cc:180
ns3::LrWpanMacHeader::m_auxFrmCntr
uint32_t m_auxFrmCntr
Definition:
lr-wpan-mac-header.h:213
ns3::LrWpanMacHeader::IsNoFrmPend
bool IsNoFrmPend(void) const
Definition:
lr-wpan-mac-header.cc:125
ns3::LrWpanMacHeader::m_fctrlSrcAddrMode
uint8_t m_fctrlSrcAddrMode
Definition:
lr-wpan-mac-header.h:198
ns3::Buffer::Iterator::ReadLsbtohU16
uint16_t ReadLsbtohU16(void)
Definition:
buffer.cc:1094
ns3::LrWpanMacHeader::m_fctrlFrmVer
uint8_t m_fctrlFrmVer
Definition:
lr-wpan-mac-header.h:197
ns3::LrWpanMacHeader::m_fctrlAckReq
uint8_t m_fctrlAckReq
Definition:
lr-wpan-mac-header.h:193
ns3::LrWpanMacHeader::GetType
enum LrWpanMacType GetType(void) const
Definition:
lr-wpan-mac-header.cc:65
ns3::LrWpanMacHeader::IsSecDisable
bool IsSecDisable(void) const
Definition:
lr-wpan-mac-header.cc:113
ns3::LrWpanMacHeader::SHORTKEYSOURCE
Definition:
lr-wpan-mac-header.h:78
ns3::Buffer::Iterator::ReadLsbtohU64
uint64_t ReadLsbtohU64(void)
Definition:
buffer.cc:1122
ns3::LrWpanMacHeader::m_fctrlFrmType
uint8_t m_fctrlFrmType
Definition:
lr-wpan-mac-header.h:190
ns3::LrWpanMacHeader::LrWpanMacHeader
LrWpanMacHeader(void)
Definition:
lr-wpan-mac-header.cc:29
ns3::LrWpanMacHeader::SetSecLevel
void SetSecLevel(uint8_t secLevel)
Definition:
lr-wpan-mac-header.cc:466
ns3::TypeId
a unique identifier for an interface.
Definition:
type-id.h:49
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Definition:
type-id.cc:610
ns3::LrWpanMacHeader::GetDstAddrMode
uint8_t GetDstAddrMode(void) const
Definition:
lr-wpan-mac-header.cc:161
ns3::Buffer::Iterator::ReadLsbtohU32
uint32_t ReadLsbtohU32(void)
Definition:
buffer.cc:1105
ns3::LrWpanMacHeader::GetDstPanId
uint16_t GetDstPanId(void) const
Definition:
lr-wpan-mac-header.cc:187
ns3::Buffer::Iterator::WriteHtolsbU32
void WriteHtolsbU32(uint32_t data)
Definition:
buffer.cc:946
ns3::LrWpanMacHeader::LONGKEYSOURCE
Definition:
lr-wpan-mac-header.h:79
src
lr-wpan
model
lr-wpan-mac-header.cc
Generated on Tue Jun 17 2014 01:12:55 for ns-3 by
1.8.6