⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fred.h

📁 里面包含fred,util,csfq这三种演算法的程式码,适用于NS2开发环境
💻 H
字号:
/* * Copyright (c) 1990-1997 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the Computer Systems *	Engineering Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used *    to endorse or promote products derived from this software without *    specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* *  This is a FRED implementation heavly based on the RED code (red.cc, red.h) *  found in ns-2 version 2.0. The differences from red.h are highlighted *  by comments containing "FRED" word.  *  Contact: Ion Stoica (istoica@cs.cmu.edu) * * @(#) $Header: /afs/cs/project/cmcl-ns2/NetBSD1.2.1/ns-allinone/ns-2/RCS/fred.h,v 1.2 1998/09/12 16:44:18 istoica Exp istoica $ (LBL) */#ifndef ns_fred_h#define ns_fred_h#include <math.h>#include <string.h>#include <sys/types.h>#include "queue.h"#include "tclcl.h"#include "packet.h"#include "random.h"#include "flags.h"#include "delay.h"#define MAXFLOWS 200#define MINQ     2// #define SRCID /* use penalty box in conjucntion with CSFQ *//* * Early drop parameters, supplied by user */struct edp {  /*   * User supplied.   */  int mean_pktsize;	/* avg pkt size, linked into Tcl */  int bytes;		/* true if queue in bytes, false if packets */  int wait;		/* true for waiting between dropped packets */  int setbit;		/* true to set congestion indication bit */    double th_min;	/* minimum threshold of average queue size */  double th_max;	/* maximum threshold of average queue size */  double max_p_inv;	/* 1/max_p, for max_p = maximum prob.  */  double q_w;		/* queue weight */				     /*   * Computed as a function of user supplied paramters.   */  double ptc;		/* packet time constant in packets/second */  int adjusted_for_bytes_;      /* adjusted for byte-counting					 instead of packet-counting */};/* * Early drop variables, maintained by FRED */struct edv {  float v_ave;		/* average queue size */  float v_slope;		/* used in computing average queue size */  float v_r;			  float v_prob;		/* prob. of packet drop */  float v_prob1;		/* prob. of packet drop before "count". */  float v_a;		/* v_prob = v_a * v_ave + v_b */  float v_b;  int count;		/* # of packets since last drop */  int count_bytes;	/* # of bytes since last drop */  int old;		/* 0 when average queue first exceeds thresh */};struct flowState {  /* FRED */  int qlen;         /* FRED */  int strike;       /* FRED */  int present;      /* FRED */};                  /* FRED */class FREDQueue : public Queue { public:	  FREDQueue(); protected:  int command(int argc, const char*const* argv);  void enque(Packet* pkt);  virtual Packet *pickPacketToDrop();  Packet* deque();  void reset();  void run_estimator(int nqueued, int m);  void plot();  void plot1(int qlen);  int drop_early(Packet* pkt);#ifdef SRCID  int getId(int src);#endif   void check();                      /* FRED */  void reset_flow_state(int flowId); /* FRED */    LinkDelay* link_;  /* outgoing link */  int fifo_;	     /* fifo queue? */  PacketQueue *q_;   /* underlying FIFO queue */    int bcount_;	/* byte count */  int qib_;	/* bool: queue measured in bytes? */  NsObject* de_drop_;	/* drop_early target */    /*   * Static state.   */  int drop_tail_;  edp edp_;  int doubleq_;	   /* for experiments with priority for small packets */  int dqthresh_;   /* for experiments with priority for small packets */  int many_flows_; /* specifies the mode in which FRED works */  /*   * Dynamic state.   */  int idle_;  double idletime_;  edv edv_;  void print_edp();  void print_edv();  flowState fs_[MAXFLOWS];  /* FRED - per-flow state*/#ifdef SRCID  int         hashid_[MAXFLOWS];#endif  int       maxq;           /* FRED - maximum allowed per-flow queue size*/  int       nactive;        /* FRED - number of active flows */  int       off_ip_;        /* FRED */};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -