contentionslot.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 CONTENTIONSLOT_H
  19. #define CONTENTIONSLOT_H
  20. #include "packet.h"
  21. #include "queue.h"
  22. #include "contentiontimer.h"
  23. class FrameMap;
  24. /**
  25.  * This class contains information about a contention slot
  26.  */
  27. class ContentionSlot
  28. {
  29.   friend class ContentionRequest;
  30.  public:
  31.   /*
  32.    * Creates a contention slot for the given frame
  33.    * @param frame The frame map 
  34.    */
  35.   ContentionSlot (FrameMap *map);
  36.   
  37.   /**
  38.    * Destructor
  39.    */
  40.   virtual ~ContentionSlot();
  41.   /*
  42.    * Return the initial contention slot window size
  43.    * @return the initial contention slot window size
  44.    */
  45.   inline int getBackoff_start( ) { return backoff_start_; }
  46.   /*
  47.    * Return the final contention slot window size
  48.    * @return the final contention slot window size 
  49.    */
  50.   inline int getBackoff_stop( ) { return backoff_stop_; }
  51.   /*
  52.    * Return the opportunity size
  53.    * @return the opportunity size
  54.    */
  55.   inline int getSize( ) { return size_; }
  56.   /*
  57.    * Set the initial contention slot window size
  58.    * @param backoff_start the initial contention slot window size
  59.    */
  60.   void setBackoff_start( int backoff_start );
  61.   /*
  62.    * Set the final contention slot window size
  63.    * @param backoff_stop the final contention slot window size 
  64.    */
  65.   void setBackoff_stop( int backoff_stop );
  66.   /*
  67.    * Set the opportunity size
  68.    * @param size The opportunity size
  69.    */
  70.   inline void setSize( int size ) { size_ = size; }
  71.   
  72.   /**
  73.    * Resume the timers for the requests
  74.    */
  75.   virtual void resumeTimers ();
  76.   
  77.   /**
  78.    * Pause the timers for the requests
  79.    */
  80.   virtual void pauseTimers ();
  81.  protected:
  82.     /**
  83.    * The frame map where this contention slot is located
  84.    */
  85.   FrameMap *map_;
  86.   /**
  87.    * Initial backoff window size. Must be power of 2
  88.    */
  89.   int backoff_start_;
  90.   
  91.   /**
  92.    * Final backoff window size
  93.    */
  94.   int backoff_stop_;
  95.   
  96.   /**
  97.    * The duration in PS of the contention slot
  98.    */
  99.   int size_;
  100.  private:
  101.   
  102. };
  103. /**
  104.  * Subclass used for ranging contention slot
  105.  */
  106. class RngContentionSlot: public ContentionSlot {
  107.   friend class RngContentionTimer;
  108.  public:
  109.   /*
  110.    * Creates a contention slot for the given frame
  111.    * @param frame The frame map 
  112.    */
  113.   RngContentionSlot (FrameMap *map);
  114.   /**
  115.    * Destructor
  116.    */
  117.   virtual ~RngContentionSlot();
  118.   /*
  119.    * Add a ranging request
  120.    * @param p The packet to be sent during the ranging opportunity
  121.    */
  122.   void addRequest (Packet *p);
  123.   /*
  124.    * Remove the pending request
  125.    */
  126.   void removeRequest ();
  127.   
  128.   /**
  129.    * Resume the timers for the requests
  130.    */
  131.   void resumeTimers ();
  132.   /**
  133.    * Pause the timers for the requests
  134.    */
  135.   void pauseTimers ();
  136.  private:
  137.   RangingRequest *request_;
  138. };
  139. /**
  140.  * Subclass used for ranging contention slot
  141.  */
  142. class BwContentionSlot: public ContentionSlot {
  143.  public:
  144.   /*
  145.    * Creates a contention slot for the given frame
  146.    * @param frame The frame map 
  147.    */
  148.   BwContentionSlot (FrameMap *map);
  149.   /**
  150.    * Destructor
  151.    */
  152.   virtual ~BwContentionSlot();
  153.   /*
  154.    * Add a bandwidth request
  155.    * @param p The packet to be sent during the ranging opportunity
  156.    * @param cid The CID of the bandwidth request
  157.    * @param len The size in bytes of the bandwidth request
  158.    */
  159.   void addRequest (Packet *p, int cid, int len);
  160.   /*
  161.    * Remove the pending request
  162.    */
  163.   void removeRequest (int cid);  
  164.   /*
  165.    * Remove all pending reuquest
  166.    */
  167.   void removeRequests ();
  168.   /*
  169.    * Get the request for the given CID
  170.    * @param cid The CID for the request
  171.    */
  172.   BwRequest * getRequest (int cid);
  173.   /**
  174.    * Resume the timers for the requests
  175.    */
  176.   void resumeTimers ();
  177.   /**
  178.    * Pause the timers for the requests
  179.    */
  180.   void pauseTimers ();
  181.  private:
  182.   struct contentionRequest request_list_;
  183. };
  184. #endif