OMNEST Overview
About OMNEST
A powerful simulation framework for complex systems
OMNEST is an object-oriented discrete event network simulation framework. The framework has a generic architecture, which allows it to be applied to various problem domains where complex behavior needs to be simulated with high performance: protocol modeling, modeling of wired and wireless communication networks, architectural simulation of high-performance clusters, to name a few.
The noncommercial version, OMNeT++, has a large academic user community, with several groups publishing and supporting simulation models, and hundreds of papers published each year on the simulation of wireless networks and other topics.
Our users commonly mention the following items when asked why they chose OMNEST (or OMNeT++):
- Very efficient — OMNEST simulations execute fast and scale very well, which can be surprising given the amount of features in the simulation library
- Can be learned quickly — some C++ knowledge is required, but the programming model and the API can be picked up quickly, and one can become productive in a short time
- Great community — the simulator has a large user community, and a lot of information is freely available on the Internet; this is very useful when one encounters a problem, as the solution is often just a web search away
- Component model — simulation models are easier to understand and maintain and can be combined in unexpected ways
- Flexible — the simulator and models can be extended in pleasantly flexible ways; exotic scenarios such as interfacing with other simulators and external systems, parallel simulation, emulation, and combinations of the above, can be realized
Component Model
Build complex simulations from reusable components

One of the fundamentals of the OMNEST framework is the component-based architecture of simulation models. Models are built from reusable components, called modules, which can be combined to form more complex structures. The depth of module nesting is not limited. Modules communicate primarily by message passing, via connections or by direct sending. Module behavior can be programmed in C++, using the simulation infrastructure provided by OMNEST.
- Simulation models are easier to understand and maintain, and can be combined productively
- Facilitates code reuse
- Helps you choose the right abstraction level: a component in a model can be later replaced with a more detailed or a less detailed version
Components are assembled using a domain-specific language, NED, that can be edited both graphically and in source. The NED language defines the appearance, parameters, and connection points of components (modules), and also the submodules and internal connections (netlist).
Simulation models can be parameterized. Module parameters can carry simple (int, double, string, bool) and compound data types (e.g. XML), and can be set to values like normal(1.0,0.3) to act as random number sources.
The Simulation Library
Comprehensive APIs for building powerful simulations
Simple modules are programmed in C++, using the APIs provided by the simulation library. This functionality includes:
Modules communicate primarily by message passing, via connections or direct sending. Messages may represent jobs, network packets, control information, or other entities. OMNEST provides support for generating C++ message classes from compact descriptions.
OMNEST offers multiple random number streams, pluggable RNG algorithms (the default being Mersenne Twister), and many discrete and continuous distributions. RNGs are rarely accessed in the code directly, as most of the time module parameters are used as sources of random numbers.
OMNEST provides a signals framework that is used for publish-subscribe communication among modules, obtaining notification about structural model changes, exposing statistics, and so on.
Model code can record any data as simulation result. Data can be recorded directly, or the model can emit them as signals and let the simulation framework take care of recording them in the appropriate form and level of detail.
Good log messages in the code help you understand the behavior of the model and can also reduce debugging time. OMNEST can also save log messages into an event log file that can be later filtered, searched, and examined.
OMNEST supports the creation and deletion of modules and connections at runtime, opening the possibility for modeling dynamically changing networks, as well as importing topology from an external source at runtime.
Performance, Integration, and Extensibility
Powerful features for advanced simulation scenarios
OMNEST allows many interesting possibilities:
All model files and output files are plain text to make it easier for you to process them with your own custom or 3rd party tools. We also provide command-line tools and libraries to manipulate them.
C++ plug-in interfaces are made available to customize various aspects of the simulation kernel: event scheduling, configuration and model parameterization, result recording, and more.
You can create your own applications that rely on the OMNEST simulation kernel internally for simulation functions: the simulation kernel, model components, or even whole simulations can be embedded into your program as C++ libraries.
Simulation models can be executed using parallel distributed simulation on clusters or multicore/multiprocessor architectures, to speed up the simulations or to distribute memory requirements.
OMNEST allows you to speed up steady-state simulations using the Akaroa package. Akaroa runs multiple replications of the model on nodes of a computing cluster.
The simulation kernel supports real-time and hardware-in-the loop simulation via a plugin interface. A functioning and extensively commented source code example will help you quickly implement your own application-specific hardware-in-the-loop simulation.
Available as part of model packages like the INET Framework.
The OMNEST-SystemC integration feature allows for mixing OMNEST and SystemC modules in the same simulation program, without the performance loss usually characteristic of co-simulation solutions.
Allows for connecting OMNEST with other simulators via HLA / IEEE 1516.
Platforms
Run your simulations on your preferred platform
Simulations can be run on Windows and practically on any Unix-like environment that is powerful enough and has a modern C++ compiler, including macOS and Linux.
The Simulation IDE is currently available on Windows, macOS, and Linux.