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 #ifndef __RED_WIRELESS_BS_MAC_H_ 00012 #define __RED_WIRELESS_BS_MAC_H_ 00013 00014 #include <omnetpp.h> 00015 #include <vector> 00016 #include "BS_table.h" 00017 #include "BS_queue.h" 00018 #include "DATA_m.h" 00019 /* 00020 * MODULO BS_mac: 00021 * Elabora la tabla de encaminamiento para todos los usuarios wireless, estableciendo la 00022 * ruta optima en funcion de un criterio elegido en el fichero omnetpp.ini, de entre los 00023 * tres posibles: 00024 * 0->Camino de menor longitud, 1->Camino de menor retardo, 2->Camino de menos saltos. 00025 * Asimismo, gestiona la multiplexacion en tiempo de la capacidad de cada enlace de radio 00026 * saliente del modulo BS (cada enlace correspondiente a un submodulo BS_queue). 00027 */ 00028 typedef std::vector<int> int_vector_t; // VECTOR DE TIPO ENTERO 00029 typedef std::vector<cModule *> module_vector_t; // VECTOR DE TIPO cMODULE 00030 typedef std::vector<char*> string_vector_t; // VECTOR DE TIPO CADENA DE CARACTERES 00031 typedef std::vector<simtime_t> time_vector_t; // VECTOR DE TIPO CADENA DE CARACTERES 00032 typedef std::vector<double> double_vector_t; // VECTOR DE TIPO DOUBLE 00033 typedef std::vector< double_vector_t > double_matrix_t; // MATRIZ DE TIPO ENTERO 00034 00035 class BS_mac : public cSimpleModule 00036 { 00037 protected: 00038 virtual void initialize(); 00039 virtual void handleMessage(cMessage *msg); 00040 virtual void finish(); 00041 virtual int get_index_first_empty_row(); 00042 virtual int is_an_empty_row(int row); 00043 virtual int get_index_last_element(int row); 00044 virtual int ya_aparece(char* nombre_nodo, int fila, int indice); 00045 virtual int es_pasarela(cModule *node); 00046 virtual int conseguir_siguiente_puerta(int init_ind, int puertas, cModule *node); 00047 virtual int puerta_entrada_libre (cModule *node, int puertas); 00048 virtual int puerta_salida_libre (cModule *node, int puertas); 00049 virtual void calculo_ruta_shortest_path(int ind_usr); 00050 virtual void calculo_ruta_minimum_hop(int ind_usr); 00051 virtual void get_routes_for_each_user(int index); 00052 00053 public: 00054 FILE * retardo_wireless; 00055 Analysis retardo; 00056 int ind_primero; 00057 int max_fila; 00058 int filas; 00059 int columnas; 00060 int used_queues; 00061 int prioridades; 00062 int esPasarela; 00063 int enlaces_intermedios; 00064 int extraction_method; 00065 int nodos_actualizados; 00066 int actualizaciones; 00067 double t_frame; 00068 double t_slot; 00069 double txrate; 00070 double rxrate; 00071 double eff_cap; 00072 double C_i; 00073 double media_saltos; 00074 long sumcolas; 00075 simtime_t time_frame; 00076 BS_table *Tabla; 00077 BS_queue *cola; 00078 BS_queue *queue; 00079 int_vector_t opt_route; 00080 int_vector_t index_used_queues; 00081 string_vector_t nombres_bs; 00082 int_vector_t indices_pasarelas; 00083 cTopology top; 00084 cTopology::Node *top_node; 00085 simtime_t timepacket; 00086 time_vector_t slot_tx_delay; 00087 double_vector_t auxiliar_array; 00088 double_matrix_t auxiliar_matrix; 00089 virtual void get_num_used_queues(); 00090 virtual void extract_packets(); 00091 virtual void relleno_arrays_retardos(); 00092 virtual void recalculo_ruta_delay_aware(int ind_usr); 00093 virtual void routing(); 00094 }; 00095 00096 #endif