serviceflow.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 SERVICEFLOW_H
  19. #define SERVICEFLOW_H
  20. #include "serviceflowqos.h"
  21. //#include "connection.h"
  22. #include "packet.h"
  23. #define UNASSIGNED_FLOW_ID -1
  24. /** Defines the supported scheduling mechanism for the flow */
  25. enum SchedulingType_t {
  26.   SERVICE_UGS,
  27.   SERVICE_rtPS,
  28.   SERVICE_nrtPS,
  29.   SERVICE_BE
  30. };
  31. class ServiceFlow;
  32. LIST_HEAD (serviceflow, ServiceFlow);
  33. /**
  34.  * Class ServiceFlow
  35.  * The service flow identifies the service requirement 
  36.  * for the associated connection 
  37.  */ 
  38. class ServiceFlow {
  39.  public:
  40.   /**
  41.    * Constructor
  42.    */
  43.   ServiceFlow (SchedulingType_t, ServiceFlowQoS*);
  44.   /**
  45.    * Return the service flow id
  46.    * @return The service flow id. -1 if not yet assigned
  47.    */
  48.   inline int getID () { return id_; }
  49.   
  50.   /**
  51.    * Assign an ID to the service flow
  52.    * @param id The ID to set
  53.    */
  54.   void setID (int id);
  55.   /**
  56.    * Pick the next available ID. Should be called by a BS to assign a unique ID
  57.    */
  58.   void pickID ();
  59.   /**
  60.    * Set the scheduling mechanism for this flow
  61.    * @param scheduling The scheduling type
  62.    */
  63.   inline void setScheduling (SchedulingType_t scheduling) {scheduling_ = scheduling;}
  64.   
  65.   /**
  66.    * Return the scheduling type for this service flow
  67.    */
  68.   inline SchedulingType_t getScheduling () { return scheduling_; }
  69.   
  70.   /**
  71.    * Set the QoS for this flow
  72.    * @param qos The new QoS for this flow
  73.    */
  74.   inline void setQoS (ServiceFlowQoS* qos) { qos_ = qos; }
  75.   /**
  76.    * Return the QoS for this connection
  77.    */
  78.   inline ServiceFlowQoS * getQoS () { return qos_; }
  79.   
  80.   // Chain element to the list
  81.   inline void insert_entry_head(struct serviceflow *head) {
  82.     LIST_INSERT_HEAD(head, this, link);
  83.   }
  84.   
  85.   // Chain element to the list
  86.   inline void insert_entry(ServiceFlow *elem) {
  87.     LIST_INSERT_AFTER(elem, this, link);
  88.   }
  89.   // Return next element in the chained list
  90.   ServiceFlow* next_entry(void) const { return link.le_next; }
  91.   // Remove the entry from the list
  92.   inline void remove_entry() { 
  93.     LIST_REMOVE(this, link); 
  94.   }
  95.  protected:
  96.   /**
  97.    * Pointer to next in the list
  98.    */
  99.   LIST_ENTRY(ServiceFlow) link;
  100.   //LIST_ENTRY(ServiceFlow); //for magic draw
  101.  private:
  102.   /**
  103.    * The service flow id
  104.    */
  105.    int id_;
  106.   /**
  107.    * The scheduling type (UGS, rtPS...)
  108.    */
  109.    SchedulingType_t scheduling_;
  110.    /**
  111.     * Flow direction
  112.     */
  113.    int direction_;
  114.    /**
  115.     * The quality of service for this flow
  116.     */
  117.    ServiceFlowQoS * qos_;
  118. };
  119. #endif //SERVICEFLOW_H