ns3使用入门_基于ns3.44_Part2_配置模块参数的Configuration 和Attributes

news2025/3/20 8:22:06

 前言

事实上ns3的官方手册很全,相关书籍也是有的,官网先贴在这里:

ns-3 | a discrete-event network simulator for internet systemsa discrete-event network simulator for internet systemshttps://www.nsnam.org/相关的脚本介绍也都有一些:

ns-3.35_wifi-he-network.cc_ns-3网络仿真工具wifi脚本解析_wifi脚本网络拓扑_ns-3wifi6吞吐脚本关键注释_吞吐部分_基础ns-3_ns3.35-CSDN博客

ns-3-model-library wifi 浅析_ns-3wifi部分解析_ns-3网络模拟器wifi部分文档分析_Part1_ns3 wifiphy物理层冲突-CSDN博客

ns-3-model-library wifi 浅析_ns-3wifi部分解析_ns-3网络模拟器wifi部分文档分析_Part2_yansphy-CSDN博客

不过现有的要么版本老旧,要么过于现象化,不够本质,正好我最近分析了下官方手册,在这里分享给大家——需要更加完整的内容,可以直接去官网。

Configuration and Attributes

在 ns-3 模拟中,配置有两个主要方面:

  • 模拟拓扑和对象的连接方式。
  • 在拓扑中实例化的模型使用的值。

本章重点介绍上述第二项:ns-3 用户如何组织、记录和修改 ns-3 中使用的许多值。ns-3 属性系统如何在模拟器中收集跟踪和统计信息的基础。在本章的课程中,我们将讨论设置或修改 ns-3 模型对象使用的值的各种方法。按特异性递增的顺序,这些是:

“特异性”是指表中后面几行中的方法会覆盖由早期方法设置的值,并且通常比早期方法影响更少的实例。在深入研究属性值系统的细节之前,回顾一下 Object 类的一些基本属性会有所帮助。

Object Overview

ns-3 从根本上说是一个基于 C++ 对象的系统。我们的意思是新的 C++ 类(类型)可以像往常一样声明、定义和子类化。许多 ns-3 对象继承自 Object 基类。这些对象具有一些额外的属性,我们利用这些属性来组织系统和改进对象的内存管理:

“元数据”系统,将类名链接到有关对象的大量元信息,包括:

  • 子类的基类
  • 子类
  • 子类的 “attributes” 集
  • 每个属性是可修改还是只读,
  • 每个属性允许的值范围。

引用计数智能指针实现,用于内存管理。 

使用属性系统的 ns-3 对象派生自 Object 或 ObjectBase。我们将讨论的大多数 ns-3 对象都派生自 Object,但少数位于智能指针内存管理框架之外的对象派生自 ObjectBase。让我们回顾一下这些对象的几个属性。

智能指针

如 ns-3 教程中所述,ns-3 对​ 象由引用计数智能指针实现类 Ptr ​管理内存。智能指针在 ns-3 API 中广泛使用,以避免传递对可能导致内存泄漏的堆分配对象的引用。对于大多数基本用法 (语法),请将智能指针视为常规指针:

Ptr<WifiNetDevice> nd = ...;
nd->CallSomeFunction();
// etc.

那么,如何获得指向对象的智能指针,如本示例的第一行所示?

创建对象

正如我们在上​ 面的 内存管理和类 Ptr ​中所讨论的,在最低级别的 API 中,Object 类型的对象不会像往常一样使用 operator new 进行实例化,而是通过名为 CreateObject() 的模板化函数进行实例化。创建此类对象的典型方法如下:

Ptr<WifiNetDevice> nd = CreateObject<WifiNetDevice>();

您可以将其视为在功能上等效于:

WifiNetDevice* nd = new WifiNetDevice();

从 Object 派生的对象必须使用 CreateObject() 在堆上分配。可以从 ObjectBase 派生的那些,例如 ns-3 帮助程序函数以及数据包标头和尾部,可以在堆栈上分配。在某些脚本中,您可能不会在代码中看到很多 CreateObject() 调用;这是因为实际上有一些helper 程序对象正在为您执行 CreateObject() 调用。

TypeId

Ns3做的object基类里面带好了TypeID,所以后面Node之类的只要继承Object,就可有TypeID

从类 Object 派生的 ns-3 类可以包含一个名为 TypeId 的元数据类,该类记录有关该类的元信息,以便在 Object 聚合和组件管理器系统中使用(都在GetTypeId里面了 ):

  • 标识类的唯一字符串。
  • 元数据系统中子类的基类。
  • 子类中的可访问构造函数集。
  • 类的可公开访问的属性(“attributes”)的列表。

对象摘要

将所有这些概念放在一起,让我们看一个具体的例子:类 Node。公共头文件 node.h 有一个声明,其中包含静态 GetTypeId() 函数调用:

class Node : public Object
{
public:
  static TypeId GetTypeId();
  ...
//这在 node.cc 文件中定义如下:

TypeId
Node::GetTypeId()
{
  static TypeId tid = TypeId("ns3::Node")
    .SetParent<Object>()
    .SetGroupName("Network")
    .AddConstructor<Node>()
    .AddAttribute("DeviceList",
                  "The list of devices associated to this Node.",
                  ObjectVectorValue(),
                  MakeObjectVectorAccessor(&Node::m_devices),
                  MakeObjectVectorChecker<NetDevice>())
    .AddAttribute("ApplicationList",
                  "The list of applications associated to this Node.",
                  ObjectVectorValue(),
                  MakeObjectVectorAccessor(&Node::m_applications),
                  MakeObjectVectorChecker<Application>())
    .AddAttribute("Id",
                  "The id(unique integer) of this Node.",
                  TypeId::ATTR_GET, // allow only getting it.
                  UintegerValue(0),
                  MakeUintegerAccessor(&Node::m_id),
                  MakeUintegerChecker<uint32_t>())
    ;
  return tid;

将 ns-3Object 类的 TypeId 视为运行时类型信息 (RTTI) 的扩展形式。C++ 语言包括一种简单的 RTTI,以支持 dynamic_cast 和 typeid 运算符。上述定义中的 SetParent<Object>() 调用与我们的对象聚合机制结合使用,以允许在 GetObject() 期间在继承树中安全地进行向上和向下转换。它还使子类能够继承其父类的 Attributes。AddConstructor<Node>() 调用与我们的抽象对象工厂机制结合使用,以允许我们构造 C++ 对象,而无需强制用户知道她正在构造的对象的具体类。对 AddAttribute() 的三次调用将给定字符串与类中的强类型值相关联。请注意,您必须提供帮助字符串,该字符串可能会显示,例如,通过命令行处理器显示。每个 Attribute 都与用于访问对象中的基础成员变量的机制相关联(例如,MakeUintegerAccessor() 告诉泛型 Attribute 代码如何访问上面的节点 ID)。还有一些 “Checker” 方法用于

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

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

相关文章

性能测试过程实时监控分析

性能监控 前言一、查看性能测试结果的3大方式1、GUI界面报告插件2、命令行运行 html报告3、后端监听器接入仪表盘 二、influxDB grafana jmeter测试监控大屏1、原理&#xff1a;2、linux环境中influxDB 安装和配置3、jmerer后端监听器连接influxDB4、linux环境总grafana环境搭…

C程序设计(第五版)及其参考解答,附pdf

通过网盘分享的文件&#xff1a;谭浩强C语言设计 链接: https://pan.baidu.com/s/1U927Col0XtWlF9TsFviApg?pwdeddw 提取码: eddw 谭浩强教授的《C程序设计》是C语言学习领域的经典教材&#xff0c;其内容深入浅出&#xff0c;适合不同层次的学习者。 一、教材版本与特点 最…

杰理科技JL703N双模蓝牙芯片—云信

杰理科技JL703N芯片运算能力、接收灵敏度、发射功率、音频性能等指标均处于行业一流水平&#xff0c;能满足多场景的应用需求&#xff0c;具有以下明显优势&#xff1a; 一、高性能双核浮点CPU&#xff0c;算力十足 JL703N芯片搭载了32位高性能双核CPU&#xff0c;主频高达32…

Rust + 时序数据库 TDengine:打造高性能时序数据处理利器

引言&#xff1a;为什么选择 TDengine 与 Rust&#xff1f; TDengine 是一款专为物联网、车联网、工业互联网等时序数据场景优化设计的开源时序数据库&#xff0c;支持高并发写入、高效查询及流式计算&#xff0c;通过“一个数据采集点一张表”与“超级表”的概念显著提升性能…

Nvidia 官方CUDA课程学习笔记

之前心血来潮学习了一下Nvidia CUDA&#xff0c;外行&#xff0c;文章有理解不当的地方&#xff0c;望指正。 主要根据以下Nvidia官方课程学习&#xff1a; https://www.bilibili.com/video/BV1JJ4m1P7xW/?spm_id_from333.337.search-card.all.click&vd_sourcec256dbf86b…

【AI News | 20250319】每日AI进展

AI Repos 1、XianyuAutoAgent 实现了 24 小时自动化值守的 AI 智能客服系统&#xff0c;支持多专家协同决策、智能议价和上下文感知对话&#xff0c;让我们店铺管理更轻松。主要功能&#xff1a; 智能对话引擎&#xff0c;支持上下文感知和专家路由阶梯降价策略&#xff0c;自…

一种基于大规模语言模型LLM的数据分析洞察生成方法

从复杂数据库中提取洞察对数据驱动决策至关重要,但传统手动生成洞察的方式耗时耗力,现有自动化数据分析方法生成的洞察不如人工生成的有洞察力,且存在适用场景受限等问题。下文将介绍一种新的方法,通过生成高层次问题和子问题,并使用SQL查询和LLM总结生成多表数据库中的见…

【npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree】

npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree 当我们拿到一个前端项目的时候&#xff0c;想要把它运行起来&#xff0c;首先是要给它安装依赖&#xff0c;即cd到…

用 pytorch 从零开始创建大语言模型(四):从零开始实现一个用于生成文本的GPT模型

从零开始创建大语言模型&#xff08;Python/pytorch &#xff09;&#xff08;四&#xff09;&#xff1a;从零开始实现一个用于生成文本的GPT模型 4 从零开始实现一个用于生成文本的GPT模型4.1 编写 L L M LLM LLM架构4.2 使用层归一化对激活值进行标准化4.3 使用GELU激活函数…

【新能源汽车“心脏”赋能:三电系统研发、测试与应用匹配的恒压恒流源技术秘籍】

新能源汽车“心脏”赋能&#xff1a;三电系统研发、测试与应用匹配的恒压恒流源技术秘籍 在新能源汽车蓬勃发展的浪潮中&#xff0c;三电系统&#xff08;电池、电机、电控&#xff09;无疑是其核心驱动力。而恒压源与恒流源&#xff0c;作为电源管理的关键要素&#xff0c;在…

目标检测20年(一)

今天看的文献是《Object Detection in 20 Years: A Survey》&#xff0c;非常经典的一篇目标检测文献&#xff0c;希望通过这篇文章学习到目标检测的基础方法并提供一些创新思想。 论文链接&#xff1a;1905.05055 一、摘要 1.1 原文 Object detection, as of one the most…

【MySQL数据库】存储过程与自定义函数(含: SQL变量、分支语句、循环语句 和 游标、异常处理 等内容)

存储过程&#xff1a;一组预编译的SQL语句和流程控制语句&#xff0c;被命名并存储在数据库中。存储过程可以用来封装复杂的数据库操作逻辑&#xff0c;并在需要时进行调用。 类似的操作还有&#xff1a;自定义函数、.sql文件导入。 我们先从熟悉的函数开始说起&#xff1a; …

WEB攻防-PHP反序列化-字符串逃逸

目录 前置知识 字符串逃逸-减少 字符串逃逸-增多 前置知识 1.PHP 在反序列化时&#xff0c;语法是以 ; 作为字段的分隔&#xff0c;以 } 作为结尾&#xff0c;在结束符}之后的任何内容不会影响反序列化的后的结果 class people{ public $namelili; public $age20; } var_du…

英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析

【完整版】3月19日&#xff0c;黄仁勋Nvidia GTC 2025 主题演讲&#xff5c;英伟达 英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析 一、引言 1.1 分析内容 本研究主要采用了文献研究法、数据分析以及专家观点引用相结合的方法。在文献研究方面&#xff0c;广泛收集了…

基于java的ssm+JSP+MYSQL的九宫格日志网站(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能模块&#xff1a; 个人中心 用户管理 日记信息管理 美食信息管理 景点信息管理 新闻推荐管理 日志展示管理 论坛管理 我的收藏管理 管理员管理 留言板管理 系统管理 用户功能模块&#xff1a; 个人中心 日记信息管理 美食信息管理 景点信息…

【Java】Mybatis学习笔记

目录 一.搭建Mybatis 二.Mybatis核心配置文件解析 1.environment标签 2.typeAliases 3.mappers 三.Mybatis获取参数值 四.Mybatis查询功能 五.特殊的SQL执行 1.模糊查询 2.批量删除 3.动态设置表名 4.添加功能获取自增的主键 六.自定义映射ResultMap 1.配置文件处…

遗传算法+四模型+双向网络!GA-CNN-BiLSTM-Attention系列四模型多变量时序预测

遗传算法四模型双向网络&#xff01;GA-CNN-BiLSTM-Attention系列四模型多变量时序预测 目录 遗传算法四模型双向网络&#xff01;GA-CNN-BiLSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于GA-CNN-BiLSTM-Attention、CNN-BiL…

中兴B860AV3.2-T/B860AV3.1-T2_S905L3-B_2+8G_安卓9.0_先线刷+后卡刷固件-完美修复反复重启瑕疵

中兴电信B860AV3.2-T&#xff0f;B860AV3.1-T2_晶晨S905L3-B芯片_28G_安卓9.0_先线刷后卡刷-刷机固件包&#xff0c;完美修复刷机后盒子反复重启的瑕疵。 这两款盒子是可以通刷的&#xff0c;最早这个固件之前论坛本人以及其他水友都有分享交流过不少的固件&#xff0c;大概都…

《Python实战进阶》No27: 日志管理:Logging 模块的最佳实践(下)

No27: 日志管理&#xff1a;Logging 模块的最佳实践&#xff08;下&#xff09; 实战案例 &#xff1a;复杂场景下的 Logging 配置与使用 本实战案例在 Python 3.11.5环境下运行通过 在本案例中&#xff0c;我们将通过一个复杂的日志配置示例&#xff0c;全面展示 logging 模…

Web 小项目: 网页版图书管理系统

目录 最终效果展示 代码 Gitee 地址 1. 引言 2. 留言板 [热身小练习] 2.1 准备工作 - 配置相关 2.2 创建留言表 2.3 创建 Java 类 2.4 定义 Mapper 接口 2.5 controller 2.6 service 3. 图书管理系统 3.1 准备工作 - 配置相关 3.2 创建数据库表 3.2.1 创建用户表…