Introduction¶
What Is OMNeT++?¶
OMNeT++ is an object-oriented modular discrete event network simulation framework. It has a generic architecture, so it can be (and has been) used in various problem domains:
Modeling of wired and wireless communication networks.
Protocol modeling.
Modeling of queueing networks.
Modeling of multiprocessors and other distributed hardware systems.
Validation of hardware architectures.
Evaluating performance aspects of complex software systems.
In general, modeling and simulation of any system where the discrete event approach is suitable, and can be conveniently mapped into entities communicating by exchanging messages.
OMNeT++ itself is not a simulator of anything concrete, but rather provides infrastructure and tools for writing simulations. One of the fundamental ingredients of this infrastructure is a component architecture for simulation models. Models are assembled from reusable components termed modules. Well-written modules are truly reusable and can be combined in various ways, like LEGO blocks.
Modules can be connected with each other via gates (other systems would call them ports) and combined to form compound modules. The depth of module nesting is not limited. Modules communicate through message passing, where messages may carry arbitrary data structures. Modules can pass messages along predefined paths via gates and connections or directly to their destination. The latter is useful for wireless simulations, for example. Modules may have parameters that can be used to customize module behavior and/or to parameterize the model’s topology. Modules at the lowest level of the module hierarchy are called simple modules and encapsulate model behavior. Simple modules are programmed in C++ and make use of the simulation library.
OMNeT++ simulations can be run under various user interfaces. Graphical, animating user interfaces are highly useful for demonstration and debugging purposes, and command-line user interfaces are best for batch execution.
The simulator as well as user interfaces and tools are highly portable. They are tested on the most common operating systems (Linux, macOS, Windows) and they can be compiled out of the box or after trivial modifications on most Unix-like operating systems.
OMNeT++ also supports parallel distributed simulation. OMNeT++ can use several mechanisms for communication between partitions of a parallel distributed simulation, for example, MPI or named pipes. The parallel simulation algorithm can easily be extended, or new ones can be plugged in. Models do not need any special instrumentation to be run in parallel – it is just a matter of configuration. OMNeT++ can even be used for classroom presentation of parallel simulation algorithms because simulations can be run in parallel even under the GUI that provides detailed feedback on what is going on.
is the commercially supported version of OMNeT++. OMNeT++ is free only for academic and non-profit use; for commercial purposes, one needs to obtain licenses from Simulcraft Inc.
Organization of This Manual¶
The manual is organized as follows:
Chapters Introduction and Overview contain introductory material.
The second group of chapters, The NED Language, Simple Modules, and The Simulation Library, are the programming guide. They present the NED language, describe the simulation concepts and their implementation in OMNeT++, explain how to write simple modules, and describe the class library.
Chapters Graphics and Visualization and Documenting NED and Messages explain how to customize the network graphics and how to write NED source code comments from which documentation can be generated.
Chapters Building Simulation Programs, Configuring Simulations, Running Simulations, and cha:ana-sim deal with practical issues like building and running simulations and analyzing results, and describe the tools OMNeT++ provides to support these tasks.
Chapter Parallel Distributed Simulation is devoted to the support of distributed execution.
Chapters Customizing and Extending OMNeT++ and Embedding the Simulation Kernel explain the architecture and internals of OMNeT++, as well as ways to extend it and embed it into larger applications.
The appendices provide a reference on the NED language, configuration options, file formats, and other details.