blob: 0f0ee5accaa0177c1110f6d0cb33779336387205 [file] [log] [blame]
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -08001Getting Started
2===============
3
4Portability
5------------
6
Alexander Afanasyev8e60bcd2015-01-15 20:55:40 +00007ndnSIM 2.0 has been successfully compiled and used on following platforms:
8
9- Ubuntu Linux 12.04 (see the note)
10- Ubuntu Linux 14.04
11- OS X 10.10
12
13.. note::
14 ndnSIM is currently cannot be compiled on Ubuntu Linux 12.04 with the packaged boost
15 libraries (there is an `issue with boost 1.48 and gcc 4.6
16 <https://svn.boost.org/trac/boost/ticket/6153>`_). It is still possible to compile ndnSIM
17 on this platform, but either compiler or boost libraries (or both) need to get upgraded.
18
19 More recent version of boost can be installed from "Boost C++ Libraries" team PPA::
20
21 sudo apt-get install python-software-properties
22 sudo add-apt-repository ppa:boost-latest/ppa
23 sudo apt-get update
24 sudo apt-get install libboost1.55-all-dev
25
26 # add --boost-libs=/usr/lib/x86_64-linux-gnu to ./waf configure for ndn-cxx and ns3
27 # ./waf configure --boost-libs=/usr/lib/x86_64-linux-gnu
28
29 Make sure that all other version of boost libraries (``-dev`` packages) are removed,
30 otherwise compilation will fail.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080031
32.. _requirements:
33
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -080034Prerequisites
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080035-------------
36
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800371. `ndnSIM also required ndn-cxx library and all of its prerequisites
38 <http://named-data.net/doc/ndn-cxx/current/INSTALL.html>`_.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080039
Alexander Afanasyev26b558b2012-12-13 11:39:46 -080040.. role:: red
41
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080042.. note::
Alexander Afanasyev8e60bcd2015-01-15 20:55:40 +000043 :red:`!!! ndnSIM requires boost version at least 1.49.` Many linux distribution
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -080044 (Fedora 16, 17 at the time of this writing) ship an old version of boost, making it
45 impossible to compile ndnSIM out-of-the-box. Please install the latest version, following
46 :ref:`these simple instructions <Installing boost libraries>`.
Alexander Afanasyev9ab7d672013-08-11 11:02:52 -070047
48.. note::
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -080049 !!! If you do not have root permissions to install boost, you can install it in your home
50 folder. However, you need to be make sure that `libboost_iostreams` library is successfully
51 compiled and is installed. Please refer to :ref:`the following example <Installing boost
52 libraries>` for the hints how to successfully compile and install boost libraries on Ubuntu
53 Linux.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080054
55
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800562. If you are planning to use other modules, like visualizer, a number of additional
57dependencies should be installed. For example, in order to run `visualizer`_ module, the
58following should be installed:
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080059
Alexander Afanasyev8e60bcd2015-01-15 20:55:40 +000060 * For Ubuntu:
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080061
Alexander Afanasyev326410e2013-03-09 20:39:11 -080062 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080063
Alexander Afanasyev326410e2013-03-09 20:39:11 -080064 sudo apt-get install python-dev python-pygraphviz python-kiwi
65 sudo apt-get install python-pygoocanvas python-gnome2
66 sudo apt-get install python-gnomedesktop python-rsvg ipython
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080067
Alexander Afanasyev8e60bcd2015-01-15 20:55:40 +000068 * For Fedora:
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080069
Alexander Afanasyev326410e2013-03-09 20:39:11 -080070 .. code-block:: bash
71
72 sudo yum install pygoocanvas python-kiwi graphviz-python
73
Alexander Afanasyev9ab7d672013-08-11 11:02:52 -070074 # easy_install method, since pygraphviz is not (yet?) packaged into Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=740687)
Alexander Afanasyev326410e2013-03-09 20:39:11 -080075 sudo yum install graphviz-devel
76 sudo yum install python-pip
77 sudo easy_install pygraphviz
78
Alexander Afanasyev8e60bcd2015-01-15 20:55:40 +000079 * For OS X with MacPorts:
Alexander Afanasyev326410e2013-03-09 20:39:11 -080080
81 .. code-block:: bash
82
83 sudo port install py27-pygraphviz py27-goocanvas
84
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -080085 # If you add NDN macports repository, as described in
86 # http://named-data.net/doc/NFD/current/INSTALL.html#install-nfd-using-the-ndn-macports-repository-on-os-x
87 # you will be able to install another useful python module
88 # sudo port install py27-kiwi
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080089
90.. _visualizer: http://www.nsnam.org/wiki/index.php/PyViz
91
92Downloading ndnSIM source
93-------------------------
94
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -080095ndnSIM package consists of three pieces:
96
97- `ndn-cxx library <http://named-data.net/doc/ndn-cxx/>`_
98- a custom branch of NS-3 that contains a few useful patches
99- a customized python binding generation library (necessary if you want to use NS-3's python
100 bindings and/or visualizer module)
101- the source code of ndnSIM module
102
103The following commands download all pieces from GitHub repositories:
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800104
105.. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800106
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800107 mkdir ndnSIM
108 cd ndnSIM
109 git clone https://github.com/named-data/ndn-cxx.git ndn-cxx
Alexander Afanasyev8e60bcd2015-01-15 20:55:40 +0000110 cd ndn-cxx
111 git checkout 81a6c5dea60cea97c60dab0d78576c0d3b4e29ed
112 cd ..
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800113 git clone https://github.com/cawka/ns-3-dev-ndnSIM.git ns-3
114 git clone https://github.com/cawka/pybindgen.git pybindgen
115 git clone https://github.com/named-data/ndnSIM.git ns-3/src/ndnSIM
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800116
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800117The few modification to the base NS-3 code are necessary to run ndnSIM, and the code is
118periodically synchronized with the official developer branch. Eventually, all the changes will
119be merged to the official branch, but for the time being, it is necessary to use the customized
120branch.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800121
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700122
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800123Compiling and running ndnSIM
124----------------------------
125
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800126- Compile and install ndn-cxx library
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800127
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800128 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800129
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800130 cd ndnSIM/ndn-cxx
131 ./waf configure
132 ./waf
133 sudo ./waf install
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800134
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800135 .. note::
136 On Ubuntu platform you can also install ndn-cxx library from `NDN
137 PPA repository <http://named-data.net/doc/NFD/current/INSTALL.html#installing-nfd-from-binaries>`_
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800138
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800139 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800140
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800141 sudo apt-get install ndn-cxx
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800142
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800143- Compile NS-3 with ndnSIM module
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800144
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800145 ndnSIM uses standard NS-3 compilation procedure. Normally the following commands should be
146 sufficient to configure and build ndnSIM with python bindings enabled:
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800147
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800148 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800149
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800150 cd <ns-3-folder>
151 ./waf configure --enable-examples
152 ./waf
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800153
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800154 On MacOS (with macports), you may need to modify the configure command to use macports
155 version of python:
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800156
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800157 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800158
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800159 cd <ns-3-folder>
160 ./waf configure --with-python=/opt/local/bin/python2.7 --enable-examples
161 # or run ``sudo port select python python27``
162 ./waf
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800163
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800164 Python bindings is an optional and not very stable feature of NS-3 simulator. It is
165 possible to disable python bindings compilation either to speed up compilation or to avoid
166 certain compilation errors (e.g., "Could not find a task generator for the name
167 'ns3-visualizer'"):
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800168
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800169 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800170
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800171 cd <ns-3-folder>
172 ./waf configure --disable-python --enable-examples
173 ./waf
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800174
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800175 For more configuration options, please refer to ``./waf --help``.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800176
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700177Simulating using ndnSIM
178-----------------------
179
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800180- Examples simulations
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700181
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800182 When NS-3 is compiled with ``--with-examples`` flag, you can directly run all examples
183 described in :doc:`examples section of this tutorial <examples>`. For example, to run
184 ``ndn-simple.cpp`` scenario, you can run the following command:
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700185
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800186 .. code-block:: bash
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700187
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800188 ./waf --run=ndn-simple
189
190 To run ``ndn-grid.cpp` scenario:
191
192 .. code-block:: bash
193
194 ./waf --run=ndn-grid
195
196 To run the sample simulation scenarios with the logging module of NS-3 enabled (note that
197 this will work only when NS-3 is compiled in debug mode):
198
199 .. code-block:: bash
200
201 NS_LOG=ndn.Producer:ndn.Consumer ./waf --run=<scenario name>
202
203 If you have compiled with python bindings, then you can try to run these simulations with
204 visualizer:
205
206 .. code-block:: bash
207
208 ./waf --run=ndn-simple --vis
209
210 or:
211
212 .. code-block:: bash
213
214 ./waf --run=ndn-grid --vis
215
216 .. note::
217 Do not forget to configure and compile NS-3 in optimized mode (``./waf configure -d
218 optimized``) in order to run actual simulations.
219
220- Real experimentation
221
222 While it is possible to write simulations directly inside NS-3 (in ``scratch/`` folder) or
223 ndnSIM (in ``examples/``), the recommended way is to write your simulation scenarios, as
224 well as any custom extensions, separately from the NS-3 or ndnSIM core.
225
226 For example, you can use the following template to write your extensions, simulation
227 scenarios, and metric processing scripts:
228 `<http://github.com/cawka/ndnSIM-scenario-template>`_:
229
230 .. code-block:: bash
231
232 mkdir ndnSIM
233 cd ndnSIM
234 git clone git://github.com/cawka/ns-3-dev-ndnSIM.git ns-3
235 git clone git://github.com/cawka/pybindgen.git pybindgen
236 git clone git://github.com/NDN-Routing/ndnSIM.git ns-3/src/ndnSIM
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700237
238 # Build and install NS-3 and ndnSIM
239 cd ns-3
240 ./waf configure -d optimized
241 ./waf
242
243 sudo ./waf install
244 cd ..
245
246 git clone git://github.com/cawka/ndnSIM-scenario-template.git scenario
247 cd scenario
Alexander Afanasyev9ab7d672013-08-11 11:02:52 -0700248 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700249 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
250
251 ./waf configure
252
253 ./waf --run <scenario>
254
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800255 For more detailed information, refer to `README file
256 <https://github.com/cawka/ndnSIM-scenario-template/blob/master/README.md>`_.
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700257
258Examples of template-based simulations
259~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
260
Alexander Afanasyev9ab7d672013-08-11 11:02:52 -07002611. ndnSIM examples from `<http://ndnsim.net>`_ website and more:
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700262
263- `<http://github.com/cawka/ndnSIM-examples>`_, or
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700264
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -08002652. Script scenarios and graph processing scripts for simulations used in "A Case for Stateful
266 Forwarding Plane" paper by Yi et al. (`<http://dx.doi.org/10.1016/j.comcom.2013.01.005>`_):
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700267
268- `<http://github.com/cawka/ndnSIM-comcom-stateful-fw>`_, or
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700269
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -08002703. Script scenarios and graph processing scripts for simulations used in "Rapid Traffic
271 Information Dissemination Using Named Data" paper by Wang et
272 al. (`<http://dx.doi.org/10.1145/2248361.2248365>`_):
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700273
274- `<http://github.com/cawka/ndnSIM-nom-rapid-car2car>`_, or
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700275
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800276- Rocketfuel-based topology generator for ndnSIM preferred format (randomly assigned link
277 delays and bandwidth, based on estimated types of connections between nodes):
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700278
279- `<http://github.com/cawka/ndnSIM-sample-topologies>`_, or