blob: 7d3e9277ae34bb8d995318620db08135dfa8c3fc [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
Alexander Afanasyevdf26b5a2015-01-15 23:30:56 -080066 sudo apt-get install 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
Alexander Afanasyevdf26b5a2015-01-15 23:30:56 -080090 * For OS X with HomeBrew
91
92 .. code-block:: bash
93
94 brew install boost cryptopp pkg-config libxml2
95 brew link --force libxml2
96
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -080097.. _visualizer: http://www.nsnam.org/wiki/index.php/PyViz
98
99Downloading ndnSIM source
100-------------------------
101
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800102ndnSIM package consists of three pieces:
103
104- `ndn-cxx library <http://named-data.net/doc/ndn-cxx/>`_
105- a custom branch of NS-3 that contains a few useful patches
106- a customized python binding generation library (necessary if you want to use NS-3's python
107 bindings and/or visualizer module)
108- the source code of ndnSIM module
109
110The following commands download all pieces from GitHub repositories:
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800111
112.. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800113
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800114 mkdir ndnSIM
115 cd ndnSIM
116 git clone https://github.com/named-data/ndn-cxx.git ndn-cxx
117 git clone https://github.com/cawka/ns-3-dev-ndnSIM.git ns-3
118 git clone https://github.com/cawka/pybindgen.git pybindgen
119 git clone https://github.com/named-data/ndnSIM.git ns-3/src/ndnSIM
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800120
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800121The few modification to the base NS-3 code are necessary to run ndnSIM, and the code is
122periodically synchronized with the official developer branch. Eventually, all the changes will
123be merged to the official branch, but for the time being, it is necessary to use the customized
124branch.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800125
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700126
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800127Compiling and running ndnSIM
128----------------------------
129
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800130- Compile and install ndn-cxx library
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800131
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800132 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800133
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800134 cd ndnSIM/ndn-cxx
135 ./waf configure
136 ./waf
137 sudo ./waf install
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800138
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800139 .. note::
140 On Ubuntu platform you can also install ndn-cxx library from `NDN
141 PPA repository <http://named-data.net/doc/NFD/current/INSTALL.html#installing-nfd-from-binaries>`_
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800142
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800143 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800144
Alexander Afanasyev11381c22015-01-19 16:07:46 -0800145 sudo apt-get install ndn-cxx-dev
146
147 If you are using ndn-cxx from PPA, please make sure that you do not have the existing installation
148 of ndn-cxx library compiled from source (e.g., in /usr/local). Otherwise, the version mistmach
149 may result in compilation errors.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800150
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800151- Compile NS-3 with ndnSIM module
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800152
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800153 ndnSIM uses standard NS-3 compilation procedure. Normally the following commands should be
154 sufficient to configure and build ndnSIM with python bindings enabled:
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800155
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800156 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800157
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800158 cd <ns-3-folder>
159 ./waf configure --enable-examples
160 ./waf
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800161
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800162 On MacOS (with macports), you may need to modify the configure command to use macports
163 version of python:
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800164
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800165 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800166
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800167 cd <ns-3-folder>
168 ./waf configure --with-python=/opt/local/bin/python2.7 --enable-examples
169 # or run ``sudo port select python python27``
170 ./waf
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800171
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800172 Python bindings is an optional and not very stable feature of NS-3 simulator. It is
173 possible to disable python bindings compilation either to speed up compilation or to avoid
174 certain compilation errors (e.g., "Could not find a task generator for the name
175 'ns3-visualizer'"):
Alexander Afanasyev326410e2013-03-09 20:39:11 -0800176
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800177 .. code-block:: bash
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800178
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800179 cd <ns-3-folder>
180 ./waf configure --disable-python --enable-examples
181 ./waf
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800182
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800183 For more configuration options, please refer to ``./waf --help``.
Alexander Afanasyeve095f0f2012-11-21 17:43:32 -0800184
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700185Simulating using ndnSIM
186-----------------------
187
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800188- Examples simulations
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700189
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800190 When NS-3 is compiled with ``--with-examples`` flag, you can directly run all examples
191 described in :doc:`examples section of this tutorial <examples>`. For example, to run
192 ``ndn-simple.cpp`` scenario, you can run the following command:
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700193
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800194 .. code-block:: bash
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700195
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800196 ./waf --run=ndn-simple
197
198 To run ``ndn-grid.cpp` scenario:
199
200 .. code-block:: bash
201
202 ./waf --run=ndn-grid
203
204 To run the sample simulation scenarios with the logging module of NS-3 enabled (note that
205 this will work only when NS-3 is compiled in debug mode):
206
207 .. code-block:: bash
208
209 NS_LOG=ndn.Producer:ndn.Consumer ./waf --run=<scenario name>
210
211 If you have compiled with python bindings, then you can try to run these simulations with
212 visualizer:
213
214 .. code-block:: bash
215
216 ./waf --run=ndn-simple --vis
217
218 or:
219
220 .. code-block:: bash
221
222 ./waf --run=ndn-grid --vis
223
224 .. note::
225 Do not forget to configure and compile NS-3 in optimized mode (``./waf configure -d
226 optimized``) in order to run actual simulations.
227
228- Real experimentation
229
230 While it is possible to write simulations directly inside NS-3 (in ``scratch/`` folder) or
231 ndnSIM (in ``examples/``), the recommended way is to write your simulation scenarios, as
232 well as any custom extensions, separately from the NS-3 or ndnSIM core.
233
234 For example, you can use the following template to write your extensions, simulation
235 scenarios, and metric processing scripts:
236 `<http://github.com/cawka/ndnSIM-scenario-template>`_:
237
238 .. code-block:: bash
239
240 mkdir ndnSIM
241 cd ndnSIM
242 git clone git://github.com/cawka/ns-3-dev-ndnSIM.git ns-3
243 git clone git://github.com/cawka/pybindgen.git pybindgen
244 git clone git://github.com/NDN-Routing/ndnSIM.git ns-3/src/ndnSIM
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700245
246 # Build and install NS-3 and ndnSIM
247 cd ns-3
248 ./waf configure -d optimized
249 ./waf
250
251 sudo ./waf install
252 cd ..
253
254 git clone git://github.com/cawka/ndnSIM-scenario-template.git scenario
255 cd scenario
Alexander Afanasyev9ab7d672013-08-11 11:02:52 -0700256 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700257 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
258
259 ./waf configure
260
261 ./waf --run <scenario>
262
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800263 For more detailed information, refer to `README file
264 <https://github.com/cawka/ndnSIM-scenario-template/blob/master/README.md>`_.
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700265
266Examples of template-based simulations
267~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
268
Alexander Afanasyev9ab7d672013-08-11 11:02:52 -07002691. ndnSIM examples from `<http://ndnsim.net>`_ website and more:
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700270
271- `<http://github.com/cawka/ndnSIM-examples>`_, or
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700272
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -08002732. Script scenarios and graph processing scripts for simulations used in "A Case for Stateful
274 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 -0700275
276- `<http://github.com/cawka/ndnSIM-comcom-stateful-fw>`_, or
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700277
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -08002783. Script scenarios and graph processing scripts for simulations used in "Rapid Traffic
279 Information Dissemination Using Named Data" paper by Wang et
280 al. (`<http://dx.doi.org/10.1145/2248361.2248365>`_):
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700281
282- `<http://github.com/cawka/ndnSIM-nom-rapid-car2car>`_, or
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700283
Spyridon Mastorakis460f57c2014-12-17 00:44:14 -0800284- Rocketfuel-based topology generator for ndnSIM preferred format (randomly assigned link
285 delays and bandwidth, based on estimated types of connections between nodes):
Alexander Afanasyev701e5082013-03-13 09:47:50 -0700286
287- `<http://github.com/cawka/ndnSIM-sample-topologies>`_, or