SimGrid  3.12
Versatile Simulation of Distributed Systems
Packet level simulation

It is possible to use a packet-level network simulator instead of the default flow-based simulation. You may want to use such an approach if you have doubts about the validity of the default model or if you want to perform some validation experiments. At the moment, we support the NS3 simulator; see Section Examples for some additional information.

At the moment, we only support the NS3 simulator. Previous versions of SimGrid did support the GTNetS simulator and that support could possibly be revived by someone who would need it.

NS3 as a SimGrid model

You may want to replace the SimGrid network models by the ones of the well known packet-level network simulator NS-3 instead. This section explains how to do so.

Installing NS3

The easiest is to install it with the package manager. Under Debian/Ubuntu, simply type as root:

apt-get install libns3-dev ns3

You can also install it from scratch with the following commands:

# Download the source
wget http://www.nsnam.org/release/ns-allinone-3.22.tar.bz2
tar -xf ns-allinone-3.22.tar.bz2
cd ns-allinone-3.22/ns-3.22/
# Configure, build and install
./waf configure --prefix="ns-3_install_directory"
./waf
./waf install

For more information, please refer to the NS-3 documentation.

Enabling SimGrid's support for NS3

Normally, you just have to enable NS3 in ccmake or cmake as follows. If you installed NS3 in a regular path, just drop the ns3_path configuration item.

cmake . -Denable_ns3=ON -Dns3_path=<ns3_path>

By the end of the configuration, cmake reports whether NS-3 was found. You can also double-check by executing the tests after the compilation.

$ ctest -R ns3
(several tests should be run)

If you have a NS3 version that is not known (yet) to SimGrid, the detection may fail. In that case, edit the file tools/cmake/Modules/FindNS3.cmake in your SimGrid tree. The required changes are very easy, and documented at the beginning of this file.

If the compilation fails when linking the library because of some .a file that cannot be used dynamically, that's probably because you only installed the libns3-dev library on your Debian, where you also need libns3-3. That's probably a bug of the libns3-dev package that should depend on the dynamic libraries corresponding to its .so files.

Using NS3 from SimGrid

A working example of NS3/SimGrid interactions can be found in examples/msg/ns3. Basically, you just have to run your SimGrid simulation with the configuration option "network/model" set to the value "NS3". The rest remains unchanged.

The following should work from the examples/msg/ns3 folder (ns3 here is the name of our example binary).

./ns3 ./3hosts_2links_p.xml 3hosts_2links_d.xml --cfg=network/model:NS3 --log=root.threshold:info

A ns-3 platform is automatically created from the SimGrid platform file that you will provide. There is some caveats to know:

  • The default values (e.g., TCP parameters) are the ns3 values. Don't blame us for them.

  • NS3 networks are routed using the shortest path algorithm, using ns3::Ipv4GlobalRoutingHelper::PopulateRoutingTables.

  • End hosts cannot have more than one interface card (so, only one <link> in your SimGrid platform should link an end host to the platform ; if not, your end host will be considered as a router.

More about ns-3 simulator (Official website)

Examples

There are some examples in the examples/ folder, that show how to use the bindings; see also the documentation for these examples.