Helpers are very important components of ndnSIM, especially for writing simulation scenarios. The following summarizes helpers and their basic usage.
NDN Stack Helpers¶
- StackHelper is used to install ndnSIM network stack on requested nodes, as well
- to provide a simple way configure several important parameters of NDN simulation.
StackHelper ndnHelper; NodeContainer nodes; ... ndnHelper.Install(nodes);
All forwarding strategies require knowledge of where Interests can be forwarded (Forwarding Information Base).
By default, all nodes have empty FIB. You need either to manually configure routes, use global routing controller, or (not recommended) enable default routes.
Manually routes (FIB Helper)¶
The FIB helper interacts with the FIB manager of NFD by sending special Interest commands to the manager in order to add/remove a next hop from FIB entries or add routes to the FIB manually (manual configuration of FIB).
Adding a route to the FIB manually:
Ptr<Node> node = ... // some node std::string prefix = ... // some prefix Ptr<ndn::Face> face = ... // NDN face that belongs to the node and through which prefix is accessible int32_t metric = ... // some routing metric FibHelper::AddRoute(node, prefix, face, metric);
- FIB helper has few other AddRoute overloads that may be easier to
- use. For example, when setting up manual routes between nodes connected with PointToPointNetDevice’s, it is simpler to use the overload that accepts two nodes (face will be automatically determined by the helper).
Automatic Shortest Path Routes (Global Routing Helper)¶
There are several necessary steps, in order to take advantage of the global routing controller:
install special interfaces on nodes
NodeContainer nodes; ... GlobalRoutingHelper ndnGlobalRoutingHelper; ndnGlobalRoutingHelper.Install(nodes);
specify which node exports which prefix using GlobalRoutingHelper::AddOrigins()
Ptr<Node> producer; // producer node that exports prefix std::string prefix; // exported prefix ... ndnGlobalRoutingHelper.AddOrigins(prefix, producer);
calculate and install FIBs on every node using GlobalRoutingHelper::CalculateRoutes()
ndnSIM 2.0 exactly like NFD allows different namespaces to be associated with different forwarding strategies. By default, the following forwarding strategy configuration is defined:
The Strategy Choice helper interacts with the Strategy Choice manager of NFD by sending special Interest commands to the manager in order to specify the desired per-name prefix forwarding strategy for one, more or all the nodes of a topology.
This helper should be used as follows:
StrategyChoiceHelper::Install(nodes, prefix, strategyName);
or (for a forwarding strategy to be installed in all the topology nodes):
ndnSIM uses NFD’s content store implementation, maximum size of which can be controlled using StackHelper::setCsSize():
ndnHelper.setCsSize(<max-size-in-packets>); ... ndnHelper.Install(nodes);
Unless specified in the simulation scenario, default maximum size of the content store is 100 Data packets.
NFD’s content store implementation takes full consideration of Interest selectors. In contrast to that, the old ndnSIM 1.0 content store implementations have very limited support for Interest selectors, but features a number of different replacement policies. If your scenario relies on proper selector processing, do not use these implementations as the simulation results most likely be incorrect.
To select old content store implementations, use SetOldContentStore() StackHelper method:
ndnHelper.SetOldContentStore("<content store implementation>", ["<optional parameter>", "<optional parameter's value>" [, ...]]); ... ndnHelper.Install (nodes);
In simulation scenarios it is possible to select one of the existing implementations of the content store or implement your own.
AppHelper simplifies task of creating, configuring, and installing ndnSIM applications.
The basic usage of the AppHelper:
Create helper for specific applications class:
// Create helper for the consumer generating Interests with constant rate AppHelper consumerHelper("ns3::ndn::ConsumerCbr");
Assign prefix on which application operates (either generating Interests using this name or satisfying Interests for this name) using AppHelper::SetPrefix():
Assign application-specific attributes using AppHelper::SetAttribute():
// Set frequency parameter consumerHelper.SetAttribute("Frequency", StringValue ("10")); // 10 interests a second
Install application on one or more nodes:
NodeContainer nodes; ... consumerHelper.Install(nodes)