NS3中文教程详解

上传人:仙*** 文档编号:101770652 上传时间:2022-06-05 格式:DOC 页数:66 大小:219KB
收藏 版权申诉 举报 下载
NS3中文教程详解_第1页
第1页 / 共66页
NS3中文教程详解_第2页
第2页 / 共66页
NS3中文教程详解_第3页
第3页 / 共66页
资源描述:

《NS3中文教程详解》由会员分享,可在线阅读,更多相关《NS3中文教程详解(66页珍藏版)》请在装配图网上搜索。

1、-一、简介1. 什么是NS-3.NS是一个离散事件驱动网络模拟器。官方定义:from .nsnam.org/ns-3 is a discrete-event network simulator for Internet systems, targeted primarily for research and educational use. ns-3 is free software, licensed under the GNU GPLv2 license, and is publicly available for research, development, and use.ns-3 i

2、s intended as an eventual replacement for the popular ns-2 simulator. The project acronym “nsnam derives historically from the concatenation of ns (network simulator) and nam (network animator).2. NS-3 vs NS-2NS-3虽然冠以一个“3,但事实上跟它广泛流行的前任NS-2并非一脉相承,或者从使用角度上说,仅仅继承了一个名称而已。NS-3根本上是一个新的模拟器,不支持NS-2的API。NS-3

3、是完全用C+编写的也有可选的Python接口,而NS-2一局部模块使用C+而另一局部使用 OTcl。因而NS-3最大的特点就是脚本可以C+或Python语言,而在NS-2中,我们使用的是OTcl。NS-3的功能仍旧在开发中,因此它远没有NS-2完善当然NS-2的维护也在进展中。NS-3并不包含目前所有NS-2的功能,但它具有*些新的特性:正确的多网卡处理、IP寻址策略的使用、更详细的802.11模块等等。Latest stable release: ns-3.2.1 (November 20, 2021)4. NS-3的一些名词解释POSI*:Portable Operating System

4、 Interface可移植的操作系统的接口一组操作系统API的协议/标准族,最开场为了Uni*系统上的可移植性而开发的,也适用于其他操作系统。Do*ygen:Documentation Generator支持C+、C、Java、Objective-C、Python、IDL、Fortran、VHDL、PHP、C*等各种语言的文档生成器,用于从源代码中生成说明文档。类似于我之前使用过的Sandcastle,貌似更加强大些,有必要得学习一下。nam:Network Animator基于Tcl/TK的网络动画演示工具,能提供拓扑和包级别的动画以及数据流观察。参考.isi.edu/nsnam/nam/M

5、ercurialNS-3代码维护使用的源码版本控制管理系统WafNS-3工程使用的新一代的基于Python的构建系统Build SystemWireShark一种GUI包嗅探器。由于NS-3能生成.pcap文件,因此可以使用类似于WireShark的软件对数据进展分析tcpdump另一种包嗅探器。在Linu*下使用CLI进展数据分析2 资源.nsnam.org/docs/release/tutorial/tutorial_5.html*Resources2.1 网络资源NS-3用户有必要知道几个重要的:主站点位于.nsnam.org,提供NS-3系统的根本信息。详细文档位于主站点的.nsnam

6、.org/documents.html. 您也可以从这个网页上得到系统架构的相关信息。维基百科网页.nsnam.org/wiki可以作为NS-3主站点的补充。您可以在那里找到用户和开发者的FAQs,以及相关问题的解决途径,第三方的共享代码、论文等等。NS-3的源码可以在找到。读者也可以在名为ns3-dev的源码仓库找到当前的NS-3开发树。还有NS-3的之前发行版本和最新测试版本的代码。2.2源码管理系统Mercurial复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。有很多种方法可以实现这种管理,读者可能已听说过*些版本控制软件,CVSConcurrent Version

7、System或许是其中最常见的一个。NS-3工程采用Mercurial系统作为它的源码管理系统。尽管读者在阅读本教程时不需要知道太多的Mercurial相关知识,但我们建议读者能够熟悉Mercurial,并用于查看NS-3源码。Mercurial的网址为.selenic./mercurial/,读者可以从上面获取到这个软件配置管理系统(Software Configuration management, SCM)的二进制程序和源码。Mercurial的开发者Selenic提供了一个Mercurial教程,网址为.selenic./mercurial/wiki/inde*.cgi/Tutoria

8、l/,以及快速入门指南:.selenic./mercurial/wiki/inde*.cgi/QuickStart/ .在NS-3的主页上,读者也可以获取到有关Mercurial和NS-3配合使用的最常用信息。2.3 编译系统Waf 读者下载NS-3的源码到本地系统之后,需要对源码进展编译来生成可执行程序。正如源码管理方式多种多样,编译源码也有多种工具。最常用的工具是make. Make最知名的一点:它可能是编译大型和高可配置型系统最难的一种方法。因此,有很多替代工具被开发出来。最近,大型高可配置系统的编译工具大多项选择择用Python语言来开发。NS-3的编译系统采用了Waf。它是用Pyth

9、on开发的新一代编译管理系统。读者不必掌握python,即可编译现有的NS-3工程。如果读者想要扩展现有的NS-3系统,大多数情况只需了解Python知识的很少且非常直观的一个子集。对于想了解Waf细节的读者,可以访问code.google./p/waf/ .2.4 开发环境正如以上所述,NS-3的脚本由C+或者Python编写。从NS-3.2开场,NS3的API提供了python语言接口,但是所有的模块都是由C+编写的。这里,我们假定读者掌握C+知识和了解面向对象的相关概念。我们将在用到一些高级的概念或者读者可能不熟悉的语言特性、习惯用语或设计模式时适当地花些时间复习它们。但是我们也不希望本

10、教程变成C+教程,所以我们希望读者能够掌握根本的C+命令。在上和书籍中,你可以找到无数的关于C+知识的信息。如果读者是个C+新手,则您在继续阅读本指南之前可能需要找一些C+教程或者,至少必须熟悉一下C+的根本语言特征。例如,Cplusplus教程。NS-3系统开发过程中使用了许多的GNU 工具链toolchain组件。所谓软件的工具链是指在给定环境中可用编程工具的集合。如果读者想要快速地了解一下GNU 工具链所包含的容,请浏览 . NS-3使用gcc,GNU binutils,以及gdb. 但是,我们并不使用GNU编译系统工具build system tools,既不用make,也不用auto

11、tools,而是使用Waf来作为编译管理工具。通常,NS-3使用者的工作环境为Linu*或者类Linu*系统。对于Windows环境,有几种可以不同程度模拟Linu*环境的软件,比方Cygwin。NS-3支持在Cygwin环境下的开发。Windows用户可以浏览.cygwin./获取该软件(虽然有许多工程维护者使用MinGW,但是MinGW现在还没有得到官方支持)。Cygwin可以提供许多流行的Linu*系统命令。但是,*些情况下它也会出现问题,因为它毕竟只是Linu*系统的模拟。Cygwin和Windows中其他程序的交互也有可能会导致程序出现问题。如果读者正在使用Cygwin或者MinGW

12、;并使用着Logitech的*些软件产品,我们或许可以让您少点麻烦:建议您去看一看MinGW FAQ。搜索Logitech并阅读FAQ条目:“为什么当我编译源码时,make经常崩溃,留下一个文件。无论您相信与否,当运行Logitech时,Logitech 进程监视器潜入了每个正在系统中运行的动态连接库(DLL)当中。它可能导致您的Cygwin或者MinGw的动态连接库奇怪地中止,常常也会阻止调试器的运行。所以当运行Cygwin的时候,一定要小心您的Logitech软件。替代Cygwin的一种选择是安装虚拟机,比方在VMware上安装Linu*虚拟机。2.5 套接字编程我们假定读者对本教程所举例

13、子中的Berkeley套接字API根本熟悉。如果您不了解套接字,我们建议您学习一下这些API和一些常见的使用例程。TCP/IP Sockets in C这本书可以帮助您很好地理解TCP/IP套接字。cs.baylor.edu/donahoo/practical/CSockets/包含了Socket in C书中所举例子的源码。如果读者理解了该书中的前四章(如果读者没有这本书的话,可以看上面中的源代码),您会更好的理解本教程的容。这里还有一本关于多播套接字(Multicast Sockets)的书籍Multicast Sockets, Makofske and Almeroth。如果您想学习本书

14、中有关多播的例子,该书里面有些资料您可能需要了解。NS3的两个例子/* -*- Mode:C+; c-file-style:gnu; indent-tabs-mode:nil; -*- */ /Emacs模式行,GPL boilerplate*include ns3/core-module.h /*include ns3/simulator-module.h*include ns3/node-module.h*include ns3/helper-module.h/ Default Network Topology/ 10.1.1.0/ n0 - n1 n2 n3 n4/ point-to-p

15、oint | | | |/ =/ LAN 10.1.2.0using namespace ns3;NS_LOG_PONENT_DEFINE (SecondScriptE*ample);int main (int argc, char *argv)bool verbose = true; /定义变量,用于决定是否开启两个UdpApplication的Logging组件;默认true开启uint32_t nCsma = 3; /LAN中另有3个nodemandLine cmd;cmd.AddValue (nCsma, Number of e*tra CSMA nodes/devices, nCsm

16、a);cmd.AddValue (verbose, Tell echo applications to log if true, verbose); /命令行参数设置是否开启loggingcmd.Parse (argc,argv);if (verbose)LogponentEnable(UdpEchoClientApplication, LOG_LEVEL_INFO);LogponentEnable(UdpEchoServerApplication, LOG_LEVEL_INFO);nCsma = nCsma = 0 1 : nCsma; /三目运算符还可以这样写。/*网络拓扑局部*/创立使用

17、P2P链路的2个nodeNodeContainer p2pNodes;p2pNodes.Create (2);/创立另一个NodeContainer类对象,用于总线(CSMA)网络NodeContainer csmaNodes;csmaNodes.Add (p2pNodes.Get (1); /将之前P2P的NodeContianer的第二个节点(索引1)添加到CSMA的NodeContainer,以获得CSMA device;这个node将会有两个devicecsmaNodes.Create (nCsma); /再创立Bus network上另外的node/设置传送速率和信道延迟,同firs

18、t.ccPointToPointHelper pointToPoint; /注意使用Helper的固定格式:/1/helper对象声明及属性设置;/2/devices对象声明及接收helper对象安装方法的返回列表,安装方法的参数为节点对象!pointToPoint.SetDeviceAttribute (DataRate, StringValue (5Mbps);pointToPoint.SetChannelAttribute (Delay, StringValue (2ms);/安装P2P网卡设备到P2P网络节点,同first.ccNetDeviceContainer p2pDevices

19、;p2pDevices = pointToPoint.Install (p2pNodes);/类似于P2PHelper,CsmaHelper帮助创立和连接CSMA设备及信道CsmaHelper csma;csma.SetChannelAttribute (DataRate, StringValue (100Mbps); /数据率由channel属性指定,而非Device属性;/因为CSMA不允许同一信道上有多个不同数据率的设备!csma.SetChannelAttribute (Delay, TimeValue (NanoSeconds (6560); /speed-of-light dela

20、yNetDeviceContainer csmaDevices;csmaDevices = csma.Install (csmaNodes);/安装网络协议InternetStackHelper stack;stack.Install (p2pNodes.Get (0); /P2P链路中的第一个节点stack.Install (csmaNodes); /P2P链路中的第二个节点包含在csmaNodes中Ipv4AddressHelper address; /两个网段的IP地址类对象address.SetBase (10.1.1.0, 255.255.255.0); /安排P2P网段的地址Ipv

21、4InterfaceContainer p2pInterfaces;p2pInterfaces = address.Assign (p2pDevices);address.SetBase (10.1.2.0, 255.255.255.0); /安排CSMA网段地址Ipv4InterfaceContainer csmaInterfaces;csmaInterfaces = address.Assign (csmaDevices);/*网络拓扑局部完毕*/*应用程序局部*/UdpEchoServerHelper echoServer (9);ApplicationContainer serverA

22、pps = echoServer.Install (csmaNodes.Get (nCsma); /将Server效劳安装在CSMA网段的最后一个节点上,nCsma是可变的,所以不能用3serverApps.Start (Seconds (1.0);serverApps.Stop (Seconds (10.0);UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9); /同first.ccechoClient.SetAttribute (Ma*Packets, UintegerValue (1);echoCli

23、ent.SetAttribute (Interval, TimeValue (Seconds (1.);echoClient.SetAttribute (PacketSize, UintegerValue (1024);ApplicationContainer clientApps = echoClient.Install (p2pNodes.Get (0); /同first.ccclientApps.Start (Seconds (2.0);clientApps.Stop (Seconds (10.0);/*应用程序局部完毕*/*调用全局路由Helper帮助建立网络路由*/Ipv4Globa

24、lRoutingHelper:PopulateRoutingTables (); /全局路由管理器根据节点产生的链路通告为每个节点建立路由表/*开启pcap跟踪*/pointToPoint.EnablePcapAll (second); /开启P2PHelper类对象的pcap;second为保存文件的前缀名,两句的名称一样了./前缀后的节点号是,不用担忧名称一样!/csma.EnablePcap (second, csmaDevices.Get (1), true); /开启csmaHelper类对象的pcap/使用csma网段索引为1的设备(第二个)进展sniff,True开启Promis

25、cuous mode/NodeContainer类对象的Get方法用于获得容器中给定索引下的节点,返回指向请求节点的指针!/Node类对象的GetId返回节点的全局ID(即节点列表中的索引号)./注意之前使用的Get是NetDevice类的方法,以下使用的是Node类的方法!/NetDevice不用取得ID,可以直接使用(已验证);但Node需要进一步查找ID!已验证,不使用GetId无法通过/所以后边的两句和这样的两句是等效的(已验证)/ “csma.EnablePcap (second, csmaDevices.Get (nCsma), 0);/ “csma.EnablePcap (sec

26、ond, csmaDevices.Get (nCsma-1), 0);pointToPoint.EnablePcap (second, p2pNodes.Get (0)-GetId (), 0);/最后一项为e*plicitFilename,默认false,不加也可;假设true,将prefi*作为文件名/倒数第二项promiscuous,默认false,此处仅想跟踪一个设备,故设为0(false);当有一个节点和设备的promiscuous模式设为true时,CSMA网段其它节点便不再产生trace文件。csma.EnablePcap (second, csmaNodes.Get (nCsm

27、a)-GetId (), 0, false);csma.EnablePcap (second, csmaNodes.Get (nCsma-1)-GetId (), 0, false);Simulator:Run ();Simulator:Destroy ();return 0; 2、参加wifi网络view plaincopy to clipboardprint1. /*-*-Mode:C+;c-file-style:gnu;indent-tabs-mode:nil;-*-*/2. /*3. *Thisprogramisfreesoftware;youcanredistributeitand/

28、ormodify4. *itunderthetermsoftheGNUGeneralPublicLicenseversion2as5. *publishedbytheFreeSoftwareFoundation;6. *7. *Thisprogramisdistributedinthehopethatitwillbeuseful,8. *butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof9. *MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe10. *GNUGeneralPublic

29、Licenseformoredetails.11. *12. *YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense13. *alongwiththisprogram;ifnot,writetotheFreeSoftware14. *Foundation,Inc.,59TemplePlace,Suite330,Boston,MA02111-1307USA15. */16. *includens3/core-module.h17. *includens3/simulator-module.h18. *includens3/node-modu

30、le.h19. *includens3/helper-module.h20. *includens3/wifi-module.h21. *includens3/mobility-module.h22. /DefaultNetworkTopology23. /24. /AP25. /*26. /n5n6n7n0-n1n2n3n427. /point-to-point|28. /=29. usingnamespacens3;30. NS_LOG_PONENT_DEFINE(ThirdScriptE*ample);31. int32. main(intargc,char*argv)33. 34. b

31、oolverbose=true;35. uint32_tnCsma=3;36. uint32_tnWifi=3;37. mandLinecmd;38. cmd.AddValue(nCsma,Numberofe*traCSMAnodes/devices,nCsma);39. cmd.AddValue(nWifi,NumberofwifiSTAdevices,nWifi);40. cmd.AddValue(verbose,Tellechoapplicationstologiftrue,verbose);41. cmd.Parse(argc,argv);42. if(verbose)43. 44.

32、LogponentEnable(UdpEchoClientApplication,LOG_LEVEL_INFO);45. LogponentEnable(UdpEchoServerApplication,LOG_LEVEL_INFO);46. 47. NodeContainerp2pNodes;48. p2pNodes.Create(2);49. PointToPointHelperpointToPoint;50. pointToPoint.SetDeviceAttribute(DataRate,StringValue(5Mbps);51. pointToPoint.SetChannelAtt

33、ribute(Delay,StringValue(2ms);52. NetDeviceContainerp2pDevices;53. p2pDevices=pointToPoint.Install(p2pNodes);54. NodeContainercsmaNodes;55. csmaNodes.Add(p2pNodes.Get(1);56. csmaNodes.Create(nCsma);57. CsmaHelpercsma;58. csma.SetChannelAttribute(DataRate,StringValue(100Mbps);59. csma.SetChannelAttri

34、bute(Delay,TimeValue(NanoSeconds(6560);60. NetDeviceContainercsmaDevices;61. csmaDevices=csma.Install(csmaNodes);62. NodeContainerwifiStaNodes;63. wifiStaNodes.Create(nWifi);64. NodeContainerwifiApNode=p2pNodes.Get(0);65. YansWifiChannelHelperchannel=YansWifiChannelHelper:Default();66. YansWifiPhyHe

35、lperphy=YansWifiPhyHelper:Default();67. phy.SetChannel(channel.Create();68. WifiHelperwifi=WifiHelper:Default();69. wifi.SetRemoteStationManager(ns3:AarfWifiManager);70. NqosWifiMacHelpermac=NqosWifiMacHelper:Default();71. Ssidssid=Ssid(ns-3-ssid);72. mac.SetType(ns3:NqstaWifiMac,73. Ssid,SsidValue(

36、ssid),74. ActiveProbing,BooleanValue(false);75. NetDeviceContainerstaDevices;76. staDevices=wifi.Install(phy,mac,wifiStaNodes);77. mac.SetType(ns3:NqapWifiMac,78. Ssid,SsidValue(ssid);79. NetDeviceContainerapDevices;80. apDevices=wifi.Install(phy,mac,wifiApNode);81. MobilityHelpermobility;82. mobili

37、ty.SetPositionAllocator(ns3:GridPositionAllocator,83. Min*,DoubleValue(0.0),84. MinY,DoubleValue(0.0),85. Delta*,DoubleValue(5.0),86. DeltaY,DoubleValue(10.0),87. GridWidth,UintegerValue(3),88. LayoutType,StringValue(RowFirst);89. mobility.SetMobilityModel(ns3:RandomWalk2dMobilityModel,90. Bounds,Re

38、ctangleValue(Rectangle(-50,50,-50,50);91. mobility.Install(wifiStaNodes);92. mobility.SetMobilityModel(ns3:ConstantPositionMobilityModel);93. mobility.Install(wifiApNode);94. InternetStackHelperstack;95. stack.Install(csmaNodes);96. stack.Install(wifiApNode);97. stack.Install(wifiStaNodes);98. Ipv4A

39、ddressHelperaddress;99. address.SetBase(10.1.1.0,255.255.255.0);100. Ipv4InterfaceContainerp2pInterfaces;101. p2pInterfaces=address.Assign(p2pDevices);102. address.SetBase(10.1.2.0,255.255.255.0);103. Ipv4InterfaceContainercsmaInterfaces;104. csmaInterfaces=address.Assign(csmaDevices);105. address.S

40、etBase(10.1.3.0,255.255.255.0);106. address.Assign(staDevices);107. address.Assign(apDevices);108. UdpEchoServerHelperechoServer(9);109. ApplicationContainerserverApps=echoServer.Install(csmaNodes.Get(nCsma);110. serverApps.Start(Seconds(1.0);111. serverApps.Stop(Seconds(10.0);112. UdpEchoClientHelp

41、erechoClient(csmaInterfaces.GetAddress(nCsma),9);113. echoClient.SetAttribute(Ma*Packets,UintegerValue(1);114. echoClient.SetAttribute(Interval,TimeValue(Seconds(1.);115. echoClient.SetAttribute(PacketSize,UintegerValue(1024);116. ApplicationContainerclientApps=117. echoClient.Install(wifiStaNodes.G

42、et(nWifi-1);118. clientApps.Start(Seconds(2.0);119. clientApps.Stop(Seconds(10.0);120. Ipv4GlobalRoutingHelper:PopulateRoutingTables();121. Simulator:Stop(Seconds(10.0);122. pointToPoint.EnablePcapAll(third);123. phy.EnablePcap(third,apDevices.Get(0);124. csma.EnablePcap(third,csmaDevices.Get(0),tru

43、e);125. Simulator:Run();126. Simulator:Destroy();127. return0;128. NS3中文教程:3下载及编译软件首先感此稿的翻译工作人员,正是因为他们的劳动才让我们这些初学者有捷径可取。3.1 下载ns-3从现在起,我们假定读者使用的工作环境为Linu*或者仿Linu*环境(Linu*, Cygwin等等.) 并且已经安装了可用的GNU工具链,而且还安装了Mercurial(分布式版本控制系统)和Waf软件。细节已经在ns-3网页中详述过,参见以下:.nsnam.org/getting_started.html.ns-3源码可以在上的Mer

44、curial源码库下载到.你也可以从.nsnam.org/releases/处下载一个tar格式压缩包,或者直接使用Mercurial从源码库下载。除非有特殊需要,我们推荐使用Mercurial从源码库下载。tar格式压缩包下载,请参见本节最后局部。最简单的方法就是使用Mercurial源码库下载一个ns-3-allinone压缩包,此压缩包含一套脚本集来管理各种子系统下的ns-3下载和安装。我们推荐你使用这个压缩包来简化你的ns-3安装。3.1.1 使用Mercurial下载ns-3作为练习,我们首先在home目录下建立一个目录并取名为repos,用来存放本地Mercurial源码库,注意:

45、在本教程随后容中,我们假定你已经这样做了。如果使用如下的方法,可以在Linu*的shell中下载到一份ns-3-allinone软件包(假定你已经安装了Mercurial):cdmkdir reposcd reposhg clone 当Mercurail的hg命令执行后,可以看到如下结果:destination directory: ns-3-allinonerequesting all changesadding changesetsadding manifestsadding file changesadded 31 changesets with 45 changes to 7 file

46、s7 files updated, 0 files merged, 0 files removed, 0 files unresolved当clone命令运行完毕以后,在前述建立的repos目录下,会出现一个ns-3-allinone目录,而且含有如下文件:build.py* constants.py dist.py* download.py* README util.py注意:你实际上仅仅下载了一些Python脚本,下一步就是利用这些脚本根据需要下载并来安装ns-3软件包。如果你访问如下:就会发现假设干源码库,其中很多是ns3开发团队专用的。其中在源码库org/你会发现名为ns-3.1的源码

47、库,这是ns-3的第一个稳定版本。还有一些分散的源码库名为ns-3.1-reftraces,它为ns-3.1保存了参考记录。保持这些文件的一致性是非常重要的,尤其是当你想对源码库做一个回归测试时。至少做一次测试来验证所有的程序都正确编译了。当前的开发版ns-3的快照存放在中;相关的参考记录存放在中。 ns3开发人员会尽量保持源码库中的代码处于一致,工作的状态,但是他们仍在开发中,有一些未发布过的代码。所以如果你不需要最新的特性的话还是考虑使用发行版。由于发布版的版本号在变化中,我在指南中还是继续使用通常不变的ns-3-dev,但是你可以根据自己的需要选择其他的版本,并替换这里的ns-3-dev

48、,(例如, ns-3.6或ns-3.6-ref-traces),在下文中,你可以通过访问源码库列表或者访问ns3开场网页找到最新的ns-3发布版软件。当你从源码库下载完后,继续切换进入你自己建立的ns-3-allinone目录中。我们现在使用download.py脚本来下载ns-3需要使用的各个部件。继续在你的shell中输入以下命令 (如果你想使用任意发行版你可以将ns-3-dev替换为你选择的发行版的名字,例如ns-3.6 和ns-3.6-reftraces)。./download.py -n ns-3-dev -r ns-3-dev-ref-traces注意,-n选项的默认参数为ns-3

49、-dev,-r选项的默认参数为ns-3-dev-ref-traces,所以上述命令中这两个选项的参数实际上是多余的。我们使用这个例子来描述如何指定源码库。你只需简单键入如下命令就可以使用默认参数来下载ns-3-dev:./download.py当hg (Mercurial)命令执行时,你可以看到如下的信息:* Get NS-3*Cloning ns-3 branchrequesting all changesadding changesetsadding manifestsadding file changesChapter 3: Getting Started 8added 4634 cha

50、ngesets with 16500 changes to 1762 files870 files updated, 0 files merged, 0 files removed, 0 files unresolved这些输出信息显示下载脚本已经从源码库中下载到了实际的ns-3源码,紧接着,你就会看到这样的信息:* Get the regression traces*Synchronizing reference traces using Mercurial.requesting all changesadding changesetsadding manifestsadding file

51、changesadded 86 changesets with 1178 changes to 259 files208 files updated, 0 files merged, 0 files removed, 0 files unresolved这说明下载脚本为你下载了参考记录文件。下载脚本被设计成自适应的,它能检测在一些系统平台上*些ns-3模块不被支持,在你的系统平台上,你可能看不到这些系统不支持的源码被下载。然而,在大多数系统平台上这样的过程会显示如下:* Get PyBindGen*Trying to fetch pybindgen; this will fail if no

52、network connection is available. Hit Ctrl-= bzr checkout -rrevno:640 s:/ pybindgenFetch was successful.这些信息显示了下载脚本在为你下载Python绑定生成器的过程,下一步你就可能看到如下的信息(不同的系统平台表现有所不同),* Get NSC*requesting all changesadding changesetsadding manifestsadding file changesadded 273 changesets with 17565 changes to 15175 fil

53、es10622 files updated, 0 files merged, 0 files removed, 0 files unresolved这些信息显示了下载脚本在为你下载网络仿真器支架程序(NSC)的过程。当复制命令完毕,你在/repos/ns-3-allinone目录下会有几个新目录:build.py* constants.pyc download.py* ns-3-dev-ref-traces/ pybindgen/ util.pyconstants.py dist.py* ns-3-dev/ nsc/ README util.pyc继续进入ns-3-dev目录,你会见到如下的文

54、件:AUTHORS e*amples/ regression/ scratch/ waf*bindings/ LICENSE regression.py src/ waf.bat*CHANGES.html ns3/ RELEASE_NOTES utils/ wscriptdoc/ README samples/ VERSION wutils.py现在可以准备编译ns-3软件了。3.1.2 使用Tarball下载ns-3使用tarball下载ns-3比使用Mercurail下载ns-3要简单一些,因为需要下载的各个局部都已经预先被打包在一个压缩包中了,你只需要选择一个发行版版本,下载并且解压就可

55、以。如上所述,在Mercurial下载方法中,是在home目录下创立一个repos目录,保存本地Mercurial源码库。你也可以建立一个tarball目录来下载。注意:本教程后面会假定你把它下载到了repoa目录,所以请留意这个选择。如果你选择了tarballs方法下载,你可以键入如下命令来下载一份ns-3的发行版 (当然,可以根据需要选择你想要的版本):cdmkdir tarballscd tarballs如果你切换到ns-allinone-3.6目录,你会看到下述文件:现在就可以编译ns-3软件包了。3.2 编译ns-33.2.1 使用build.py编译如果你是第一次编译ns-3软件包

56、,建议使用allinone环境,它会为你以最常用的方式配置工程。切换到你在上文下载一节中创立的目录下。如果你使用Mercurial下载,请进入/repos目录下的ns-3-allinone目录,如果你使用tarball下载,找到/tarballs目录下类似ns-allinone-3.6的目录,键入如下的命令,并请耐心等待:./build.py编译脚本开场编译下载的ns3时,你会看到大量常见的编译器输入信息。最后你会看到如下编译成功的好消息:Waf: Leaving directory /home/craigdo/repos/ns-3-allinone/ns-3-dev/buildbuild f

57、inished successfully (2m30.586s)一旦工程编译好,你就可以不再使用ns-3-allinone脚本包了。你已经从其中获取必要的东西,现在是你直接同Waf交互的时候了,它位于ns-3-dev目录中,并不在ns-3-allinone目录中。切换到ns-3-dev目录下(或者你下载的版本的相应目录下):cd ns-3-dev使用Waf编译我们使用waf来配置和编译ns-3工程软件包,这一点不是严格必须的,但是做一个简单的介绍是很有必要的,起码可以了解如何修改工程的配置。也许你能做出的最有用的配置修改就是编译工程的优化版本了,默认你会将你的工程编译为调试版本,让我们来使工程

58、做出优化的编译。为了通知waf进展优化编译,你需要执行如下的命令:./waf -d optimized configure这会Waf可能会切换到其他目录收集信息. 当编译系统检查各种依存关系时,你可以看到类似如下的输出结果:Checking for program g+ : ok /usr/bin/g+Checking for program cpp : ok /usr/bin/cppChecking for program ar : ok /usr/bin/arChecking for program ranlib : ok /usr/bin/ranlibChecking for g+ : ok鉴于长度限制,省略Checking

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!