A Discrete-Event Network Simulator
API
bs-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_BS_NET_DEVICE_H
23 #define WIMAX_BS_NET_DEVICE_H
24 
25 #include "wimax-net-device.h"
26 #include "ns3/event-id.h"
27 #include "wimax-connection.h"
28 #include "ns3/nstime.h"
29 #include "ns3/mac48-address.h"
30 #include "ns3/ipv4-address.h"
31 #include "ns3/bs-service-flow-manager.h"
32 #include "dl-mac-messages.h"
33 #include "ipcs-classifier.h"
34 
35 namespace ns3 {
36 
37 class Node;
38 class Packet;
39 class SSRecord;
40 class SSManager;
41 class BSScheduler;
42 class BurstProfileManager;
43 class BSLinkManager;
44 class UplinkScheduler;
45 class BsServiceFlowManager;
46 
51 {
52 public:
54  enum State
55  {
60  };
61 
64  {
67  };
68 
73  static TypeId GetTypeId (void);
74  BaseStationNetDevice (void);
92  Ptr<UplinkScheduler> uplinkScheduler,
93  Ptr<BSScheduler> bsScheduler);
94  ~BaseStationNetDevice (void);
98  void SetInitialRangingInterval (Time initialRangInterval);
102  void InitBaseStationNetDevice (void);
106  Time GetInitialRangingInterval (void) const;
110  void SetDcdInterval (Time dcdInterval);
114  Time GetDcdInterval (void) const;
118  void SetUcdInterval (Time ucdInterval);
122  Time GetUcdInterval (void) const;
126  void SetIntervalT8 (Time interval);
130  Time GetIntervalT8 (void) const;
134  void SetMaxRangingCorrectionRetries (uint8_t maxRangCorrectionRetries);
138  uint8_t GetMaxRangingCorrectionRetries (void) const;
142  void SetMaxInvitedRangRetries (uint8_t maxInvitedRangRetries);
146  uint8_t GetMaxInvitedRangRetries (void) const;
150  void SetRangReqOppSize (uint8_t rangReqOppSize);
154  uint8_t GetRangReqOppSize (void) const;
158  void SetBwReqOppSize (uint8_t bwReqOppSize);
162  uint8_t GetBwReqOppSize (void) const;
166  void SetNrDlSymbols (uint32_t dlSymbols);
170  uint32_t GetNrDlSymbols (void) const;
174  void SetNrUlSymbols (uint32_t ulSymbols);
178  uint32_t GetNrUlSymbols (void) const;
182  uint32_t GetNrDcdSent (void) const;
186  uint32_t GetNrUcdSent (void) const;
190  Time GetDlSubframeStartTime (void) const;
194  Time GetUlSubframeStartTime (void) const;
198  uint8_t GetRangingOppNumber (void) const;
202  Ptr<SSManager> GetSSManager (void) const;
206  void SetSSManager (Ptr<SSManager> ssManager);
214  void SetUplinkScheduler (Ptr<UplinkScheduler> ulScheduler);
218  Ptr<BSLinkManager> GetLinkManager (void) const;
222  void SetBSScheduler (Ptr<BSScheduler> bsSchedule);
226  Ptr<BSScheduler> GetBSScheduler (void) const;
230  void SetLinkManager (Ptr<BSLinkManager> linkManager);
238  void SetBsClassifier (Ptr<IpcsClassifier> classifier);
239 
243  Time GetPsDuration (void) const;
247  Time GetSymbolDuration (void) const;
251  void Start (void);
255  void Stop (void);
263  bool Enqueue (Ptr<Packet> packet, const MacHeaderType &hdrType, Ptr<WimaxConnection> connection);
269 
273  void MarkUplinkAllocations (void);
278  void MarkRangingOppStart (Time rangingOppStartTime);
288 private:
289  virtual void DoDispose (void);
293  void StartFrame (void);
297  void StartDlSubFrame (void);
301  void EndDlSubFrame (void);
305  void StartUlSubFrame (void);
309  void EndUlSubFrame (void);
313  void EndFrame (void);
322  bool DoSend (Ptr<Packet> packet, const Mac48Address& source, const Mac48Address& dest, uint16_t protocolNumber);
327  void DoReceive (Ptr<Packet> packet);
331  void CreateMapMessages (void);
337  void CreateDescriptorMessages (bool sendDcd, bool sendUcd);
341  void SendBursts (void);
342 
347  Ptr<Packet> CreateDlMap (void);
352  Ptr<Packet> CreateDcd (void);
357  Ptr<Packet> CreateUlMap (void);
362  Ptr<Packet> CreateUcd (void);
367  void SetDlBurstProfiles (Dcd *dcd);
372  void SetUlBurstProfiles (Ucd *ucd);
373 
378  void MarkUplinkAllocationStart (Time allocationStartTime);
385  void MarkUplinkAllocationEnd (Time allocationEndTime, Cid cid, uint8_t uiuc);
389  void UplinkAllocationStart (void);
395  void UplinkAllocationEnd (Cid cid, uint8_t uiuc);
399  void RangingOppStart (void);
400 
401  // parameters defined in Table 342
406 
410  uint8_t m_bwReqOppSize;
411 
412  uint32_t m_nrDlSymbols;
413  uint32_t m_nrUlSymbols;
414 
415  // to keep track total number of a certain management messages sent by the BS
416  uint32_t m_nrDlMapSent;
417  uint32_t m_nrUlMapSent;
418  // number of DCDs and UCDs sent even if same
419  uint32_t m_nrDcdSent;
420  uint32_t m_nrUcdSent;
421 
424 
427 
428  // uint32_t m_nrFrames; //temporarily defined in wimax-net-device, as static
429  uint32_t m_nrDlFrames;
430  uint32_t m_nrUlFrames;
431 
432  // to keep track if number of SSs have changed since the last frame
433  uint16_t m_nrSsRegistered;
434 
435  uint16_t m_nrDlAllocations;
436  uint16_t m_nrUlAllocations;
437 
440 
443 
445 
447 
454  // same fields as in PHY, for quick access
457 
459 
467 
475 
484 
493 
501 };
502 
503 } // namespace ns3
504 
505 #endif /* WIMAX_BS_NET_DEVICE_H */
uint32_t m_nrUlMapSent
number UL map sent
uint8_t GetRangingOppNumber(void) const
void SetDcdInterval(Time dcdInterval)
void DoReceive(Ptr< Packet > packet)
Receive packet.
void Stop(void)
Stop device.
void EndDlSubFrame(void)
End DL subframe function.
virtual void DoDispose(void)
Destructor implementation.
TracedCallback< Ptr< const Packet >, Mac48Address, Cid > m_traceBSRx
the base station receive trace callback
MacPreamble
MacPreamble enumeration.
Definition: bs-net-device.h:64
Time m_dcdInterval
in seconds
void SetBsClassifier(Ptr< IpcsClassifier > classifier)
Ptr< UplinkScheduler > m_uplinkScheduler
the uplink scheduler
uint8_t m_bwReqOppSize
in symbols
void SetBwReqOppSize(uint8_t bwReqOppSize)
void SetUcdInterval(Time ucdInterval)
void SetRangReqOppSize(uint8_t rangReqOppSize)
Ptr< BSScheduler > GetBSScheduler(void) const
Time m_ulSubframeStartTime
UL subframe start time.
void SetDlBurstProfiles(Dcd *dcd)
Send DL burst profiles.
void MarkUplinkAllocations(void)
Mark uplink allocations.
Ptr< SSManager > m_ssManager
the SS manager
void InitBaseStationNetDevice(void)
initializes the BS net device and sets its parameters to the default values
void StartDlSubFrame(void)
Start DL subframe function.
Time GetPsDuration(void) const
Ptr< UplinkScheduler > GetUplinkScheduler(void) const
uint8_t GetMaxInvitedRangRetries(void) const
bool DoSend(Ptr< Packet > packet, const Mac48Address &source, const Mac48Address &dest, uint16_t protocolNumber)
Send packet.
bool Enqueue(Ptr< Packet > packet, const MacHeaderType &hdrType, Ptr< WimaxConnection > connection)
Enqueue a packet into a connection queue.
CidFactory * m_cidFactory
the CID factory
uint32_t m_framesSinceLastDcd
frames since last DCD
uint32_t m_ucdConfigChangeCount
UCD config change count.
Ptr< Packet > CreateDcd(void)
Create DCD.
Time GetDcdInterval(void) const
uint8_t m_rangingOppNumber
current ranging TO number
uint32_t m_allocationStartTime
allocation start time
void SetNrDlSymbols(uint32_t dlSymbols)
TracedCallback< Ptr< const Packet > > m_bsTxDropTrace
The trace source fired when packets coming into the "top" of the device are dropped at the MAC layer ...
TracedCallback< Ptr< const Packet > > m_bsRxDropTrace
The trace source fired when packets coming into the "top" of the device are dropped at the MAC layer ...
void MarkRangingOppStart(Time rangingOppStartTime)
Mark ranging opp start.
void RangingOppStart(void)
Ranging opp start.
void SetMaxRangingCorrectionRetries(uint8_t maxRangCorrectionRetries)
uint32_t m_nrDlSymbols
number of DL symbols
uint32_t m_nrUlSymbols
number of UL symbols
Ptr< WimaxConnection > GetConnection(Cid cid)
void CreateMapMessages(void)
creates the MAC management messages DL-MAP and UL-MAP
void StartFrame(void)
Start frame function.
uint8_t m_maxRangCorrectionRetries
maximum range correction retries
void MarkUplinkAllocationStart(Time allocationStartTime)
Mark uplink allocation start.
uint32_t m_nrDlFrames
number DL frames
void SetBSScheduler(Ptr< BSScheduler > bsSchedule)
Ptr< BSLinkManager > GetLinkManager(void) const
void Start(void)
Start device.
uint16_t m_nrUlAllocations
number UL allocations
uint32_t m_nrDcdSent
number DCD sent
Ptr< IpcsClassifier > m_bsClassifier
the base station classifier
void SetIntervalT8(Time interval)
State
State enumeration.
Definition: bs-net-device.h:55
Ptr< Packet > CreateUlMap(void)
Create UL map.
Time GetInitialRangingInterval(void) const
Ptr< BsServiceFlowManager > m_serviceFlowManager
the service flow manager
void SetInitialRangingInterval(Time initialRangInterval)
uint16_t m_nrSsRegistered
number SS registered
Ptr< IpcsClassifier > GetBsClassifier(void) const
Time m_psDuration
ps duration
uint32_t GetNrUlSymbols(void) const
uint8_t m_maxInvitedRangRetries
maximum invited range retries
uint8_t m_ulAllocationNumber
to see UL burst number
void MarkUplinkAllocationEnd(Time allocationEndTime, Cid cid, uint8_t uiuc)
Mark uplink allocation end.
void SetNrUlSymbols(uint32_t ulSymbols)
Ptr< BsServiceFlowManager > GetServiceFlowManager(void) const
void SetSSManager(Ptr< SSManager > ssManager)
Time m_ucdInterval
in seconds
void SetLinkManager(Ptr< BSLinkManager > linkManager)
void SetMaxInvitedRangRetries(uint8_t maxInvitedRangRetries)
Time m_symbolDuration
symbol duration
uint32_t GetNrDlSymbols(void) const
Time m_initialRangInterval
in seconds
void CreateDescriptorMessages(bool sendDcd, bool sendUcd)
creates the channel descriptor MAC management messages DCD and UCD
void SetUplinkScheduler(Ptr< UplinkScheduler > ulScheduler)
Time GetUcdInterval(void) const
Time GetIntervalT8(void) const
void UplinkAllocationEnd(Cid cid, uint8_t uiuc)
Uplink allocation end.
uint32_t m_nrUcdSent
number UCD sent
Ptr< Packet > CreateDlMap(void)
Create DL map.
uint32_t GetNrDcdSent(void) const
uint32_t m_nrUlFrames
number UL frames
void EndFrame(void)
End frame function.
uint32_t m_dcdConfigChangeCount
DCD config change count.
Ptr< Packet > CreateUcd(void)
Create UCD.
uint32_t m_framesSinceLastUcd
frames since last UCD
Time GetDlSubframeStartTime(void) const
uint8_t m_rangReqOppSize
in symbols
Time GetSymbolDuration(void) const
uint32_t GetNrUcdSent(void) const
void EndUlSubFrame(void)
End UL subframe function.
void SetServiceFlowManager(Ptr< BsServiceFlowManager > sfm)
Set service flow manager.
Time GetUlSubframeStartTime(void) const
void StartUlSubFrame(void)
Start UL subframe function.
void UplinkAllocationStart(void)
Uplink allocation start.
uint8_t GetRangReqOppSize(void) const
Ptr< BSScheduler > m_scheduler
the base station scheduler
Time m_intervalT8
in milliseconds, wait for DSA/DSC Acknowledge timeout
uint32_t m_nrDlMapSent
number DL map sent
Time m_dlSubframeStartTime
DL subframe start time.
uint16_t m_nrDlAllocations
number DL allocations
uint8_t GetMaxRangingCorrectionRetries(void) const
TracedCallback< Ptr< const Packet > > m_bsTxTrace
The trace source fired when packets come into the "top" of the device at the L3/L2 transition,...
Ptr< BSLinkManager > m_linkManager
the link manager
TracedCallback< Ptr< const Packet > > m_bsPromiscRxTrace
The trace source fired for packets successfully received by the device immediately before being forwa...
static TypeId GetTypeId(void)
Get the type ID.
uint8_t GetBwReqOppSize(void) const
Ptr< SSManager > GetSSManager(void) const
void SetUlBurstProfiles(Ucd *ucd)
Send UL burst profiles.
void SendBursts(void)
Send burst function.
TracedCallback< Ptr< const Packet > > m_bsRxTrace
The trace source fired for packets successfully received by the device immediately before being forwa...
This class is used exclusively by the BS to allocate CIDs to new connections.
Definition: cid-factory.h:46
Cid class.
Definition: cid.h:38
This class implements Downlink channel descriptor as described by "IEEE Standard for Local and metrop...
an EUI-48 address
Definition: mac48-address.h:44
This class Represents the HT (Header Type) field of generic MAC and bandwidth request headers.
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
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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
phy
Definition: third.py:93