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
ethernet-header.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2005 INRIA
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: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
19
*/
20
21
#include <iomanip>
22
#include <iostream>
23
#include "ns3/assert.h"
24
#include "ns3/log.h"
25
#include "ns3/header.h"
26
#include "
ethernet-header.h
"
27
#include "
address-utils.h
"
28
29
NS_LOG_COMPONENT_DEFINE
(
"EthernetHeader"
);
30
31
namespace
ns3 {
32
33
NS_OBJECT_ENSURE_REGISTERED
(EthernetHeader)
34
;
35
36
EthernetHeader::EthernetHeader
(
bool
hasPreamble)
37
: m_enPreambleSfd (hasPreamble),
38
m_lengthType (0)
39
{
40
NS_LOG_FUNCTION
(
this
<< hasPreamble);
41
}
42
43
EthernetHeader::EthernetHeader
()
44
: m_enPreambleSfd (false),
45
m_lengthType (0)
46
{
47
NS_LOG_FUNCTION
(
this
);
48
}
49
50
void
51
EthernetHeader::SetLengthType
(uint16_t lengthType)
52
{
53
NS_LOG_FUNCTION
(
this
<< lengthType);
54
m_lengthType
= lengthType;
55
}
56
uint16_t
57
EthernetHeader::GetLengthType
(
void
)
const
58
{
59
NS_LOG_FUNCTION
(
this
);
60
return
m_lengthType
;
61
}
62
63
void
64
EthernetHeader::SetPreambleSfd
(uint64_t preambleSfd)
65
{
66
NS_LOG_FUNCTION
(
this
<< preambleSfd);
67
m_preambleSfd
= preambleSfd;
68
}
69
uint64_t
70
EthernetHeader::GetPreambleSfd
(
void
)
const
71
{
72
NS_LOG_FUNCTION
(
this
);
73
return
m_preambleSfd
;
74
}
75
76
void
77
EthernetHeader::SetSource
(
Mac48Address
source)
78
{
79
NS_LOG_FUNCTION
(
this
<< source);
80
m_source
= source;
81
}
82
Mac48Address
83
EthernetHeader::GetSource
(
void
)
const
84
{
85
NS_LOG_FUNCTION
(
this
);
86
return
m_source
;
87
}
88
89
void
90
EthernetHeader::SetDestination
(
Mac48Address
dst)
91
{
92
NS_LOG_FUNCTION
(
this
<< dst);
93
m_destination
= dst;
94
}
95
Mac48Address
96
EthernetHeader::GetDestination
(
void
)
const
97
{
98
NS_LOG_FUNCTION
(
this
);
99
return
m_destination
;
100
}
101
102
ethernet_header_t
103
EthernetHeader::GetPacketType
(
void
)
const
104
{
105
NS_LOG_FUNCTION
(
this
);
106
return
LENGTH
;
107
}
108
109
uint32_t
110
EthernetHeader::GetHeaderSize
(
void
)
const
111
{
112
NS_LOG_FUNCTION
(
this
);
113
return
GetSerializedSize
();
114
}
115
116
117
TypeId
118
EthernetHeader::GetTypeId
(
void
)
119
{
120
static
TypeId
tid =
TypeId
(
"ns3::EthernetHeader"
)
121
.
SetParent
<
Header
> ()
122
.AddConstructor<EthernetHeader> ()
123
;
124
return
tid;
125
}
126
TypeId
127
EthernetHeader::GetInstanceTypeId
(
void
)
const
128
{
129
return
GetTypeId
();
130
}
131
void
132
EthernetHeader::Print
(std::ostream &os)
const
133
{
134
NS_LOG_FUNCTION
(
this
<< &os);
135
// ethernet, right ?
136
if
(
m_enPreambleSfd
)
137
{
138
os <<
"preamble/sfd="
<<
m_preambleSfd
<<
","
;
139
}
140
141
os <<
" length/type=0x"
<< std::hex <<
m_lengthType
<< std::dec
142
<<
", source="
<<
m_source
143
<<
", destination="
<<
m_destination
;
144
}
145
uint32_t
146
EthernetHeader::GetSerializedSize
(
void
)
const
147
{
148
NS_LOG_FUNCTION
(
this
);
149
if
(
m_enPreambleSfd
)
150
{
151
return
PREAMBLE_SIZE
+
LENGTH_SIZE
+ 2*
MAC_ADDR_SIZE
;
152
}
153
else
154
{
155
return
LENGTH_SIZE
+ 2*
MAC_ADDR_SIZE
;
156
}
157
}
158
159
void
160
EthernetHeader::Serialize
(
Buffer::Iterator
start
)
const
161
{
162
NS_LOG_FUNCTION
(
this
<< &start);
163
Buffer::Iterator
i =
start
;
164
165
if
(
m_enPreambleSfd
)
166
{
167
i.
WriteU64
(
m_preambleSfd
);
168
}
169
WriteTo
(i,
m_destination
);
170
WriteTo
(i,
m_source
);
171
i.
WriteHtonU16
(
m_lengthType
);
172
}
173
uint32_t
174
EthernetHeader::Deserialize
(
Buffer::Iterator
start
)
175
{
176
NS_LOG_FUNCTION
(
this
<< &start);
177
Buffer::Iterator
i =
start
;
178
179
if
(
m_enPreambleSfd
)
180
{
181
m_enPreambleSfd
= i.
ReadU64
();
182
}
183
184
ReadFrom
(i,
m_destination
);
185
ReadFrom
(i,
m_source
);
186
m_lengthType
= i.
ReadNtohU16
();
187
188
return
GetSerializedSize
();
189
}
190
191
}
// namespace ns3
ns3::Header
Protocol header serialization and deserialization.
Definition:
header.h:42
NS_LOG_FUNCTION
#define NS_LOG_FUNCTION(parameters)
Definition:
log.h:345
ns3::EthernetHeader::GetTypeId
static TypeId GetTypeId(void)
Definition:
ethernet-header.cc:118
ns3::EthernetHeader::Print
virtual void Print(std::ostream &os) const
Definition:
ethernet-header.cc:132
ns3::ReadFrom
void ReadFrom(Buffer::Iterator &i, Ipv4Address &ad)
Read an Ipv4Address from a Buffer.
Definition:
address-utils.cc:70
NS_LOG_COMPONENT_DEFINE
NS_LOG_COMPONENT_DEFINE("EthernetHeader")
ns3::EthernetHeader::PREAMBLE_SIZE
static const int PREAMBLE_SIZE
Definition:
ethernet-header.h:113
ns3::NS_OBJECT_ENSURE_REGISTERED
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
ns3::WriteTo
void WriteTo(Buffer::Iterator &i, Ipv4Address ad)
Write an Ipv4Address to a Buffer.
Definition:
address-utils.cc:28
ns3::EthernetHeader::GetLengthType
uint16_t GetLengthType(void) const
Definition:
ethernet-header.cc:57
visualizer.core.start
def start
Definition:
core.py:1482
address-utils.h
ns3::EthernetHeader::SetSource
void SetSource(Mac48Address source)
Definition:
ethernet-header.cc:77
ns3::Buffer::Iterator
iterator in a Buffer instance
Definition:
buffer.h:98
ns3::EthernetHeader::GetHeaderSize
uint32_t GetHeaderSize() const
Definition:
ethernet-header.cc:110
ns3::EthernetHeader::Serialize
virtual void Serialize(Buffer::Iterator start) const
Definition:
ethernet-header.cc:160
ns3::EthernetHeader::m_destination
Mac48Address m_destination
Source address.
Definition:
ethernet-header.h:124
ns3::Buffer::Iterator::WriteHtonU16
void WriteHtonU16(uint16_t data)
Definition:
buffer.h:726
ns3::EthernetHeader::m_preambleSfd
uint64_t m_preambleSfd
Definition:
ethernet-header.h:121
ns3::Buffer::Iterator::WriteU64
void WriteU64(uint64_t data)
Definition:
buffer.cc:915
ns3::EthernetHeader::SetPreambleSfd
void SetPreambleSfd(uint64_t preambleSfd)
Definition:
ethernet-header.cc:64
ns3::EthernetHeader::EthernetHeader
EthernetHeader()
Construct a null ethernet header By default, does not add or remove an ethernet preamble.
Definition:
ethernet-header.cc:43
ns3::LENGTH
Basic ethernet packet, no tags, type/length field indicates packet length or IP/ARP packet...
Definition:
ethernet-header.h:35
ns3::Mac48Address
an EUI-48 address
Definition:
mac48-address.h:41
ns3::EthernetHeader::GetPreambleSfd
uint64_t GetPreambleSfd() const
Definition:
ethernet-header.cc:70
ns3::Buffer::Iterator::ReadU64
uint64_t ReadU64(void)
Definition:
buffer.cc:1014
ethernet-header.h
ns3::EthernetHeader::Deserialize
virtual uint32_t Deserialize(Buffer::Iterator start)
Definition:
ethernet-header.cc:174
ns3::EthernetHeader::GetSource
Mac48Address GetSource(void) const
Definition:
ethernet-header.cc:83
ns3::EthernetHeader::GetDestination
Mac48Address GetDestination(void) const
Definition:
ethernet-header.cc:96
ns3::ethernet_header_t
ethernet_header_t
Types of ethernet packets.
Definition:
ethernet-header.h:34
ns3::EthernetHeader::GetInstanceTypeId
virtual TypeId GetInstanceTypeId(void) const
Definition:
ethernet-header.cc:127
ns3::EthernetHeader::m_lengthType
uint16_t m_lengthType
Value of the Preamble/SFD fields.
Definition:
ethernet-header.h:122
ns3::EthernetHeader::GetSerializedSize
virtual uint32_t GetSerializedSize(void) const
Definition:
ethernet-header.cc:146
ns3::EthernetHeader::m_source
Mac48Address m_source
Length or type of the packet.
Definition:
ethernet-header.h:123
ns3::EthernetHeader::MAC_ADDR_SIZE
static const int MAC_ADDR_SIZE
size of the length_type header field
Definition:
ethernet-header.h:115
ns3::EthernetHeader::LENGTH_SIZE
static const int LENGTH_SIZE
size of the preamble_sfd header field
Definition:
ethernet-header.h:114
ns3::EthernetHeader::SetLengthType
void SetLengthType(uint16_t size)
Definition:
ethernet-header.cc:51
ns3::EthernetHeader::m_enPreambleSfd
bool m_enPreambleSfd
size of src/dest addr header fields
Definition:
ethernet-header.h:120
ns3::EthernetHeader::GetPacketType
ethernet_header_t GetPacketType(void) const
Definition:
ethernet-header.cc:103
ns3::Buffer::Iterator::ReadNtohU16
uint16_t ReadNtohU16(void)
Definition:
buffer.h:767
ns3::EthernetHeader::SetDestination
void SetDestination(Mac48Address destination)
Definition:
ethernet-header.cc:90
ns3::TypeId
a unique identifier for an interface.
Definition:
type-id.h:49
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Definition:
type-id.cc:611
src
network
utils
ethernet-header.cc
Generated on Sat Apr 19 2014 14:07:06 for ns-3 by
1.8.6