一、目录结构
首先,我们进入刚刚安装的ns-allinone-3.27,进入目录ns-3.27。我们看一下ns-3的目录结构。
我们首先介绍几个常用的目录文件,后续会补充其他目录文件的介绍。
waf:基于python开发的编译工具,不管是ns3系统本身自带的和我们自己写的仿真代码都是都是由waf负责编译的。
scratch:存放用户脚本文件,是ns-3默认的脚本存放目录。我们可以把要运行的脚本文件或者例子放到这个目录下,使用waf运行脚本文件时可以不用加目录scratch,当脚本文件在其他目录时需要在文件名称前加目录名称才能正常编译运行。
examples:里边包含关于如何使用ns-3的例子,包含许多模块的使用,如能量,路由,无线网络等,如果你和我一样是一个ns-3初学者的话,只是想利用ns-3现有模块编写脚本文件进行网络仿真,比如使用常规协议栈中的协议配置一个有线或者无线局域网络等,那么使用examples目录下的示例对我们很有帮助。examples目录下的文件都是我们一些常用到的例子:
build:这个目录是ns-3的编译目录,包含文件编译时使用的共享库和头文件(build/ns3)。
这里对这个build目录补充一下,build是我们利用waf工具编译脚本一定会进入的路径。以aodv.cc脚本(我随便找的,无所谓)的编译说明一下这个过程(其他任何脚本的编译都是这个过程):
aodv.cc脚本里的部分代码如下:
#include "ns3/aodv-module.h"
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/mobility-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/wifi-module.h"
#include "ns3/v4ping-helper.h"
#include
#include
#include "ns3/netanim-module.h"
using namespace ns3;
class AodvExample
{
public:
AodvExample ();
bool Configure (int argc, char **argv);
void Run ();
void Report (std::ostream & os);
private:
uint32_t size;
double step;
double totalTime;
bool pcap;
bool printRoutes; NodeContainer nodes;
NetDeviceContainer devices;
Ipv4InterfaceContainer interfaces;
private:
void CreateNodes ();
void CreateDevices ();
void InstallInternetStack ();
void InstallApplications ();
};
我们不关心里边的内容,主要关注开头的头文件部分。我刚开始也纳闷,这么多文件,waf是怎么找到的,别忘了,build这个目录是ns-3的编译目录,包含文件编译时使用的共享库和头文件,所以我们去这个目录的ns3目录查看,内容如下:
在里边可以很轻松的找到aodv.cc脚本中的头文件,至于以<>括起来的头文件,比如
说这些主要是让我们弄明白waf编译的过程,首先进入build目录,然后再离开build目录。下面的截图很好的说明了这一点:
src: ns-3的源代码目录,目录结构基本和我们编译过的模块相对应。
这里我们要强调一下,src目录下的每一个文件基本就是对应一个模块,所以我们在研究某一模块时src目录下对应模块的文件信息对我们至关重要。比如我们要研究wifi这一模块,那么我们进入wifi这个文件夹,查看里边的内容。其他所有的模块里的结构基本是一模一样的。
wscript:wscript文件结构是固定的,用来注册模块中包含的源码和使用其他模块情况。
model: model目录包含模块代码的.cc和.h文件。这里边的脚本一般不用我们修改,这个一般通过help类加到节点上,比如一个gpsr模块里的model里边的脚本使用help类加到某个节点上,用来研究gpsr协议。
如果你是一个ns-3的高级应用者的话,ns-3现有模块不能满足你的需求,比如新开发一个路由协议或者设计一个新的能量模型或者移动模型,那现有模块中的model目录下的内容很有参考价值。
helper: helper目录存放的是模块对应的helper类代码的源文件。主要帮助用户创建节点,给节点添加协议栈,网络设备等等。
test: test目录包含的是模块设计者编写的模块测试代码。
examples:examples目录存放的是应用该模块的实例代码。这里的代码我们可以参考并且修改,用来测试或仿真某一个协议,并且收集协议的传输延迟,投递率等。
doc:doc是帮助文档。
bindings:bindings目录是模块用来绑定Python语言的。
二、模块说明
1.常用模块
Core:ns-3的内核模块,实现了ns-3的基本机制,如智能指针(Ptr)、属性(attribute)、回调(callback)、随机变量(random ariable)、日志(logging)、追踪(tracing)和事件调度(event scheduler)等内容。
3.对新技术
Click: ns-3中集成的可编程模块化的软件路由(the click modular router)。Emu:ns-3可以集成到实验床和虚拟机环境下。
参考博客:http://www.cnblogs.com/tempal/p/3798917.html