首页 > 解决方案 > How to change pointopoint link datarate during run time in NS3

问题描述

I'm new to NS3. I have a query in changing the pointtopoint link datarate during the runtime. I tried a solution which is mentioned in https://stackoverflow.com/a/65514090/13121848. But here SetDeviceAttribute is not resolved for me.

void
ModifyLinkRate(PointToPointNetDevice *dev) {
   dev->SetDeviceAttribute("DataRate", StringValue ("1Mbps"));
   //dev->SetAttribute("DataRate", StringValue ("1Mbps"));
}
int
main (int argc, char *argv[])
{
...
   PointToPointHelper pointToPoint;
   pointToPoint.SetDeviceAttribute ("DataRate", StringValue (linkRate));
...
   Simulator::Schedule(Seconds(2.0), &ModifyLinkRate, &pointToPoint );
}

标签: c++ns-3point-to-point

解决方案


为了改变点对点链路的数据速率,必须检索安装在节点中的 PointToPointNetDevice。这可以使用与节点关联的 NetDeviceContainer 来完成。示例代码如下,

void
ModifyLinkRate(NetDeviceContainer *ptp, DataRate lr) {
    StaticCast<PointToPointNetDevice>(ptp->Get(0))->SetDataRate(lr);
}
int
main (int argc, char *argv[])
{
...
   PointToPointHelper pointToPoint;
   pointToPoint.SetDeviceAttribute ("DataRate", StringValue (linkRate));
...
   NetDeviceContainer p2pDevices = pointToPoint.Install (p2pNodes);
...
    Simulator::Schedule(Seconds(2.0), &ModifyLinkRate, &p2pDevices,DataRate("20Mbps"));
}

推荐阅读