2022-05-26 17:56:23 +01:00
|
|
|
# The Network Simulator, Version 3
|
2007-03-30 15:39:02 -07:00
|
|
|
|
2022-11-14 14:49:14 -03:00
|
|
|
[](https://codecov.io/gh/nsnam/ns-3-dev-git/branch/master/)
|
|
|
|
|
[](https://gitlab.com/nsnam/ns-3-dev/-/pipelines)
|
|
|
|
|
[](https://github.com/nsnam/ns-3-dev-git/actions)
|
|
|
|
|
|
2022-05-26 17:56:23 +01:00
|
|
|
## Table of Contents
|
2006-08-26 14:20:18 -07:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
* [Overview](#overview-an-open-source-project)
|
|
|
|
|
* [Building ns-3](#building-ns-3)
|
|
|
|
|
* [Testing ns-3](#testing-ns-3)
|
|
|
|
|
* [Running ns-3](#running-ns-3)
|
|
|
|
|
* [ns-3 Documentation](#ns-3-documentation)
|
|
|
|
|
* [Working with the Development Version of ns-3](#working-with-the-development-version-of-ns-3)
|
|
|
|
|
* [Contributing to ns-3](#contributing-to-ns-3)
|
|
|
|
|
* [Reporting Issues](#reporting-issues)
|
|
|
|
|
* [ns-3 App Store](#ns-3-app-store)
|
2007-02-02 14:41:28 -05:00
|
|
|
|
2022-05-26 17:56:23 +01:00
|
|
|
> **NOTE**: Much more substantial information about ns-3 can be found at
|
|
|
|
|
<https://www.nsnam.org>
|
2007-02-14 22:04:38 -08:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
## Overview: An Open Source Project
|
2007-02-14 22:04:38 -08:00
|
|
|
|
2008-12-05 13:11:26 -08:00
|
|
|
ns-3 is a free open source project aiming to build a discrete-event
|
2020-04-09 01:22:51 -07:00
|
|
|
network simulator targeted for simulation research and education.
|
2008-12-05 13:11:26 -08:00
|
|
|
This is a collaborative project; we hope that
|
2007-05-17 11:32:22 +02:00
|
|
|
the missing pieces of the models we have not yet implemented
|
|
|
|
|
will be contributed by the community in an open collaboration
|
2023-08-14 16:03:39 +01:00
|
|
|
process. If you would like to contribute to ns-3, please check
|
|
|
|
|
the [Contributing to ns-3](#contributing-to-ns-3) section below.
|
2007-02-21 01:37:00 -08:00
|
|
|
|
2011-12-07 16:11:42 -08:00
|
|
|
This README excerpts some details from a more extensive
|
|
|
|
|
tutorial that is maintained at:
|
2022-05-26 17:56:23 +01:00
|
|
|
<https://www.nsnam.org/documentation/latest/>
|
2007-05-17 11:32:22 +02:00
|
|
|
|
2018-12-13 18:21:03 +01:00
|
|
|
## Building ns-3
|
2007-05-17 11:32:22 +02:00
|
|
|
|
|
|
|
|
The code for the framework and the default models provided
|
|
|
|
|
by ns-3 is built as a set of libraries. User simulations
|
2007-05-18 10:27:42 -07:00
|
|
|
are expected to be written as simple programs that make
|
2007-05-17 11:32:22 +02:00
|
|
|
use of these ns-3 libraries.
|
|
|
|
|
|
|
|
|
|
To build the set of default libraries and the example
|
|
|
|
|
programs included in this package, you need to use the
|
2023-08-14 16:03:39 +01:00
|
|
|
`ns3` tool. This tool provides a Waf-like API to the
|
|
|
|
|
underlying CMake build manager.
|
|
|
|
|
Detailed information on how to use `ns3` is included in the
|
|
|
|
|
[quick start guide](doc/installation/source/quick-start.rst).
|
|
|
|
|
|
|
|
|
|
Before building ns-3, you must configure it.
|
|
|
|
|
This step allows the configuration of the build options,
|
|
|
|
|
such as whether to enable the examples, tests and more.
|
2007-05-17 11:32:22 +02:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
To configure ns-3 with examples and tests enabled,
|
|
|
|
|
run the following command on the ns-3 main directory:
|
2022-05-26 17:56:23 +01:00
|
|
|
|
2018-12-13 18:21:03 +01:00
|
|
|
```shell
|
2023-08-14 16:03:39 +01:00
|
|
|
./ns3 configure --enable-examples --enable-tests
|
2018-12-13 18:21:03 +01:00
|
|
|
```
|
|
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
Then, build ns-3 by running the following command:
|
2018-12-13 18:21:03 +01:00
|
|
|
|
|
|
|
|
```shell
|
2023-08-14 16:03:39 +01:00
|
|
|
./ns3 build
|
2018-12-13 18:21:03 +01:00
|
|
|
```
|
|
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
By default, the build artifacts will be stored in the `build/` directory.
|
|
|
|
|
|
|
|
|
|
### Supported Platforms
|
2007-05-17 11:32:22 +02:00
|
|
|
|
|
|
|
|
The current codebase is expected to build and run on the
|
2021-11-03 18:01:13 -07:00
|
|
|
set of platforms listed in the [release notes](RELEASE_NOTES.md)
|
2018-12-13 18:21:03 +01:00
|
|
|
file.
|
2008-09-08 11:29:12 -07:00
|
|
|
|
2018-12-17 11:09:02 +01:00
|
|
|
Other platforms may or may not work: we welcome patches to
|
|
|
|
|
improve the portability of the code to these other platforms.
|
2007-05-17 11:32:22 +02:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
## Testing ns-3
|
|
|
|
|
|
|
|
|
|
ns-3 contains test suites to validate the models and detect regressions.
|
|
|
|
|
To run the test suite, run the following command on the ns-3 main directory:
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
./test.py
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
More information about ns-3 tests is available in the
|
|
|
|
|
[test framework](doc/manual/source/test-framework.rst) section of the manual.
|
|
|
|
|
|
2018-12-13 18:21:03 +01:00
|
|
|
## Running ns-3
|
2007-05-17 11:32:22 +02:00
|
|
|
|
2011-12-07 16:11:42 -08:00
|
|
|
On recent Linux systems, once you have built ns-3 (with examples
|
|
|
|
|
enabled), it should be easy to run the sample programs with the
|
|
|
|
|
following command, such as:
|
2007-05-17 11:32:22 +02:00
|
|
|
|
2018-12-13 18:21:03 +01:00
|
|
|
```shell
|
2022-01-13 23:59:59 -03:00
|
|
|
./ns3 run simple-global-routing
|
2018-12-13 18:21:03 +01:00
|
|
|
```
|
2007-05-17 11:32:22 +02:00
|
|
|
|
2018-12-13 18:21:03 +01:00
|
|
|
That program should generate a `simple-global-routing.tr` text
|
|
|
|
|
trace file and a set of `simple-global-routing-xx-xx.pcap` binary
|
2023-08-14 16:03:39 +01:00
|
|
|
PCAP trace files, which can be read by `tcpdump -n -tt -r filename.pcap`.
|
|
|
|
|
The program source can be found in the `examples/routing` directory.
|
2023-02-03 22:30:38 -03:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
## Running ns-3 from Python
|
2023-02-03 22:30:38 -03:00
|
|
|
|
|
|
|
|
If you do not plan to modify ns-3 upstream modules, you can get
|
|
|
|
|
a pre-built version of the ns-3 python bindings.
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
pip install --user ns3
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
If you do not have `pip`, check their documents
|
|
|
|
|
on [how to install it](https://pip.pypa.io/en/stable/installation/).
|
|
|
|
|
|
|
|
|
|
After installing the `ns3` package, you can then create your simulation python script.
|
|
|
|
|
Below is a trivial demo script to get you started.
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
from ns import ns
|
|
|
|
|
|
|
|
|
|
ns.LogComponentEnable("Simulator", ns.LOG_LEVEL_ALL)
|
|
|
|
|
|
|
|
|
|
ns.Simulator.Stop(ns.Seconds(10))
|
|
|
|
|
ns.Simulator.Run()
|
|
|
|
|
ns.Simulator.Destroy()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The simulation will take a while to start, while the bindings are loaded.
|
|
|
|
|
The script above will print the logging messages for the called commands.
|
|
|
|
|
|
|
|
|
|
Use `help(ns)` to check the prototypes for all functions defined in the
|
|
|
|
|
ns3 namespace. To get more useful results, query specific classes of
|
2023-08-14 16:03:39 +01:00
|
|
|
interest and their functions e.g., `help(ns.Simulator)`.
|
2023-02-03 22:30:38 -03:00
|
|
|
|
|
|
|
|
Smart pointers `Ptr<>` can be differentiated from objects by checking if
|
|
|
|
|
`__deref__` is listed in `dir(variable)`. To dereference the pointer,
|
|
|
|
|
use `variable.__deref__()`.
|
|
|
|
|
|
|
|
|
|
Most ns-3 simulations are written in C++ and the documentation is
|
2023-08-14 16:03:39 +01:00
|
|
|
oriented towards C++ users. The ns-3 tutorial programs (`first.cc`,
|
|
|
|
|
`second.cc`, etc.) have Python equivalents, if you are looking for
|
2023-02-03 22:30:38 -03:00
|
|
|
some initial guidance on how to use the Python API. The Python
|
|
|
|
|
API may not be as full-featured as the C++ API, and an API guide
|
|
|
|
|
for what C++ APIs are supported or not from Python do not currently exist.
|
|
|
|
|
The project is looking for additional Python maintainers to improve
|
|
|
|
|
the support for future Python users.
|
|
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
## ns-3 Documentation
|
2007-05-17 14:31:08 +02:00
|
|
|
|
|
|
|
|
Once you have verified that your build of ns-3 works by running
|
2023-08-14 16:03:39 +01:00
|
|
|
the `simple-global-routing` example as outlined in the [running ns-3](#running-ns-3)
|
|
|
|
|
section, it is quite likely that you will want to get started on reading
|
2018-12-17 11:09:02 +01:00
|
|
|
some ns-3 documentation.
|
2007-05-17 14:31:08 +02:00
|
|
|
|
|
|
|
|
All of that documentation should always be available from
|
2022-05-26 17:56:23 +01:00
|
|
|
the ns-3 website: <https://www.nsnam.org/documentation/>.
|
2007-05-17 14:31:08 +02:00
|
|
|
|
2007-05-18 18:03:48 +02:00
|
|
|
This documentation includes:
|
2007-05-17 14:31:08 +02:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
* a tutorial
|
|
|
|
|
* a reference manual
|
|
|
|
|
* models in the ns-3 model library
|
|
|
|
|
* a wiki for user-contributed tips: <https://www.nsnam.org/wiki/>
|
|
|
|
|
* API documentation generated using doxygen: this is
|
2022-05-26 17:56:23 +01:00
|
|
|
a reference manual, most likely not very well suited
|
|
|
|
|
as introductory text:
|
|
|
|
|
<https://www.nsnam.org/doxygen/index.html>
|
2007-05-17 14:31:08 +02:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
## Working with the Development Version of ns-3
|
2007-05-17 11:32:22 +02:00
|
|
|
|
2018-12-14 12:31:45 +01:00
|
|
|
If you want to download and use the development version of ns-3, you
|
|
|
|
|
need to use the tool `git`. A quick and dirty cheat sheet is included
|
2023-08-14 16:03:39 +01:00
|
|
|
in the manual, but reading through the Git
|
2018-12-14 12:31:45 +01:00
|
|
|
tutorials found in the Internet is usually a good idea if you are not
|
2007-05-17 11:32:22 +02:00
|
|
|
familiar with it.
|
|
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
If you have successfully installed Git, you can get
|
2007-05-31 08:20:09 -07:00
|
|
|
a copy of the development version with the following command:
|
2022-05-26 17:56:23 +01:00
|
|
|
|
2018-12-13 18:21:03 +01:00
|
|
|
```shell
|
2018-12-14 12:31:45 +01:00
|
|
|
git clone https://gitlab.com/nsnam/ns-3-dev.git
|
2018-12-13 18:21:03 +01:00
|
|
|
```
|
2018-12-14 12:31:45 +01:00
|
|
|
|
2023-08-14 16:03:39 +01:00
|
|
|
However, we recommend to follow the GitLab guidelines for starters,
|
|
|
|
|
that includes creating a GitLab account, forking the ns-3-dev project
|
2018-12-14 12:31:45 +01:00
|
|
|
under the new account's name, and then cloning the forked repository.
|
2020-08-06 13:57:05 -07:00
|
|
|
You can find more information in the [manual](https://www.nsnam.org/docs/manual/html/working-with-git.html).
|
2023-08-14 16:03:39 +01:00
|
|
|
|
|
|
|
|
## Contributing to ns-3
|
|
|
|
|
|
|
|
|
|
The process of contributing to the ns-3 project varies with
|
|
|
|
|
the people involved, the amount of time they can invest
|
|
|
|
|
and the type of model they want to work on, but the current
|
|
|
|
|
process that the project tries to follow is described in the
|
|
|
|
|
[contributing code](https://www.nsnam.org/developers/contributing-code/)
|
|
|
|
|
website and in the [CONTRIBUTING.md](CONTRIBUTING.md) file.
|
|
|
|
|
|
|
|
|
|
## Reporting Issues
|
|
|
|
|
|
|
|
|
|
If you would like to report an issue, you can open a new issue in the
|
|
|
|
|
[GitLab issue tracker](https://gitlab.com/nsnam/ns-3-dev/-/issues).
|
|
|
|
|
Before creating a new issue, please check if the problem that you are facing
|
|
|
|
|
was already reported and contribute to the discussion, if necessary.
|
|
|
|
|
|
|
|
|
|
## ns-3 App Store
|
|
|
|
|
|
|
|
|
|
The official [ns-3 App Store](https://apps.nsnam.org/) is a centralized directory
|
|
|
|
|
listing third-party modules for ns-3 available on the Internet.
|
|
|
|
|
|
|
|
|
|
More information on how to submit an ns-3 module to the ns-3 App Store is available
|
|
|
|
|
in the [ns-3 App Store documentation](https://www.nsnam.org/docs/contributing/html/external.html).
|