NS3 TypeId说明以及使用

介绍

ns3的TypeId的设计非常巧妙,基本上每一个模块类都有TypeId属性。

TypeId将每一个模块类的属性和跟踪源集合在一起,非常方便的进行属性值的设定和跟踪源的回调函数的设定。

可以参看NS3 Attribute和Config内容翻译

定义

TypeId
WifiPhy::GetTypeId (void)
{
  static TypeId tid = TypeId ("ns3::WifiPhy")
    .SetParent<Object> ()
    .SetGroupName ("Wifi")
    .AddAttribute ("Frequency",
                   "The operating center frequency (MHz)",
                   UintegerValue (0),
                   MakeUintegerAccessor (&WifiPhy::GetFrequency,
                                         &WifiPhy::SetFrequency),
                   MakeUintegerChecker<uint32_t> ())
    .AddTraceSource ("PhyTxBegin",
                     "Trace source indicating a packet "
                     "has begun transmitting over the channel medium",
                     MakeTraceSourceAccessor (&WifiPhy::m_phyTxBeginTrace),
                     "ns3::Packet::TracedCallback")
  ;
  return tid;
}

上面代码
位置

/wifi/model/wifi-phy.cc

方法说明

SetParent:设置WifiPhy类的父类

SetGroupName :设置WifiPhy类所在模块组

AddAttribute :添加属性

AddTraceSource :添加跟踪源

另外的常用的一个方法:

AddConstructor:添加构造器

使用

//设置属性
m_wifiphy->SetAttribute ("Frequency", TimeValue (m_frequency));

//设置属性,返回bool值说明是否成功
m_wifiphy->SetAttributeFailSafe("Frequency", DoubleValue (m_lookAroundRate));

//设置跟踪源回调
m_wifiphy->TraceConnectWithoutContext ("PhyTxBegin",
                                          MakeCallback (&TcpSocketBase::UpdateCwnd, this));

//解除跟踪源回调
m_wifiphy->TraceDisconnectWithoutContext ("PhyTxBegin", 
                                          MakeCallback (&HierarchicalMobilityModel::ChildChanged, this));

这些代码只是示例,大家能看明白怎么使用就行了。

这些方法所在的位置是:/core/model/object-base.cc


另外:

NS3中很少使用上面的方式设置属性值的,最常用的是通过Config类完成:

Config::Set ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelNumber", 
             UintegerValue(40));

*是通配符

NodeList是一个类,每创建一个Node对象,都会保存NodeList中。

DeviceList也是一个类,每创建一个NetDevice对象都会保存在DeviceList中。

*表示全部,0 1 2 这些数字表示第几个Node对象或者NetDevice对象

$ns3::WifiNetDevice表示对象类型

Phy表示$ns3::WifiNetDevice这个对象的属性。这个属性在类WifiNetDevice或者其父类里面的TypeId中有定义。

$ns3::YansWifiPhy](#)表示Phy这个属性的类型值

ChannelNumber表示$ns3::YansWifiPhy这个对象的属性。这个属性可以在类YansWifiPhy或者其父类里面的TypeId里面有定义。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,242评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • 作者:莫言 第一次拜读莫言的作品,源自研习《史记》的过程中对其中提到的刑罚的好奇,经推荐才找来翻看,居然一整...
    百合燕燕阅读 439评论 0 1
  • (1) 讲个笑话先。 王思聪问王健林:粑粑,钱是万能的吗? 王健林答:谁说钱是万能的?钱明明是万达的好吗! 不好笑...
    独戏清风阅读 405评论 0 1