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.

OMNeT++ 5.4.1 (June 2018)

This release contains minor fixes. See the individual ChangeLogs for details.

OMNeT++ 5.4 (June 2018)

This release contains last-minute features and improvements, mostly motivated by the upcoming INET 4 release. Highlights are the typename and exists() operators in NED; nan and inf keywords in NED; support for logarithmic units like dB, dBW, dBm, dBV, dBmV. Qtenv has also gained much more powerful just-in-time debugging capabilities than before.

Details follow.

NED:

  • Allow 'typename' in expressions. Motivation: we want to be able to write: foo: <> like IFoo if typename!=""

  • Added the "exists" operator. Syntax: exists(<submodulename>)

  • Introduced "nan" and "inf" as keywords for numeric constants

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.

  • SimTime: more precise computation for integer-SimTime division.

  • Measurement units are now available as NED functions as well. They accept dimensionless numbers and quantities with a compatible unit. E.g. the expressions mW(2*100) and mW(0.2W) both result in 200mW.

  • 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.

  • cPacket: refined str() method

  • Several smaller improvements.

Qtenv:

  • Debug-on-error functionality can now be turned on interactively, via the Simulate -> Debug on Errors menu item.

  • When an error occurs and debug-on-error is enabled, Qtenv now offers to launch and attach an external debugger unless the simulation program is already being debugged. The same applies to the Debug Next Event functionality. External debuggers can be configured with the debugger-attach-command configuration key, and can also be overridden with the OMNETPP_DEBUGGER_COMMAND environment variable.

  • Workaround for a crash with Qt 5.11.

IDE:

  • Launcher: fix: The IDE sometimes started build in the UI thread, locking up the UI for the time of the build, potentially for several minutes.

  • Fixed "unknown" image as module background in the graphical NED editor.

  • Fix: do not report "undefined parameter" for typename assignments in NED

  • Fix: inifile analysis: typename deep assignments in NED were ignored

OMNeT++ 5.3 (April 2018)

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:

  • Revised message compiler, added import support and more. See src/nedxml/ChangeLog for details. Use --msg6 to turn on the new features.

  • cPar: integer representation changed from long to int64_t. See src/include/omnetpp/ChangeLog for details.

  • Evaluation of NED expressions now uses integer arithmetic when operands are integers. Conversions that incur precision loss should now be explicit: converting a double to integer requires the int() cast; also, converting an int to double will raise an error if there is actual precision loss, and you can suppress that error by explicit double() cast. There are many smaller-scale changes related to this change — see include/omnetpp/ChangeLog for details.

  • 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.

  • In recording histograms with @statistic, the number of bins can be specified by adding numBins=nn: @statistic[x](record=histogram;numBins=100). The actual number of bins produced might slightly differ, due to auto-extension and bn merging during result collection.

  • cMessagePrinter: API was extended with tags and column names

  • cCanvas: added getAnimationSpeed(); better documentation for setAnimationSpeed() and holdSimulationFor().

  • cHistogram, cNedValue: minor changes in the public API

  • Result recorders: Added "timeWeightedHistogram" recorder

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.

  • Usability improvements in the Animation Parameters dialog, e.g. it now also displays the current simulation speed, and it is colored red if the simulation cannot keep up with the requested animation speed.

  • Histogram inspector: visualize outlier bins (drawn with a different color than normal bins), and show info about them. Fix numeric overflow when large numbers (>= 2^64) are shown.

  • Histogram inspector: visualize outlier bins (drawn with a different color than normal bins), and show info about them. Setting up the bins while in the precollection phase can be forced from the GUI. Fix numeric overflow when large numbers (>= 2^64) are shown.

  • Histogram result objects are easier to locate on the GUI, and are now also found by the Find/Inspect dialog.

  • Made statistic recorders "findable" from Qtenv

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.

Toolchain and dependencies:

  • Updated toolchain on Windows (clang 5.0.1, gcc 7.3, gdb 8, osgEarth 2.7)

  • Updated toolchain on macOS (OpenSceneGraph 3.2.3, osgEarth 2.7)

  • OMNeT++ now requires osgEarth 2.7 or later (check the Install Guide for further instructions on how to upgrade osgEarth.)

Tools:

  • opp_runall, opp_fingerprinttest, opp_test: portability fixes for Windows and macOS

  • opp_fingerprinttest: fix: error messages from the simulation did not appear

  • 'march=native' and 'mtune=native' compiler options are no longer used by default for a release build, because on certain CPUs this caused rounding differences so simulations ran on a different trajectory depending on the actual CPU used.

Samples:

  • canvas: Added smooth animation with CarAnimator::refreshDisplay().

  • osg-earth, osg-satellites: Switch from ObjectLocator to GeoTransform. The former was removed after osgEarth 2.8, and the latter has been around for quite some time now.

Documentation:

  • Documented smooth animation in detail, and updated the section on statistical data collection classes (cStdDev, cHistogram) in the Simulation Manual.

Plus several bug fixes.

OMNeT++ 5.2 (September 2017)

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.

  • Statistics recording: added support for collecting time-weighted statistics. This is useful for variables like queue length. Add timeWeighted=1 or timeWeighted=true to a @statistic to make it collect time-weighted statistics. timeWeighted=1 affects the operation of the following filters/recorders: "mean", "stats" and "histogram". The "timeavg" recorder always computes time average; an additional recorder "avg" has also been added that always computes unweighted mean. "mean" emulates either "avg" or "timeavg", depending on the presence of the timeWeighted=1 option.

  • Changed result filters/recorders so that they interpret NaN as "missing data" and ignore it. The change affects "count" (which now also ignores nullptrs), "sum", "min", "max", "avg", "timeavg", "sumPerDuration", "stats", "histogram". For the time weighted case, NaNs mark intervals to be ignored.

  • cResultFilter: added an init() method to allow filters access the content of the @statistic property they occur in.

  • The packetBytes/packetBits filter now throw error if object is not a cPacket. They still accept (and ignore) nullptr.

  • Added support for weighted statistics to histogram classes and to cStddev (the cWeightedStddev class is no longer needed.) The primary motivation for weighted statistics is the existence of variables where time average makes much more sense than arithmetic mean, e.g. queue length.

  • 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:

  • opp_makemake: IMPORTANT CHANGES regarding debug/release-mode builds:

  • 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 build directory intact when the one in the target directory is deleted.

  • Refinements on the build process of OMNeT++ itself: generated files are created only once, even when using parallel build; do not copy build artifacts if not actually changed; Makefiles in the samples/ folder are re-created only if they are missing; etc.

  • The samples/ folder is now optional: deleting it in an OMNeT++ installation will no longer break the build.

IDE/Base:

  • The Eclipse platform was updated to the latest Oxygen milestone build (4.6.2)

IDE/Build:

  • Makefile generator: follow changes in the command-line opp_makemake tool

  • 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 — remember, they are built in RELEASE mode by default.) 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.

  • 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 build directory intact when the one in the target directory is deleted.

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 (both exe and shared lib). (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".

  • If the launch is configured as "Ask before build" (default), a confirmation dialog is shown on launch (and before the build), asking whether to switch the active build configuration to the appropriate one. The dialog allows you to set the decision as permanent and reconfigures the launch config accordingly.

  • Better progress reporting and cancellation for batch runs. Internally, this is the result of switching to the new JobGroups API of Eclipse.

IDE/Analysis Tool:

  • Added support for "statistic" items and for weighted statistics. Background: Specifying "record=stats" in a @statistic NED property, or or calling the record() method on a cStddDev object saves a "statistic" object in the output scalar file. A "statistic" object includes fields like the count of observations, mean, standard deviation, minimum and maximum value. "statistic" objects so far have been blown up to several unrelated scalars upon loading into the Analysis Tool. Now they are loaded as objects, and appear in the Histograms and All tabs of the Browse Data page. Statistics fields continue to be available as scalars as well, so they can be used as chart input. Also, weighted statistics (like those saved from cWeightedStddev) were not properly displayed in the Analysis Tool. This has been rectified as well. 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.

    • Individual fields of "statistic" and "histogram" result items are no longer displayed on the Scalars page.

    • Properties for "statistic" and "histogram" result items now includes "Kind" ("weighted"/"unweighted") and "Sum of weights".

    • On the All tab of Browse Data page, result item fields are now in natural order (i.e. no longer alphabetically sorted).

  • Export dialog refined: Added "Open exported file afterwards" checkbox, better filename generation and validation, etc.

  • Changed the syntax for accessing iteration variables in filter expressions. Before, they could be accessed like run attributes, with the "attr:" prefix. Now, one needs to use the "itervar:" prefix, which is more explicit.

  • Properties view: properly display attributes, iteration variables and parameter assignments for runs

  • Better display of histogram bins in the Properties view. The display format of bins was changed from "a..b" to "[a,b)", in order to clearly indicate that "a" is inclusive and "b" is exclusive.

  • 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.

  • Missing or unavailable data in table cells is now displayed with a hyphen instead of "n.a."

  • New icon for scalar items on the All tab of Browse Data page

Qtenv:

  • OSG Viewer is now a separate library, loaded at runtime.

  • Improved the appearance and usability of the Animation Parameters dialog.

  • Show (debug) or (release) in the window title based on NDEBUG.

  • Completely overhauled figure rendering. This should improve performance and fix many issues.

  • The size of arrowheads on connections and line figures is now more reasonable with many combinations of zoom level, line width, and the "zoomLineWidth" property.

  • Implemented cPanelFigure support and cumulative zIndex.

  • Figures without a tooltip inherit it from their nearest ancestor that has one. Empty strings break this inheritance, but are not shown. The own tooltip of the figure now overrides that of its associated object.

  • The special value "kind" is now also accepted as a color in the "i" tag of display strings of messages as well.

  • A large number of miscellaneous improvements, fixes and cleanups; see src/qtenv/ChangeLog.

Envir:

  • EnvirBase: changed the lifecycle of several plugin objects to per-run, i.e. those objects are now deleted and re-created between runs. Affected plugins: event log recorder, output vector file recorder, output scalar file recorder, snapshot recorder, future event set (FES). The corresponding configuration options have also become per-run options: eventlogmanager-class=, outputvectormanager-class=, outputscalarmanager-class=, snapshotmanager-class=, futureeventset-class=. 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:

  • Added --list-itervars option

  • Removed obsolete export commands 'vector' and 'scalar'

  • Do not export itervars as scalars by default; added -y, --add-itervars-as-scalars option to turn exporting itervars back on

  • Sort runs by runId, for consistent query output

  • 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

Result recording and processing:

  • Switch to new scalar/vector file recorders: The default values for the outputscalarmanager-class= and outputvectormanager-class= config options are now the new classes OmnetppOutputScalarManager and OmnetppOutputVectorManager. These classes rely on the new result file writer classes in common/. The old classes cIndexedFileOutVectorManager and cFileOutScalarManager still exist. They will be removed in a later version of OMNeT++.

  • Save iteration variables separately from run attributes ("itervar" lines). NOTE: This changes result file format!

  • 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.

  • Output scalar files: do not save numeric iteration variables (of parameter studies) as scalars. Instead we’ll add them (as scalars) at load time, if needed.

  • Proper loading and exporting of weighted statistics

  • Added StatisticsResult (HistogramResult sans histogram). Until now, statistic results in scalar files were loaded as several unrelated scalars, and were not available as a single object.

  • OmnetppResultFileLoader: fix: 'run' line is mandatory since version 4.0

  • SqliteResultFileLoader: updated: histBin table was renamed to histogramBin

  • SqliteResultFileLoader: loading of vector attrs and run params was missing

  • SQLite recorder: slight changes in file format

OMNeT++ 5.1 (March 2017)

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 much-improved 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.

For further details see the preview version announcements below.


Changes since OMNeT++ 5.1 Preview 3:

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.

OMNeT++ 5.1 Preview 3 (February 2017)

This version is expected to be last preview version before releasing OMNeT++ 5.1 final.

Core:

  • Ordering of 'platdep/sockets.h' and 'omnetpp.h' is no longer important. It is recommended to include 'omnetpp.h' first.

  • Changes in the Canvas API: the insertBelow()/insertAbove() methods have been added to cFigure; cFigure’s parse(cProperty*) and getAllowedPropertyKeys() methods are now public API; the first argument of the recently introduced Register_Figure() macro must now be quoted.

  • Added opp_get_monotonic_clock_usecs(). This function should be used for measuring wall-clock time intervals in schedulers and other places instead of gettimeofday() which is not monitonic.

  • 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.

  • Other minor improvements.

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:

  • omnetpp.h is now treated as a 'system header', so it will no longer generate warnings in case a model specifies more stringent checking for the compiler.

  • 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.

  • Cross compilation of OMNeT++ for Windows on a Linux host is now supported.

IDE:

  • Fixed an issue when generating NED documentation on Windows

  • IDE can now generate a makefile that is exactly the same as the one generated by the opp_makemake tool.

Qtenv:

  • Numerous bug fixes and enhancements.

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.)

OMNeT++ 5.1 Preview 2 (December 2016)

This release significantly improves and builds upon functionality introduced in version 5.0, and also raises the bar in other areas. Highlights include: a much-improved 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; 64-bit Windows support; updated Eclipse base for the IDE.

Note:

  1. The manuals have not yet been updated.

  2. 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.

  3. 32-bit Windows and Linux are no longer supported.

Changes since version 5.0:

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).

  • If a model implements such full-blown animations for a compound module that OMNeT++'s default animations (message sending/method call animations) become a liability, they can now be programmatically turned off for that module with a setBuiltinAnimationsAllowed(false) call.

  • Support for self-refreshing figures. cFigure now has a refreshDisplay() method which is called on every display refresh as long as the containing canvas is open in the GUI. Overriding that method in custom figure classes allows the figure to update itself according to the state of the simulation. The self-refreshing feature is especially useful for figures that implement various meters, gauges, plots or charts, because this way they don’t require an additional helper module to update them. Note this feature is only available in Qtenv.

  • 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 have a tooltip text set.

  • 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()).

  • The dimensions of images used by cImageFigure/cIconFigure can now be determined programmatically (getImageNaturalWidth() / getImageNaturalHeight() methods).

  • Support for measuring the text has been added to cTextFigure and cLabelFigure (getBounds() method). Note that getBounds() assumes zoom level 1.0.

  • Support for accessing the coordinates of auto-layouted submodules (cEnvir:: getSubmoduleBounds()). This functionality is needed by some visualizers in INET, where nodes of a wired network are typically not explicitly placed.

  • 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 NED statistic declarations (@statistic), signal names in the "source" attribute can now be qualified with the name of a submodule. This will cause the signal listener to be added to the given submodule instead of the module containing the @statistic. Example: @statistic[foo](source=a.b.foo). Note that there is no syntax to specify modules above or outside the one containing the @statistic, as that would limit the module’s reusability (encapsulation violation).

  • 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.

  • cPacket’s default getDisplayString() method now falls back to returning the encapsulated packet’s display string, instead of just returning an empty string.

  • When formatting error messages, location/time information is now placed *after* the exception text, not before. The goal was to improve readability, as user now needs to go through less blabla before getting to the actual error message. Individual error messages have also been revised for brevity and consistency (capitalization, use of quotation marks, etc.)

  • 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.

  • Many other smaller-scale changes, fixes and refactoring, in part related to the ones above; see ChangeLogs under src/ for details.

Qtenv:

  • Qtenv has reached maturity and it is now the default GUI for simulations.

  • Qtenv now requires Qt5.4, and optionally OpenSceneGraph 3.2-3.5 and osgEarth 2.5-2.7.

  • 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.

  • Added built-in support to record animation into a high quality video. (Press the record button on the toolbar for instructions.)

  • Improvements on built-in animations: Messages sent with a nonzero propagation delay are now animated properly (not instantaneously). Packets of nonzero length are now displayed as "strips" when transmitted on a link with a transmission rate and propagation delay. The animation of method call hierarchies now represents the call graph better.

  • 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.

  • Inspector windows made persistent between runs and will be re-opened on simulation restart.

  • Other improvements, including tweaks to the Preferences dialog, context menu usability in inspectors, updated application and toolbar icons, a new 'Rebuild network' button on the toolbar, and many bug fixes.

  • Experimental support to run as a native Wayland client (start the simulation with the QT_QPA_PLATFORM=wayland environment variable set).

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.

  • By default, error messages are written to stderr. A -m (merge output) option has been added that redirects errors to stdout; a practical benefit is that it preserves the relative order of the 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"
  • In output scalar files, when run attributes (iteration variables, etc.) are saved as scalars, the module name they are saved with has been changed from "." to "_runattrs_".

  • The cpu-time-limit option has been fixed to work as expected; a new real-time-limit option also has been added.

Cmdenv:

  • All changes described in the Envir section above apply, plus:

  • 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.

  • The cmdenv-interactive option can now be specified on per-run basis.

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_makemake: OMNeT++ and generated model makefiles now use compiler- generated dependencies (gcc/clang -MMD option) that are saved in the out/ directory in *.d files. "make depend" is no longer needed.

  • opp_makemake: Support for deep includes (automatically adding each subfolder to the include path) has been dropped, due to being error-prone and having limited usefulness. In projects that used this feature, #include directives need to be updated to include the directory as well.

  • opp_makemake: Removed support for generating nmake-compatible makefiles, as we now use GNU Make on all platforms.

  • 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_runall has been reimplemented in Python, and its command-line interface has been redesigned to not only allow using multiple CPUs but also several runs per Cmdenv instance. (This change allows one to execute a large number of short simulation efficiently by reducing process startup overhead.) Internally, opp_runall now uses the new "-q" option of simulations to expand a run filter expression to a list of runs.

  • opp_test: export "run" script and "retest" scripts under work/ for each test, to facilitate running tests manually. Minor bug fixes.

  • Removed unused utilities like opp_makedep, lcg32_seedtool, abspath, and some others.

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.

  • Change in "Project Features" feature: Preprocessor symbols for enabled features (e.g. the WITH_IPv4 macro for the IPv4 feature) are now placed into a generated header file, and not added to the build configuration (Paths & Symbols page) as macros to be passed to the compiler via -D options. The name of header file is part of the feature definition file (.oppfeatures). Using a generated header file reduces the number of things that can go wrong during indexing and project build, and also has the advantage of being seen from derived projects.

  • 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.

  • Support for deep includes (automatically adding each subfolder to the include path) has been dropped from the IDE as well, due to being error- prone and having limited usefulness.

  • 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.

  • CDT integration: renamed the default C/C⁠+⁠+ project configuration names from "gcc-debug"/"gcc-release" to simply "debug" and "release".

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.)

  • Batch execution of simulations is now controlled with two new spinner widgets: "Number of CPUs to use", "Runs per process".

  • The form page now allows specifying time limits for the simulation ("Simulation time limit", "CPU time limit" fields)

  • Radio buttons have been replaced by tri-state checkboxes (with on/off/grayed states, where the grayed state means "no setting specified, let the inifile setting take effect".) The consequent space saving allowed other options to be added to the form page: "Verbose", "Stop batch on error", "Express mode", "Save stdout", "Record scalar results", "Record vector results", "Record eventlog".

  • User interface selection now also uses an editable combo instead of radio buttons.

  • Added content assist for Additional Arguments field.

  • Improvements in the launcher: Simulation batches are now easier to cancel; in case of a simulation error, the error dialog now correctly displays the error message, not just a "Finished with error" text.

IDE/Inifile Editor:

  • Updated to know about option changes and new options.

IDE/Analysis Tool:

  • In the Browse Data page, display Experiment/Measurement/Replication columns instead of Folder/Filename/RunId/Config/RunNumber. Note that this is just the default value for a preference, so the change will only take effect in new installations or new workspaces. The default columns widths have also been increased.

  • 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.

  • Compiling OMNeT++ now requires a C⁠+⁠+11 compliant compiler.

Samples:

  • 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.

  • osg-satellites: Refactored mobility logic and replaced the discontinued MapQuest public tile source with a single offline image to avoid dependency on external sources.

  • queueinglib: Fixed a race condition by requiring the PassiveQueue to allocate the Server before sending a job to it.

  • resultfiles: Result files were renamed to reflect the new default naming scheme (i.e. configname-itervars-#repetition).

OMNeT++ 5.1 Preview 1 (September 2016)

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.

OMNeT++ 5.0 (April 2016)

Release 5.0 is a result of development effort of nearly two years. This is a major release that introduces significant new features compared to the last 4.x version, for example the Canvas API (2D graphics), OpenSceneGraph-based 3D graphics support, improved logging, a new Qt-based runtime environment that will eventually replace Tkenv, and much more.

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.

Changes since the release candidate:

Documentation:

  • Several organizational and rendering improvements on the API documentation generated using Doxygen.

  • The User Manual has been renamed to Simulation Manual to reduce the chance of confusing it with the User Guide (which describes the IDE and Tkenv/Qtenv).

  • Improved the contents and the HTML rendering of the Simulation Manual.

Core:

  • cFigure: skew() methods now take a coefficient instead of an angle.

  • cOsgCanvas: initialize zNear/zFar to NaN (to indicate they are unset by default), and added the mthods setZLimits(), clearZLimits(), hasZLimits(). Missing zNear/zFar will turn on automatic zNear/zFar computation in the viewer.

  • Removed a Register_Enum()-related workaround introduced around OMNeT++ 5.0b2 so that it could compile INET-3.0.

  • cFingerprint renamed to cFingerprintCalculator.

  • cKSplit: method rangeExtension(bool) has been renamed to setRangeExtension().

  • cModule::size() has been deprecated (use getVectorSize() instead).

  • Several methods in cComponent, cModule, cSimpleModule, cChannel, cArray, cQueue, cTopology, cStatistic and other classes have been made virtual to allow the user override them.

  • Fix: simtime_t was not part of the omnetpp namespace.

  • Fixed #943 which prevented using cDatarateChannel’s forceTransmissionFinishTime() method when the channel’s busy state signal was recorded into an output vector.

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

  • Added tooltips to timeline messages

  • Fix: on Windows, Earth scenes appeared distorted in the osg-earth and osg-satellites sample simulations

  • 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)

This release brings numerous refinements to APIs introduced in previous beta versions, several bug fixes, and relatively few new features. The manual has been improved and brought up to date for the most part, although there are still gaps that will be filled in for the final 5.0 release. The most conspicuous change will be the new simulation time display in Tkenv and Qtenv.

Build:

  • Introduced WITH_TKENV, WITH_QTENV, WITH_OSG and WITH_SYSTEMC in configure.user; these options allow one to disable certain features if they are not needed. In particular, WITH_TKENV=no replaces NO_TCL=1

Core:

  • The logging API was refined. In addition to several renames (e.g. GLOBAL_COMPILETIME_LOGLEVEL was changed to COMPILETIME_LOGLEVEL), the numeric order of log level constants (LOGLEVEL_*) was reversed to make the values consistent with semantics, and LOGLEVEL_OFF was added to allow one completely disable logging. Support for log filtering was added in the form of compile-time and runtime predicates. The default compile-time log levels were also changed (to TRACE in debug builds, and DETAIL in release builds).

  • In the OpenSceneGraph API, OmnetppObjectNode was renamed to cObjectOsgNode. Static cOsgCanvas methods that existed for creating and manipulating such nodes (createOmnetppObjectNode(), isOmnetppObjectNode(), setOmnetppObject(), getOmnetppObject()) were removed, and one should directly use cObjectOsgNode instead. Also, the osgutil.h header is now part of omnetpp.h, so it doesn’t need to be included separately.

  • In cOsgCanvas, the redundant setPerspective() method was removed (it was a union of two other setters).

  • There were several refinements in the cFigure API:

    • replaced getClassNameForRenderer() with getRendererClassName()

    • spelling: ArrowHead changed to Arrowhead in method names, enum name, etc.

    • move() made recursive, nonrecursive version is called moveLocal()

    • Pixmap: renamed resize() to setSize()

    • Transform: skew() methods to use coefficient instead of angle

    • Transform: the matrix was transposed so points can be column vectors instead of row vectors

    • added NUM_GOOD_DARK_COLORS and NUM_GOOD_LIGHT_COLORS

    • some cPixmapFigure methods were also renamed

  • 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

  • Revised the configuration options that control recording of @statistics, individual scalars, and histograms. As a result, the **.statistic-recording and **.bin-recording options were introduced that take over some of the responsibility of the formally overloaded **.scalar-recording option. Rationale and details in src/envir/ChangeLog.

  • Added cIEventlogManager, a new Envir plugin class that allows one to replace the built-in eventlog manager. Eventlog managers are responsible for recording simulation history into an eventlog file. A new eventlog manager can be activated with the eventlogmanager-class configuration option.

  • The cFingerprint class was renamed to cFingerprintCalculator, and the fingerprint-class config option to fingerpringcalculator-class.

  • In cEnvir, renamed getRNGMappingFor(component) to preconfigure(component).

  • 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().

  • Removed cEnvir::isDisabled() and added cEnvir::isLoggingEnabled(). Renamed cEnvir::disableTracing member variable to cEnvir::loggingEnabled.

  • cModule: size() deprecated, use getVectorSize() instead

  • More methods made virtual in cSimpleModule and other classes

  • Improved the descriptions of several per-object config options.

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.)

  • Changed the name of the preferences file to .qtenvrc.

  • Numerous bug fixes and improvements.

Cmdenv:

  • Configuration options controlling logging in non-express mode (cmdenv-express-mode=false) have been simplified. The following options have been removed: cmdenv-module-messages, cmdenv-global-log-level, **.cmdenv-ev-output. The equivalent functionality (enabling/disabling logging and setting the log level globally and per-module) is now controlled with **.cmdenv-log-level. Logging can be disabled with **.cmdenv-log-level = OFF. Note that the cmdenv-event-banners and cmdenv-log-prefix options still exist.

  • The cmdenv-message-trace configuration option has been removed. It had very limited usefulness, and it was somewhat overlapping with eventlog.

Examples:

  • Updated visualization in samples to use the new refreshDisplay() callback.

  • Removed google-earth demo. (We already have a similar demo, osg-earth.)

Utils:

  • opp_featuretool revised and improved

OMNeT++ 5.0 beta 3 (December 2015)

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.

  • Added 3D graphics support via OpenSceneGraph. The 3D scene graph is to be built using the OpenSceneGraph API (e.g. loaded from file via osgDB::readNodeFile()), and then set onto a cOsgCanvas instance. 3D scene(s) can be visualized in the new Qtenv runtime GUI. (There is no 3D support in Tkenv, due to technical limitations.)

  • Added resolveResourcePath() to cEnvir and cComponent. The method searches a number of folders for a resource given with its file name or relative path, and returns the path for the first match. It can useful for locating various data files for models, OSG model files, and other files.

  • Visualization: added a method to the base class of modules and channels to serve as a container of visualization-related code. refreshDisplay() is invoked by graphical user interfaces (Qtenv, Tkenv) whenever GUI contents need to be refreshed. Display string updates, canvas figures maintenance, and OSG scene graph updates are probably best done inside refreshDisplay() methods, as it can result in significant performance gain and, in some cases, also in more consistent information being displayed.

  • An isExpressMode() method has been added to cEnvir to query whether the simulation runs in Express mode under a GUI. This information can be useful additional input for refreshDisplay() code.

  • The simtime-scale config option has been replaced by simtime-resolution, a more user-friendly incarnation. simtime-resolution accepts time units (s, ms, us, ns, ps, fs, as), power-of-ten multiples of such a unit (e.g. 100ms), and also base-10 scale exponents in the -18..0 range (mostly for backward compatibility with simtime-scale).

  • 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.

  • Fingerprint computation has changed. It was also made more flexible, e.g. it is now possible to control which ingredients are added into the fingerprint computation. Define USE_OMNETPP4x_FINGERPRINT at compile-time to get back OMNeT++ 4.x fingerprints.

  • Signal listener interface change: A cObject *details argument has been added to emit() methods to allow simulation models provide extra information with primitive data types (double, long, etc) they emit, without the need to switch over to emitting cObject altogether. This is a non-backward- compatible change: signal listeners will need to be updated with the extra argument. To facilitate transition, you can compile OMNeT++ and models with WITH_OMNETPP4x_LISTENER_SUPPORT defined; this will set up cIListener to delegate to the old methods, so existing listeners will work.

  • Result filter/recorder interfaces, being based on signal listeners, have undergone a similar change. Models containing custom result filters or recorders will need to be updated.

  • SimTime overhaul to increase accuracy (i.e. use integer arithmetic where possible), improve the API, and add missing operations/functions. 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

  • Removed SIMTIME_RAW(), STR_SIMTIME(), and SIMTIME_TTOA(). These macros are no longer needed, as were introduced in OMNeT++ 4.0 to assist porting models from version 3.x where simulation time was stored in double. Also, MAXTIME was renamed to SIMTIME_MAX.

  • The tkenv-image-path config option has been replaced with image-path.

  • 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:

  • Qtenv, the Qt-based runtime environment is currently in preview status, Tkenv is still the default runtime. Qtenv can be activated by adding the '-u Qtenv' switch to simulation command lines. Alternatively, specify 'PREFER_QTENV=yes' in configure.user to make Qtenv the default GUI. Note that 3D visualization is only available in Qtenv.

SystemC:

  • Updated the bundled SystemC reference implementation to version 2.3.1

Examples:

  • Several new examples (osg-intro, osg-earth, osg-indoor, osg-satellites) have been added to the 'samples' folder to demonstrate the new 3D visualization capabilities in Qtenv.

  • Aloha has been updated to use the new refreshDisplay() method.

Tools:

  • Added 'opp_featuretool', which is basically the command-line equivalent of the Project Features dialog in the IDE: it allows one to enable/disable project features defined for an OMNeT++ project, e.g. the INET Framework.

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.

  • A separate Mac OS X specific installation bundle was created that contains the binary files for all the external dependencies (Tcl/Tk, Qt, OSG, osgEarth etc.) As a consequence you no longer have to manually install Quartz before installing OMNeT++. We have now separate installation bundles for Linux/Mac/Windows.

  • 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.

OMNeT++ 5.0 beta 2 (July 2015)

Core:

  • OMNeT++ classes are now in the "omnetpp" namespace. Models need to be modified to compile, e.g. by adding "using namespace omnetpp" or USING_NAMESPACE lines at appropriate places. (The latter conditionally expands to the former when needed, and to the empty string when not, making your code compatible with OMNeT++ 4.6 too.) If you don’t want to change the model source code, you can define the AUTOIMPORT_NAMESPACE macro on the compiler command line (add -DAUTOIMPORT_NAMESPACE to CFLAGS), which will basically add the using namespace directive at the end of <omnetpp.h>. Turning off the omnetpp namespace (by setting USE_NAMESPACE=no in configure.user) is no longer fully supported, and will be removed in the next beta.

  • Introduced cRandom, which encapsulates a random number stream into an object. Random numbers can be extracted with the draw() method. Added the following cRandom subclasses: cUniform, cExponential, cNormal, cTruncNormal, cGamma, cBeta, cErlang, cChiSquare, cStudentT, cCauchy, cTriang, cWeibull, cParetoShifted, cIntUniform, cBernoulli, cBinomial, cGeometric, cNegBinomial, cPoisson. They encapsulate the similarly named functions (e.g. exponential()) with their parameters and the random number generator (cRNG). cStatistic also now subclasses from cRandom: it can generate a random variate from the distribution observed in the collected sample.

  • Random variate generation functions (normal(), etc.) signature change: the trailing "int rng" (RNG index of context module) argument was changed to cRNG*, and moved to the front. Motivation: break the functions' dependence on the context module. However, to lessen the impact of the signature change, random variate generation functions with their original signatures have been added to cComponent as methods. Thus, models that only use those functions from module methods will not notice any change.

  • The interface of iterators (GateIterator, SubmoduleIterator and ChannelIterator in cModule, cQueue::Iterator, etc.) have been changed to make them more consistent with STL iterators. Therefore, operator() as a means of dereferencing has been deprecated, and operator* and operator-> have been added instead. The increment/decrement operators have also been revised.

  • FES made replaceable. To this end, an abstract cFutureEventSet base class has been introduced, and cMessageHeap (now renamed cEventHeap) was made to extend cFutureEventSet. An accessor method (cFutureEventSet* getFES()) has been added to cSimulation, and the older members msgQueue and getMessageQueue() have been removed. Simulations now accept a '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.

  • cObject::parsimPack() has become const. You only need to pay attention (and add "const" manually) if you have classes that redefine parsimPack().

  • cQueue and cMessageHeap had both length()/getLength() and empty()/isEmpty() methods; the former have been removed; use getLength() and isEmpty() 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.

  • See doc/API-changelog.txt for a complete list of changes.

NED:

  • Allow a "module" to extend a "simple" (motivation: INET 3.x)

  • 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");'

  • In message compiler generated code, doPacking() has been renamed to doParsimPacking(), doUnpacking() to doParsimUnpacking().

Tkenv:

  • Feature: double-clicking a module in the object tree will open it in the main area instead of opening a new inspector window. A new inspector can still be opened from the context menu.

  • 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.

  • Images under images/old/ are no longer accessible without the "old/" prefix, so if you use such an icon, you must add the "old/" prefix manually for them to continue to work. For example, you have to change "i=cloud" to "i=old/cloud" in display strings. The feature to let old/* images be accessible without the prefix was originally introduced to ease the transition from OMNeT++ 3.x to 4.0.

  • Several bug fixes

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.

    • Qualified includes with the folder, i.e. #include "stringutil.h" became #include "common/stringutil.h". This increases readability and reduces the chance of including a wrong header.

    • Use fully qualified header guards

    • 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.

  • Clarifications in the Academic Public License.

Contrib:

  • Removed JSimpleModule due to lack of users and good use cases

OMNeT++ 5.0 beta 1 (Feb 2015)

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

  • Introduced cEvent as a base class of cMessage. cEvent allows scheduling of arbitrary code for a simulation time that runs independent of modules. Override the execute() method of cEvent to specify the code. cEvent is not intended for use in simulation models; the primary motivation is to allow implementing simulation time limit with an "end-simulation" event, and to encapsulate foreign events (e.g. SystemC events and crunching) for seamless integration with the simulation event loop.

  • 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.

  • 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.

  • check_and_cast<> improved; added check_and_cast_nullable<> that accepts NULL pointer as input

  • 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++.

  • cClassDescriptor interface changes (method renaming and arg list changes)

  • Code cleanup, including:

    • removal of 3.x backward compatibility features (WITH_DOUBLE_SIMTIME, WITHOUT_CPACKET)

    • removal of deprecated classes, functions and macros (cLinkedList, cSimulation::operator[], Define_Function(), etc.)

    • cTopology: internals refactored (use STL instead of arrays, etc.)

    • error code enum members renamed from eXXX to E_XXX

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.

  • New inifile config options: cmdenv-log-format, cmdenv-log-level.

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).

  • Finished implementation of the Canvas API Tkenv rendering. The implementation is based on figure renderers (see FigureRenderer class) that can be registered for various figure classes. The implementation is based on the Tkpath Tcl/Tk extension, which was significantly enhanced by our team.

  • Tkpath is now also used internally for drawing submodules, connections and the like. Benefits include:

    • unlimited zooming of image backgrounds

    • antialiased drawing (Tk canvas didn’t have antialiasing)

    • OS X: images are no longer forced into 1-bit transparency

    • labels are now outlined (have a "halo") to make them readable on noisy backgrounds

    • range indicator fill is now semi-transparent (because Tkpath supports that)

    • performance improvements e.g. on OS X, and with image backgrounds

  • Display log prefix; log prefix format and log level configurable via the Options dialog

IDE:

  • Several minor improvements. NED editor support for canvas items is pending.

Example simulations:

  • Added samples/canvas, a demo for the Canvas API

OMNeT++ 4.6 (Nov 2014)

IMPORTANT:

  • To install OMNEST 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:

  • Improved zooming/panning support: use double click to zoom in around a point, and Shift + double click to zoom out; use Ctrl + left mouse button to drag out a rectangle to zoom to (a.k.a. marquee zoom; implementation based on patch from Christoph Sommer), right-click cancels marquee zoom; use left mouse button for panning

  • Further small UI fixes (see ChangeLog)

Core:

  • The testing tool opp_test has been revised and is now an official part of OMNEST.

  • The Manual now has a new chapter that covers the testing of simulation models as well as the usage of the opp_test tool.

  • The message compiler opp_msgc was reimplemented as a part of nedtool. opp_msgc still exists as a wrapper script that points to nedtool.

IDE:

  • The IDE is now based on Eclipse 4.4 Luna, and requires JDK 1.7 or later.

  • The IDE is now a 64-bit application on Mac OS X.

Other:

  • OMNEST 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 OMNEST versions will require C++11 compliance.

  • OMNEST can be configured to use the 'omnetpp' namespace by setting USE_NAMESPACE=yes in configure.user

  • Clang compiler support: Clang is used by default on OS X, and can be turned on on Linux. Clang is still not supported on Windows (we are waiting for the MSYS Clang packages to mature).

  • 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 OMNEST: The msys/ directory has been moved to tools/win32/ while the mingw/ directory that contains the compiler has been moved to tools/win32/mingw32/.

Bugs fixed: http://tinyurl.com/omnetpp46-fixes

OMNeT++ 4.5 (June 2014)

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.

  • 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:

  • In the Windows bundle, the debugger have been upgraded to gdb-7.7; Tcl/Tk has been upgraded to version 8.6.0.

  • New configure.user option to prefer clang over gcc if both are installed

  • New configure.user option to enable/disable C++ 11 compilance (-std=c++11) Note that this is NOT supported on Windows because of issues with the bundled MinGW 4.7 compiler.

  • Tcl/Tk version 8.5 is required, 8.6 is preferred; BLT is no longer in use

Bugs fixed: http://tinyurl.com/omnetpp45-fixes

OMNeT++ 4.4.1 (Feb 2014)

OMNeT++ 4.4 (Dec 2013)

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>);

    <signalName> may contain wildcards (?,*). Type is optional; if present, data type can be long, unsigned long, double, simtime_t, string, or a registered class name. To allow NULL pointers, append a question mark to the class name. Example:

    @signal[receivedPk](type=cPacket?);

    This feature is controlled by the check-signals=<bool> configuration option, and it is turned off by default for now.

  • Support for @statistic-style declarative result recording on dynamically registered signals (e.g. "conn-<n>" where n is an integer). Instead of @statistic, add a @statisticTemplate property in the NED file, and for each new signal call ev.addResultRecorders(...).

  • Support for programmatically adding result filters and recorders on signals: cResultRecorder has been revised to allow result recorders to be used without a corresponding @statistic attribute, e.g. they can now be added to signals programmatically.

  • Further signals-related changes:

    • added emit(simsignal_t, const cObject*) to cComponent

    • added receiveSignal() overload for bool to cIListener

    • introduced SimsignalType which replaces the older cITimestampedValue::Type

    • added cObjectFactory::isInstance() method that effectively wraps a dynamic_cast

    • added Register_Abstract_Class() macro that allows abstract classes to be used in signal declarations as type.

  • Added cNEDValue::parseQuantity()

  • New result filter: removeRepeats

  • Feature: Just-in-time debugging support.

    • new configuration options: debugger-attach-on-startup, debugger-attach-on-error, debugger-attach-command, debugger-attach-wait-time.

    • the simulation kernel can invoke the debugger on an error (or on startup) using the command-line specified by the debugger-attach-command option.

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:

  • Feature: Animation filters (right-click on any message, and select "Exclude messages like from animation" from the context menu.)

  • Feature: "Debug Next Event" (Ctrl+F9). It causes the simulation program to stop in the debugger just before entering the handleMessage() call.

  • 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.)

  • Fix: the "Filter Window Contents" dialog could lose state

  • Source cleanup (consistent naming style for Tcl procedures)

IDE:

  • Use Eclipse 4.3 as base platform

  • 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.

Improved support for C++11, Mac OS X:

  • 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).

  • Added proper support for cross-compilation using ./configure --host=i686-w64-mingw32

  • Updated install instructions for OS X 10.9 Mavericks. Specifically, gdb is no longer distributed with OS X; users are expected to install it themselves from MacPorts, and digitally sign it.

  • 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

OMNeT++ 4.3.1 (Sept 2013)

The IDE was made more friendly to first-time users:

  • When the IDE is started with an empty workspace (e.g. on first-time launch), it offers the user the following options: (1) Import the OMNeT++ sample simulations into the workspace; and (2) Download and install the INET Framework.

  • 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.)

Further IDE improvements:

  • 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)

  • Ability to import sample projects even if workspace is different from omnetpp/samples

  • Trying to launch a closed project will now offer opening it

  • NED documentation generator: fixed #672 (Illegal group reference error)

  • Changed default appearance of the main welcome page to be more user friendly

  • Some other bug fixes

OMNeT++ 4.3 (March 2013)

IDE:

  • Updated to Eclipse 3.8.2.

  • The CDT debugger no longer stops at the main() function by default.

  • The budnled gdb is downgraded to 7.4

Tools:

  • The configure script now correctly detects the X headers on Mac OS X 10.8.

OMNeT++ 4.3rc1 (Jan 2013)

IDE:

  • Analysis tool: added support for computed scalars. Read the updated the User Guide for further details.

  • Analysis tool: added Logarithmic X axis option to scatter chart.

  • Added NED editor support for named channels.

  • Added support for opening files from the command line, i.e. use: $ omnetpp Aloha.ned

  • Added full screen mode (Ctrl-Shift-F11).

  • Usability improvements in the Analysis Tool.

  • 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)

  • Added pretty printing of STL containers (std::map, etc), simtime_t and other objects to the debugger; see the updated User Guide for details.

  • Updated the bundled MinGW (GCC, linker and GDB).

  • Updated to Eclipse 3.8.1; the IDE now requires Java 1.6+.

NED:

  • Added named channels support, e.g. "…←→ eth1: EthernetChannel ←→…", with the purpose of making it easier to address channel objects when assigning parameters from ini files. Channel definitions can now specify a default name (via the @defaultname property), too.

Sim:

  • Added the cPatternMatcher and cMatchExpression utility classes to the API. cPatternMatcher is a glob-style pattern matching class. cMatchExpression builds on top of cPatternMatcher and lets you combine patterns with AND, OR, NOT for matching fields of arbitrary objects.

  • Added hasEncapsulatedPacket() to cPacket.

  • Implemented calculateWeightedSingleShortestPathsTo() in cTopology.

  • Signals implementation now allows static initialization of simsignal_t variables.

  • 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.

OMNeT++ 4.2.2 (March 2012)

OMNeT++ 4.2.1 (Jan 2012)

OMNeT++ 4.2 (Nov 2011)

Several bug fixes.

OMNeT++ 4.2rc2 (Nov 2011)

Documentation:

  • Revised and significantly expanded the "C++ Development" chapter in the User Guide to better assist model developers; smaller improvements in other chapters

Tools:

  • Updated MSYS and MinGW binaries in the Windows distribution.

  • 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).

  • Enabled pretty-printing of variables in gdb (see below)

IDE:

  • Better C++ debugging experience: std::string, std::vector, std::map and other standard classes as well as simtime_t are now displayed in a meaningful way; simulation objects (cObject) display their full paths. This functionality is enabled by gdb pretty printer extensions written in Python, and is thus available for command-line gdb debugging too. For activating the pretty printers, see misc/gdb/README.

  • NED documentation generator improvements: better-looking tables in the generated documentation; running Doxygen is now cancellable; etc.

  • Dropped PowerPC support for the IDE because Mac OS X 10.7 no longer supports this architecture.

Sim:

  • Refactored operator= and copy constructor in all classes. Now they delegate to the same function in the super class, and the common part of the two is factored out to private copy() functions.

  • Fixed all warnings to make it compile using -Wall -Werror.

  • Coroutines used for 'activities' are now implemented using the swapcontext() POSIX call (if it is available on the system).

Sample simulations:

  • Database example revived. It demonstrates using database as configuration source, as storage for output scalars and vectors, and as source of network topology. Currently it works with MySQL.

Countless bug fixes and smaller improvements.

OMNeT++ 4.2rc1 (Aug 2011)

Ini files:

  • Ini files: iterations (${…}) can now refer to other iteration variables, 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.

  • Incompatible change: In the constraint= configuration option, variables now be surrounded with parens (to ensure precedence after the textual variable substitution). For example, the expression x+y<10 must be changed to $x+$y<10, or for greater safety, to ($x)+($y)<10.

  • Parallel iteration: it is now supported to use named iteration variables and parallel iteration together ($…!bar syntax.) This was not supported previously.

  • Some iteration-related error messages have been improved to provide more context.

Sim:

  • Result filter/recorder interfaces and registration macros made public (moved to src/sim), so that users can contribute their own result filters and recorders. Files: cresultlistener.h, cresultfilter.h cresultrecorder.h. Result filters have to be subclassed from cResultFilter or the more specific cNumericResultFilter or cObjectResultFilter base classes and registered with the Register_ResultFilter() macro; result recorders have to be subclassed from cResultRecorder or the more specific cNumericResultRecorder, and registered with the Register_ResultRecorder() macro. After that, the new filter or recorder can be used in the source= and record= attributes of @statistic, and with the **.result-recording-modes configuration option.

  • The Define_Function() macros have been renamed to Define_NED_Math_Function(). For backwards compatibility, the old macro definitions remain, but issue a deprecation warning. Note that the preferred way of defining new NED functions is now the Define_NED_Function() macro.

  • 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 more standards compilant "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:

  • opp_run: bugfix: release-mode simulation models compiled as shared libraries could not be run using a debug-mode opp_run program (they either crashed or reported that a module was not registered with the Register_Module() macro.) As part of the fix, a new opp_run_release program has been introduced, and opp_run (which is now always compiled as debug) delegates to it when necessary. Due to makefile changes related to the fix, you may need to re-create the makefiles of your simulation when upgrading to OMNeT++ 4.2. (You only need to do that when working on the command line. The IDE automatically recreates the makefiles, so no action is needed on your part if you are using only the IDE.) See src/envir/ChangeLog for details of this change.

  • Implemented number filter expressions using multiple inputs for statistics source expressions. For example:

    @statistic[dropRate](source="count(packetDropped)/count(packetSent)");
  • opp_msgc: improvement: announcements and type definitions now observe whether they are above the namespace declaration (=outside the namespace) or below it (=inside the namespace). This change makes it consistent with cplusplus blocks that had this behavior for quite some time. A related improvement is that type lookup in namespaces has been modified to make it possible to use unqualified names when declaring fields. See src/nedxml/ChangeLog for details.

  • Akaroa support improved; samples/aloha/akaroa.ini was added as example

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:

  • Upgraded to Eclipse 3.7

  • 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.

  • Improvement on the Manage Build Configurations dialog: newly created build configurations are now configured, by copying the source entries from one of the existing build configurations.

  • Project Makemake Options property page: overhaul for better usability.

  • Documentation generator: turn on JAVADOC_AUTOBRIEF in newly generated doxy.cfg files. (When this option is on, there is no need for @brief in C++ doxy comments; instead the first sentence of the comment is taken automatically as brief description.)

  • 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.

  • Removed Animation Player as it was only a "technology preview" bundled with the beta releases to gather feedback from the user community. The animator is scheduled to appear in the next major OMNeT++ release.

OMNeT++ 4.2b2 (May 2011)

Most important feature: "Project Features" (see below).

NED:

  • Added support for conditional submodules. Syntax:

    udp: UDP if needsUDP {...}
    tcp: <tcpType> like ITCP if needsTCP {...}
  • 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.

  • Implemented default value for parametric submodule and channel types. NED now supports the following syntax:

    mobility: <default("NullMobility")> like IMobility;

    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:

    tcp: <default(firstAvailable("TCP_lwIP", "TCP_NSC", "TCP"))> {..}

    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:

  • The "type-name" per-object configuration option (**.typename=) has been renamed in to "typename", for consistency with the similar new NED feature.

Sim:

  • Implemented varargs support for NED functions. If the signature (see Define_NED_Function() and Define_NED_Function2() macros) ends in ", …", then the function will accept any number of additional arguments of any type. At runtime, the implementation has access to both the actual number and types of args. When passing extra args, optional arguments (those marked with '?' in the signature) must all be present, i.e. varargs can only come when all typed args are there.

IDE:

  • Upgraded to Eclipse 3.6.2

  • Implemented the "Project Features" feature, which makes it possible to disable unused parts ("features") of a project to reduce compilation time and complexity. It has been invented to help INET Framework users and developers deal with the growing size of the framework. Features are described in the project’s .oppfeatures file, authored by INET developers. Users can activate/deactivate features in the Project Features page of the Project Properties dialog (this page is directly accessible from the Project menu and from the Build Configurations submenu of the project’s context menu in Project Explorer). Features map to NED packages and C++ source folders; disabling a feature maps to NED package exclusion, and folder exclusion in CDT (C++ Development) configuration. Features can also define C/C++ symbols (for #ifdefs), and extra libraries to link with. At build time, the IDE checks the project’s configuration (NED, CDT) and if it is inconsistent with the selected features, it offers fixing it. Features can also be used from the command line by exporting Makefiles (or opp_makemake commands) that reflect a particular enablement of features.

  • 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.

  • Animation effects refined, e.g. packet transmission on a datarate channel.

  • 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.

  • Improved content assist: per-object configuration options are now filtered by the type of object that the key refers to; for example, if you type **.ppp[*].txPkBytes.<Ctrl+Space>, the editor will know from the NED files that txPkBytes is a statistic, and offer completions accordingly.

  • Content assist: different types of completions (modules, parameters, statistics, configuration options, etc) are now marked with icons.

  • 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…

  • New option for template.properties: preRunTemplate=<fti-file-name>. Example: preRunTemplate = main.fti. The option causes the given template file to be evaluated for its side effects, just after the user hits Finish but before any file is copied or template is evaluated. It is not allowed to produce text output, but the variables it sets will be substituted into other template.properties variables, and will also be available in other template files. (Note: all other templates are run in isolation, and cannot change variables for other templates!) The preRunTemplate option is the only way to programmatically set the value of makemakeOptions and similar template.properties options.

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.)

IDE/Sequence Chart and Event Log:

  • Added show/hide options for arrows that represent mixed dependencies. (Such arrows are drawn when the sequence chart is filtered, and represent e.g. a sequence of message sendings and self-messages)

  • Eventlog: enhanced performance of event tracing filter

  • 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

OMNeT++ 4.2b1 (Feb 2011)

Partial list of changes since 4.1 (see ChangeLog files in individual folders for a more complete list):

Simulation runtime:

  • Removed #include <winsock.h> from <platdep/timeutil.h>; the reason is that it conflicted with lwIP code recently integrated into INET. <platdep/sockets.h> still includes <winsock.h>, but now <platdep/sockets.h> (and <platdep/timeutil.h>) MUST precede <omnetpp.h> in all source files.

  • Ini files: implemented multiple inheritance for sections. Syntax:

    [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 $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.

  • NED: fixed deep parameter assignments: parameter references were interpreted in the wrong context. Deep parameter assignments are when an inifile-like pattern is used to name the parameter(s) to be set, as in:

    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.

  • Eventlog recording: .elog file format change: message creations and duplications (cloning) are now recorded; MC (ModuleCreated) entries now precede GC (GateCreated) entries. IMPORTANT: The sequence chart in the IDE will only work on .elog files in the new format, existing event logs need to be re-recorded!

IDE/Animation Player:

  • This is a new component in the IDE, you can access it by right-clicking an .elog file and selecting "Open With / OMNeT++ Animation Player" from the context menu. This is a preliminary implementation (Technology Preview) not yet optimized for large files, the practical maximum file size it can handle is about 10MB.

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.

  • Graphical Editor displays self-connections as arcs in the module’s upper right corner.

  • The resize/move feedback figures have been changed from a simple outline to translucent blue.

  • Added a 'Properties' dialog that can edit one or several objects at a time, and allows you to change graphical and type information. It also has a preview panel.

  • 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:

  • Support for inifile improvements in this release, namely multiple section inheritance and better parsing for iteration variables

  • Performance improvements: inifile is now analyzed in the background so that it does not block the UI, and features that need its results (hover text, content assist, etc) have a timeout how long they are willing to wait for it (see bug #132 for details). It is now also possible to disable inifile analysis. Further performance and UI responsiveness improvements are planned.

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:

  • Added tilde notation as an alternative to automatic hyperlinking of module names in comments. The latter was often too aggressive (e.g. linking to the IP module in the phrase "IP address" is wrong). Automatic hyperlinking can now be turned off in the generator, and then the user is expected to mark words to be hyperlinked with a tilde: "the ~IP module". The INET Framework has already been converted to use the tilde notation.

  • Added Javascript to autoload frameset page if a content page is opened by itself. This is useful when URLs to specific content pages are posted on the mailing list or sent over email.

  • 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:

  • Parallel simulation: Placeholder modules are now displayed with a semi- transparent icon (or if it’s a rectangle or oval, with dotted border).

  • Fix (bug #248): compute coordinates (and sizes) in double and not int; necessary if background scaling (bgs display string tag) is set up.

  • Better choice of default user interface font, especially on Linux.

  • 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.

  • Minor: menu items have been changed to title case

  • 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.

  • Updated base system to Eclipse 3.6.1

  • Added a detailed IDE change log file doc/IDE-Changes

Several bugs have been fixed; you can see the detailed list at: http://tinyurl.com/omnetpp42b1-fixes