With message subclassing now officially supported, documented and tested, it marks the beginning of a new era for OMNeT++ simulations. And there much more in the package: this release is the probably biggest step forward since OMNeT++ was made public. Visit the download area. <P>Changes since version 2.2 p1,p2,p3 </P>
OMNeT++ 2.3b1 release (February 2003)
Licensing change: The license used in previous versions has been replaced
with a new "Academic Public License" (doc/License). This license gives
noncommercial users rights to use, modify and distribute copies of OMNeT++.
The possibility of using OMNeT++ under the GPL has been removed. Commercial
users of OMNeT++ should obtain a commercial license.
Major changes of this release in nutshell:
- The simulation kernel has been ported to use C++ exceptions and RTTI
(Run-time Type Information) and on Windows, the Fiber API. Also, there
has been extensive internal refactoring and refinement of the APIs.
- The "message subclassing" feature has been officially introduced. It is now
documented in the manual, and used by several sample simulations.
- Added the implementation of several distributions: continuous distributions
gamma, beta, Erlang, chi^2, student-t, Cauchy, triangular, lognormal, Weibull
and Pareto; discrete distributions Bernoulli, binomial, geometric, negbino-
mial and Poisson [contributed by Werner Sandmann and Kay Michael Masslow].
- Contains an alpha version of the new NED compiler architecture,
built upon XML foundations. This includes a tool for generating
documentation from NED files.
- Akaroa support. Akaroa does MRIP (multiple replications in parallel).
- Tkenv GUI has been polished -- both functionality and usability has been
greatly improved. Plove GUI was also redesigned.
For the list of changes that affect portability of simulation models,
see the new doc/API-Changes.txt file. You can find even more detailed
information in the ChangeLogs of the respective source directories.
A more detailed list of changes follows:
Simulation kernel refactoring:
- On Windows, now Win32 native coroutines are used (Fibers API). This change
made it possible to introduce the use of C++ exceptions.
- Error handling in simulation kernel (and in other libs too) has been ported
to C++ exceptions. This not only resulted in cleaner kernel code, but also
has benefits for you:
* you can now use try-catch for better error handling. The API documentation
describes which methods throw exceptions. The common exception class
* methods like end(), endSimulation(), deleteModule() terminate the module
immediately even when called from handleMessage(). In earlier versions,
handleMessage() had to go through in any case.
* you can now safely use C++ libraries that throw exceptions, e.g. STL.
Methods like cSimpleModule::error() and opp_error() are remained for backward
compatibility, but they simply throw cException. opp_warning() remained but
its use is discouraged.
- Use of C++ RTTI (Run-time Type Information). From now on, you can use
dynamic_cast<> in your code, and you don't need to provide a className()
method in your classes (because the kernel can figure it out using typeid
in the base class, cObject).
- Eliminated gcc 3.0.x warnings, and changed to the I/O headers , etc.
- Several smaller auxiliary classes have been turned into inner classes of
their respective 'main' classes. (For example, cQueueIterator became
cQueue::Iterator, sTopoNode became cTopology::Node, etc; full list in
include/ChangeLog.) Compatibility typedefs exist for the old names.
- Cleanup in cObject and cSimulation: several internally used methods have been
eliminated or moved to better places. (For example, inspector-related methods
cObject::inspector() and cObject::inspectorFactoryName() have been removed,
and inspectors are now fully internal matter of Tkenv.)
- Refactoring on dynamic module creation: instead of modtype->buildInside(mod),
one should now write mod->buildInside(), which is more natural.
(The former syntax still works -- a cModuleType::buildInside() is still
provided for backward compatibility). buildInside() delegates task to
doBuildInside() (a new method), so it's doBuildInside() which should be
redefined in subclasses, and also nedc generates now doBuildInside() code.
- Container classes are now more consistent in what they do when the requested
object doesn't exist:
* Convention 1: methods returning an object reference (e.g. cPar&) now
always throw an exception if the object is not found. (Until now, some
methods issued a warning and returned null reference, i.e. *(cPar*)NULL).
* Convention 2: methods returning a pointer (e.g. cGate*) return NULL
pointer if the object is not found. (Until now, some methods issued
a warning and returned NULL pointer.)
These conventions necessitated the following changes:
* par() of cModule and cMessage now throws an exception if parameter was not
found. (In simple module code, check for existence of a parameter before
accessing it can now be replaced with try-catch.)
* cModule: cGate *gate() methods no longer issue a warning if the gate is
not found, just return NULL.
* cArray::remove(cObject *) and cQueue::remove(cObject *) methods
now return NULL instead of the original pointer if the object was
- cPar can now use compiled expressions subclassed from cDoubleExpression (a
new class). This is needed for code generated by the new nedtool.
- cSimulation changes:
* lastModuleIndex() renamed to lastModuleId();
* operator deprecated (use module(int) method instead)
* del() renamed to deleteModule(); add() renamed to addModule()
- Channels are now represented by real objects (subclassed from cChannel)
rather than parameters in cGate. Channels can be assigned to connections
via cGate's setChannel() method; at the same time, DEPRECATED cGate's
setDelay(), setError(), setDatarate(), setLink() methods (these attributes
should be set on the channel object).
- cSubModIterator: operator deprecated (use operator()(int) method instead)
- For further, more internal changes and for more details on the above changes
see include/ChangeLog and src/sim/ChangeLog.
Simulation kernel new features:
- Added convenience functions to cGate, cMessage, and cArray (see
API-Changes.txt for details).
- A new utility class cDisplayStringParser lets you easily manipulate display
Message subclassing, new NED compiler architecture:
- The Perl-based message compiler opp_msgc is now available in bin/. Message
subclassing is documented in the manual, and it is demonstrated by several
sample simulations. 40+ test cases deal with testing the generated code.
- Added nedtool, the new NED and message compiler (alpha). nedtool converts
NED from/to XML, providing much better integration possibilities (for example
it is now possible to use XML/XSLT to generate NED topologies from external
data sources -- or to extract NED info to arbitrary XML format.)
- Added nedxml library (the library under nedtool) to src/, and its API-doc
- Manual source has been converted from Word to Latex [thanks to Ulrich Kaage
for this non-trivial and time consuming task!]. He also added an Index.
HTML conversion (using L2H, by myself) is not 100% yet, you should regard
the PDF as the authoritative form.
- New chapter about message subclassing, plus various updates, fixes and
clarifications [thanks to Phillip Feldman for his comments]
- In addition to Cygwin, the MinGW compiler is now also supported in Windows.
Older Cygwin versions with the 2.95.x compiler cannot be used any more.
- Improved MSVC support: opp_nmakemake creates MSVC makefiles; running the
test suite now works smoothly with MSVC; opp_stacktool displays reserved
stack size for executables.
- MSVC projects now need *different* compiler flags. Every source should be
compiled with exceptions enabled and using /GR, otherwise there will be RTTI
exceptions. Because of the Fiber API, reserved stack size should be set to
a low value, 64K.
- New utilities (Unix, MSVC): opp_neddoc creates HTML documentation for NED
files; opp_neddocall creates HTML documentation for all nedfiles in a
directory tree; splitvec to split output vector files.
- There are new targets in Makefiles that are generated by opp_makemake:
Target neddoc.html generates a file named neddoc.html by using the
opp_neddoc tool on all NED files. Target htmldocs generates HTML
documentation of all source files (*.h and *.cc) using Doxygen. The
HTML files are placed into the sub-directory ./htmldoc. Also, Makefile
now generates ../doc/api/tags. This tag file can be included when generating
- Improved configure script. Now we support Tk8.4, and also optional packages
- Test suite: the number of test cases has grown from 19 to about 120 since
omnetpp-2.2; now it covers a bigger part of the core functionality (modules,
messages, queues, parameter) as well as message subclassing and some aspects
of NED and Cmdenv. Tests for the distributions are in test/distr.
- The Plove GUI has been redesigned, with focus on intuitiveness and usability.
It also features icon toolbars, tooltips and more self-explanatory dialogs.
- The number of module icons available for simulations has grown from 41 to ~90
since the 2.2 release. GNED also has an improved icon selector dialog now.
- There have been other small fixes and improvements in GNED, e.g. fixed the
bug which caused display strings always being added to connections.
- All Tk GUIs now make use of the combobox widget from Bryan Oakley.
Envir changes (apply both to Cmdenv and Tkenv):
- Integrated Steffen Sroka's Akaroa extension that supports multiple
independent replicated simulation runs.
Akaroa can be activated by specifying
in the ini file. By default, all output vectors are under Akaroa
control; the ..akaroa=false setting can be used
to make Akaroa ignore specific vectors. For more info see the Akaroa
home page and the OMNeT++ documentation.
- Added fname-append-host=yes/no ini file setting. When turned on, appends
the host name to the names of the output
files (output vector, output scalar, snapshot files). This is
useful when the simulation is run on multiple machines concurrently
(parallel independent runs (Akaroa) or parallel/distributed simulation),
and all running instances write to the same directory (e.g. shared
via NFS mount). [Idea from Steffen Sroka's Akaroa extension]
- 2 bugfixes: (1) output scalar file did not get opened sometimes; (2) output
scalar file got removed between runs
- Cmdenv can now display various performance measures like event/sec,
event/simsec, simsec/sev, number of message objects, etc. during execution,
so you can compare Tkenv and Cmdenv performances.
- The omnetpp.ini entries that control Cmdenv execution mode and amount of
printed info have been changed. An express-mode=yes/no (default: no) switch
has been introduced, with a meaning similar to Tkenv. Normal mode
(express-mode=no) can be controlled with the module-messages=yes/no,
event-banners=yes/no, and message-trace=yes/no entries (the third adds new
functionality), while express mode is affected by the status-frequency=
, performance-display=yes/no entries. autoflush=yes/no has
also been added. The display-update=, verbose-simulation= entries are now
- The -h command-line switch now lists all networks and modules linked into
- Inspector windows are now restored from a ./.tkenvrc file if you restart the
simulation. More precisely: as soon as an inspected object (identified by
fullpath and classname) gets created in the simulation, its window pops up.
Objects must have unique names for this to work properly! [Thanks to Nicky
Van Foreest for the idea]
- For better navigation of simulation objects, an object tree view has been
added to the left side of the main window. It can be turned off from the
toolbar for performance.
- Inspector windows have been re-though to make them more intuitive, consistent
and informative. All inspector windows now feature an inspector bar with
object fullpath, classname and pointer value (useful for debugging), and a
color code to make it easier to match different inspectors of the same
object. Axis labelling have been added to output vector inspectors.
Added tooltips to graphical module inspectors, speeded up animation of on
very long connection arrows, and refined functionality of the Step icon
into 3 distinct icons ("Run until next local event", "Fast", "Stop").
- Improved File|New run and New network dialogs (now also available from the
toolbar) offer choice from a combobox. Other improvements: main text window
is now cleared when simulation is restarted; more tooltips & toolbar icons;
better output in Message Trace window; increased event number status bar
field width by 3 digits (it was limited in size to 1.000.000 events);
- With "ring" layout, changed display order of modules from clockwise to the
more natural counter-clockwise.
- Extensive internal refactoring mostly because of the introduction exception
handling and reorganization of inspector registration and creation.
- HCube, Token Ring and Dyna2 now use message subclassing. Token Ring has
also been significantly revised. The PVMEx example has been removed.
- A new example simulation Topo has been created to demonstrate NED features.
Currently it shows how to build various parametric topologies (chain, mesh,
ring, star, random graph, binary tree, hexagonal grid) using NED.