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

📄 wfqaggreg.cc

📁 c++编写的ns环境下关于wfq算法的仿真源代码
💻 CC
字号:
/* * Copyright (c) 1999-2000 Paolo Losi (p.losi@hypersonic.it) * * Copyright (c) 2001-2004 Paolo Losi (p.losi@hypersonic.it) *                         Alexander Sayenko (sayenko@cc.jyu.fi) * * All rights reserved * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. */#include "wfqclassifier.h"#include <map>static class NS2WFQAggregClassifier : public TclClass {  public:    NS2WFQAggregClassifier() : TclClass("WFQAggregClassifier") {};    TclObject* create(int,const char*const*)       { return(new WFQAggregClassifier); };} class_wfqsampleclassifier;WFQAggregClassifier::WFQAggregClassifier() {	min_weight=10e+10;}int WFQAggregClassifier::command(int argc,const char*const* argv) {  Tcl& tcl = Tcl::instance ();   if (argc == 3)    {      if (!strcmp (argv[1],"getweight"))        {	  int queueid = 0;          queueid = atoi (argv[2]);	  std::map<unsigned int, WFQClass*>::iterator i =             mWFQClasses.find (queueid);          if (i != mWFQClasses.end()) {            tcl.resultf ("%lf",i->second->mWeight);            return TCL_OK;          }                    return TCL_ERROR;        }    }  if (argc == 4)     {      if(!strcmp(argv[1],"setweight"))          {	 double weight;	 int queueid,success = 0;         success += sscanf(argv[2],"%d",&queueid);         success += sscanf(argv[3],"%lf",&weight);         if(success==2)             {            WFQClass* wfq_class;	    std::map<unsigned int, WFQClass*>::iterator i =              mWFQClasses.find (queueid);            if (i == mWFQClasses.end()) {              wfq_class = new WFQClass (queueid);              mWFQClasses[queueid] = wfq_class;            }            else wfq_class = i->second;            wfq_class->mWeight = weight;            min_weight = (min_weight < weight) ? min_weight : weight;            return TCL_OK;           }        return TCL_ERROR;         } // end of setweight      if(!strcmp(argv[1],"setqueue"))         {	 int queueid,flowid,success=0;         success += sscanf(argv[2],"%d",&flowid);         success += sscanf(argv[3],"%d",&queueid);         if(success==2)            {            mFlowToClass[flowid] = queueid;            if (mWFQClasses.find(queueid) == mWFQClasses.end())              mWFQClasses[queueid] = new WFQClass (queueid);            return TCL_OK;	   }         return TCL_ERROR;	} // end of setqueue      if(!strcmp(argv[1],"setlength"))         {         int queueid,length,success = 0;         success += sscanf(argv[2],"%d",&queueid);         success += sscanf(argv[3],"%d",&length);         if(success==2)            {            WFQClass* wfq_class;	    std::map<unsigned int, WFQClass*>::iterator i =              mWFQClasses.find (queueid);            if (i == mWFQClasses.end()) {              wfq_class = new WFQClass (queueid);              mWFQClasses[queueid] = wfq_class;            }            else wfq_class = i->second;            wfq_class->mMaxLength = length;             return TCL_OK;	   }         return TCL_ERROR; 	} // end of setlenght    } // end of argc == 4  return (TclObject::command(argc, argv));}inline WFQClass* WFQAggregClassifier::get_queue(Packet *p) { hdr_ip* h = hdr_ip::access(p); std::map<unsigned int, unsigned int>::iterator i =    mFlowToClass.find(h->flowid()); if (i == mFlowToClass.end())   return NULL; return mWFQClasses[i->second];} WFQAggregClassifier::~WFQAggregClassifier(){  std::map<unsigned int, WFQClass*>::iterator i = mWFQClasses.begin ();  while (i != mWFQClasses.end()) {    delete (i->second);    i++;  }}

⌨️ 快捷键说明

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