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_MAC_OLT_H_ 00012 #define __RED_WIRELESS_MAC_OLT_H_ 00013 00014 #include <omnetpp.h> 00015 #include <vector> 00016 #include "GATE_m.h" 00017 #include "REPORT_m.h" 00018 #include "ETHERNET_m.h" 00019 #include "OLT_Table.h" 00020 #include "ONU_SISTqueue.h" 00021 #include "analysis.h" 00022 using namespace std; 00023 /* 00024 * MODULO MAC_olt: 00025 */ 00026 //DEFINIMOS LOS TIPOS DE std DE LOS VECTORES Y MATRICES: 00027 typedef std::vector<int> int_vector_t; // VECTOR TIPO ENTERO 00028 typedef std::vector<double> double_vector_t; // VECTOR TIPO DOUBLE 00029 typedef std::vector<simtime_t> simtime_t_vector_t; // VECTOR DE TIPO TIEMPO 00030 typedef std::vector< int_vector_t > int_matrix_t; // MATRIZ DE TIPO ENTERO 00031 typedef std::vector< double_vector_t > double_matrix_t; // MATRIZ DE TIPO DOUBLE 00032 00033 class MAC_OLT : public cSimpleModule 00034 { 00035 private: 00036 00037 FILE * B_alloc_medio; // 00038 FILE * B_max_PID; 00039 FILE * BW_Mbps; 00040 FILE * BW_acum; 00041 FILE * B_total; 00042 FILE * pid_medio_file; 00043 FILE * controlfich; 00044 FILE * evaluacion_retardo_slas_P0; 00045 FILE * evaluacion_retardo_slas_P1; 00046 FILE * B_alloc_periodico; 00047 FILE * bloqueo_cad_daspid_P1; 00048 00049 std::vector <Analysis> desviacionBwMax; 00050 00051 public: 00052 int numInitStages() const; // FUNCION QUE INICIALIZA VARIAS ETAPAS. 00053 00054 ONU_SISTqueue *onu_queue; // DEFINIMOS VARIABLE PARA PODER ENTRAR EN EL MODULO OLT_TABLE 00055 OLT_Table *table_module; // DEFINIMOS VARIABLE PARA PODER ENTRAR EN EL MODULO OLT_TABLE 00056 long sumqueue; // VARIABLE DEL TAMANYO DE LA SUMA DE LOS PAQUETES DE LAS COLAS 00057 long sumbdemand; // VARIABLE DEL TAMANYO DE LA SUMA DEL ANCHO DE BANDA DEMANDADO 00058 long B_sobra; // VARIABLE DEL ANCHO DE BANDA DE SOBRA 00059 long B_exceded; // VARIABLE DEL ANCHO DE BANDA EN EXCESO 00060 simtime_t tstarttime; // VARIABLE DEL TIEMPO DE INICIO DE TRANSMISION 00061 double_vector_t B_alloc; // VECTOR DEL ANCHO DE BANDA ASIGNADO 00062 double_vector_t B_demand; // VECTOR DEL ANCHO DE BANDA DEMANDADO 00063 double_vector_t t_slot; // VECTOR DE TIEMPO DE SLOT DE LA ONU 00064 double_vector_t t_slot_initialization; // VECTOR DE TIEMPO DE SLOT DE LA ONU 00065 int_vector_t B_extra; // VECTOR DEL ANCHO DE BANDA EXTRA QUE SE ASIGNA A MAYORES 00066 simtime_t tiempo_tx_siguiente; // VARIABLE DE TIEMPO DE TRANSMISION DE LA SIGUIENTE ONU 00067 simtime_t tiempo_sim_delay_datarate; // VARIABLE DE TIEMPO DE LA SUMA DEL TIEMPO DE SIMULACION, RETARDO Y TIEMPO DE TRANSMISION DEL PAQUETE GATE 00068 double_vector_t T_alloc; // VECTOR DE TIEMPO ASIGNADO PARA TRANSMITIR 00069 double delay; // RETARDO DE NUESTRA RED DEPENDIENDO DE LA LONGITUD TOTAL DE LA RED 00070 simtime_t delay_pon1; // RETARDO DEL SEGMENTO DE LA RED QUE UNE EL OLT Y EL SPLITTER 00071 simtime_t_vector_t delay_pon2; // VECTOR DEL RETARDO DEL SEGMENTO DE LA RED QUE UNE EL SPLITTER Y CADA ONU 00072 simtime_t_vector_t delay_total; // VECTOR DE LA SUMA DE LOS RETARDOS DE CADA SEGMENTO DE LA RED (OLT-SPLITTER Y SPLITTER-ONU) 00073 double_vector_t B_ex_sla; // VECTOR DEL ANCHO DE BANDA ASOCIADO A CADA ONU SEGUN EL SLA ASOCIADO A LA ONU 00074 double_vector_t B_max_dmb; // VECTOR DEL ANCHO DE BANDA MAXIMO PARA CADA ONU 00075 int id_onu; // IDENTIFICADOR DE LA ONU 00076 double W_min; // PESO MANIMO CON UN VALOR FIJO DE 0.34 00077 double long_max; // LONGITUD MAXIMA QUE TIENE UNA ONU PARA TRANSMITIR DEPENDIENDO DEL B_cycle Y DEL NUMERO DE ONUs 00078 double B_basico; // ANCHO DE BANDA BASICO PARA TRANSMITIR QUE TIENE CADA ONU. 00079 double sumatorio; // VARIABLE QUE NOS INDICA EL SUMATORIO DE CADA PESO ASOCIADO A UN SLA POR SU NUMERO DE ONUS ASOCIADOS A SLA 00080 int_vector_t SLA_onu; // VECTOR EN EL QUE SE INTRODUCIRA LOS PESOS ASOCIADOS AL SLA QUE CORRESPONDE A CADA ONU 00081 int_vector_t numonu_sla;// VECTOR DEL NUMERO DE ONUs ASOCIADAS A CADA SLA 00082 int_vector_t Wsla; // VECTOR DE LOS PESOS DE CADA SLA 00083 int_vector_t numsla; // VECTOR QUE NOS GUARDA EL NUMERO DE SLA ASOCIADO A CADA ONU 00084 simtime_t_vector_t tiempo_tx_sig; //VECTOR PARA LAS VARIABLES DE TIEMPO DE LA SIGUIENTE ONU 00085 int aux; //VARIABLE AUXILIAR 00086 double_vector_t B_max_sla; //ANCHO DE BANDA MAXIMO POR SLA 00087 double_vector_t B_max_sla_ant; //ANCHO DE BANDA MAXIMO POR SLA 00088 int id; 00089 double tiempo_inic_PID; 00090 double tiempo_PID; 00091 int_vector_t numero_sla; //VECTOR QUE GUARDA EL NUMERO DE SLA PARA MANDAR EL GATE 00092 int_vector_t pet; //VECTOR QUE INDICA POR CADA ONU SI SE ACTIVA O NO EL PID 00093 double_vector_t error; //VECTOR QUE GUARDA EL ERROR POR ONU DEL PID 00094 double_vector_t sum_error; //VECTOR QUE GUARDA LA SUMA DEL ERROR POR ONU DEL PID 00095 double_vector_t BW_max_PID; //VECTOR DEL ANCHO DE BANDA MAXIMO POR ONU DEL PID 00096 double_vector_t BW_max_PID_ant; //VECTOR DEL ANCHO DE BANDA MAXIMO ANTERIOR POR ONU DEL PID 00097 double_vector_t control; //VECTOR QUE GUARDA LA VARIABLE CONTROL POR ONU PARA ESTABLECER EL PID 00098 double_vector_t error_ant; //VECTOR QUE GUARDA LOS ERRORES ANTERIORES POR ONU EN EL PID 00099 double_vector_t B_guarantee; //VECTOR QUE GUARDA EL ANCHO DE BANDA GARANTIZADO POR ONU PARA CALCULAR EL ERROR DEL PID 00100 vector<vector<vector<double> > > cola_vector; 00101 double_vector_t bw_acum_ONU; //VECTOR QUE GUARDA EL ANCHO DE BANDA ACUMULADO POR ONU 00102 double_vector_t bw_alg_ONU;//VECTOR QUE GUARDA LA MEDIA DEL ANCHO DE BANDA DE VENTANA 00103 double_vector_t bw_acum_Mbps; //VECTOR QUE GUARDA EL ANCHO DE BANDA ACUMULADO POR ONU EN MBPS 00104 double_vector_t bw_alg_Mbps; //VECTOR QUE GUARDA LA MEDIA DEL ANCHO DE BANDA DE VENTANA EN MBPS 00105 int intento_pid; 00106 int intento; 00107 int_vector_t BW_sla; 00108 int_vector_t BW_SLA_onu; 00109 int prueba; 00110 double_vector_t B_Mbps; 00111 double_vector_t B_alloc_total; 00112 00113 double_vector_t desviacionBwMaxGuar; 00114 double_vector_t cont_var_BwMax; 00115 double_vector_t var; 00116 double_vector_t var_Mbps; 00117 double_vector_t cont_var; 00118 double_vector_t error_abs; 00119 double_vector_t error_rel; 00120 double_vector_t var_Mbps_instantaneo; 00121 std::vector <Analysis> desviacion; 00122 double_vector_t PID_MEDIO; 00123 double_vector_t PID_MEDIO_TOTAL; 00124 int cont_aux0; 00125 int cont_aux2; 00126 int cont_aux10; 00127 int cont; 00128 double_vector_t B_Mbps_sla; 00129 00130 double_matrix_t delay_onu; // Suma del retardo de todos los paquetes recibidos en un ciclo de cada ONU y prioridad 00131 int_matrix_t paq_onu; // Numero total de paquetes recibidos en un ciclo de cada ONU y prioridad 00132 vector<vector<vector<vector<double> > > > vector_ventana; 00133 double_matrix_t retardo_alg_SLA; 00134 double_matrix_t retardo_acum_SLA; 00135 double_matrix_t retardo_alg_ONU; 00136 double_matrix_t retardo_max_ONU; 00137 double_vector_t sum_error_delay; 00138 double_vector_t error_ant_delay; 00139 int flagPrioridad; 00140 int flag_control_delay; 00141 int no_capacidad; //? 00142 int primera_vez; 00143 int aux_cont; 00144 int cont_auxiliar; 00145 int contador_aux; 00146 double_vector_t paquetes_borrados_P1; 00147 double_vector_t paquetes_recibidos_P1; 00148 00149 protected: 00150 virtual void initialize(int stage); 00151 virtual void handleMessage(cMessage *msg); 00152 00153 virtual void centralizedmethod_DMB(cMessage *msg); // DEFINICION DE LA FUNCION DEL METODO DMB DEL OLT 00154 virtual void pollingmethod_IPACT(cMessage *msg); // DEFINICION DE LA FUNCION DEL METODO IPACT DEL OLT 00155 virtual void wdmmethod (cMessage *msg); //DEFINICION DE LA FUNCION PARA EL METODO CON MODULACION WDM 00156 virtual void DBA_polling_PID (cMessage *msg); 00157 virtual void DBA_polling_DaSPID (cMessage *msg); //NUEVA// 00158 virtual void PID_control_delay (cMessage *msg); //NUEVA// 00159 virtual void recoger_delay_por_sla (int sla, double retardo, int prioridad); //NUEVA// 00160 virtual void PID (cMessage *msg); 00161 virtual void recoger_bw_por_onu (cMessage *msg); 00162 virtual void calcularvarianza (cMessage *msg); 00163 }; 00164 00165 #endif