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_QUEUE_H_ 00012 #define __RED_WIRELESS_BS_QUEUE_H_ 00013 00014 #include <omnetpp.h> 00015 #include <vector> 00016 #include <string.h> 00017 #include <stdio.h> 00018 #include <math.h> 00019 #include <tr1/memory> 00020 #include "analysis.h" 00021 #include "BS_table.h" 00022 #include "DATA_m.h" 00023 /* 00024 * MODULO BS_queue: 00025 * Almacena en sus subcolas (tantas como prioridades de servicio) los paquetes cuyo 00026 * proximo destino es el que se indica en el parametro 'target', para luego transmitirlos 00027 * cuando se tiene el testigo, siguiendo el metodo de extraccion de paquetes de prioridad 00028 * estricta. 00029 */ 00030 typedef std::vector<int> int_vector_t; // VECTOR DE TIPO ENTERO 00031 typedef std::vector<long> long_vector_t; // VECTOR DE TIPO ENTERO LARGO 00032 typedef std::vector<cQueue> cQueue_vector_t; // VECTOR DE TIPO COLA 00033 class BS_queue : public cSimpleModule 00034 { 00035 private: 00036 FILE * Parametros_slot_BSqueue; 00037 FILE * Longitud_colas; 00038 00039 protected: 00040 opp_string target; 00041 virtual void initialize(); 00042 virtual void handleMessage(cMessage *msg); 00043 virtual int se_repite(char* nombre); 00044 virtual void finish(); 00045 00046 public: 00047 virtual const char * getTarget() const; 00048 virtual void setTarget(const char * target); 00049 int esPasarela; // Es esta BS una pasarela optico-wireless? 00050 int uso; // Puede usarse esta cola? 00051 int usado; // Se usa realmente esta cola? 00052 int Testigo; 00053 simtime_t Interval; 00054 int colas_salida; 00055 int colas_totales; 00056 int prioridades; 00057 double txrate; 00058 double t_slot; 00059 int used_index; 00060 simtime_t tiempo_slot; 00061 simtime_t timepacket; 00062 double t_frame; 00063 simtime_t tiempo_frame; 00064 int used_bs_queues; 00065 BS_table *Tabla; 00066 cQueue_vector_t queue; // Array de cubcolas cQueue, una por prioridad 00067 cTopology top; 00068 cTopology::Node *top_node; 00069 00070 // Ancho de banda (en Bytes) que se permite transmitir en cada posesion de testigo: 00071 double bandwidth; 00072 // Ancho de banda (en Bytes) que no se puede aprovechar en cada posesion de testigo: 00073 double remaining_bw; 00074 // Ancho de banda (en Bytes) que aun se puede transmitir durante un slot: 00075 double bw_left; 00076 // Ancho de banda (en Bytes) que se ha transmitido durante un slot: 00077 double bw_tx; 00078 // Ancho de banda (en Bytes) que se ha transmitido durante el slot anterior: 00079 double bw_tx_anterior; 00080 // Tiempo (segundos) que se ha usado para transmitir durante un slot: 00081 double time_tx; 00082 // Tiempo (segundos) que NO se ha aprovechado para transmitir durante un slot: 00083 double time_resto; 00084 00085 long paquetes_recibidos; 00086 long paquetes_colas; 00087 long_vector_t tamqueue; // Longitud de cada cola 00088 long_vector_t user_tamqueuepop; // Longitud de los paquetes borrados de las colas 00089 long_vector_t user_tamqueueextract; // Longitud de los paquetes checkeados previa extracci�n de las colas 00090 long_vector_t user_tamextract; // Longitud de los paquetes extraidos de las colas 00091 00092 long sumcheckedpacket; // Suma de los paquetes CHECKEADOS en el metodo de extraccion con prioridad estricta 00093 long sumextractedpacket; // Suma de los paquetes EXTRAIDOS en el metodo de extraccion con prioridad estricta 00094 long tamsumcola; // Suma de la longitud de los paquetes LLEGADOS a las colas de la BS_queue 00095 long_vector_t sumpaquete; // Suma de los paquetes checkeados en las colas 00096 long_vector_t sumcolapop; // Suma total de bytes extraidos de las colas 00097 long_vector_t bytes_cola; //Bytes que quedan en las colas tras cada ciclo 00098 double_vector_t media; // Media 00099 // Funcion para eliminar un paquete del inicio de una cola cQueue: 00100 virtual void deleteElement(cMessage *msg, int priority); 00101 // Metodos de extraccion de paquetes de los usuarios desde las colas de las BSs: 00102 virtual void strictpriorityqueue(); 00103 // Metodos de extraccion de paquetes de los usuarios desde las colas de las BSs: 00104 virtual void centralizedmethod(); 00105 // Funcion para chequear los paquetes del principio de cada cola para saber su longitud en Bytes: 00106 void chequeoPaquete(int index); 00107 // Funcion para extraer los paquetes del principio de cada cola: 00108 void envioPaquete(int priority); 00109 virtual void volcadoFicheros(); 00110 int volcado; 00111 int contador; 00112 }; 00113 00114 #endif