Sei sulla pagina 1di 26

Cnet

Simulacin de redes de
conmutacin de paquetes

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


1.
2.

INTRODUCCIN ...............................................................................................................................3
FICHERO DE TOPOLOGA ..................................................................................................................4
2.1.
Atributos de nodo..................................................................................................................5
2.2.
Atributos de link....................................................................................................................7
3.
PROGRAMACIN CONDUCIDA POR EVENTOS ...................................................................................9
3.1.
Lista de eventos.....................................................................................................................9
3.2.
Funciones para el manejo de eventos...................................................................................9
3.3.
Ejemplo de manejador de eventos ......................................................................................10
4.
TEMPORIZADORES.........................................................................................................................11
5.
FUNCIONES PROPORCIONADAS POR CNET......................................................................................12
5.1.
Capa Aplicacin .................................................................................................................12
5.1.1.
5.1.2.

5.2.
5.2.1.
5.2.2.
5.2.3.

5.3.
5.3.1.
5.3.2.

Descripcin .................................................................................................................................. 12
Funciones ..................................................................................................................................... 14

Capa Fsica.........................................................................................................................15
Descripcin .................................................................................................................................. 15
Transmisin segura a travs de la capa fisica ............................................................................... 16
Funciones ..................................................................................................................................... 16

Temporizadores ..................................................................................................................17
Descripcin .................................................................................................................................. 17
Funciones ..................................................................................................................................... 18

5.4.
Funciones para el manejo de eventos.................................................................................19
5.5.
Funciones para traceado....................................................................................................19
5.6.
Funciones para deteccin de errores .................................................................................19
5.7.
Funciones varias.................................................................................................................20
6.
COMPILACIN ...............................................................................................................................21
7.
TIPOS DE NODO, EVENTOS Y ERRORES .........................................................................................25
7.1.
Tipo CnetNodeType ............................................................................................................25
7.2.
Tipo CnetEvent ...................................................................................................................25
7.3.
Tipo CnetError ...................................................................................................................26
8.
INFORMACIN ADICIONAL.............................................................................................................26

__________________________
Pgina: 2

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 los
Niveles Fsico y Aplicacin son proporcionados por el propio Simulador. No obstante, la
herramienta posibilita que programadores expertos puedan desarrollar sus propios Niveles
Fsico y Aplicacin, de forma que se puedan aportar nuevas funcionalidades o caractersticas.

Figura 1. Modelo de Referencia OSI

Cnet soporta tanto los modos de visualizacin grfico, bajo entorno Tcl/Tk y modo de
visualizacin ASCII (texto).
En el modo grfico (Tcl/Tk), Cnet proporciona una representacin global de la red, en formato
grfico, visualizando los nodos (host/routers) o enlaces (links), adems de permitir una
interaccin con la simulacin a travs de la interface grfica, permitiendo la modificacin de
diferentes atributos de los nodos y/o links, en tiempo de ejecucin. Haciendo clic de ratn sobre
los 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 de


topologa y fichero de protocolo.

Fichero de Topologa: Fichero de texto donde se describen los diferentes atributos de


cada nodo, links, as como las diferentes conexiones entre los nodos de la red. La
descripcin de atributos puede ser de forma particular para cada nodo (o link) o de forma
general para todos los elementos.

__________________________
Pgina: 3

Fichero de Protocolo: Fichero de texto de cdigo ANSI-C donde se describe el


protocolo a implementar, utilizando procedimientos, funciones y constantes
proporcionados por Cnet, as como cdigo de usuario en lenguaje C para desarrollos
de protocolos particulares.

Figura 2. Ejemplo de representacin grfica de topologa.

2.

Fichero de topologa

Pasamos a definir algunos conceptos que se utilizarn a


continuacin:

Nodo: Cada uno de los elementos (dispositivos activos) de la


red.
Link (Enlace). Punto del nodo por donde conecta con el
medio de transmisin.

Los nodos pueden ser de dos tipos: host y router


Los dispositivos tipo host son los que aceptan protocolos de
usuario, estn provistos de todas las capas, y en concreto de la
Capa Aplicacin, cuya misin es generar mensajes para enviarlos
a la Capa Aplicacin de otros host de la red.
La capa Aplicacin nunca genera mensajes para el propio nodo.

Figura 3. Topologa Multipunto vs


Punto-a-Punto.

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

__________________________
Pgina: 4

Cnet slo soporta topologas formadas por nodos con enlaces punto-a-punto, no estando
permitidos enlaces multipunto (difusin).
Tanto los atributos de link como los atributos de nodo pueden ser definidos en el fichero de
topologa de forma global o de forma local. Los atributos globales son definidos en el cuerpo
principal 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 atributo
declarado localmente afecta nica y exclusivamente al elemento donde ha sido definido.

messagerate = 100ms
minmessagesize = 100 b
maxmessagesize = 5 kb
host Dublin {
x=97, y=123
ostype = "linux"
link to Paris {
propagationdelay
}
link to London
}
host Paris {
x=194, y=255
link to Dublin {
propagationdelay
}
link to Amsterdam {
propagationdelay
}
link to Vienna {
propagationdelay
}
link to Madrid {
propagationdelay
}
link to London {
propagationdelay
}
}
host London {
x=189, y=102
link to Dublin
link to Paris
}
host Amsterdam {
x=294, y=176
link to Paris {
propagationdelay
}
link to Vienna {
propagationdelay
}
link to Munich {
propagationdelay

Atributos
Globales
= 50ms

= 150ms

= 100ms

= 200ms

= 80ms

= 80ms

= 125ms

= 100ms

= 100ms

}
}
host Vienna {
x=546, y=334
link to Amsterdam
link to Venice
link to Innsbruck
link to Munich
}
host Rome {
x=442, y=576
link to Venice
link to Corsica
link to Innsbruck
}
host Madrid {
x=74, y=380
link to Paris
link to Corsica
}
host Munich {
x=461, y=145
link to Amsterdam
link to Vienna
link to Berlin
}
host Venice {
x=487, y=416
link to Vienna
link to Rome
}
host Innsbruck {
x=404, y=356
link to Vienna
link to Rome
}
host Corsica {
x=264, y=455
link to Rome
link to Madrid
}
host Berlin {
x=639, y=238
link to Munich
}

Atributos
Locales

2.1. Atributos de nodo


Los atributos de los nodos se pueden mantener con los valores por defecto que proporciona
Cnet, o bien pueden ser declarados en la simulacin, para ello es necesario especificarlos en el
Fichero de Topologa. Adems, algunos atributos, tanto de nodo como de links, pueden ser
modificados 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., es
necesario definir unos tipos bsicos de uso en Cnet.

__________________________
Pgina: 5

Los tiempos son manejados y almacenados en formato de milisegundos. En la declaracin


de atributos se pueden utilizar los sufijos: ms y s
Los tamaos de datos son manejados y almacenados en formato de bytes. En la
declaracin de atributos se pueden utilizar los sufijos: bytes, Kbytes, KB y MB.
Los atributos booleanos pueden tomar los valores: true, false y toggle.
Los valores de string van entre comilla doble "".

Atributo de
Nodo

Tipo
de
Dato

Significado

Ejemplo

integer La direccin de cada nodo dentro de la red. Este valor esaddress = 238
nico para cada nodo
compile
string Define el nombre del fichero fuente de protocolo paracompile = protocol.c stats.c -lm"
cada nodo.
messagerate
time
La razn a la que la Capa Aplicacin puede generarmessagerate = 100ms
mensajes nuevos para enviar.
messagerate = 2s
minmessagesize bytes Tamao mnimo de mensaje generado por Capaminmessagesize = 100 bytes
Aplicacin
minmessagesize = 4kb
maxmessagesize bytes Tamao mximo de los mensajes generados por Capamaxmessagesize = 200 bytes
Aplicacin
maxmessagesize = 8kb
nodemtbf
time
Tiempo entre fallos de hardware (promediado)
nodemtbf = 600000ms
nodemtbf = 1000s
nodemttr
time
Tiempo de reparacin fallo hardware (promediado)
nodemttr = 5000ms
nodemttr = 100s
ostype
string Nombre del sistema operativo que se ejecuta en el nodo,ostype = "linux"
nicamente utilizado para mostrar el icono. Posibles
valores: bsd, hurd, irix, linux, macintosh, nextstep,os2,
solaris, winnt.
outputfile
string Fichero de salida para cada nodo. Si se utiliza comooutputfile = "prueba"
atributo global, entonces outputfile indica el prefijo del
fichero (igual que la opcin -o). Cuando se utiliza como
atributo local, outputfile indica el nombre de fichero
completo.
rebootnode
string Funcin ANSI-C llamada cuando el nodo realiza unrebootnode = "mi_reboot_funcion"
reboto.
trace
boolean Indicador de seguimiento de traza de la simulacin
trace = true
winopen
boolean Atributo booleano que indica si las ventanas de cadawinopen = false
nodo se abrirn al arrancar.
winx, winy
integer Coordenadas de la ventana del nodo en entorno Tcl/Tk. winx = 100, winy = 200
x,y
integer Coordenadas del icono del nodo en la ventana principal x = 80, y = 120
address

__________________________
Pgina: 6

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. Esta
estructura tiene un carcter de 'solo lectura' y su contenido es actualizado por cada nodo a lo
largo 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 un


duplicado 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 tipo
CnetNodeinfo, donde se pueden obtener los diferentes atributos del nodo.

2.2. Atributos de link


La 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 de
paquetes y producir errores en los mismos.
De la misma forma que con los atributos del nodo, los valores iniciales de los atributos del link
tambin se definen en el fichero de topologa, no obstante, algunos de ellos se pueden cambiar
en tipo de ejecucin.

Atributo de
Link
bandwidth

Tipo de
Dato

Significado

tasa de datos El ancho de banda (bandwidth) del link

Ejemplos

bandwidth = 100000bps
bandwidth = 56Kbps
costperbyte
centimos
Costo por byte a lo largo del link
costperbyte = 1c
costperframe
centimos
Costo por trama a lo largo del link
costperframe = 5c
Linkmtbf
tiempo
Promedio esperado de tiempo entre falloslinkmtbf = 50000ms
hardware del enlace
linkmtbf = 1000s
Linkmttr
tiempo
Promedio esperado de tiempo en repararlinkmttr = 5000 ms
fallos hardware del enlace
linkmttr = 100s
probframecorrupt probabilidad La probabilidad de que se produzca un errorprobframecorrupt = 3
en la trama a lo largo de la lnea
/* 1 / 8 */
probframeloss
probabilidad La probabilidad de que se pierda la trama a loprobframecorrupt = 4
largo del link.
/ 1/16 */
propagationdelay tiempo
Tiempo de propagacin a lo largo del enlace. propagationdelay = 20ms
propagationdelay = 1s

__________________________
Pgina: 7

De la misma forma que con la estructura CnetNodeinfo, cada nodo tiene acceso, a travs del
protocolo en cdigo C, a su propia estructura CnetLinkinfo, que contiene la descripcin de los
atributos 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, la
variable
linkinfo
es un vector de estructuras CnetLinkinfo, de forma que, a travs de esta variable se puede
acceder a todos los atributos de cada nodo, mediante los ndices en orden creciente. Por
ejemplo:
linkinfo[0] ---> Atributos del enlace denominado LOOPBACK
linkinfo[1] ---> Atributos del primer enlace fsico
link info[2] ---> Atributos del segundo enlace fsico
...
linkinfo[n] ---> Atributos del n enlace fsico
typedef struct {
int
linkup;
int bandwidth;
int propagationdelay
int transmitbufsize
int costperbyte
int costperframe;
} CnetLinkinfo;

/* TRUE si el link est operativo */


/* bps
*/
/* in ms
*/
/* bytes
*/
/* $
*/
/* $
*/

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

Por ejemplo, para obtener el valor del tiempo de propagacin (propagationdelay) del primer
link real de un nodo, se utilizar
linkinfo[1].propagationdelay

__________________________
Pgina: 8

3.

Programacin conducida por eventos

Una de las caractersticas ms potentes de Cnet radica en el uso de la Programacin


Conducida 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, Cnet informa de
que se ha producido un evento, los protocolos de usuario (cdigo ANSI-C) estn organizados
para reconocer dichos eventos, y actuar segn la especificacin del protocolo. Como acciones
o 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 funcin
CNET_set_handler(). Adems se puede realizar un seguimiento de los eventos con la funcin
CNET_set_trace().

3.1. Lista de eventos


Una relacin completa de todos los eventos utilizados por Cnet, podemos encontrarlos en la
siguiente tabla:
CnetEvent
EV_NULL

Descripcin
Uso exclusivo por Cnet. No se puede ser utilizado por los protocolos de
usuario
EV_REBOOT
Evento generado cuando se reinicializa el sistema
EV_SHUTDOWN
Generado justo antes de terminar (de forma controlada) la ejecucin del
sistema
EV_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 (entorno X-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 al
cdigo de programa que se quiere ejecutar una vez generado el evento. Para el registro de
eventos 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 el
manejador de eventos ha sido invocado, y correspondiente a uno de los eventos
relacionados en la Tabla anterior
Void (*func)() es un puntero a la funcin de usuario invocada una vez generado el evento.
CnetData data consiste en cierta informacin especifica de usuario.

__________________________
Pgina: 9

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 CnetEvent de 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 sucedida
en 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 evento
registrado.

3.3. Ejemplo de manejador de eventos


En el siguiente fragmento de cdigo C, implementa el manejador de eventos para controlar
algunos eventos proporcionados por Cnet. El cdigo del ejemplo muestra un par de eventos, en
concreto 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 <cnet.h>
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 de
funciones 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 se
especifica otra opcin con la opcin de compilador) , asociando un determinado evento con una
accin a realizar. As, mediante (1), el protocolo de usuario le est informado a Cnet que
cuando se produzca el evento EV_APPLICATIONREADY (la capa aplicacin tiene un mensaje
para enviar), ejecute el procedimiento NuevoMensaje. De la misma manera, mediante la
instruccin (2), se le est informado a Cnet que cuando llegue alguna trama por algn link del
nodo (EV_PHYSICALREADY), ejecute el procedimiento asociado LlegaTrama, que contendr
el protocolo de usuario necesario para realizar las operaciones correspondientes.
Hasta el momento slo hemos utilizado los dos primeros parmetros del la funcin
CNET_set_handler(), correspondientes al evento generado y el procedimiento de usuario
asociado. sta funcin est provista de un tercer parmetro, del tipo CnetData, por el que se le
pasa al Manejador de Eventos un cierto valor. Este parmetro ser utilizado en el desarrollo de

__________________________
Pgina: 10

protocolos avanzados, dnde ser necesario pasar un determinado valor al Manejador de


Eventos, por ejemplo, del tipo integer, puntero, etc. En concreto, para el manejo de funciones
de time-out, donde se utilizan temporizadores de usuario, este parmetros se utiliza
precisamente para informar del temporizador utilizado (EV_TIMER1...EV_TIMER10), necesario
para realizar las operaciones de activado / desactivado de dicho temporizador.
IMPORTANTE:
Las funciones manejadas por eventos deben finalizar su ejecucin completamente. Cada vez
que son llamadas, deben de ejecutar sus instrucciones y simplemente salir (no devolver ningn
valor). Las funciones manejadas por eventos deben ser del tipo void, esto es, no retornan
ningn valor. En el caso de que una funcin manejada por evento no retorno, producir el fallo
total de la simulacin, incluso del entorno grfico, Cnet abortar la ejecucin y ser
interrumpido invocando xterm.

4.

Temporizadores

Ya hemos introducido las funciones manejadas por eventos y la ejecucin de procedimientos


de 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 vez
finalizada o expirado el tiempo que previamente se haba fijado.
Cnet provee de 10 temporizadores de usuario, proporcionando un mecanismo de 'call-back' o
vuelta al cdigo de protocolo. De la misma forma que se declaran los distintos eventos en la
funcin reboot_node, asociando dichos eventos a un procedimiento / funcin de protocolo, los
eventos generados por los temporizadores tambin hay que declararlos en la inicializacin del
nodo, 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 tiempo
prefijado en el temporizador, se genera el evento EV_TIMER1, provocando la ejecucin de la
funcin MiProcedimientoTemporizador.
De momento, hemos visto la forma de asociar un evento generado por temporizador con un
procedimiento de protocolo, pero todava no hemos visto la forma de activar un temporizador
con un determinado valor, as como desactivarlo. Para la activacin y desactivacin de
temporizadores, Cnet proporciona 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);
...
}
...

__________________________
Pgina: 11

...
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 de


nodo (reboot_node) el temporizador EV_TIMER3 y se ha asociado a la ejecucin del
procedimiento CodigoDeTimer, provocando que cuando se genere el evento, se ejecutar el
cdigo de programa que contiene CodigoDeTimer.
Dentro de este procedimiento es
precisamente donde han sido definidas las operaciones de activacin / desactivacin del
temporizador MiTimer.

5.

Funciones proporcionadas por Cnet

5.1. Capa Aplicacin


5.1.1.

Descripcin

En el Simulador Cnet, la Capa Aplicacin es la


encargada de generar mensajes que sern
enviadas a las Capas Aplicacin de nodos remotos,
a travs de la red y sus respectivos enlaces.
NOTA: Capa Aplicacin de un nodo nunca genera
mensajes para el propio nodo, siempre van
destinados aun nodo adyacente o remoto de la red.
Los mensajes generados Capa Aplicacin, son
transparentes al usuario, por tanto, su contenido es
irrelevante, no tanto como su destino y longitud. El
destino de los mensajes viene determinado siempre
por la direccin del dispositivo en la red (nunca por
el nmero de nodo).
Cnet informa al protocolo de usuario de que la Capa
Aplicacin tiene un mensaje para enviar, mediante
el evento EV_APPLICATIONREADY y su funcin
asociada correspondiente. El protocolo de usuario,
realiza la lectura del mensaje generado por Capa
Aplicacin, mediante la funcin:

Figura 5. Funciones CNET, protocolo de usuario y


eventos.

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 que


se est en disposicin de leer. Una vez ledo el mensaje generado por la Capa Aplicacin, ste
se guarda en la variable msg, y en el parmetro len se devuelve la longitud real del mensaje
ledo, y en la variable dest se almacena la direccin del nodo al cual va dirigido el mensaje.

__________________________
Pgina: 12

NOTA: Hay que destacar que el mensaje generado es totalmente 'ilegible', tratndose de un
cadena 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 Capa
Aplicacin, 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 del
nodo 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 mensajes


que sern enviados a la Capa Aplicacin de otros nodos remotos. En funcin del protocolo que
se necesite implementar, de las necesidades de operacin de la red, o de cualquier otra
caracterstica de la simulacin, es muy posible que se plantee la necesidad de desactivar la
generacin de mensajes hacia algn nodo destino, hacia varios nodos destino e incluso,
desactivar la generacin de mensajes hacia todos los nodos destino. Para realizar estas
operaciones 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-line u
ocupado. El nodo que ha determinado esta situacin, deber desactivar el envo de mensajes
hacia 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 el
envo 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().

__________________________
Pgina: 13

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 a


entero indicando la longitud mxima (en bytes) que pueden ser copiados en 'mensaje'. El
retorno 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 el
nmero 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 por
la 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 red
es destaddr. Es posible utilizar la constante ALLNODES, que indica establecer la generacin de
mensajes 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 algn
nodo, 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 indicado


por la direccin de red (destaddr). Al igual que con el parmetro anterior, se puede utilizar la
constante ALLNODES para deshabilitar la generacin de mensajes nuevos hacia todos los
nodos de la red.
Se utiliza la funcin CNET_disable_application(), en general, cuando hay que ralentizar o parar
la generacin de mensajes nuevos hacia algn nodo destino. Esta situacin puede ser
originada 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.

__________________________
Pgina: 14

5.2. Capa Fsica


5.2.1.

Descripcin

La 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 a
travs del medio de transmisin que une dos nodos (recordamos en este punto que Cnet slo
permite enlaces punto-a-punto entre nodos), por tanto, la trama parte de un nodo origen y
pasado un tiempo, y dependiendo de varios factores, alcanzar el destino en perfecto estado, o
quizs alcance el destino pero con errores, e incluso, puede ser que la trama se pierda a lo
largo 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 para
loopbak del nodo, esto es, link de retorno al nodo, de forma que cualquier trama que salga por
e link 0 vuelve 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, entre
otras:
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 a
lo largo del medio de transmisin, es decir, a lo largo del link, tiene que realizar una escritura de
la 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 el
parmetro correspondiente (int *len), devolviendo en el retorno, la cantidad de bytes reales que
han 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 alcanza
el nodo destino. Una vez alcanzado el destino, el evento asociado a EV_PHYSICALREADY
debe de ejecutar el cdigo asociado para leer dicha trama del medio fsico, llamando a la
funcin CNET_read_physical(). A la vuelta de la llamada de la funcin, los parmetros
contienen: n de link por el que ha llegado la trama, longitud de trama leda y la trama
propiamente dicha.
De la misma forma, se presenta un fragmente de cdigo para realizar la lectura de tramas del
medio fsico en una red formada por 2 nodos:
...
char mi_trama [ 8 * K ];
int link, longitud;

__________________________
Pgina: 15

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 fisica

Como se ya se ha indicado, el medio fsico no est exento tanto de agentes externos tales
como ruidos, interferencias electromagnticas, ruidos de intermodulacin, etc., que pueden
provocar errores en las tramas transmitidas, e incluso, pueden llegar a producir la prdida total
de la trama, bien porque no llegue al destino, o bien porque aun alcanzado el destino, tiene una
cantidad 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 la
probabilidad de errores de trasmisin y/o prdidas de paquete, se proporciona una funcin
adicional:

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' eliminando


por completo la probabilidad de producirse errores y/o prdidas de tramas.
sta opcin es de utilidad cuando se estn implementando protocolos de alto nivel (capas
superiores 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 funcin
disponible en Cnet correspondiente al Medio Fsico es:

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

El objetivo de esta funcin es hacer un by-pass al Medio Fsico, evitando cualquier error posible
y/o prdida de tramas. Para ello, enva el mensaje directamente al nodo destino, cuya direccin
es especificado en el primer parmetro (destaddr). De esta forma se est consiguiendo
implementar una Capa de Enlace de Datos y Red perfectas??, eliminando a su vez tiempos
y 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 Capa
Fsica, para que sean enviados hacia el destino a travs de un determinado link. El link
representa el medio fsico de transmisin por el que se van a enviar los datos. Cada nodo tiene
un nmero fijo de links, numerados de 0..n, siendo el 0 utilizado para loopback (retorno hacia el
nodo), 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 a
pasar al medio fsico, a la vuelta, contiene el nmero de bytes aceptados por la Capa Fsica.

__________________________
Pgina: 16

Posibles
errores:
ER_BADARG,
ER_NOTREADY, ER_TOOBUSY.

ER_BADLINK,

ER_BADSIZE,

ER_LINKDOWN,

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 fsico


libre de errores de cualquier tipo (error y/o perdida de trama), proporcionando con ello una
Capa de Enlace de Datos confiable.
Posibles
errores:
ER_BADARG,
ER_NOTREADY, ER_TOOBUSY.

ER_BADLINK,

ER_BADSIZE,

ER_LINKDOWN,

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 / routing
confiables con paso de mensajes asncrono). Los mensajes transmitidos con
CNET_write_direct() se supone son enviados y recibidos siempre a travs del link numero 1.
Es posible utilizar la constante BROADCAST para especificar el envo de un mensaje a todos
los nodos de la red, excepto al emisor, evidentemente.
Posibles
errores:
ER_BADARG,
ER_NOTREADY, ER_TOOBUSY.

ER_BADLINK,

ER_BADSIZE,

ER_LINKDOWN,

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 variable
apuntada por trama. Se llama a la funcin indicando en el parmetro len la cantidad mxima
de bytes que se pueden copiar en la variable trama. En el retorno, el parmetro len contiene la
cantidad de bytes realmente ledos del Nivel Fsico ( y copiados a trama). El parmetro link
contiene 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.

Descripcin

El uso de temporizadores es muy utilizado en simulacin, y en concreto, en el tema que nos


ocupa de simulacin de redes. Los temporizadores proporcionan un mecanismo de retorno al
cdigo de protocolo de usuario, ya que al especificar un tiempo de temporizacin o disparo y
activar dicho temporizador, al expirar este tiempo, se genera el evento asociado, que producir
la 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 un
evento y ejecuta la funcin manejada por dicho evento, adems de la re-inicializacin del
temporizador. Con la operacin de 'parada' (stop), se detiene la ejecucin de dicho
temporizador, y su re-inicializacin, de forma que, en la siguiente activacin empezar con la
cuenta de tiempo desde 0.

__________________________
Pgina: 17

Cnet proporciona 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 un
nmero 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<0 10 ; ++i)
(void)CNET_start_timer(EV_TIMER3, i*1000L,(CnetData) i);
}

que producir una salida idntica al fragmento de cdigo:


void timeouts(CnetEvent ev, CnetTimer timer, CnetData data)
{
int i = (int) data;
printf(ciclo nmero &d\n,i);
if ( i < 10 )
(void) CNET_start_timer(EV_TIMER3, 1000L, (CnetData) i + 1);
}
void reboot_node(CnetEvent ev, CnetTimer timer, CnetData data)
{
(void)CNET_set_handler(EV_TIMER3,timeouts,0);
(void)CNET_start_timer(EV_TIMER3, 1000L,(CnetData) 1);
}

5.3.2.

Funciones

CnetTimer CNET_start_timer ( CnetEvent ev, long msec, CnetData data ) ;

Con esta funcin se establece un nuevo temporizador, cuyo tiempo de expiracin ser el
indicado por el parmetro msec (indicado en milisegundos). El temporizador vendr referido a
una de las 10 colas de temporizador proporcionadas por Cnet, mediante el uso del parmetro
ev, donde de establece dicha cola de temporizador EV_TIMER1...EV_TIMER10, y el evento
asociado. El parmetro data se utiliza para pasar alguna informacin a la funcin manejada
por el evento asociado al temporizador.
La funcin devuelve la referencia al temporizador creado, que lo distingue del resto de
temporizadores, y que se deber utilizar para posteriores llamadas a este temporizador, como
por ejemplo, para visualizar el valor de temporizacin o para pararlo. Si el sistema no puede
crear el temporizador, devuelve NULLTIMER.
Posibles errores: ER_BADARG.

__________________________
Pgina: 18

int CNET_stop_timer ( CnetTimer timer ) ;

Se utiliza esta funcin para parar un temporizador que previamente haya sido activado, y por
supuesto, 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 del
parmetro 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 func como 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 ejecute
una vez ocurre dicho evento, junto con los datos de usuarios que se pasarn al manejador de
eventos.
Posibles errores: ER_BADEVENT, ER_NOTSUPPORTED.

5.5. Funciones para traceado


int 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 *addr y chequea el
algoritmo 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 )

__________________________
Pgina: 19

5.7. Funciones varias


Int CNET_read_keyboard (char *line, int *len )

Lee a travs de teclado una cadena de longitud len, y guarda el contenido en *line. Devuelve el
n de bytes que han sido guardados en *line, que contendr, al retorno, una cadena, terminada
en 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. Si


str es NULL o cadena vaca, entonces elimina el botn.
Posibles errores: ER_BADEVENT.
Int CNET_set_set_time_of_day ( long newsec, long newms )

__________________________
Pgina: 20

6.

Compilacin

La operacin de compilacin consiste en construir y ejecutar una aplicacin de simulacin a


partir de los ficheros fuentes. Los ficheros fuentes de Cnet son, bsicamente: fichero de
topologa y fichero de protocolo de usuario (fichero ANSI-C). En la practica, es posible que slo
sea necesario especificar el fichero de topologa, ya que ste deber contener la descripcin
del fichero de protocolo a utilizar. La compilacin de la aplicacin se realiza en un terminal del
sistema operativo, tanto en modo grfico en modo carcter (ASCII).
Dependiendo de las necesidades y los requisitos de la aplicacin de simulacin, Cnet
proporciona 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 comandos
disponibles, y su explicacin:

Figura 5. Ejemplo de arranque de Cnet sin argumentos.

-A <string>

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

__________________________
Pgina: 21

-c

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

-C <string>

Cadena que especifica el fichero de protocolo que utilizar cada nodo. Si no se especifica la
opcin C, 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 nodo
origen y alcanzan el nodo destino. Las tramas errneas no son detectadas por la Capa Fsica, y
deben de ser detectado capas superiores.
Si se especifica la opcin e, la funcin CNET_read_physical() detectar y comunicar la
presencia de tramas errneas, devolviendo el valor 1 , y estableciendo Cnet_errno a
ER_CORRUPTDATA.

-E <nevents>

Peticin de que Cnet slo ejecute un determinado nmero de eventos.

-f <secs>

Establece la secuencia (en segundos) de refresco en el resumen de diagnstico y estadstico


proporcionado por Cnet. Se puede utilizar junto con las opciones s y z , de forma que se
pueden proporcionar resultados acumulados estadsticos, de forma peridica.

-F <file>

Si Cnet ha sido compilado para ejecutarse bajo Tcl/Tk, entonces file ser suministrado por el
intrprete 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 entorno X-windows (grfico).

-k

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

-m <mins>

Por defecto, el lmite de tiempo de simulacin est establecido en 3 minutos, para evitar una
sobrecarga innecesaria de las mquinas de simulacin. Con la opcin m se puede modificar el
tiempo de simulacin preestablecido.
__________________________
Pgina: 22

-M <mins>

Lmite de la longitud de simulacin a -M minutos de tiempo simulado. Esta opcin se utiliza en


combinacin con T.

-n

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

-N

Proporciona el n de nodos de la red en la variable C denominada NNODES. Hay que destacar


que por defecto, cada nodo no conoce de cuantos nodos est formada la red, esto es,
NNODES = 0.

-o <prefijo>

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

-O

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

-P

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

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

-q
Indica a Cnet que 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() y putchar().
nicamente se mantienen las salidas producidas durante un evento EV_DEBUG? (botn) y las
salidas hacia ficheros.

-r <nnodes>
Indica que se genere una red aleatoria, formada por nnodos. La generacin aleatoria garantiza
que la red es totalmente conectada. Tambin se puede establecer la opcin r para
proporcionar un fichero de topologa.

-R <funcin>

__________________________
Pgina: 23

Especifica que se utiliza la funcin() como la primera funcin que se ejecuta cuando se reinicia
cada 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 <seed>
Proporciona la semilla para la generacin de nmeros aleatorios (utilizada para la generacin
de 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 dispositivo
estndar error, una descripcin de las llamadas a las funciones, argumentos, retorno de las
funciones, as como el valor cnet_errno.

-T
Por defecto, Cnet se ejecuta en tiempo real, esto es, el tiempo de simulacin en la red es
igual al tiempo real, una unidad de tiempo en la simulacin es igual a una unidad de tiempo en
la 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 de
Eventos 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 para X-windows (por defecto, se utilizan terminales ASCII).

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

__________________________
Pgina: 24

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 el
valor 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, CON Capa Aplicacin y Keyboard
NT_ROUTER
El nodo es un Router SIN Capa 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,)
y
CNET_set_hander(EV_KEYBOARDREADY,).

7.2. Tipo CnetEvent


Ya se ha visto en el Punto 3.

__________________________
Pgina: 25

7.3. Tipo CnetError


La mayora de las funciones de la librera Cnet devuelven 0 para indicar no-error, o un valor 1
indicando error. La mayora de los errores estn recogidos en la variable global cnet_errno.
Todos los valores de cnet_errno son una instancia del tipo enumerado CnetError. Los errores
pueden ser reportados a stderr con 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 error
ER_BADARG
Argumento invlido
ER_BADEVENT
Evento invlido
ER_BADLINK
Nmero de link no vlido
ER_BADNODE
Nodo no vlido
ER_BADSENDER
Aplicacin recibe mensaje procedente de nodo desconocido
ER_BADSESSION
Aplicacin recibe mensaje procedente de sesin incorrecta
ER_BADSIZE
Longitud indicada no coincide con el tamao
ER_BADTIMER
Temporizador invlido
ER_CORRUPTDATA Intentando transmitir datos estropeados
ER_LINKDOWN
Intentando transmitir por un link que est down.
ER_NOTFORME
Aplicacin recibe mensaje para dirigido a otro nodo
ER_NOTREADY
Servicio no disponible
ER_NOTSUPPORTED Operacin no vlida para este tipo de nodo
ER_OUTOFSEQ
Aplicacin recibe mensaje fuera de secuencia
ER_TOOBUSY
Link demasiado ocupado/congestionado

8.

Informacin adicional

Se puede obtener informacin adicional, as como descargar los fuentes del simulador y
material auxiliar, en la pgina del profesor Dr. Chris Mcdonald.
www.cs.uwa.edu.au/cnet/

__________________________
Pgina: 26

Potrebbero piacerti anche