在 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);