版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> XX理工大學(xué)</b></p><p><b> 畢業(yè)設(shè)計(論文)</b></p><p> 基于NS2的MIMO擴展</p><p><b> 設(shè)計與實現(xiàn)</b></p><p> 學(xué)院(系): 信息工程學(xué)院 </p>
2、<p> 專業(yè)班級: 信息SY0601班 </p><p> 學(xué)生姓名: </p><p> 指導(dǎo)教師: </p><p><b> 學(xué)位論文原創(chuàng)性聲明</b></p><p> 本人鄭重聲明:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨立進行研究所取得的研究成
3、果。除了文中特別加以標注引用的內(nèi)容外,本論文不包括任何其他個人或集體已經(jīng)發(fā)表或撰寫的成果作品。本人完全意識到本聲明的法律后果由本人承擔。</p><p><b> 作者簽名:</b></p><p><b> 年 月 日</b></p><p> 學(xué)位論文版權(quán)使用授權(quán)書</p><p>
4、 本學(xué)位論文作者完全了解學(xué)校有關(guān)保障、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向有關(guān)學(xué)位論文管理部門或機構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)省級優(yōu)秀學(xué)士論文評選機構(gòu)將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)進行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。</p><p> 本學(xué)位論文屬于1、保密囗,在 年解密后適用本授權(quán)書</p><
5、;p><b> 2、不保密√。</b></p><p> ?。ㄕ堅谝陨舷鄳?yīng)方框內(nèi)打“√”)</p><p> 作者簽名: 年 月 日</p><p> 導(dǎo)師簽名: 年 月 日</p><p> 畢業(yè)設(shè)計(論文)任務(wù)書</p
6、><p> 學(xué)生姓名 專業(yè)班級 信息SY0601 </p><p> 指導(dǎo)教師 工作單位 武漢理工大學(xué)信息工程學(xué)院 </p><p> 設(shè)計(論文)題目: 基于NS2的MIMO擴展設(shè)計與實現(xiàn) </p><p> 設(shè)計(論文)主要內(nèi)容:<
7、;/p><p> 1. 了解MIMO基本概念,基本原理及其發(fā)展與應(yīng)用。</p><p> 2. 學(xué)習(xí)NS-2及相關(guān)的網(wǎng)絡(luò)知識,通過修改源代碼來實現(xiàn)MIMO的擴展。</p><p> 要求完成的主要任務(wù):</p><p> 1.根據(jù)設(shè)計(論文)任務(wù)書,在充分調(diào)研的基礎(chǔ)上撰寫并提交開題報告;</p><p> 2.依
8、據(jù)設(shè)計(論文)內(nèi)容的要求,設(shè)計MIMO擴展的算法,并通過修改NS-2源代碼來實現(xiàn)這一算法與仿真。</p><p> 3. 撰寫并提交畢業(yè)設(shè)計論文(參考文獻至少15篇,其中外文資料至少2篇);</p><p> 4.提交專業(yè)外文翻譯材料(原文不少于20000印刷字符);</p><p> 5.按照畢業(yè)設(shè)計相關(guān)要求在答辯前必須完成的其它任務(wù)。</p>
9、<p><b> 必讀參考文獻:</b></p><p> [1] Ramon Agiiero Calvo.Adding Multiple Interface Support in NS-2.2007</p><p> [2] The University of Southern Californiaps Information Sciences I
10、nstitute ( ISI). NSNAM[ EB /OL ]. http: //nsnam.isi.edu/nsnam /index. php /Main_Page, 2006</p><p> [3] 方路平.NS-2網(wǎng)絡(luò)模擬基礎(chǔ)與應(yīng)用.國防工業(yè)出版社,2008</p><p> [4] 張勇,郭達.無線網(wǎng)狀網(wǎng)原理與技術(shù).電子工業(yè)出版社,2007</p><p
11、> [5] 王凡,王甲琛.Ad Hoc網(wǎng)絡(luò)中的多信道多接口技術(shù)研究.電子科技,2008</p><p> 指導(dǎo)教師簽名 系主任簽名 </p><p> 院長簽名(章) </p><p> 武漢理工大學(xué)本科學(xué)生畢業(yè)設(shè)計</p><p>&
12、lt;b> ?。ㄕ撐模╅_題報告</b></p><p><b> 目錄</b></p><p><b> 摘要1</b></p><p> Abstract2</p><p><b> 1 緒論3</b></p><p>
13、 1.1 本課題國內(nèi)外研究現(xiàn)狀3</p><p> 1.2 本文主要研究工作3</p><p> 2 多信道多接口與節(jié)點模型4</p><p> 2.1 多信道多接口4</p><p> 2.2 節(jié)點模型4</p><p> 3 節(jié)點模型的修改7</p><p> 3.
14、1 對ns-lib.tcl的修改7</p><p> 3.1.1 四個新增的過程7</p><p> 3.1.2 修改node-config過程8</p><p> 3.1.3 修改create-wireless-node過程9</p><p> 3.2 對ns-mobilenode.tcl的修改10</p>
15、<p> 3.2.1 修改add-target過程10</p><p> 3.2.2 修改add-target-rtagent過程11</p><p> 3.2.3 修改add-interface過程12</p><p> 3.2.4 修改初始化復(fù)位過程13</p><p> 3.3 對mobilenode.[cc
16、,h],channel.cc,mac-802_11.cc的修改14</p><p> 3.3.1 修改mobilenode.[h,cc]14</p><p> 3.3.2 修改channel.cc15</p><p> 3.3.3 修改mac-802_11.cc16</p><p> 4 路由協(xié)議的修改17</p>
17、;<p> 4.1 對aodv.h的修改17</p><p> 4.2 對aodv.cc的修改18</p><p> 4.2.1 修改類AODV的構(gòu)造函數(shù)18</p><p> 4.2.2 AODV路由發(fā)現(xiàn)過程與相應(yīng)的修改19</p><p> 4.2.3 sendHello,sendError函數(shù)的修改23
18、</p><p> 4.2.4 路由表更新函數(shù)rt_update的修改25</p><p> 4.2.5 修改command函數(shù)25</p><p> 4.3 對路由表的的修改26</p><p> 5 仿真實現(xiàn)與結(jié)果分析28</p><p> 6 總結(jié)與展望30</p><p&
19、gt; 6.1 全文工作總結(jié)30</p><p><b> 6.2 展望30</b></p><p><b> 參考文獻31</b></p><p><b> 附錄32</b></p><p><b> 致謝39</b></p&g
20、t;<p><b> 摘要</b></p><p> IEEE 802.11標準定義了在2.4 GHz和5 GHz頻段內(nèi)多個不重疊的物理層信道。然而,現(xiàn)在大多數(shù)的無線Ad-Hoc網(wǎng)絡(luò)是在一個單一的信道下配置的,以確保所有的節(jié)點相連接。因此,無線頻段所提供的總帶寬并沒有被充分利用。為了滿足高吞吐量的需求,必須利用一切可用的頻帶。在以往研究的若干建議中,通過多個同步無干擾的傳輸
21、,利用多信道、多接口來提高網(wǎng)絡(luò)容量。</p><p> 在這個項目中,我們運行和評測所使用的網(wǎng)絡(luò)仿真軟件為ns-2。從單一接口轉(zhuǎn)換到利用多信道多接口的技術(shù)。這包括支持ns-2核心的集成的多信道、多接口(這在當前版本的ns-2下是不可實現(xiàn)的)。仿真結(jié)果證明了在提高網(wǎng)絡(luò)吞吐量,降低丟包率,降低時延方面的有效性。</p><p> 關(guān)鍵詞:NS2;多信道,多接口;移動節(jié)點;AODV協(xié)議<
22、;/p><p><b> Abstract</b></p><p> The IEEE 802.11 standard defines multiple non-overlapping channels at the physical layer in the2.4 GHz and 5 GHz spectrums. However, most ad-hoc wirel
23、ess networks today are configured to operate under a single channel in order to ensure connectivity of all their nodes. Hence, the aggregate bandwidth provided by the radio spectrums is not fully-utilized. In order to me
24、et the high throughput demand, it is essential to use all available spectrums. Several past research proposals have exploited mult</p><p> In this project, we implement and evaluate the technique of multipl
25、e channels and multiple interfaces using the Network Simulator (ns-2). This includes incorporating the multiple channel and multiple interface supports to the core of ns-2, which are not available in the current version
26、of the simulator.The simulation results demonstrate the effectiveness of the approach in improving the network capacity to reduce the ratio of packet loss and time delay.</p><p> Key Words:NS2;Multi-channel
27、,Multi-interface;Mobilenode;AODV Protocol</p><p><b> 1 緒論</b></p><p> 1.1 本課題國內(nèi)外研究現(xiàn)狀</p><p> 隨著IEEE802. 11相關(guān)技術(shù)及產(chǎn)品的不斷普及,研究者開始把他們的注意力移到了多信道多接口方面.需要修改NS2中的協(xié)議模型為進行多信道多接口相
28、關(guān)的研究工作提供支持。前人已經(jīng)對這個問題提出了多種方法,比較典型的如TENS[1]、Hyacinth[2]。</p><p> TENS主要集中在媒體介入層(MAC)和物理層的修改,通過對信道實現(xiàn)的修改支持多信道,但對多信道的支持是單接口的。Hyacinth對接口的數(shù)量進行了限制,并且只能是靜態(tài)的路由才能使用多接口多信道。通過對以上兩種方法的研究發(fā)現(xiàn),并沒有一種方法實現(xiàn)了有效靈活的多信道多接口擴展方式,以致以前
29、的路由協(xié)議并不能夠有效的使用多信道多接口這個新特性[15] [16]。 本文的主要目的之一就是提供一種簡單有效的擴展方式,使得在模擬的時候能夠方便更改設(shè)置[3]。首先,每個節(jié)點能夠靈活定義接口數(shù)目,一個接口對應(yīng)一個信道。在同一個環(huán)境中并不是每個節(jié)點都需要相同數(shù)目的接口[5];其次,通過修改已有的路由協(xié)議或添加新的路由協(xié)議,使其具有多信道多接口能力[6] [7] [8]。 當節(jié)點具有多信道以后如何合理利用新增信道,本文也作了初步探索[10
30、]。</p><p> 1.2 本文主要研究工作</p><p> 本設(shè)計中,我會針對NS2的機制對OTCL與C++代碼進行修改。首先,我會修改節(jié)點模型使其具有多接口,這部分主要需要修改OTCL代碼,但也需要修改少許的C++代碼;其次,為了使路由協(xié)議能夠適應(yīng)多信道多接口,路由協(xié)議也需要修改,我以AODV協(xié)議為例進行了修改,這部分基本上就是C++代碼;最后,我會編寫一個簡單的無線模擬仿真
31、腳本,對節(jié)點的多信道多接口性能進行仿真,分析了吞吐量,丟包率以及實驗特性,從而表明使用多信道多接口技術(shù)的有效性。</p><p> 2 多信道多接口與節(jié)點模型</p><p> 2.1 多信道多接口</p><p> IEEE 802.11標準定義了在2.4 GHz和5 GHz頻段內(nèi)多個不重疊的信道。原始的NS2中的移動節(jié)點只有一個接口[9] [11],在包含
32、有多跳的無線Ad - Hoc網(wǎng)絡(luò)中,如果每個節(jié)點只使用一個接口,若數(shù)據(jù)包的下一跳不在同一信道上,則它可能在某些跳發(fā)生延時。原因是,節(jié)點A需要在節(jié)點B的接口已經(jīng)轉(zhuǎn)到相同的信道上時進行等待,這個相同的信道就是之前節(jié)點A用來向節(jié)點B發(fā)送數(shù)據(jù)包的信道,而采用多信道多接口則可以很好的解決這一問題。同時,當存在多個接口,多個信道時,我們可以使一個接口傳輸信道上的數(shù)據(jù),而另一個接口在另一個信道上接收數(shù)據(jù),吞吐量最高可以幾乎翻一番,時延和丟包率都有很好
33、的改善[12] [13] [14]。</p><p><b> 2.2 節(jié)點模型</b></p><p> 要實現(xiàn)多信道多接口必須對節(jié)點模型進行修改,本設(shè)計的節(jié)點模型要求主要有以下四點:</p><p><b> a.信道數(shù)可變</b></p><p> b.每個節(jié)點的接口數(shù)目可以不同<
34、;/p><p> c.每個節(jié)點可以連接不同的信道數(shù)</p><p> d.路由協(xié)議能夠適應(yīng)多信道多接口,并保持其向后兼容性</p><p> 也就是說,擴展多信道多接口必須修改現(xiàn)有的MobileNode模型,如圖1所示。移動節(jié)點是由一系列的網(wǎng)絡(luò)構(gòu)件構(gòu)成的,這些構(gòu)件主要包括:</p><p> 鏈路層(LL):LL對象負責(zé)模擬數(shù)據(jù)鏈路層的協(xié)
35、議。</p><p> 連接到LL上的ARP模塊(ARP):地址解析協(xié)議(Address Resolution Protocol)的主要功能是將IP地址解析為物理地址。</p><p> 接口隊列(Interface Queue):接口隊列是由類PriQueue實現(xiàn)的。PriQueu是一個優(yōu)先級隊列。它優(yōu)先處理路由協(xié)議分組,可以對所有隊列中的分組進行過濾,刪除那些具有特定目的地址的分組
36、。</p><p> MAC層:處理從鏈路層接受的或?qū)⒁l(fā)往鏈路層的數(shù)據(jù)包。發(fā)送時,它增加MAC 包頭?;蛘撸瑥奈锢韺拥姆诸惼鳟惒浇邮軘?shù)據(jù)包。</p><p> 網(wǎng)絡(luò)接口(Network Interface):移動節(jié)點訪問信道的接口,可以通過這個接口設(shè)定無線網(wǎng)絡(luò)物理層的一些相關(guān)特性值。</p><p> 傳播模型:用來計算每個分組在到達接收節(jié)點時的信號能量功率
37、。</p><p> 圖1 ns2中原始的mobilenode結(jié)構(gòu)</p><p> 修改后的節(jié)點模型應(yīng)具有多個鏈路層,ARP模塊,接口隊列,MAC,網(wǎng)絡(luò)接口和信道,這一方案模擬的是多信道多接口Ad Hoc網(wǎng)絡(luò),因此不需要修改任何的IEEE 802.11硬件,改后的mobilenode如圖2所示。</p><p> 圖2 修改后的mobilenode結(jié)構(gòu)<
38、;/p><p><b> 3 節(jié)點模型的修改</b></p><p> 前面我們已經(jīng)從宏觀上分析了如何修改節(jié)點模型結(jié)構(gòu),本章我們將具體實現(xiàn)其修改。以下所有修改的或者增加的代碼均以斜體給出。</p><p> 3.1 對ns-lib.tcl的修改</p><p> 在節(jié)點配置時會調(diào)用node-config過程,修改了后
39、的節(jié)點模型具備了接口數(shù)這個參數(shù),因此node-config過程必須修改。其次,在仿真腳本中我們會調(diào)用一些新增的過程,這些過程也需要在ns-lib.tcl中定義。</p><p> 3.1.1 四個新增的過程</p><p> 為了使每個節(jié)點可以有不同的接口數(shù)目,定義過程change-numifs,具體如表3.1所示。</p><p> 表3.1 改變接口數(shù)目&
40、lt;/p><p> ----------------------------------------------------------------------------------------------------------------------</p><p> Simulator instproc change-numifs { newnumifs } {</p>
41、;<p> $self instvar numifs_</p><p> set numifs_ $newnumifs</p><p><b> }</b></p><p> --------------------------------------------------------------------------
42、--------------------------------------------</p><p> 第二個過程add-channel作用是給節(jié)點的接口配置信道,具體如表3.2所示。</p><p> 表3.2 接口配置信道過程</p><p> ------------------------------------------------------
43、----------------------------------------------------------------</p><p> Simulator instproc add-channel {indexch ch} {</p><p> $self instvar chan</p><p> set chan($indexch) $ch&l
44、t;/p><p><b> }</b></p><p> ----------------------------------------------------------------------------------------------------------------------</p><p> 第三個過程get-numifs
45、返回接口數(shù),具體如表3.3所示。</p><p> 表3.3 返回接口數(shù)</p><p> ----------------------------------------------------------------------------------------------------------------------</p><p> Simulat
46、or instproc get-numifs {} {</p><p> $self instvar numifs_</p><p> if [ info exists numifs_ ] {</p><p><b> 續(xù)表3.3</b></p><p> return $numifs_</p>&
47、lt;p><b> )eise(</b></p><p><b> return ""</b></p><p><b> }</b></p><p><b> }</b></p><p> ---------------
48、-------------------------------------------------------------------------------------------------------</p><p> 第四個過程ifNum作為node-config的一個參數(shù),配置接口數(shù),具體如表3.4所示。</p><p> 表3.4 ifNum過程</p>&l
49、t;p> ----------------------------------------------------------------------------------------------------------------------</p><p> Simulator instproc get-numifs {} {</p><p> $self instvar
50、 numifs_</p><p> if [ info exists numifs_ ] {</p><p> return $numifs_</p><p><b> )eise(</b></p><p><b> return ""</b></p>&l
51、t;p><b> }</b></p><p><b> }</b></p><p> ----------------------------------------------------------------------------------------------------------------------</p&
52、gt;<p> 3.1.2 修改node-config過程</p><p> node-config用來對節(jié)點進行配置,由于加入了新的接口參數(shù)chan($t),所以必須對其初始化,在多接口的情況下其為一數(shù)組,具體如表3.5所示。</p><p> 表3.5 node-config過程</p><p> ---------------------
53、-------------------------------------------------------------------------------------------------</p><p> Simulator instproc node-config args {</p><p><b> ……</b></p><p&g
54、t; set args [eval $self init-vars $args]</p><p> $self instvar addressType_ routingAgent_ propType_ macTrace_ \</p><p> routerTrace_ agentTrace_ movementTrace_ channelType_ channel_ numifs_
55、 \</p><p> chan topoInstance_ propInstance_ mobileIP_ \</p><p> rxPower_ txPower_ idlePower_ sleepPower_ sleepTime_ transitionPower_ \</p><p><b> 續(xù)表3.5 </b></p>
56、<p> transitionTime_ satNodeType_ eotTrace_ phyTrace_</p><p><b> ……</b></p><p> # Multiple channel, multiple interfaces</p><p> # original:set chan $channel_
57、</p><p> #modifi as follows</p><p> if {[info exists numifs_]} {</p><p> set chan(0) $channel_</p><p><b> } else {</b></p><p> set chan $c
58、hannel_</p><p><b> }</b></p><p><b> ……</b></p><p><b> }</b></p><p> ------------------------------------------------------------
59、-------------------------------------------</p><p> 3.1.3 修改create-wireless-node過程</p><p> 由于節(jié)點具有多接口,因此該過程中的add-interface必須多次調(diào)用,調(diào)用的次數(shù)即節(jié)點具有的接口數(shù),具體如表3.6所示。</p><p> 表3.6 create-wire
60、less-node過程</p><p> -----------------------------------------------------------------------------------</p><p> Simulator instproc create-wireless-node args {</p><p> $self instv
61、ar routingAgent_ wiredRouting_ propInstance_ llType_ \</p><p> macType_ ifqType_ ifqlen_ phyType_ chan antType_ \</p><p> energyModel_ initialEnergy_ txPower_ rxPower_ \</p><p>
62、idlePower_ sleepPower_ sleepTime_ transitionPower_ transitionTime_ \</p><p> topoInstance_ level1_ level2_ inerrProc_ outerrProc_ FECProc_ rtAgentFunction_ numifs_</p><p><b> ……</b>
63、;</p><p> #Adding Interface</p><p> #original: $node add-interface $chan $propInstance_ $llType_ $macType_ \</p><p> $ifqType_ $ifqlen_ $phyType_ $antType_ $topoInstance_ \</p
64、><p> $inerrProc_ $outerrProc_ $FECProc_</p><p> #modified as follows</p><p> if {[info exist numifs_]} {</p><p><b> 續(xù)表3.6</b></p><p> for {s
65、et i 0} {$i < $numifs_} {incr i} {</p><p><b> #3.6</b></p><p> $node add-interface $chan($i) $propInstance_ $llType_ $macType_ \</p><p> $ifqType_ $ifqlen_ $phyTyp
66、e_ $antType_ $topoInstance_ \</p><p> $inerrProc_ $outerrProc_ $FECProc_</p><p><b> }</b></p><p><b> } else {</b></p><p> $node add-interfac
67、e $chan $propInstance_ $llType_ $macType_ \</p><p> $ifqType_ $ifqlen_ $phyType_ $antType_ $topoInstance_ \</p><p> $inerrProc_ $outerrProc_ $FECProc_ </p><p><b> }</b&g
68、t;</p><p><b> ……</b></p><p><b> }</b></p><p> -------------------------------------------------------------------------------------------------------</
69、p><p> 3.2 對ns-mobilenode.tcl的修改</p><p> 3.2.1 修改add-target過程</p><p> add-target過程用來給端口綁定代理,在多接口的情況下需要為每個接口都綁定代理,在添加之前需先調(diào)用get-numifs過程取得節(jié)點接口數(shù),具體如表3.7所示。</p><p> 表3.7 修
70、改add-target過程</p><p> -----------------------------------------------------------------------------------</p><p> Node/MobileNode instproc add-target { agent port } {</p><p> $se
71、lf instvar dmux_ imep_ toraDebug_ </p><p> set ns [Simulator instance]</p><p> set newapi [$ns imep-support]</p><p> $agent set sport_ $port</p><p> set numIfsSimul
72、ator [$ns get-numifs]</p><p><b> ……</b></p><p> #original: if { $port == [Node set rtagent_port_] } {</p><p> # Ad hoc routing agent setup needs special handling&l
73、t;/p><p> $self add-target-rtagent $agent $port</p><p><b> 續(xù)表3.7</b></p><p><b> return</b></p><p><b> }</b></p><p> #
74、modified as follows</p><p> if { $port == [Node set rtagent_port_] } {</p><p> if {$numIfsSimulator != ""} {</p><p> for {set i 0} {$i < [$self set nifs_]} {incr i}
75、{</p><p> $agent if-queue $i [$self set ifq_($i)]</p><p><b> }</b></p><p><b> }</b></p><p> $self add-target-rtagent $agent $port</p>
76、<p><b> return</b></p><p><b> }</b></p><p><b> ……</b></p><p><b> }</b></p><p> -----------------------------
77、------------------------------------------------------</p><p> 3.2.2 修改add-target-rtagent過程</p><p> 此過程用來給接口添加路由代理,修改原則和上一過程類似。首先調(diào)用get-numifs過程取得接口數(shù),具體如表3.8所示。</p><p> 表3.8 修改add
78、-target-rtagent</p><p> -----------------------------------------------------------------------------------</p><p> Node/MobileNode instproc add-target-rtagent { agent port } {</p><
79、p><b> ……</b></p><p> set numIfSimulator [$ns get-numifs]</p><p><b> ……</b></p><p> #original:} else { ;# no IMEP</p><p> $agent target
80、 $sndT</p><p><b> }</b></p><p> $sndT target [$self set ll_(0)]</p><p> #modified as follows:</p><p> } else { ;# no IMEP</p><p> if {$n
81、umIfsSimulator != ""} {</p><p> for {set i 0} {$i < [$self set nifs_]} {incr i} {</p><p> set sndT [cmu-trace Send "RTR" $self]</p><p><b> 續(xù)表3.8</
82、b></p><p> $agent target $i $sndT</p><p> $sndT target [$self set ll_($i)]</p><p><b> }</b></p><p><b> } else {</b></p><p>
83、 $agent target $sndT</p><p> $sndT target [$self set ll_(0)]</p><p><b> }</b></p><p><b> }</b></p><p><b> ……</b></p><
84、;p> -------------------------------------------------------------------------------------------------------</p><p> 3.2.3 修改add-interface過程</p><p> 原始的add-interface過程只會為每個節(jié)點創(chuàng)造一個ARP表,而不是為每個
85、接口創(chuàng)造一個ARP表,因此我們?yōu)槊總€接口創(chuàng)造一個ARP表更為合適,具體如表3.9所示。</p><p> 表3.9 修改add-interface過程</p><p> -------------------------------------------------------------------------------------------------------</p
86、><p> Node/MobileNode instproc add-interface { channel pmodel lltype mactype qtype qlen iftype anttype topo inerrproc outerrproc fecproc } {</p><p><b> ……</b></p><p><
87、b> #</b></p><p> # Initialize ARP table only once.</p><p><b> #</b></p><p> #modified as follows</p><p> set arptable_($t) [new ARPTable $self
88、 $mac]</p><p> set arptable $arptable_($t)</p><p> if {$imepflag != ""} {</p><p> set drpT [$self mobility-trace Drop "IFQ"]</p><p><b> }
89、else {</b></p><p> set drpT [cmu-trace Drop "IFQ" $self]</p><p><b> }</b></p><p> $arptable drop-target $drpT</p><p><b> 續(xù)表3.9<
90、/b></p><p> if { $namfp != "" } {</p><p> $drpT namattach $namfp</p><p><b> }</b></p><p><b> #</b></p><p> # Link
91、 Layer</p><p><b> #</b></p><p> $ll arptable $arptable</p><p><b> ……</b></p><p><b> }</b></p><p> ----------------
92、-------------------------------------------------------------------</p><p> 3.2.4 修改初始化復(fù)位過程</p><p> 由于上述的ARP表發(fā)生了改變,因此在初始化和復(fù)位時需要對ARP表進行修改,具體如表3.10與3.11所示。</p><p> 表3.10 修改init過程&l
93、t;/p><p> -------------------------------------------------------------------------------------------------------</p><p> Node/MobileNode instproc init args {</p><p><b> ……<
94、;/b></p><p> #original:set arptable_ “”</p><p> #modified as follows</p><p> # set arptable_ "" ;# no ARP table yet</p><p><b> ……&
95、lt;/b></p><p><b> }</b></p><p> -------------------------------------------------------------------------------------------------------</p><p> 表3.11 修改reset過程<
96、/p><p> -------------------------------------------------------------------------------------------------------</p><p> Node/MobileNode instproc reset {} {</p><p><b> ……</b
97、></p><p> if { $arptable_($i) != "" } {</p><p> $arptable_($i) reset </p><p><b> }</b></p><p><b> }</b></p><p> -
98、---------------------------------------------------------------------------------------------------------------------</p><p> 3.3 對mobilenode.[cc,h],channel.cc,mac-802_11.cc的修改</p><p> 前面我們已經(jīng)修
99、改了節(jié)點模型TCL的實現(xiàn),下面我們針對節(jié)點模型的c++代碼進行修改,關(guān)于c++代碼的修改在后面還有路由協(xié)議的實現(xiàn), 將在第四部分介紹。</p><p> 3.3.1 修改mobilenode.[h,cc]</p><p> 在TCL中我們已經(jīng)完成了節(jié)點模型多接口的修改,相應(yīng)的在mobilenode.h中,原始的兩個指針:nextX_,prevX_都是指向一個借口,擴展了以后就必須改為指
100、針數(shù)組,所以必須把mobilenode.h中的nextX_,prevX_都改為數(shù)組,MAX_CHANNELS表示最大的接口數(shù),需預(yù)先定義。另外還有一個與擴展多信道多接口無關(guān)的問題,原始的內(nèi)置函數(shù)getLoc出現(xiàn)了問題,當改為非內(nèi)置函數(shù)時就不會報錯,同時在mobilenode.cc中相應(yīng)的修改。具體如表3.12與表3.13所示。</p><p> 表3.12 修改mobilenode.h</p>&
101、lt;p> ----------------------------------------------------------------------------------------------------------------------</p><p><b> ……</b></p><p> /* For list-keeper */<
102、/p><p> //Original;MobileNode* nextX_;</p><p> //MobileNode* prevX_;</p><p> //modified as follows</p><p> MobileNode* nextX_[MAX_CHANNELS];</p><p> Mobi
103、leNode* prevX_[MAX_CHANNELS];</p><p><b> ……</b></p><p> /original:*inline void getLoc(double *x, double *y, double *z) {</p><p> update_position(); *x = X_; *y = Y_;
104、 *z = Z_;</p><p><b> }*/</b></p><p> //modified as follows</p><p> void getLoc(double *x, double *y, double *z);</p><p><b> ……</b></p>
105、;<p> ----------------------------------------------------------------------------------------------------------------------</p><p> 表3.13 修改mobilenode.cc</p><p> ---------------------
106、-------------------------------------------------------------------------------------------------</p><p><b> ……</b></p><p><b> 續(xù)表3.13</b></p><p><b>
107、 void</b></p><p> MobileNode::getLoc(double *x, double *y, double *z)</p><p><b> {</b></p><p> update_position(); </p><p><b> *x = X_; <
108、/b></p><p><b> *y = Y_; </b></p><p><b> *z = Z_;</b></p><p><b> }</b></p><p> -----------------------------------------------
109、----------------------------------------------------------------------</p><p> 3.3.2 修改channel.cc</p><p> 前面提到的兩個指針nextX_,prevX_由于改為了指針數(shù)組,因此存在一個怎樣知道其索引的問題,在這里我們采用this->index()的方法,我們需要把chann
110、el.cc里nextX_,prevX_都改為nextX_[this->index()],prevX_[this->index()] 。此外,當發(fā)送一個包的時候,我們需要確定發(fā)向哪個具體的接口,因此我們需要一個條件來判斷目的節(jié)點的接口是否和對應(yīng)的信道相連接,具體修改如表3.14與表3.15所示。</p><p> 表3.14 修改節(jié)點列表</p><p> ---------
111、-------------------------------------------------------------------------------------------------------------</p><p> nextX_[this->index()]</p><p> prevX_[this->index()]</p><p
112、> ----------------------------------------------------------------------------------------------------------------------</p><p> 表3.15 修改affectedNodes函數(shù)</p><p> ---------------------------
113、-------------------------------------------------------------------------------------------</p><p> affectedNodes = getAffectedNodes(mtnode, distCST_ + /* safety */ 5, &numAffectedNodes);</p><
114、;p> for (i=0; i < numAffectedNodes; i++) {</p><p> rnode = affectedNodes[i];</p><p> if(rnode == tnode)</p><p><b> continue;</b></p><p> newp = p
115、->copy();</p><p><b> 續(xù)表3.15</b></p><p> propdelay = get_pdelay(tnode, rnode);</p><p> rifp = (rnode->ifhead()).lh_first;</p><p> for(; rifp; rifp
116、= rifp->nextnode()){</p><p> if(rifp->channel() == this) {</p><p> s.schedule(rifp, newp, propdelay);</p><p><b> }</b></p><p><b> }</b>
117、;</p><p><b> }</b></p><p> delete [] affectedNodes;</p><p><b> }</b></p><p> Packet::free(p);</p><p><b> }</b><
118、/p><p> ----------------------------------------------------------------------------------------------------------------------</p><p> 3.3.3 修改mac-802_11.cc</p><p> 修改mac-802_11.cc的
119、目的是為了后面路由協(xié)議里找到接口索引,第4章有詳細敘述,具體如表3.16所示。</p><p> 表3.16 修改mac-802_11.cc</p><p> ------------------------------------------------------------------------------------------------------------------
120、----</p><p><b> ……</b></p><p> if(tx_active_ && hdr->error() == 0) {</p><p> hdr->error() = 1;</p><p><b> }</b></p><
121、;p> hdr->iface() = addr(); </p><p> if(rx_state_ == MAC_IDLE) {</p><p> setRxState(MAC_RECV);</p><p> pktRx_ = p;</p><p><b> ……</b></p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于NS2的PeerCast模擬平臺設(shè)計與實現(xiàn).pdf
- 【畢業(yè)設(shè)計】基于ns2的無線自組網(wǎng)路由協(xié)議的研究與仿真
- 【畢業(yè)設(shè)計】基于ns2的無線自組網(wǎng)路由協(xié)議的研究與仿真
- 基于NS2的網(wǎng)絡(luò)流量建模系統(tǒng)設(shè)計與實現(xiàn).pdf
- 基于NS2的移動IP擴展技術(shù)的研究.pdf
- 基于集群的網(wǎng)絡(luò)仿真平臺NS2的設(shè)計與實現(xiàn).pdf
- 基于ns2的aodv路由協(xié)議仿真與研究——畢業(yè)論文
- 基于ns2的aodv路由協(xié)議仿真與研究——畢業(yè)論文
- 基于NS2的校園網(wǎng)安全模型設(shè)計及實現(xiàn).pdf
- NS2多機并行仿真調(diào)度器的設(shè)計與實現(xiàn).pdf
- 基于ns2的wsn平面路由協(xié)議分析【畢業(yè)論文】
- 基于NS2的AODV路由協(xié)議研究與實現(xiàn).pdf
- 擴展NS2的移動Agent仿真方法研究.pdf
- 基于NS2的WMSNs可視化仿真平臺的設(shè)計與實現(xiàn).pdf
- 基于ns2環(huán)境下的網(wǎng)絡(luò)帶寬測量的研究與實現(xiàn)--畢業(yè)設(shè)計任務(wù)書(1)
- 基于NS2的路由協(xié)議可視化仿真平臺的設(shè)計與實現(xiàn).pdf
- 基于NS2的AODV的研究與改進.pdf
- 基于NS2的計算機網(wǎng)絡(luò)虛擬實驗室的設(shè)計與實現(xiàn).pdf
- 基于NS2的計算機網(wǎng)絡(luò)課程教學(xué)演示案例的設(shè)計與實現(xiàn).pdf
- 擴展NS2支持移動Agent系統(tǒng)仿真.pdf
評論
0/150
提交評論