INTRODUZIONE AD OMNET++ Fabrizio Ronci Roma, 8 gennaio 2010
GENERALITÀ OMNET++ è un ambiente di simulazione di reti: Modulare Ad eventi Orientato agli Oggetti (in C++) Open Source È utile se: si vogliono modellare reti di comunicazione fisse e wireless si vogliono modellare protocolli di comunicazione si vogliono modellare reti di code si vogliono in generale modellare sistemi per i quali è applicabile una simulazione ad eventi discreti, ovvero in cui il sistema e le sue parti possono essere fatte corrispondere ad entità che fra loro comunicano scambiandosi messaggi
PARTICOLARITÀ OMNET++ NON è un simulatore MA è un'infrastruttura di simulazione, composta da: Un motore ad eventi discreti (kernel), normalmente non modificato dallo sviluppatore Una libreria di classi C++, da cui normalmente lo sviluppatore estende le proprie Lo sviluppatore deve: sia descrivere il modello della simulazione sia descrivere una o più simulazioni parametrizzate
MODELLI E SIMULAZIONI Un modello viene descritto per mezzo di file .ned (NEtwork Description Language) in termini di: moduli (modules) accessi (gates) connessioni (connections) messaggi (messages) Le simulazioni vengono descritte per mezzo di file .ini nelle quali vengono specificati i parametri di moduli e connessioni e le caratteristiche della simulazione (durata della simulazione, …) SVANTAGGIO: questo meccanismo è rigido e spesso è necessario adottare metodi al di fuori di OMNET++ per ottenere quello che si vuole
MODULI I moduli (i rettangoli) possono essere semplici o composti; La rete viene considerata un modulo composto. Le connessioni (le frecce) consentono lo scambio dei messaggi tra i moduli (possono essere anche monodirezionali) Gli accessi (i quadratini) sono i punti di ancoraggio delle connessioni e possono essere in, out o inout VANTAGGIO: l’annidamento (nesting) dei moduli è senza limiti (la gerarchia delle connessioni è ad un solo livello) SVANTAGGIO: avere tanti nodi formati da moduli composti fortemente annidati impedisce di portare a termine la simulazione
MESSAGGI I messaggi sono composti da attributi e da una qualunque struttura di dati realizzabile in C++. I messaggi sono fondamentali in OMNET++ perché realizzano gli eventi. I messaggi possono essere inviati dai moduli, o attraverso accessi e connessioni, oppure anche direttamente, passando per il kernel. Con i messaggi possono essere modellati sia elementi concreti nelle comunicazioni (trame, pacchetti, bit), sia elementi logici (ad esempio la fine dell’attività di un modulo).
DOCUMENTAZIONE OMNET++ è relativamente giovane e ci sono delle ambiguità di denominazione: il prototipo di modulo viene chamato – ma non sempre – tipo di modulo (module type) l’istanza di un tipo di modulo viene chiamata modulo (module) il prototipo di connessione viene chiamato – quasi sempre – connessione (connection) o collegamento (link) l’istanza di una connessione viene chiamata – quasi sempre – canale (channel) certe volte gli accessi (gates) vengono chiamati porte (ports), raramente interfacce (interfaces) la libreria di classi (class library), in determinati contesti, viene chiamata libreria di componenti (component library) ed in tal caso spesso i moduli, cioè i tipi di modulo, vengono chiamati componenti (components)
INFRASTRUTTURA Tralasciando il kernel, l’infrastruttura di simulazione è costruita intorno alla libreria di classi: moduli, accessi, connessioni parametri messaggi classi contenitore (code, vettori, …) classi di raccolta di dati classi di stima delle distribuzioni e per la statistica classi per la rivelazione dei transitori e per la rivelazione dell’accuratezza dei risultati Fa parte dell’infrastruttura anche il programma opp_msgc che permette di tradurre il formato dei messaggi in linguaggio C++
IMPLEMENTAZIONE La base dello sviluppo è la scrittura del comportamento (behaviour) dei moduli semplici Sono possibili due tipi di comportamento: event – driven process – style Normalmente lo sviluppatore realizza: il primo tipo di comportamento scrivendo la funzione handleMessage() nel (tipo di) modulo (OPNET, ma…) il secondo tipo di comportamento scrivendo la funzione activity() nel (tipo di) modulo (SIMULA, PARSEC, JAVA Sims) È possibile, ma difficile, realizzare i due comportamenti invertendo la tipologia di funzioni. Sarebbe bizzarro realizzare moduli con entrambe le funzioni; la scelta viene comunicata al kernel. I creatori di OMNET++ consigliano il più possibile il primo approccio
REALIZZAZIONE Per realizzare una simulazione lo sviluppatore deve aver scritto: i file .ned di descrizione del modello i file .msg di descrizione dei messaggi i file .h e .cc di implementazione dei moduli semplici i file .ini di descrizione della simulazione
STRUMENTI I principali strumenti a disposizione dello sviluppatore sono: l’Ambiente di Sviluppo Integrato (IDE) basato su Eclipse gli Ambienti di Interfaccia Utente uno a riga di comando, l’altro grafico i FrameWork librerie di componenti realizzate dalla comunità OMNET++ (il più usato è INET)
CRITICITÀ L’IDE è fornito dalla versione 4.0 e funziona bene (solo) sotto Linux. L’accesso ai parametri interni ai moduli a run-time è complesso. L’affidabilità dei framework non è totale. Solo il framework INET è ben documentato. La costruzione dei file .ned e .ini può richiedere l’uso di linguaggi di script (python); si deve imparare il linguaggio NED. Le prestazioni del sistema in funzione della scalabilità sembrano degradare più velocemente di quanto dichiarato. Il sistema è open-source e relativamente giovane. Alcune delle funzionalità avanzate (simulazioni parallele, uso dei generatori di numeri casuali, uso delle proprietà, …) sono mal documentate e quindi difficilmente accessibili in fase di primo approccio.
POSITIVITÀ L’IDE si basa su un ambiente, Eclipse, noto ed intuitivo. Il framework INET, relativamente alle reti fisse, appare affidabile. Dosando l’utilizzo di framework e di parti sviluppate in proprio si può modulare il livello di dettaglio relativamente agli aspetti che interessano di più. La simulazione può avvenire a livello di bit (anzi, questo è il default). L’interfaccia di utente grafica è molto funzionale e comunque lo sviluppatore ha la possibilità di arricchirla. Esiste una comunità di sviluppatori con mailing-list e forum; di solito i power users di questa comunità sono i possessori/manutentori dei framework. Il sistema è open-source e quindi gratuito. Rispetto ad OPNET il ruolo delle FSMs, che comunque sono possibili mediante classi apposite della libreria, è svolto dall’IDE.
PRINCIPALI FRAMEWORK
Utilizzo dell’editor NED in ambiente IDE SCREENSHOTS (1/3) Utilizzo dell’editor NED in ambiente IDE
SCREENSHOTS (2/3) Diagramma di Sequenza
Ambiente di Interfaccia Grafica di Utente SCREENSHOTS (3/3) Ambiente di Interfaccia Grafica di Utente
INTRODUZIONE AD OMNET++ OSSERVAZIONI & DOMANDE