blob: 23ff20dfbcec99b7aae1ce111b033ebbcc1298ac [file] [log] [blame]
Getting Started
===============
Portability
------------
ndnSIM has been successfully compiled and used under Ubuntu Linux 12.04 (only with boost
libraries **1.48**), 14.04 (default version of boost), OS X 10.10 (Xcode 6.1.1, macports boost
1.56-1.57).
.. _requirements:
Prerequisites
-------------
1. `ndnSIM also required ndn-cxx library and all of its prerequisites
<http://named-data.net/doc/ndn-cxx/current/INSTALL.html>`_.
.. role:: red
.. note::
:red:`!!! ndn-cxx and ndnSIM requires boost version at least 1.48.` Many linux distribution
(Fedora 16, 17 at the time of this writing) ship an old version of boost, making it
impossible to compile ndnSIM out-of-the-box. Please install the latest version, following
:ref:`these simple instructions <Installing boost libraries>`.
.. note::
:red:`For Ubuntu 12.04` Ubuntu 12.04 ships with two versions of boost libraries and it is
known that if both are installed, then compilation of ndnSIM will most likely fail. Please
install ``libboost1.48-dev-all`` package and uninstall ``libboost-dev-all``. If you want to
install the latest version of boost libraries, then uninstall both ``libboost1.48-dev-all``
and ``libboost-dev-all``, so the libraries do not interfere with each other.
.. note::
!!! If you do not have root permissions to install boost, you can install it in your home
folder. However, you need to be make sure that `libboost_iostreams` library is successfully
compiled and is installed. Please refer to :ref:`the following example <Installing boost
libraries>` for the hints how to successfully compile and install boost libraries on Ubuntu
Linux.
2. If you are planning to use other modules, like visualizer, a number of additional
dependencies should be installed. For example, in order to run `visualizer`_ module, the
following should be installed:
* For Ubuntu (tested on Ubuntu 14.04, should work on later versions as well):
.. code-block:: bash
sudo apt-get install python-dev python-pygraphviz python-kiwi
sudo apt-get install python-pygoocanvas python-gnome2
sudo apt-get install python-gnomedesktop python-rsvg ipython
* For Fedora (tested on Fedora 16):
.. code-block:: bash
sudo yum install pygoocanvas python-kiwi graphviz-python
# easy_install method, since pygraphviz is not (yet?) packaged into Fedora (https://bugzilla.redhat.com/show_bug.cgi?id=740687)
sudo yum install graphviz-devel
sudo yum install python-pip
sudo easy_install pygraphviz
* For MacOS (macports):
.. code-block:: bash
sudo port install py27-pygraphviz py27-goocanvas
# If you add NDN macports repository, as described in
# http://named-data.net/doc/NFD/current/INSTALL.html#install-nfd-using-the-ndn-macports-repository-on-os-x
# you will be able to install another useful python module
# sudo port install py27-kiwi
.. _visualizer: http://www.nsnam.org/wiki/index.php/PyViz
Downloading ndnSIM source
-------------------------
ndnSIM package consists of three pieces:
- `ndn-cxx library <http://named-data.net/doc/ndn-cxx/>`_
- a custom branch of NS-3 that contains a few useful patches
- a customized python binding generation library (necessary if you want to use NS-3's python
bindings and/or visualizer module)
- the source code of ndnSIM module
The following commands download all pieces from GitHub repositories:
.. code-block:: bash
mkdir ndnSIM
cd ndnSIM
git clone https://github.com/named-data/ndn-cxx.git ndn-cxx
git clone https://github.com/cawka/ns-3-dev-ndnSIM.git ns-3
git clone https://github.com/cawka/pybindgen.git pybindgen
git clone https://github.com/named-data/ndnSIM.git ns-3/src/ndnSIM
The few modification to the base NS-3 code are necessary to run ndnSIM, and the code is
periodically synchronized with the official developer branch. Eventually, all the changes will
be merged to the official branch, but for the time being, it is necessary to use the customized
branch.
Compiling and running ndnSIM
----------------------------
- Compile and install ndn-cxx library
.. code-block:: bash
cd ndnSIM/ndn-cxx
./waf configure
./waf
sudo ./waf install
.. note::
On Ubuntu platform you can also install ndn-cxx library from `NDN
PPA repository <http://named-data.net/doc/NFD/current/INSTALL.html#installing-nfd-from-binaries>`_
.. code-block:: bash
sudo apt-get install ndn-cxx
- Compile NS-3 with ndnSIM module
ndnSIM uses standard NS-3 compilation procedure. Normally the following commands should be
sufficient to configure and build ndnSIM with python bindings enabled:
.. code-block:: bash
cd <ns-3-folder>
./waf configure --enable-examples
./waf
On MacOS (with macports), you may need to modify the configure command to use macports
version of python:
.. code-block:: bash
cd <ns-3-folder>
./waf configure --with-python=/opt/local/bin/python2.7 --enable-examples
# or run ``sudo port select python python27``
./waf
Python bindings is an optional and not very stable feature of NS-3 simulator. It is
possible to disable python bindings compilation either to speed up compilation or to avoid
certain compilation errors (e.g., "Could not find a task generator for the name
'ns3-visualizer'"):
.. code-block:: bash
cd <ns-3-folder>
./waf configure --disable-python --enable-examples
./waf
For more configuration options, please refer to ``./waf --help``.
Simulating using ndnSIM
-----------------------
- Examples simulations
When NS-3 is compiled with ``--with-examples`` flag, you can directly run all examples
described in :doc:`examples section of this tutorial <examples>`. For example, to run
``ndn-simple.cpp`` scenario, you can run the following command:
.. code-block:: bash
./waf --run=ndn-simple
To run ``ndn-grid.cpp` scenario:
.. code-block:: bash
./waf --run=ndn-grid
To run the sample simulation scenarios with the logging module of NS-3 enabled (note that
this will work only when NS-3 is compiled in debug mode):
.. code-block:: bash
NS_LOG=ndn.Producer:ndn.Consumer ./waf --run=<scenario name>
If you have compiled with python bindings, then you can try to run these simulations with
visualizer:
.. code-block:: bash
./waf --run=ndn-simple --vis
or:
.. code-block:: bash
./waf --run=ndn-grid --vis
.. note::
Do not forget to configure and compile NS-3 in optimized mode (``./waf configure -d
optimized``) in order to run actual simulations.
- Real experimentation
While it is possible to write simulations directly inside NS-3 (in ``scratch/`` folder) or
ndnSIM (in ``examples/``), the recommended way is to write your simulation scenarios, as
well as any custom extensions, separately from the NS-3 or ndnSIM core.
For example, you can use the following template to write your extensions, simulation
scenarios, and metric processing scripts:
`<http://github.com/cawka/ndnSIM-scenario-template>`_:
.. code-block:: bash
mkdir ndnSIM
cd ndnSIM
git clone git://github.com/cawka/ns-3-dev-ndnSIM.git ns-3
git clone git://github.com/cawka/pybindgen.git pybindgen
git clone git://github.com/NDN-Routing/ndnSIM.git ns-3/src/ndnSIM
# Build and install NS-3 and ndnSIM
cd ns-3
./waf configure -d optimized
./waf
sudo ./waf install
cd ..
git clone git://github.com/cawka/ndnSIM-scenario-template.git scenario
cd scenario
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./waf configure
./waf --run <scenario>
For more detailed information, refer to `README file
<https://github.com/cawka/ndnSIM-scenario-template/blob/master/README.md>`_.
Examples of template-based simulations
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. ndnSIM examples from `<http://ndnsim.net>`_ website and more:
- `<http://github.com/cawka/ndnSIM-examples>`_, or
2. Script scenarios and graph processing scripts for simulations used in "A Case for Stateful
Forwarding Plane" paper by Yi et al. (`<http://dx.doi.org/10.1016/j.comcom.2013.01.005>`_):
- `<http://github.com/cawka/ndnSIM-comcom-stateful-fw>`_, or
3. Script scenarios and graph processing scripts for simulations used in "Rapid Traffic
Information Dissemination Using Named Data" paper by Wang et
al. (`<http://dx.doi.org/10.1145/2248361.2248365>`_):
- `<http://github.com/cawka/ndnSIM-nom-rapid-car2car>`_, or
- Rocketfuel-based topology generator for ndnSIM preferred format (randomly assigned link
delays and bandwidth, based on estimated types of connections between nodes):
- `<http://github.com/cawka/ndnSIM-sample-topologies>`_, or