New features introduced in this release, in nutshell: enhanced wildcard resolution in omnetpp.ini; direct support for XML config files via the "xml" NED parameter type; Cmdenv now lets you choose which modules' ev output you want to print; plugin interface for using configuration data sources other than omnetpp.ini. Several improvements in opp_neddoc and opp_makemake (hi Daniel!), and some bugfixes. Potential incompatibility: note that because the resolution of "*" has changed (it no longer matches "."), you may need to revise your existing omnetpp.ini files. [no longer available for download, get more recent versions instead]

Wildcard resolution in omnetpp.ini: I implemented the proposal posted to the mailing list earlier.  "*" doesn't match dot "." any more, so oddities like foo[*] matching foo[1].bar[5] will not occur any more. The new wildcard "**" will match anything, so you'd write **.buffersize if you wanted to set the buffersize parameters of all modules at any level of the hierarchy. Support for numeric ranges has been implemented as well: node[5..10], node[5..], node[..10] will match what you think they will, and node_{9..12} will match modules named node_9, node_10, node_11 and node_12.

To alleviate the pain of migration, you can temporarily revert to old omnetpp.ini behaviour by adding the

#% old-wildcards

line at the top of your old ini files.

Support for XML config files will be described in a separate article, here I'm just giving a brief overview. To have access to an XML config file from a simple module, first you'd add a module parameter in the NED file with the new NED type "xml". Then you'd assign the parameter from omnetpp.ini (though you could also assign it from a NED file, just as with any other parameter type):

[Parameters]
**.interface[*].config = xmldoc("conf.xml")

If you wish to refer to an element inside a larger XML document, you can do that using an XPath-like notation. The following example finds the third interface element within an interfaces element whose parent is the root element called config.

[Parameters]
**.interface[*].config = \
   xmldoc("all-in-one.xml", "/config/interfaces/interface[2]")

From the C++ code you'd access that element like this:

cXMLElement *rootelement = par("config").asXML();

The cXMLElement class provides a DOM-like access to the XML document. You can then navigate the document tree, extract the information you need, and store it in variables or your internal data structure. The document tree is immutable (configuration info need not be modified), and the system takes care that "conf.xml" is read only once no matter how many modules actually refer to it. Validation can be done by the underlying parser (if it's a validating parser of course), based on the (optional) DTD or Schema declaration in the document itself. (There are several excellent tutorials on the web for learning about XML technologies.)

Cmdenv now lets you control which modules' ev output you want see when express-mode=false and module-messages=true. The configuration setting is: module-name.ev-output=true/false, in the [Cmdenv] omnetpp.ini section (the default is true for all modules). The following example prints only output from modules named "tcpdump":

[Cmdenv]
module-messages=true
**.tcpdump.ev-output=true
**.ev-output=false

This has no effect on output from finish() which is always fully printed.

In previous versions, configuration had to come from ini files. Now a cConfiguration interface (abstract class) has been added which serves as plugin interface, and makes it possible to use different data sources such as database. It works similarly to other plugin interfaces: you implement the class which deals with the database, register it via Register_Class(), then select it from a (boot-time) omnetpp.ini:

[General]
configuration-class="MyDatabaseConfigReader"

opp_neddoc now supports the @author, @date, @see, @todo, @bug, @since, @warning, @version tags in NED comments. Contents of file pages now contains the whole file listing, and adding source code listing to other pages can be turned off from the command line.

opp_makemake now supports the "-x" flag which is necessary for linking with object files or libs outside your control: -x turns off requiring a .tstamp file in those directories.

To learn more about the changes in any OMNeT++ component, please check the ChangeLog file in the corresponding source directory.