A Discrete-Event Network Simulator
QKDNetSim v2.0 (NS-3 v3.41) @ (+)
API
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
wimax-mac-to-mac-header.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010 INRIA, UDcast
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
18  *
19  */
21 
22 #include "ns3/address-utils.h"
23 #include "ns3/log.h"
24 #include "ns3/uinteger.h"
25 
26 namespace ns3
27 {
28 
29 NS_OBJECT_ENSURE_REGISTERED(WimaxMacToMacHeader);
30 
32  : m_len(0)
33 {
34 }
35 
37  : m_len(len)
38 {
39 }
40 
42 {
43 }
44 
45 TypeId
47 {
48  static TypeId tid = TypeId("ns3::WimaxMacToMacHeader")
49  .SetParent<Header>()
50  .SetGroupName("Wimax")
51  .AddConstructor<WimaxMacToMacHeader>();
52  return tid;
53 }
54 
55 TypeId
57 {
58  return GetTypeId();
59 }
60 
61 uint8_t
63 {
64  uint8_t sizeOfLen = 1;
65 
66  if (m_len > 127)
67  {
68  sizeOfLen = 2;
69  uint64_t testValue = 0xFF;
70  while (m_len > testValue)
71  {
72  sizeOfLen++;
73  testValue *= 0xFF;
74  }
75  }
76  return sizeOfLen;
77 }
78 
79 uint32_t
81 {
82  uint8_t sizeOfLen = GetSizeOfLen();
83  if (sizeOfLen == 1)
84  {
85  return 20;
86  }
87  else
88  {
89  return 20 + sizeOfLen - 1;
90  }
91  // return 19+sizeOfLen;
92 }
93 
94 void
96 {
97  // The following header encoding was reverse-engineered by looking
98  // at existing live pcap traces which could be opened with wireshark
99  // i.e., we have no idea where this is coming from.
100  //
101  // 6 zeros for mac destination
102  // 6 zeros for mac source
103  // 2 bytes for length/type: 0x08f0
104  // 2 bytes for sequence number: 0x0001
105  // 2 bytes for number of tlvs: 0x0001
106  // 1 byte for type of first tlv: 0x09
107  // 1 byte to indicate the length of the length field of the tlv : 0x80 | 0x04
108  // n bytes to indicate the size of the packet (network order)
109  // n bytes for the packet data
110 
111  uint8_t zero = 0;
112 
113  for (int j = 0; j < 12; j++)
114  {
115  i.WriteU8(zero);
116  }
117  i.WriteU16(0xf008); // eth length/type
118  i.WriteU16(0x0100); // sequence number
119  i.WriteU16(0x0100); // number of tlvs
120  i.WriteU8(0x09); // type of first tlv
121  uint8_t lenSize = GetSizeOfLen();
122  if (lenSize == 1)
123  {
124  i.WriteU8(m_len);
125  }
126  else
127  {
128  i.WriteU8((lenSize - 1) | 0x80);
129  for (int j = 0; j < lenSize - 1; j++)
130  {
131  i.WriteU8((uint8_t)(m_len >> ((lenSize - 1 - 1 - j) * 8)));
132  }
133  }
134 }
135 
136 uint32_t
138 {
139  // not needed here
140  return 20;
141 }
142 
143 void
144 WimaxMacToMacHeader::Print(std::ostream& os) const
145 {
146 }
147 }; // namespace ns3
iterator in a Buffer instance
Definition: buffer.h:100
void WriteU8(uint8_t data)
Definition: buffer.h:881
void WriteU16(uint16_t data)
Definition: buffer.cc:859
Protocol header serialization and deserialization.
Definition: header.h:44
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:931
this class implements the mac to mac header needed to dump a wimax pcap file The header format was re...
static TypeId GetTypeId()
Get the type ID.
uint8_t GetSizeOfLen() const
Get size of length field.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void Serialize(Buffer::Iterator start) const override
void Print(std::ostream &os) const override
uint32_t GetSerializedSize() const override
static double zero
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:46
Every class exported by the ns3 library is enclosed in the ns3 namespace.