当前位置: 首页 > 工具软件 > ns-template > 使用案例 >

在ns3中添加自己的头文件_在ns-3中添加自己编写的模块 | 学步园

商冠玉
2023-12-01

本文将以自己的一个实例来进行详解:

我的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,使用时引用该组件头文件即可。

 类似资料: