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 "ONU_Point_to_Point.h" 00012 #include "GATE_m.h" 00013 #include "REPORT_m.h" 00014 #include "ETHERNET_m.h" 00015 /* 00016 * MODULO ONU_Point_to_Point: 00017 */ 00018 Define_Module(ONU_Point_to_Point); 00019 00021 //FUNCION INITIALIZE()--> ESTA FUNCION SE INVOCA DESPUES DE QUE OMNET++ HA PUESTO EN MARCHA LA RED, EN LA CUAL SE LEEN LOS // 00022 // PARAMETROS DEL MODULO Y SE INICIALIZAN TODAS DAS LAS VARIABLES DECLARADAS PARA ESTE MODULO SIMPLE, SE // 00023 // ASIGNAN ESTRUCTURAS DE DATOS DINAMICOS Y SE ASIGNAN E INICIALIZAN LOS AUTOMENSAJES SI SON NECESARIOS // 00024 // PARA EL FUNCIONAMIENTO DE ESTE MODULO. // 00026 void ONU_Point_to_Point::initialize() 00027 { 00028 } 00029 00031 //FUNCION HANDLEMESSAGE(CMESSAGE *MSG)--> ESTA FUNCION SE INVOCA CON EL MENSAJE COMO PARAMETRO CADA VEZ QUE EL MODULO RECIBE UN // 00032 // UN MENSAJE O PAQUETE. SE RECORRE EL CODIGO IMPLEMENTADO PARA DEVOLVER UN VALOR O // 00033 // EJECUTAR UNA FUNCION DENTRO DEL MODULO SIMPLE. EL TIEMPO DE SIMULACION NO TRANSCURRE // 00034 // DENTRO DE LA LLAMADA DE LA FUNCION HANDLEMESSAGE(CMESSAGE *MSG) MIENTRAS RECORRE EL // 00035 // CODIGO IMPLEMENTADO. // // 00037 void ONU_Point_to_Point::handleMessage(cMessage *msg) 00038 { 00039 // VARIABLES 00040 int type = msg->getKind(); // VARIABLE TYPE PARA IDENTIFICAR LOS MENSAJES DE LA RED 00041 00042 // ESTRUCTURA CONDICIONAL SWITCH QUE NOS DIFERENCIA LOS MENSAJES QUE LLEGUEN A ESTE MODULO 00043 switch(type) 00044 { 00045 case 0: 00046 // LLEGA UN PAQUETE GATE CON IDENTIFICADOR = 0 00047 if(msg->getKind()==0) 00048 { 00049 GATEmsg *gatemsg = check_and_cast<GATEmsg *>(msg); // CHEQUEAMOS EL PAQUETE GATE 00050 00051 // VISUALIZAMOS ALGUNOS CAMPOS DEL PAQUETE GATE 00052 //ev<<" Paquete 'Gate' Recibido."<<endl; 00053 //ev<<" Direccion de destino: "<<gatemsg->getDestAddress()<<endl; 00054 //ev<<" Mi ID es: "<<getParentModule()->getIndex()<<endl; 00055 00056 // COMPARAMOS SI EL IDENTIFICADOR DE LA ONU EN LA QUE NOS ENCONTRAMOS ES IGUAL A LA DIRECCION DE DESTINO QUE CONTIENE EL PAQUETE GATE 00057 if(getParentModule()->getIndex()==gatemsg->getDestAddress()) 00058 { 00059 //ev<<" El paquete Gate recibido es para esta ONU, pasa a la capa MAC."<<endl; 00060 send(gatemsg, "onuptpmacOut"); // SI EL PAQUETE ES PARA ESTA ONU, SE ENVIA HACIA LA CAPA MAC DE LA ONU 00061 } 00062 else 00063 { 00064 //ev<<" Este paquete Gate no es para esta ONU, Eliminando."<<endl; 00065 delete gatemsg; // EN ESTE CASO, COMO EL PAQUETE GATE NO ES PARA ESTA ONU, ELIMINAMOS EL PAQUETE GATE 00066 } 00067 } 00068 break; 00069 00070 case 1: 00071 // LLEGA UN PAQUETE ETHERNET CON IDENTIFICADOR = 1 00072 if(msg->getKind()==1) 00073 { 00074 ETHERNETmsg *ethernetmsg=check_and_cast<ETHERNETmsg*>(msg); // CHEQUEAMOS EL PAQUETE ETHERNET 00075 00076 // VISUALIZAMOS ALGUNOS CAMPOS DEL PAQUETE ETHERNET 00077 //ev<<" Paquete Ethernet Recibido."<<endl; 00078 //ev<<" Direccion de destino: "<<ethernetmsg->getDestAddress()<<endl; 00079 //ev<<" Mi ID es: "<<getParentModule()->getIndex()<<endl; 00080 00081 // COMPARAMOS SI EL IDENTIFICADOR DE LA ONU EN LA QUE NOS ENCONTRAMOS ES IGUAL A LA DIRECCION DE DESTINO QUE CONTIENE EL PAQUETE ETHERNET 00082 if(getParentModule()->getIndex()==ethernetmsg->getDestAddress()) 00083 { 00084 //ev<<" El paquete Ethernet recibido es para esta ONU, pasa a la capa MAC."<<endl; 00085 send(ethernetmsg, "onuptpmacOut"); // SI EL PAQUETE ES PARA ESTA ONU, SE ENVIA HACIA LA CAPA MAC DE LA ONU 00086 } 00087 else 00088 { 00089 //ev<<" Este paquete Ethernet no es para esta ONU, Eliminando."<<endl; 00090 delete ethernetmsg; // EN ESTE CASO, COMO EL PAQUETE ETHERNET NO ES PARA ESTA ONU, ELIMINAMOS EL PAQUETE ETHERNET 00091 } 00092 } 00093 break; 00094 00095 default: 00096 delete msg; 00097 break; 00098 } 00099 } 00100