CNET: simulador de redes de conmutación de paquetes

download CNET: simulador de redes de conmutación de paquetes

of 26

Transcript of CNET: simulador de redes de conmutación de paquetes

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    1/26

    Cn e t

    Simulacin de redes deconmutacin de paquetes

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    2/26

    __________________________Pgina: 2

    SIMULADOR DE REDES CNET ........................................................... .................................................3

    1. INTRODUCCIN ...............................................................................................................................3 2. FICHERO DE TOPOLOGA..................................................................................................................4

    2.1. Atributos de nodo.......................... ........................................................... .............................52.2. Atributos de link............................ ........................................................... .............................7

    3. PROGRAMACIN CONDUCIDA POR EVENTOS ...................................................................................9 3.1. Lista de eventos........................................................... .......................................................... 93.2. Funciones para el manejo de eventos..... ........................................................... ...................93.3. Ejemplo de manejador de eventos ........................................................... ...........................10

    4. TEMPORIZADORES.........................................................................................................................11 5. FUNCIONES PROPORCIONADAS POR CNET......................................................................................12

    5.1. Capa Aplicacin ......................................................... ........................................................ 125.1.1. Descripcin ..................... ..................... ..................... ...................... ..................... ..................... ... 125.1.2. Funciones .................... ...................... ..................... ..................... ..................... ...................... ...... 14

    5.2. Capa Fsica.........................................................................................................................155.2.1. Descripcin ..................... ..................... ..................... ...................... ..................... ..................... ... 155.2.2. Transmisin segura a travs de la capa fisica......... ..................... ..................... ...................... ...... 165.2.3. Funciones .................... ...................... ..................... ..................... ..................... ...................... ...... 16

    5.3. Temporizadores .......................................................... ........................................................ 175.3.1. Descripcin ..................... ..................... ..................... ...................... ..................... ..................... ... 175.3.2. Funciones .................... ...................... ..................... ..................... ..................... ...................... ...... 18

    5.4. Funciones para el manejo de eventos..... ........................................................... .................195.5. Funciones para traceado..................................................... ...............................................195.6. Funciones para deteccin de errores ...................................................... ...........................195.7. Funciones varias........................... ........................................................... ...........................20

    6. COMPILACIN ...............................................................................................................................21 7. TIPOS DENODO, EVENTOS Y ERRORES .........................................................................................25

    7.1. Tipo CnetNodeType .................................................... ........................................................ 257.2. Tipo CnetEvent ........................................................... ........................................................ 257.3. Tipo CnetError ........................................................... ........................................................ 26

    8. INFORMACIN ADICIONAL.............................................................................................................26

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    3/26

    __________________________Pgina: 3

    SIMULADOR DE REDES CNET

    1. Introduccin

    El simulador de redes Cnet est desarrollado en torno al Modelo de Referencia OSI,permitiendo la experimentacin y diseo de las capas intermedias del modelo de forma que losNiveles Fsico y Aplicacin son proporcionados por el propio Simulador. No obstante, laherramienta posibilita que programadores expertos puedan desarrollar sus propios NivelesFsico y Aplicacin, de forma que se puedan aportar nuevas funcionalidades o caractersticas.

    Cnet soporta tanto los modos de visualizacin grfico, bajo entorno Tcl/Tk y modo devisualizacin ASCII (texto).

    En el modo grfico (Tcl/Tk), Cnetproporciona una representacin global de la red, en formatogrfico, visualizando los nodos (host/routers) o enlaces (links), adems de permitir unainteraccin con la simulacin a travs de la interface grfica, permitiendo la modificacin dediferentes atributos de los nodos y/o links, en tiempo de ejecucin. Haciendo clic de ratn sobrelos diferentes nodos y enlaces se despliegan otras ventanas, mostrando sus atributos del nodo,y sus datos estadsticos de simulacin. De la misma forma, los atributos por defecto de la red

    pueden ser modificados mediante la seleccin o cambio de atributos globales, e incluso,provocar una re-inicializacin de un nodo, fallo de hardware, etc.

    Una arquitectura de la simulacin en Cnet se define mediante dos ficheros: fichero detopologay fichero de protocolo.

    Fichero de Topologa: Fichero de texto donde se describen los diferentes atributos decada nodo, links, as como las diferentes conexiones entre los nodos de la red. Ladescripcin de atributos puede ser de forma particular para cada nodo (o link) o de formageneral para todos los elementos.

    Figura 1. Modelo de Referencia OSI

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    4/26

    __________________________Pgina: 4

    Fichero de Protocolo: Fichero de texto de cdigo ANSI-C donde se describe elprotocolo a implementar, utilizando procedimientos, funciones y constantesproporcionados por Cnet, as como cdigo de usuario en lenguaje C para desarrollosde protocolos particulares.

    2. Fichero de topologaPasamos a definir algunos conceptos que se utilizarn acontinuacin:

    Nodo:Cada uno de los elementos (dispositivos activos) de lared.

    Link (Enlace). Punto del nodo por donde conecta con elmedio de transmisin.

    Los nodos pueden ser de dos tipos: hosty router

    Los dispositivos tipo host son los que aceptan protocolos deusuario, estn provistos de todas las capas, y en concreto de laCapa Aplicacin, cuya misin es generar mensajes para enviarlosa la Capa Aplicacin de otros host de la red.

    La capa Aplicacin nunca genera mensajes para el propio nodo.

    Como se ha mencionado anteriormente, los nodos estn provistos de links (enlaces) puntos deunin del nodo a los diferentes medios de transmisin. Los links se numeran a partir de 0 hastael n de links fsicos reales del nodo, no obstante, el primer link 'real' es el 1, ya que el valor 0se utiliza como LOOPBACK(retorno).

    Figura 2. Ejemplo de representacin grfica de topologa.

    Figura 3. Topologa Multipunto vsPunto-a-Punto.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    5/26

    __________________________Pgina: 5

    Cnet slo soporta topologas formadas por nodos con enlaces punto-a-punto, no estandopermitidos enlaces multipunto (difusin).

    Tanto los atributos de link como los atributos de nodo pueden ser definidos en el fichero detopologa de forma global o de forma local. Los atributos globalesson definidos en el cuerpoprincipal del fichero de topologa y afectan a todos y cada uno de los elementos de la red:nodos y links. Los atributos locales son declarados individualmente para algn elemento(nodo o link), utilizando para ello llaves a modo del Lenguaje C, de forma que, un atributodeclarado localmente afecta nica y exclusivamente al elemento donde ha sido definido.

    messagerate = 100msminmessagesize = 100 bmaxmessagesize = 5 kb

    host Dublin {x=97, y=123ostype = "linux"link to Paris {

    propagationdelay = 50ms

    }link to London}host Paris {

    x=194, y=255link to Dublin {

    propagationdelay = 150ms}link to Amsterdam {

    propagationdelay = 100ms}link to Vienna {

    propagationdelay = 200ms}link to Madrid {

    propagationdelay = 80ms}link to London {

    propagationdelay = 80ms}

    }host London {

    x=189, y=102link to Dublinlink to Paris

    }host Amsterdam {

    x=294, y=176link to Paris {

    propagationdelay = 125ms}link to Vienna {

    propagationdelay = 100ms}link to Munich {

    propagationdelay = 100ms

    }}host Vienna {

    x=546, y=334link to Amsterdamlink to Venicelink to Innsbrucklink to Munich

    }

    host Rome {x=442, y=576link to Venicelink to Corsicalink to Innsbruck

    }host Madrid {

    x=74, y=380link to Parislink to Corsica

    }host Munich {

    x=461, y=145link to Amsterdamlink to Viennalink to Berlin

    }host Venice {

    x=487, y=416link to Viennalink to Rome

    }host Innsbruck {

    x=404, y=356link to Viennalink to Rome

    }host Corsica {

    x=264, y=455link to Romelink to Madrid

    }host Berlin {

    x=639, y=238link to Munich

    }

    2.1. Atributos de nodo

    Los atributos de los nodos se pueden mantener con los valores por defecto que proporcionaCnet, o bien pueden ser declarados en la simulacin, para ello es necesario especificarlos en elFichero de Topologa. Adems, algunos atributos, tanto de nodo como de links, pueden sermodificados en tiempo de ejecucin. Algunos ejemplos de atributos son:

    Tasa de generacin de mensajes Tamao mximo / mnimo de mensajes Tasa de fallos / recuperacin de nodos Etc.

    Como los atributos hacen referencia, bsicamente, a unidades de tiempo, velocidad, etc., esnecesario definir unos tipos bsicos de uso en Cnet.

    AtributosGlobales

    AtributosLocales

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    6/26

    __________________________Pgina: 6

    Los tiempos son manejados y almacenados en formato de milisegundos. En la declaracinde atributos se pueden utilizar los sufijos: ms y s

    Los tamaos de datos son manejados y almacenados en formato de bytes. En ladeclaracin de atributos se pueden utilizar los sufijos: bytes, Kbytes, KBy MB.

    Los atributos booleanos pueden tomar los valores: true, falsey toggle.

    Los valores de stringvan entre comilla doble "".

    Atr ibuto de

    Nodo

    Tipo

    de

    Dato

    Significado Ejemplo

    address integer La direccin de cada nodo dentro de la red. Este valor esnico para cada nodo

    address = 238

    compile string Define el nombre del fichero fuente de protocolo paracada nodo.

    compile = protocol.c stats.c -lm"

    messagerate time La razn a la que la Capa Aplicacin puede generarmensajes nuevos para enviar.

    messagerate = 100ms

    messagerate = 2s

    minmessagesize bytes Tamao mnimo de mensaje generado por CapaAplicacin

    minmessagesize = 100 bytesminmessagesize = 4kb

    maxmessagesize bytes Tamao mximo de los mensajes generados por CapaAplicacin

    maxmessagesize = 200 bytes

    maxmessagesize = 8kb

    nodemtbf time Tiempo entre fallos de hardware (promediado) nodemtbf = 600000msnodemtbf = 1000s

    nodemttr time Tiempo de reparacin fallo hardware (promediado) nodemttr = 5000msnodemttr = 100s

    ostype string Nombre del sistema operativo que se ejecuta en el nodo,nicamente utilizado para mostrar el icono. Posiblesvalores: bsd, hurd, irix, linux, macintosh, nextstep,os2,

    solaris, winnt.

    ostype = "linux"

    outputfile string Fichero de salida para cada nodo. Si se utiliza como

    atributo global, entonces outputfile indica el prefijo delfichero (igual que la opcin -o). Cuando se utiliza comoatributo local, outputfile indica el nombre de ficherocompleto.

    outputfile = "prueba"

    rebootnode string Funcin ANSI-C llamada cuando el nodo realiza unreboto.

    rebootnode = "mi_reboot_funcion"

    trace boolean Indicador de seguimiento de traza de la simulacin trace = truewinopen boolean Atributo booleano que indica si las ventanas de cada

    nodo se abrirn al arrancar.winopen = false

    winx, winy integer Coordenadas de la ventana del nodo en entorno Tcl/Tk. winx = 100, winy = 200x,y integer Coordenadas del icono del nodo en la ventana principal x = 80, y = 120

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    7/26

    __________________________Pgina: 7

    En tiempo de ejecucin, el cdigo C de protocolo de cada nodo tiene acceso a una estructura(previamente definida en cnet.h) y que contiene la descripcin de atributos del nodo. Estaestructura tiene un carcter de 'solo lectura' y su contenido es actualizado por cada nodo a lolargo de la ejecucin.

    typedef struct {CnetNodetype nodetype; /* Puede ser NT_HOST o NT_ROUTER */int nodenumber; /* Rango de 0..NNODES-1 */CnetAddr address; /* Posiblemente diferente a nodenumber */char nodename / * Nombre del nodo */int nlinks; /* Rango de 0 (=LOOPBACK) .. nlinks */int minmessagesize; /* Tamao minimo (en bytes) de los mensajes generados */int maxmessagesize /* Tamao mximo (en bytes) de los mensajes generados */int messagerate; /* tasa de generacin de mensajes (in ms) */long time_in_ms /* Reloj con incremento monotnico */struct {

    long sec;long msec;

    } time_of_day; /* Copia de la hora del sistema */} CnetNodeinfo;

    CnetNodeinfo nodeinfo

    Como se ha indicado anteriormente, en todos y cada unos de los nodos, se realiza unduplicado del cdigo C. Por tanto, en cada nodo est disponible la variable global

    CnetNodeinfo nodeinfo

    de forma que se pueden acceder de forma 'solo lectura'a los campos de la estructura de tipoCnetNodeinfo,donde se pueden obtener los diferentes atributos del nodo.

    2.2. Atributos de linkLa red est formada por nodos, unidos entre s mediante links punto-a-punto bidireccionales.Por defecto, los links se definen como no seguros, es decir, son susceptibles de prdida depaquetes y producir errores en los mismos.

    De la misma forma que con los atributos del nodo, los valores iniciales de los atributos del linktambin se definen en el fichero de topologa, no obstante, algunos de ellos se pueden cambiaren tipo de ejecucin.

    Atr ibuto de

    Link

    Ti po de

    Dato

    Significado Ejemplos

    bandwidth tasa de datos El ancho de banda (bandwidth) del link bandwidth = 100000bps

    bandwidth = 56Kbpscostperbyte centimos Costo por byte a lo largo del link costperbyte = 1ccostperframe centimos Costo por trama a lo largo del link costperframe = 5c

    Linkmtbf tiempo Promedio esperado de tiempo entre falloshardware del enlace

    linkmtbf = 50000ms

    linkmtbf = 1000s

    Linkmttr tiempo Promedio esperado de tiempo en repararfallos hardware del enlace

    linkmttr = 5000 ms

    linkmttr = 100s

    robframecorrupt probabilidad La probabilidad de que se produzca un erroren la trama a lo largo de la lnea

    robframecorrupt = 3

    * 1 / 8 */

    robframeloss probabilidad La probabilidad de que se pierda la trama a lolargo del link.

    robframecorrupt = 4

    1/16 */

    ropagationdelay tiempo Tiempo de propagacin a lo largo del enlace. ropagationdelay = 20msropagationdelay = 1s

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    8/26

    __________________________Pgina: 8

    De la misma forma que con la estructura CnetNodeinfo,cada nodo tiene acceso, a travs delprotocolo en cdigo C, a su propia estructura CnetLinkinfo, que contiene la descripcin de losatributos de sus links. En este caso, tambin se trata de una estructura de carcter 'solo lectura'y sus valores son actualizados por cada nodo a lo largo de la ejecucin. Por otro lado, lavariable

    linkinfo

    es un vector de estructuras CnetLinkinfo, de forma que, a travs de esta variable se puedeacceder a todos los atributos de cada nodo, mediante los ndices en orden creciente. Porejemplo:

    linkinfo[0] ---> Atributos del enlace denominado LOOPBACKlinkinfo[1] ---> Atributos del primer enlace fsicolink info[2] ---> Atributos del segundo enlace fsico...linkinfo[n] ---> Atributos del n enlace fsico

    typedef struct {int linkup; /* TRUE si el link est operativo */int bandwidth; /* bps */int propagationdelay /* in ms */int transmitbufsize /* bytes */int costperbyte /* $ */int costperframe; /* $ */

    } CnetLinkinfo;

    CnetLinkinfo linkinfo; /* linkinfo[0]..linkinfo[nodeinfo.nlinks] */

    Por ejemplo, para obtener el valor del tiempo de propagacin (propagationdelay) del primerlink real de un nodo, se utilizar

    linkinfo[1].propagationdelay

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    9/26

    __________________________Pgina: 9

    3. Programacin conducida por eventosUna de las caractersticas ms potentes de Cnet radica en el uso de la ProgramacinConducida por Eventos. Podemos definir evento, como un suceso que ocurre, y el sistema

    informa de ello, pudiendo actuar en consecuencia. En el caso que nos ocupa, Cnetinforma deque se ha producido un evento, los protocolos de usuario (cdigo ANSI-C) estn organizadospara reconocer dichos eventos, y actuar segn la especificacin del protocolo. Como accioneso eventos modelizados por Cnet, tenemos:

    Un nodo hace reboot. Capa Aplicacin tiene algn mensaje para enviar. Capa Fsica recibe una trama por algn link. Entrada de texto por teclado (Keyboard). Cambio de estado de algn link. Expiracin de temporizador. Botn de debug. Cada controlada de algn nodo (shutdown).

    Todos estos eventos son del tipo CnetEvent, y son registrados con la funcinCNET_set_handler().Adems se puede realizar un seguimiento de los eventos con la funcinCNET_set_trace().

    3.1. Lista de eventosUna relacin completa de todos los eventos utilizados por Cnet, podemos encontrarlos en lasiguiente tabla:

    CnetEvent Descripcin

    EV_NULL Uso exclusivo por Cnet. No se puede ser utilizado por los protocolos de

    usuarioEV_REBOOT Evento generado cuando se reinicializa el sistemaEV_SHUTDOWN Generado justo antes de terminar (de forma controlada) la ejecucin del

    sistemaEV_APPLICATIONREADY Generado cuando la Capa Aplicacin tiene algn mensaje para enviar.EV_PHYSICALREADY Generado cuando llega una trama por algn link del dispositivo.EV_KEYBOARDREADY Generado cuando se introduce una lnea desde teclado.EV_LINKSTATE Generado cuando un link cambia de estado (off/on, on/off).EV_DEBUG1...EV_DEBUG5 Generado cuando se presiona un botn debug (entornoX-Windows).EV_TIMER1...EV_TIMER10 Generado cuando algn temporizador expira su tiempo programado.

    3.2. Funciones para el manejo de eventos

    Para implementar un Manejador de Eventos, el primer paso es asociar los distintos eventos alcdigo de programa que se quiere ejecutar una vez generado el evento. Para el registro deeventos se utiliza la funcin:

    int CNET_set_handler(CnetEvent ev, void (*func)(),CnetData data)

    donde:

    CnetEvent ev se trata de un evento del tipo CnetEvent, es decir, la razn por la que elmanejador de eventos ha sido invocado, y correspondiente a uno de los eventosrelacionados en la Tabla anterior

    Void (*func)() es un puntero a la funcin de usuario invocada una vez generado el evento. CnetData dataconsiste en cierta informacin especifica de usuario.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    10/26

    __________________________Pgina: 10

    Las funciones manejadas por eventos son invocadas por Cnet, con tres parmetros: El primero es del tipo evento (razn por la que el manejador ha sido invocado), es un valor

    del tipo CnetEventde los listados en la Tabla de eventos.

    El segundo parmetro es un temporizador nico. Y el tercer parmetro se puede utilizar para suministrar algn dato especfico de usuario.

    Una vez tenemos identificado el evento de inters que nos informa de alguna accin sucedidaen la simulacin, y se ha asociado a la ejecucin de algn procedimiento o funcin de usuario,ya est en condiciones de ser invocada por Cnet, debido a la ocurrencia de algn eventoregistrado.

    3.3. Ejemplo de manejador de eventosEn el siguiente fragmento de cdigo C, implementa el manejador de eventos para controlaralgunos eventos proporcionados por Cnet. El cdigo del ejemplo muestra un par de eventos, enconcreto aquellos que indican cuando la Capa Aplicacin tiene un mensaje para enviar

    (EV_APLICATIONREADY), y cuando ha llegado una trama al nodo por algn link(EV_PHYSICALREADY).

    #include

    void NuevoMensaje(CnetEvent ev, CnetTimer timer, CnetData data) {...resultado = CNET_read_application( ... );...

    }

    void LlegaTrama(CnetEvent ev, CnetTimer timer, CnetData data) {...

    resultado = CNET_read_physical ( ... );...

    }

    void reboot_node(CnetEvent ev, CnetTimer timer, CnetData data) {...resultado = CNET_set_handler(EV_APPLICATIONREADY, NuevoMensaje, 0); (1)resultado = CNET_set_handler(EV_PHYSICALREADY, LlegaTrama, 0);...

    }

    El archivo de cabecera cnet.h contiene todas las tipos de datos, constantes y prototipos defunciones necesarias para el correcto funcionamiento de los protocolos de usuario.

    En el procedimiento reboot_node, es donde se realiza el registro de eventos (si no seespecifica otra opcin con la opcin de compilador) , asociando un determinado evento con unaaccin a realizar. As, mediante (1), el protocolo de usuario le est informado a Cnet quecuando se produzca el evento EV_APPLICATIONREADY(la capa aplicacin tiene un mensajepara enviar), ejecute el procedimiento NuevoMensaje. De la misma manera, mediante lainstruccin (2), se le est informado a Cnetque cuando llegue alguna trama por algn link delnodo (EV_PHYSICALREADY), ejecute el procedimiento asociado LlegaTrama, que contendrel protocolo de usuario necesario para realizar las operaciones correspondientes.

    Hasta el momento slo hemos utilizado los dos primeros parmetros del la funcinCNET_set_handler(), correspondientes al evento generado y el procedimiento de usuarioasociado. sta funcin est provista de un tercer parmetro, del tipo CnetData, por el que se lepasa al Manejador de Eventos un cierto valor. Este parmetro ser utilizado en el desarrollo de

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    11/26

    __________________________Pgina: 11

    protocolos avanzados, dnde ser necesario pasar un determinado valor al Manejador deEventos, por ejemplo, del tipo integer, puntero, etc. En concreto, para el manejo de funcionesde time-out, donde se utilizan temporizadores de usuario, este parmetros se utilizaprecisamente para informar del temporizador utilizado (EV_TIMER1...EV_TIMER10), necesariopara realizar las operaciones de activado / desactivado de dicho temporizador.

    IMPORTANTE:Las funciones manejadas por eventos deben finalizar su ejecucin completamente. Cada vezque son llamadas, deben de ejecutar sus instrucciones y simplemente salir (no devolver ningnvalor). Las funciones manejadas por eventos deben ser del tipo void, esto es, no retornanningn valor. En el caso de que una funcin manejada por evento no retorno, producir el fallototal de la simulacin, incluso del entorno grfico, Cnet abortar la ejecucin y serinterrumpido invocando xterm.

    4. TemporizadoresYa hemos introducido las funciones manejadas por eventos y la ejecucin de procedimientosde usuario asociados a los distintos eventos de Cnet. Los temporizadores son un tipo

    especial de evento que proporciona Cnet, provocando la generacin de un evento una vezfinalizada o expirado el tiempo que previamente se haba fijado.

    Cnetprovee de 10 temporizadores de usuario, proporcionando un mecanismo de 'call-back' ovuelta al cdigo de protocolo. De la misma forma que se declaran los distintos eventos en lafuncin reboot_node, asociando dichos eventos a un procedimiento / funcin de protocolo, loseventos generados por los temporizadores tambin hay que declararlos en la inicializacin delnodo, esto es, en la funcin reboot_node, asociando su evento (expiracin del tiempo prefijado)a la ejecucin de un determinado procedimiento / funcin de protocolo.

    Por ejemplo, el cdigo de protocolo

    CNET_set_handler ( EV_TIMER1, MiProcedimientoTemporizador_Out, 0 ) ;

    asocia el evento

    EV_TIMER1

    con el procedimiento MiProcedimientoTemporizador, de forma que una vez agotado el tiempoprefijado en el temporizador, se genera el evento EV_TIMER1, provocando la ejecucin de lafuncin MiProcedimientoTemporizador.

    De momento, hemos visto la forma de asociar un evento generado por temporizador con unprocedimiento de protocolo, pero todava no hemos visto la forma de activar un temporizadorcon un determinado valor, as como desactivarlo. Para la activacin y desactivacin detemporizadores, Cnetproporciona las siguientes funciones:

    CnetTimer CNET_start_timer(CnetEvent ev, long msec, CnetDada data)int CNET_stop_timer(CnetTimer timer)

    Vamos a detallar su funcionamiento mediante un ejemplo:

    void reboot_node(CnetEvent ev, CnetTimer timer, CnetData data){

    ...resultado = CNET_set_handler(EV_TIMER3, CodigoDeTimer, 0);...

    }

    ...

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    12/26

    __________________________Pgina: 12

    ...

    void CodigoDeTimer( ... ){

    ...Mitimer = CNET_start_timer(EV_TIMER3, 500 , 0);

    ...

    ...CNET_stop_timer(MiTimer);...

    }

    ...

    ...

    En el cdigo de protocolo anterior se ha declarado en el procedimiento de inicializacin denodo (reboot_node) el temporizador EV_TIMER3 y se ha asociado a la ejecucin delprocedimiento CodigoDeTimer, provocando que cuando se genere el evento, se ejecutar elcdigo de programa que contiene CodigoDeTimer. Dentro de este procedimiento esprecisamente donde han sido definidas las operaciones de activacin / desactivacin deltemporizador MiTimer.

    5. Funciones proporcionadas por Cnet

    5.1. Capa Aplicacin

    5.1.1. DescripcinEn el Simulador Cnet, la Capa Aplicacin es laencargada de generar mensajes que sernenviadas a las Capas Aplicacin de nodos remotos,a travs de la red y sus respectivos enlaces.

    NOTA: Capa Aplicacin de un nodo nunca generamensajes para el propio nodo, siempre vandestinados aun nodo adyacente o remoto de la red.

    Los mensajes generados Capa Aplicacin, sontransparentes al usuario, por tanto, su contenido esirrelevante, no tanto como su destinoy longitud.Eldestino de los mensajes viene determinado siemprepor la direccin del dispositivo en la red (nunca porel nmero de nodo).

    Cnet informa al protocolo de usuario de que la Capa

    Aplicacin tiene un mensaje para enviar, medianteel evento EV_APPLICATIONREADY y su funcinasociada correspondiente. El protocolo de usuario,realiza la lectura del mensaje generado por CapaAplicacin, mediante la funcin:

    int CNET_read_application(CnetAddr *dest , char *msg , int *len)

    En el parmetro len, se le informa a la Capa Aplicacin de la longitud mxima de mensaje quese est en disposicin de leer. Una vez ledo el mensaje generado por la Capa Aplicacin, stese guarda en la variable msg, y en el parmetro lense devuelve la longitud real del mensajeledo, y en la variable destse almacena la direccin del nodo al cual va dirigido el mensaje.

    Figura 5. Funciones CNET, protocolo de usuario yeventos.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    13/26

    __________________________Pgina: 13

    NOTA: Hay que destacar que el mensaje generado es totalmente 'ilegible', tratndose de uncadena de caracteres, sin ningn sentido ni significado, de una longitud determinada.

    Una secuencia tpica de lectura de mensaje es:

    char buffer[MAX_MESSAGE_SIZE];CnetAddr dirdestino;int longitud;

    longitud = sizeof(buffer);resultado = CNET_read_application(&dirdestino, buffer, &longitud);/* ... a continuacin ya se puede preparar el menaje para enviar al destino ....*/

    Una vez alcanzado el nodo destino correcto, el mensaje debe ser entregado a la CapaAplicacin, utilizado la funcin:

    int CNET_write_application ( char *msg , int *len)

    Y de la misma forma, presentamos una secuencia tpica de escritura en la Capa Aplicacin delnodo destino:

    /*...... se recibe el mensaje desde otro nodo */resultado = CNET_write_applicacion (buffer, &longitud);

    Como ya se ha indicado, la misin de la Capa Aplicacin, bsicamente, es generar mensajesque sern enviados a la Capa Aplicacin de otros nodos remotos. En funcin del protocolo quese necesite implementar, de las necesidades de operacin de la red, o de cualquier otracaracterstica de la simulacin, es muy posible que se plantee la necesidad de desactivar lageneracin de mensajes hacia algn nodo destino, hacia varios nodos destino e incluso,desactivar la generacin de mensajes hacia todos los nodos destino. Para realizar estasoperaciones se utilizan las funciones de Cnet:

    int CNET_enable_application(CnetAddr dirdestino);int CNET_disable_application(CnetAddr dirdestino);

    Por ejemplo, supongamos que el nodo con direccin 'nodo_i'est por algn motivo off-lineuocupado. El nodo que ha determinado esta situacin, deber desactivar el envo de mensajeshacia dicho nodo ocupado, con la sentencia:

    resultado = CNET_disble_application(nodo_i);

    de la misma forma, posteriormente, este nodo puede ser activado, de forma que se habilite elenvo de paquetes hacia l, con la sentencia:

    resultado = CNET_enable_application(nodo_i);

    Una forma de habilitar el envo de mensajes hacia todos (a excepcin del propio nodo,evidentemente), es utilizando la sentencia:

    resultado = CNET_enable_application(ALLNODES)

    esta funcin normalmente se ejecuta en la funcin reboot_node().

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    14/26

    __________________________Pgina: 14

    5.1.2. Funciones

    int CNET_read_application ( CnetAddr *destino , char *mensaje, int *longitud ) ;

    Lectura de un mensaje de la Capa Aplicacin. En la llamada, ' longitud' debe ser un puntero aentero indicando la longitud mxima (en bytes) que pueden ser copiados en 'mensaje'. Elretorno de la funcin, 'longitud' ser un puntero indicando la cantidad real de bytes copiados en'mensaje'. La direccin del nodo destino en la red ser copiado en 'destino'.

    Posibles errores: ER_BADSIZE, ER_NOTREADY, ER_NOTSUPPORTED.

    int CNET_write_application ( char *msg, int *len ) ;

    sta funcin se encarga de entregar la informacin a la Capa Aplicacin del nodo al que va

    dirigido el mensaje. Realiza la entrega de un numero de bytes (len) a partir del puntero a msg.

    Cuando se realiza la llamada de CNET_write_application(), el parmetro len contiene elnmero de bytes que se tomarn de msg y que se van a entregar a la Capa Aplicacin.Devuelve en el parmetro len un puntero a entero indicando el numero de bytes aceptados porla Capa Aplicacin.

    Posibles errores: ER_BADARG, ER_BADSENDER, ER_BADSESSION, ER_BADSIZE,ER_CORRUPTDATA, ER_NOTFORME, ER_NOTREADY, ER_NOTSUPPORTED,ER_OUTOFSEQ.

    int CNET_enable_application ( CnetAddr destaddr ) ;

    Habilita la Capa Aplicacin para generar mensajes destinados al nodo cuya direccin en la redes destaddr. Es posible utilizar la constanteALLNODES, que indica establecer la generacin demensajes para todos los nodos de la red.

    Al iniciar la simulacin, la generacin de mensajes por defectos est en modo 'deshabilitado'.Es necesario establecer la habilitacin para iniciar la generacin de mensajes hacia algnnodo, algn grupo de nodos o todos los nodos, dependiendo del valor del parmetro destaddr.

    Posibles errores: ER_NOTSUPPORTED.

    int CNET_disable_application ( CnetAddr destaddr ) ;

    Deshabilita la generacin de nuevos mensajes de la Capa Aplicacin hacia el nodo indicadopor la direccin de red (destaddr).Al igual que con el parmetro anterior, se puede utilizar laconstante ALLNODES para deshabilitar la generacin de mensajes nuevos hacia todos losnodos de la red.

    Se utiliza la funcin CNET_disable_application(), en general, cuando hay que ralentizar o pararla generacin de mensajes nuevos hacia algn nodo destino. Esta situacin puede seroriginada por varios motivos: saturacin de nodo destino, estrategias de parada-y-espera,algoritmos de routing con envos temporales de paquetes, etc.

    Posibles errores: ER_NOTSUPPORTED.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    15/26

    __________________________Pgina: 15

    5.2. Capa Fsica

    5.2.1. DescripcinLa Unidad de Datos utilizada a este nivel es el denominado Trama de Datos, o simplemente,trama. La Capa Fsica es el nivel del Modelo de Referencia OSI que est en contacto con el

    medio fsico, esto es, el medio de transmisin, teniendo por misin la del envo de tramas atravs del medio de transmisin que une dos nodos (recordamos en este punto que Cnetslopermite enlaces punto-a-punto entre nodos), por tanto, la trama parte de un nodo origen ypasado un tiempo, y dependiendo de varios factores, alcanzar el destino en perfecto estado, oquizs alcance el destino pero con errores, e incluso, puede ser que la trama se pierda a lolargo del link, por motivos de ruidos, interferencias, etc,

    Los links de un nodo se numeran automticamente, empezando por la secuencia 0 hasta n(nmero de links), siendo el primer link operativo el 1, ya que el link 0 est reservado paraloopbakdel nodo, esto es, link de retorno al nodo, de forma que cualquier trama que salga pore link 0vuelve inmediatamente a la entrada del nodo.

    En virtud de realizar una simulacin lo ms realstica posible, se han implementado varias

    caractersticas propias de los medios de transmisin reales, siendo posible establecer, entreotras: Probabilidad de prdida de tramas Probabilidad de error en trama Tiempo de propagacin de la trama a lo largo del medio de transmisin. Coste de la transmisin / byte etc.

    A continuacin vamos a ilustrar el uso de CNET_write_physical() y CNET_read_physical(),mediante el uso de un ejemplo. Cuando el protocolo de usuario necesita transmitir una trama alo largo del medio de transmisin, es decir, a lo largo del link, tiene que realizar una escritura dela trama en el medio fsico de transmisin. Para esta operacin, Cnet implementa la funcin

    CNET_write_physical(), donde hay que indicar la longitud de la trama a escribir, mediante elparmetro correspondiente (int *len), devolviendo en el retorno, la cantidad de bytes reales quehan sido aceptados por el medio fsico. A continuacin se presenta un fragmento de cdigo,correspondiente a la escritura / lectura en el medio fsico para una red compuesta por 2 nodos:

    ...char mitrama [MAX_MESSAGE_SIZE + MI_CABECERA ];int longitud;

    ... /* preparar la trama para su posterior envo */longitud = ...;

    resultado = CNET_write_physical(1,mitrama,&longitud);

    ... a continuacin, la trama viajara a travs del medio fsico de transmisin, hasta que alcanzael nodo destino. Una vez alcanzado el destino, el evento asociado a EV_PHYSICALREADYdebe de ejecutar el cdigo asociado para leer dicha trama del medio fsico, llamando a lafuncin CNET_read_physical(). A la vuelta de la llamada de la funcin, los parmetroscontienen: n de link por el que ha llegado la trama, longitud de trama leda y la tramapropiamente dicha.

    De la misma forma, se presenta un fragmente de cdigo para realizar la lectura de tramas delmedio fsico en una red formada por 2 nodos:

    ...char mi_trama [ 8 * K ];int link, longitud;

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    16/26

    __________________________Pgina: 16

    longitud = sizeof(mi_trama);resultado = CNET_read_physical(&link, mi_trama, &longitud);.../* procesar el contenido de la trama recibida */

    5.2.2. Transmisin segura a travs de la capa fisicaComo se ya se ha indicado, el medio fsico no est exento tanto de agentes externos talescomo ruidos, interferencias electromagnticas, ruidos de intermodulacin, etc., que puedenprovocar errores en las tramas transmitidas, e incluso, pueden llegar a producir la prdida totalde la trama, bien porque no llegue al destino, o bien porque aun alcanzado el destino, tiene unacantidad de errores tan elevada que el receptor es incapaz de detectarla como trama.

    Para dotar a Cnet de una opcin de transmisin segura, es decir, eliminar totalmente laprobabilidad de errores de trasmisin y/o prdidas de paquete, se proporciona una funcinadicional:

    int CNET_write_physical_reliable ( int link, char, int *len ) ;

    que tiene el mismo comportamiento que

    CNET_write_physical ( int link, char, int *len ) ;

    con la diferencia de que implementa un medio de transmisin 'totalmente seguro'eliminandopor completo la probabilidad de producirse errores y/o prdidas de tramas.

    sta opcin es de utilidad cuando se estn implementando protocolos de alto nivel (capassuperiores de OSI) y no se desea tener en cuenta la Capa de Nivel de Enlace, por lo que se

    implementa una Capa de Enlace de Datos 'perfecta', sin prdida de datos Otra funcindisponible en Cnetcorrespondiente al Medio Fsico es:

    CNET_write_direct ( CnetAddr destaddr, char *msg, int *len ) ;

    El objetivo de esta funcin es hacer un by-passal Medio Fsico, evitando cualquier error posibley/o prdida de tramas. Para ello, enva el mensaje directamente al nodo destino, cuya direccines especificado en el primer parmetro (destaddr). De esta forma se est consiguiendoimplementar una Capa de Enlace de Datos y Red perfectas??, eliminando a su vez tiemposy demoras en la transmisin de la trama a travs del link.

    5.2.3. Funciones

    int CNET_write_physical ( int link, char *trama , int *longitud ) ;

    Esta funcin toma un nmero de bytes contenido en el puntero a trama, y los pasa a la CapaFsica, para que sean enviados hacia el destino a travs de un determinado link. El linkrepresenta el medio fsico de transmisin por el que se van a enviar los datos. Cada nodo tieneun nmero fijo de links, numerados de 0..n, siendo el 0 utilizado para loopback(retorno hacia elnodo), por lo que el primer nodo til es el 1, el siguiente el nmero 2, y as sucesivamente.

    Al realizar la llamada, el parmetro int *longitud contiene la cantidad de bytes que se van apasar al medio fsico, a la vuelta, contiene el nmero de bytes aceptados por la Capa Fsica.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    17/26

    __________________________Pgina: 17

    Posibles errores: ER_BADARG, ER_BADLINK, ER_BADSIZE, ER_LINKDOWN,ER_NOTREADY, ER_TOOBUSY.

    int CNET_write_physical_reliable ( int link , char *trama , int *len ) ;

    Esta funcin es idntica a la anterior, CNET_write_physical(), pero garantiza un medio fsicolibre de errores de cualquier tipo (error y/o perdida de trama), proporcionando con ello unaCapa de Enlace de Datos confiable.

    Posibles errores: ER_BADARG, ER_BADLINK, ER_BADSIZE, ER_LINKDOWN,ER_NOTREADY, ER_TOOBUSY.

    int CNET_write_direct ( CnetAddr destaddr, char *msg, int *len ) ;

    sta funcin es similar a CNET_write_physical_reliable(), con la diferencia de que se especifica

    la direccin del nodo destino (destaddr), proporcionando con ello funciones de red / routingconfiables con paso de mensajes asncrono). Los mensajes transmitidos conCNET_write_direct()se supone son enviados y recibidos siempre a travs del linknumero 1.

    Es posible utilizar la constante BROADCASTpara especificar el envo de un mensaje a todoslos nodos de la red, excepto al emisor, evidentemente.

    Posibles errores: ER_BADARG, ER_BADLINK, ER_BADSIZE, ER_LINKDOWN,ER_NOTREADY, ER_TOOBUSY.

    int CNET_read_physical ( int *link , char *trama , int *len ) ;

    Esta funcin acepta un nmero mximo de bytes del Nivel Fsico y los guarda en la variableapuntada por trama. Se llama a la funcin indicando en el parmetro len la cantidad mximade bytes que se pueden copiar en la variable trama. En el retorno, el parmetro lencontiene lacantidad de bytes realmente ledos del Nivel Fsico ( y copiados a trama). El parmetro linkcontiene el link (enlace del nodo al medio fsico) por el que ha llegado la trama leda.

    Posibles errores: ER_BADARG, ER_BADSIZE, ER_CORRUPTDATA, ER_NOTREADY.

    5.3. Temporizadores

    5.3.1. DescripcinEl uso de temporizadores es muy utilizado en simulacin, y en concreto, en el tema que nosocupa de simulacin de redes. Los temporizadores proporcionan un mecanismo de retorno alcdigo de protocolo de usuario, ya que al especificar un tiempo de temporizacin o disparo yactivar dicho temporizador, al expirar este tiempo, se genera el evento asociado, que producirla ejecucin de la funcin correspondiente, manejada por dicho evento.

    Cada temporizador declarado es necesario realizar una operacin de 'arranque' (start)sobre l,para que inicie el contador de tiempo, si una vez arrancado, alcanza el tiempo fijado, genera unevento y ejecuta la funcin manejada por dicho evento, adems de la re-inicializacin deltemporizador. Con la operacin de 'parada' (stop), se detiene la ejecucin de dichotemporizador, y su re-inicializacin, de forma que, en la siguiente activacin empezar con lacuenta de tiempo desde 0.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    18/26

    __________________________Pgina: 18

    Cnetproporciona 10 colas de temporizador, asociados a otros tantos eventos de temporizacin:EV_TIMER1, ..., EV_TIMER10. No obstante, en cada cola de temporizador se pueden iniciar unnmero ilimitado de temporizadores, como se ilustra en el siguiente cdigo:

    void timeouts(CnetEvent ev, CnetTimer timer, CnetData data){

    int i = (int) data;

    printf(ciclo nmero &d\n,i);}

    void reboot_node(CnetEvent ev, CnetTimer timer, CnetData data){

    (void)CNET_set_handler(EV_TIMER3,timeouts,0);for ( i = 1 ; i

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    19/26

    __________________________Pgina: 19

    int CNET_stop_timer ( CnetTimer timer ) ;

    Se utiliza esta funcin para parar un temporizador que previamente haya sido activado, y porsupuesto, no haya expirado. Como parmetro se pasa la referencia obtenida con la funcin

    CNET_start_timer().Posibles errores: ER_BADTIMER.

    int CNET_timer_data ( CNETTIMER timer, CNETDATA *data ) ;

    Esta funcin permite recuperar el valor que se le pas al temporizador ( timer) a travs delparmetro Data. El temporizador no es cancelado y continua su ejecucin normal.

    Posibles errores: ER_BADTIMER, ER_BADARG.

    5.4. Funciones para el manejo de eventos

    int CNET_set_handler ( CnetEvent ev, void (*func)(), CnetData data ) ;

    Registra funccomo la funcin o procedimiento a ejecutar una vez se ha generado el evento ev.

    Posibles errores: ER_BADEVENT, ER_NOTSUPPORTED.

    int CNET_get_handler ( CnetEvent ev, void (**handler)(), CnetData *data ) ;

    Obtiene la direccin de la funcin que se ha registrado con el evento ev, para que se ejecuteuna vez ocurre dicho evento, junto con los datos de usuarios que se pasarn al manejador deeventos.

    Posibles errores: ER_BADEVENT, ER_NOTSUPPORTED.

    5.5. Funciones para traceadoint CNET_trace ( const char *, );

    int CNET_trace_name ( void *addr, const char *name );

    int CNET_set_trace (int eventmask );

    int CNET_get_trace ( void );

    5.6. Funciones para deteccin de errores

    Para todas las funciones, acepta una posicin de memoria unsigned char *addry chequea elalgoritmo de deteccin de errores para una longitud de bytes establecida en nbytes.

    Int checksum_internet ( unsigned short *addr, int nbytes )unsigned short checksum_ccitt ( unsigned char *addr, int nbytes )unsigned short checksum_crc16 ( unsigned char *addr, int nbytes )unsigned short checksum_crc32 ( unsigned char *addr, int nbytes )

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    20/26

    __________________________Pgina: 20

    5.7. Funciones variasInt CNET_read_keyboard (char *line, int *len )

    Lee a travs de teclado una cadena de longitud len, y guarda el contenido en *line. Devuelve eln de bytes que han sido guardados en *line, que contendr, al retorno, una cadena, terminadaen NULL, y len contendr strlen(line) + 1.

    Posibles errores: ER_BADSIZE, ER_NOTREADY, ER_NOTSUPPORTED.

    Int CNET_set_debug_string ( CnetEvent ev, char *str )

    Cambia el mensaje del botn de debug (para EV_DEBUG1..EV_DEBUG5) a la cadena str. Sistr es NULLo cadena vaca, entonces elimina el botn.

    Posibles errores: ER_BADEVENT.

    Int CNET_set_set_time_of_day ( long newsec, long newms )

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    21/26

    __________________________Pgina: 21

    6. CompilacinLa operacin de compilacin consiste en construir y ejecutar una aplicacin de simulacin apartir de los ficheros fuentes. Los ficheros fuentes de Cnet son, bsicamente: fichero de

    topologay fichero de protocolo de usuario(fichero ANSI-C). En la practica, es posible que slosea necesario especificar el fichero de topologa, ya que ste deber contener la descripcindel fichero de protocolo a utilizar. La compilacin de la aplicacin se realiza en un terminal delsistema operativo, tanto en modo grfico en modo carcter (ASCII).

    Dependiendo de las necesidades y los requisitos de la aplicacin de simulacin, Cnetproporciona una serie de opciones en la lnea de comandos, especficos para diferentes tareas.En la figura 5 se observa el resultado de

    $ cnet

    en el terminal, dando como resultado, la lista de todas las opciones de la lnea de comandosdisponibles, y su explicacin:

    -A

    Especifica una cadena de compilacin donde se declara una nueva Capa Aplicacin que serutilizada en la simulacin. Por defecto, si no se especifica la opcin A, Cnetutiliza su CapaAplicacin interna. La Capa Aplicacin que se utilice, ya sea la definida por defecto o bien unasuministrada por el usuario, es utilizada tanto como fuente de mensajes (nodo origen) comosumidero o destino de mensajes (nodo destino).

    Figura 5. Ejemplo de arranque de Cnet sin argumentos.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    22/26

    __________________________Pgina: 22

    -c

    Al iniciar Cnet, por defecto, cada nodo tiene un valor time_of_day(reloj) diferente al resto de losnodos. Si se especifica la opcin c, el reloj de todos los nodos se sincroniza en el inicio de lasimulacin.

    -C

    Cadena que especifica el fichero de protocolo que utilizar cada nodo. Si no se especifica laopcinC, se supone por defecto la cadena protocol.c.

    -d

    Proporciona informacin de monitorizacin y diagnstico al inicio la ejecucin de Cnet.

    -e

    Las tramas pueden sufrir alteraciones u otras anomalas desde que son emitidas por el nodoorigen y alcanzan el nodo destino. Las tramas errneas no son detectadas por la Capa Fsica, ydeben de ser detectado capas superiores.

    Si se especifica la opcin e, la funcin CNET_read_physical() detectar y comunicar lapresencia de tramas errneas, devolviendo el valor 1 , y estableciendo Cnet_errno aER_CORRUPTDATA.

    -E

    Peticin de que Cnetslo ejecute un determinado nmero de eventos.

    -f

    Establece la secuencia (en segundos) de refresco en el resumen de diagnstico y estadsticoproporcionado por Cnet. Se puede utilizar junto con las opciones s y z , de forma que sepueden proporcionar resultados acumulados estadsticos, de forma peridica.

    -F

    Si Cnetha sido compilado para ejecutarse bajo Tcl/Tk, entonces file ser suministrado por elintrprete Tcl. Si no se puede encontrar el fichero directamente en el directorio de trabajo,entonces se utilizar CNETPATH para buscar en otra ruta.

    -g

    Indica que se inicie la ejecucin de la simulacin tan pronto como la ventana principal

    aparezca, evidentemente, bajo entornoX-windows(grfico).

    -k

    Utiliza el estilo antiguo especificado por Kernighan and Ritchie (K&R) C, para compilar losficheros fuentes de usuario para la Capa Aplicacin (-A), los protocolos de capas intermedias (-C) y la Capa Fsica (-P). Por defecto, Cnetutiliza el compilador ANSI-C, gcc.

    -m

    Por defecto, el lmite de tiempo de simulacin est establecido en 3 minutos, para evitar unasobrecarga innecesaria de las mquinas de simulacin. Con la opcin mse puede modificar el

    tiempo de simulacin preestablecido.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    23/26

    __________________________Pgina: 23

    -M

    Lmite de la longitud de simulacin a -Mminutos de tiempo simulado. Esta opcin se utiliza encombinacin conT.

    -n

    Esta opcin indica a Cnet que analice el fichero de topologa, compile y linke el cdigo Cnecesario y termine, sin realizar la simulacin.

    -N

    Proporciona el n de nodos de la red en la variable C denominada NNODES. Hay que destacarque por defecto, cada nodo no conoce de cuantos nodos est formada la red, esto es,NNODES = 0.

    -o Todas las salidas de cada por el dispositivo estndar, esto es, printf(), puts() y putchar() lasredirecciona a un fichero ASCII identificado por prefijo. Por ejemplo, si la red est formada porlos nodos con nombres: nodo-1 y nodo-2,y se estableceo out, entonces, la salida de dichosnodos se redireccionar a los ficheros out.nodo-1y out.nodo-2.

    -O

    Abre todas las ventanas de los nodos al iniciar la simulacin.

    -P

    Con esta opcin, se le indica a Cnetque nicamente construya y chequeo la coherencia de latopologa de la red, imprime el resultado y termina.

    -P

    Mediante P , se le especifica a Cnet que utiliza una nueva Capa Fsica. Si no seespecifica la opcin P, se utiliza la Capa Fsica por defecto. El uso de alguna Capa Fsicaespecfica se suele utilizar para enviar y chequear tramas errneos, e incluso, prdidas detramas.

    -q

    Indica a Cnetque realice la ejecucin en silencio, esto es, eliminando todas las salidas hacia

    el dispositivo de salida por defecto, esto es, elimina las instrucciones printf(), puts()yputchar().nicamente se mantienen las salidas producidas durante un evento EV_DEBUG?(botn) y lassalidas hacia ficheros.

    -r

    Indica que se genere una red aleatoria, formada por nnodos. La generacin aleatoria garantizaque la red es totalmente conectada. Tambin se puede establecer la opcin r paraproporcionar un fichero de topologa.

    -R

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    24/26

    __________________________Pgina: 24

    Especifica que se utiliza la funcin()como la primera funcin que se ejecuta cuando se reiniciacada nodo. Por defecto, se utiliza la funcin reboot_node().

    -s

    Imprime un resumen de la actividad de la red justo antes de terminar Cnet.

    -S

    Proporciona la semilla para la generacin de nmeros aleatorios (utilizada para la generacinde mensajes y tramas errneas). La semilla debe ser un nmero entero.

    -t

    Representa todos los eventos generados por cada nodo de la red. Se enva al dispositivoestndar error, una descripcin de las llamadas a las funciones, argumentos, retorno de lasfunciones, as como el valor cnet_errno.

    -T

    Por defecto, Cnet se ejecuta en tiempo real, esto es, el tiempo de simulacin en la red esigual al tiempo real, una unidad de tiempo en la simulacin es igual a una unidad de tiempo enla realidad. Esta especificacin funciona bien para topologas en torno a los 20 nodos.Utilizando T se obliga a Cnet a ignorar el Tiempo Real y se ejecuta como un simulador deEventos Discretos Real, esto es, utilizando sus propias unidades de tiempo.

    -v

    Indica que utiliza un reporte de informacin ampliado de las acciones de Cnet.

    -X

    Deshabilita el soporte paraX-windows(por defecto, se utilizan terminales ASCII).

    -z

    Visualiza estadsticas y resmenes de eventos, incluso si los valores son 0.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    25/26

    __________________________Pgina: 25

    7. Tipos de Nodo, Eventos y Errores

    7.1. Tipo CnetNodeType

    Los nodos pueden ser Host o Router. El tipo de un nodo se puede determinar examinando elvalor de nodeinfo.nodetype

    por ejemplo:

    if (nodeinfo.nodetype == NT_HOST)(void)CNET_set_handler(EV_APPLICATIONREADY,appl_ready,0);

    CnetNodeType Descripcin

    NT_HOST El nodo es un Host, CONCapa Aplicacin y KeyboardNT_ROUTER El nodo es un Router SINCapa Aplicacin ni Keyboard.

    IMPORTANTE:Las siguientes funciones slo sern vlidas para nodos del tipo NT_HOST:

    CNET_write_application(), CNET_read_application(),CNET_enable_application(),CNET_disable_application(), CNET_set_handler(EV_APPLICATIONLAYER,) yCNET_set_hander(EV_KEYBOARDREADY,).

    7.2. Tipo CnetEvent

    Ya se ha visto en el Punto 3.

  • 7/25/2019 CNET: simulador de redes de conmutacin de paquetes

    26/26

    __________________________Pgina: 26

    7.3. Tipo CnetErrorLa mayora de las funciones de la librera Cnetdevuelven 0para indicar no-error, o un valor1indicando error. La mayora de los errores estn recogidos en la variable global cnet_errno.

    Todos los valores de cnet_errnoson una instancia del tipo enumerado CnetError. Los errorespueden ser reportados a stderrcon cnet_perror()y acceder al texto del mensaje con el ndice*cnet_errstr[] en la funcin (int) cnet_errno.Por ejemplo:

    If (CNET_write_application(msgbuffer, &msglength) != 0 ) {/* ha sucedido un error */if (cnet_errno == ER_BADSESSION ) {/* hacer acciones oportunas */....

    }else {

    cnet_perror(error escribiendo a Aplicacin);}

    }

    CnetError Descripcin

    ER_OK No errorER_BADARG Argumento invlidoER_BADEVENT Evento invlidoER_BADLINK Nmero de link no vlidoER_BADNODE Nodo no vlidoER_BADSENDER Aplicacin recibe mensaje procedente de nodo desconocidoER_BADSESSION Aplicacin recibe mensaje procedente de sesin incorrectaER_BADSIZE Longitud indicada no coincide con el tamaoER_BADTIMER Temporizador invlidoER_CORRUPTDATA Intentando transmitir datos estropeados

    ER_LINKDOWN Intentando transmitir por un link que est down.ER_NOTFORME Aplicacin recibe mensaje para dirigido a otro nodoER_NOTREADY Servicio no disponibleER_NOTSUPPORTEDOperacin no vlida para este tipo de nodoER_OUTOFSEQ Aplicacin recibe mensaje fuera de secuenciaER_TOOBUSY Link demasiado ocupado/congestionado

    8. Informacin adicional

    Se puede obtener informacin adicional, as como descargar los fuentes del simulador ymaterial auxiliar, en la pgina del profesor Dr. Chris Mcdonald.

    www.cs.uwa.edu.au/cnet/