A Discrete-Event Network Simulator
API
csma-net-device.h
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2007 Emmanuelle Laprise
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#ifndef CSMA_NET_DEVICE_H
22#define CSMA_NET_DEVICE_H
23
24#include <cstring>
25#include "ns3/node.h"
26#include "ns3/backoff.h"
27#include "ns3/address.h"
28#include "ns3/net-device.h"
29#include "ns3/callback.h"
30#include "ns3/packet.h"
31#include "ns3/traced-callback.h"
32#include "ns3/nstime.h"
33#include "ns3/data-rate.h"
34#include "ns3/ptr.h"
35#include "ns3/mac48-address.h"
36#include "ns3/queue-fwd.h"
37
38namespace ns3 {
39
40class CsmaChannel;
41class ErrorModel;
42
59{
60public:
61
66 static TypeId GetTypeId (void);
67
75 };
76
83
89 virtual ~CsmaNetDevice ();
90
98 void SetInterframeGap (Time t);
99
111 void SetBackoffParams (Time slotTime, uint32_t minSlots, uint32_t maxSlots,
112 uint32_t maxRetries, uint32_t ceiling);
113
124 bool Attach (Ptr<CsmaChannel> ch);
125
137 void SetQueue (Ptr<Queue<Packet> > queue);
138
144 Ptr<Queue<Packet> > GetQueue (void) const;
145
156
169 void Receive (Ptr<Packet> p, Ptr<CsmaNetDevice> sender);
170
176 bool IsSendEnabled (void);
177
183 void SetSendEnable (bool enable);
184
190 bool IsReceiveEnabled (void);
191
197 void SetReceiveEnable (bool enable);
198
206
213
214 //
215 // The following methods are inherited from NetDevice base class.
216 //
217 virtual void SetIfIndex (const uint32_t index);
218 virtual uint32_t GetIfIndex (void) const;
219 virtual Ptr<Channel> GetChannel (void) const;
220 virtual bool SetMtu (const uint16_t mtu);
221 virtual uint16_t GetMtu (void) const;
222 virtual void SetAddress (Address address);
223 virtual Address GetAddress (void) const;
224 virtual bool IsLinkUp (void) const;
225 virtual void AddLinkChangeCallback (Callback<void> callback);
226 virtual bool IsBroadcast (void) const;
227 virtual Address GetBroadcast (void) const;
228 virtual bool IsMulticast (void) const;
229
252 virtual Address GetMulticast (Ipv4Address multicastGroup) const;
253
258 virtual bool IsPointToPoint (void) const;
259
264 virtual bool IsBridge (void) const;
265
273 virtual bool Send (Ptr<Packet> packet, const Address& dest,
274 uint16_t protocolNumber);
275
284 virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest,
285 uint16_t protocolNumber);
286
292 virtual Ptr<Node> GetNode (void) const;
293
299 virtual void SetNode (Ptr<Node> node);
300
307 virtual bool NeedsArp (void) const;
308
316
324 virtual Address GetMulticast (Ipv6Address addr) const;
325
326
328 virtual bool SupportsSendFrom (void) const;
329
338 int64_t AssignStreams (int64_t stream);
339
340protected:
345 virtual void DoDispose (void);
346
357 void AddHeader (Ptr<Packet> p, Mac48Address source, Mac48Address dest, uint16_t protocolNumber);
358
359private:
360
368
375
381 void Init (bool sendEnable, bool receiveEnable);
382
400 void TransmitStart ();
401
418 void TransmitCompleteEvent (void);
419
434 void TransmitReadyEvent (void);
435
443 void TransmitAbort (void);
444
448 void NotifyLinkUp (void);
449
456
461
466
471 {
475 BACKOFF
476 };
477
483
490
497
504
511
518
525
534
541
549
557
566
575
584
593
601
609
617
625
633
640
660
680
685
690
695
700
706
712
717
721 static const uint16_t DEFAULT_MTU = 1500;
722
730};
731
732} // namespace ns3
733
734#endif /* CSMA_NET_DEVICE_H */
a polymophic address class
Definition: address.h:91
The backoff class is used for calculating backoff times when many net devices can write to the same c...
Definition: backoff.h:37
A Device for a Csma Network Link.
void SetInterframeGap(Time t)
Set the interframe gap used to separate packets.
TracedCallback< Ptr< const Packet > > m_macRxDropTrace
The trace source fired for packets successfully received by the device but dropped before being forwa...
EncapsulationMode
Enumeration of the types of packets supported in the class.
@ ILLEGAL
Encapsulation mode not set.
@ DIX
DIX II / Ethernet II packet.
@ LLC
802.2 LLC/SNAP Packet
NetDevice::ReceiveCallback m_rxCallback
The callback used to notify higher layers that a packet has been received.
TracedCallback< Ptr< const Packet > > m_macTxBackoffTrace
The trace source fired when the mac layer is forced to begin the backoff process for a packet.
CsmaNetDevice & operator=(const CsmaNetDevice &o)
Operator = is declared but not implemented.
virtual bool NeedsArp(void) const
Does this device need to use the address resolution protocol?
virtual bool IsLinkUp(void) const
void SetReceiveEnable(bool enable)
Enable or disable the receive side of the network device.
void TransmitReadyEvent(void)
Cause the Transmitter to Become Ready to Send Another Packet.
Backoff m_backoff
Holds the backoff parameters and is used to calculate the next backoff time to use when the channel i...
DataRate m_bps
The data rate that the Net Device uses to simulate packet transmission timing.
virtual Ptr< Channel > GetChannel(void) const
virtual void SetAddress(Address address)
Set the address of this interface.
EncapsulationMode m_encapMode
The type of packet that should be created by the AddHeader function and that should be processed by t...
void TransmitCompleteEvent(void)
Stop Sending a Packet Down the Wire and Begin the Interframe Gap.
bool IsSendEnabled(void)
Is the send side of the network device enabled?
TracedCallback< Ptr< const Packet > > m_macRxTrace
The trace source fired for packets successfully received by the device immediately before being forwa...
void TransmitStart()
Start Sending a Packet Down the Wire.
virtual void SetIfIndex(const uint32_t index)
TxMachineState
Enumeration of the states of the transmit machine of the net device.
@ BACKOFF
The transmitter is waiting for the channel to be free.
@ READY
The transmitter is ready to begin transmission of a packet.
@ BUSY
The transmitter is busy transmitting a packet.
@ GAP
The transmitter is in the interframe gap time.
Ptr< Queue< Packet > > m_queue
The Queue which this CsmaNetDevice uses as a packet source.
TracedCallback< Ptr< const Packet > > m_macPromiscRxTrace
The trace source fired for packets successfully received by the device immediately before being forwa...
uint32_t m_mtu
The Maximum Transmission Unit.
NetDevice::PromiscReceiveCallback m_promiscRxCallback
The callback used to notify higher layers that a packet has been received in promiscuous mode.
void NotifyLinkUp(void)
Notify any interested parties that the link has come up.
CsmaNetDevice()
Construct a CsmaNetDevice.
CsmaNetDevice::EncapsulationMode GetEncapsulationMode(void)
Get the encapsulation mode of this device.
void Init(bool sendEnable, bool receiveEnable)
Initialization function used during object construction.
Ptr< CsmaChannel > m_channel
The CsmaChannel to which this CsmaNetDevice has been attached.
bool Attach(Ptr< CsmaChannel > ch)
Attach the device to a channel.
virtual Ptr< Node > GetNode(void) const
Get the node to which this device is attached.
void Receive(Ptr< Packet > p, Ptr< CsmaNetDevice > sender)
Receive a packet from a connected CsmaChannel.
TracedCallback m_linkChangeCallbacks
List of callbacks to fire if the link changes state (up or down).
bool IsReceiveEnabled(void)
Is the receive side of the network device enabled?
TracedCallback< Ptr< const Packet > > m_phyTxBeginTrace
The trace source fired when a packet begins the transmission process on the medium.
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
Start sending a packet down the channel.
virtual bool SetMtu(const uint16_t mtu)
Ptr< Queue< Packet > > GetQueue(void) const
Get a copy of the attached Queue.
void AddHeader(Ptr< Packet > p, Mac48Address source, Mac48Address dest, uint16_t protocolNumber)
Adds the necessary headers and trailers to a packet of data in order to respect the packet type.
virtual void SetReceiveCallback(NetDevice::ReceiveCallback cb)
Set the callback to be used to notify higher layers when a packet has been received.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
CsmaNetDevice(const CsmaNetDevice &o)
Copy constructor is declared but not implemented.
virtual void SetNode(Ptr< Node > node)
Set the node to which this device is being attached.
virtual void SetPromiscReceiveCallback(PromiscReceiveCallback cb)
void SetBackoffParams(Time slotTime, uint32_t minSlots, uint32_t maxSlots, uint32_t maxRetries, uint32_t ceiling)
Set the backoff parameters used to determine the wait to retry transmitting a packet when the channel...
virtual uint32_t GetIfIndex(void) const
Ptr< Packet > m_currentPkt
Next packet that will be transmitted (if transmitter is not currently transmitting) or packet that is...
TracedCallback< Ptr< const Packet > > m_snifferTrace
A trace source that emulates a non-promiscuous protocol sniffer connected to the device.
virtual bool IsMulticast(void) const
TracedCallback< Ptr< const Packet > > m_phyTxEndTrace
The trace source fired when a packet ends the transmission process on the medium.
uint32_t m_deviceId
Device ID returned by the attached functions.
bool m_receiveEnable
Enable net device to receive packets.
virtual uint16_t GetMtu(void) const
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
The trace source fired when the phy layer drops a packet it has received.
virtual void AddLinkChangeCallback(Callback< void > callback)
virtual void DoDispose(void)
Perform any object release functionality required to break reference cycles in reference counted obje...
Ptr< Node > m_node
The Node to which this device is attached.
void SetReceiveErrorModel(Ptr< ErrorModel > em)
Attach a receive ErrorModel to the CsmaNetDevice.
virtual Address GetMulticast(Ipv4Address multicastGroup) const
Make and return a MAC multicast address using the provided multicast group.
void SetSendEnable(bool enable)
Enable or disable the send side of the network device.
TracedCallback< Ptr< const Packet > > m_promiscSnifferTrace
A trace source that emulates a promiscuous mode protocol sniffer connected to the device.
virtual bool IsBroadcast(void) const
static const uint16_t DEFAULT_MTU
Default Maximum Transmission Unit (MTU) for the CsmaNetDevice.
void SetEncapsulationMode(CsmaNetDevice::EncapsulationMode mode)
Set the encapsulation mode of this device.
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
The trace source fired when a packet begins the reception process from the medium.
virtual Address GetAddress(void) const
bool m_sendEnable
Enable net device to send packets.
void TransmitAbort(void)
Aborts the transmission of the current packet.
TracedCallback< Ptr< const Packet > > m_macTxDropTrace
The trace source fired when packets coming into the "top" of the device at the L3/L2 transition are d...
TracedCallback< Ptr< const Packet > > m_macTxTrace
The trace source fired when packets come into the "top" of the device at the L3/L2 transition,...
virtual Address GetBroadcast(void) const
TracedCallback< Ptr< const Packet > > m_phyTxDropTrace
The trace source fired when the phy layer drops a packet as it tries to transmit it.
virtual bool IsBridge(void) const
Is this a bridge?
virtual bool SendFrom(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
Start sending a packet down the channel, with MAC spoofing.
Mac48Address m_address
The MAC address which has been assigned to this device.
virtual bool IsPointToPoint(void) const
Is this a point to point link?
Time m_tInterframeGap
The interframe gap that the Net Device uses insert time between packet transmission.
void SetQueue(Ptr< Queue< Packet > > queue)
Attach a queue to the CsmaNetDevice.
static TypeId GetTypeId(void)
Get the type ID.
Ptr< ErrorModel > m_receiveErrorModel
Error model for receive packet events.
TxMachineState m_txMachineState
The state of the Net Device transmit state machine.
virtual ~CsmaNetDevice()
Destroy a CsmaNetDevice.
uint32_t m_ifIndex
The interface index (really net evice index) that has been assigned to this network device.
virtual bool SupportsSendFrom(void) const
bool m_linkUp
Flag indicating whether or not the link is up.
TracedCallback< Ptr< const Packet > > m_phyRxEndTrace
The trace source fired when a packet ends the reception process from the medium.
Class for representing data rates.
Definition: data-rate.h:89
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
Describes an IPv6 address.
Definition: ipv6-address.h:50
an EUI-48 address
Definition: mac48-address.h:44
Network layer to device interface.
Definition: net-device.h:96
Callback< bool, Ptr< NetDevice >, Ptr< const Packet >, uint16_t, const Address &, const Address &, enum PacketType > PromiscReceiveCallback
Definition: net-device.h:343
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
Forward calls to a chain of Callback.
a unique identifier for an interface.
Definition: type-id.h:59
address
Definition: first.py:40
Every class exported by the ns3 library is enclosed in the ns3 namespace.