queuehandle.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2001 University of Southern California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *      This product includes software developed by the Information Sciences
  16.  *      Institute of the University of Southern California.
  17.  * 4. Neither the name of the University nor of the Institute may be used
  18.  *    to endorse or promote products derived from this software without
  19.  *    specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  */
  34. #ifndef nam_queuehandle_h
  35. #define nam_queuehandle_h
  36. #include <tclcl.h>
  37. #include "animation.h"
  38. class QueueHandle : public Animation, public TclObject {
  39. public:
  40.   QueueHandle(const char * type, int id, double _size);
  41.   QueueHandle(Edge * edge);
  42.   inline int number() {return number_;}
  43.   virtual int classid() const { return ClassQueueHandleID; }
  44.   inline const char * name() const {return (ns_type_);}
  45.   virtual void reset(double);
  46.   void attachTo(Edge * edge);
  47.   void clearEdge();
  48.   Edge * getEdge() {return edge_;}
  49.   inline double x() const {return x_;}
  50.   inline double y() const {return y_;}
  51.   inline double width() const {return width_;}
  52.   inline double height() const {return height_;}
  53.  
  54.   void setWidth(double w) {width_ = w;}
  55.   void setHeight(double h) {height_ = h;}
  56.   void place();
  57.   const char* info() const;
  58.   void setType(const char * type);
  59.   void setLimit(int limit) {limit_ = limit;}
  60.   void setSecondsPerByte(double spb) {secsPerByte_ = spb;}
  61.   void setMaxQueue(int max) {maxqueue_ = max;}
  62.   void setBuckets(int buckets) {buckets_ = buckets;}
  63.   void setSharedBufferSize(int b) {blimit_ = b;}
  64.   void setQuantum(int quantum) {quantum_ = quantum;}
  65.   void setMask(bool mask) {mask_ = mask;}
  66.   void setBytes(bool bytes) {bytes_ = bytes;}
  67.   void setQueueInBytes(bool qib) {queue_in_bytes_ = qib;}
  68.   void setThreshold (double min ) {thresh_ = min;}
  69.   void setMaximumThreshold(double max ) {maxthresh_ = max;}
  70.   void setMeanPacketSize(int mean ) {mean_pktsize_ = mean;}
  71.   void setQueueWeight(double weight ) {q_weight_ = weight;}
  72.   void setWaitInterval(bool wait ) {wait_ = wait;}
  73.   void setLinterm(double linterm) {linterm_ = linterm;}
  74.   void setBitMarking(bool bitmarking) {setbit_ = bitmarking;}
  75.   void setREDDropTail(bool droptail) {drop_tail_ = droptail;}
  76.   virtual double distance(double x, double y) const;
  77.   void color(const char* name);
  78.   virtual void size(double s);
  79.   inline double size() const {return (size_);}
  80.   int inside(double, float, float) const;
  81.   virtual void update_bb();
  82.   virtual void draw(View * view, double now);
  83.   int writeNsScript(FILE *file);
  84.   const char * property();
  85.   const char * getProperties(char * type); 
  86.   int command(int argc, const char * const * argv);
  87. private:
  88.   void setDefaults(); 
  89. public:
  90.   QueueHandle * next_queue_handle_;  // Used by editornetmodel to track
  91.   Edge * edge_;
  92. protected:
  93.   int number_;
  94.   double width_;
  95.   double height_;
  96.   double x_, y_;
  97.   double angle_;
  98.   double size_;
  99.   char * color_;
  100.   char * type_;
  101.   char * ns_type_;
  102.   // DropTail
  103.   int limit_;  // max queue size
  104.   // FairQueue (FQ)
  105.   double secsPerByte_;
  106.   //StocasticFairQueue (SFQ)
  107.   int maxqueue_;
  108.   int buckets_;
  109.   // DeficitRoundRobin (DRR)
  110.   // buckets_ - the total number of bucket to used for hashing of flows
  111.   int blimit_;  // shared buffer size in bytes
  112.   int quantum_; // how much each flow can send during it's turn (bytes)
  113.   bool mask_; // if true then a flow is determined by having the same node
  114.              // ids (traffic betweeen nodes is one flow) otherwise flows 
  115.              // have both the same node ids and the same port ids
  116.  
  117.   // Random Early Detection gatways (RED)
  118.   bool bytes_; // Set to true to enable "byte-mode" RED where the size 
  119.                // of arriving packets affect the likelihood of marking
  120.                // (dropping) packets
  121.   bool queue_in_bytes_; // set to true to measure the average queue size 
  122.                         // in bytes rather than packets
  123.   double thresh_; // minimum threshold for the average queue size in packets
  124.   double maxthresh_; // maximum threshhold for the average queue size in packets
  125.   int mean_pktsize_; // a rough estimate of the average packet size in bytes
  126.   double q_weight_; // used in exponential average queue size for
  127.                     // calculating the average queue size
  128.   bool wait_; // set to true to maintain an interval between dropped packets
  129.   double linterm_; // maximum drop probability = 1/linterm
  130.   bool setbit_; // Set to true to mark packets by setting the congestion
  131.                 // indication bit in packet headers rather than drop packets
  132.   bool drop_tail_; // set to true to use drop tail rather than random drop
  133.                    // when the queue overflows or the average queue size
  134.                    // exceeds maxthresh_
  135.            
  136.   
  137.   
  138. };
  139. #endif