<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi Hwang,</div><div class=""><br class=""></div>If you don't need any specific mobility model and only need proper positioning of the nodes, I would use the AnnotatedTopologyReader with the topology defined in the text file, as in the example <a href="http://ndnsim.net/2.1/examples.html#node-grid-example-using-topology-plugin" class="">http://ndnsim.net/2.1/examples.html#node-grid-example-using-topology-plugin</a><div class=""><br class=""></div><div class="">This topology file allows you to specify positions of nodes.  These numbers, I believe, are expressed in meters or whatever units the WiFi module assumes the position is measured in.</div><div class=""><br class=""></div><div class="">--</div><div class="">Alex<br class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Sep 14, 2016, at 6:43 AM, Hwang In Chan <<a href="mailto:neogeoss1@gmail.com" class="">neogeoss1@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class="">Dear All,<br class=""><br class=""></div>I am making a topology of a certain format in a wifi adhoc mode.<br class=""><span id="cid:ii_15728eb136df0fca"><image.png></span><br class=""></div>I am aiming to have a topology like this with NDN SIM.<br class=""></div>I was trying to make it visible like the picture above. <br class=""></div>In the beginning, I was making use of Grid Position allocator with mobility class.<br class=""></div>However, I soon realized that it is not going to help me. <br class=""></div>So I used the manuel allocator mentioned in<br class=""><a href="https://www.nsnam.org/wiki/MobilityHelper#Manual_Allocation" class="">https://www.nsnam.org/wiki/MobilityHelper#Manual_Allocation</a><br class=""><br class=""></div>But there is not much explanation. I am confused whether my approach works.<br class=""></div>Do you know anything about position allocation in Wifi Adhoc mode?<br class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><br class=""><br class=""><br class=""><br class="">#include "ns3/core-module.h"<br class="">#include "ns3/network-module.h"<br class="">#include "ns3/applications-module.h"<br class="">#include "ns3/wifi-module.h"<br class="">#include "ns3/mobility-module.h"<br class="">#include "ns3/internet-module.h"<br class=""><br class="">#include "ns3/ndnSIM-module.h"<br class=""><br class="">using namespace std;<br class="">namespace ns3 {<br class=""><br class="">NS_LOG_COMPONENT_DEFINE("ndn.WifiExample");<br class=""><br class="">//<br class="">// DISCLAIMER:  Note that this is an extremely simple example, containing just 2 wifi nodes<br class="">// communicating directly over AdHoc channel.<br class="">//<br class=""><br class="">// Ptr<ndn::NetDeviceFace><br class="">// MyNetDeviceFaceCallback (Ptr<Node> node, Ptr<ndn::L3Protocol> ndn, Ptr<NetDevice> device)<br class="">// {<br class="">//   // NS_LOG_DEBUG ("Create custom network device " << node->GetId ());<br class="">//   Ptr<ndn::NetDeviceFace> face = CreateObject<ndn::MyNetDeviceFace> (node, device);<br class="">//   ndn->AddFace (face);<br class="">//   return face;<br class="">// }<br class="">void ReceivePacket (Ptr<Socket> socket)<br class="">{<br class="">  while (socket->Recv ())<br class="">    {<br class="">      NS_LOG_UNCOND ("Received one packet!");<br class="">    }<br class="">}<br class=""><br class="">static void GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, <br class="">                             uint32_t pktCount, Time pktInterval )<br class="">{<br class="">  if (pktCount > 0)<br class="">    {<br class="">      socket->Send (Create<Packet> (pktSize));<br class="">      Simulator::Schedule (pktInterval, &GenerateTraffic, <br class="">                           socket, pktSize,pktCount-1, pktInterval);<br class="">    }<br class="">  else<br class="">    {<br class="">      socket->Close ();<br class="">    }<br class="">}<br class=""><br class=""><br class=""><br class=""><br class="">int<br class="">main(int argc, char* argv[])<br class="">{<br class=""><br class="">   std::string phyMode ("DsssRate1Mbps");<br class="">  double distance = 500;  // m<br class="">  uint32_t packetSize = 1000; // bytes<br class="">  uint32_t numPackets = 1;<br class="">  uint32_t numNodes = 25;  // by default, 5x5<br class="">  uint32_t sinkNode = 0;<br class="">  uint32_t sourceNode = 24;<br class="">  double interval = 1.0; // seconds<br class="">  bool verbose = false;<br class="">  bool tracing = false;<br class=""><br class="">  CommandLine cmd;<br class=""><br class="">  cmd.AddValue ("phyMode", "Wifi Phy mode", phyMode);<br class="">  cmd.AddValue ("distance", "distance (m)", distance);<br class="">  cmd.AddValue ("packetSize", "size of application packet sent", packetSize);<br class="">  cmd.AddValue ("numPackets", "number of packets generated", numPackets);<br class="">  cmd.AddValue ("interval", "interval (seconds) between packets", interval);<br class="">  cmd.AddValue ("verbose", "turn on all WifiNetDevice log components", verbose);<br class="">  cmd.AddValue ("tracing", "turn on ascii and pcap tracing", tracing);<br class="">  cmd.AddValue ("numNodes", "number of nodes", numNodes);<br class="">  cmd.AddValue ("sinkNode", "Receiver node number", sinkNode);<br class="">  cmd.AddValue ("sourceNode", "Sender node number", sourceNode);<br class=""><br class="">  cmd.Parse (argc, argv);<br class="">  // Convert to time object<br class="">  Time interPacketInterval = Seconds (interval);<br class="">  <br class="">  // disable fragmentation<br class="">  Config::SetDefault("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue("2200"));<br class="">  Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue("2200"));<br class="">  Config::SetDefault("ns3::WifiRemoteStationManager::NonUnicastMode",<br class="">                     StringValue("DsssRate1Mbps"));<br class=""><br class="">  <br class=""><br class="">  //////////////////////<br class="">  //////////////////////<br class="">  //////////////////////<br class="">  WifiHelper wifi = WifiHelper::Default();<br class="">  // wifi.SetRemoteStationManager ("ns3::AarfWifiManager");<br class="">  wifi.SetStandard(WIFI_PHY_STANDARD_80211a);<br class="">  wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager", "DataMode",<br class="">                               StringValue("DsssRate1Mbps"));<br class=""><br class="">  YansWifiChannelHelper wifiChannel; // = YansWifiChannelHelper::Default ();<br class="">  wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");<br class="">  wifiChannel.AddPropagationLoss("ns3::FriisPropagationLossModel");<br class="">  //wifiChannel.AddPropagationLoss("ns3::NakagamiPropagationLossModel");<br class=""><br class="">  // YansWifiPhy wifiPhy = YansWifiPhy::Default();<br class="">  YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default();<br class="">  wifiPhyHelper.Set ("RxGain", DoubleValue (-10) ); <br class="">  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b<br class="">  wifiPhyHelper.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO); <br class="">  wifiPhyHelper.SetChannel(wifiChannel.Create());<br class="">  /*wifiPhyHelper.Set("TxPowerStart", DoubleValue(5));<br class="">  wifiPhyHelper.Set("TxPowerEnd", DoubleValue(5));*/<br class=""><br class="">  NqosWifiMacHelper wifiMacHelper = NqosWifiMacHelper::Default();<br class="">  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);<br class="">  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",<br class="">                                "DataMode",StringValue (phyMode),<br class="">                                "ControlMode",StringValue (phyMode));<br class="">  wifiMacHelper.SetType("ns3::AdhocWifiMac");<br class=""><br class="">/*  Ptr<UniformRandomVariable> randomizer = CreateObject<UniformRandomVariable>();<br class="">  randomizer->SetAttribute("Min", DoubleValue(10));<br class="">  randomizer->SetAttribute("Max", DoubleValue(100));*/<br class=""><br class="">  MobilityHelper mobility;<br class="">   Ptr<ListPositionAllocator> initialAlloc = CreateObject<ListPositionAllocator> ();<br class="">   initialAlloc->Add(Vector(1, 1., 0.));<br class="">   initialAlloc->Add(Vector(1, 3., 0.));<br class="">   initialAlloc->Add(Vector(2, 2., 0.));<br class="">   initialAlloc->Add(Vector(3, 2., 0.));<br class="">   initialAlloc->Add(Vector(4, 2., 0.));<br class="">   initialAlloc->Add(Vector(5, 1., 0.));<br class="">   initialAlloc->Add(Vector(5, 2., 0.));<br class="">   initialAlloc->Add(Vector(5, 3., 0.));<br class=""><br class="">  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");<br class="">  mobility.SetPositionAllocator(initialAlloc);<br class=""><br class="">  NodeContainer nodes;<br class="">  nodes.Create(8);<br class=""><br class="">  ////////////////<br class="">  // 1. Install Wifi<br class="">  NetDeviceContainer wifiNetDevices = wifi.Install(wifiPhyHelper, wifiMacHelper, nodes);<br class=""><br class="">  // 2. Install Mobility model<br class="">  mobility.Install(nodes);<br class=""><br class="">  // 3. Install NDN stack<br class="">  NS_LOG_INFO("Installing NDN stack");<br class="">  ndn::StackHelper ndnHelper;<br class="">  // ndnHelper.AddNetDeviceFaceCreateCallback (WifiNetDevice::GetTypeId (), MakeCallback<br class="">  // (MyNetDeviceFaceCallback));<br class="">  ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize", "1000");<br class="">  ndnHelper.SetDefaultRoutes(true);<br class="">  ndnHelper.Install(nodes);<br class=""><br class="">  // Set BestRoute strategy<br class="">  ndn::StrategyChoiceHelper::Install(nodes, "/", "/localhost/nfd/strategy/best-route");<br class=""> <br class="">  ndn::GlobalRoutingHelper ndnGlobalRoutingHelper;<br class="">  ndnGlobalRoutingHelper.InstallAll();<br class=""><br class="">  // 4. Set up applications<br class="">  NS_LOG_INFO("Installing Applications");<br class=""><br class="">  std::string prefix = "/prefix";<br class=""><br class="">  ndn::AppHelper consumerHelper("ns3::ndn::ConsumerCbr");<br class="">  consumerHelper.SetPrefix(prefix);<br class="">  consumerHelper.SetAttribute("Frequency", DoubleValue(100.0));<br class="">  consumerHelper.Install(nodes.Get(0));<br class="">  consumerHelper.Install(nodes.Get(1));<br class="">  //consumerHelper.Install(nodes.Get());<br class=""><br class="">  <br class="">/*  consumerHelper.SetPrefix("/test/prefix1");<br class="">  consumerHelper.SetAttribute("Frequency", DoubleValue(10.0));<br class="">  consumerHelper.Install(nodes.Get(1));*/<br class="">  <br class=""><br class="">  ndn::AppHelper producerHelper("ns3::ndn::Producer");<br class="">  producerHelper.SetPrefix(prefix);<br class="">  producerHelper.SetAttribute("PayloadSize", StringValue("1200"));<br class="">  producerHelper.Install(nodes.Get(5));<br class="">  producerHelper.Install(nodes.Get(6));<br class="">  producerHelper.Install(nodes.Get(7));<br class=""><br class="">/*<br class="">  producerHelper.SetPrefix("/");<br class="">  producerHelper.SetAttribute("PayloadSize", StringValue("1200"));<br class="">  producerHelper.Install(nodes.Get(2));*/<br class="">  ////////////////<br class=""><br class="">  ndnGlobalRoutingHelper.AddOrigins(prefix, nodes.Get(7));<br class="">  ndnGlobalRoutingHelper.AddOrigins(prefix, nodes.Get(6));<br class="">  ndnGlobalRoutingHelper.AddOrigins(prefix, nodes.Get(5));<br class=""><br class="">  // Calculate and install FIBs<br class="">  ndn::GlobalRoutingHelper::CalculateRoutes();<br class=""><br class="">  wifiPhyHelper.EnablePcap ("ndn-simple-adhoc",  wifiNetDevices);<br class=""><br class="">  Simulator::Stop(Seconds(30.0));<br class=""><br class="">  Simulator::Run();<br class="">  Simulator::Destroy();<br class=""><br class="">  return 0;<br class="">}<br class=""><br class="">} // namespace ns3<br class=""><br class="">int<br class="">main(int argc, char* argv[])<br class="">{<br class="">  return ns3::main(argc, argv);<br class="">}<br class=""></div></div></div></div></div></div></div>
_______________________________________________<br class="">ndnSIM mailing list<br class=""><a href="mailto:ndnSIM@lists.cs.ucla.edu" class="">ndnSIM@lists.cs.ucla.edu</a><br class="">http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim<br class=""></div></blockquote></div><br class=""></div></div></body></html>