UTFSM - ELO_330 - TAREA N° 3.

Carlos Silva Lütty - Andrés Cerón Corrales

csl (at) ELO UTFSM CL - aceron (at) ELO UTFSM CL

Nombre: eloproxy: Proxy genérico de datos y graficador de tráfico de la conexión

Sintaxis: eloproxy <puerto_listen> <host_destino> <puerto_destino> <delta_t_en_segundos>

Descripción
eloproxy es un programa servidor y cliente a la vez. En su puerto de escucha acepta conexiones. Tan pronto acepta una nueva conexión, eloproxy genera una nueva conexión hacia el host y puerto destinos, y transfiere el tráfico entrante por un lado hacia el otro. Además genera gráficos de la tasa de tráfico total que transita a través de él. Un gráfico muestra la tasa de subida y el otro la de bajada. El gráfico aparece tan pronto eloproxy es ejecutado. El último parámetro indica la base de tiempo sobre la cual se calcula la tasa de tráfico a graficar. Adicionalmente eloproxy genera gráficos de la tasa promedio acumulada cada 1 segundo, tanto de subida como de bajada.

SOLUCIÓN       para descomprimir:     tar -jxvf t3.tar.bz2

README.txt

En este archivo se incluye una descripción de la labor de cada archivo y su función como bloque del diseño de la solución. Además de indicaciones para su correcta ejecución.

Presione sobre el nombre del archivo para ver su contenido.   

   t3.png           eloproxy.h             eloproxy.c         Makefile

Material de apoyo:

ejemplo de la tarea

mejor solución 2003

manual de C++

Apuntes Universitarios de IPC

Manuales de Aragorn

Problemas Enfrentados y su Solución:

La prompt de matlab aparecía cada vez que se ejecutaba un comando. La solución fue cerrar la salida estándar del proceso antes de ejecutar matlab.

close(ESCRIBE);

----------------------------------

Para salirse del programa sin dejar procesos "Zombies" se debió crear una función de salida, la cual se encarga de cerrar las tuberías y hacer que el padre espere por el término de sus hijos. Para esto se utilizó un señal que capturara cuando el usuario presione "ctrl-c".

signal(SIGINT,salida);

----------------------------------

Para poder medir la tasa cada delta_t segundos, se utilizó una interrupción por timer cada 1 segundo, de esta forma, si quería medirse la tasa cada 2 segundos, bastaba dividir el número de bytes por la tasa, con el operador "%", y cuando el resto es 0, enviar el dato a matlab.

signal(SIGALRM,alarma);

----------------------------------

Los argumentos de la función main son strings, por lo que se debió crear una función para transformar delta_t en entero, sin importar que su valor sea 1 o 93846.

int str2int(char *argv[4]);

----------------------------------

El resto de las tareas que pertenecen a la solución no se consideran un problema, pues sólo bastó con el estudio de ejemplos y manuales.