A Discrete-Event Network Simulator
API
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
29namespace ns3 {
30
31NS_LOG_COMPONENT_DEFINE ("EthernetHeader");
32
33NS_OBJECT_ENSURE_REGISTERED (EthernetHeader);
34
36 : m_enPreambleSfd (hasPreamble),
37 m_lengthType (0)
38{
39 NS_LOG_FUNCTION (this << hasPreamble);
40}
41
43 : m_enPreambleSfd (false),
44 m_lengthType (0)
45{
46 NS_LOG_FUNCTION (this);
47}
48
49void
50EthernetHeader::SetLengthType (uint16_t lengthType)
51{
52 NS_LOG_FUNCTION (this << lengthType);
53 m_lengthType = lengthType;
54}
55uint16_t
57{
58 NS_LOG_FUNCTION (this);
59 return m_lengthType;
60}
61
62void
63EthernetHeader::SetPreambleSfd (uint64_t preambleSfd)
64{
65 NS_LOG_FUNCTION (this << preambleSfd);
66 m_preambleSfd = preambleSfd;
67}
68uint64_t
70{
71 NS_LOG_FUNCTION (this);
72 return m_preambleSfd;
73}
74
75void
77{
78 NS_LOG_FUNCTION (this << source);
79 m_source = source;
80}
83{
84 NS_LOG_FUNCTION (this);
85 return m_source;
86}
87
88void
90{
91 NS_LOG_FUNCTION (this << dst);
92 m_destination = dst;
93}
96{
97 NS_LOG_FUNCTION (this);
98 return m_destination;
99}
100
103{
104 NS_LOG_FUNCTION (this);
105 return LENGTH;
106}
107
110{
111 NS_LOG_FUNCTION (this);
112 return GetSerializedSize ();
113}
114
115
116TypeId
118{
119 static TypeId tid = TypeId ("ns3::EthernetHeader")
120 .SetParent<Header> ()
121 .SetGroupName("Network")
122 .AddConstructor<EthernetHeader> ()
123 ;
124 return tid;
125}
126TypeId
128{
129 return GetTypeId ();
130}
131void
132EthernetHeader::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}
147{
148 NS_LOG_FUNCTION (this);
149 if (m_enPreambleSfd)
150 {
152 }
153 else
154 {
155 return LENGTH_SIZE + 2*MAC_ADDR_SIZE;
156 }
157}
158
159void
161{
162 NS_LOG_FUNCTION (this << &start);
164
165 if (m_enPreambleSfd)
166 {
168 }
170 WriteTo (i, m_source);
172}
175{
176 NS_LOG_FUNCTION (this << &start);
178
179 if (m_enPreambleSfd)
180 {
182 }
183
185 ReadFrom (i, m_source);
187
188 return GetSerializedSize ();
189}
190
191} // namespace ns3
iterator in a Buffer instance
Definition: buffer.h:99
void WriteU64(uint64_t data)
Definition: buffer.cc:891
uint16_t ReadNtohU16(void)
Definition: buffer.h:946
void WriteHtonU16(uint16_t data)
Definition: buffer.h:905
uint64_t ReadU64(void)
Definition: buffer.cc:990
Packet header for Ethernet.
uint16_t m_lengthType
Length or type of the packet.
uint32_t GetHeaderSize() const
bool m_enPreambleSfd
If false, the preamble/sfd are not serialised/deserialised.
virtual uint32_t Deserialize(Buffer::Iterator start)
Mac48Address m_destination
Destination address.
void SetDestination(Mac48Address destination)
static TypeId GetTypeId(void)
Get the type ID.
static const int PREAMBLE_SIZE
size of the preamble_sfd header field
static const int MAC_ADDR_SIZE
size of src/dest addr header fields
Mac48Address m_source
Source address.
virtual void Print(std::ostream &os) const
void SetLengthType(uint16_t size)
void SetSource(Mac48Address source)
EthernetHeader()
Construct a null ethernet header By default, does not add or remove an ethernet preamble.
Mac48Address GetDestination(void) const
virtual uint32_t GetSerializedSize(void) const
Mac48Address GetSource(void) const
uint16_t GetLengthType(void) const
ethernet_header_t GetPacketType(void) const
uint64_t m_preambleSfd
Value of the Preamble/SFD fields.
void SetPreambleSfd(uint64_t preambleSfd)
virtual void Serialize(Buffer::Iterator start) const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
static const int LENGTH_SIZE
size of the length_type header field
uint64_t GetPreambleSfd() const
Protocol header serialization and deserialization.
Definition: header.h:43
an EUI-48 address
Definition: mac48-address.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:922
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:206
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
ethernet_header_t
Types of ethernet packets.
@ LENGTH
Basic ethernet packet, no tags, type/length field indicates packet length or IP/ARP packet.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void WriteTo(Buffer::Iterator &i, Ipv4Address ad)
Write an Ipv4Address to a Buffer.
void ReadFrom(Buffer::Iterator &i, Ipv4Address &ad)
Read an Ipv4Address from a Buffer.
def start()
Definition: core.py:1852