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
EthernetHeader::EthernetHeader
(
bool
hasPreamble)
36
: m_enPreambleSfd (hasPreamble),
37
m_lengthType (0)
38
{
39
NS_LOG_FUNCTION
(
this
<< hasPreamble);
40
}
41
42
EthernetHeader::EthernetHeader
()
43
: m_enPreambleSfd (false),
44
m_lengthType (0)
45
{
46
NS_LOG_FUNCTION
(
this
);
47
}
48
49
void
50
EthernetHeader::SetLengthType
(uint16_t lengthType)
51
{
52
NS_LOG_FUNCTION
(
this
<< lengthType);
53
m_lengthType
= lengthType;
54
}
55
uint16_t
56
EthernetHeader::GetLengthType
(
void
)
const
57
{
58
NS_LOG_FUNCTION
(
this
);
59
return
m_lengthType
;
60
}
61
62
void
63
EthernetHeader::SetPreambleSfd
(uint64_t preambleSfd)
64
{
65
NS_LOG_FUNCTION
(
this
<< preambleSfd);
66
m_preambleSfd
= preambleSfd;
67
}
68
uint64_t
69
EthernetHeader::GetPreambleSfd
(
void
)
const
70
{
71
NS_LOG_FUNCTION
(
this
);
72
return
m_preambleSfd
;
73
}
74
75
void
76
EthernetHeader::SetSource
(
Mac48Address
source)
77
{
78
NS_LOG_FUNCTION
(
this
<< source);
79
m_source
= source;
80
}
81
Mac48Address
82
EthernetHeader::GetSource
(
void
)
const
83
{
84
NS_LOG_FUNCTION
(
this
);
85
return
m_source
;
86
}
87
88
void
89
EthernetHeader::SetDestination
(
Mac48Address
dst)
90
{
91
NS_LOG_FUNCTION
(
this
<< dst);
92
m_destination
= dst;
93
}
94
Mac48Address
95
EthernetHeader::GetDestination
(
void
)
const
96
{
97
NS_LOG_FUNCTION
(
this
);
98
return
m_destination
;
99
}
100
101
ethernet_header_t
102
EthernetHeader::GetPacketType
(
void
)
const
103
{
104
NS_LOG_FUNCTION
(
this
);
105
return
LENGTH
;
106
}
107
108
uint32_t
109
EthernetHeader::GetHeaderSize
(
void
)
const
110
{
111
NS_LOG_FUNCTION
(
this
);
112
return
GetSerializedSize
();
113
}
114
115
116
TypeId
117
EthernetHeader::GetTypeId
(
void
)
118
{
119
static
TypeId
tid =
TypeId
(
"ns3::EthernetHeader"
)
120
.
SetParent
<
Header
> ()
121
.AddConstructor<EthernetHeader> ()
122
;
123
return
tid;
124
}
125
TypeId
126
EthernetHeader::GetInstanceTypeId
(
void
)
const
127
{
128
return
GetTypeId
();
129
}
130
void
131
EthernetHeader::Print
(std::ostream &os)
const
132
{
133
NS_LOG_FUNCTION
(
this
<< &os);
134
// ethernet, right ?
135
if
(
m_enPreambleSfd
)
136
{
137
os <<
"preamble/sfd="
<<
m_preambleSfd
<<
","
;
138
}
139
140
os <<
" length/type=0x"
<< std::hex <<
m_lengthType
<< std::dec
141
<<
", source="
<<
m_source
142
<<
", destination="
<<
m_destination
;
143
}
144
uint32_t
145
EthernetHeader::GetSerializedSize
(
void
)
const
146
{
147
NS_LOG_FUNCTION
(
this
);
148
if
(
m_enPreambleSfd
)
149
{
150
return
PREAMBLE_SIZE
+
LENGTH_SIZE
+ 2*
MAC_ADDR_SIZE
;
151
}
152
else
153
{
154
return
LENGTH_SIZE
+ 2*
MAC_ADDR_SIZE
;
155
}
156
}
157
158
void
159
EthernetHeader::Serialize
(
Buffer::Iterator
start
)
const
160
{
161
NS_LOG_FUNCTION
(
this
<< &start);
162
Buffer::Iterator
i =
start
;
163
164
if
(
m_enPreambleSfd
)
165
{
166
i.
WriteU64
(
m_preambleSfd
);
167
}
168
WriteTo
(i,
m_destination
);
169
WriteTo
(i,
m_source
);
170
i.
WriteHtonU16
(
m_lengthType
);
171
}
172
uint32_t
173
EthernetHeader::Deserialize
(
Buffer::Iterator
start
)
174
{
175
NS_LOG_FUNCTION
(
this
<< &start);
176
Buffer::Iterator
i =
start
;
177
178
if
(
m_enPreambleSfd
)
179
{
180
m_enPreambleSfd
= i.
ReadU64
();
181
}
182
183
ReadFrom
(i,
m_destination
);
184
ReadFrom
(i,
m_source
);
185
m_lengthType
= i.
ReadNtohU16
();
186
187
return
GetSerializedSize
();
188
}
189
190
}
// namespace ns3
src
network
utils
ethernet-header.cc
Generated on Fri Dec 21 2012 19:00:44 for ns-3 by
1.8.1.2