classifier.cc-recv() [ns2.35]

 1 void Classifier::recv(Packet* p, Handler*h)//original
 2 {
 3     NsObject* node = find(p);
 4     if (node == NULL) {
 5         /*
 6          * XXX this should be "dropped" somehow.  Right now,
 7          * these events aren‘t traced.
 8          */
 9         Packet::free(p);
10         return;
11     }
12
13     node->recv(p,h);
14 }
15
16 ===============================================================================================================
17
18 int chooseECNSlot()
19 //这个函数还是改成专门筛选流的函数(筛选出需要窗口减半的流)
20 {//在打ecn的地方引入调用这个函数,通过该函数来打ECN?或者通过该函数有针对性的回调打ecn的函数。
21 //该函数需要能访问到umap以及各流的window大小。
22
23     //sort(window)其实不用。用下面的方法只需遍历一次,O(N)复杂度即可。如果sort要O(NlogN)。
24     int maxProgress=0;//初始化最大进度值maxProgress
25     int mark=-1;//用来标记选中的流s
26     for(i=1;i<=n;i++)//其实遍历slot就行!
27     {
28         if(window>2*N)//在window大于2N的流里面找进度最大的。(如何获取该流的window?)
29         {
30             if(该流的进度值(umap.second)>maxProgress)
31             {
32                 maxProgress=该进度值(umap.second);//更新maxProgress
33                 mark=i;//标记下该流的node;
34             }
35         }
36         else
37         {//如果没有window>2N的流,就选当前进度最大的流。
38
39         }
40     }
41     if(mark!=-1)
42         return mark;
43     else//没有window>2N的流
44         return mark2;
45
46 }
47
48
49
50 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
51 15.1.4 rewrite:
52
53 #include "flags.h"//里面有很多需要的变量和函数,如ce()
54 void Classifier::recv(Packet* p, Handler*h)
55 {
56     NsObject* node = find(p);//find调用classify,classify返回dport。
57     if (node == NULL) {
58         Packet::free(p);
59         return;
60     }
61     umap[node]++;//需要在classifier.h中classifier类内部定义unordered_map umap<NsObject*,long long int>。 (但是注意,当umap里有流已传输完毕后要剔除出去,否则影响排序XXXX如果不用mark2的话那就不会影响到,因为首先是按window来看的,只有window足够大才会看进度。已经传输完成的流window应该变为0吧(如果没变要记得调整))。
62
63     hdr_flags *hf=hdr_flags::access(pickPacketForECN(p));
64     if(hf->ce()==1)// 说明switch中发生了拥塞
65     {
66         hf->ce()=0;//首先清零。然后再根据算法分配ce。
67         int mark=function(筛选出需要窗口减半的流的slot下标);//该函数参照上面的chooseECNSlot
68     }
69
70     if (mark != -1 &&当前packet的dport==slot[mark])//对每一个到来的packet都检查,直到发现是mark所标记的那个。可通过portclassifier里的classify返回dport。(参照slideshare P15,为什么通过classifier类,调用的却是portclassifier里的classify ?)
71     {
72         hf->ce()=1;
73         mark = -1;//使mark失效。
74     }
75     node->recv(p,h);
76 }
时间: 2024-11-09 07:52:33

classifier.cc-recv() [ns2.35]的相关文章

在ns2.35中添加myevalvid框架

在用ns2进行网络视频通信仿真的时候,先要为我们自己的ns2添加evalvid或者myevalvid框架.其中myevalvid框架是由柯志亨老师整合evalvid和ns2之后得出的新框架,笔者建议大家安装该框架,而不要安装原生的evalvid框架.这样就可以结合柯志亨老师的<ns2仿真实验-----多媒体和无线网络通信>这本书,做配套的实验,比较方便. 网上关于myevalvid框架的安装文章很多,大家可以参考去做,笔者会在本文最后给出相关的链接.本文主要是对myevalvid框架源码中的错

ubuntu 14.04 ns2.35 ***buffer overflow detected **: ns terminated解决办法

1.按照如下教程安装 Install With Me !: How to Install NS-2.35 in Ubuntu-13.10 / 14.04 (in 4 easy steps) 2.运行一个例子程序时出现 ***buffer overflow detected **: ns terminated 3.参考现有方案出现,gcc error:4.4没有那个文件或目录 sudo apt-get intall gcc-4.4 sudo apt-get intall g++-4.4 修改tcl

在ns2.35下完成柯老师lab18实验

说明:柯志亨老师<ns2仿真实验-----多媒体和无线网络通信>这本书lab18实验为“无线网络封包传输遗失模型”的实验.该无线传输遗失模型是柯老师自己开发的,原始的ns-allinone-2.35(也包括其他版本)中是没有该模型的.所以实验的第一步就是要先为ns2.35添加该模型. 步骤: 1.将柯老师所给的ns-allinone-2.29包中ns-2.29/mac/wireless-phy.cc和ns-2.29/mac/wireless-phy.h两个文件复制到你自己安装的ns-allin

ns2.35安装过程中出现错误ns.exe找不到

cd ns-allinone-2.35/ns.2.35 ./configure make ... linkstate/ls.cc:396:28:   required from here linkstate/ls.h:137:58: 错误:'erase' was not declared in this scope, and no decl                                                                              

ubuntu16.04下安装NS-2.35以及对simple例的理解

本人是在VMWare上安装的ubuntu16.04版本,然后安装NS2.35. 1.下载ns2的安装包,这里我选择的是ns-allinone-2.35.tar.gz压缩格式的all in one安装包,all in one 安装包包含所有的组件,比较方便,另附下载地址: http://www.isi.edu/nsnam/ns/ns-build.html 2.安装前要先进行一些准备工作进行配置环境,输入如下代码: $sudo apt-get install build-essential $sud

Ubuntu 16——安装——ns2.35和nam

Ubuntu 16.04 安装ns2.35+nam 总结出以下安装步骤 1: 更新源 sudo apt-get update #更新源列表 sudo apt-get upgrade #更新已经安装的包 sudo apt-get dist-upgrade #更新软件,升级系统2:安装ns2需要的包 sudo apt-get install build-essential sudo apt-get install tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev #for tcl

ns-2.35下mflood协议的完美移植

Step1 首先需要下载mflood协议,其中包括两个文件夹:一个是mflood协议(还有文件把mflood.cc,mflood.h,mflood-seqtable.cc,mflood-seqtable.h,mflood-packet.h),一个是用于mflood测试的文件夹. Step2 在ns-2.34目录下建立mflood文件夹,把上述的(mflood.cc,mflood.h,mflood-seqtable.cc,mflood-seqtable.h,mflood-packet.h)文件放在

ns2.35-classifier.cc

line143:recv() 1 /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */ 2 /* 3 * Copyright (c) 1996 Regents of the University of California. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with o

[总结]ns2安装和遇到的问题

p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 笔者刚刚接触ns2,项目需要.在这里记录下操作过程,希望对您有所帮助. 网上ns2安装的教程有很多,很杂,有的有些复杂.尝试了一些比较繁琐又没有产生好结果的办法后,找到了一个相对简单的办法.我的系统是ubuntu17.04 安装过程: 主要参考的安装过程:http://www.linuxidc.com/Linux/2013-11/93055.htm 1. 直接下载ns-allino