A Discrete-Event Network Simulator
API
wimax-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,2008, 2009 INRIA, UDcast
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 * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
19 * Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
20 */
21
22#ifndef WIMAX_NET_DEVICE_H
23#define WIMAX_NET_DEVICE_H
24
25#include "ns3/net-device.h"
26#include "ns3/event-id.h"
27#include "ns3/mac48-address.h"
28#include "cid.h"
29#include "wimax-connection.h"
30#include "cid-factory.h"
31#include "mac-messages.h"
32#include "dl-mac-messages.h"
33#include "ul-mac-messages.h"
34#include "ns3/traced-callback.h"
35#include "ns3/nstime.h"
36#include "ns3/log.h"
37#include "wimax-phy.h"
38#include "wimax-mac-header.h"
39
40namespace ns3 {
41
42class Node;
43class Packet;
44class TraceContext;
45class TraceResolver;
46class Channel;
47class WimaxChannel;
48class PacketBurst;
49class BurstProfileManager;
50class ConnectionManager;
51class ServiceFlowManager;
52class BandwidthManager;
53class UplinkScheduler;
54
69{
70public:
73 {
76 };
77
80 {
85 };
86
91 static TypeId GetTypeId (void);
92 WimaxNetDevice (void);
93 virtual ~WimaxNetDevice (void);
98 void SetTtg (uint16_t ttg);
103 uint16_t GetTtg (void) const;
108 void SetRtg (uint16_t rtg);
113 uint16_t GetRtg (void) const;
123 void SetPhy (Ptr<WimaxPhy> phy);
128 Ptr<WimaxPhy> GetPhy (void) const;
129
134 void SetChannel (Ptr<WimaxChannel> wimaxChannel);
135
141 uint64_t GetChannel (uint8_t index) const;
142
147 void SetNrFrames (uint32_t nrFrames);
152 uint32_t GetNrFrames (void) const;
162 Mac48Address GetMacAddress (void) const;
167 void SetState (uint8_t state);
172 uint8_t GetState (void) const;
183
188 void SetCurrentDcd (Dcd dcd);
193 Dcd GetCurrentDcd (void) const;
198 void SetCurrentUcd (Ucd ucd);
203 Ucd GetCurrentUcd (void) const;
209
214 virtual void SetConnectionManager (Ptr<ConnectionManager> connectionManager );
215
221
226 void SetBurstProfileManager (Ptr<BurstProfileManager> burstProfileManager);
227
233
238 void SetBandwidthManager (Ptr<BandwidthManager> bandwidthManager);
239
243 void CreateDefaultConnections (void);
244
246 virtual void Start (void) = 0;
248 virtual void Stop (void) = 0;
249
251 void SetReceiveCallback (void);
252
259 void ForwardUp (Ptr<Packet> packet, const Mac48Address &source, const Mac48Address &dest);
260
268 virtual bool Enqueue (Ptr<Packet> packet, const MacHeaderType &hdrType, Ptr<WimaxConnection> connection) = 0;
274 void ForwardDown (Ptr<PacketBurst> burst, WimaxPhy::ModulationType modulationType);
275
276 // temp, shall be private
277 static uint8_t m_direction;
278
280
285 virtual void SetName (const std::string name);
290 virtual std::string GetName (void) const;
295 virtual void SetIfIndex (const uint32_t index);
300 virtual uint32_t GetIfIndex (void) const;
305 virtual Ptr<Channel> GetPhyChannel (void) const;
310 virtual Ptr<Channel> GetChannel (void) const;
315 virtual void SetAddress (Address address);
320 virtual Address GetAddress (void) const;
326 virtual bool SetMtu (const uint16_t mtu);
331 virtual uint16_t GetMtu (void) const;
336 virtual bool IsLinkUp (void) const;
341 virtual void SetLinkChangeCallback (Callback<void> callback);
346 virtual bool IsBroadcast (void) const;
351 virtual Address GetBroadcast (void) const;
356 virtual bool IsMulticast (void) const;
361 virtual Address GetMulticast (void) const;
367 virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
372 virtual bool IsPointToPoint (void) const;
380 virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
385 virtual void SetNode (Ptr<Node> node);
390 virtual Ptr<Node> GetNode (void) const;
395 virtual bool NeedsArp (void) const;
405 virtual void AddLinkChangeCallback (Callback<void> callback);
414 virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
429 virtual bool SupportsSendFrom (void) const;
430
441 typedef void (* TxRxTracedCallback)
442 (Ptr<const Packet> packet, const Mac48Address & mac);
459
460 virtual void DoDispose (void);
461 virtual Address GetMulticast (Ipv6Address addr) const;
462 virtual Address GetMulticast (Ipv4Address multicastGroup) const;
463 virtual bool IsBridge (void) const;
464
469 bool IsPromisc (void);
475
476private:
484
486 static const uint16_t MAX_MSDU_SIZE = 1500;
488 static const uint16_t DEFAULT_MSDU_SIZE = 1400;
489
498 virtual bool DoSend (Ptr<Packet> packet,
499 const Mac48Address& source,
500 const Mac48Address& dest,
501 uint16_t protocolNumber) = 0;
506 virtual void DoReceive (Ptr<Packet> packet) = 0;
511 virtual Ptr<WimaxChannel> DoGetChannel (void) const;
516 void Receive (Ptr<const PacketBurst> burst);
518 void InitializeChannels (void);
519
524
526 std::string m_name;
527 bool m_linkUp;
529 mutable uint16_t m_mtu;
530
533
535 std::vector<uint64_t> m_dlChannels;
536
538 uint8_t m_state;
540
542 uint16_t m_ttg;
544 uint16_t m_rtg;
545
548
551
555
557
558};
559
560} // namespace ns3
561
562#endif /* WIMAX_NET_DEVICE_H */
a polymophic address class
Definition: address.h:91
This class implements Downlink channel descriptor as described by "IEEE Standard for Local and metrop...
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
This class Represents the HT (Header Type) field of generic MAC and bandwidth request headers.
Network layer to device interface.
Definition: net-device.h:96
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:74
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
Forward calls to a chain of Callback.
a unique identifier for an interface.
Definition: type-id.h:59
This class implements the UCD message as described by "IEEE Standard for Local and metropolitan area ...
Hold together all WiMAX-related objects in a NetDevice.
virtual bool IsLinkUp(void) const
Check if link is up.
Mac48Address GetMacAddress(void) const
Get the MAC address.
NetDevice::ReceiveCallback m_forwardUp
forward up callback function
void SetRtg(uint16_t rtg)
Set receive/transmit transition gap.
virtual void SetConnectionManager(Ptr< ConnectionManager > connectionManager)
Set the connection manager of the device.
Ptr< BandwidthManager > m_bandwidthManager
badnwidth manager
Ptr< BurstProfileManager > m_burstProfileManager
burst profile manager
static uint8_t m_direction
downlink or uplink
void Receive(Ptr< const PacketBurst > burst)
Receive a packet burst.
std::vector< uint64_t > m_dlChannels
not sure if it shall be included here
Dcd GetCurrentDcd(void) const
Get the current DCD.
NetDevice::PromiscReceiveCallback m_promiscRx
promiscious receive fcallback function
Direction
Direction enumeration.
Mac48Address m_address
MAC address.
static TypeId GetTypeId(void)
Get the type ID.
NetDevice::PromiscReceiveCallback GetPromiscReceiveCallback(void)
Get promiscious receive callback function.
RangingStatus
RangingStatus enumeration.
Ptr< WimaxConnection > m_initialRangingConnection
initial rnaging connection
uint32_t GetNrFrames(void) const
Get the number of frames.
virtual void Start(void)=0
Start function.
virtual Address MakeMulticastAddress(Ipv4Address multicastGroup) const
Make multicast address.
void CreateDefaultConnections(void)
Creates the initial ranging and broadcast connections.
void SetPhy(Ptr< WimaxPhy > phy)
Set the physical layer object.
virtual bool DoSend(Ptr< Packet > packet, const Mac48Address &source, const Mac48Address &dest, uint16_t protocolNumber)=0
Send a packet.
Ptr< WimaxConnection > GetBroadcastConnection(void) const
Get the broadcast connection.
virtual void SetName(const std::string name)
Set device name.
virtual Ptr< WimaxChannel > DoGetChannel(void) const
Get the channel.
Ptr< BandwidthManager > GetBandwidthManager(void) const
Get the bandwidth manager on the device.
virtual void Stop(void)=0
Stop function.
static const uint16_t DEFAULT_MSDU_SIZE
recommended by wimax forum.
uint16_t GetTtg(void) const
Get transmission/receive transition gap.
virtual void SetIfIndex(const uint32_t index)
Set interface index.
static const uint16_t MAX_MSDU_SIZE
Maximum MSDU size.
virtual bool IsBroadcast(void) const
Check if broadcast enabled.
void SetCurrentUcd(Ucd ucd)
Set the current UCD.
void SetMacAddress(Mac48Address address)
Set the MAC address.
Ptr< ConnectionManager > GetConnectionManager(void) const
Get the connection manager of the device.
Ptr< WimaxConnection > m_broadcastConnection
broadcast connection
void SetReceiveCallback(void)
Set receive callback function.
virtual void DoDispose(void)
Destructor implementation.
static Time m_frameStartTime
temp, to determine the frame start time at SS side, shall actually be determined by frame start pream...
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
Send function.
void SetBurstProfileManager(Ptr< BurstProfileManager > burstProfileManager)
Set the burst profile manager.
Ucd GetCurrentUcd(void) const
Get the current UCD.
Ptr< WimaxPhy > GetPhy(void) const
Get the physical layer object.
virtual bool SetMtu(const uint16_t mtu)
Set MTU value for the device.
void SetState(uint8_t state)
Set the device state.
bool IsPromisc(void)
Check if device is promiscious.
Ptr< WimaxPhy > m_phy
the phy
virtual bool Enqueue(Ptr< Packet > packet, const MacHeaderType &hdrType, Ptr< WimaxConnection > connection)=0
Enqueue a packet.
Ptr< Object > m_mobility
modility model
void SetChannel(Ptr< WimaxChannel > wimaxChannel)
Set the channel object.
virtual bool IsBridge(void) const
Return true if the net device is acting as a bridge.
virtual void SetLinkChangeCallback(Callback< void > callback)
Set link change callback function.
Ptr< ConnectionManager > m_connectionManager
connection manager
void SetBandwidthManager(Ptr< BandwidthManager > bandwidthManager)
Set the bandwidth manager on the device.
uint32_t m_ifIndex
IF index.
virtual void SetPromiscReceiveCallback(PromiscReceiveCallback cb)
Set promiscious receive callback function.
virtual bool SendFrom(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
Send a packet.
uint8_t GetState(void) const
Get the device state.
TracedCallback< Ptr< const Packet >, const Mac48Address & > m_traceRx
Ptr< WimaxConnection > GetInitialRangingConnection(void) const
Get the initial ranging connection.
virtual void SetAddress(Address address)
Set address of the device.
TracedCallback< Ptr< const Packet >, const Mac48Address & > m_traceTx
virtual Address GetAddress(void) const
Get address of the device.
Callback< void > m_linkChange
link change callback
virtual Address GetBroadcast(void) const
Get broadcast address.
virtual uint32_t GetIfIndex(void) const
Get interface index.
virtual void AddLinkChangeCallback(Callback< void > callback)
Add link change callback function.
virtual Ptr< Node > GetNode(void) const
Get node pointer.
std::string m_name
service name
virtual bool SupportsSendFrom(void) const
Check if device supports the SendFrom method.
virtual void DoReceive(Ptr< Packet > packet)=0
Receive a packet.
virtual ~WimaxNetDevice(void)
virtual std::string GetName(void) const
Get device name.
static uint32_t m_nrFrames
temp, shall be in BS. defined here to allow SS to access. SS shall actually determine it from DLFP,...
virtual bool NeedsArp(void) const
Check if device needs ARP.
void Attach(Ptr< WimaxChannel > channel)
Attach device to channel.
void SetTtg(uint16_t ttg)
Set transmission/receive transition gap.
virtual Address GetMulticast(void) const
Get multicast address.
WimaxNetDevice & operator=(const WimaxNetDevice &)
assignment operator (disabled)
void SetNrFrames(uint32_t nrFrames)
Set the number of frames.
uint16_t m_ttg
length of TTG in units of PSs
void SetCurrentDcd(Dcd dcd)
Set the current DCD.
Ptr< BurstProfileManager > GetBurstProfileManager(void) const
Get the burst profile manager.
uint16_t GetRtg(void) const
Get receive/transmit transition gap.
virtual bool IsMulticast(void) const
Check if multicast enabled.
virtual uint16_t GetMtu(void) const
Get MTU of the device.
WimaxNetDevice(const WimaxNetDevice &)
copy constructor (disabled)
virtual bool IsPointToPoint(void) const
Check if device is a point-to-point device.
virtual void SetNode(Ptr< Node > node)
Set node pointer.
void InitializeChannels(void)
Initialize channels function.
virtual Ptr< Channel > GetChannel(void) const
Get the channel.
void(* TxRxTracedCallback)(Ptr< const Packet > packet, const Mac48Address &mac)
TracedCallback signature for packet and Mac48Address.
Ptr< Node > m_node
the node
uint32_t m_symbolIndex
symbol index
void NotifyPromiscTrace(Ptr< Packet > p)
Notify promiscious trace of a packet arrival.
virtual Ptr< Channel > GetPhyChannel(void) const
Get the channel (this method is redundant with GetChannel())
void ForwardUp(Ptr< Packet > packet, const Mac48Address &source, const Mac48Address &dest)
Forward a packet to the next layer above the device.
void ForwardDown(Ptr< PacketBurst > burst, WimaxPhy::ModulationType modulationType)
Forward a packet down the stack.
uint16_t m_rtg
length of RTG in units of PSs
ModulationType
ModulationType enumeration.
Definition: wimax-phy.h:52
address
Definition: first.py:44
Every class exported by the ns3 library is enclosed in the ns3 namespace.
channel
Definition: third.py:92
mac
Definition: third.py:96
phy
Definition: third.py:93