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