<div dir="ltr"><div><div><div><div><div><div><div><div>Dear All,<br><br></div>I am making a topology of a certain format in a wifi adhoc mode.<br><img alt="본문 이미지 1" src="cid:ii_15728eb136df0fca" width="530" height="261"><br></div>I am aiming to have a topology like this with NDN SIM.<br></div>I was trying to make it visible like the picture above. <br></div>In the beginning, I was making use of Grid Position allocator with mobility class.<br></div>However, I soon realized that it is not going to help me. <br></div>So I used the manuel allocator mentioned in<br><a href="https://www.nsnam.org/wiki/MobilityHelper#Manual_Allocation">https://www.nsnam.org/wiki/MobilityHelper#Manual_Allocation</a><br><br></div>But there is not much explanation. I am confused whether my approach works.<br></div>Do you know anything about position allocation in Wifi Adhoc mode?<br><div><div><div><div><div><div><br><br><br><br>#include "ns3/core-module.h"<br>#include "ns3/network-module.h"<br>#include "ns3/applications-module.h"<br>#include "ns3/wifi-module.h"<br>#include "ns3/mobility-module.h"<br>#include "ns3/internet-module.h"<br><br>#include "ns3/ndnSIM-module.h"<br><br>using namespace std;<br>namespace ns3 {<br><br>NS_LOG_COMPONENT_DEFINE("ndn.WifiExample");<br><br>//<br>// DISCLAIMER:  Note that this is an extremely simple example, containing just 2 wifi nodes<br>// communicating directly over AdHoc channel.<br>//<br><br>// Ptr<ndn::NetDeviceFace><br>// MyNetDeviceFaceCallback (Ptr<Node> node, Ptr<ndn::L3Protocol> ndn, Ptr<NetDevice> device)<br>// {<br>//   // NS_LOG_DEBUG ("Create custom network device " << node->GetId ());<br>//   Ptr<ndn::NetDeviceFace> face = CreateObject<ndn::MyNetDeviceFace> (node, device);<br>//   ndn->AddFace (face);<br>//   return face;<br>// }<br>void ReceivePacket (Ptr<Socket> socket)<br>{<br>  while (socket->Recv ())<br>    {<br>      NS_LOG_UNCOND ("Received one packet!");<br>    }<br>}<br><br>static void GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, <br>                             uint32_t pktCount, Time pktInterval )<br>{<br>  if (pktCount > 0)<br>    {<br>      socket->Send (Create<Packet> (pktSize));<br>      Simulator::Schedule (pktInterval, &GenerateTraffic, <br>                           socket, pktSize,pktCount-1, pktInterval);<br>    }<br>  else<br>    {<br>      socket->Close ();<br>    }<br>}<br><br><br><br><br>int<br>main(int argc, char* argv[])<br>{<br><br>   std::string phyMode ("DsssRate1Mbps");<br>  double distance = 500;  // m<br>  uint32_t packetSize = 1000; // bytes<br>  uint32_t numPackets = 1;<br>  uint32_t numNodes = 25;  // by default, 5x5<br>  uint32_t sinkNode = 0;<br>  uint32_t sourceNode = 24;<br>  double interval = 1.0; // seconds<br>  bool verbose = false;<br>  bool tracing = false;<br><br>  CommandLine cmd;<br><br>  cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode);<br>  cmd.AddValue ("distance", "distance (m)", distance);<br>  cmd.AddValue ("packetSize", "size of application packet sent", packetSize);<br>  cmd.AddValue ("numPackets", "number of packets generated", numPackets);<br>  cmd.AddValue ("interval", "interval (seconds) between packets", interval);<br>  cmd.AddValue ("verbose", "turn on all WifiNetDevice log components", verbose);<br>  cmd.AddValue ("tracing", "turn on ascii and pcap tracing", tracing);<br>  cmd.AddValue ("numNodes", "number of nodes", numNodes);<br>  cmd.AddValue ("sinkNode", "Receiver node number", sinkNode);<br>  cmd.AddValue ("sourceNode", "Sender node number", sourceNode);<br><br>  cmd.Parse (argc, argv);<br>  // Convert to time object<br>  Time interPacketInterval = Seconds (interval);<br>  <br>  // disable fragmentation<br>  Config::SetDefault("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue("2200"));<br>  Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue("2200"));<br>  Config::SetDefault("ns3::WifiRemoteStationManager::NonUnicastMode",<br>                     StringValue("DsssRate1Mbps"));<br><br>  <br><br>  //////////////////////<br>  //////////////////////<br>  //////////////////////<br>  WifiHelper wifi = WifiHelper::Default();<br>  // wifi.SetRemoteStationManager ("ns3::AarfWifiManager");<br>  wifi.SetStandard(WIFI_PHY_STANDARD_80211a);<br>  wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager", "DataMode",<br>                               StringValue("DsssRate1Mbps"));<br><br>  YansWifiChannelHelper wifiChannel; // = YansWifiChannelHelper::Default ();<br>  wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");<br>  wifiChannel.AddPropagationLoss("ns3::FriisPropagationLossModel");<br>  //wifiChannel.AddPropagationLoss("ns3::NakagamiPropagationLossModel");<br><br>  // YansWifiPhy wifiPhy = YansWifiPhy::Default();<br>  YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default();<br>  wifiPhyHelper.Set ("RxGain", DoubleValue (-10) ); <br>  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b<br>  wifiPhyHelper.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO); <br>  wifiPhyHelper.SetChannel(wifiChannel.Create());<br>  /*wifiPhyHelper.Set("TxPowerStart", DoubleValue(5));<br>  wifiPhyHelper.Set("TxPowerEnd", DoubleValue(5));*/<br><br>  NqosWifiMacHelper wifiMacHelper = NqosWifiMacHelper::Default();<br>  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);<br>  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",<br>                                "DataMode",StringValue (phyMode),<br>                                "ControlMode",StringValue (phyMode));<br>  wifiMacHelper.SetType("ns3::AdhocWifiMac");<br><br>/*  Ptr<UniformRandomVariable> randomizer = CreateObject<UniformRandomVariable>();<br>  randomizer->SetAttribute("Min", DoubleValue(10));<br>  randomizer->SetAttribute("Max", DoubleValue(100));*/<br><br>  MobilityHelper mobility;<br>   Ptr<ListPositionAllocator> initialAlloc = CreateObject<ListPositionAllocator> ();<br>   initialAlloc->Add(Vector(1, 1., 0.));<br>   initialAlloc->Add(Vector(1, 3., 0.));<br>   initialAlloc->Add(Vector(2, 2., 0.));<br>   initialAlloc->Add(Vector(3, 2., 0.));<br>   initialAlloc->Add(Vector(4, 2., 0.));<br>   initialAlloc->Add(Vector(5, 1., 0.));<br>   initialAlloc->Add(Vector(5, 2., 0.));<br>   initialAlloc->Add(Vector(5, 3., 0.));<br><br>  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");<br>  mobility.SetPositionAllocator(initialAlloc);<br><br>  NodeContainer nodes;<br>  nodes.Create(8);<br><br>  ////////////////<br>  // 1. Install Wifi<br>  NetDeviceContainer wifiNetDevices = wifi.Install(wifiPhyHelper, wifiMacHelper, nodes);<br><br>  // 2. Install Mobility model<br>  mobility.Install(nodes);<br><br>  // 3. Install NDN stack<br>  NS_LOG_INFO("Installing NDN stack");<br>  ndn::StackHelper ndnHelper;<br>  // ndnHelper.AddNetDeviceFaceCreateCallback (WifiNetDevice::GetTypeId (), MakeCallback<br>  // (MyNetDeviceFaceCallback));<br>  ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize", "1000");<br>  ndnHelper.SetDefaultRoutes(true);<br>  ndnHelper.Install(nodes);<br><br>  // Set BestRoute strategy<br>  ndn::StrategyChoiceHelper::Install(nodes, "/", "/localhost/nfd/strategy/best-route");<br> <br>  ndn::GlobalRoutingHelper ndnGlobalRoutingHelper;<br>  ndnGlobalRoutingHelper.InstallAll();<br><br>  // 4. Set up applications<br>  NS_LOG_INFO("Installing Applications");<br><br>  std::string prefix = "/prefix";<br><br>  ndn::AppHelper consumerHelper("ns3::ndn::ConsumerCbr");<br>  consumerHelper.SetPrefix(prefix);<br>  consumerHelper.SetAttribute("Frequency", DoubleValue(100.0));<br>  consumerHelper.Install(nodes.Get(0));<br>  consumerHelper.Install(nodes.Get(1));<br>  //consumerHelper.Install(nodes.Get());<br><br>  <br>/*  consumerHelper.SetPrefix("/test/prefix1");<br>  consumerHelper.SetAttribute("Frequency", DoubleValue(10.0));<br>  consumerHelper.Install(nodes.Get(1));*/<br>  <br><br>  ndn::AppHelper producerHelper("ns3::ndn::Producer");<br>  producerHelper.SetPrefix(prefix);<br>  producerHelper.SetAttribute("PayloadSize", StringValue("1200"));<br>  producerHelper.Install(nodes.Get(5));<br>  producerHelper.Install(nodes.Get(6));<br>  producerHelper.Install(nodes.Get(7));<br><br>/*<br>  producerHelper.SetPrefix("/");<br>  producerHelper.SetAttribute("PayloadSize", StringValue("1200"));<br>  producerHelper.Install(nodes.Get(2));*/<br>  ////////////////<br><br>  ndnGlobalRoutingHelper.AddOrigins(prefix, nodes.Get(7));<br>  ndnGlobalRoutingHelper.AddOrigins(prefix, nodes.Get(6));<br>  ndnGlobalRoutingHelper.AddOrigins(prefix, nodes.Get(5));<br><br>  // Calculate and install FIBs<br>  ndn::GlobalRoutingHelper::CalculateRoutes();<br><br>  wifiPhyHelper.EnablePcap ("ndn-simple-adhoc",  wifiNetDevices);<br><br>  Simulator::Stop(Seconds(30.0));<br><br>  Simulator::Run();<br>  Simulator::Destroy();<br><br>  return 0;<br>}<br><br>} // namespace ns3<br><br>int<br>main(int argc, char* argv[])<br>{<br>  return ns3::main(argc, argv);<br>}<br></div></div></div></div></div></div></div>