1 Introduction
2 Overview
3 The NED Language
4 Simple Modules
5 Messages
6 The Simulation Library
7 Building Simulation Programs
8 Configuring and Running Simulations
9 Network Graphics And Animation
10 Analyzing Simulation Results
11 Documenting NED and Messages
12 Parallel Distributed Simulation
13 Customization and Embedding
14 NED Language Grammar
15 References
1 Introduction
1.1 What is OMNeT++?
1.2 Organization of this manual
1.3 Credits
2 Overview
2.1 Modeling concepts
2.1.1 Hierarchical modules
2.1.2 Module types
2.1.3 Messages, gates, links
2.1.4 Modeling of packet transmissions
2.1.5 Parameters
2.1.6 Topology description method
2.2 Programming the algorithms
2.3 Using OMNeT++
2.3.1 Building and running simulations
2.3.2 What is in the distribution
3 The NED Language
3.1 NED overview
3.1.1 Components of a NED description
3.1.2 Reserved words
3.1.3 Identifiers
3.1.4 Case sensitivity
3.1.5 Comments
3.2 The import directive
3.3 Channel definitions
3.4 Simple module definitions
3.4.1 Simple module parameters
3.4.2 Simple module gates
3.5 Compound module definitions
3.5.1 Compound module parameters and gates
3.5.2 Submodules
3.5.3 Submodule type as parameter
3.5.4 Assigning values to submodule parameters
3.5.5 Defining sizes of submodule gate vectors
3.5.6 Conditional parameters and gatesizes sections
3.5.7 Connections
3.6 Network definitions
3.7 Expressions
3.7.1 Constants
3.7.2 Referencing parameters
3.7.3 Operators
3.7.4 The sizeof() and index operators
3.7.5 The xmldoc() operator
3.7.6 XML documents and the XPath subset supported
3.7.7 Functions
3.7.8 Random values
3.7.9 Defining new functions
3.8 Parameterized compound modules
3.8.1 Examples
3.8.2 Design patterns for compound modules
3.8.3 Topology templates
3.9 Large networks
3.9.1 Generating NED files
3.9.2 Building the network from C++ code
3.10 XML binding for NED files
4 Simple Modules
4.1 Simulation concepts
4.1.1 Discrete Event Simulation
4.1.2 The event loop
4.1.3 Simple modules in OMNeT++
4.1.4 Events in OMNeT++
4.1.5 FES implementation
4.2 Packet transmission modeling
4.2.1 Delay, bit error rate, data rate
4.2.2 Multiple transmissions on links
4.3 Defining simple module types
4.3.1 Overview
4.3.2 Constructor
4.3.3 Constructor and destructor vs initialize() and finish()
4.3.4 Compatibility with earlier versions
4.3.5 "Garbage collection" and compatibility
4.3.6 An example
4.3.7 Using global variables
4.4 Adding functionality to cSimpleModule
4.4.1 handleMessage()
4.4.2 activity()
4.4.3 initialize() and finish()
4.4.4 handleParameterChange()[New!]
4.4.5 Reusing module code via subclassing
4.5 Finite State Machines in OMNeT++
4.6 Sending and receiving messages
4.6.1 Sending messages
4.6.2 Broadcasts and retransmissions
4.6.3 Delayed sending
4.6.4 Direct message sending
4.6.5 Receiving messages
4.6.6 The wait() function
4.6.7 Modeling events using self-messages
4.6.8 Stopping the simulation
4.7 Accessing module parameters
4.7.1 Emulating parameter arrays
4.8 Accessing gates and connections
4.8.1 Gate objects
4.8.2 Connection parameters
4.8.3 Transmission state
4.8.4 Connectivity
4.9 Walking the module hierarchy
4.10 Direct method calls between modules
4.11 Dynamic module creation
4.11.1 When do you need dynamic module creation
4.11.2 Overview
4.11.3 Creating modules
4.11.4 Deleting modules
4.11.5 Module deletion and finish()
4.11.6 Creating connections
4.11.7 Removing connections
5 Messages
5.1 Messages and packets
5.1.1 The cMessage class
5.1.2 Self-messages
5.1.3 Modelling packets
5.1.4 Encapsulation
5.1.5 Attaching parameters and objects
5.2 Message definitions
5.2.1 Introduction
5.2.2 Declaring enums
5.2.3 Message declarations
5.2.4 Inheritance, composition
5.2.5 Using existing C++ types
5.2.6 Customizing the generated class
5.2.7 Using STL in message classes
5.2.8 Summary
5.2.9 What else is there in the generated code?
6 The Simulation Library
6.1 Class library conventions
6.1.1 Base class
6.1.2 Setting and getting attributes
6.1.3 className()
6.1.4 Name attribute
6.1.5 fullName() and fullPath()
6.1.6 Copying and duplicating objects
6.1.7 Iterators
6.1.8 Error handling
6.2 Logging from modules
6.3 Simulation time conversion
6.4 Generating random numbers
6.4.1 Random number generators
6.4.2 Random number streams, RNG mapping
6.4.3 Accessing the RNGs
6.4.4 Random variates
6.4.5 Random numbers from histograms
6.5 Container classes
6.5.1 Queue class: cQueue
6.5.2 Expandable array: cArray
6.6 The parameter class: cPar
6.6.1 Reading the value
6.6.2 Changing the value
6.6.3 cPar storage types
6.7 Routing support: cTopology
6.7.1 Overview
6.7.2 Basic usage
6.7.3 Shortest paths
6.8 Statistics and distribution estimation
6.8.1 cStatistic and descendants
6.8.2 Distribution estimation
6.8.3 The k-split algorithm
6.8.4 Transient detection and result accuracy
6.9 Recording simulation results
6.9.1 Output vectors: cOutVector
6.9.2 Output scalars
6.9.3 Precision[New!]
6.10 Watches and snapshots
6.10.1 Basic watches
6.10.2 Read-write watches[New!]
6.10.3 Structured watches[New!]
6.10.4 STL watches[New!]
6.10.5 Snapshots
6.10.6 Breakpoints
6.10.7 Getting coroutine stack usage
6.11 Deriving new classes
6.11.1 cObject or not?
6.11.2 cObject virtual methods
6.11.3 Class registration
6.11.4 Details
6.12 Object ownership management
6.12.1 The ownership tree
6.12.2 Managing ownership
7 Building Simulation Programs
7.1 Overview
7.2 Using Unix and gcc
7.2.1 Installation
7.2.2 Building simulation models
7.2.3 Multi-directory models
7.2.4 Static vs shared OMNeT++ system libraries
7.3 Using Windows and Microsoft Visual C++
7.3.1 Installation
7.3.2 Building simulation models on the command line
7.3.3 Building simulation models from the MSVC IDE
8 Configuring and Running Simulations
8.1 User interfaces
8.2 The configuration file: omnetpp.ini
8.2.1 An example
8.2.2 The concept of simulation runs
8.2.3 File syntax
8.2.4 File inclusion
8.2.5 Sections
8.2.6 The [General] section
8.3 Dynamic NED loading
8.4 Setting module parameters in omnetpp.ini
8.4.1 Run-specific and general sections
8.4.2 Using wildcard patterns
8.4.3 Applying the defaults
8.5 Configuring output vectors
8.6 Configuring the random number generators
8.6.1 Number of RNGs
8.6.2 RNG choice
8.6.3 RNG mapping
8.6.4 Automatic seed selection
8.6.5 Manual seed configuration
8.6.6 Choosing good seed values: the seedtool utility
8.7 Cmdenv: the command-line interface
8.7.1 Command-line switches
8.7.2 Cmdenv ini file options
8.7.3 Interpreting Cmdenv output
8.8 Tkenv: the graphical user interface
8.8.1 Command-line switches
8.8.2 Tkenv ini file settings
8.8.3 Using the graphical environment
8.8.4 In Memoriam...
8.9 Repeating or iterating simulation runs
8.9.1 Executing several runs
8.9.2 Variations over parameter values
8.9.3 Variations over seed value (multiple independent runs)
8.10 Akaroa support: Multiple Replications in Parallel
8.10.1 Introduction
8.10.2 What is Akaroa
8.10.3 Using Akaroa with OMNeT++
8.11 Typical issues
8.11.1 Stack problems
8.11.2 Memory leaks and crashes
8.11.3 Simulation executes slowly
9 Network Graphics And Animation
9.1 Display strings
9.1.1 Display string syntax
9.1.2 Submodule display strings
9.1.3 Background display strings
9.1.4 Connection display strings
9.1.5 Message display strings
9.2 Colors
9.2.1 Color names
9.2.2 Icon colorization
9.3 The icons
9.3.1 The bitmap path
9.3.2 Categorized icons
9.3.3 Icon size
9.4 Layouting
9.5 GNED -- Graphical NED Editor
9.5.1 Keyboard and mouse bindings
9.6 Enhancing animation
9.6.1 Changing display strings at runtime
9.6.2 Bubbles
10 Analyzing Simulation Results
10.1 Output vectors
10.1.1 Plotting output vectors with Plove
10.1.2 Format of output vector files
10.1.3 Working without Plove
10.2 Scalar statistics
10.2.1 Format of output scalar files
10.2.2 The Scalars tool
10.3 Analysis and visualization tools
10.3.1 Grace
10.3.2 ROOT
10.3.3 Gnuplot
11 Documenting NED and Messages
11.1 Overview
11.2 Authoring the documentation
11.2.1 Documentation comments
11.2.2 Text layout and formatting
11.2.3 Special tags
11.2.4 Additional text formatting using HTML
11.2.5 Escaping HTML tags
11.2.6 Where to put comments
11.2.7 Customizing the title page
11.2.8 Adding extra pages
11.2.9 Incorporating externally created pages
11.3 Invoking opp_neddoc
11.3.1 Multiple projects
11.4 How does opp_neddoc work?
12 Parallel Distributed Simulation
12.1 Introduction to Parallel Discrete Event Simulation
12.2 Assessing available parallelism in a simulation model
12.3 Parallel distributed simulation support in OMNeT++
12.3.1 Overview
12.3.2 Parallel Simulation Example
12.3.3 Placeholder modules, proxy gates
12.3.4 Configuration
12.3.5 Design of PDES Support in OMNeT++
13 Customization and Embedding
13.1 Architecture
13.2 Embedding OMNeT++
13.3 Sim: the simulation kernel and class library
13.3.1 The global simulation object
13.3.2 The coroutine package
13.4 The Model Component Library
13.5 Envir, Tkenv and Cmdenv
13.5.1 The main() function
13.5.2 The cEnvir interface
13.5.3 Customizing Envir
13.5.4 Implementation of the user interface: simulation applications
14 NED Language Grammar
15 References
Date | Author | Change |
2005/10 | AV | updated for the OMNeT++ 3.2 release |
2005/03 | AV | updated for the OMNeT++ 3.1 release |
2004/12 | AV | updated for the OMNeT++ 3.0 release |
2003/06 | AV | Mentioned Grace and ROOT in section "Visualizing...". Added section "Using STL in message classes". |
2003/06 | AV | OMNeT++ 2.3 released |
2003/04-06 | AV | "Design of OMNeT++" chapter revised, extended, and renamed to "Customization and Embedding". Added "Interpreting Cmdenv output" section to the "Running the Simulation" chapter. Added section about Akaroa in "Running the Simulation" chapter. Expanded section about writing shell scripts to control the simulation. Added background info about RNGs and warning about old RNG in "Class Library" chapter; revised/extended "Deriving new classes" section in same chapter. Bibliography converted to Bibtex, expanded and cleaned up; citations added to text. "Parallel Simulation" chapter: contents removed until new PDES implementation gets released. Revised and reorganized NED chapter. Section about message sending/receiving and other simple module related functions moved to chapter "Simple Modules"; cMessage treatment from "Simulation Library" merged with message subclassing chapter into new chapter "Messages". Deprecated cPacket. Removed sections "Simulation techniques" and "Coding conventions", and their useful fragments were incorporated elsewhere. Added/created sections about message transmission modeling, and using global variables. Added sections explaining how to implement broadcasts and retransmissions. Revised section about dynamic module creation. Deprecated putaside-queue, receiveNew(), receiveOn(). Added section "Object ownership management"; removed section on "Using shared objects". |
2003/03 | AV | OMNeT++ 2.3b2 released |
2003/02 | AV | OMNeT++ 2.3b1 released |
2003/01 | AV | Added chapter about message subclassing; revised chapter about running the simulation and incorporated new Cmdenv options; added new distributions and clarified many details in NED expr. handling section |
Summer 2002 | Ulrich Kaage | Converted from Word to LaTeX |
2002/03/18 | AV | Documented new ini file options about Envir plugins |
2002/01/24 | AV | Refinements on the Parsec chapter |
2001/10/23 | AV | Updated to reflect changes since 2.1 release (see include/ChangeLog) |