在ns-3中添加自己编写的模块


本文将以自己的一个实例来进行详解:
我的ns-3版本为 ns-3-dev
/home/repos/ns-3-allinone/ns-3-dev/

本文将把一个高速公路车联自组网的模型添加到ns-3中。

一、编写代码
这一步,就要是编写相关的代码

本文代码见: http://download.csdn.net/detail/barcodegun/3710431



二、把自己编写的模块加入ns-3中
1. 文件结构
本文是一个高速公路车联自组网的模型,vanet
a. 在repos/ns-3-allinone/ns-3-dev/src目录下,添加新的模块
ns-3的模块,都在src目录下。自己创建的模块,也复制到此目录下。
我在 src 目录下新建 vanet 文件夹
gpf@guopengfei:~/repos/ns-3-allinone/ns-3-dev/src$ mkdir vanet

vanet 目录下文件结构
src/
    vanet/
        examples/
            vanet-highway-test.cc
            wscript
        model/
            controller.cc
            controller.h
            ...
            vehicle.cc
            vehicle.h
        test/
            examples-to-run.py
            vanet-temp-test.cc
        wscript



文件初步说明:
examples主要是作者编写的该模块的相关例子。用户的实际例子,不需要放在这里,可以放在scratch目录下编译及执行。
model 主要为作者编写的该模块的核心代码。
test  主要为作者在编写代码过程中,编写的相关测试程序。


2.修改src/vanet/wscript文件
a. 把 src/spectrum/wscript 这个文件复制到 vanet目录下。
  复制一个模版程序,直接修改该程序。

b. 我的src/vanet/wscript文件:
def build(bld):
    obj = bld.create_ns3_module('vanet', ['network', 'propagation', 'core', 'wifi', 'mobility'])
    obj.source = [
        'model/controller.cc',
        'model/highway.cc',
        'model/lane-change.cc',
        'model/model.cc',
        'model/obstacle.cc',
        'model/vehicle.cc',
        ]

    obj_test = bld.create_ns3_module_test_library('vanet')
    obj_test.source = [
        'test/vanet-temp-test.cc',
        ]

    headers = bld.new_task_gen('ns3header')
    headers.module = 'vanet'
    headers.source = [
        'model/controller.h',
        'model/highway.h',
        'model/lane-change.h',
        'model/model.h',
        'model/obstacle.h',
        'model/vehicle.h',
        ]


    if (bld.env['ENABLE_EXAMPLES']):
        bld.add_subdirs('examples')

c. 相关语法说明:
obj = bld.create_ns3_module('vanet', ['network', 'propagation', 'core', 'wifi', 'mobility'])
//  vanet为创建的组件名, 最后文档生成后,将在repos/ns-3-allinone/ns-3-dev/build/debug/ns3/ 目录下,生成一个 vanet-module.h的文件
以后用户自己编写程序, #include "ns3/vanet-module.h" 就可以直接调用用户编写的这个模块了。

后面的network,propagation ... 是该模块在代码编写过程中,需要信赖的相关组件。

obj.source  表示该模块的源代码

obj_test 为该模块的测试相关文档

headers = bld.new_task_gen('ns3header')  是固定格式,用户不用改变。

headers.module = 'vanet'
    headers.source =  ...   用户对 .h头文件进行设置.


3.修改 src/vanet/examples/wscript
同上,先把src/spectrum/examples/wscript 这个文件复制到 vanet/examples目录下,再修改该文件,
我的文件:

def build(bld):
    if not bld.env['ENABLE_EXAMPLES']:
        return;

    obj = bld.create_ns3_program('vanet-highway-test',
        ['core', 'mobility', 'network', 'wifi', 'vanet'])
    obj.source = 'vanet-highway-test.cc'


4.修改 src/vanet/test/examples-to-run.py
同上,先把 src/spectrum/test/examples-to-run.py  复制到 vanet/test目录下,再修改该文件,
我的文件:
...

cpp_examples = [
    ("vanet-highway-test", "True", "True"),
]

# A list of Python examples to run in order to ensure that they remain
# runnable over time.  Each tuple in the list contains
#
#     (example_name, do_run).
#
# See test.py for more information.
python_examples = []

5. 在 src/wscript文件中添加该组件
gpf@guopengfei:~/repos/ns-3-allinone/ns-3-dev/src$ vim wscript

all_modules = [
    'core',
    'network',
    'config-store',
    'internet',
    'propagation',
    'point-to-point',
     ...
    'tools',
    'visualizer',
    'point-to-point-layout',
    'csma-layout',
    'template',
    'vanet',
    ]

注意上面最后一行 'vanet', 是我添加的该组件。


三、编译,完成最后的添加:
./waf configure --enable-examples --enable-tests
./waf build

显示结果:
Modules built:
aodv                      applications              bridge                   
config-store              core                      csma                     
csma-layout               dsdv                      emu                      
energy                    flow-monitor              internet                 
lte                       mesh                      mobility                 
mpi                       netanim                   network                  
nix-vector-routing        ns3tcp                    ns3wifi                  
olsr                      point-to-point            point-to-point-layout    
propagation               spectrum                  stats                    
tap-bridge                template                  test                     
tools                     topology-read             uan                      
vanet                     virtual-net-device        visualizer               
wifi                      wimax        

注意上面的vanet ,表示此模块已经成功添加。

执行完成后,用户编写代码时:
#include "ns3/vanet-module.h"
即包含此模块。

vanet-module.h 文件在 repos/ns-3-allinone/ns-3-dev/build/debug/ns3/目录下,如果用户的组件为 new-template,则生成的组件名为 new-template-module.h,使用时引用该组件头文件即可。


你可能感兴趣的:(ns-3)