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

网络

开发平台:

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 SSSCHEDULER_H
  19. #define SSSCHEDULER_H
  20. #include "wimaxscheduler.h"
  21. /** The state of the scheduler */
  22. enum ss_sched_state {
  23.   NORMAL,           //Normal state
  24.   SCAN_PENDING,     //Normal period but pending scanning to start/resume
  25.   SCANNING,         //Currently scanning
  26.   HANDOVER_PENDING, //Normal state but handover to start
  27.   HANDOVER          //Executing handover
  28. };
  29. /** Data structure to store scanning information */
  30. struct scanning_structure {
  31.   struct mac802_16_mob_scn_rsp_frame *rsp; //response from BS
  32.   struct sched_state_info scan_state;     //current scanning state
  33.   struct sched_state_info normal_state;   //backup of normal state
  34.   int iteration;                          //current iteration
  35.   WimaxScanIntervalTimer *scn_timer_;     //timer to notify end of scanning period
  36.   int count;                              //number of frame before switching to scanning  
  37.   ss_sched_state substate;
  38.   NeighborEntry *nbr; //current neighbor during scanning or handover
  39.   //arrays of rdv timers
  40.   WimaxRdvTimer *rdv_timers[2*MAX_NBR];
  41.   int nb_rdv_timers;
  42.   //handoff information
  43.   int serving_bsid;
  44.   int handoff_timeout; //number frame to wait before executing handoff
  45. };
  46. /**
  47.  * Class SSscheduler
  48.  * Scheduler for SSs
  49.  */ 
  50. class SSscheduler : public WimaxScheduler {
  51.   friend class Mac802_16;
  52.  public:
  53.   /**
  54.    * Create a scheduler
  55.    */
  56.   SSscheduler ();
  57.   /**
  58.    * Interface with the TCL script
  59.    * @param argc The number of parameter
  60.    * @param argv The list of parameters
  61.    */
  62.   int command(int argc, const char*const* argv);
  63.   /**
  64.    * Process a packet received by the Mac. Only scheduling related packets should be sent here (BW request, UL_MAP...)
  65.    * @param p The packet to process
  66.    */
  67.   void  process (Packet * p);
  68.   /**
  69.    * Return the type of STA this scheduler is good for
  70.    */
  71.   virtual station_type_t getNodeType ();
  72.   /**
  73.    * Initializes the scheduler
  74.    */
  75.   virtual void init ();
  76.   /**
  77.    * Called when a timer expires
  78.    * @param The timer ID
  79.    */
  80.   virtual void expire (timer_id id);
  81.   /**
  82.    * Start a new DL subframe
  83.    */
  84.   virtual void start_dlsubframe ();
  85.   /**
  86.    * Start a new UL subframe
  87.    */
  88.   virtual void start_ulsubframe ();
  89.  protected:
  90.   /**
  91.    * Called when lost synchronization
  92.    */
  93.   void lost_synch ();
  94.   /**
  95.    * Send a scanning message to the serving BS
  96.    */
  97.   void send_scan_request ();
  98.  private:
  99.   /**
  100.    * Process a DL_MAP message
  101.    * @param frame The dl_map information
  102.    */
  103.   void process_dl_map (mac802_16_dl_map_frame *frame);
  104.   /**
  105.    * Process a DCD message
  106.    * @param frame The dcd information
  107.    */
  108.   void process_dcd (mac802_16_dcd_frame *frame);
  109.   /**
  110.    * Process a uL_MAP message
  111.    * @param frame The ul_map information
  112.    */
  113.   void process_ul_map (mac802_16_ul_map_frame *frame);
  114.   /**
  115.    * Process a UCD message
  116.    * @param frame The ucd information
  117.    */
  118.   void process_ucd (mac802_16_ucd_frame *frame);
  119.   /**
  120.    * Process a ranging response message 
  121.    * @param frame The ranging response frame
  122.    */
  123.   void process_ranging_rsp (mac802_16_rng_rsp_frame *frame);
  124.   
  125.   /**
  126.    * Process a registration response message 
  127.    * @param frame The registration response frame
  128.    */
  129.   void process_reg_rsp (mac802_16_reg_rsp_frame *frame);
  130.   /**
  131.    * Schedule a ranging
  132.    */
  133.   void init_ranging ();
  134.   /**
  135.    * Create a request for the given connection
  136.    * @param con The connection to check
  137.    */
  138.   void create_request (Connection *con);
  139.   /**
  140.    * Prepare to send a registration message
  141.    */
  142.   void send_registration ();
  143.   /**
  144.    * Process a scanning response message 
  145.    * @param frame The scanning response frame
  146.    */
  147.   void process_scan_rsp (mac802_16_mob_scn_rsp_frame *frame);  
  148.   /**
  149.    * Process a BSHO-RSP message 
  150.    * @param frame The handover response frame
  151.    */
  152.   void process_bsho_rsp (mac802_16_mob_bsho_rsp_frame *frame);  
  153.   /**
  154.    * Process a BSHO-RSP message 
  155.    * @param frame The handover response frame
  156.    */
  157.   void process_nbr_adv (mac802_16_mob_nbr_adv_frame *frame);  
  158.   /**
  159.    * Start/Continue scanning
  160.    */
  161.   void resume_scanning ();
  162.   /**
  163.    * Pause scanning
  164.    */
  165.   void pause_scanning ();
  166.   /**
  167.    * Send a MSHO-REQ message to the BS
  168.    */
  169.   void send_msho_req ();
  170.   /**
  171.    * Check rdv point when scanning
  172.    */
  173.   void check_rdv ();
  174.   /**
  175.    * Current number of registration retry
  176.    */
  177.   u_int32_t nb_reg_retry_;
  178.   /**
  179.    * Current number of scan request retry
  180.    */
  181.   u_int32_t nb_scan_req_;
  182.   /**
  183.    * Timers
  184.    */
  185.   WimaxT1Timer  *t1timer_;
  186.   WimaxT2Timer  *t2timer_;
  187.   WimaxT6Timer  *t6timer_;
  188.   WimaxT12Timer *t12timer_;
  189.   WimaxT21Timer *t21timer_;
  190.   WimaxLostDLMAPTimer *lostDLMAPtimer_;
  191.   WimaxLostULMAPTimer *lostULMAPtimer_;
  192.   WimaxT44Timer *t44timer_;
  193.   /** 
  194.    * The scanning information
  195.    */
  196.   struct scanning_structure *scan_info_;
  197.   /**
  198.    * Indicate if the ranging response is for a fast ranging
  199.    */
  200.   bool fast_ranging_;
  201.   
  202. };
  203. #endif //SSSCHEDULER_H