以下内容是基于《开源网络模拟器ns3 架构与实践》的学习笔记
属性----参数配置
trace变量----数据输出功能
Objectbase类统一定义以上变量的配置函数。
一、属性配置
1、属性创建以及类型
属性本质上是一个C++类的成员变量。属性系统是链接属性和成员变量的桥梁,由元信息的属性辅助信息和其相应的读写函数组成。
先用GetTypeId()函数获取所要操作类的TypeId对象,再用AddAttribute()函数添加属性辅助信息。其中,属性辅助信息主要有:
- 属性名:一个属性在类中的唯一标识
- 默认的属性值
- 关联属性和成员变量的关联函数。主要是关联辅助信息与私有成员变量,并将属性访问函数指针存贮在属性辅助信息中,以便访问私有成员变量。
一个类的属性在不同对象中可以有不同的取值,但都共用同一组属性辅助信息。
属性类型有多种,比如BooleanValue等。
2、ConfigStore
ConfigStore是属性配置中一个重要的C++类,用于保存和读取脚本中使用过的属性值。它是Objectbase类的子类,有三个属性:Mode、Filename和FileFormat。
1)属性保存
需要包含的头文件:
#include "ns3/config-store-module.h"
使用Config::SetDefault()函数设置Mode、Filename和FileFormat。例如:
Config::SetDefault("ns3::ConfigStore::Filename",StringVaule("first-output-attribute.txt"));
然后保存脚本属性。
ConfigStore outputConfig;
outputConfig.ConfigureDefaults();//保存全部元信息中属性的默认值以及全局属性值
outputConfig.ConfigureAttributes();//保存当前脚本所有创建对象的属性值
以上代码应在整个脚本之后,Simulator::Run()之前。
2)属性加载
只需要把属性保存部分的代码中“Mode”属性值设置为“Load”。
ConfigureDefaults()读取全部元信息中属性的默认值以及全局属性值;
ConfigureAttributes()读取保存当前脚本所有创建对象的属性值。
二、trace变量
1、创建trace
trace变量本质是C++类中的一个函数指针成员变量。它的创建类似于属性创建。关键信息有以下3个:
- trace名:trace变量在一个类中的唯一标识。
- MakeTraceSourceAccessor。创建了一个trace访问函数并将这个函数指针存贮在trace辅助信息中。它的作用是关联trace辅助信息和C++类中的私有指针变量。
- 回调函数的签名格式。
2、trace类型
trace变量之间不同的只是函数指针签名格式,主要有:
- TracedCallback签名类型:用于与分组相关的行为事件(如分组收发、丢失等)。
- TracedVaule签名类型: 用于一个数值变量的大小变化事件(如Tcp拥塞窗口大小变化、一个队列中分组数目变化等)



