WHATSNEW
WHATSNEW
==========
This file summarizes OMNeT++ changes in each release. For changes related to
simulation model compatibility, see doc/API-Changes. For more detailed info
about all changes, see include/ChangeLog, src/*/ChangeLog, and ide/ChangeLog.
This is primarily a bugfix release, with a small but practically quite useful
NED feature (@reconnect) and minor additions to the simulation library.
Regarding bugfixes, Qtenv has received quite a lot of attention.
NED:
Simulation library:
Qtenv:
- Start the animation at t=0, not right before the first event.
- Connection arrows: Make the "m=[nesw]" display string tag work better
with border-to-border connections.
- Align the lines of info text ("t" display string tag) of submodules and
connections appropriately in the left/top/right positions.
- When the layouting process takes a long time (more than five seconds),
ask the user what to do (wait or finish).
- Default log prefix format changed to use %K instead of %C. (%K only prints
the context component if it is different from the event's module; %C always
prints it.)
- Log prefix format: Added the %< (trim preceding whitespace) directive.
- Keep caret (cursor) near the same event when switching Log Inspector modes.
IDE:
- IDE: Made the "Project Features" menu item more creative in finding
the project. (It said "Select a project first" much too often.)
- NED editor: added manual connection routing using the "m" tag.
Other:
- scavetool: Fixed vector file indexing bug that caused certain blocks
to be left out from the index. This also affects the Analysis Tool in
the IDE, which uses the same code for result file access.
This release contains minor fixes. See the individual ChangeLogs for details.
Core:
- Added the intuniformexcl() NED and C++ function. It returns a random integer
with uniform distribution over [a,b). that is, including a and excluding b.
- A description string can now be specified when registering new result filters
and recorders. New registration macros have been added for this purpose.
- cXMLElement was optimized to use less memory when large files are loaded.
- cHistogram: Now collects the number of positive and negative infinity values
separately.
Other:
- Updated IDE to Eclipse 4.11. This resolves compatibility issues with JDK 11.
This release contains minor fixes. See the individual ChangeLogs for details.
Details follow.
NED:
Core:
- SimTime now has a new method named ustr() that prints the time in an
appropriate unit. It is now used in cClassDescriptor for displaying
simtime_t fields and at a few other places.
- New measurement units: K, Ohm, mOhm, kOhm, MOhm, uW, nW, pW, fW,
THz, kmps, binary and decimal multiples of bit (Kib, Mib, Gib,
Tib, kb, Mb); deg, rad; pct (percent), ratio.
- Support for logarithmic units: dBW, dBm, dBV, dBmV, dBA, dBmA, dB.
Conversion between logarithmic and corresponding linear units (W vs. dBW)
is supported. Conversion between bit and byte (and multiples) is
also supported.
Qtenv:
IDE:
Highlights of this release are an improved message compiler (required for INET 4),
much improved histogram support, a more powerful cMessagePrinter API and its
implementation in Qtenv, and better support for smooth animation in Qtenv.
Details follow.
Core:
- cHistogram has been replaced with new implementation. (The old one is still
available under the name cLegacyHistogram.) The new cHistogram is more
general (supports arbitrary bins), more configurable, and produces much
higher quality histograms even in the default setup due to newly introduced
techniques such as adaptive precollection, bin size rounding and bin edge
snapping, auto-extension with new bins, bin merging to keep the number of
bins optimal, etc. Histogram operation can be customized via histogram
strategy classes (cIHistogramStrategy); several histogram strategies are
provided.
Qtenv:
- Implemented support for the improved cMessagePrinter Options API, and added
a respective configuration dialog.
- The log viewer now supports ANSI control sequences for text styling:
foreground/background color, and bold/italic/underline text. Styling is
supported in both message history view and log view, i.e. it can be used
in text returned from cMessagePrinter and logged by the EV and other logging
macros.
- Rewritten the controller for smooth animation. The new algorithm is now able
to scale linearly, as long as the simulation can keep up.
- Histogram result objects are easier to locate on the GUI, and are now
also found by the Find/Inspect dialog.
Tkenv:
- The Tcl/Tk based runtime interface is now deprecated and turned off by
default. It will be removed in future OMNeT++ versions. You can still enable it
in configure.user by setting WITH_TKENV = yes, but we strongly suggest using
Qtenv instead.
- Updated toolchain on Windows (clang 5.0.1, gcc 7.3, gdb 8, osgEarth 2.7)
- OMNeT++ now requires osgEarth 2.7 or later (check the Install Guide for
further instructions on how to upgrade osgEarth.)
Tools:
Samples:
Documentation:
- Updates to the C++ Development and Launcher chapters of the User Guide.
Highlights of this release are the fine-tuning of result recording and processing
(especially around weighted statistics); many bug fixes and improvements in Qtenv;
makefile changes to allow DEBUG and RELEASE builds of models to co-exist, and
several related changes in the IDE.
Core:
- Figure zIndex is now additive: the effective zIndex is now the sum of the
zIndex values of the figure and all its ancestors up to the root figure.
This provides more flexibility, as the stacking order of figures
is no longer constrained by their position in the figure tree.
- Added cPanelFigure, a new figure type that turns off zoom for its children.
cPanelFigure is handy when one needs to do relative positioning unaffected
by zoom, for example when adding decorations next to submodule icons.
- The OSG viewer was factored out from Qtenv into a separate support library
which is only loaded at runtime on demand. Core OMNeT++ no longer has
any dependence on OSG or OSGEarth. This change improves simulation
startup times and also debugging experience, as it eliminates the loading
of the huge number of shared libraries that OSG and OSGEarth depends on.
(The library loading overhead was also present in simulations that did not
even contain 3D visualization.) The only API change is that one must use
cOsgCanvas::EarthViewpoint instead of osgEarth::Viewpoint when using
the cOsgCanvas::setEarthViewpoint().
Build:
- Models are built in RELEASE mode by default. Until now, DEBUG was the
default, which resulted in casual users always running their simulations
in DEBUG mode, i.e. much slower than possible.
- RELEASE and DEBUG mode binaries can now co-exist, so users do not have
to recompile when they switch modes (e.g. when they want to debug a
simulation.) This is a significant gain especially for large models
like INET. The goal was achieved by adding the "_dbg" suffix to the
names of DEBUG-mode binaries so they don't collide with RELEASE-mode
ones.
- Binaries are now hard-linked from the build directory (out/) to the
target directory instead of being soft-linked. This leaves the copy
in the target directory intact when the one in the build directory
is deleted.
IDE/Base:
- The Eclipse platform was updated to the latest Oxygen build (4.7.1)
IDE/Build:
IDE/Launching:
- The Run, Profile and Debug launch types now automatically trigger build.
- The launcher now switches the project (and optionally all projects it
depends on) to the appropriate build configuration if necessary: Run
and Profile will perform RELEASE build, Debug will perform DEBUG build.
- For Debug launch, the "_dbg" suffix is added implicitly to the target
name (only for the exe files). The simulations will also load the "_dbg"
versions of libraries when compiled to DEBUG.
- A new "Build before launch" section was added to the Launch config
dialog, which allows you to control whether to switch build configuration
automatically or to ask before the build. The scope of build can also
configured; options are: "None", "This project", or "Project + dependencies".
IDE/Analysis Tool:
Details:
- The Histograms tab on the Browse Data page now includes "statistics"-
type results as well.
- The Histograms tab now has new table columns: "Kind", "SumWeights",
"#Bins", "Hist.Range", all displayed by default. "Kind" indicates
whether a result item is a "statistic" or a "histogram", and whether
it is weighted or unweighted.
- On the All tab of Browse Data page, result item fields are now in
natural order (i.e. no longer alphabetically sorted).
- The "Variance" line has been removed from Properties view because
it's not too useful and can be easily computed as the square of the
standard deviation.
- New icon for scalar items on the All tab of Browse Data page
Qtenv:
Envir:
Side effect: in output vector files, vector IDs now start again from 0
at the start of each run when running multiple runs. Before, they continued
from where the previous run left off.
Scavetool:
- JSON and CSV exporter changes (applies to IDE Analysis Tool as well):
- Python export changed to JSON export with optional Python flavour
- CSV export renamed to "CSV for spreadsheet" and significantly improved
(also saves iteration variables for better run identification, etc.)
- another CSV export added ("CSV Records"), provenly suitable as input
for the read_csv() of Python Pandas
- omnetpp recorders: ensure order of "param" lines in the file mirror the
order in the ini file
- Output scalar file recorders: sum and sqrSum are no longer saved for
weighted statistics. This is to follow recent cStddev/cWeightedStddev
change.
- The IDE on Windows now can be started directly from a shortcut. Previously
the IDE was not able to load its native library if it was started from a
shortcut instead of the MinGW shell.
This is the final version of OMNeT++ 5.1. This release significantly improves
and builds upon functionality introduced in version 5.0, and also raises the
bar in other areas.
Highlights:
- A matured Qtenv that now replaces Tkenv as the default runtime GUI.
- Support for smooth custom animation and video recording.
- Better support for simulation campaigns in managing and performing a large
number of runs and in result recording/processing.
- Experimental support for SQLite-based result files.
- Updated toolchain and libraries on Windows including 64-bit Windows support.
- Updated Eclipse base for the IDE (Eclipse v4.6.3).
Result Analysis:
- Data export functionality in scavetool and the IDE has been reimplemented.
Currently the following export formats are available: CSV, Python source,
OMNeT++ scalar/vector files, SQLite scalar/vector files. The new exporter
interface allows for defining new exporters (including UI) without any
change to scavetool or the Analysis Tool in the IDE, and for more flexible
output formats.
Qtenv:
- Added graphical inspectors for output vectors and histograms. They are
enabled for cOutVector and cStatistic-based histogram objects, i.e. they
are currently not available for @statistic-based output vectors and
histograms.
Build:
- The configure script no longer detects and tests for the presence of the
'pcap' library. If models need it, they have to implement their own method
to detect and configure it.
Samples:
- The routing example was modified to demonstrate the new, built-in packet
animation in Qtenv. Packets are displayed as arrows along the connection
showing the actual packet length on the wire. Added parameter to be able
to switch between cut-through switching and store-and-forward. Also added
a parameter study into its omnetpp.ini.
Core:
- opp_run (and all executable simulations) now support the '-h configvars'
to print the list of dollar variables that can be used in configuration values.
Documentation:
- Install Guide has been updated and covers the installation procedure on
the most recent operating system versions.
- The Simulation Manual has been heavily updated. Look for the (new) symbol
to see the updated content.
- User Guide now has a new chapter about the Qtenv runtime environment.
Build:
- The 'configure' script now accepts WITH_XXX=yes/no options on the command line.
Look into the configure.user file to see the supported variables.
IDE:
- IDE can now generate a makefile that is exactly the same as the one
generated by the opp_makemake tool.
Qtenv:
Tools:
- scavetool: the -f option for the 'query' command adds statistics fields (min,
max, sum, etc.) as scalars.
- msgc: Message compiler now correctly generates 'override' keywords for certain
functions.
- The message compiler now generates code which produces no warnings even
when -Wall -Wextra -Wpedantic is used as a compiler command line option.
Samples:
- osg-earth now has a configuration where off-line map tiles are used instead
of an on-line map tile provider. (Note that this may not work on current
Debian/Ubuntu distros, because they contain an osgEarth library version
that is too old.)
Note:
1. There are now separate downloads for Linux, Windows and macOS. A fourth
package labelled "core" comes without the IDE, and can be used on all other
systems.
2. 32-bit Windows and Linux are no longer supported.
Known Issues:
Core:
- Support for smooth custom animations. The goal was to allow models to visualize
their operation using sophisticated animations while the simulation is running
under a GUI (Qtenv). The key idea is that refreshDisplay() is called repeatedly
at a reasonable rate to render frames. refreshDisplay() knows the animation
position from the simulation time (which is now interpolated between events)
and the "animation time", a variable also made accessible to the model.
Animation-to-simulation speed ratio (sec/simsec) is determined by an "animation
speed"
variable (or rather, several such variables) that can be set explicitly from
code.
Different animation speeds can be chosen dynamically to adapt the animation
to the current time scale of the interesting events or processes in the
simulation.
Animations that need to take place in zero simulation time are supported
with "holds", i.e. holding up the simulation for a certain animation time
period.
The actual playing speed of the resulting animation can be controlled in Qtenv
using the "Speed" slider on the toolbar. Note that this feature is only
available
in Qtenv (and not in Tkenv which is more-or-less in maintenance mode from now
on).
- Custom figure classes are now registered using Register_Figure(), not with
Register_Class(). This allows for more flexibility and a cleaner handling of
C++ namespaces.
- The stacking order of figures is now jointly determined by the child order and
a new runtime-settable cFigure member called zIndex, with the latter taking
priority. In @figure properties in NED files, "zIndex" replaces "childZ" which
was only used at parse time but not stored in figures afterwards.
- A figure can now be associated with a simulation object, for example a module
or a packet. Association means that the figure more-or-less "stands for" (or
visually represents) the other object in the GUI. For example, when the user
clicks or double-clicks the figure under Qtenv, the associated object is
focused or opened in the GUI. The figure also "inherits" the tooltip of its
associated object, provided it does not have its own tooltip.
- For text figures, one can now optionally turn on a "halo", which makes the
text more readable on all backgrounds.
- Support has been added to load custom images for use by cImageFigure/cIconFigure
and in display strings (cEnvir::loadImage()). It is also possible now to
programmatically add new directories to the image path
(cEnvir::appendToImagePath()).
- Support for measuring the text has been added to cTextFigure and cLabelFigure
(getBounds() method). Note that getBounds() assumes zoom level 1.0.
- In cObject and subclasses, info() has been renamed to str(). The old method
still exists and delegates to the new one. The detailedInfo() method has been
deprecated due to lack of usefulness.
- In cModule, the arrived() method has been made public API. arrived() is
invoked as part of the send() protocol, and its default version inserts the
message into the FES after some bookkeeping. Overriding arrived() allows one
to perform custom processing at the destination module of a send() call
immediately, still within the send() call.
- Several things have been made inspectable at runtime (e.g. from Qtenv):
simulation results being collected (i.e. result filter/recorder objects
added via @statistic); per-signal listeners lists; values of XML module
parameters and cXMLElement trees.
- Unit conversion now knows about C (coulomb) and related units As, mAs, Ah, mAh.
Qtenv:
- Qtenv has reached maturity and it is now the default GUI for simulations.
- You can use your own Qt bundle by setting the QT_PATH variable in
configure.user before running ./configure. (This may be needed if your Linux
distribution comes with an older version.)
- Added support for smooth custom animations. This means that simulation time is
interpolated between events, and the animation can be stopped between events.
In the event number display, the event number is prefixed with either 'last:'
or 'next:' to make it unambiguous. A new 'Animation Parameters' window has
been added where one can view the current animation speed, framerate, and
other metrics.
- One-stepping now stops right before events so pressing F4 will execute the
next event instantly. For consistency, after initialization, the simulation
time will be set to that of the first event (not always to 0s).
- The simulation time display now has digit grouping and units turned on by
default for better readability. Settings can be changed in the context menu.
- Two-way connections are now drawn as two half-length lines so that they
don't cover one another.
- Module layouts are now shared among all graphical inspectors of the same
module. Layout seeds are now persistent between runs.
- The Configuration/Run selection dialog now accepts run filters from the
command line and will display the matching runs on the top of the list.
Tkenv:
- While Qtenv is now the default runtime GUI, simulations can still be
launched under Tkenv by adding "-u Tkenv" to the command line. Tkenv is
being maintained, but it is not actively developed any more. This means
that most new features, including the ones added in this OMNeT++ release
(smooth custom animations, self-refreshing figures, etc) will not be
available under Tkenv.
Envir:
- Run filtering: The -r option of simulations now also accepts a run filter
expression as an alternative to a list of run numbers and run number ranges.
This makes it possible to use the values of iteration variables for filtering,
instead of the artificial and more-or-less meaningless run number. The new
-q option (see below) can be used to query the list of matching runs.
Example: ./aloha -c PureAlohaExperiment -r '$numHosts>5 and $numHosts<10' -q
runs
- To query the list of matching runs, the new -q <what> option can be used
together with -c <config> and -r <runfilter>. The argument to -q can be
any of: "numruns", "runnumbers", "runs", "rundetails", "runconfig",
"sectioninheritance".
- The nesting order of iterations has been made configurable, and the default
has changed: the repeat counter has been switched from being the innermost
loop to being the outermost one. This is more practical, as it allows one
to get early results for all data points, then refine the picture as more
runs are being completed. The nesting order (also among iteration variables)
can be specified using the new iteration-nesting-order configuration
option.
- Bugfix: the constraint option did not take effect when specified on the
command line (--constraint=...)
- The -s (silent, i.e. non-verbose) option has been added, partly to facilitate
machine processing of -q output.
- Default result file naming scheme been changed to be more practical. The
traditional naming scheme contained the run number, which has now been
replaced by the values of the iteration variables and the repetition
counter. Example: old: Aloha-16.sca, new: Aloha-numHosts=10,mean=0.9-#3.sca.
Illegal and inconvenient characters are encoded in an urlencode-like manner.
This naming scheme applies to cmdenv output files, eventlog files and
snapshot files as well.
- Experimental support for SQLite as result file format. SQLite result files
can be browsed using existing GUI tools (SQLite Browser, SQLite Studio),
can be queried using SQL, and can be accessed and manipulated from all
major programming languages including Python and R. These benefits are
in exchange for slight performance penalty. SQLite result files contain
the same information as OMNeT++ native result files, they can co-exist,
and OMNeT++ tools and the IDE understand both. To switch to SQLite as
default result file format, compile OMNeT++ with PREFER_SQLITE_RESULT_FILES=yes
set in configure.user. To use SQLite only for specific simulations,
add the following lines to their omnetpp.ini files:
outputvectormanager-class="omnetpp::envir::SqliteOutputVectorManager"
outputscalarmanager-class="omnetpp::envir::SqliteOutputScalarManager"
Cmdenv:
- When performing multiple runs, Cmdenv now stops after the first run that
stops with an error. This behavior can be controlled with the new
cmdenv-stop-batch-on-error=<bool> option.
- When performing multiple runs, Cmdenv now prints run statistics at the end.
Example output: "Run statistics: total 42, successful 30, errors 1, skipped 11"
- The cmdenv-output-file option can now be specified per run, and now has a
default file name that follows the naming scheme of result files (but with
the .out extension). Since saving the output can no longer be
disabled by omitting the cmdenv-output-file setting, new option
cmdenv-redirect-output=<bool> has been added for that purpose.
Tools:
- scavetool: The command-line interface (options and help) has been redesigned
for usability.
- scavetool: The tool now supports querying the contents of result files
in a user-friendly way, via the new "query" subcommand. This subcommand
has also been made the default operation mode. For example, a simple
"scavetool *.vec *.sca" command reports the number of runs, vectors and
scalars found in the specified files.
- scavetool: CSV and other tabular export has been improved: run attributes
(iteration variables, etc) are now added to the output as columns.
Note that scavetool currently cannot export to SQLite.
- opp_featuretool: Symbols for enabled features (e.g. WITH_IPv4 for the IPv4
feature in INET) are now placed into a generated header file, instead of being
passed to the compiler via -D options. The name of header file can be
specified in the feature definition file (.oppfeatures).
- opp_test: export "run" script and "retest" scripts under work/ for each test,
to facilitate running tests manually. Minor bug fixes.
IDE:
- The IDE is now based on Eclipse 4.6 Neon and CDT 9.0 (Java 1.8 required).
IDE/C++ Build:
- The "Collecting includes..." phase of project build (that could take quite
a significant amount of time, and was often seen as a pain point) has been
eliminated. The key was to switch from IDE-generated dependencies to
compiler-generated dependencies (see corresponding opp_makemake change)
that made include analysis in the IDE redundant.
- The "Export build tester makefile" button has been removed from the
Project Features property page. The INET Framework project now has an
opp_featuretool-based shell script for the same purpose (tests/featuretest)
that can be easily adapted to other projects as well.
- Improvements in the Makemake Options dialog that opens from the Makemake
project property page. For example, an "Include directories" listbox has
been added to the Compile tab page, and less frequently used options
on the same page have been moved under the More>>> link.
IDE/Simulation Launching:
- In the Run/Debug Configurations dialog, the "OMNeT++ Simulation" form page
has been revised for usability and to better support simulation campaigns.
The launcher (code that schedules and actually runs the simulations and
arranges feedback in the Progress view and the Console) has also been
improved. Details follow.
- The "Runs" form field now accepts a run filter expression that can refer
to iteration variables. (This form field corresponds to the -r option of
simulations.)
- The form page now allows specifying time limits for the simulation
("Simulation time limit", "CPU time limit" fields)
IDE/Inifile Editor:
IDE/Analysis Tool:
- Initial support for SQLite result files. From the end user perspective,
they should work exactly as OMNeT++ result files.
- CSV and other tabular export has been improved in the same way as in
scavetool (as they use the same export engine).
Build:
- The Windows version now targets 64-bit Windows, using MinGW-w64. Both the
GCC and Clang compilers are included, as well as all necessary libraries
(Qt5, OSG, etc.) Support for 32-bit Windows has been dropped.
- aloha: The updated example highlights the use of the new smooth animation
API. The server and all hosts now have fixed positions (still random but
deterministic, and not using auto-layouting), so that their individual
propagation delays can be computed. Each transmitted packet is visualized
with a ring and many concentric circles, illustrating the propagation of the
electromagnetic wave. The visualization is faithful, e.g. multiple signals
visually overlapping at a receiver actually means a collision. Animation
speed is controlled by each node, taking three parameters for different
states (idle, transmission edge, midtransmission) into account.
- osg-earth: Made the mobile nodes in the 'Boston streets' configuration more
easily noticeable by increasing their sizes, and adding a color parameter.
Movement trails have been raised off the ground a bit to avoid Z-fighting
glitches.
- resultfiles: Result files were renamed to reflect the new default naming
scheme (i.e. configname-itervars-#repetition).
- Note: The systemc-embedding, sockets and cqn/parsim examples are NOT working
currently in the Qtenv runtime environment. If you want to run those examples
please run them in either Tkenv or Cmdenv ('-u Tkenv' or '-u Cmdenv').
This Preview release was only circulated at the OMNeT++ Summit in Brno,
Czech Republic on September 15-16, to get immediate feedback from the
participants.
We have also taken the opportunity of the major release to improve several
corners of the OMNeT++ API, and also to get rid of deprecated functionality.
For porting models from OMNeT++ 4.x, see doc/API-changes.txt which lists all
changes, with hints on how to update the model code.
Documentation:
- Improved the contents and the HTML rendering of the Simulation Manual.
Core:
Tkenv:
- Fixed tooltip-related problems: large tooltips could not appear (e.g. the
help for log prefix in the Preferences dialog); submodule tooltips were
missing from the canvas
Qtenv:
- Added help to the Log Prefix field in the Preferences dialog and filter
fields in the Find Objects dialog
- Fix: Earth scenes did not display in the osg-intro sample simulation (blank
viewer window)
Utils:
- opp_featuretool refinements
Additionally, several bug were fixed in the IDE, Tkenv and Qtenv.
OMNeT++ 5.0 rc1 (March 2016)
----------------------------
Build:
Core:
- Refined @figure syntax, the way figures can be defined in NED files:
- transform= now accepts "((a b) (c d) (t1 t2))" and matrix(a,b,c,d,t1,t2)
syntaxes as well
- in transform=, scale() now accepts center as well
- in transform=, skew() now expects coefficient instead of angle
- arc, rectangle, image, etc to support bounds=x,t,width,height
as an alternative to the pos=,size=,anchor= triplet
- In cSimulation, moved both updating the event number and simulation time
into executeEvent(). They were updated inconsistently, plus executeEvent()
is a better place for that than getNextEvent(), considering cScheduler's
putBackEvent().
Tkenv:
- Added a large simulation time and event number display to the toolbar that
display the *current* simulation time (or the time of the last event), as
opposed to the time of the next event displayed previously. The status bar
below the toolbar displays information about the *next* event, together with
the time delta from the current simulation time. Information on the currently
set up simulation, along with message statistics, have been moved to the
bottom status bar of the main window.
Qtenv:
- Added a large simulation time and event number display to the toolbar. (This
is the same GUI change as in Tkenv, see above.)
Cmdenv:
Examples:
Utils:
The highlights of this release are the experimental version of Qtenv (which is
a Qt-based runtime environment that will eventually replace Tkenv), support
for 3D graphics using OpenSceneGraph, and the addition of the much-requested
opp_featuretool utility. The full list follows:
Core:
- Use of the omnetpp namespace was made permanent. The recommended way of
porting models is to add the "using namespace omnetpp;" like to header
files. To compile models without change, add -DAUTOIMPORT_OMNETPP_NAMESPACE
to the compiler command line.
- RNG-to-module mapping made more flexible: the **.rng-<N> config option now
allows expressions, including those containing index, parentIndex, and
ancestorIndex(level). This change allows things like assigning a separate
RNG to each element of a module vector.
Details:
- Added missing * and / operators for integral types. This causes
integer multiplications/divisions to be computed with integer arithmetic
instead of floating point, resulting in better accuracy.
- Added overflow checking for integer multiplication and negation
- Use int64 arithmetic and overflow checking when assigning from integer types
- Added isZero()
- Replaced "int exponent" with "SimTimeUnit unit" in the two-argument
constructor (value + unit) and several other methods, with the aim
of making the API more user-friendly (and model code easier to read).
Models that call affected methods with integers will need to be
updated.
- Moved math functions like fabs(SimTime) into the omnetpp namespace
- Added div(SimTime, SimTime); also refined related fmod()'s documentation
- NOTE: The above descriptions have been edited for brevity. More information
is available in the ChangeLog files (e.g. include/omnetpp/ChangeLog and
src/sim/ChangeLog), and in doc/API-changes.txt.
Qtenv:
Examples:
Tools:
Build:
- Because of the new Qtenv runtime environment, OMNeT++ now has several additional
dependencies: Qt4 is mandatory, while OpenSceneGraph and osgEarth is optional.
Qtenv can be fully disabled by commenting out the QT_VERSION= variable in the
configure.user file and then re-running ./configure. Building Qtenv without
the OpenSceneGraph libraries will disable 3D visualization support in Qtenv.
- The bundled toolchain on Windows has been updated to use MinGW-w64 (32-bit)
containing both the 'gcc' and 'clang' compilers. The bundle contains all the
dependencies needed to build OMNeT++ (including Tcl/Tk, Qt4, OpenSceneGraph,
osgEarth etc.)
- Because of the large size of the extra dependencies (Qt, OpenSceneGraph), the
tools directory is now distributed as a highly compressed archive file inside
the Windows installation bundle. It is extracted to its final location when
mingwenv.cmd is first started.
- On systems that have both the 'gcc' and 'clang' compilers installed, OMNeT++
will pick 'clang' by default. This behavior can be changed by the PREFER_CLANG
variable in the configure.user file.
Core:
futureeventset-class=<classname>
configuration option.
- Further refinement of the new canvas API (cCanvas and cFigure + subclasses)
- The "simulation" and "ev" macros have been removed, to reduce pollution
of the global namespace. You can use the newly introduced getSimulation()
and getEnvir() functions instead.
- There have been several other, smaller changes and improvements in many
classes, e.g. cException, cStatistic, cDensityEstBase, cObjectFactory, etc.
- Most methods, typedefs and other items deprecated in previous versions have
been removed.
NED:
- The message compiler no longer appends "_var" to the names of data members
in generated classes. In cases where this change breaks existing code
(classes with @customize(true) or with subclasses), you can emulate the
old behavior by adding the following to the message definition:
@fieldNameSuffix("_var");
Tkenv:
- Added the "Hide namespaces" option in the Preferences dialog that turns off
the display of the namespace part of C++ class names when they appear in
the GUI.
General:
- The include/ folder was restructured: only the public header <omnetpp.h> was
left in it, all other include files were moved into an omnetpp/ subfolder
under include/.
- The source tree (src/) has gone through several modernizing and cleanup steps:
- Per-folder nested namespaces have been introduced, e.g. Tkenv code is now
in the omnetpp::tkenv namespace.
- Modernizing: use the 'nullptr' and 'override' keywords; use C++ names of C
headers (e.g. <cstdio> instead of <stdio.h>).
- Code style: renamed many identifiers (local variables, arguments, private
data members, etc.) to have a consistent, camelcase naming); codebase
reformatted to have a consistent indentation style.
Contrib:
Core:
- Added the Canvas API, a figure-based 2D drawing API. The Canvas API allows
augmenting simulations with graphical elements. Item types include various
shapes, text and image, including an SVG-like "path" item (a generalized
polygon/polyline, with arcs and Bezier curves). Transformations (scaling,
rotation, skewing) are supported, as well as transparency.
- New logging API. It features six log levels (FATAL, ERROR, WARN, INFO,
DETAIL, DEBUG, TRACE), category support, compile-time and runtime global
and per-module log level thresholds.
Also, much more information is passed with each log line to the user
interface code, allowing one to display a wealth of information in the log
prefix (log level, file/line, event number, simulation time, module name
and type, object name and type, and so on).
Incompatibilities:
- lower-case ev<< is no longer legal, use EV<< instead
- ev.printf() was removed, use the stream API (EV<<) instead
- Added support for simulation lifecycle listeners. Listeners are called back
before and after network setup, on network initialization, before and after
network finalization, and so on. The motivation was to allow more flexibility
when writing initialization and shutdown code for schedulers, result
file managers and other extensions.
- Signal checking has been enabled by default for debug builds. This means
that all signals must be declared with @signal in the NED definition of
the module type that emits them, unless check-signals=false is configured.
- Channel objects made equal to modules in the sense that now they also have
IDs (the getId() method was moved from cModule to cComponent, the common base
class of modules and channels), and they are also registered with cSimulation.
- cTopology improvements:
- added factory methods for links and edges
- added methods to manipulate the graph (e.g. build a graph from scratch)
- Removed int8..int64 and uint8..uint64. Models should use the standard integer
types from <stdint.h> that end in "_t": int8_t, uint8_t, etc.
- New fingerprint computation algorithm. The goal was to make the fingerprint
less sensitive to uninteresting changes (e.g. removal of an inactive module),
and more sensitive to interesting ones (e.g. change in packet lengths).
To get the old fingerprints, define USE_OMNETPP4x_FINGERPRINTS when compiling
OMNeT++.
Cmdenv:
- Log lines can now be prefixed with information such as the module
path; simulation time; event's class and object name; file/line
of the log statement; class, name and pointer of the object
containing the log statement; etc. The format of this prefix can be
changed from ini files.
Tkenv:
- The bgs (background scaling) display string tag has been removed. It was
originally introduced more or less as a default zoom level, but lost its
significance since interactive zoom has been introduced.
- Zooming no longer affects icon sizes on the screen (but you still have
the Increase/Decrease Icon Size, Ctrl+I/Ctrl+O menu items in Tkenv).
IDE:
- Several minor improvements. NED editor support for canvas items is pending.
Example simulations:
IMPORTANT:
To install OMNeT++ on OS X, you must install both the Apple Java
support package (http://support.apple.com/kb/DL1572) and (Oracle) JDK 1.7
or later (from http://java.com).
Tkenv:
Core:
- The testing tool opp_test has been revised and is now an official part
of OMNeT++.
- The Manual now has a new chapter that covers the testing of simulation
models as well as the usage of the opp_test tool.
IDE:
- The IDE is now based on Eclipse 4.4 Luna, and requires JDK 1.7 or later.
Other:
- OMNeT++ is now using C++11 by default (-std=c++11) when models are compiled.
The simulator itself does not use any of the C++11 features, so C++11 support
may
be disabled in configure.user. Update your models to compile properly using the
C++11 standard, as later OMNeT++ versions will require C++11 compliance.
- The bundled MSYS/MinGW toolchain was updated to use MSYS2. MSYS2 resolves
a number of issues:
- No more memory errors during build
- The make command now properly supports parallel build (-j4, -j8 etc.)
- The bundled MSYS2 toolchain now contains the pacman package manager,
so you can install additional packages if you wish
- Change in OMNeT++: The msys/ directory has been moved to tools/win32/, and
the mingw/ directory that contains the compiler has been moved to
tools/win32/mingw32/.
Core:
- Compound modules are now represented with cModule, and the (almost
empty) cCompoundModule class has been removed. This change was made
to allow simple module classes to be used for compound modules.
Tkenv:
- The Tkenv GUI has been redesigned for single-window mode to improve
usability and user experience. Tkenv has also received a new, modern look
and feel, due to the use of the Ttk widgets and a custom Ttk theme.
Details:
- single-window mode, with object navigator + 3 built-in inspectors
that interact in a meaningful way (new inspector windows can still
be opened)
- keep inpector windows on top of the main window at all times
- use Ttk widgets everywhere, with custom theme - this makes a huge
difference in looks on all platforms but esp. on OS X
- BLT no longer needed (we use Ttk instead)
- inspectors are no longer tied to a single object; visited objects
are remembered as navigable history (back/forward)
- module graphics now remembers zoom level and settings per NED type
- for each log line, the context module is now stored, and is shown
as a line prefix where it makes sense (differs from event's module)
- Tkenv now stores message sendings and also a clone of corresponding
message objects (cMessage), and can show them in the log window
- message printer classes can be contributed to customize the
messages view of log windows
- more concise status area that shows more information at the same time
- part of the status area can be turned off to free up vertical space
- timeline drawing now adapts to font size
- on-demand scrollbars (i.e. they are hidden when not needed)
- main menu cleanup (reorganized, removed obsolete items)
- dialogs where it makes sense now remember size and location
- additional hotkeys: Ctrl+Plus/Minus for Zoom, Ctrl+F5 Run Until,
Ctrl+Q Quit, etc.
- OS X: use Command key for hotkeys instead of Ctrl
- countless other, smaller improvements
Other:
Sim:
- Support for optional signal checking. When signal checking is turned on,
signals emitted by modules/channels must be declared with a @signal property
in the module's or channel's NED description; undeclared signals will result
in a runtime error. Signal declarations are of the form
@signal[<signalName>](type=<dataType>).
@signal[receivedPk](type=cPacket?);
- Added cNEDValue::parseQuantity()
NED:
- More freedom in NED property syntax: (1) Hyphens, dots and colons are now
allowed in property names and indices; and (2) values no longer need
to be enclosed in quotes if they contain parens, provided that parens are
balanced.
Tkenv:
- Fixes and workarounds for various issues on Mac OS X (poor animation speed,
missing icons on OS X Mavericks, hang on the F5 key, etc.)
IDE:
- Support for project-specific images: icons from the "images/" folder of the
project and its dependencies are automatically used by the NED editor, and
added to the Tkenv image path when the simulation is launched. (The folder
name is currently hardcoded; it will become configurable in future versions.)
- Sequence Chart: Fixed bug that caused including the same reuses multiple times.
Fixed error handling when the error occurs in paint during startup.
- The source now compiles without any warning with both gcc and clang, using
the "-std=c++11 -Wall" flags (clang is the default compiler on OS X since
version 10.9 Mavericks).
- IDE: fixed the launcher not to throw error if the toolchain is clang.
- Updated the source to compile with both Bison 2.3 and 3.0
- The latter function is also available via the Help > Install Simulation
Models... menu item. The menu item brings up a dialog with the list of
simulation models available for automated installation, and lets the user
choose. Currently only the INET Framework is listed there, but it is
planned to add further models.
- When the IDE is started for the first time, it now displays some helpful
introductory pages in the editor area: "Getting Started" (practical
advice for getting past the first 10 minutes spent in the IDE);
"At a Glance" (explains the common file types like NED, msg and ini, and
their purposes); "OMNeT++ Samples" (describes each example simulation in
two sentences, then provides links for opening the project, viewing the
README, launching the simulation, etc.) These pages are also available
from the Help system (except the last one, which has a dedicated menu item
under the Help menu.)
- IDE launcher script: fixed #670 (vmargs conflict between omnetpp.ini and
the launcher script). This bug could cause IDE crashes by PermGenSpace
exhaustion.
- Analysis Tool, Output Vector View: show "Go to" actions in the context
menu (instead of the view's pulldown menu)
- Analysis Tool: fixed #389 (Useless items in the Statistic Name filter):
The filter hints of combos is now computed from the result items filtered
by the other 2 combos.
- Analysis Tool: fixed #388 (add '*.host[*].*' variant to module filter hints)
IDE:
- The bundled GDB has been downgraded to 7.4, due to problems with the one
in the 4.3rc1 version
Tools:
- The configure script now correctly detects the X headers on Mac OS X 10.8.
IDE:
- Analysis tool: added support for computed scalars. Read the updated the
User Guide for further details.
- Added support for opening files from the command line, i.e. use:
$ omnetpp Aloha.ned
- Better error reporting in the Sequence Chart and Event Log views.
- The CDT C++ code analyzer has been turned off as it was reporting
too many false positives.
- The IDE has been switched over to use CDT's DSF debugger instead of
the older CDI.
- The IDE no longer runs the C/C++ Indexer before build (the code now
collects the information for makefile dependency generation by other
means)
NED:
Sim:
- Fixed a bug in Expression where '-2m' was evaluated to '2' (meter was lost)
Tools:
- The simulator now supports Mac OS X 10.8 (you need to install XQuartz; see
the Install Guide)
- Simplified makefile output: Makefiles now output only the filenames to the
console instead of whole commands. This makes the build output less noisy.
If you need the old behavior, use the 'V=1' (verbose on) option on
the make command line.
Tools:
- The build system now creates 64-bit binaries on Mac OS X 10.6 and 10.7
(if your processor supports it). Previously the -m32 flag was added to
the GCC command line to force the creation of 32-bit binaries. (This
was necessary because earlier versions of CDT did not support 64-bit
debugging).
IDE:
- Dropped PowerPC support for the IDE because Mac OS X 10.7 no longer
supports this architecture.
Sim:
Sample simulations:
Ini files:
- Ini files: iterations (${...}) can now refer to other iteration variables,
using the dollar or the dollar-brace syntax ($var or ${var}). This
improvement makes it possible to have loops where the inner iteration range
depends on the outer one. When needed, the default top-down nesting order
of iteration loops is modified (loops are reordered) to ensure that
expressions only refer to more outer loop variables, but not to inner ones.
When this is not possible, an error is generated with the "circular
dependency" message. Variables are substituted textually, and the text
resulting from substitution is NOT evaluated except in the '<from>..<to>
step <step>' syntax, and in the 'constraint=' ini file option. CAUTION:
textual substitution means that variables in arithmetic expressions should
be protected with parentheses. The text substitution model was chosen for
greater flexibility as well as the ability to produce a more consistent
semantics. See src/envir/ChangeLog for more details.
Sim:
- The API for custom NED functions defined via Define_NED_Function() has been
changed. cDynamicExpression::Value (the old value class) has been factored
out to a new cNEDValue class. Data members are no longer public, they can
be manipulated via various methods. NOTE: This change is NOT backwards
compatible: user-supplied NED functions will need to be revised.
Look at src/sim/nedfunctions.cc for code examples.
- Measurement unit support: added "mps" (m/s) and "kmph" (km/h) as recognized
units; changed "Kbps" to the more standard "kbps"; changed byte multiples
notation to use the now-standard IEC binary prefixes: KB -> KiB,
MB -> MiB, GB -> GiB, TB -> TiB. The latter changes affect backwards
compatibility, i.e. you may need to update existing models.
Tools:
@statistic[dropRate](source="count(packetDropped)/count(packetSent)");
Documentation:
- Several chapters in the User Manual have been updated; especially, the
Message Definitions section was turned into a separate chapter, and
was completely revised.
IDE:
- Added Eclipse Marketplace to the Help menu. You can now install
additional features from the market.
- Before running the simulations, the IDE will show the command line in
the console view to help you execute the same simulation from the
command line.
- Ctrl-Tab now works on freshly opened NED files even if you do not explicitly
select a simple module. In that case, the IDE opens the .h and .cc files
associated with the first simple module in the NED file.
- Bug fixes on: IDE makefile generator; the Project Features feature;
the Inifile Editor (hover info, content assist, etc); the NED editor
(display string proposals for connections and channels, etc.); Organize
Imports feature; NED documentation generator; Simulation Launcher (e.g.
launching folders with simulations in them works again);
- SVN support removed from the IDE. It had very few users, and can be
installed from the Market if needed.
NED:
- Added the xml() NED function, which accepts a string argument and parses
it as XML. Its most notable use is eliminating "empty.xml" files from INET:
one can use xml("<root/>") in NED files instead.
The effect is that the NullMobility NED type will be used for the mobility
submodule if the type name is not specified otherwise, e.g. in the config-
uration with something like
**.mobility.type-name = "ConstSpeedMobility"
- Added the firstAvailable() NED function, which is helpful with the Project
Features feature (see below). It accepts any number of strings (see new
varargs support for NED functions), interprets them as NED type names
(either short names or fully qualified names), and returns the first one
that exists and is also "available" (its C++ implementation class exists).
Example usage:
It chooses the TCP_lwIP, TCP_NSC or TCP module type for the tcp submodule,
in this order, unless the type is explicitly defined to be something else
in the configuration.
- Parametric submodule type can now also be specified in NED files, using
patterns that end in the new "typename" keyword. An example:
network Net {
parameters:
host[*].tcp.typename = "TCP_lwIP";
...
}
Ini files:
Sim:
IDE:
- Support for excluding (disabling) NED packages. This feature is needed for
the Project Features feature. Exclusions can be edited on the NED Source
Folders project property page, and are saved into the project's .nedfolders
file.
IDE/Animation Player:
- Implemented lazy loading of the eventlog file: the tool can now animate
large eventlog files with acceptable performance.
- Heavy bugfixing. Note that the tool is still being actively developed, and
it is generally not yet ready for everyday use.
IDE/Inifile Editor:
- Usability: the editor now comes up with the page (text or form) that was
used last time, and not always with the form editor. (When you flip the
editor to the other page, the page type is stored in the preferences.
When an editor is opened, the setting is read from the preferences and
the corresponding page is activated.)
- Improved text hover (F2) and hyperlink (Ctrl+click) support: the editor
can now show information and go to the definition of modules that occur
in the inifile key. For example, for a **.host[*].tcp.sackSupport = true
line, the user can hover over (or Ctrl+click) the host[*] part, and the
editor will show relevant information and go to the definition of the
host[] submodule vector in the NED network description.
- Markers on included inifiles are now removed when the main inifile is
closed. (Fix for #176)
- Added the Copy action to the Module Parameters view context menu: you can
now select the key for an unassigned parameter in the view, and copy/paste
it into the editor area.
IDE/Wizards:
- New Tictoc Example and New Source-Sink Example wizards: fix: the root
Makefile executed opp_makemake in the src/ folder at each build,
overwriting the IDE-generated Makefile.
- New OMNeT++ Project wizard template: now it is possible to set "custom make"
for a folder: specify <foldername>:CUSTOM in the makemakeOptions= template
variable in template.properties. Use "." to name the project root folder.
Example: makemakeOptions = .: CUSTOM, src: --deep -meta:recurse...
IDE/Graphical Editor:
- Switched back double-click behavior to Open NED Type action. The Properties
dialog can now opened with Ctrl+Enter (Alt+Enter was unavailable.)
- Simulations now record the termination message and result code into the
eventlog file
- Note: eventlog file format has changed (in order to better serve the
Animation Tool) -- .elog files recorded with any prior version of OMNeT++
have to be re-recorded.
Many bug fixes, mostly in the IDE; you can see the detailed list at:
http://tinyurl.com/omnetpp42b2-fixes
Partial list of changes since 4.1 (see ChangeLog files in individual folders
for a more complete list):
Simulation runtime:
[Config Foobar]
extends = Foo, Bar
When the runtime looks for a config option or param assignment, sections
are examined in a "fallback order" until the first match is found. In the
above example the order would be: Foobar, Foo, Bar, General.
OMNeT++ uses C3 linearization to compute the section fallback order,
see e.g. http://en.wikipedia.org/wiki/C3_linearization
- Ini files: better parsing for iteration variables, e.g. the value in
${x=uniform(1,2)} is now parsed as one item, not as "uniform(1" and "2)".
Nested parens/brackets/braces and string literals are recognized;
escaping commas and close-braces is now possible using backslash.
network Inet {
parameters:
host[*].tcp.nagleEnabled = true;
...
}
- Resolved spurious errors: 'Class "..." not found -- perhaps its code
was not linked in, or the class wasn't registered with Register_Class()'
Added a check to ensure that the debug and the release versions of
the simulation library are not loaded at the same time. This problem
occurred when a model was built as 'release' and the debug version of
'opp_run' was used to start it. As a result, the simulation seemingly
started but complained about missing classes.
- Fix: Some classes were thrown out by the linker if OMNeT++ was statically
built, and the simulation was complaining at runtime about the missing
cCompoundModule class.
IDE/Animation Player:
IDE/C++ Development:
- Added a new "Clean Local" item to the project's context menu that does
not clean referenced projects. This resolves the problem that CDT's
"Clean Project" command also cleans the referenced projects, e.g. if
you have a Foo project that depends on INET, cleaning Foo also cleans
INET which takes a long time to recompile. Now you can use the
"Clean Local" command to clean Foo only.
- Added new "OMNeT++ Code Formatter" profile. This coding convention follows
the rules used in the OMNeT++ kernel and the INET Framework. (No tabs, etc.)
- Added MachO64 binary parsers and error parsers. This makes it possible to
debug a 64-bit executable on Mac OS X 10.6
- Linux only: Added support for profiling with Valgrind. To activate this
feature, select "Profile as... / OMNeT++ Simulation" from the Project
Explorer context menu. This feature requires Valgrind to be installed
on your system. (Note: the main IDE toolbar does not show a Profile button
next to the Run and Debug buttons at this time, but profiling is still
available via the Project Explorer context menu.)
- The Makemake page in Project Properties can now fix the "Source Folders
differ across configurations" problem in the project setup, which usually
occurs when you add a build configuration to an existing project later.
The dialog now displays a "Fix it" link.
IDE/Graphical Editor:
- Several performance optimizations for the NED Editor. It can open much larger
files than before. NED validation is done now in a background thread and
does not block the UI.
- Select 'NED Type Selection' dialog now works correctly on first open. It
shows the defining projects for the types.
- Enhanced drag and drop capabilities in NED Graphical Editor. You can
drop NED types into a compound module either to create submodules
(if you drop it into the submodule area), or to turn it into
an inner type (if you drop on the title of the compound module).
- The Graphical Editor now displays the file's package name at the top.
- The resize/move feedback figures have been changed from a simple outline
to translucent blue.
- Enhanced editing of type fields in the 'Property View'. The editor correctly
enumerates the possible choices and adds an import statement if necessary.
- 'Open Type' and 'Open Supertype' have been reassigned to the F3 function key.
Double-click now opens the 'Properties' dialog.
- The IDE now uses the use native (C++) layouter code for placing unpinned
submodules, which means better performance and consistency with the
simulation runtime (Tkenv).
IDE/Inifile Editor:
IDE/Sequence Chart:
- Added 'Go to Simulation Time' and 'Go to Event Number' in the context menu.
- 'Go to Simulation Time' in the 'Event Log' view now supports relative values.
- The Sequence Chart tool now knows about message creations and duplications
(cloning), and as a result, in certain situations it is now able to better
identify relationships between events and draw a better sequence chart.
NOTE: Due to changes in the .elog file format, the tool will only work with
newly recorded files. Existing event logs need to be re-recorded!
IDE/Launcher:
- The command-line for launching the simulation now uses relative paths instead
of absolute ones. This makes the starting command-line easier to understand.
IDE/Documentation Generator:
- Implemented @include in NED comments. Lines in the included file don't have
to start with "//", but otherwise they are processed exactly as NED comment
text.
- Fix: External pages (@externalpage) now appear under the "Selected Topics"
node of the navigation tree in the generated documentation.
- Several minor fixes: recognize the <u> (underline) HTML tag; sanitize the
file names for @page; added/refined test cases
Tkenv:
- Fix (bug #248): compute coordinates (and sizes) in double and not int;
necessary if background scaling (bgs display string tag) is set up.
- The generic UI font and the font used in graphics are now configurable
in the Simulation Options dialog.
- The default font for log text is now proportional (same as the generic UI
font), for better readability and space efficiency. It can be customized
(switched back to a monospace font, etc) in the Simulation Options dialog.
- Tcl errors are now logged into .tkenvlog instead of dumping them on stdout.
Misc:
- Added -g option to 'scavetool scalar' command. You can specify how the
scalars are grouped into columns/variables.
- The build system can now build large projects on windows. The 32K command-line
limitation has been resolved.
Several bugs have been fixed; you can see the detailed list at:
http://tinyurl.com/omnetpp42b1-fixes
- Simulation error messages now contain the event number and the simulation
time
- Tkenv: contents of simulation error dialogs are now inserted into the
main window as well, for reference and easier copy/paste
Envir:
IDE:
- Added support for the `m` tag on connections allowing to set the preferred
directions of a connection between a submodule and its compound module.
Misc:
Partial list of changes since 4.1b4 (see ChangeLog files in individual folders
for a more complete list):
Simulation kernel:
NED:
- New NED function: expand(). It substitutes ${} config variables into a string.
Example usage in a NED parameter:
string fileName = default(expand("${resultdir}/${configname}-$
{runnumber}.txt"));
MSG:
- Fix: A "using namespace" line inside a cplusplus {{...}} block confused the
parser.
Tkenv:
- Implemented minimum icon size, resize window on layout and auto-adjust zoom
options. New controls in the Simulation Options dialog:
- "[] Resize window to fit network with current zoom level first"
- "[] Adjust zoom so that network fills window"
- "Minimum icon size when zoomed out (pixels)"
- Added hotkeys for zoom in/out: Ctrl+N and Ctrl+M. Ctrl+N was already
used by "Toggle module name", it was reassigned to Ctrl+D.
IDE:
NED:
- Inner types can now refer to the parameters of their enclosing type.
- The @signal property can now be used to declare signals, for example
those that can be used as source for @statistic. An example:
@signal[pkSent](type=cPacket).
- Introduced optional statistic recording modes: now you can add optional
items to the record= key of the @statistic property, by appending "?"
to them. For example: @statistic[eed](record=vector?,histogram?,mean).
By default, only non-optional items are active; optional ones can be
turned on with **.result-recording-modes = all (see below).
Envir:
- The result-recording-mode= configuration option was renamed to
result-recording-modes=.
- Result file change: integer histograms are now marked with "attr type int"
instead of "attr isDiscrete 1" in output scalar files.
IDE:
- NED editor: added banner comment for module/channel types created
graphically
- Ini file editor usability: more specific names for table columns in form
editor; split "Output Files" page into "Result Recording" and "Event Log"
pages in form editor
- Sequence Chart: more usable context menu; display of method calls and
message reuse arrows turned off by default
Tooling:
- Updated MinGW and MSYS tools in the Windows distribution. The new MSYS
now should work on Win64 (although the compiler still produces 32bit code).
The GCC compiler is updated to a pre-release version of MinGW 4.5 (this
solves the debugging issues on Windows platform).
Build system:
- Extra long command lines are supported now for the MinGW linker. (Uses a
temporary file to pass args to the linker if the command line is >32K.)
Tkenv:
- It is now possible to turn eventlog recording on/off interactively, not only
via omnetpp.ini options; see "Toggle eventlog recording" toolbar button.
Cmdenv:
- Printing of module initialization messages is now suppressed in express mode
- New statistics recording framework using signals. The module's C++ code
emits statistics as signals, and collector objects are attached externally,
by the simulation framework. Statistics are declared in NED files using
@statistic properties, and actual recording (whether to record values as
output vector, or as histogram, or the average/minimum/maximum etc value
as scalars) can be configured from ini files. The runtime cost of
statistics that are not recorded is minimal, which allows module authors
to emit lots of statistics in the code, and let the end users decide which
statistics they want to record and in what form. Earlier, such functionality
would have required extensive C++ programming in module.
- Added a simTime() NED function that returns the current simulation time.
simTime() makes it possible to create time-dependent distributions, e.g.:
interArrivalTime = exponential(simTime()<10s ? 0.5s : 2s)
Envir:
- New configuration option: warmup-period. This is associated with the new
statistics recording framework: when specified, values produced during
the first X seconds of the simulation will not be calculated in the
results. For existing statistics that are calculated manually inside
modules and recorded e.g. as recordScalar() in finish(), the module C++
code of course needs to be modified to respect the warmup period; the
length of the warmup period can be obtained from C++ code as
simulation.getWarmupPeriod().
NED:
- New properties associated with the statistics recording framework (above):
@signal defines a signal emitted by the module, and @statistic defines
a statistic that is available for recording. (A statistic can use a signal
"as is", or can be some function of it; for example, a signal can be
a packet, and a corresponding statistic can be the length of the packet.)
IDE:
- The IDE is now based on Eclipse 3.5.2 and CDT 6.0.2.
- Content assist for icons (with preview!), colors and other display string
tags in the NED source editor. Content assist is now also supported
for channel parameters, and @signal and @statistic properties.
- Statistic and signal declarations are now shown in the Module Hierarchy view.
- New FreeMarker template editor for editing of ".ftl" files, used for the new
templated wizards feature (see 4.1b1).
Tooling:
- The git package has been updated to version 1.6.5.
Documentation:
- Extensive documentation review and proofreading.
Simulation kernel:
- Source files are now compatible with GCC 4.4 version.
IDE:
- Result charts and sequence diagrams can now be exported in SVG format. This
allows the creation of publication quality charts and diagrams.
Tooling:
- The bundled MinGW GCC compiler and MSYS binaries have been updated
to their latest version (on Windows).
Documentation:
- A very detailed Installation Guide has been created. It provides step-by-step
installation instructions for the most popular operating systems.
- An IDE Developers Guide has been created that describes how to enhance the
OMNeT++ IDE and extend it with new functionality.
Simulation kernel:
- Added setCapacity()/getCapacity() to cArray. setCapacity() can be used
to trim back the internally allocated array after a large number of
items have been removed from it.
- Dynamic module creation: modules now pick up parameter values from the
parent compound module's submodules section in the NED file. This will be
useful with the @dynamic() submodule property (see later beta releases).
- Fix: parse() and some other cPar methods did not cause handleParameter-
Changed() to be called on the owner module
NED:
- Deep parameter assignments: it is now possible to assign parameters of
sub-submodules, sub-sub-submodules, etc. from a compound module, using
inifile-like wildcards. For example, **.tcp.mss=1024 may be used in a
network NED file to configure TCPs inside all hosts in the network.
This feature also involves a slight NED DTD change (doc/ned2.dtd).
- Fix: operands of the '%' (integer modulo) NED operator now must be
dimensionless (otherwise the result of truncation depends on the choice
of the measurement unit)
Msg files:
- opp_msgc: fixed namespace support. It is now possible to use types
from other namespaces as base class, field type, or field enum.
The src/nedxml/ChangeLog file contains some examples for this.
- opp_msgc: the message compiler can now be used to generate reflection info
(cClassDescriptor) for existing classes. If you add @existingClass(true)
into a message/class/struct, opp_msgc will not generate code for the class,
only a descriptor object. (Corresponds to -Xnc command-line option.)
Envir:
- When parallel simulation is enabled, host name and process ID will be
included by default in the output file names.
- A related fix: host name and PID are now inserted before default file
extension instead of appending them at the end.
IDE:
- The IDE is now based on Eclipse 3.5.1 and CDT 6.0.1.
IDE features:
- NED editor:
o adaptive palette: items with matching @labels properties and those
already in the compound module are shown at the top
o palette filtering: easily accessible text field to filter palette
contents (case insensitive substring search)
o when creating connections, connection chooser now offers connections
with matching gates, using @labels properties of gates
o new parameter editor dialog for channels and modules
o completion proposals for connection parameters
o visual feedback for multiple and conditional connections
o better validation of NED files in the editor
- The simulation launcher now checks for errors (and warns if any) before
launching simulations
IDE extensibility:
- Support for easy creation of templated wizards that can contribute to
the New OMNeT++ Project, New OMNeT++ Simulation, New Simple Module,
New NED File, etc. dialogs. Such wizards are simple text files inside
the templates/ folders of OMNeT++ projects. Wizards for creating wizards
have also been provided. Templated wizards is one of the killer features
of OMNeT++ 4.1. Read the IDE Customization Guide for further info!
Tkenv:
- Two-way connections are now rendered as a single line (without arrows)
Tooling:
- Source files are now compatible with GCC 4.4 version (fixed missing #includes)
- Updated MinGW GCC compiler to 4.4 (on Windows)
- Updated MSYS binaries (on Windows)
GUI:
An Eclipse-based comprehensive simulation IDE has been introduced to replace
the previous standalone GUI programs gned, scalars and plove. The IDE supports
all stages of a simulation project: developing, building, configuring and
running simulation models, and analyzing results. It also supports
visualizing simulation execution traces as sequence charts, and generating
documentation. We are also bundling version control (cvs, svn, git) Eclipse
plug-ins with the IDE. The IDE is supported on the three major platforms,
Linux, Mac OS X and Windows. Since Eclipse is extremely extensible, we expect
that OMNeT++-based simulation frameworks will contribute their own custom
wizards into the IDE.
Tooling:
On the Windows platform, we have standardized on using the MinGW compiler.
We are bundling a version of MSys and MinGW with the distribution, along
with MinGW versions of several open-source programs and libraries needed
or found useful with OMNeT++, such as gdb, perl, libxml, gmp, graphviz,
Tcl/Tk, svn and git. MinGW was chosen over Cygwin because MinGW builds and
uses libraries in the native Windows (MSVC-compatible) binary format, and
builds programs that execute without a Unix emulation layer. The MSVC
compiler is only supported in the commercial version of OMNeT++.
Build system:
In order to facilitate working with large simulation models like the INET
Framework, the makefile generator opp_makemake has been extended with the
--deep option. With --deep, opp_makemake generates a makefile that takes
care of building a whole source directory tree.
Another big change is out-of-directory builds for both the OMNeT++ libraries
and simulation models: object files and other by-products of the build
process go in a separate directory tree (out/).
Simulation kernel:
Simulation kernel internals have been redesigned with memory efficiency in
mind, to support large-scale simulations better. Techniques include string
pooling (storing freqeuently occurring strings such as module, gate and
parameter names only in one copy), shared parameter value instances,
gate vector descriptors (gate name, type and size are only stored once
for the whole gate vector), and optimal packing of object fields (e.g.
packing several boolean variables into an unsigned int).
Regarding the API, several functions have been given better or more
consistent names, with the most visible change being that getter methods
have been prefixed with the word "get". Migration of simulation models
to 4.0 is assisted by scripts that perform this renaming (and several other
adjustments) in the source code.
cMessage has been split into a base cMessage plus a cPacket class.
The bit length, encapsulated message and error flag fields have been
moved to cPacket.
NED:
The NED language has been revised and significantly extended. An overview
of changes:
The language syntax has been changed to make it more consistent. A migration
tool is provided to convert old NED files to the new syntax.
A Java-like package system has been introduced to make the language scale
to large model frameworks and to prevent name clashes; NED files files are
now read from directory trees listed on the NEDPATH.
Channels have been made first-class citizens. They can have arbitrary
parameters like modules do, and may have custom C++ implementation classes.
Three predefined channel types have been created, ned.IdealChannel,
ned.DelayChannel and ned.DatarateChannel.
Inheritance is now supported for module and channel types. Derived modules
and channels may add new parameters and gates, may set or modify parameter
values and gate vector size, and (in the case of compound modules) may add
new submodules and connections.
Inner types are now supported. This is most useful for making channel
definitions local to the network definition that uses them.
Inout gates and bidirectional gates are now supported. In the C++ code,
inout gates appear as (input,output) gate pairs.
Parameters can now have default values. The default value can be overridden
in the ini file. If the ini file does not assign any value to the parameter,
the default values get used automatically.
Support for arithmetic expressions has become more complete, e.g. string
manipulation is also possible.
Default icons (in general, default display strings) are now supported.
Display strings are represented as metadata annotation (@display property),
which can be modified via inheritance.
Ini files:
Instead of runs, named configuration sections were introduced in the ini
file.
The concept of "runs" have been refined to provide parameter study support;
Ini files now can specify parameter ranges and the runtime is able to explore
them. The notion of experiment, measurement and replication was introduced to
help the general workflow of result analysis.
The new "fingerprint" ini file option allows for quick-and-simple regression
tests. The fingerprint is basically a hash of event times and module IDs
during the simulation, and it can detect if the simulation follows a
different trajectory after a supposedly "harmless" code change.
Result analysis:
The new result analysis tool in the IDE (which replaces plove and scave)
supports the notion of experiments, measurements and replication. The IDE
now stores all operations required to create a diagram or chart in a "recipe"
file. It can recreate the charts and diagrams automatically after re-running
the simulation or the whole experiment.
The vector and scalar file format has changed to support the new features
of the IDE. Vector files are now indexed for efficiency.
Documentation:
- Significant work went into updating the Manual. The following chapters are
either new, or have been rewritten or significantly expanded:
3 The NED Language
7 Building Simulation Programs
8 Configuring Simulations
9 Running Simulations
10 Network Graphics And Animation
11 Analyzing Simulation Results
15 Plug-in Extensions
16 Embedding the Simulation Kernel
17 Appendix: NED Reference
Chapters that need further work are:
4 Simple Modules
6 The Simulation Library
- Revised the User Guide. Text and screenshots have been updated to the
current state of the UI.
IDE:
- added the GIT plugin (now the IDE supports CVS, Subversion and GIT)
- the IDE now generates GPL/LGPL/BSD copyright into newly created files;
license may be declared by adding a @license property in package.ned
- various bugfixes
Simulation kernel:
There were several changes to make it easier to use the simulation kernel
as a C++ library, to embed simulations into programs:
Samples:
- added embedding examples
NED:
- fix: channel types could not refer to local parameters ("this.param" caused
an error)
- refactored the registration of user-defined NED functions: added the
possibility to register a documentation string (which gets printed in the
"opp_run -h nedfunctions" output); cNEDFunction and Define_NED_Function()
now expects the function signature in a C-like syntax.
Message files:
- opp_msgc: improvement related to bug #33. Type *announcement* now can
specify the base class of the declared class: "class B extends A;".
To declare that the class does not have any base class interesting to
opp_msgc, one must declare it as "extends void". See src/nedxml/ChangeLog
for examples and more details.
Tkenv:
- message display strings made consistent with module display strings: the
"o" tag was removed, use "b=width,height,shape,color,borderwidth" instead.
Also, a special color name "kind" has been introduced, which maps
to a color depending on the message kind.
- fixed bug #34: in Fast mode, bubble didn't get displayed for recently
created modules
Cmdenv/Tkenv:
- added -a option: lists all configurations and the number of runs in them
Tools:
- added opp_runall tool
- opp_test: added a %extraargs option (was needed for new test/envir tests)
Packaging:
- the Windows package now contains MinGW-GIT (the "git" command-line tool,
and gitk). Please use the hyphen-less form of commands (e.g. git checkout
instead of git-checkout).
Several bugfixes:
- see http://dev.omnetpp.org/bugs/changelog_page.php
General:
- added the "opp" prefix to library names to prevent name clashes with
other programs: liboppsim.so, liboppenvir.so, libopplayout.so,
liboppcommon.so; oppsim.dll, oppenvir.dll, opplayout.dll, oppcommon.dll,
etc.
IDE:
- fixed the crash caused by static linking of libstdc++.so (bug #7)
- improved stability of CDT integration
- improved diagnostics: when simulation launch fails, Console View displays
the command line, PATH, other environment variables, etc to help track
down the problem.
- several other bugfixes (see bugtracker)
Samples:
- queueinglib changed to build a dynamic library, which is run using opp_run
Tkenv:
- reimplemented filtering, to fix poor performance and weird scrolling of
log windows (bugs #16 and #17). The log is now stored in a memory buffer,
and filtering re-fills the text widget from the buffer.
Cmdenv:
- status updates in express mode are now time-based (every 2s by default),
not event number based
Tools:
- seedtool was renamed opp_lcg32_seedtool, and added a warning in its help
that it is an obsolete tool and probably should not be used.
Several bugfixes:
- see http://dev.omnetpp.org/bugs/changelog_page.php
IDE:
- Makemake configuration made more flexible. Now any directory may contain
a makefile, either generated or custom one. The corresponding property
page was redesigned, and also moved to the OMNeT++ category (was under
the C/C++ Build category). It is now also possible to export a makefile-
creation script to support command-line builds. Note: syntax of the
.oppbuildspec file changed (file written by 4.0b8 will not be understood
by 4.0b7).
- added Parameter Editor dialog as a field editor in the Property View
- moved Cleanup NED Files command from the Navigation menu to the Source menu
- several smaller fixes and improvements
Tkenv:
- implemented module output window filtering: modules can be selected
using a checkbox tree dialog. Bound to Ctrl+H.
- implemented "Run until message", available in the Run Until dialog and
in the context menu of message objects
- event banner text revised, plus now includes message name and class
as well; added "Short event banners" checkbox to options dialog
- fixed popup menu behaviour on Linux (use tk_popup instead of post)
Other:
- opp_makemake: generates separate target for each recursively invoked
makefile. Several smaller fixes and improvements
- beginnings of a regression test suite for opp_makemake: test/makemake.
- until now, Tkenv has been using various form-style inspectors to display
the most important data members of objects. These inspectors have now been
replaced with more comprehensive and consistent treeview-based
inspectors.
- broadcast animation has been implemented. When the feature is turned on,
multiple send() or sendDirect() calls occurring within a handleMessage()
call will be animated together, concurrently. This significantly improves
the animation of wireless simulations. Note: the new animation mode
implies that send/sendDirect calls are no longer animated at the
place of the call as previously, but together at the end of processing
the event (that is, after handleMessage() has already returned) -- that is,
out-of-sequence with writing the log, for example. The broadcast animation
feature can be turned off in the Simulation Options dialog.
Simulation library:
- several methods and classes already marked as DEPRECATED in their
documentations and doc/API-Changes.txt are now marked as such, using
GCC's __attribute__((__deprecated__)) facility, which results in warnings
during compilation of code that uses them. Those pieces of code need to be
changed in order to be compatible with future OMNeT++ versions.
Other:
- makefile improvements, from Laura Marie Feeney and Michael Tuexen.
- the FDDI sample simulation has retired (it used lots of deprecated APIs)
This release contains several GUI enhancements in Tkenv, and several bugfixes.
Tkenv:
- added "Copy to clipboard" and "Save window contents" toolbar icons to all
text windows. (Copy has already been available with Ctrl+C.)
Bugfixes:
- fix: gamma_d() was bogus for the alpha<1 case [reported by Patrick McDonnell]
- fix: worked around a fiber-related Visual C++ problem that caused certain
activity()-based modules crash when the simulation was restarted.
- fix: on some Linux systems, Tkenv used unreadably small font size in some
dialogs
- opp_msgc improvements: don't accept reserved words as identifiers; added
OMNeT++ version check into generated code
- fix: the simulation can now be in a directory whose path name contains spaces
(e.g. "Program Files"); opp_nmakemake also fixed to accept include paths
with spaces.
- many other minor fixes and improvements; see the ChangeLogs of the
corresponding source directories for more details.
The following brief list wraps up the most important new features and
changes since the 3.1 release. Please read on to the sections about the
the prereleases (3.2pre1..4) for more details on these points, and for
a more complete list. Even more details can be found in the doc/API-Changes
file and the ChangeLog files of the individual source directories.
General:
- support for database (MySQL) storage of: model topology, model
configuration, output vectors and scalars and model topology.
Simulation core:
- simplified the signature of simple module constructors; Module_Class_Mem-
bers() is no longer required. Please check below or in doc/API-changes
for backward compatibility information.
- WATCH() revisited: now its variants support STL container classes, and
basically any data type that has operator<<.
- modules can now get notified when a module parameter changes. Just redefine
the new handleParameterChange(const char *parname) method of cModule.
GUI:
- added the TimeBar to Tkenv, and made the "Find/Inspect Objects" dialog
nonmodal (a long-standing wish).
- several GNED refinements, the most visible one being that on opening a NED
file it automatically tries to open all its imports as well (feature can
be turned off).
Simulation kernel:
- cleanup-time garbage collection turned OFF by default. Simple modules
have to deallocate all dynamically objects themselves, that is,
proper destructors have to be added to every simple module class.
Related new omnetpp.ini entries: perform-gc=<yes/no>, print-undisposed=
<yes/no>.
New examples:
- database integration. With the given extensions, one can transparently
redirect output vectors and output scalars into a MySQL database, read
module parameters from a MySQL database (all without modification of
existing models), or build a network from topology stored in a database.
Other:
- NED: enabled parent module gates to get connected with "++".
parentmodgate++ connects the first unconnected gate, but it doesn't
create new ones -- it is an error to exceed sizeof(gate).
Tkenv:
- the "Find/Inspect Objects" dialog became nonmodal, and it can be kept
open while the simulation is running.
- added the "Run until next local event" command to modules' context menu
(which pops up when you right-click an icon)
GNED:
- reorganized and improved connection properties dialog (knows what gates
submodules have, which gates are vectors, only offers output gates as src
gate and input gates as dest gate, etc.)
opp_msgc:
- "const fix": generate both const and non-const getter methods for fields
of class or struct type.
- added the possibility to set a base class field. E.g. kind=5 will
generate the setKind(5) line into the constructor.
- generated C++ header now contains relevant part of the .msg files as
Doxygen comment
opp_nmakemake:
- added options (-s, -t, -d) to enable building Windows DLLs from simple
modules, plus -P option to support opp_msgc's similar option
Simulation kernel:
- implemented reference counting of encapsulated messages. This should
dramatically increase performance of wireless simulations, where lots
of message duplication is done (AirFrames) with most copies discarded
without looking into them (noisy channel or wrong L2 dest address).
There' nominal (<1%) performance penalty for other simulations.
omnetpp.ini:
- one can now use parameters like $MODULE_FULLPATH in the 2nd argument
of xmldoc(), i.e. the paths expression to select part of an XML file
to load. This allows for assigning XML params of several modules with a
single line in omnetpp.ini. Consider the following:
**.xmlConfig=xmldoc("all-in-one.xml","config[@mod=$MODULE_FULLPATH]")
where all-in-one.xml contains <config mod="net.host1.rt">...</config>
elements for every module.
OMNeT++ 3.2pre2
---------------
Simulation kernel:
- modules can now get notified when a module parameter changes. Just redefine
the new handleParameterChange(const char *parname) method of cModule.
Tkenv:
- flush omnetpp.vec every time the simulation is stopped (to enable looking
at it with Plove to decide if simulation needs to be run longer)
- added support for custom items on the context menu (e.g. right-click
on a router, "Inspect Routing Table..." Usage: place a .tcl file into
the plugin path (./plugins by default) that calls the extendContextMenu
Tcl procedure.
- new option: "Autoextend gates using gate++ notation". When this option
is enabled (Options Menu), GNED does not generate "gatesizes" sections,
and automatically uses the extension operator "++" on all gates that
are connected. However, you always can use indices in the property page
of modules to override automatic gate extension.
Thanks to Michael Tuexen, Ignacio Arenas Jimenez and Wei Yang Ng who suggested
several of the above improvements.
OMNeT++ 3.2pre1
----------------
- Plove and Scalars: improved Chart Settings dialog, and default settings
can now be saved. New Plove filters, and fix in the winavg filter.
- Tkenv: added Timeline Status Bar
- Tkenv: fixed the r= display string tag (it displayed a circle half the
specified size)
- Tkenv: cMessage inspector now displays message size in bytes as well (not
just in bits); also, it now displays time *until* arrival time (a delta)
in addition to the absolute arrival time.
- new cMessage member functions: byteLength(), setByteLength(), addByte-
Length(). They just invoke the length(), setLength(), addLength() methods.
- new utility function simtimeToStrShort()
- fixed gcc-4 compilation errors, and removed -fwritable-strings compiler
option
- fixes and improvements on opp_neddoc
- configure script now accepts NO_TCL=1 variable (for emergency use only)
- opp_nmakemake: improved output of recursive build
- Readme.MSVC updated on how to build DLLs from simple modules
Plus a number of smaller fixes, see the ChangeLogs in individual directories.
Documentation update is still TBD.
Real-time/hybrid simulation:
- Real-time simulation has been implemented, and it is demonstrated by the
"Dyna/Real Time" sample simulation.
- In relation to the above: new methods got added to the cScheduler interface.
For Windows:
- Debug info (*.pdb) files have been included in the installer, so one can now
single-step into the simulation kernel and user interface library sources
while debugging.
Simulation library:
- New utility class: cStringTokenizer. It splits strings to "tokens" along
given separator characters (by default spaces).
- Changed the way scheduled events or pending messages are handled when their
destination module gets deleted during runtime. Before, these messages were
deleted by the cSimpleModule destructor, but this made it very long to clean
up large models. Now, messages are not deleted in the destructor, but left
in the FES -- they will be discarded in cSimulation::selectNextModule() when
they're met.
Configuration:
- Ini file runs can be given descriptions, and they will be displayed in the
Tkenv run selection dialog. Just add the description="some text" line
under the [Run x] headings.
- Slight change in the rules of handling included ini files, NED list files
and all filenames mentioned in them. All filenames are now understood as
relative to the location of the file which contains the reference,
rather than relative to the current working directory of the simulation.
This change is not backwards compatible, but has been found not to affect
any of the simulation frameworks already ported to 3.0.
Tkenv:
- Implemented the "t=<string>,<color>" display string tag for connections.
It makes the given string to appear near the connection arrow.
- Tooltips can now be added to submodule icons, connection arrows and messages.
The tooltip text has to be given in the "tt=<tooltip-string>" display
string tag, and will be displayed if the mouse rests over the component for
a while. Tooltips allows more info to be displayed than can be squeezed
into the "t=" display string tag.
- Added support for -r <run-number> command-line option, which has the same
effect as (but takes priority over) the [Tkenv]/default-run ini file entry.
Misc:
- opp_makemake, opp_nmakemake: implemented -X option (ignore subdirectory
during recursive build)
- The place/ icon directory was renamed to misc/ (Please update display
strings containing "i=place/..")
- Dynamic NED loading will cut model build time and simplify your work.
- The new Random Number Architecture features a modern, very long cycle
Random Number Generator (Mersenne Twister) for more realistic simulation
results, and RNG mapping for more flexibility in simulation experiments.
- The new Scalars tool complements Plove, and lets you analyze and plot
scalar data produced by simulations.
- Several Simulation GUI usability enhancements will save you time, and
make your work more efficient.
Changes:
- added new TicToc tutorial
- nedtool: implemented -h option (put output files into current dir, not source
file's dir) [patch from Johnny Lai]
- Windows binary release contains 4 sets of libs now: vc6-debug, vc6-release,
vc7-debug, vc7-release.
- several fixes and improvements
Changes:
- fixed configure script problems in alpha 8
- new random number architecture: support for Mersenne Twister and Akaroa
RNGs; unlimited number of RNGs; RNG mapping (module-local RNG numbers
can be mapped arbitrarily to physical RNGs from omnetpp.ini. Details
in src/envir/ChangeLog and on omnetpp.org.
- Tkenv fixes and usability improvements: (1) allow user interactions during
message animation: animation speed can be changed with the slider, STOP
button can be clicked, inspectors can be closed, etc; (2) improved
"Fast Run until next local event" function: now it always animates events
that occur in the local module; (3) fixed display string handling bugs: in
"t=", commas and equals signs weren't handled properly.
Changes:
- in .msg files, struct fields can have initializers (a constructor gets
generated)
- Tkenv: minor improvements
- configure script refinements
Several improvements and bug fixes since 3.0a6. Detailed list of changes:
IMPORTANT: if you forget the quotes, ONLY THE FIRST DIRECTORY will be
used with the rest ignored, because ";" is the comment mark in omnetpp.ini!
Plove has been completely rewritten under the skin. It is no longer a wrapper
around grep, awk and gnuplot -- it boasts a powerful internal extensible
data-flow engine (for filtering and processing output vectors before plotting),
and a BLT-based plotting window (which allows a multiple plots via tabbed
window, and these plots are a bit easier to customize than gnuplot-based ones
were -- oh yes and they allow arbitrary zooming on the fly). The new Plove
can also do scatter plot. Calculating histograms and cumulative distribution
functions and various other refinements will come soon.
This alpha release introduces a new tool, Scalars for analysing output scalar
(.sca) files. Scalars requires BLT. Another novelty is the new "control info"
field in cMessage which provides a better way to implement communication
between protocol layers than the traditional "interface packet" approach
used in older IPSuite versions. (IPSuite has also been switched over to employ
the control info approach.)
Changing display strings was made more comfortable from simple modules.
Dynamic loading of NED files has been implemented, which means it is possible
to use NED files directly, without nedc and C++ compilation. NED files
containing compound modules and networks can be loaded dynamically.
NED files can be loaded interactively (Tkenv "Load NED file" toolbar icon)
or automatically (via omnetpp.ini, preload-ned-files= entry). (alpha!)
TODO:
The Manual is still to be updated at places. Further items are the
introduction of new RNG architecture based on modern RNGs, and testing
and completion of nedxml/nedtool (which will bring the retirement of nedc).
Improvements:
- message subclassing: generated message classes now accept message kind
in the constructor.
See doc/API-Changes.txt for the list of changes since 2.2, including those
that affect compatibility. ChangeLogs in respective source directories
contain even more details.
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.
- Tkenv GUI has been polished -- both functionality and usability has been
greatly improved. Plove GUI was also redesigned.
- 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
is cException.
* 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 <iostream>, 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.)
- 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
not found.
- cSimulation changes:
* lastModuleIndex() renamed to lastModuleId();
* operator[] deprecated (use module(int) method instead)
* del() renamed to deleteModule(); add() renamed to addModule()
- For further, more internal changes and for more details on the above changes
see include/ChangeLog and src/sim/ChangeLog.
- 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
to doc/nedxml-api.
Manual:
- 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]
Build:
- 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.
- 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.
- Improved configure script. Now we support Tk8.4, and also optional packages
like Akaroa.
- 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.
GNED, Plove:
- 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.
- 2 bugfixes: (1) output scalar file did not get opened sometimes; (2) output
scalar file got removed between runs
Cmdenv:
- 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=
<num-events>, performance-display=yes/no entries. autoflush=yes/no has
also been added. The display-update=, verbose-simulation= entries are now
obsolete.
- The -h command-line switch now lists all networks and modules linked into
the executable.
Tkenv:
- 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.
Sample simulations:
- 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.
OMNeT++ 2.2p1,p2,p3
-------------------
Only exist in source patch form.
It's almost a year since the last, 2.1 release, and that's why this change
list tends to be a bit lengthy. Sorry about that.
For this release I got many more bugfixes, bug reports and suggestions than
for any previous one. Thanks to everybody who helped! Huge credit goes to
Ulrich Kaage in Karlsruhe who built up a server infrastructure (CVS,
bugtracker, Wiki, etc.) and was restless in testing and improving OMNeT++.
Thanks Uli! This is the first release since the CVS went online last year.
This release contains experimental support for the long-demanded feature known
as 'message subclassing'. This means that C++ message classes can be generated
from NED code, replacing the practice of dynamically adding cPar objects to
messages. Data fields added via the subclassing mechanism are inspectable in
Tkenv. The new NED syntax is experimental; the compiler extensions have been
temporarily implemented in Perl. The new Dyna2 sample simulation demonstrates
this feature. See doc/msgsubclassing.txt for more information.
The simulation kernel now has an indexed and hyperlinked on-line API reference,
generated from header file comments. (We're using Doxygen.) At the same time,
the Reference chapter in the manual was deleted.
Distributed simulation can now use the MPI library which is more readily
available nowadays than PVM. (Code contributed by Eric Wu).
The simulation kernel was made const-correct; because of this, older code
may need changes (especially where one didn't use the Module_Class_Members()
macro to define module classes.) There were other changes on the simulation
kernel to make it cleaner.
In NED, an expression may now refer to a submodule parameter with the following
syntax: submod.par or submod[index].par. A limitation is that the index
might not be an expression itself.
The Envir library has been extended with a plugin mechanism: one can now
plug in code that actually handles recording output vectors (e.g. one can
write them to database instead of files, apply filtering before writing
them out, or send them to a simulation controller app) without having
to modify the user interface library, the simulation kernel or existing models.
Similar mechanisms exist for output scalars and snapshots. The new
include/envirext.h header contains the interfaces the plugins have to
conform to: cOutputVectorManager, cOutputScalarManager, cSnapshotManager.
Tkenv's plugin handling was improved: plugins are searched in the directories
in OMNETPP_PLUGIN_PATH (set to ./plugins by default). DLL file names that are
looked for now correctly depend on the platform (*.dll on windows, .so* on
Unix).
For the default output vector mechanism (vec files), number precision was
increased to 9 digits (fprintf format changed).
Size limitations on omnetpp.ini were removed (only max line length=1024 chars
remained).
ChangeLogs are now GNU-style, with the most recent entries at the top.
Exit codes of simulation programs were made more natural: 0 if the simulation
terminated normally, 1 otherwise. Also, SIGTERM and SIGINT signals are now
handled more gracefully: they call finish() before terminating the simulation
(Unix only).
In GNED, regexp find/replace now understands the \1,\2,... notation in replace
strings. Backwards search was implemented in the Find/Replace dialogs of GNED
and Tkenv. Fixed Plove's problems with tabs/spaces in vector files and
slashes/backslashes on Windows, and also GNED's problems with command-line
arguments.
The makefiles now use a new Perl-based dependency generator which works on all
platforms. opp_makemake: added -L option, and removed Makefile.in from the
'depend' target.
There are a number of enhancements mainly on the GUI parts, GNED and Tkenv,
but the simulation API remains fully compatible. Bugs that were reported
since the 2.0b5 release have largely been fixed. All those who cared to
report bugs and suggested features -- thanks!
Tkenv was enhanced quite a bit. Now you can now open module output windows for
all modules (not only for simple modules), and the window will accumulate
ev<< output from that module and all submodules. (This feature is especially
useful for tracing dynamically created modules). Now you can search for text
in all module windows (^F Find, F3/^N Find next). Hotkeys were assigned to the
run commands too (F4 Step, F5 Run, F6 Fast, F7 Express, F8 Stop), and the
behaviour of the "step within module" command (^F4) was refined. I added a
Performance status bar (it displays events/sec, simulated sec/sec,
events/simulated sec readings). Another toolbar shows (among others) the number
of message objects currently in existence -- this feature may help you discover
the most common kind of memory leaks: forgetting to delete messages.
Display string handling was improved: modules in a module vector may now be
positioned individually, and submodule display strings may use the parent
module's parameters, too. See src/tkenv/ChangeLog for details.
The most important addition to GNED is its new, experimental XML support (needs
the TclXML-1.2 package). XML will play a much more significant role in future
releases of OMNeT++, as a universal data exchange format. Many smaller
enhancements: GNED now accepts NED file names as command line arguments;
.gnedrc was introduced; more & better Properties dialogs (Channel, Connection,
Module, etc. Properties); GNED is more careful now when you want to exit the
program; the File menu now has a Save all item. Plus a number of other fixes
to improve the robustness and reliability of the code.
A short section was added to the manual about parallel simulation in general.
Steps toward better ISO compliance: the source was made 'const char *'-correct,
and the TRUE/FALSE #defines were replaced by the true/false C++ keywords.
Also, nearly all '-Wall' gcc warnings were eliminated from the source.
Now it is possible to create DLLs from the libraries on Windows. This wasn't
as easy as I thought, because there are fundamental conceptual differences
between Windows DLLs and Unix shared objects. (For me it seems like the Unix
approach is a lot more flexible.) The MSVC makefiles were further refined
using a contribution from Balazs Kelemen.
New Cmdenv/Tkenv features: you may link more than one user interfaces into the
simulation executable, and you can select one at runtime with the
[General]/user-interface=Tkenv (or =Cmdenv) ini file option or the -u Tkenv
(or -u Cmdenv) command-line argument to the simulation executable.
The per-module extra stack size needed by the user interface libraries
can now be configured from the ini file: [Cmdenv]/extra-stack= and
[Tkenv]/extra-stack= options.
In NEDC (and GNED), fixed the ?: operator and changed its precedence to bind
looser than || and &&. Changed nedc-generated code to suppress warnings about
unused variables (which are normal anyway in machine-generated code); this
could only be done for MSVC and Borland C++ because gcc seems to lack such a
pragma.
Several other smaller changes like fixed PVM execution; improved error
handling, bugfix related to wrong transmissionFinishes() behavior, etc; see the
sim/ChangeLog file.
Compiling with MSVC is now supported. Makefile.vc files have been added for
system components, and project files for sample simulatons. No DLL support yet.
MSVC support required a number or small changes in the sources too.
The documentation was significantly expanded and reorganized. RefMan got merged
into the User Manual, and the new User Manual now contains a lot of background
information, new hints and techniques, references to other simulation packages,
etc. New sections include in-depth analyis of handleMessage() and activity(),
and a comparison with Parsec.
GNED has been further enhanced: you can create submodules by dragging a module
type from the tree view to the canvas; submodule names can be edited in-place;
there are dialogs to edit submodule, connection, channel, etc. specifications
directly.
A new sample called Demo was added which works as a GUI shell to the other
sample simulations, and also demonstrates how you can link several simulation
models into a single executable. The other samples were cleaned up a bit too
(e.g. indentation & commenting made more consistent).
Some API changes were made to improve the clarity of the code. See API_CHANGES
in the doc/ directory.
License conditions have been alleviated: from this release on, one can elect
to use GPL for the base components of OMNeT++.
The configure script has been replaced by GNU Autoconf. The makefiles have been
brushed up (more standard symbol names, autodepend, version number in lib names,
etc). Cygwin is now fully supported. DOS+BC3.1 support has been removed for
lack of interest. File names longer than 8+3 are now used within the package.
Most of the effort since the last release was put into GNED. As a result,
GNED can now directly read/write NED files, so you can use it to work on your
existing NED sources. Moreover, GNED is now a fully two-way tool: you can edit
compound modules in graphic or in NED source form, and switch to the other view
any time. The GUI has been improved too: toolbar icons, tooltips, NED syntax
highlight. GNED is still in beta and there's some missing functionality.
Tkenv's user interface has also undergone some beautifying and bugfixing:
now it has toolbar icons, tooltips, etc.
Smaller enhancements were made to the simulation library. Some of them are:
dynamic simple modules can now be created and booted in one step by using
cModuleType's createScheduleInit() function; callInitialize() and callFinish()
was added to the module classes (for compound modules they work recursively);
behavior of cancelEvent() slightly changed. cMessage now has isScheduled()
and isSelfMessage() member functions; a "context pointer" was also added to
cMessage to facilitate writing modules which use a large number of self
messages concurrently.
See the ChangeLog in the directory of the individual components for details
on what has been changed/fixed/improved.
Contributions have been added. They include NED syntax highlight for Emacs,
and recipes and sample code to use Octave with OMNeT++.
Which is less visible to you, the development has moved to use CVS.
The cPacket class and the protocol.h header was added; its aim is
to standardize on protocol models. Negative message kind values
are now reserved.
GNED has been totally rewritten. Now it supports colors, icon selection
etc. and correctly generates display strings. Cut/copy/paste capability.
Ported to Windows 95/NT. Borland C++ 5.0 project files are included.
To-do list and coding conventions (style guide) has been added to the
docs; please stick to it. Tkenv is now better documented; and so is the
cKSplit class.
As usually, additions and changes in the User Manual are marked with
(new) in the text. It does not necessarily mean the feature documented
there is new; most probably only the documentation is.
Routing support through the cTopology class. Other new classes are
cWeightedStdDev, cLinkedList. Direct message encapsulation support.
cPar can now store void* pointers. Output scalar file added which
accumulates results from several simulation runs. Several refinements
on the class library, more informative error messages.
Improved makemake script supports large models which span across
multiple directories. Plove made more intuitive with mc-like key bindings
and right-click popup menus.
An new interactive tool, Plove has been added. Plove is for analyzing
and plotting output vector files. Plove uses gnuplot to do the actual
work. In addition to viewing, you can save the gnuplot graphs to files
(postscript, latex, pbm etc) with a click. Filtering the results
before plotting (averaging, truncation, smoothing, etc) is possible.
Some filters are built in, and you can easily create new filters or
modify the existing ones.
Type checking has been added to the NED language and the compiler.
New operators have also been added (like binary and/or/xor, shifting etc).
Now it is not necessary to declare module parameters and gates in .cc files
(Module..End stuff can be left out).
The Jar compiler has been renamed to NEDC because the name 'Jar' was
used by other software (a DOS archiver; Java tar on Solaris etc.)
Misc improvements: some bugs fixed; some error messages in the sim. kernel
made more informative etc.
The way of defining simple modules has been simplified a lot. Check out the
manual or see the example programs!
A new example program (fifo) was added that models a single-server queue and
also demonstrates how to derive a simple module from another one.
Important: the [All runs] ini file section has been renamed to [Parameters] to
reduce misunderstandings.
Several member functions (and even classes) have been renamed for the sake
of a more readable code as well as consistency in naming and style. The utils
directory contains a Unix script (convert) to upgrade your files.
Parallel execution via PVM has been tested and significantly improved.
Syncpoints (a tool for synchronization) were added. See the user manual
for details. Go ahead and do Parallel Discrete Event Simulation (PDES)
with OMNeT++!
The implementation of the message queue (Future Event Set) has become more
efficient: the underlying data structure has been changed to heap.
Check the version.log files for the numerous other changes. Many bugfixes
and code cleanups were made.