在网上搜了下添加模块的教程,搜到了一个帖子:http://blog.csdn.net/barcodegun/article/details/6898193 ,但是这个帖子仅仅给出了怎样添加的步骤,我觉得写的比较简单,当我们需要添加别的模块时就不知道怎样操作了。所以,我写这个帖子,会将很多遇到的细节问题和原因展现出来。
vanet-highway,这个模块是Bradley Dupont在Arbabi, Weigle的基础上进行改进的模块代码,使用了xml文件以及加入了更多的场景因素,具体可以参见相关文档,代码文档和介绍文档可以在google code中下载:https://code.google.com/p/ns-3-highway-mobility/downloads/list ,有些不能翻墙的同学下载不了,我上传一份到csdn上:http://download.csdn.net/detail/zy416548283/7626425
,这份代码来自于谷歌的ns3论坛:https://groups.google.com/forum/#!msg/ns-3-users/aOXi5A9tCy8/3-wLcEx31j4J,相对于google code中的代码更加符合module的文件夹分类。
分模块编译,可以参考这个帖子:http://zzgthk.iteye.com/blog/1402271,用一个简单的例子,教你怎样添加模块。ns3的官方也有教程,在ns3-manual中,ns3.20是在第18.2节:Adding a New Module to ns-3. 具体就不翻译了,很好的参考资料,有一个python文件可以帮助你生成模块的相关文件和目录:
./create-module.py new-module
vanet-highway中是给了例子的,为了跑这个例子,在添加好模块之后(直接新建一个文件,然后将上述压缩文件拷贝进去就可以了),然后需要使用waf来编译模块,在编译模块的过程中,由于ns3版本的不断升级,ns3.15的用法和ns3.20的用法已经产生了一些改变,现在把编译过程中的一些问题(编译使用./waf),按照先后问题,做记录,以作参考:
1.(.text+0x18):对‘main’未定义的引用,这个是我自己添加测试模块时,main函数拼写错误造成,还有可能是文件有没有保存。
2.BuildContext‘
object has no attribute ‘new_task_gen‘,对比一下文件,就知道新版的wscript的写法做了改变。如下修改即可:
#headers = bld.new_task_gen(features=['ns3header']) headers = bld(features='ns3header')
3.../src/vanet-highway/model/WifiConfigurationXml.h:50:36: error: ‘WIFI_PHY_STANDARD_80211p_CCH’ was not declared in this scope
使用谷歌搜索,搜索到了这个文件:http://www.nsnam.org/~pdbarnes/doxygen/wifi-phy-standard_8h_source.html,按照这个文件把这两个变量添加进去即可。
4.../src/vanet-highway/model/Highway.cc:255:85:
error: ‘min’ was not declared in this scope
查看这个文件,math.h中没有这个函数,用fmin函数代替这个函数。
5../src/vanet-highway/model/Highway.cc:83:28:
error: expected type-specifier before ‘list’
在list前面加一个std::list。
6.程序的运行方式,可以自己阅读例子程序,也可以参见:https://code.google.com/p/ns-3-highway-mobility/wiki/HighwayMobilityAndVehicularNetworksInNs3#How_To_Run
7.生成了文件vehicleTrace.csv和networkTrace.csv,具体含义,也可以在wiki中查看;
剩下的是分析代码,以及尝试用netanim来绘出车辆的运动轨迹。google
code中还提供了一个vehicle viewer代码,可以尝试使用下。
ns3添加模块之vanet-highway