首页 > 代码库 > classifier.cc-recv() [ns2.35]
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;//初始化最大进度值maxProgress25 int mark=-1;//用来标记选中的流s26 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 else37 {//如果没有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下标);//该函数参照上面的chooseECNSlot68 }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 }
classifier.cc-recv() [ns2.35]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。