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

网络

开发平台:

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 CONTENTIONREQUEST_H
  19. #define CONTENTIONREQUEST_H
  20. #include "mac802_16.h"
  21. #include "mac802_16timer.h"
  22. class ContentionSlot;
  23. class ContentionTimer;
  24. class Mac802_16;
  25. class ContentionRequest;
  26. /** Timer for backoff */
  27. class WimaxBackoffTimer : public WimaxTimer {
  28.  public:
  29.   WimaxBackoffTimer(ContentionRequest *c, Mac802_16 *m) : WimaxTimer(m) {c_=c;}
  30.   
  31.   void handle(Event *e);
  32.   void pause(void);
  33.   void resume(void);
  34.  private:
  35.   ContentionRequest *c_;
  36. }; 
  37. class ContentionRequest;
  38. LIST_HEAD (contentionRequest, ContentionRequest);
  39. /**
  40.  * This class is used to manage contention opportunities
  41.  * supports list
  42.  */
  43. class ContentionRequest
  44. {
  45.   friend class WimaxBackoffTimer;
  46.  public:
  47.   /**
  48.    * Creates a contention slot for the given frame
  49.    * @param s The contention slot 
  50.    * @param p The packet to send
  51.    */
  52.   ContentionRequest (ContentionSlot *s, Packet *p);
  53.   virtual ~ContentionRequest ();
  54.   /**
  55.    * Called when timeout expired
  56.    */
  57.   virtual void expire ();
  58.   /**
  59.    * Start the timeout timer
  60.    */
  61.   void starttimeout();
  62.   /** 
  63.    * Pause the backoff timer
  64.    */
  65.   void pause ();
  66.   
  67.   /**
  68.    * Resume the backoff timer
  69.    */
  70.   void resume ();
  71.   /// Chain element to the list
  72.   inline void insert_entry_head(struct contentionRequest *head) {
  73.     LIST_INSERT_HEAD(head, this, link);
  74.   }
  75.   
  76.   /// Chain element to the list
  77.   inline void insert_entry(ContentionRequest *elem) {
  78.     LIST_INSERT_AFTER(elem, this, link);
  79.   }
  80.   /// Return next element in the chained list
  81.   ContentionRequest* next_entry(void) const { return link.le_next; }
  82.   /// Remove the entry from the list
  83.   inline void remove_entry() { 
  84.     LIST_REMOVE(this, link); 
  85.   }
  86.  protected:
  87.   /**
  88.    * The contention slot information
  89.    */
  90.   ContentionSlot *s_;
  91.   /**
  92.    * The backoff timer
  93.    */
  94.   WimaxBackoffTimer *backoff_timer_;
  95.   /**
  96.    * The timeout timer
  97.    */
  98.   ContentionTimer *timeout_timer_;
  99.   /**
  100.    * Type of timer
  101.    */
  102.   timer_id type_; 
  103.   /**
  104.    * Value for timeout
  105.    */
  106.   double timeout_;
  107.   /**
  108.    * The current window size
  109.    */
  110.   int window_;
  111.   /**
  112.    * Number of retry
  113.    */
  114.   int nb_retry_;
  115.   /** 
  116.    * The scheduler to inform about timeout
  117.    */
  118.   Mac802_16 *mac_;
  119.   /**
  120.    * The packet to send when the backoff expires
  121.    */
  122.   Packet *p_;
  123.   /**
  124.    * Pointer to next in the list
  125.    */
  126.   LIST_ENTRY(ContentionRequest) link;
  127.   //LIST_ENTRY(ContentionRequest); //for magic draw
  128. };
  129. /**
  130.  * Class to handle ranging opportunities
  131.  */
  132. class RangingRequest: public ContentionRequest 
  133. {
  134.  public:
  135.   /**
  136.    * Creates a contention slot for the given frame
  137.    * @param frame The frame map 
  138.    */
  139.   RangingRequest (ContentionSlot *s, Packet *p);
  140.   /**
  141.    * Called when timeout expired
  142.    */
  143.   void expire ();
  144.  private:
  145. };
  146. /**
  147.  * Class to handle bandwidth request opportunities
  148.  */
  149. class BwRequest: public ContentionRequest 
  150. {
  151.  public:
  152.   /**
  153.    * Creates a contention slot for the given frame
  154.    * @param frame The frame map 
  155.    */
  156.   BwRequest (ContentionSlot *s, Packet *p, int cid, int length);
  157.   /**
  158.    * Called when timeout expired
  159.    */
  160.   void expire ();
  161.   /**
  162.    * Return the CID for this request
  163.    * @return the CID for this request
  164.    */
  165.   inline int getCID () { return cid_; }
  166.  private:
  167.   /**
  168.    * The CID for the request
  169.    */
  170.   int cid_;
  171.   /**
  172.    * The size in bytes of the bandwidth requested
  173.    */
  174.   int size_;
  175. };
  176. #endif