author | Tom Henderson <tomh@tomh.org> |
Tue, 05 May 2015 19:07:17 -0700 | |
changeset 11373 | 03ebade19d98 |
parent 7386 | 2310ed220a61 |
child 11589 | d3bfef4544ec |
permissions | -rw-r--r-- |
7385
10beb0e53130
standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents:
7178
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
4883 | 2 |
/* |
3 |
* Copyright (c) 2009 IITP RAS |
|
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: Kirill Andreev <andreev@iitp.ru> |
|
19 |
*/ |
|
20 |
||
21 |
#include "ns3/assert.h" |
|
22 |
#include "ns3/address-utils.h" |
|
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
23 |
#include "dot11s-mac-header.h" |
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
24 |
#include "ns3/packet.h" |
4883 | 25 |
|
5132
aee541a30256
Restored newline at namespace
Kirill Andreev <andreev@iitp.ru>
parents:
5129
diff
changeset
|
26 |
namespace ns3 { |
aee541a30256
Restored newline at namespace
Kirill Andreev <andreev@iitp.ru>
parents:
5129
diff
changeset
|
27 |
namespace dot11s { |
4883 | 28 |
/*********************************************************** |
29 |
* Here Mesh Mac Header functionality is defined. |
|
30 |
***********************************************************/ |
|
31 |
TypeId |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
32 |
MeshHeader::GetTypeId () |
4883 | 33 |
{ |
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
34 |
static TypeId tid = TypeId ("ns3::Dot11sMacHeader") |
7178
1a07cbb68308
mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6882
diff
changeset
|
35 |
.SetParent<Header> () |
11373
03ebade19d98
SetGroupName for mesh module
Tom Henderson <tomh@tomh.org>
parents:
7386
diff
changeset
|
36 |
.SetGroupName ("Mesh") |
7178
1a07cbb68308
mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6882
diff
changeset
|
37 |
.AddConstructor<MeshHeader> (); |
4883 | 38 |
return tid; |
39 |
} |
|
5129 | 40 |
MeshHeader::MeshHeader () : |
41 |
m_meshFlags (0), m_meshTtl (0), m_meshSeqno (0), m_addr4 (Mac48Address ()), m_addr5 (Mac48Address ()), |
|
7178
1a07cbb68308
mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6882
diff
changeset
|
42 |
m_addr6 (Mac48Address ()) |
4883 | 43 |
{ |
44 |
} |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
45 |
MeshHeader::~MeshHeader () |
4883 | 46 |
{ |
47 |
} |
|
48 |
TypeId |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
49 |
MeshHeader::GetInstanceTypeId () const |
4883 | 50 |
{ |
51 |
return GetTypeId (); |
|
52 |
} |
|
53 |
void |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
54 |
MeshHeader::SetAddr4 (Mac48Address address) |
4889
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
55 |
{ |
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
56 |
m_addr4 = address; |
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
57 |
} |
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
58 |
void |
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
59 |
MeshHeader::SetAddr5 (Mac48Address address) |
4883 | 60 |
{ |
61 |
m_addr5 = address; |
|
62 |
} |
|
63 |
void |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
64 |
MeshHeader::SetAddr6 (Mac48Address address) |
4883 | 65 |
{ |
66 |
m_addr6 = address; |
|
67 |
} |
|
4889
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
68 |
Mac48Address |
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
69 |
MeshHeader::GetAddr4 () const |
4883 | 70 |
{ |
4889
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
71 |
return m_addr4; |
4883 | 72 |
} |
73 |
Mac48Address |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
74 |
MeshHeader::GetAddr5 () const |
4883 | 75 |
{ |
76 |
return m_addr5; |
|
77 |
} |
|
78 |
Mac48Address |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
79 |
MeshHeader::GetAddr6 () const |
4883 | 80 |
{ |
81 |
return m_addr6; |
|
82 |
} |
|
83 |
void |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
84 |
MeshHeader::SetMeshSeqno (uint32_t seqno) |
4883 | 85 |
{ |
86 |
m_meshSeqno = seqno; |
|
87 |
} |
|
88 |
uint32_t |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
89 |
MeshHeader::GetMeshSeqno () const |
4883 | 90 |
{ |
91 |
return m_meshSeqno; |
|
92 |
} |
|
93 |
void |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
94 |
MeshHeader::SetMeshTtl (uint8_t TTL) |
4883 | 95 |
{ |
96 |
m_meshTtl = TTL; |
|
97 |
} |
|
98 |
uint8_t |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
99 |
MeshHeader::GetMeshTtl () const |
4883 | 100 |
{ |
101 |
return m_meshTtl; |
|
102 |
} |
|
103 |
void |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
104 |
MeshHeader::SetAddressExt (uint8_t num_of_addresses) |
4883 | 105 |
{ |
5063 | 106 |
NS_ASSERT (num_of_addresses <= 3); |
5027
2f926202a5bf
Moving to IEEE 802.11s Draft 3.0 (Mesh Control Field, Beacon Timing Element):
Andrey Mazo <mazo@iitp.ru>
parents:
4994
diff
changeset
|
107 |
m_meshFlags |= 0x03 & num_of_addresses; |
4883 | 108 |
} |
109 |
uint8_t |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
110 |
MeshHeader::GetAddressExt () const |
4883 | 111 |
{ |
5027
2f926202a5bf
Moving to IEEE 802.11s Draft 3.0 (Mesh Control Field, Beacon Timing Element):
Andrey Mazo <mazo@iitp.ru>
parents:
4994
diff
changeset
|
112 |
return (0x03 & m_meshFlags); |
4883 | 113 |
} |
114 |
uint32_t |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
115 |
MeshHeader::GetSerializedSize () const |
4883 | 116 |
{ |
4889
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
117 |
return 6 + GetAddressExt () * 6; |
4883 | 118 |
} |
119 |
void |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
120 |
MeshHeader::Serialize (Buffer::Iterator start) const |
4883 | 121 |
{ |
122 |
Buffer::Iterator i = start; |
|
123 |
i.WriteU8 (m_meshFlags); |
|
124 |
i.WriteU8 (m_meshTtl); |
|
5027
2f926202a5bf
Moving to IEEE 802.11s Draft 3.0 (Mesh Control Field, Beacon Timing Element):
Andrey Mazo <mazo@iitp.ru>
parents:
4994
diff
changeset
|
125 |
i.WriteHtolsbU32 (m_meshSeqno); |
4889
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
126 |
uint8_t addresses_to_add = GetAddressExt (); |
4883 | 127 |
//Writing Address extensions: |
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
128 |
if ((addresses_to_add == 1) || (addresses_to_add == 3)) |
5124
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
129 |
{ |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
130 |
WriteTo (i, m_addr4); |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
131 |
} |
4889
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
132 |
if (addresses_to_add > 1) |
5124
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
133 |
{ |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
134 |
WriteTo (i, m_addr5); |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
135 |
} |
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
136 |
if (addresses_to_add > 1) |
5124
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
137 |
{ |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
138 |
WriteTo (i, m_addr6); |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
139 |
} |
4883 | 140 |
} |
141 |
uint32_t |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
142 |
MeshHeader::Deserialize (Buffer::Iterator start) |
4883 | 143 |
{ |
144 |
Buffer::Iterator i = start; |
|
145 |
uint8_t addresses_to_read = 0; |
|
146 |
m_meshFlags = i.ReadU8 (); |
|
147 |
m_meshTtl = i.ReadU8 (); |
|
5027
2f926202a5bf
Moving to IEEE 802.11s Draft 3.0 (Mesh Control Field, Beacon Timing Element):
Andrey Mazo <mazo@iitp.ru>
parents:
4994
diff
changeset
|
148 |
m_meshSeqno = i.ReadLsbtohU32 (); |
2f926202a5bf
Moving to IEEE 802.11s Draft 3.0 (Mesh Control Field, Beacon Timing Element):
Andrey Mazo <mazo@iitp.ru>
parents:
4994
diff
changeset
|
149 |
addresses_to_read = m_meshFlags & 0x03; |
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
150 |
if ((addresses_to_read == 1) || (addresses_to_read == 3)) |
5124
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
151 |
{ |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
152 |
ReadFrom (i, m_addr4); |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
153 |
} |
4889
279b07de3327
Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents:
4883
diff
changeset
|
154 |
if (addresses_to_read > 1) |
5124
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
155 |
{ |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
156 |
ReadFrom (i, m_addr5); |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
157 |
} |
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
158 |
if (addresses_to_read > 1) |
5124
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
159 |
{ |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
160 |
ReadFrom (i, m_addr6); |
e206046b2e44
removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents:
5112
diff
changeset
|
161 |
} |
4883 | 162 |
return i.GetDistanceFrom (start); |
163 |
} |
|
164 |
void |
|
4994
2c25f9c66604
Dot11sMacHeader renamed to MeshHeader to correspond standard
Pavel Boyko <boyko@iitp.ru>
parents:
4984
diff
changeset
|
165 |
MeshHeader::Print (std::ostream &os) const |
4883 | 166 |
{ |
5157
ace422ad12df
Cosmetics: '\n' was replaced with std::endl, Camel case for attributes
Kirill Andreev <andreev@iitp.ru>
parents:
5132
diff
changeset
|
167 |
os << "flags = " << (uint16_t) m_meshFlags << std::endl << "ttl = " << (uint16_t) m_meshTtl |
7178
1a07cbb68308
mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6882
diff
changeset
|
168 |
<< std::endl << "seqno = " << m_meshSeqno << std::endl<< "addr4 = " << m_addr4 << std::endl |
1a07cbb68308
mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6882
diff
changeset
|
169 |
<< "addr5 = " << m_addr5 << std::endl << "addr6 = " << m_addr6 << std::endl; |
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
170 |
} |
5129 | 171 |
bool |
172 |
operator== (const MeshHeader & a, const MeshHeader & b) |
|
4956
aba7cae978ac
MeshWifiMacHeader moved to Dot11sMacHeader. test to it is written
Kirill Andreev <andreev@iitp.ru>
parents:
4949
diff
changeset
|
173 |
{ |
5129 | 174 |
return ((a.m_meshFlags == b.m_meshFlags) && (a.m_meshTtl == b.m_meshTtl) |
7178
1a07cbb68308
mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6882
diff
changeset
|
175 |
&& (a.m_meshSeqno == b.m_meshSeqno) && (a.m_addr4 == b.m_addr4) && (a.m_addr5 == b.m_addr5) |
1a07cbb68308
mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
6882
diff
changeset
|
176 |
&& (a.m_addr6 == b.m_addr6)); |
4883 | 177 |
} |
7386
2310ed220a61
standardize ns-3 namespace declaration format
Vedran Miletić <rivanvx@gmail.com>
parents:
7385
diff
changeset
|
178 |
} // namespace dot11s |
4883 | 179 |
} // namespace ns3 |