00001 00002 // PROYECTO FIN DE CARRERA // 00003 // TITULO: Disenyo de nuevas arquitecturas y algoritmos de gestión de recursos en // 00004 // redes de acceso FiWi // 00005 // AUTOR: Ana Emma Lopez Mato // 00006 // TUTOR: Noemi Merayo Alvarez // 00007 // INGENIERIA TECNICA DE TELECOMUNICACIONES, SISTEMAS DE TELECOMUNICACION // 00008 // UNIVERSIDAD DE VALLADOLID // 00010 00011 #include "BS_table.h" 00012 /* 00013 * MODULO BS_table: 00014 * Contiene las diferentes tablas empleadas por el modulo BS para realizar el 00015 * encaminamiento de los paquetes: 00016 * array_de_rutas: Tabla con el nombre de los nodos que forman todas las rutas posibles. 00017 * array_de_longitudes: Tabla con la longitud (metros) de todas las rutas posibles. 00018 * array_de_retardos: Tabla con el retardo (segundos) de todas las rutas posibles. 00019 * rutas_optimas: Tabla con la ruta optima para cada usuario inalambrico. 00020 */ 00021 Define_Module(BS_table); 00022 00024 //FUNCION INITIALIZE()--> ESTA FUNCION SE INVOCA DESPUES DE QUE OMNET++ HA PUESTO EN MARCHA LA RED, EN LA CUAL SE LEEN LOS // 00025 // PARIMETROS DEL MODULO Y SE INICIALIZAN TODAS DAS LAS VARIABLES DECLARADAS PARA ESTE MODULO SIMPLE, SE // 00026 // ASIGNAN ESTRUCTURAS DE DATOS DINIMICOS Y SE ASIGNAN E INICIALIZAN LOS AUTOMENSAJES SI SON NECESARIOS // 00027 // PARA EL FUNCIONAMIENTO DE ESTE MODULO. // 00029 void BS_table::initialize() 00030 { 00031 paquetes_borrados = 0; // Total paquetes borrados por esta BS 00033 int usuarios = (int) this->getParentModule()->par("numUser"); 00034 int num_pasarelas = (int) this->getParentModule()->par("numGW"); 00035 int connections = (int) this->getParentModule()->par("conexiones"); 00036 int estaciones = (int) this->getParentModule()->par("numBS"); 00037 filas = estaciones*connections*num_pasarelas*usuarios*2; 00038 columnas = 2 + estaciones; 00039 array_de_longitudes.resize(filas); 00040 array_de_retardos.resize(filas); 00041 array_de_pesos.resize(filas); 00042 array_de_rutas.resize(filas); 00043 saltos_total_rutas.resize(filas,0); 00044 longitud_total_rutas.resize(filas,0); // Vector con la longitud de User a ONU de cada ruta 00045 retardo_total_rutas.resize(filas,0.0); // Vector con el retardo de propagacion de User a ONU de cada ruta 00046 peso_total_rutas.resize(filas,0.0); 00047 rutas_optimas.resize(usuarios); 00048 // CREAMOS LAS 4 TABLAS GENERALES MEDIANTE EL BUCLE FOR 00049 for(int m=0;m<filas;m++) 00050 { 00051 // Tabla con las distancias de los enlaces de todos los caminos posibles 00052 array_de_longitudes[m].resize(columnas,0); 00053 // Tabla con los retardos de los enlaces de todos los caminos posibles 00054 array_de_retardos[m].resize(columnas,0.0); 00055 // Tabla con los pesos de los enlaces de todos los caminos posibles: 00056 array_de_pesos[m].resize(columnas,0.0); 00057 // Tabla con los nombres de los nodos que forman todos los caminos posibles 00058 array_de_rutas[m].resize(columnas," "); 00059 } 00060 // CREAMOS LA TABLAS CON LA RUTA OPTIMA PARA CADA USUARIO MEDIANTE EL BUCLE FOR 00061 for(int n=0;n<usuarios;n++) 00062 { 00063 rutas_optimas[n].resize(columnas," "); 00064 } 00065 rutas_optimas_pasarelas.resize(num_pasarelas); 00066 // CREAMOS LAS TABLAS CON LOS INDICES DE LAS POSIBLES RUTAS PARA CADA USUARIO, Y EL NUMERO DE RUTAS: 00067 indices_rutas.resize(usuarios); 00068 num_rutas.resize(usuarios); 00069 for(int m=0;m<usuarios;m++) 00070 { 00071 num_rutas[m].resize(num_pasarelas,0); 00072 } 00073 } 00074 00076 //FUNCION HANDLEMESSAGE(CMESSAGE *MSG)--> ESTA FUNCION SE INVOCA CON EL MENSAJE COMO PARAMETRO CADA VEZ QUE EL MODULO RECIBE UN // 00077 // UN MENSAJE O PAQUETE. SE RECORRE EL CODIGO IMPLEMENTADO PARA DEVOLVER UN VALOR O // 00078 // EJECUTAR UNA FUNCION DENTRO DEL MODULO SIMPLE. EL TIEMPO DE SIMULACION NO TRANSCURRE // 00079 // DENTRO DE LA LLAMADA DE LA FUNCION HANDLEMESSAGE(CMESSAGE *MSG) MIENTRAS RECORRE EL // 00080 // CODIGO IMPLEMENTADO. // // 00082 void BS_table::handleMessage(cMessage *msg) 00083 { 00084 /* NO SE UTILIZA */ 00085 } 00086 00088 //FUNCION FINISH()--> ESTA FUNCION SE INVOCA CUANDO LA SIMULACION HA TERMINADO CON EXITO SIN QUE SE PRODUZCA NINGUN ERROR. // 00089 // LO USAMOS PARA LA RECOGIDA DE ESTADASTICAS Y VISUALIZACION POR PANTALLA O MEDIANTE UN ARCHIVO. // 00091 void BS_table::finish() 00092 { 00093 /* NO SE UTILIZA */ 00094 }