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

來源:互聯網
上載者:User

標籤:

 

 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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.