wimaxscheduler.h
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:3k
源码类别:

网络

开发平台:

C/C++

  1. /* This software was developed at the National Institute of Standards and
  2.  * Technology by employees of the Federal Government in the course of
  3.  * their official duties. Pursuant to title 17 Section 105 of the United
  4.  * States Code this software is not subject to copyright protection and
  5.  * is in the public domain.
  6.  * NIST assumes no responsibility whatsoever for its use by other parties,
  7.  * and makes no guarantees, expressed or implied, about its quality,
  8.  * reliability, or any other characteristic.
  9.  * <BR>
  10.  * We would appreciate acknowledgement if the software is used.
  11.  * <BR>
  12.  * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
  13.  * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
  14.  * FROM THE USE OF THIS SOFTWARE.
  15.  * </PRE></P>
  16.  * @author  rouil
  17.  */
  18. #ifndef WIMAX_SCHEDULER_H
  19. #define WIMAX_SCHEDULER_H
  20. #include "packet.h"
  21. #include "mac802_16.h"
  22. #include "framemap.h"
  23. #include "neighbordb.h"
  24. class WimaxScheduler;
  25. /** Timer to indicate a new Downlink frame */
  26. class DlTimer : public TimerHandler {
  27.  public:
  28.   DlTimer(WimaxScheduler *s) : TimerHandler() {s_=s;}
  29.   
  30.   void expire(Event *e);
  31.  private:
  32.   WimaxScheduler *s_;
  33. }; 
  34. /** Timer to indicate a new uplink frame */
  35. class UlTimer : public TimerHandler {
  36.  public:
  37.   UlTimer(WimaxScheduler *s) : TimerHandler() {s_=s;}
  38.   
  39.   void expire(Event *e);
  40.  private:
  41.   WimaxScheduler *s_;
  42. }; 
  43. /**
  44.  * Super class for schedulers (BS and MS schedulers)
  45.  */ 
  46. class WimaxScheduler : public TclObject 
  47. {
  48.   friend class FrameMap;
  49.   friend class WimaxCtrlAgent;
  50. public:
  51.   /*
  52.    * Create a scheduler
  53.    */
  54.   WimaxScheduler ();
  55.   /*
  56.    * Set the mac
  57.    * @param mac The Mac where it is located
  58.    */
  59.   void setMac (Mac802_16 *mac);
  60.   /**
  61.    * Process a packet received by the Mac. Only scheduling related packets should be sent here (BW request, UL_MAP...)
  62.    * @param p The packet to process
  63.    */
  64.   virtual void  process (Packet * p);
  65.   /**
  66.    * Return the type of STA this scheduler is good for
  67.    */
  68.   virtual station_type_t getNodeType ();
  69.       
  70.   /**
  71.    * Initializes the scheduler
  72.    */
  73.   virtual void init ();
  74.   /**
  75.    * Called when a timer expires
  76.    * @param The timer ID
  77.    */
  78.   virtual void expire (timer_id id);
  79.   /**
  80.    * Return the Mac layer
  81.    */
  82.   inline Mac802_16 *  getMac () { return mac_;}
  83.     
  84.   /**
  85.    * Start a new DL subframe
  86.    */
  87.   virtual void start_dlsubframe ();
  88.   /**
  89.    * Start a new UL subframe
  90.    */
  91.   virtual void start_ulsubframe ();
  92. protected:
  93.   /**
  94.    * Transfert the packets from the given connection to the given burst
  95.    * @param con The connection
  96.    * @param b The burst
  97.    * @param duration The current occupation of the burst
  98.    * @return the new burst occupation
  99.    */
  100.   int transfer_packets (Connection *c, Burst *b, int duration);
  101.   /**
  102.    * The Mac layer
  103.    */
  104.   Mac802_16 * mac_;
  105.   
  106.   /**
  107.    * Packets scheduled to be send this frame
  108.    */
  109.   PacketQueue queue_;
  110.   /** 
  111.    * The map of the frame
  112.    */
  113.   FrameMap *map_;
  114.   /**
  115.    * Timer used to mark the begining of downlink subframe (i.e new frame)
  116.    */
  117.   DlTimer *dl_timer_;
  118.   /**
  119.    * Timer used to mark the begining of uplink subframe
  120.    */
  121.   UlTimer *ul_timer_;
  122.   /**
  123.    * Database of neighboring BS
  124.    */
  125.   NeighborDB *nbr_db_;
  126. private:
  127. };
  128. #endif //SCHEDULER_H