IoD_Sim is an open source and system-level simulator for the IoD (Internet of Drones).
Developed on top of the well-known ns-3 (Network Simulator 3), it implements the key networking elements (drones, network access points, and Zone Service Provider), a standard-compliant communication stack based on the IEEE 802.11 and LTE technology, and scenarios with various mobility models.
Starting from version 4.1.0, support for satellite nodes (i.e., LEO and GEO) has been added, as well as the 5G NR protocol stack enabled by the ns3 nr module. More details regarding the configuration of scenarios that include satellites and 5G NR nodes can be found in the dedicated documentation.
The source code presents the implementation of models and examples JSON configuration files, also known as scenarios, that use such models to simulate a variable number of generic nodes, drones or satellites that:
- Move according to the mobility model associated to the reference scenario.
- Exchange messages with network access points deployed on a cartesian or geographic 3D space.
For more details on how IoD_Sim works and all its features, the following research publications are highly recommended:
- G. Grieco, G. Iacovelli, P. Boccadoro and L. A. Grieco, "Internet of Drones Simulator: Design, Implementation, and Performance Evaluation," in IEEE Internet of Things Journal, vol. 10, no. 2, pp. 1476-1498, 15 Jan.15, 2023, doi: 10.1109/JIOT.2022.3207324.
- G. Grieco, G. Iacovelli, M. Sandri, M. Giordani, M. Zorzi and L. A. Grieco, "Preliminary Performance Evaluation of avSatellite-to-HAP Communication Link," European Wireless 2023; 28th European Wireless Conference, Rome, Italy, 2023, pp. 340-345.
- G. Grieco, G. Iacovelli, D. Pugliese, D. Striccoli and L. A. Grieco, "A System-Level Simulation Module for Multi-UAV IRS-Assisted Communications," in IEEE Transactions on Vehicular Technology, vol. 73, no. 5, pp. 6740-6751, May 2024, doi: 10.1109/TVT.2023.3342298.
- G. Grieco, D. Pugliese, A. Rashid and I. Cianci, "IoD-Sim: An Open-Source Simulator for 6G Integrated Terrestrial/Non-Terrestrial Networks", Computer Networks, Volume 274, 2026, 111876, ISSN 1389-1286.
Older publications that might still be useful:
You can head over to the Releases section to download a copy of a stable version of the software.
The IoD_Sim repository is where this software is developed and there are many ways in which you can participate in the project, for example:
- Submit bugs and feature requests and help us verify as they are checked in.
- Review source code changes.
- Review the documentation and make pull requests for anything, from typos to new content.
IoD_Sim is primarily compatible with Linux-based operating systems (Debian, Ubuntu, Fedora, Arch Linux). You can test it on macOS, altough we are not focused on providing first-class support for it. For macOS, Windows, or any other operating system, you are encouraged to use Docker, WSL or any other (pseudo)virtualization platform that can provide you a stable Linux-based work environment. You are welcome to provide new compatibility solutions any time.
The following quick start has been tested on Ubuntu 25.04 LTS. Please note that this process may be similar in other distros as well. In case of any difficulties, you are welcome to raise a pull request and propose some adjustments.
First of all, clone this repository, then open the folder with VSCode and execute the following tasks:
- Install dependencies,
- Integrate IoD Sim with ns3
- Configure IoD Sim
- Build IoD Sim
To run a JSON scenario configuration, execute the following command:
cd ns3/
./ns3 run scenario -- --config=../scenario/simple_wifi.json
To build IoD_Sim as a library, launch the following commands in the root folder of the project:
# Install all the required dependencies (working for Fedora, Arch Linux and Debian-based distros, manual installation required for MacOS users)
./tools/install-dependencies.sh
# Clone ns3 and apply IoD_Sim patches
./tools/prepare-ns3.sh
# Configure IoD_Sim (debug mode, add "--mode default" for default one, release not yet supported)
./tools/configure-iodsim.sh
# Move to ns3 folder and build IoD_Sim
cd ns3 && ./ns3 buildAfter the build, binaries can be found in the ns3/build folder.
In particular, to run a JSON scenarios the ns3/build/ns3.45-scenario-debug (ns3/build/ns3.45-scenario-debug) executable can be used in this way:
./ns3/build/ns3.45-scenario-default --config=/path/to/scenario.json
# You can also use ./ns3 script using:
./ns3 run "scenario --config=/path/to/scenario.json"The results output directory can be defined in the JSON scenario with the "resultsPath" key. In the examples, you will usually find the path to "../results/". In this folder there will be a folder for every execution with this name format: "<scenario_name>-." (e.g. test-trace-2025-11-27.20-34-52).
If you want a statically compiled binary usable on any system, you can use the docker builder as:
cd tools/compile && docker compose up --build && docker compose rm -f -s -vAfter this command you will find the static binary in tools/compile/bin folder.
You can use the static binary as with the binary before, but you will not need to install any dependencies on the system where you want to run the binary.
Before proceeding with the simulator, it may be helpful to generate the respective documentation. IoD_Sim relies on the Doxygen tool, which should already be installed with the other dependencies (if not, refer to the specific installation procedure for your distribution).
The documentation can be generated in HTML and LaTeX formats by running:
doxygen ./docs/IoD_Sim_doc
After creating your own scenario through the JSON file, you can use Docker to quickly proceed to simulation in a few steps. The first time, the container image must be built by running the following command in the main directory of the repository:
docker build . -t docker_iod_sim
Next, the simulation can be run by launching:
sudo docker run --rm -v ./results:/IoD_Sim/results -v ./scenario:/IoD_Sim/scenario docker_iod_sim [--help] <simulation_file_name>
When completed, the results folder will contain the results of the simulation. It should be noted that if a new scenario is placed in ./scenario, there will be no need to rebuild the container.
Each version of IoD_Sim relies on a specific release of ns-3. A compatibility table can be found below:
| IoD_Sim version | ns-3 version | 5G LENA version | Build system | Release date |
|---|---|---|---|---|
| v4.1.0 | ns-3.45 | 5g-lena-v4.1.y | cmake | January 9, 2026 |
| v4.0.2 | ns-3.42 | N/A | cmake | January 9, 2025 |
| v4.0.1 | ns-3.42 | N/A | cmake | June 5, 2024 |
| v4.0.0 | ns-3.42 | N/A | cmake | June 2, 2024 |
| v3.0.0 | ns-3.38 | N/A | cmake | April 4, 2023 |
| v2.0.0 | ns-3.35 | N/A | waf | April 12, 2022 |
| v1.0.0 | ns-3.30 | N/A | waf | October 27, 2019 |
Copyright (C) 2018-2026 The IoD_Sim Authors.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
