OMNeT++ Discrete Event Simulation System
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Copyright (c) 1998-2001 Andras Varga.

OMNeT++ is subject to the license described in the "License" file.
You may as a special exception elect to use the GNU General Public License
(see the "GPLElect" file). Please contact me if you wish to negotiate an
alternative license.


What is OMNeT++?
~~~~~~~~~~~~~~~~

OMNeT++ is an object-oriented modular discrete event simulator.
An OMNeT++ model consists of hierarchically nested modules which
communicate though gates and connections. The user defines the
module structure in the NED language.

The modules on the lowest level (termed "simple modules") contain
the algorithms. Those are written in C++ and use the simulation
object library. Simple modules appear to execute as something like
threads within a simulation. (In fact they use non-preemptive
scheduling; they are implemented as coroutines).

OMNeT++ is written in C++ and it is portable: it runs on any platform
where there's a C++ compiler. It has a Tcl/Tk user interface which is
supported on under Unix/X and Win32 platforms. There's also a platform-
independent command-line user interface for batch execution.

OMNeT++ has a graphical topology editor called GNED and also a tool
called Plove for analyzing and plotting simulation output. Both tools
are written using Tcl/Tk.

OMNeT++ contains support for parallel simulation, using either
Conservative or Statistical Synchronization. Communication can use
the MPI (Message Passing Interface) or the PVM (Parallel Virtual
Machine) libraries.

OMNeT++ Home Page: http://www.hit.bme.hu/phd/vargaa/omnetpp.htm


OMNeT++ is PhDware!
~~~~~~~~~~~~~~~~~~~
OMNeT++ is supposed to help its author (me) get a PhD degree. Which means
I need as many references as possible to my work! If you use OMNeT++ for your
research and happen to publish the results in some form, please include
a reference to OMNeT++ and LET ME KNOW!

In any case, if you find OMNeT++ useful for your work, I'd be more than happy
learn about that! Just send me a short mail. Thanks in advance!


What you'll find in the OMNeT++ directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If you installed the source distribution, the omnetpp directory on your system
should contain the following subdirectories. (If you installed a precompiled
distribution, some of the directories may be missing, or there might be
additional directories, e.g. containing software bundled with OMNeT++.)

The simulation system itself:

omnetpp/              OMNeT++ root directory
   bin/               OMNeT++ executables (GNED, nedc, etc.)
   include/           simulation kernel header files for models
   lib/               library files
   bitmaps/           icons that can be used in network graphics
   doc/               manual (PDF), readme, license, etc.
       html/          manual in HTML
       api/           API reference in HTML
   src/               OMNeT++ sources
       nedc/          NED compiler
       sim/           simulation kernel
            std/      files for non-distributed execution
            mpi       files for distributed execution using MPI
            pvm/      files for distributed execution over PVM
       envir/         common code for user interfaces
       cmdenv/        command-line user interface
       tkenv/         Tcl/Tk-based user interface
       gned/          graphical NED editor
       plove/         output vector analyzer and plotting tool
       utils/         makefile-autocreator etc
   test/              regression tests for the simulation kernel

There is a tutorial, contributed by Nick van Foreest:

omnetpp/
   tutorial/          the tutorial document
       queues/        sample simulation that supports the tutorial
       doc_src/       the Latex sources for the tutorial doc

Sample simulations are within the samples directory.
Each of the sample directories contain a network description
(.ned file) and corresponding simple module code  (.h, .cc files).
Makefiles and project files are included.

omnetpp/
   samples/           directories for sample simulations
       demo/          a tour of the sample simulations
       nim/           a simple two-player game
       hcube/         hypercube network with deflection routing
       token/         Token Ring network
       fddi/          an accurate FDDI MAC simulation
       hist/          demo of the histogram classes
       dyna/          dynamic module creation (client-server network)
       dyna2/         variant of Dyna, using the experimental message subclassing
       fifo1/         single-server queue
       fifo2/         another version of fifo, now with handleMessage() and FSM
       topo/          demonstrates creating various topologies

Some tools to make it easier using MSVC with OMNeT++.

omnetpp/
   msvc/
       appwizard/     Custom AppWizard for Visual Studio (appears in File|New)
       macros/        macros like AddNEDFileToProject

There is also material contributed by people in the OMNeT++ community.
Contributed material falls under a different license from that of OMNeT++
(usually GPL).

omnetpp/
   contrib/
       emacs/         NED syntax highlight for GNU Emacs
       octave/        using Octave with OMNeT++


The example programs
~~~~~~~~~~~~~~~~~~~~

The example programs are designed to demonstrate as many of the features of
OMNeT++ as possible. (See README file in samples/ for more info.)
I recommend the following order to try them out:
      nim - fifo1 - token - hist - hcube - dyna - fifo2 - fddi
It's best to begin by running Demo, which is a tour of the other sample
simulations.


Installation
~~~~~~~~~~~~
If you're installing from a source distribution, please read one of the
following files for instructions, depending on your OS and compiler:
   Readme.Unix    -- generic Unix/Linux
   Readme.Cygwin  -- Cygwin on Windows
   Readme.MSVC    -- Microsoft Visual C++ 6.0 on NT (or W2K or XP)
For the first two, the process is not much different from the normal GNU build
and install procedure, except that you may need to edit the configure.user file
manually.


Authors and contributors
~~~~~~~~~~~~~~~~~~~~~~~~

OMNeT++ has originally been developed at the Technical University of Budapest
(BME), Department of Telecommunications (BME-HIT). The primary author is
currently not affiliated with the University.

Here's a list of the people who have or had anything to do with OMNeT++:

Principal author:
        Andras Varga            andras@whale.hit.bme.hu
                                http://www.hit.bme.hu/phd/vargaa

Advisor:
        Gyorgy Pongor           BME-HIT, pongor@hit.bme.hu
GNED contributions, 1998-99:
        Istvan Pataki           BME
        Gabor Vincze            BME
Old NED compiler, until 1993:
        Akos Kun                BME
Initial revision of JAR compiler, sample simulations; summer 1995:
        Jan Heijmans            TU Delft
        Alex Paalvast           TU Delft
        Robert van der Leij     TU Delft
New feaures, testing, new examples; fall 1995:
        Maurits Andre           TU Delft, M.J.A.Andre@twi.tudelft.nl
        George van Montfort     TU Delft, G.P.R.vanMontfort@twi.tudelft.nl
        Gerard van de Weerd     TU Delft, G.vandeweerd@twi.tudelft.nl
JAR support for distributed execution:
        Gabor Lencse            BME-HIT
Initial revision of PVM support (as final project), spring 1996:
        Zoltan Vass             BME-HIT

I'm indebted to György Pongor for supporting my OMNeT++-related work at the
university in many different ways, from organizing students to work on parts of
OMNeT++ to providing web and ftp space at the university (although I'm no longer
affiliated). Also, the original (1992) design of OMNeT++ was largely based on
his Pascal-based simulation package called OMNeT. (The ideas of message passing,
simple and compound modules, topology description language and coroutine-based
programming were all taken over from the original OMNeT.)

I'd like to acknowledge the help and support of several people who contributed
(with providing their opinions, sending bug reports/fixes, etc.) to making
OMNeT++ better and more useful for the Internet community: Richard Lyon,
Joel Sherrill, Nimrod Mesika, Dan Talayco, Y. Ahmet Sekercioglu, Brent Weech,
Ulrich Kaage, Balazs Kelemen, Alan Kennington, Niko De Bruyne, Mark Rahner,
Robert Boxall, Kontogiannis Theophanis, Dario Mariani and many others.

Thanks for Eric Wu (team of Y. Ahmet Sekercioglu, Monash University, Au.)
for creating and contributing the MPI-based parallel simulation support!

I'd also like to thank John Ousterhout and other developers for Tcl and Tk
which proved to be an extemely productive environment to build user interfaces;
to D. Richard Hipp for tree.tcl that served as a base for the tree widget in
GNED, and to Victor Wagner for balloon.tcl.

Thanks to Justin Frankel at Nullsoft for creating NSIS, the Nullsoft Installer,
which is extremely handy for creating installers on Windows. NSIS is small,
fast, flexible, and does its job very well. Without NSIS, probably there
wouldn't be an installer version of OMNeT++.


Feedback requested
~~~~~~~~~~~~~~~~~~

Remarks, opinions, suggestions, bug reports/fixes and contributions are
WELCOME! They drive OMNeT++ towards new and better releases...

Andras Varga, andras@whale.hit.bme.hu



