blob: 20fc56f7242c93497fc52f5d6aaac4e5db85d6e9 [file] [log] [blame]
.. ndnSIM: NS-3 based NDN simulator
.. ============================================================
============
Introduction
============
.. sidebar:: ndnSIM components
.. image:: _static/ndnSIM-structure.*
:width: 100%
- Packet format changed to [NDN Packet Specification](http://named-data.net/doc/ndn-tlv/)
- ndnSIM uses implementation of basic NDN primitives from
[ndn-cxx library (NDN C++ library with eXperimental eXtensions)](http://named-data.net/doc/ndn-cxx/)
- All NDN forwarding and management is implemented directly using source code of
[Named Data Networking Forwarding Daemon (NFD)](http://named-data.net/doc/NFD/)
- Allows [simulation of real applications](http://ndnsim.net/2.1/guide-to-simulate-real-apps.html)
written against ndn-cxx library
A new release of `NS-3 based Named Data Networking (NDN) simulator <http://ndnsim.net/1.0/>`__
went through a number of extensive refactoring and rewriting. The key new features of the
new version:
- Packet format changed to the `NDN packet format <http://named-data.net/doc/ndn-tlv/>`_
- ndnSIM uses implementation of basic NDN primitives from
`ndn-cxx library (NDN C++ library with eXperimental eXtensions)
<http://named-data.net/doc/ndn-cxx/>`_
- All NDN forwarding and management is implemented directly using source code of `Named
Data Networking Forwarding Daemon (NFD) <http://named-data.net/doc/NFD/>`_
- It is possible to :doc:`simulation some real applications <guide-to-simulate-real-apps>`
written against ndn-cxx library
.. note::
Please note that ndnSIM 2.0 has major refactoring and simulation scenario written for
previous releases most likely would need to be changed to run on ndnSIM 2.0 platform.
Such integration with ndn-cxx and NFD ensures that the simulations are maximally realistic
and can be reproduced in real environments with virtually no changes to the source code.
In addition to that, any experiments with NDN forwarding (e.g., custom forwarding
strategies) inside ndnSIM can be directly used within the real NFD implementation.
Specifically, the simulator directly uses NFD implementations of :nfd:`pending Interest
table (PIT) <nfd::pit::Pit>`, :nfd:`forwarding information base (FIB) <nfd::fib::Fib>`, and
:nfd:`content store <nfd::cs::Cs>` data structures. In addition to that, ndnSIM allows
experimentation with :ndnSIM:`ndnSIM-specific content store <ndn::ContentStore>` along
with its cache replacement policies ported from the previous version of ndnSIM.
ndnSIM is implemented as a new network-layer protocol model and can run on top of any
available link-layer protocol model (point-to-point, CSMA, wireless, etc.).
In addition, the simulator provides an extensive collection of interfaces and helpers to
perform detailed tracing behavior of every component, as well as NDN traffic flow.
More documentation
------------------
Overall structure of ndnSIM is described in our technical reports:
- **S. Mastorakis, A. Afanasyev, I. Moiseenko, and L. Zhang, "ndnSIM 2: An updated NDN simulator for NS-3," NDN, Technical Report NDN-0028, Revision 2, 2016** (`PDF <https://named-data.net/wp-content/uploads/2016/11/ndn-0028-2-ndnsim-v2.pdf>`__, `BibTex <http://lasr.cs.ucla.edu/afanasyev/bibwiki/bibtex/399>`__)
- **A. Afanasyev, I. Moiseenko, and L. Zhang, "ndnSIM: NDN simulator for NS-3," NDN, Technical Report NDN-0005, 2012** (`PDF <https://named-data.net/wp-content/uploads/TRndnsim.pdf>`__, `BibTex <http://lasr.cs.ucla.edu/afanasyev/bibwiki/bibtex/367>`__)
`ndnSIM API documentation <doxygen/index.html>`_
Also, you can `join our mailing list
<http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim>`_ to see and participate in
discussions about ndnSIM implementation and simulations in general. Do not forget to
check mailling list `archives <http://www.lists.cs.ucla.edu/pipermail/ndnsim/>`_.
Support
-------
The code of ndnSIM is in active development. Bug reports (issues) as well as new feature
implementation are always welcome.
To file a bug report, please use `NDN Redmine
<http://redmine.named-data.net/projects/ndnsim>`_.
To create new feature, please fork the code and submit Pull Request on GitHub.
And of course, `our mailing list <http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim>`_
is the best way to communicate with and get support from ndnSIM team and other users of
ndnSIM.
A very short guide to the code
------------------------------
All the NDN related code is in ``ns-3/src/ndnSIM``
+-----------------+---------------------------------------------------------------------+
| Folder | Description |
+=================+=====================================================================+
| ``model/`` | implementation of NDN base: :ndnsim:`L3Protocol`, faces |
| | (:ndnsim:`Face`, :ndnsim:`NetDeviceTransport`, |
| | :ndnsim:`AppLinkService`), |
| | etc. |
+-----------------+---------------------------------------------------------------------+
| ``NFD/`` | submodule of `NDN Forwarding Daemon (NFD)`_ source code with few |
| | modifications to make it compatible with the simulator |
+-----------------+---------------------------------------------------------------------+
| ``ndn-cxx/`` | submodule of `ndn-cxx library`_ source code with few |
| | modifications to make it compatible with the simulator |
+-----------------+---------------------------------------------------------------------+
| ``apps/`` | applications (in NS-3 sense) that can be installed on the nodes. |
| | Right now we have one producer (:ndnsim:`Producer`) and a |
| | collection of consumer applications (:ndnsim:`ConsumerCbr`, |
| | :ndnsim:`ConsumerWindow`, :ndnsim:`ConsumerBatches`, |
| | :ndnsim:`ConsumerZipfMandelbrot`). See doxygen documentation or |
| | source code for details |
+-----------------+---------------------------------------------------------------------+
| ``utils/`` | helper classes, including implementation of generalized data |
| | structures, topology readers and tracers |
+-----------------+---------------------------------------------------------------------+
| ``helper/`` | a number of :doc:`useful helpers <helpers>` |
+-----------------+---------------------------------------------------------------------+
| ``examples/`` | contain :doc:`several example scenarios <examples>` |
+-----------------+---------------------------------------------------------------------+
.. _NDN Forwarding Daemon (NFD): http://named-data.net/doc/NFD/
.. _ndn-cxx library: http://named-data.net/doc/ndn-cxx/
Logging
-------
Almost every component in ndnSIM exports logging interface, so in debug compilation it is
possible to track many internal details. For example, logging of :ndnsim:`Face` and
:ndnsim:`Consumer` shows everything what happens in :ndnsim:`Face` and :ndnsim:`Consumer`
classes::
NS_LOG=ndn.Face:ndn.Consumer ./waf --run=ndn-simple
Refer to the source code and NS-3 documentation to see what logging interfaces are
available and about details how enable one or more logging interfaces.
.. note::
Please remember that logging is enabled **only** in debug mode. When simulator is
compiled in optimized mode (``./waf configure -d optimized``), logging will be
completely disabled as it significantly slows down execution.
.. note::
A list of log components available in the current version of NS-3 and ndnSIM is listed
`in this page <doxygen/LogComponentList.html>`_.