A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
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
26namespace ns3
27{
28
29NS_OBJECT_ENSURE_REGISTERED(WimaxMacToMacHeader);
30
32 : m_len(0)
33{
34}
35
37 : m_len(len)
38{
39}
40
42{
43}
44
47{
48 static TypeId tid = TypeId("ns3::WimaxMacToMacHeader")
50 .SetGroupName("Wimax")
51 .AddConstructor<WimaxMacToMacHeader>();
52 return tid;
53}
54
57{
58 return GetTypeId();
59}
60
61uint8_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
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
94void
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
138{
139 // not needed here
140 return 20;
141}
142
143void
144WimaxMacToMacHeader::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
a unique identifier for an interface.
Definition: type-id.h:59
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:932
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
uint32_t Deserialize(Buffer::Iterator start) 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.