Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 1 | .. ndnSIM: NS-3 based NDN simulator |
| 2 | .. ============================================================ |
| 3 | |
| 4 | .. .. toctree:: |
| 5 | .. :maxdepth: 2 |
| 6 | |
Alexander Afanasyev | f34fe56 | 2013-08-09 17:16:12 -0700 | [diff] [blame] | 7 | ============ |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 8 | Introduction |
Alexander Afanasyev | 5d79e68 | 2012-11-19 14:12:23 -0800 | [diff] [blame] | 9 | ============ |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 10 | |
Alexander Afanasyev | f34fe56 | 2013-08-09 17:16:12 -0700 | [diff] [blame] | 11 | The ndnSIM is NS-3 module that implements Named Data Networking (NDN) communication model, the clean slate Internet design. ndnSIM is specially optimized for simulation purposes and has a cleaner and more extensible internal structure comparing to the existing NDN implementation (NDNx). |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 12 | |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 13 | Following the NDN architecture, ndnSIM is implemented as a new network-layer protocol model, which can run on top of any available link-layer protocol model (point-to-point, CSMA, wireless, etc.). |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 14 | |
| 15 | .. note:: |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 16 | It will also be possible to run ndnSIM on top of network-layer (IPv4, IPv6) and transport-layer (TCP, UDP) protocols. |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 17 | However, it is not yet implemented and patches are welcome. |
| 18 | |
| 19 | .. This flexibility allows ndnSIM to simulate scenarios of various homogeneous and heterogeneous networks (e.g., NDN-only, NDN-over-IP, etc.). |
| 20 | |
Alexander Afanasyev | f6807a5 | 2012-08-10 18:11:43 -0700 | [diff] [blame] | 21 | The simulator is implemented in a modular fashion, using separate C++ classes to model behavior of each network-layer entity in NDN: :ndnsim:`pending Interest table (PIT) <Pit>`, :ndnsim:`forwarding information base (FIB) <Fib>`, :ndnsim:`content store <ContentStore>`, :ndnsim:`network <NetDeviceFace>` and :ndnsim:`application <AppFace>` interfaces, :ndnsim:`Interest forwarding strategies <ForwardingStrategy>`, etc. |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 22 | This modular structure allows any component to be easily modified or replaced with no or minimal impact on other components. |
| 23 | 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. |
| 24 | |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 25 | |
| 26 | .. aafig:: |
| 27 | :aspect: 60 |
| 28 | :scale: 120 |
| 29 | |
| 30 | +----------------+ +-----------+ |
| 31 | | "Applications" | | NetDevice | |
| 32 | +----------------+ +-----------+ |
| 33 | ^ ^ |
| 34 | .................|......................................|...................... |
| 35 | . v v . |
Alexander Afanasyev | 7920651 | 2013-07-27 16:49:12 -0700 | [diff] [blame] | 36 | . +----------------------+ +----------------------+ . |
| 37 | . | "Face" | | "Face" | . |
| 38 | . | "(AppFace, ApiFace)" | | "(NetDeviceFace)" | . |
| 39 | . +----------------------+ +----------------------+ . |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 40 | . ^ ^ . |
| 41 | . | | . |
| 42 | . v v . |
| 43 | . XXXXXXXXXXXXXXXXXXXXXXXXXXXXX . |
| 44 | . XX XX . |
| 45 | . XX Core NDN protocol XX . |
Alexander Afanasyev | f6807a5 | 2012-08-10 18:11:43 -0700 | [diff] [blame] | 46 | . XX "(L3Protocol)" XX |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 47 | . XX XX . |
| 48 | . XXXXXXXXXXXXXXXXXXXXXXXXXXXXX . |
| 49 | . ^ ^ ^ ^ . |
| 50 | . | | | | . |
| 51 | . +-------------------+ +---+ +---+ +------------+ . |
| 52 | . | | | | . |
| 53 | . v v v v . |
| 54 | . +-------------------+ +-------+ +-------+ +-------------+ . |
Alexander Afanasyev | f6807a5 | 2012-08-10 18:11:43 -0700 | [diff] [blame] | 55 | . | "ContentStore" | | PIT | | FIB | | "Forwarding"| . |
| 56 | . +-------------------+ +-------+ +-------+ | "Strategy" | . |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 57 | . +-------------+ . |
| 58 | . . |
| 59 | ............................................................................... |
| 60 | |
| 61 | |
Alexander Afanasyev | 9fb2e3d | 2013-03-30 21:11:07 -0700 | [diff] [blame] | 62 | The current wire format for the Interest and Data packets used by ndnSIM is defined in :ref:`ndnSIM packet format`. |
Alexander Afanasyev | f34fe56 | 2013-08-09 17:16:12 -0700 | [diff] [blame] | 63 | ndnSIM also has an option to be compatible to wire format used by `NDNx implementation <http://named-data.net/>`_ (NDNx binary XML encoding). However currently, this option is deprecated, but can be reintroduced in the future as an optional wire format. |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 64 | |
Alexander Afanasyev | e095f0f | 2012-11-21 17:43:32 -0800 | [diff] [blame] | 65 | More documentation |
| 66 | ------------------ |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 67 | |
Alexander Afanasyev | 5b147e8 | 2012-06-22 10:39:46 -0700 | [diff] [blame] | 68 | Overall structure of ndnSIM is described in our `technical report <http://lasr.cs.ucla.edu/afanasyev/data/files/Afanasyev/ndnSIM-TR.pdf>`_. |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 69 | |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 70 | `ndnSIM API documentation <doxygen/index.html>`_ |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 71 | |
Alexander Afanasyev | 9c0794a | 2012-12-10 01:02:33 -0800 | [diff] [blame] | 72 | 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. |
| 73 | Do not forget to check mailling list `archives <http://www.lists.cs.ucla.edu/pipermail/ndnsim/>`_. |
Alexander Afanasyev | 97fb44d | 2012-06-04 18:50:47 -0700 | [diff] [blame] | 74 | |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 75 | |
Alexander Afanasyev | 508269a | 2012-07-28 13:59:54 -0700 | [diff] [blame] | 76 | Support |
Alexander Afanasyev | e095f0f | 2012-11-21 17:43:32 -0800 | [diff] [blame] | 77 | ------- |
Alexander Afanasyev | 508269a | 2012-07-28 13:59:54 -0700 | [diff] [blame] | 78 | |
| 79 | The code of ndnSIM is in active development. Bug reports (issues) as well as new feature implementation are always welcome. |
| 80 | |
| 81 | To file a bug report, please use `GitHub Issues <https://github.com/NDN-Routing/ndnSIM/issues>`_. |
| 82 | |
| 83 | To create new feature, please fork the code and submit Pull Request on GitHub. |
| 84 | |
Alexander Afanasyev | 26b558b | 2012-12-13 11:39:46 -0800 | [diff] [blame] | 85 | 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. |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 86 | |
| 87 | A very short guide to the code |
Alexander Afanasyev | d4e97b3 | 2012-06-04 15:09:50 -0700 | [diff] [blame] | 88 | ------------------------------ |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 89 | |
Alexander Afanasyev | 6315ef7 | 2012-06-01 20:56:31 -0700 | [diff] [blame] | 90 | All the NDN related code is in ``ns-3/src/ndnSIM`` |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 91 | |
| 92 | +-----------------+---------------------------------------------------------------------+ |
| 93 | | Folder | Description | |
| 94 | +=================+=====================================================================+ |
Alexander Afanasyev | f6807a5 | 2012-08-10 18:11:43 -0700 | [diff] [blame] | 95 | | ``model/`` | implementation of NDN base: :ndnsim:`L3Protocol`, faces | |
| 96 | | | (:ndnsim:`Face`, :ndnsim:`NetDeviceFace`, forwarding | |
| 97 | | | :ndnsim:`AppFace`), | |
| 98 | | | strategies (:ndnsim:`ForwardingStrategy`, | |
Alexander Afanasyev | b8d14ad | 2012-08-09 13:19:37 -0700 | [diff] [blame] | 99 | | | :ndnsim:`Flooding`, :ndnsim:`SmartFlooding`, :ndnsim:`BestRoute`), | |
Alexander Afanasyev | 6315ef7 | 2012-06-01 20:56:31 -0700 | [diff] [blame] | 100 | | | etc. | |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 101 | +-----------------+---------------------------------------------------------------------+ |
| 102 | | ``apps/`` | applications (in NS-3 sense) that can be installed on the nodes. | |
Alexander Afanasyev | f6807a5 | 2012-08-10 18:11:43 -0700 | [diff] [blame] | 103 | | | Right now we have one producer (:ndnsim:`Producer`) and a | |
| 104 | | | collection of consumer (:ndnsim:`ConsumerCbr`, | |
| 105 | | | :ndnsim:`ConsumerWindow`, | |
| 106 | | | :ndnsim:`ConsumerBatches`). See doxygen documentation or | |
Alexander Afanasyev | 6315ef7 | 2012-06-01 20:56:31 -0700 | [diff] [blame] | 107 | | | source code for details | |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 108 | +-----------------+---------------------------------------------------------------------+ |
Alexander Afanasyev | 6315ef7 | 2012-06-01 20:56:31 -0700 | [diff] [blame] | 109 | | ``helper/`` | a number of :doc:`useful helpers <helpers>` | |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 110 | +-----------------+---------------------------------------------------------------------+ |
Alexander Afanasyev | 6315ef7 | 2012-06-01 20:56:31 -0700 | [diff] [blame] | 111 | | ``examples/`` | contain :doc:`several example scenarios <examples>` | |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 112 | +-----------------+---------------------------------------------------------------------+ |
Alexander Afanasyev | 508269a | 2012-07-28 13:59:54 -0700 | [diff] [blame] | 113 | | ``utils/`` | helper classes, including implementation of generalized data | |
| 114 | | | structures | |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 115 | +-----------------+---------------------------------------------------------------------+ |
| 116 | | ``plugins/`` | a number of plugins that may be helpful to run simulation scenarios | |
| 117 | +-----------------+---------------------------------------------------------------------+ |
| 118 | |
Alexander Afanasyev | d4e97b3 | 2012-06-04 15:09:50 -0700 | [diff] [blame] | 119 | Logging |
Alexander Afanasyev | e095f0f | 2012-11-21 17:43:32 -0800 | [diff] [blame] | 120 | ------- |
Alexander Afanasyev | d4e97b3 | 2012-06-04 15:09:50 -0700 | [diff] [blame] | 121 | |
Alexander Afanasyev | e095f0f | 2012-11-21 17:43:32 -0800 | [diff] [blame] | 122 | Almost every component in ndnSIM exports logging interface, so in debug compilation it is possible to track many internal details. |
| 123 | For example, logging of :ndnsim:`Face` and :ndnsim:`Consumer` shows everything what happens in :ndnsim:`Face` and :ndnsim:`Consumer` classes:: |
Alexander Afanasyev | d4e97b3 | 2012-06-04 15:09:50 -0700 | [diff] [blame] | 124 | |
Alexander Afanasyev | f6807a5 | 2012-08-10 18:11:43 -0700 | [diff] [blame] | 125 | NS_LOG=ndn.Face:ndn.Consumer ./waf --run=ndn-simple |
Alexander Afanasyev | d4e97b3 | 2012-06-04 15:09:50 -0700 | [diff] [blame] | 126 | |
| 127 | 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. |
Alexander Afanasyev | 4d32516 | 2012-06-01 12:28:50 -0700 | [diff] [blame] | 128 | |