What's New ========== 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() - 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 bin 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. 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.1 (December 2017) ----------------------------- This is a maintenance release. - Minor bug fixes and improvements in Qtenv. - Other minor bug fixes. - Updates to the C++ Development and Launcher chapters of the User Guide. See ChangeLogs in individual folders for details. 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 target directory intact when the one in the build 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 build (4.7.1) IDE/Build: - Makefile generator: follow changes in the command-line opp_makemake tool IDE/Launching: - The Run, Profile and Debug launch types now automatically trigger build. - The launcher now switches the project (and optionally all projects it depends on) to the appropriate build configuration if necessary: Run and Profile will perform RELEASE build, Debug will perform DEBUG build. - For Debug launch, the "_dbg" suffix is added implicitly to the target name (only for the exe files). The simulations will also load the "_dbg" versions of libraries when compiled to DEBUG. - A new "Build before launch" section was added to the Launch config dialog, which allows you to control whether to switch build configuration automatically or to ask before the build. The scope of build can also configured; options are: "None", "This project", or "Project + dependencies". - 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 only on demand. - 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 Bugs fixed: see http://dev.omnetpp.org/bugs/changelog_page.php?project_id=1 OMNeT++ 5.1.1 (May 2017) ------------------------ This release contains only minor bugfixes. - The IDE on Windows now can be started directly from a shortcut. Previously the IDE was not able to load its native library if it was started from a shortcut instead of the MinGW shell. 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 matured Qtenv that now replaces Tkenv as the default runtime GUI. - Support for smooth custom animation and video recording. - Better support for simulation campaigns in managing and performing a large number of runs and in result recording/processing. - Experimental support for SQLite-based result files. - Updated toolchain and libraries on Windows including 64-bit Windows support. - Updated Eclipse base for the IDE (Eclipse v4.6.3). For further details see the preview version announcements below. Changes since OMNeT++ 5.1 Preview 3: Result Analysis: - Data export functionality in scavetool and the IDE has been reimplemented. Currently the following export formats are available: CSV, Python source, OMNeT++ scalar/vector files, SQLite scalar/vector files. The new exporter interface allows for defining new exporters (including UI) without any change to scavetool or the Analysis Tool in the IDE, and for more flexible output formats. In scavetool, the new 'export' command replaces the now-deprecated 'vector' and 'scalar' commands. Qtenv: - Added graphical inspectors for output vectors and histograms. They are enabled for cOutVector and cStatistic-based histogram objects, i.e. they are currently not available for @statistic-based output vectors and histograms. Build: - The configure script no longer detects and tests for the presence of the 'pcap' library. If models need it, they have to implement their own method to detect and configure it. Samples: - The routing example was modified to demonstrate the new, built-in packet animation in Qtenv. Packets are displayed as arrows along the connection showing the actual packet length on the wire. Added parameter to be able to switch between cut-through switching and store-and-forward. Also added a parameter study into its omnetpp.ini. Bugs fixed: see http://dev.omnetpp.org/bugs/changelog_page.php?project_id=1 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.) Bugs fixed: see http://dev.omnetpp.org/bugs/changelog_page.php?project_id=1 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. There are now separate downloads for Linux, Windows and macOS. A fourth package labelled "core" comes without the IDE, and can be used on all other systems. 2. 32-bit Windows and Linux are no longer supported. Known Issues: 1. The manuals have not yet been updated. 2. Documentation generation on Windows is currently not working. 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 option can be used together with -c and -r . 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= 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= 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). - Note: The systemc-embedding, sockets and cqn/parsim examples are NOT working currently in the Qtenv runtime environment. If you want to run those examples please run them in either Tkenv or Cmdenv ('-u Tkenv' or '-u Cmdenv'). 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 methods 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. - The cmdenv-log-format option has been renamed to cmdenv-log-prefix. 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-precision 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- 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 . 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= 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 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. instead of ). - 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. - Signal checking has been enabled by default for debug builds. This means that all signals must be declared with @signal in the NED definition of the module type that emits them, unless check-signals=false is configured. - Channel objects made equal to modules in the sense that now they also have IDs (the getId() method was moved from cModule to cComponent, the common base class of modules and channels), and they are also registered with cSimulation. - cTopology improvements: - added factory methods for links and edges - added methods to manipulate the graph (e.g. build a graph from scratch) - Removed int8..int64 and uint8..uint64. Models should use the standard integer types from 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 Bugs fixed: see http://dev.omnetpp.org/bugs/changelog_page.php?project_id=1 OMNeT++ 4.6 (Dec 2014) ---------------------- IMPORTANT: To install OMNeT++ on OS X, you must install both the Apple Java support package (http://support.apple.com/kb/DL1572) and (Oracle) JDK 1.7 or later (from http://java.com). Tkenv: - 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 OMNeT++. - The Manual now has a new chapter that covers the testing of simulation models as well as the usage of the opp_test tool. - 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: - OMNeT++ is now using C++11 by default (-std=c++11) when models are compiled. The simulator itself does not use any of the C++11 features, so C++11 support may be disabled in configure.user. Update your models to compile properly using the C++11 standard, as later OMNeT++ versions will require C++11 compliance. - OMNeT++ 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 OMNeT++: The msys/ directory has been moved to tools/win32/, and the mingw/ directory that contains the compiler has been moved to tools/win32/mingw32/. Bugs fixed: http://tinyurl.com/omnetpp46-fixes OMNeT++ 4.5 (June 2014) ----------------------- Core: - Compound modules are now represented with cModule, and the (almost empty) cCompoundModule class has been removed. This change was made to allow simple module classes to be used for compound modules. - Added cMessagePrinter and the Register_MessagePrinter() macro. By implementing a message printer you can customize the line Tkenv prints about a packet in the log's "Message/Packet Traffic" view. In a way, message printers are analogous to Wireshark dissectors. Tkenv: - The Tkenv GUI has been redesigned for single-window mode to improve usability and user experience. Tkenv has also received a new, modern look and feel, due to the use of the Ttk widgets and a custom Ttk theme. Details: - single-window mode, with object navigator + 3 built-in inspectors that interact in a meaningful way (new inspector windows can still be opened) - keep inpector windows on top of the main window at all times - use Ttk widgets everywhere, with custom theme - this makes a huge difference in looks on all platforms but esp. on OS X - BLT no longer needed (we use Ttk instead) - inspectors are no longer tied to a single object; visited objects are remembered as navigable history (back/forward) - module graphics now remembers zoom level and settings per NED type - for each log line, the context module is now stored, and is shown as a line prefix where it makes sense (differs from event's module) - Tkenv now stores message sendings and also a clone of corresponding message objects (cMessage), and can show them in the log window - message printer classes can be contributed to customize the messages view of log windows - more concise status area that shows more information at the same time - part of the status area can be turned off to free up vertical space - timeline drawing now adapts to font size - on-demand scrollbars (i.e. they are hidden when not needed) - main menu cleanup (reorganized, removed obsolete items) - dialogs where it makes sense now remember size and location - additional hotkeys: Ctrl+Plus/Minus for Zoom, Ctrl+F5 Run Until, Ctrl+Q Quit, etc. - OS X: use Command key for hotkeys instead of Ctrl - countless other, smaller improvements Other: - 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 OMNeT++ 4.4.1 (Feb 2014) ------------------------ Bugs fixed: http://tinyurl.com/omnetpp441-fixes 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[](type=). 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= 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-" 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. It adds the following new configuration options: debugger-attach-on-startup=, debugger-attach-on-error=, debugger-attach-command=, debugger-attach-wait-time=