# OMNeT++

OMNeT++ es un simulador modular de eventos discretos de redes orientado a objetos, usado habitualmente para modelar el tráfico de redes de telecomunicaciones, protocolos, sistemas multiprocesadores y distribuidos, validación de arquitecturas hardware, evaluación del rendimiento de sistemas software y, en general, modelar cualquier sistema que pueda simularse con eventos discretos.
Esta herramienta está disponible tanto para sistemas operativos basados en UNIX como para Windows y se distribuye bajo la Licencia Pública Académica. Su versión comercial, denominada OMNEST, es desarrollada actualmente por Opensim Ltd. .

## Elementos usados en el modelamiento
### Módulos jerárquicos

Un modelo está compuesto por módulos jerárquicos, que se comunican mediante mensajes. El módulo de nivel superior se denomina módulo de sistema, el cual contiene submódulos, los cuales también pueden contener submódulos. Se puede implementar un módulo con cualquier cantidad de niveles de módulos.
Los módulos que contienen submódulos se denominan módulos compuestos. Existen también los módulos simples (elementos básicos) que contienen los algoritmos que permiten el funcionamiento del modelo. Los módulos simples se implementan en el lenguaje C++ usando la biblioteca de simulación de OMNeT++.

### Tipos de módulos

Los módulos simples y compuestos son instancias de módulos básicos denominados module «types». Estos proveen la funcionalidad básica para la implementación de módulos simples y complejos del modelo.

### Mensajes, puertas y enlaces

Los módulos se comunican intercambiando mensajes. Un mensaje puede contener una estructura compleja de datos.
Las puertas son las interfaces entre los módulos; permiten el envío y recepción de mensajes. Cada enlace es creado dentro del nivel del módulo. En un módulo se puede establecer la comunicación entre sus submódulos y él mismo.

### Modelado de transmisión de paquetes

Las conexiones pueden contener tres parámetros, que facilitan el modelamiento de redes de computadores y que también pueden ser utilizadas en otros modelos. Estos parámetros son el retardo en la propagación, el índice de error de bits y la tasa de transferencia de datos.

### Parámetros

Los parámetros son elementos que permiten personalizar el comportamiento de los módulos.

### Descripción de topologías

La estructura del modelo es definida usando el lenguaje NED.

## Construcción de modelos en OMNeT++

El sistema de simulación de OMNeT++ provee un núcleo de simulación que contiene las rutinas que controlan las simulaciones y las bibliotecas de simulación, e interfaces de usuario que son usadas para la construcción de modelos y ejecución de simulaciones.
Un modelo en OMNeT++ consiste básicamente de la descripción de la topología del modelo en el lenguaje NED, la definición de mensajes y el código de los módulos simples. Los modelos en OMNET++ tienen una estructura modular. Existen objetos básicos con una funcionalidad básica a partir de los cuales se componen módulos complejos formando una estructura jerárquica anidada.
La construcción de un modelo de simulación con OMNET++ se resume en los siguientes pasos:
* Descripción de la estructura (módulos y relaciones) del sistema mediante el lenguaje NED.
* Implementación de los módulos simples en C++.
* Generación del modelo. Se compilan los módulos y se enlazan con la biblioteca de simulación.
* Configuración de la simulación. Se especifican los parámetros adecuados para la ejecución de la simulación.

### Construcción de componentes simples y programación de los algoritmos

Los módulos simples contienen los algoritmos como funciones en el lenguaje C++. Un módulo simple permite manejar los eventos y definir los estilos de procesos haciendo uso de los diferentes conceptos de la programación orientada a objetos. Los objetos usados en la simulación son representados mediante clases escritas en el lenguaje C++. Los siguientes elementos son parte de la biblioteca de simulación de OMNeT++:
* Módulos, puertas y conexiones.
* Parámetros y mensajes.
* Clases contenedoras.
* Colecciones de datos.
* Clases estadísticas.
* Clases de detección de transiciones y detección de precisiones.

### Descripción de la estructura del modelo y el lenguaje NED

La topología de un modelo es definida usando el lenguaje NED. Éste facilita una descripción modular de una red. Así, una red puede estar compuesta por la descripción de varios componentes. Los canales, módulos simples y compuestos definidos para una red pueden ser reutilizados en la descripción de otra red.
Los archivos que contienen el código NED pueden ser generados utilizando un editor de textos o el editor gráfico incorporado. Este editor es la interfaz gráfica que permite crear, programar, configurar y simular redes de comunicaciones, sin necesidad de codificar en lenguaje NED, haciendo uso de diseños gráficos.

## Frameworks existentes en OMNeT

Algunos Frameworks con modelos para simular en OMNeT son:
* INET Framework
* Mobility Framework