在 NS-3 中能量耗尽后如何关闭节点?
How can I shutdown a node after energy depletion in NS-3?
ns3 新手,谢谢!
我将 energyModel 添加到我的 ns3 节点,它们运行良好。但是我发现当剩余能量为0时节点仍然工作(发送和接收数据包),我设置了EnergyDepletionCallback但是我不知道如何在我的回调中关闭节点或NetDevice。
这是我的能量模型:
Ptr<BasicEnergySource> energySource = CreateObject<BasicEnergySource>();
Ptr<WifiRadioEnergyModel> energyModel = CreateObject<WifiRadioEnergyModel>();
energySource->SetInitialEnergy (1);
energyModel->SetEnergySource (energySource);
energySource->AppendDeviceEnergyModel (energyModel);
WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback =
MakeCallback (&FqAodvExample::EnergyDepletionCallback, this);
energyModel->SetEnergyDepletionCallback (callback);
// aggregate energy source to node
nodes.Get (i)->AggregateObject (energySource);
好的,我找到答案了。在 ns-3 中,没有关闭节点或设备的概念。但是我们可以将接口设置为down来切断通讯。
这是我设置接口关闭的 EnergyDepletionCallback 代码:
std::pair<Ptr<Ipv4>, uint32_t> returnValue = interfaces.Get (i);
Ptr<Ipv4> ipv4 = returnValue.first;
uint32_t index = returnValue.second;
Ptr<Ipv4Interface> iface = ipv4->GetObject<Ipv4L3Protocol> ()->GetInterface (index);
NS_LOG_UNCOND (Simulator::Now().GetSeconds() << "s Set " << iface->GetAddress(0).GetLocal() << " down.");
ipv4->SetDown (index);
ns3 新手,谢谢! 我将 energyModel 添加到我的 ns3 节点,它们运行良好。但是我发现当剩余能量为0时节点仍然工作(发送和接收数据包),我设置了EnergyDepletionCallback但是我不知道如何在我的回调中关闭节点或NetDevice。
这是我的能量模型:
Ptr<BasicEnergySource> energySource = CreateObject<BasicEnergySource>();
Ptr<WifiRadioEnergyModel> energyModel = CreateObject<WifiRadioEnergyModel>();
energySource->SetInitialEnergy (1);
energyModel->SetEnergySource (energySource);
energySource->AppendDeviceEnergyModel (energyModel);
WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback =
MakeCallback (&FqAodvExample::EnergyDepletionCallback, this);
energyModel->SetEnergyDepletionCallback (callback);
// aggregate energy source to node
nodes.Get (i)->AggregateObject (energySource);
好的,我找到答案了。在 ns-3 中,没有关闭节点或设备的概念。但是我们可以将接口设置为down来切断通讯。
这是我设置接口关闭的 EnergyDepletionCallback 代码:
std::pair<Ptr<Ipv4>, uint32_t> returnValue = interfaces.Get (i);
Ptr<Ipv4> ipv4 = returnValue.first;
uint32_t index = returnValue.second;
Ptr<Ipv4Interface> iface = ipv4->GetObject<Ipv4L3Protocol> ()->GetInterface (index);
NS_LOG_UNCOND (Simulator::Now().GetSeconds() << "s Set " << iface->GetAddress(0).GetLocal() << " down.");
ipv4->SetDown (index);