NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: NDN, CCN, CCNx, content centric networks
API Documentation
ndn-scenario-helper.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
20 #include "ndn-scenario-helper.hpp"
21 #include "ndn-fib-helper.hpp"
22 #include "ndn-app-helper.hpp"
23 
24 #include "ns3/ndnSIM/model/ndn-l3-protocol.hpp"
25 
26 #include "ns3/names.h"
27 #include "ns3/point-to-point-helper.h"
28 #include "ns3/string.h"
29 
30 namespace ns3 {
31 namespace ndn {
32 
34  : m_isTopologyInitialized(false)
35 {
36 }
37 
38 void
39 ScenarioHelper::createTopology(std::initializer_list<std::initializer_list<std::string>/*node clique*/> topology)
40 {
41  if (m_isTopologyInitialized) {
42  throw std::logic_error("Topology cannot be created twice");
43  }
44 
45  PointToPointHelper p2p;
46 
47  for (auto&& clique : topology) {
48  for (auto i = clique.begin(); i != clique.end(); ++i) {
49  auto node1 = getOrCreateNode(*i);
50  for (auto j = i + 1; j != clique.end(); ++j) {
51  auto node2 = getOrCreateNode(*j);
52 
53  auto link = p2p.Install(node1, node2);
54  links[*i][*j] = link.Get(0);
55  links[*j][*i] = link.Get(1);
56  }
57  }
58  }
59 
60  ndnHelper.InstallAll();
61  m_isTopologyInitialized = true;
62 }
63 
64 void
66 {
67  ndnHelper.disableRibManager();
68 }
69 
70 void
72 {
73  ndnHelper.disableFaceManager();
74 }
75 
76 void
78 {
79  ndnHelper.disableStrategyChoiceManager();
80 }
81 
82 void
84 {
85  ndnHelper.disableStatusServer();
86 }
87 
88 void
89 ScenarioHelper::addRoutes(std::initializer_list<ScenarioHelper::RouteInfo> routes)
90 {
91  for (auto&& route : routes) {
92  FibHelper::AddRoute(getNode(route.node1), route.prefix,
93  getFace(route.node1, route.node2), route.metric);
94  }
95 }
96 
97 void
98 ScenarioHelper::addApps(std::initializer_list<ScenarioHelper::AppInfo> apps)
99 {
100  for (auto&& app : apps) {
101  AppHelper appHelper(app.name);
102  for (auto&& param : app.params) {
103  appHelper.SetAttribute(param.first, StringValue(param.second));
104  }
105  auto installedApp = appHelper.Install(getNode(app.node));
106  installedApp.Start(Time(app.start));
107  installedApp.Stop(Time(app.end));
108  }
109 }
110 
111 Ptr<Node>
112 ScenarioHelper::getOrCreateNode(const std::string& nodeName)
113 {
114  auto node = nodes.find(nodeName);
115  if (node == nodes.end()) {
116  std::tie(node, std::ignore) = nodes.insert(std::make_pair(nodeName, CreateObject<Node>()));
117  Names::Add(nodeName, node->second);
118  }
119  return node->second;
120 }
121 
122 Ptr<Node>
123 ScenarioHelper::getNode(const std::string& nodeName)
124 {
125  auto node = nodes.find(nodeName);
126  if (node != nodes.end()) {
127  return node->second;
128  }
129 
130  throw std::invalid_argument("Node " + nodeName + " does not exist");
131 }
132 
133 shared_ptr<Face>
134 ScenarioHelper::getFace(const std::string& node1, const std::string& node2)
135 {
136  auto i = links.find(node1);
137  if (i != links.end()) {
138  auto j = i->second.find(node2);
139  if (j != i->second.end()) {
140  return j->second->GetNode()->GetObject<L3Protocol>()->getFaceByNetDevice(j->second);
141  }
142  }
143 
144  throw std::invalid_argument("Link between " + node1 + " and " + node2 + " does not exist");
145 }
146 
147 } // namespace ndn
148 } // namespace ns3
void disableFaceManager()
Disable Face Manager.
Copyright (c) 2011-2015 Regents of the University of California.
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
Ptr< Node > getNode(const std::string &nodeName)
Get node.
void disableRibManager()
Disable RIB Manager.
static void AddRoute(Ptr< Node > node, const Name &prefix, shared_ptr< Face > face, int32_t metric)
Add forwarding entry to FIB.
shared_ptr< Face > getFace(const std::string &node1, const std::string &node2)
Get face on the node1 pointing towards node2.
void disableFaceManager()
Disable Face Manager.
ApplicationContainer Install(NodeContainer c)
Install an ns3::NdnConsumer on each node of the input container configured with all the attributes se...
void disableStatusServer()
Disable Status Server.
Ptr< FaceContainer > InstallAll() const
Install Ndn stack on all nodes in the simulation.
Copyright (c) 2011-2015 Regents of the University of California.
void disableRibManager()
Disable the RIB manager of NFD.
Implementation network-layer of NDN stack.
void createTopology(std::initializer_list< std::initializer_list< std::string >> topology)
Create topology.
void disableStatusServer()
Disable Status Server.
void addRoutes(std::initializer_list< RouteInfo > routes)
Create routes between topology nodes.
void disableStrategyChoiceManager()
Disable Strategy Choice Manager.
void addApps(std::initializer_list< AppInfo > apps)
Create and install application on nodes.
A helper to make it easier to instantiate an ns3::ndn::App applications on a set of nodes...
void disableStrategyChoiceManager()
Disable Strategy Choice Manager.