docs: Restructuring docs and adding new section about customizing Content Store and PIT
diff --git a/docs/source/helpers.rst b/docs/source/helpers.rst
index b73a1ef..efe27f8 100644
--- a/docs/source/helpers.rst
+++ b/docs/source/helpers.rst
@@ -9,79 +9,26 @@
:ndnsim:`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.
-Example::
+Example:
- ndn::StackHelper ndnHelper;
- NodeContainer nodes;
- ...
- ndnHelper.Install (nodes);
+.. code-block:: c++
-Forwarding strategy
-+++++++++++++++++++
+ ndn::StackHelper ndnHelper;
+ NodeContainer nodes;
+ ...
+ ndnHelper.Install (nodes);
-A desired :ndnsim:`forwarding strategy <ForwardingStrategy>` parameter need to be set before installing stack on a node.
+Routing
++++++++
- Currently, there are 2 implemented forwarding strategies that can be used in simulations:
-
- - :ndnsim:`Flooding` (default)
-
- Interests will be forwarded to all available faces available for a route (FIB entry).
- If there are no available GREEN or YELLOW faces, interests is dropped.
-
- .. code-block:: c++
-
- ndnHelper.SetForwardingStrategy ("ns3::ndn::fw::Flooding");
- ...
- ndnHelper.Install (nodes);
-
-
-
- - :ndnsim:`SmartFlooding`
-
- If GREEN face is available, Interest will be sent to the highest-ranked GREEN face.
- If not, Interest will be forwarded to all available faces available for a route (FIB entry)/
- If there are no available GREEN or YELLOW faces, interests is dropped.
-
- .. code-block:: c++
-
- ndnHelper.SetForwardingStrategy ("ns3::ndn::fw::SmartFlooding");
- ...
- ndnHelper.Install (nodes);
-
- - :ndnsim:`BestRoute`
-
- If GREEN face is available, Interest will be sent to the highest-ranked GREEN face.
- If not, Interest will be forwarded to the highest-ranked YELLOW face.
- If there are no available GREEN or YELLOW faces, interests is dropped.
-
- .. code-block:: c++
-
- ndnHelper.SetForwardingStrategy ("ns3::ndn::fw::BestRoute");
- ...
- ndnHelper.Install (nodes);
-
-Default routes
-++++++++++++++
+All forwarding strategies require knowledge of where Interests can be forwarded (Forwarding Information Base).
+Unlike IP routing, this knowledge may be imprecise, but without such knowledge forwarding strategies will not be able to make any decision and will drop any Interests.
.. note::
- Disabled by default
-
-In simple topologies, like in :doc:`examples <examples>`, or when
-simulating broadcast environment, it is possible to set up *default*
-FIB entries using :ndnsim:`StackHelper::SetDefaultRoutes` call.
-More specifically, every installed NDN stack will have a FIB entry to ``/`` prefix, containing all available faces.
-
-The following should be done before installing stack on a node:
-
- .. code-block:: c++
-
- ndnHelper.SetDefaultRoutes (true);
- ...
- ndnHelper.Install (nodes);
-
+ 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
-+++++++++++++++
+^^^^^^^^^^^^^^^
Routes can be configured manually using :ndnsim:`StackHelper::AddRoute` static methods of :ndnsim:`StackHelper`.
@@ -97,14 +44,8 @@
int32_t metric = ... // some routing metric
ndn::StackHelper::AddRoute (node, prefix, face, metric);
-
-.. Enable optional interest limiting
-.. +++++++++++++++++++++++++++++++++
-
-.. EnableLimits
-
-GlobalRoutingHelper
------------------------
+Global routing controller
+^^^^^^^^^^^^^^^^^^^^^^^^^
To simplify FIB management in large topologies, ndnSIM contains a global routing controller (:ndnsim:`helper <GlobalRoutingHelper>` and :ndnsim:`special interface <GlobalRouter>`), similar in spirit to ``Ipv4GlobalRoutingHelper``.
@@ -134,6 +75,154 @@
cdnGlobalRoutingHelper.CalculateRoutes ();
+Default routes
+^^^^^^^^^^^^^^
+
+In simple topologies, like in :doc:`examples <examples>`, or when
+simulating broadcast environment, it is possible to set up *default*
+FIB entries using :ndnsim:`StackHelper::SetDefaultRoutes` call.
+More specifically, every installed NDN stack will have a FIB entry to ``/`` prefix, containing all available faces.
+
+The following should be done before installing stack on a node:
+
+ .. code-block:: c++
+
+ ndnHelper.SetDefaultRoutes (true);
+ ...
+ ndnHelper.Install (nodes);
+
+
+Content Store
++++++++++++++
+
+ndnSIM comes with several different in-memory :ndnsim:`content store <ndn::ContentStore>` implementations, featuring different cache replacement policies.
+
+.. note:
+
+ The default content store uses LRU replacement policity and constrained with 100 cached ContentObjects.
+
+To select a particular content store and configure its capacity, use :ndnsim:`SetContentStore <ndn::StackHelper::SetContentStore>` helper method:
+
+- :ndnsim:`Least Recently Used (LRU) <ndn::cs::Lru>` (default):
+
+ .. code-block:: c++
+
+ ndnHelper.SetContentStore ("ns3::ndn::cs::Lru",
+ "MaxSize", "10000");
+ ...
+ ndnHelper.Install (nodes);
+
+- :ndnsim:`First-In-First-Out (FIFO) <ndn::cs::Fifo>`:
+
+ .. code-block:: c++
+
+ ndnHelper.SetContentStore ("ns3::ndn::cs::Fifo",
+ "MaxSize", "10000");
+ ...
+ ndnHelper.Install (nodes);
+
+- :ndnsim:`Random <ndn::cs::Random>`:
+
+ .. code-block:: c++
+
+ ndnHelper.SetContentStore ("ns3::ndn::cs::Random",
+ "MaxSize", "10000");
+ ...
+ ndnHelper.Install (nodes);
+
+.. note::
+
+ If ``MaxSize`` parameter is omitted, then will be used a default value (100).
+
+.. note::
+
+ If ``MaxSize`` is set to 0, then no limit on ContentStore will be enforced
+
+Pending Interest Table
+++++++++++++++++++++++
+
+The current version of ndnSIM provides :ndnsim:`templated realizations <ndn::pit::PitImpl>` of :ndnsim:`PIT abstraction <ndn::Pit>`, allowing optional bounding the number of PIT entries and different replacement policies (i.e., perform different actions when limit on number of PIT entries is reached).
+
+To select a particular PIT implementation and configure its policies, use :ndnsim:`SetPit <ndn::StackHelper::SetPit>` helper method:
+
+- :ndnsim:`persistent <ndn::pit::Persistent>` (default):
+
+ New entries will be rejected if PIT size reached its limit
+
+ .. code-block:: c++
+
+ ndnHelper.SetPit ("ns3::ndn::pit::Persistent",
+ "MaxSize", "0");
+ ...
+ ndnHelper.Install (nodes);
+
+- :ndnsim:`random <ndn::pit::Random>`:
+
+ when PIT reaches its limit, random entry (could be the newly created one) will be removed from PIT;
+
+ .. code-block:: c++
+
+ ndnHelper.SetPit ("ns3::ndn::pit::Random",
+ "MaxSize", "0");
+ ...
+ ndnHelper.Install (nodes);
+
+- :ndnsim:`least-recently-used <ndn::pit::Lru>`:
+
+ the least recently used entry (the oldest entry with minimum number of incoming faces) will be removed when PIT size reached its limit.
+
+ .. code-block:: c++
+
+ ndnHelper.SetPit ("ns3::ndn::pit::Lru",
+ "MaxSize", "0");
+ ...
+ ndnHelper.Install (nodes);
+
+Forwarding strategy
++++++++++++++++++++
+
+A desired :ndnsim:`forwarding strategy <ForwardingStrategy>` parameter need to be set before installing stack on a node.
+
+ Currently, there are following forwarding strategies that can be used in simulations:
+
+ - :ndnsim:`Flooding` (default)
+
+ Interests will be forwarded to all available faces available for a route (FIB entry).
+ If there are no available GREEN or YELLOW faces, interests is dropped.
+
+ .. code-block:: c++
+
+ ndnHelper.SetForwardingStrategy ("ns3::ndn::fw::Flooding");
+ ...
+ ndnHelper.Install (nodes);
+
+
+ - :ndnsim:`SmartFlooding`
+
+ If GREEN face is available, Interest will be sent to the highest-ranked GREEN face.
+ If not, Interest will be forwarded to all available faces available for a route (FIB entry)/
+ If there are no available GREEN or YELLOW faces, interests is dropped.
+
+ .. code-block:: c++
+
+ ndnHelper.SetForwardingStrategy ("ns3::ndn::fw::SmartFlooding");
+ ...
+ ndnHelper.Install (nodes);
+
+ - :ndnsim:`BestRoute`
+
+ If GREEN face is available, Interest will be sent to the highest-ranked GREEN face.
+ If not, Interest will be forwarded to the highest-ranked YELLOW face.
+ If there are no available GREEN or YELLOW faces, interests is dropped.
+
+ .. code-block:: c++
+
+ ndnHelper.SetForwardingStrategy ("ns3::ndn::fw::BestRoute");
+ ...
+ ndnHelper.Install (nodes);
+
+
+
AppHelper
---------------