⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsscheduler.h

📁 This documentation is based on the following versions:- pre-release of the wimax model developed by
💻 H
字号:
/* This software was developed at the National Institute of Standards and * Technology by employees of the Federal Government in the course of * their official duties. Pursuant to title 17 Section 105 of the United * States Code this software is not subject to copyright protection and * is in the public domain. * NIST assumes no responsibility whatsoever for its use by other parties, * and makes no guarantees, expressed or implied, about its quality, * reliability, or any other characteristic. * <BR> * We would appreciate acknowledgement if the software is used. * <BR> * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING * FROM THE USE OF THIS SOFTWARE. * </PRE></P> * @author  rouil */#ifndef BSSCHEDULER_H#define BSSCHEDULER_H#include "wimaxscheduler.h"#include "scanningstation.h"#define INIT_DL_DURATION 20 //enough for DL_MAP, UL_MAP, DCD, UCD and some RNG-RSP#define MIN_CONTENTION_SIZE 5 //minimum number of opportunity for allocation/** Information about a new client */struct new_client_t {  int cid; //primary cid of new client  new_client_t *next;};class T17Element;LIST_HEAD (t17element, T17Element);/** Object to handle timer t17 */class T17Element { public:  T17Element (Mac802_16 *mac, int index) {    index_ = index;    timer = new WimaxT17Timer (mac, index);    timer->start (mac->macmib_.t17_timeout);  }  ~T17Element () { delete (timer); }  int index () { return index_; }  int paused () { return timer->paused(); }  void cancel () { timer->stop(); }  // Chain element to the list  inline void insert_entry(struct t17element *head) {    LIST_INSERT_HEAD(head, this, link);  }    // Return next element in the chained list  T17Element* next_entry(void) const { return link.le_next; }  // Remove the entry from the list  inline void remove_entry() {     LIST_REMOVE(this, link);   } protected:    /*   * Pointer to next in the list   */  LIST_ENTRY(T17Element) link;  //LIST_ENTRY(T17Element); //for magic draw private:  int index_;  WimaxT17Timer *timer;};class FastRangingInfo;LIST_HEAD (fastRangingInfo, FastRangingInfo);/** Store information about a fast ranging request to send */class FastRangingInfo { public:  FastRangingInfo (int frame, int macAddr) {    frame_ = frame;    macAddr_ = macAddr;  }  int frame () { return frame_; }  int macAddr () { return macAddr_; }  // Chain element to the list  inline void insert_entry(struct fastRangingInfo *head) {    LIST_INSERT_HEAD(head, this, link);  }    // Return next element in the chained list  FastRangingInfo* next_entry(void) const { return link.le_next; }  // Remove the entry from the list  inline void remove_entry() {     LIST_REMOVE(this, link);   } protected:    /*   * Pointer to next in the list   */  LIST_ENTRY(FastRangingInfo) link;  //LIST_ENTRY(FastRangingInfo); //for magic draw private:  int frame_;  int macAddr_;};class WimaxCtrlAgent;/** * Class BSScheduler * Implement the packet scheduler on the BS side */ class BSScheduler : public WimaxScheduler {  //friend class SendTimer; public:  /*   * Create a scheduler   */  BSScheduler ();  /*   * Interface with the TCL script   * @param argc The number of parameter   * @param argv The list of parameters   */  int command(int argc, const char*const* argv);      /**   * Process a packet received by the Mac. Only scheduling related packets should be sent here (BW request, UL_MAP...)   * @param p The packet to process   */  void  process (Packet * p);  /**   * Return the type of STA this scheduler is good for   */  virtual station_type_t getNodeType ();  /**   * Initializes the scheduler   */  virtual void init ();   /**   * Called when a timer expires   * @param The timer ID   */  virtual void expire (timer_id id);  /**   * Start a new DL subframe   */  virtual void start_dlsubframe ();  /**   * Start a new UL subframe   */  virtual void start_ulsubframe ();  /**    * Finds out if the given station is currently scanning   * @param nodeid The MS id   */  bool isPeerScanning (int nodeid);  /**   * Set the control agent   * @param agent The control agent   */  void setCtrlAgent (WimaxCtrlAgent *agent);  /** Add a new Fast Ranging allocation   * @param time The time when to allocate data   * @param macAddr The MN address   */  void addNewFastRanging (double time, int macAddr);  /**   * Send a scan response to the MN   * @param rsp The response from the control   * @cid The CID for the MN   */  void send_scan_response (mac802_16_mob_scn_rsp_frame *rsp, int cid); protected:  /**   * Default modulation    */  Ofdm_mod_rate default_mod_;  /**   * Number of transmission opportunity for initial ranging   * and bw request (i.e contention slots)   */  int contention_size_;   /**   * Compute and return the bandwidth request opportunity size   * @return The bandwidth request opportunity size   */  int getBWopportunity ();  /**   * Compute and return the initial ranging opportunity size   * @return The initial ranging opportunity size   */  int getInitRangingopportunity ();   private:  /**   * Process a RNG-REQ message   * @param frame The ranging request information   */  void process_ranging_req (Packet *p);  /**   * Process bandwidth request   * @param p The request   */  void process_bw_req (Packet *p);  /**   * Process bandwidth request   * @param p The request   */  void process_reg_req (Packet *p);  /**   * Process handover request   * @param req The request   */  void process_msho_req (Packet *req);   /**   * Process handover indication   * @param p The indication   */  void process_ho_ind (Packet *p);   /**   * Send a neighbor advertisement message   */  void send_nbr_adv ();  /**   * Add a new timer 17 for client   * @param index The client address   */  void addtimer17 (int index);    /**   * Cancel and remove the timer17 associated with the node   * @param index The client address   */  void removetimer17 (int index);  struct new_client_t *cl_head_;  struct new_client_t *cl_tail_;  struct t17element t17_head_;  /**   * The index of the last SS that had bandwidth allocation   */  int bw_node_index_;    /**   * The node that had the last bandwidth allocation   */  PeerNode *bw_peer_;   /**   * Timer for DCD   */  WimaxDCDTimer *dcdtimer_;   /**   * Timer for UCD   */  WimaxUCDTimer *ucdtimer_;  /**   * Timer for MOB-NBR_ADV messages   */  WimaxMobNbrAdvTimer *nbradvtimer_;  /**   * Indicates if it is time to send a DCD message   */  bool sendDCD;  int dlccc_;  bool sendUCD;  int ulccc_;    /**    * List of station in scanning    */  struct scanningStation scan_stations_;  /**   * The Wimax control for BS synchronization   */  WimaxCtrlAgent *ctrlagent_;  /**   * List of the upcoming Fast Ranging allocation    */  struct fastRangingInfo fast_ranging_head_;};#endif //BSSCHEDULER_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -