向NS-3添加新模块_ns3.35添加新模块_ns3.35以及更早版本添加新模块

news2024/11/28 12:41:08

2022年11月,ns3官网发布了3.37版本,与3.36一样,运行、编译、配置的时候使用的都是ns3.37/ns3 这个脚本,但3.35以及3.35以前的版本使用的都是ns3.35/waf脚本,相应的3.35以及以前的版本与3.36以后的版本,新生成模块的流程也有了一些细微的变化

 

 以下是3.37新生成模块的流程:

使用ns3的时候,我们需要调用很多模块,比如对wifi的简单功能进行仿真时,我们就用到了mobility、PointToPoint、csma、wifimac、wifiphty等等这些模块,那么当我需要仿真使用一个常用但ns3里面没有的模块的时候,我就需要新生成一个模块,或者把其他人写好的模块移植到当前环境——那么如果ns3版本不同的话,我们还是需要一些类似于新生成ns3模块的操作。https://blog.csdn.net/Mr_liu_666/article/details/128054390本文主要介绍3.35以及以前的版本,如何生成一个新的模块:

第一步 模块布局

除了Cmakefile.txt变成了wcscript以外,与3.37("3.36以及以后的版本" 与 "3.37"在本文中是同一个意思,都指的是3.37版本,也就是上面链接里面的版本)一致。

第二步 创建模块框架

也是用create-module.py来创建框架,与3.37一致

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

关于依赖库的指定。wscript和Cmakefile.txt有所不同(图是我自己博客粘贴过来的),以下是Cmakelist.txt(也就是3.36以及后面版本的写法):

 以下是3.35以及之前版本指定依赖的写法,新模块名字叫new-module,只依赖于core模块:

def build(bld):
	module = bld.create_ns3_module('new-module', ['core'])

如果新模块名字叫new-module,依赖于internet, mobility和aodv模块:

def build(bld):
	module = bld.create_ns3_module('new-module', ['internet', 'mobility', 'aodv'])

与3.37一致,internet等模块依赖于core,所以不用层叠调用core了。

第三步 声明源文件

与3.37一致,wscript也是声明源文件、头文件和test文件,以spectrum为例:

def build(bld):
    module = bld.create_ns3_module('spectrum', ['internet', 'propagation', 'antenna','applications'])
    module.source = [
        'model/spectrum-model.cc',
        'model/spectrum-value.cc',
            .
            .
            .
        'model/microwave-oven-spectrum-value-helper.cc',
        'helper/spectrum-helper.cc',
        'helper/adhoc-aloha-noack-ideal-phy-helper.cc',
        'helper/waveform-generator-helper.cc',
        'helper/spectrum-analyzer-helper.cc',
]

也是指定cc文件,不同的是,wscript把library 的指定和cc的列表放到了一起而Cmakelist.txt是单独列出了一个LIBRARIES_TO_LINK。

第四步 声明公共头文件

与3.37一致,公共头文件也是需要在wscript里面指定的,依然以spectrum为例:

headers = bld(features='ns3header')
headers.module = 'spectrum'
headers.source = [
    'model/spectrum-model.h',
    'model/spectrum-value.h',
        .
        .
        .
    'model/microwave-oven-spectrum-value-helper.h',
    'helper/spectrum-helper.h',
    'helper/adhoc-aloha-noack-ideal-phy-helper.h',
    'helper/waveform-generator-helper.h',
    'helper/spectrum-analyzer-helper.h',
]

不同的是,wscript需要通过headers = bld(features='ns3header')告诉waf哪些.h文件是公共的,可以大家直接#include "ns3/spectrum-model.h"调用的,而Cmakelist.txt不需要单独说明,只要放到Cmakelist.txt头文件列表里面,就可以#include "ns3/new-module.h"来调用了。

第五步 声明Test

与3.37一致,指定test源文件即可,依旧以spectrum为例:

module_test = bld.create_ns3_module_test_library('spectrum')
module_test.source = [
    'test/spectrum-interference-test.cc',
    'test/spectrum-value-test.cc',
]

加了test之后可以用test.py --list查找到(由于我当前的环境是3.37,这里就贴3.37的图了),

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

 第六步 声明example

与3.37类似,example也需要在example/wscript(example/Cmakelist.txt)里面指定,也是指定example名字、链接库、源码列表,只不过格式稍微有些区别,以下代码是3.35的:

def build(bld):
    obj = bld.create_ns3_program('adhoc-aloha-ideal-phy',
                                 ['spectrum', 'mobility'])
    obj.source = 'adhoc-aloha-ideal-phy.cc'

 下图是3.37的。

 

第七步 将example 作为 test执行

这一步3.35和3.37没有区别。需要在test的examples-to-run.py里面添加需要测试的example的源码文件名,依然以spectrum为例:

example_name是要运行的可执行文件

do_run是运行示例的条件

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

第八步 configure 和 build

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

3.37与3.35唯一的区别就是waf脚本现在叫ns3了。

第九步 添加Python Bindings

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

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

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

相关文章

Java迭代器 for循环的区别

1、Iterator接口: Iterator接口包含三个方法:hasNext,next,remove Iterator常用于对集合进行 一边遍历一边修改 的操作 注意:当Iterator迭代访问Collection集合中元素时,Collection的元素不能改变&#x…

数据库实践 Hw02

Assignment 02: get familiar with operations in MySQL 创建数据库 创建名字为bank的银行数据库 create database if not exists bank; show create database bank; use bank; show tables;可以获得如下内容 后续展示bank数据库中的tables tables为空 bank数据中创建表…

【Compose】Desktop Application 初尝试

前言 作为一个多年的android开发者,自从Jetpack发布以来,其中的Compose组件就深深的吸引了我,在去年就用新版android studio创建模板尝鲜了一把,不过并没有投入太多时间和精力,其实还有一个消息我没太关注&#xff0c…

算法提升:图的最小生成树算法-克鲁斯卡尔(Kruskal)

目录 概念 思路 代码 概念 克鲁斯卡尔算法查找最小生成树的方法是:将连通网中所有的边按照权值大小做升序排序,从权值最小的边开始选择,只要此边不和已选择的边一起构成环路,就可以选择它组成最小生成树。对于 N 个顶点的连通网…

axios数据交互

目录 一、axios 概念 二、官方文档 三、下载命令 四、特点 五、基本语法 六、基本案例 一、axios 概念 axios 是基于promise创建的http库,可以用于客户端(浏览器)和 node.js ​ 官方概念: Axios 是一个基于 promise 的 HTT…

面向OLAP的列式存储DBMS-13-[ClickHouse]的MergeTree表引擎原理解析

ClickHouse 中最重要的表引擎:MergeTree 的深度原理解析 首先我们了解了 MergeTree 的基础属性和物理存储结构;接着,依次介绍了数据分区、一级索引、二级索引、数据存储和数据标记的重要特性;最后总结了 MergeTree 上述特性一起协…

C++ Reference: Standard C++ Library reference: C Library: cwctype: iswdigit

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwctype/iswdigit/ 函数 <cwctype> iswdigit int iswdigit (wint_t c); 检查宽字符是否为十进制数字 检查c是否为十进制数字字符。 十进制数字是0 1 2 3 4 5 6 7 8 9中的任意一个。 此函数是isdigit&#xff…

【Web前端基础进阶学习】HTML详解(下篇)

上篇学习到了HTML列表&#xff0c;现在从区块开始学习&#xff01; 一起学习下篇吧! 一.HTML区块 1.HTML区块元素2.HTML内联元素3.HTML的 div 元素4.HTML的 span 元素 二.HTML布局 1.使用div元素添加网页布局2.使用table元素添加网页布局 三.HTML表单和输入 1.文本域2.密码字…

压缩包密码可以删除吗?

压缩包文件设置了密码&#xff0c;但是长时间没有使用&#xff0c;忘记了密码、不能解压压缩包了&#xff0c;还能够删除压缩包密码嘛&#xff1f; 压缩包设置的加密&#xff0c;不需要再加密了&#xff0c;可以删除压缩包密码&#xff0c;以后不需要输入密码再解压密码了&…

11_html

知识点1【HTML概述】 知识点2【文字标签】 知识点3【标题】 知识点4【超链接】 知识点5【table表格标签】&#xff08;重要&#xff09; 知识点6【form表单】&#xff08;重要&#xff09; 知识点7【JavaScript的概述】让网页动起来 1、什么是 Javascript? 2、网页使用j…

【LEACH协议】无线传感器网络LEACH与DEEC协议【含Matlab源码 2187期】

⛄一、 简介 1 引言 WSN 由能感知外部环境的传感器节点以自组网的形式构成&#xff0c;是一种分布式无线传感器网络。随着科技的进步和现代生活的需求&#xff0c;由于 WSN 的远程控制、信息即时传播以及低功耗等众多优点&#xff0c;WSN 在军事医疗、生活娱乐和工业生产等各个…

锦囊秘籍!用Python操作MySQL的使用教程集锦!

一. python操作数据库介绍 大家好&#xff0c;我是毕加锁&#xff08;锁&#xff01;&#xff09;。 Python 标准数据库接口为 Python DB-API&#xff0c;Python DB-API为开发人员提供了数据库应用编程接口。Python 数据库接口支持非常多的数据库&#xff0c;你可以选择适合你…

生产环境 SSH 安全有效小技巧

生产环境使用 SSH 工具的有用技巧 文章目录生产环境使用 SSH 工具的有用技巧生产环境上线时使用瘦客户机多开几个 SSH 窗口短暂离开一个会话时使用反斜杠&#xff08;\&#xff09;开启 SSH 工具的 Log Session 功能总结我们知道&#xff0c;我们学习 IT 技术时自己搭建的环境&…

BufferPool之链表

系列文章目录 MySQL之BufferPool 文章目录系列文章目录前言一、free链表1.1结构简图1.2 结构说明二、flush链表2.1 结构简图2.2 结构说明三、LRU链表3.1 结构简图3.2 LRU优化后结构简图附录前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 本文会介绍fr…

锅炉防磨防爆可视化管理系统

电厂的各类安全事故中&#xff0c;锅炉四管泄爆事故占比最高、影响最大。四管泄漏不仅直接导致停机停炉、引起重大经济损失、威胁电网安全运行、甚至会直接造成机组管理人员的人身伤害。因此锅炉防磨防爆管理工作的好坏是保证机组稳定运行、工作人员安全、电厂整体效益的重要前…

全网最全最深:web前端架构师面试题+缜密全面的学习笔记

都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升 Java…

Python爬虫库urllib使用详解

大家好 我是政胤 一、Python urllib库 Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; urllib.request - 打开和读取 URL。 urllib.error - 包含 urllib.request 抛出的异常。 url…

3.6.3、随机接入-CSMA/CD协议

总线局域网使用的协议 [^96 比特时间]: 发送 96 比特所耗费的时间&#xff0c;也成为帧间最小间隔。其作用是接收方可以检测出一个帧的结束&#xff0c;同时也使得所有其他站点都能有机会平等竟争信道并发送帧。 1、案例 多个主机连接到一根总线上&#xff0c;各主机随机发送帧…

system函数实践1:system函数进程的爸爸是谁?

前言 有两个问题&#xff1a; system函数中修改了环境变量&#xff0c;会不会影响执行它的进程&#xff1f; 不会。 首先&#xff0c;这个我测过了&#xff0c;因为我原本想用它来传递参数。 为什么&#xff1f;因为system函数执行的时候&#xff0c;会先创建一个shell,然后再…

自然灾害数据:中国台风数据集(更新至2022.3)

1、数据来源&#xff1a;中国天气网 2、时间跨度&#xff1a;1949-2021年 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 包含指标如下&#xff1a; 序号、编号、中文名、登陆时间、登陆序号、登陆地、登陆地地区代码、登陆时强度等级、省份代码、省份、城市代码、…