A Discrete-Event Network Simulator
API
uan-header-common.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2009 University of Washington
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 * Author: Leonard Tracy <lentracy@gmail.com>
18 */
19
20#include "uan-header-common.h"
21
22#include "ns3/mac8-address.h"
23
24static const uint16_t ARP_PROT_NUMBER = 0x0806;
25static const uint16_t IPV4_PROT_NUMBER = 0x0800;
26static const uint16_t IPV6_PROT_NUMBER = 0x86DD;
27
28namespace ns3
29{
30
31NS_OBJECT_ENSURE_REGISTERED(UanHeaderCommon);
32
34{
35}
36
38 const Mac8Address dest,
39 uint8_t type,
40 uint8_t protocolNumber)
41 : Header(),
42 m_dest(dest),
43 m_src(src)
44{
45 SetProtocolNumber(protocolNumber);
47}
48
51{
52 static TypeId tid = TypeId("ns3::UanHeaderCommon")
54 .SetGroupName("Uan")
55 .AddConstructor<UanHeaderCommon>();
56 return tid;
57}
58
61{
62 return GetTypeId();
63}
64
66{
67}
68
69void
71{
72 m_dest = dest;
73}
74
75void
77{
78 m_src = src;
79}
80
81void
83{
85}
86
87void
88UanHeaderCommon::SetProtocolNumber(uint16_t protocolNumber)
89{
90 if (protocolNumber == 0)
91 {
93 }
94 else if (protocolNumber == IPV4_PROT_NUMBER)
95 {
97 }
98 else if (protocolNumber == ARP_PROT_NUMBER)
99 {
101 }
102 else if (protocolNumber == IPV6_PROT_NUMBER)
103 {
105 }
106 else
107 {
108 NS_ASSERT_MSG(false, "UanHeaderCommon::SetProtocolNumber(): Protocol not supported");
109 }
110}
111
114{
115 return m_dest;
116}
117
120{
121 return m_src;
122}
123
124uint8_t
126{
128}
129
130uint16_t
132{
134 {
135 return IPV4_PROT_NUMBER;
136 }
138 {
139 return ARP_PROT_NUMBER;
140 }
142 {
143 return IPV6_PROT_NUMBER;
144 }
145 return 0;
146}
147
148// Inherrited methods
149
152{
153 return 1 + 1 + 1;
154}
155
156void
158{
159 uint8_t address = 0;
161 start.WriteU8(address);
163 start.WriteU8(address);
164 char tmp = m_uanProtocolBits.m_type;
165 tmp = tmp << 4;
167 start.WriteU8(tmp);
168}
169
172{
173 Buffer::Iterator rbuf = start;
174
175 m_src = Mac8Address(rbuf.ReadU8());
176 m_dest = Mac8Address(rbuf.ReadU8());
177 char tmp = rbuf.ReadU8();
178 m_uanProtocolBits.m_type = tmp >> 4;
180
181 return rbuf.GetDistanceFrom(start);
182}
183
184void
185UanHeaderCommon::Print(std::ostream& os) const
186{
187 os << "UAN src=" << m_src << " dest=" << m_dest
188 << " type=" << (uint32_t)m_uanProtocolBits.m_type
189 << "Protocol Number=" << (uint32_t)m_uanProtocolBits.m_protocolNumber;
190}
191
192} // namespace ns3
iterator in a Buffer instance
Definition: buffer.h:100
uint8_t ReadU8()
Definition: buffer.h:1027
uint32_t GetDistanceFrom(const Iterator &o) const
Definition: buffer.cc:783
Protocol header serialization and deserialization.
Definition: header.h:44
A class used for addressing MAC8 MAC's.
Definition: mac8-address.h:44
void CopyTo(uint8_t *pBuffer) const
Writes address to buffer parameter.
Definition: mac8-address.cc:87
a unique identifier for an interface.
Definition: type-id.h:60
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:935
Common packet header fields.
static TypeId GetTypeId()
Register this type.
void SetSrc(Mac8Address src)
Set the source address.
uint32_t Deserialize(Buffer::Iterator start) override
uint32_t GetSerializedSize() const override
Mac8Address m_dest
The destination address.
uint8_t GetType() const
Get the header type value.
Mac8Address m_src
The source address.
Mac8Address GetDest() const
Get the destination address.
UanHeaderCommon()
Default constructor.
void SetProtocolNumber(uint16_t protocolNumber)
Set the packet type.
void Serialize(Buffer::Iterator start) const override
Mac8Address GetSrc() const
Get the source address.
UanProtocolBits m_uanProtocolBits
The type and protocol bits.
void SetDest(Mac8Address dest)
Set the destination address.
void SetType(uint8_t type)
Set the header type.
~UanHeaderCommon() override
Destructor.
void Print(std::ostream &os) const override
uint16_t GetProtocolNumber() const
Get the packet type value.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:86
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:46
address
Definition: first.py:40
Every class exported by the ns3 library is enclosed in the ns3 namespace.
def start()
Definition: core.py:1864
uint8_t m_protocolNumber
protocol number (4 bits)
uint8_t m_type
type (4 bits)
static const uint16_t IPV4_PROT_NUMBER
static const uint16_t ARP_PROT_NUMBER
static const uint16_t IPV6_PROT_NUMBER