向NS-3添加新模块_ns3.37添加新模块_ns3.37不同版本模块移植

news2025/2/25 18:11:18

 使用ns3的时候,我们需要调用很多模块,比如对wifi的简单功能进行仿真时:

ns-3.35_third.cc_ns-3网络仿真工具wifi脚本解析_wifi脚本网络拓扑_ns-3third脚本全注释_基础ns-3_ns-3入门_ns-3third脚本解析_Part1_Mr_liu_666的博客-CSDN博客IntroBG:ns-3网络仿真工具是一个用于搭建网络拓扑,测试网络算法、模拟不同环境的网络性能的一套软件,这套软件由多个小模块构成(wifi ipv4之类的模块),运行时调用哪个就编译链接哪个。(这一段是我的理解)NS2(Network Simulator, version 2)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。由UC Berkeley开发而成。它本身有一个虚拟时钟,所有的仿真都由离散事件驱动...https://blog.csdn.net/Mr_liu_666/article/details/121625416?spm=1001.2014.3001.5501
ns-3.35_third.cc_ns-3网络仿真工具wifi脚本解析_wifi脚本网络拓扑_ns-3third脚本全注释_基础ns-3_ns-3入门_ns-3third脚本解析_Part2_Mr_liu_666的博客-CSDN博客ns-3全注释系列,上篇见:https://blog.csdn.net/Mr_liu_666/article/details/121625416?spm=1001.2014.3001.5501https://blog.csdn.net/Mr_liu_666/article/details/122203797?spm=1001.2014.3001.5501

我们就用到了mobility、PointToPoint、csma、wifimac、wifiphty等等这些模块,那么当我需要仿真使用一个常用但ns3里面没有的模块的时候,我就需要新生成一个模块,或者把其他人写好的模块移植到当前环境——那么如果ns3版本不同的话,我们还是需要一些类似于新生成ns3模块的操作。

第一步 模块 layout

module layout,模块布局,也就是新建一个module你的装module的文件夹应该是啥格式的,首先,module都在src目录下,以spectrum模块为例,基本的目录结构如下:

src/
    module-name/
    bindings/
    doc/
    examples/
        CMakeLists.txt
    helper/
    model/
    test/
        examples-to-run.py
    CMakeLists.txt

第二步 创建模块skeleton

 以上的目录可以手动创建,也可以自动创建,假设您新建模块的名字为new-module,在ns3.37目录下的utils目录下有自动化脚本可用

./utils/create-module.py new-module

默认情况下,新模块建立在Contrib中(原文档说会建立在src中,但是实际上建立在Contrib中):

两个Cmakelist.txt里面放的是源文件目录,同时指定需要调用哪些其他模块(类似于在Makefile 里面指定需要链接哪些库)。调用模块在new-module/Cmakelist.txt里定义,不在example下定义。

 创建初始状态如上图所示,可以看到两个源文件、两个头文件、一个要链接的libcore库和一个测试源文件,如果加一些别的库就在LIBRARIES_TO_LINK里面加:

build_lib(
    LIBNAME new-module
    SOURCE_FILES helper/new-module-helper.cc
                 model/new-module.cc
    HEADER_FILES helper/new-module-helper.h
                 model/new-module.h
    LIBRARIES_TO_LINK
        ${libinternet}
        ${libmobility}
        ${libaodv}
    TEST_SOURCES test/new-module-test-suite.cc
)

 由于internet model依赖于core库,所以不用重复引用。

第三步 添加源文件列表

在new-module/Cmakelist.txt里面指定了new-module.cc new-module.h 等5个文件,运行ns configure之后就会进一步调用cmake,然后检查这些文件,再运行ns3 build,就编译Cmakelist.txt里面的源文件,再链接上指明的库,以spectrum模块为例子:

set(source_files
    helper/adhoc-aloha-noack-ideal-phy-helper.cc
    helper/spectrum-analyzer-helper.cc
    helper/spectrum-helper.cc
    helper/tv-spectrum-transmitter-helper.cc
    helper/waveform-generator-helper.cc
    model/aloha-noack-mac-header.cc
    model/aloha-noack-net-device.cc
    model/constant-spectrum-propagation-loss.cc
    model/friis-spectrum-propagation-loss.cc
    model/half-duplex-ideal-phy-signal-parameters.cc
    model/half-duplex-ideal-phy.cc
    model/matrix-based-channel-model.cc
    model/microwave-oven-spectrum-value-helper.cc
    model/multi-model-spectrum-channel.cc
    model/non-communicating-net-device.cc
    model/single-model-spectrum-channel.cc
    model/spectrum-analyzer.cc
    model/spectrum-channel.cc
    model/spectrum-converter.cc
    model/spectrum-error-model.cc
    model/spectrum-interference.cc
    model/spectrum-model-300kHz-300GHz-log.cc
    model/spectrum-model-ism2400MHz-res1MHz.cc
    model/spectrum-model.cc
    model/spectrum-phy.cc
    model/spectrum-propagation-loss-model.cc
    model/phased-array-spectrum-propagation-loss-model.cc
    model/spectrum-signal-parameters.cc
    model/spectrum-value.cc
    model/three-gpp-channel-model.cc
    model/three-gpp-spectrum-propagation-loss-model.cc
    model/trace-fading-loss-model.cc
    model/tv-spectrum-transmitter.cc
    model/waveform-generator.cc
    model/wifi-spectrum-value-helper.cc
)

set(header_files
    helper/adhoc-aloha-noack-ideal-phy-helper.h
    helper/spectrum-analyzer-helper.h
    helper/spectrum-helper.h
    helper/tv-spectrum-transmitter-helper.h
    helper/waveform-generator-helper.h
    model/aloha-noack-mac-header.h
    model/aloha-noack-net-device.h
    model/constant-spectrum-propagation-loss.h
    model/friis-spectrum-propagation-loss.h
    model/half-duplex-ideal-phy-signal-parameters.h
    model/half-duplex-ideal-phy.h
    model/matrix-based-channel-model.h
    model/microwave-oven-spectrum-value-helper.h
    model/multi-model-spectrum-channel.h
    model/non-communicating-net-device.h
    model/single-model-spectrum-channel.h
    model/spectrum-analyzer.h
    model/spectrum-channel.h
    model/spectrum-converter.h
    model/spectrum-error-model.h
    model/spectrum-interference.h
    model/spectrum-model-300kHz-300GHz-log.h
    model/spectrum-model-ism2400MHz-res1MHz.h
    model/spectrum-model.h
    model/spectrum-phy.h
    model/spectrum-propagation-loss-model.h
    model/phased-array-spectrum-propagation-loss-model.h
    model/spectrum-signal-parameters.h
    model/spectrum-value.h
    model/three-gpp-channel-model.h
    model/three-gpp-spectrum-propagation-loss-model.h
    model/trace-fading-loss-model.h
    model/tv-spectrum-transmitter.h
    model/waveform-generator.h
    model/wifi-spectrum-value-helper.h
    test/spectrum-test.h
)

build_lib(
  LIBNAME spectrum
  SOURCE_FILES ${source_files}
  HEADER_FILES ${header_files}
  LIBRARIES_TO_LINK ${libpropagation}
                    ${libantenna}
  TEST_SOURCES
    test/spectrum-ideal-phy-test.cc
    test/spectrum-interference-test.cc
    test/spectrum-value-test.cc
    test/spectrum-waveform-generator-test.cc
    test/three-gpp-channel-test-suite.cc
    test/tv-helper-distribution-test.cc
    test/tv-spectrum-transmitter-test.cc
)

 可见spectrum模块也是一样。可以看到第二步和第三步的Cmakelist.txt格式不一样,两种都是可以的,比较长久像spectrum一样,短一点就像new-module一样就行

另外,source_files和header_files可以空着,也能编译,但是别的模块就调用不了newmodule的API了。

第四步 声明公共header文件

 如果在Cmakelist.txt里面指出了header文件,那么就会在build/include/ns3给你复制一个副本,其他模块include的时候就include "ns3/xxx.h"就行了。如果不想被外部调用,那就不放在列表里就好,这样就不会被复制了。

第五步 声明测试文件

如果module中含test,也需要在Cmakelist.txt里面指出,依旧以spectrum为例子(在上面代码里面已经粘贴过一次了,这里再粘贴一次):

build_lib(
  LIBNAME spectrum
  SOURCE_FILES ${source_files}
  HEADER_FILES ${header_files}
  LIBRARIES_TO_LINK ${libpropagation}
                    ${libantenna}
  TEST_SOURCES
    test/spectrum-ideal-phy-test.cc
    test/spectrum-interference-test.cc
    test/spectrum-value-test.cc
    test/spectrum-waveform-generator-test.cc
    test/three-gpp-channel-test-suite.cc
    test/tv-helper-distribution-test.cc
    test/tv-spectrum-transmitter-test.cc
)

加了test之后可以用test.py --list查找到,

 也可以用test.py执行测试:

 第六步 声明example

 比如third first这类的都属于example,声明example需要源文件并且把它在examples /cmakelists.t xt 里面声明一下。examples下的cmakelists.txt会被上层的cmakelists.txt递归调用

 如果example需要链接外部module,也需要在example/cmakelists.txt里面指出:

第七步 将example 作为 test执行

需要在test的examples-to-run.py里面添加需要测试的example的源码文件名,依然以spectrum为例:

 example_name是要运行的可执行文件

do_run是运行示例的条件

do_valgrind_run是在valgrind下运行示例的条件。

第八步 configure 和 build

新生成的cmakelist.txt需要经过ns3 configure之后才能被读取、生成相应Makefile。有了Makefile之后运行ns3 biuld就可以把心添加的模块编译了。如果configure 的时候使能了test,那么test.py --list就可以看到新模块了,如果configure使能了example,那么ns3 run 就能直接运行声明的example了。

第九步 添加Python Bindings

如果想用python的方式调用,就需要这个了,由于我使用c++,以上内容就够了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/39603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WinSock的I/O模型

目录 一、 套接字的非阻塞工作模式 1.阻塞与非阻塞模式的概念 2.阻塞模式下能引起阻塞的套接字函数 3.两种模式的比较 2. 套接字非阻塞模式的设置方法——ioctlsocket 函数 3. 非阻塞模式下的编程方法 4. 非阻塞模式服务器端程序和客户端程序 二、select模型 1. 套接字…

信息系统综合测试与管理

本文包括软件测试模型、测试技术和测试管理。 一、测试基础 1、软件测试模型 所谓测试模型(Test Model),是测试和测试对象的基本特征、基本关系的抽象。 1)V模型 V模型实际是软件开发瀑布模型的变种,它反映了测试…

CSDN第十期竞赛

比赛详情: 通过这次的周赛让我受益颇多,这次的题目都是平常练习题目的变形,这次的竞赛是十分有意义的,加强对练习题的强化。 两道模拟题: 目录 1.熊孩子拜访 2.走楼梯 1.熊孩子拜访 题目描述 已知存在一个长度为n的…

FB显示学习期数据不足怎么办?

组合投放广告组和广告系列。组合投放广告组和广告系列有助于加快获得所需成效的速度,这意味着广告投放后很快便可看到稳定的成效。 扩大受众群。受众越多,用户完成您的优化事件的机会越多。 提高预算。如果您的预算过低,无法获得约 50 个​…

47、泛型

一、引入 1、传统方法: package generic_;import java.util.ArrayList; SuppressWarnings({"all"}) public class Generic01 {public static void main(String[] args) {ArrayList arrayListnew ArrayList();arrayList.add(new Dog("旺财",10)…

Spring项目结合Maven【实现读取不同的资源环境】

📃目录跳转📚简介:🍑修改pom.xml🥞修改application.yml🚀 演示:📚简介: 由于我们写功能的不能影响到线上环境的配置,所以每一次增加功能我们都要吧项目部署到…

STM32HAL库单ADC+DMA学习及测试记录

一、打开STM32CubeMX选择对应的芯片型号,后进入开发界面 1、双击“STM32CubeMX”软件打开,打开后如下图所示,选择红色框; 选择后可能会更新,等待更新完成即可,如下图: 2、选择开发芯片&#x…

【剧前爆米花--爪哇岛寻宝】面向对象的三大特性——封装、继承以及多态的详细剖析(上——继承)。

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于Java面向对象三大特性——继承的文章,在本篇文章中我会分享继承的一些基础语法以及类在继承时代码的底层逻辑和执行顺序。 目录 继承 需求 继承的定义及语…

nginx(六十八)proxy模块(八)nginx与上游的ssl握手

一 nginx作为客户端与上游的SSL/TLS握手 理解上: nginx作为客户端,此时类似浏览器的角色,发请求建立连接 nginx作为server端与下游进行SSL/TLS握手 ① nginx与后端选择什么样的协议 1)如果nginx与上游是局域网内,一般通过http建立请求,不需要进行…

详解__int128,最大可用整数类型

前言:有些题目需要的数值刚好比 long long 的最大值大那么一点点,那么我们就可以用__int128 来搏一搏(并不是所有OJ都支持这个数据类型,受编译标准影响) 最大值是多少 int 最大值:2^(32-1)-1【受电脑字长影…

碳中和专题:碳足迹核算、碳中和顶刊论文、碳排放交易2022

(1)碳中和顶刊论文 1、数据来源:自身 2、具体内容: 01周宏春:碳循环经济内涵、实践及其碳中和的深远影响.pdf 02谢和平:碳中和目标下煤炭行业发展机遇.pdf 03秦阿宁:碳中和背景下的国际绿色技…

【FPGA】基于状态机实现自动售货机模拟

文章目录一、售货机功能二、售货机状态分析及模块划分三、代码实现四、上板验证一、售货机功能 此自动售货机模拟基于EP4CE6F17C8开发板实现,用按键,led灯,数码管表示各个输入输出 功能: 此自动售货机可以选择A(三元…

[激光原理与应用-21]:《激光原理与技术》-7- 激光技术大汇总与总体概述

目录 前言: 第1章 什么是激光技术 1.1 什么是激光技术 1.2 激光技术的分类方法 第2章 激光的应用技术 2.1 激光加工技术 2.2 激光快速成型 2.3 激光切割 2.4 激光焊接 2.5 激光雕刻 2.6 激光打孔 2.7 激光蚀刻 2.8 激光手术 2.9 激光武器 2.10 激光能…

详解诊断数据库ODX-D

文章目录 前言一、ODX-D具体内容是什么?二、ODX企标中关于ODX-D定义内容三、ODX-D在CANdelaStudio以及ODXStudio中定义内容总结前言 ​又是一周末,静下心码下字,将ODX这个Topic补充完整。 ODX含义是开放式诊断数据交互,是欧洲那边提出诊断数据架构,详情可如下图: 核心…

区间信息维护与查询【树状数组 】 - 原理2 多维树状数组

区间信息维护与查询【树状数组 】 - 原理2 多维树状数组 我们已经知道一维树状数组修改和查询的时间复杂度均为O (logn),可以扩展为m 维树状数组,其时间复杂度为O (log ^m n ),对该算法只需加上一层循环即可。二维数组a [n ][n ]、树状数组c…

创建TCP通信与粘包问题解决

创建TCP通信 nodeJS的Net模块实现了底层通信接口 通信过程 创建服务端:接收和回写客户端数据创建客户端:发送和接收服务端数据数据传输: 内置服务事件和方法读写数据 通信事件 listing事件:调用server.listen方法之后触发con…

介绍 10 个有用的 Flutter 软件包

介绍 10 个有用的 Flutter 软件包 原文 https://genotechies.medium.com/introducing-10-useful-flutter-packages-1252c4b75fa7 前言 FLutter 软件包使您的开发简单快速。然而,有利有弊。有时候,如果从头开始开发这个特性将是有益的,因为可定…

Hive日分区表如何快速导入到StarRocks

1、背景 业务现状:集团使用FineBI做数据呈现及报表分析工具,经过近两年的BI建设,供应链域及营销域的BI建设已初具规模并体系化。数仓规模60TB,FineBI数据集约8000个,BI挂出报表数约1600个,报表月增幅在40左…

非凡社群管理之社群管理有什么内容

社群作为一个非常重要的私域流量池,它本身就是一个提升用户价值的利器。但如果管理不好社群,那么也是无济于事的。 社群小助手提示:高效管理社群,以下这五个方面要做好。 一,社群为用户解决问题,让群成员都…

iwebsec靶场 SQL注入漏洞通关笔记6- 宽字节注入

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记3- bool注入(布尔型盲注&#…