介紹
ns3的TypeId的設(shè)計(jì)非常巧妙,基本上每一個(gè)模塊類(lèi)都有TypeId屬性类缤。
TypeId將每一個(gè)模塊類(lèi)的屬性和跟蹤源集合在一起臼勉,非常方便的進(jìn)行屬性值的設(shè)定和跟蹤源的回調(diào)函數(shù)的設(shè)定。
可以參看NS3 Attribute和Config內(nèi)容翻譯
定義
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
方法說(shuō)明
SetParent:設(shè)置WifiPhy類(lèi)的父類(lèi)
SetGroupName :設(shè)置WifiPhy類(lèi)所在模塊組
AddAttribute :添加屬性
AddTraceSource :添加跟蹤源
另外的常用的一個(gè)方法:
AddConstructor:添加構(gòu)造器
使用
//設(shè)置屬性
m_wifiphy->SetAttribute ("Frequency", TimeValue (m_frequency));
//設(shè)置屬性餐弱,返回bool值說(shuō)明是否成功
m_wifiphy->SetAttributeFailSafe("Frequency", DoubleValue (m_lookAroundRate));
//設(shè)置跟蹤源回調(diào)
m_wifiphy->TraceConnectWithoutContext ("PhyTxBegin",
MakeCallback (&TcpSocketBase::UpdateCwnd, this));
//解除跟蹤源回調(diào)
m_wifiphy->TraceDisconnectWithoutContext ("PhyTxBegin",
MakeCallback (&HierarchicalMobilityModel::ChildChanged, this));
這些代碼只是示例宴霸,大家能看明白怎么使用就行了。
這些方法所在的位置是:/core/model/object-base.cc
另外:
NS3中很少使用上面的方式設(shè)置屬性值的膏蚓,最常用的是通過(guò)Config類(lèi)完成:
Config::Set ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::YansWifiPhy/ChannelNumber",
UintegerValue(40));
*是通配符
NodeList是一個(gè)類(lèi)瓢谢,每創(chuàng)建一個(gè)Node對(duì)象,都會(huì)保存NodeList中驮瞧。
DeviceList也是一個(gè)類(lèi)恩闻,每創(chuàng)建一個(gè)NetDevice對(duì)象都會(huì)保存在DeviceList中。
*表示全部剧董,0 1 2 這些數(shù)字表示第幾個(gè)Node對(duì)象或者NetDevice對(duì)象
$ns3::WifiNetDevice表示對(duì)象類(lèi)型
Phy表示$ns3::WifiNetDevice這個(gè)對(duì)象的屬性。這個(gè)屬性在類(lèi)WifiNetDevice或者其父類(lèi)里面的TypeId中有定義破停。
$ns3::YansWifiPhy](#)表示Phy這個(gè)屬性的類(lèi)型值
ChannelNumber表示$ns3::YansWifiPhy這個(gè)對(duì)象的屬性翅楼。這個(gè)屬性可以在類(lèi)YansWifiPhy或者其父類(lèi)里面的TypeId里面有定義。