Name | Description |
---|---|
red_hibrida (network) |
Las conexiones entre BSs se realizan en función de la distancia entre las mismas DIFERENCIA CON 'wireless3': La distancia máxima se tiene en cuenta al crear el canal, en este .ned. |
//////////////////////////////////////////////////////////////////////////////////////// // PROYECTO FIN DE CARRERA // // TITULO: Diseño e Implementacion de Nuevas Arquitecturas de Acceso Hibridas // // Opticas-wireless // // AUTOR: Ana Emma Lopez Mato // // TUTOR: Noemi Merayo Alvarez // // INGENIERIA TECNICA DE TELECOMUNICACIONES, SISTEMAS DE TELECOMUNICACION // // UNIVERSIDAD DE VALLADOLID // //////////////////////////////////////////////////////////////////////////////////////// package red_wireless; import ned.DelayChannel; // Las conexiones entre BSs se realizan en función de la distancia entre las mismas // DIFERENCIA CON 'wireless3': La distancia máxima se tiene en cuenta al crear el canal, en este .ned. network red_hibrida { @display("bgl=6;bgs=0.3,m;i=misc/cloud;bgi=background/streetmap,s"); // Cada 0.3 píxeles del layout representan 1 metro int numBS; int numUser; int numGW; int criterio; int numcolas; int longitud_media_paquete; double tasabinaria; double delta_time; double buffer_size; double carga_nodo; int rows = numGW; int columns = ceil(numBS/numGW); int user_longpacketfixed0_trimodal1; int user_numstreamV2_32_128_256; int user_insercionmethod_separatequeue0_priorityqueue1; int user_extractionmethod_StrictPQ0_Centralized1; int oltmethod_Centralized0_Polling1_wdm2_PollingPID3_DaSPID4; int extractionmethod_StrictPQ0_Centralized1; int insercionmethod_separatequeue0_priorityqueue1; int methodlength_longvariable0_longfija1; int longpacketfixed0_trimodal1; int numstreamV2_32_128_256; double node_load; int numOnu; double longpon1; double longpon2; int numlong; double tambuffer; double txrate; int numqueue; int numSLA; int w_sla0; int w_sla1; int w_sla2; int w_sla3; int w_sla4; int BW_garantizado0; int BW_garantizado1; int BW_garantizado2; int numonu_sla0; int numonu_sla1; int numonu_sla2; int numonu_sla3; int numonu_sla4; int conexiones; int caminos; types: channel wifi extends ned.DelayChannel { @display("ls=,0"); // Canal 'wifi': BS<-->User double distanceWifi; //Longitud del canal double Weight = 0.0; //Peso del canal double propag_delay = distanceWifi * 0.00000000333333333; //Retardo de propagacion del canal // retardo = distancia/velocidad_luz_en_aire(3*10^8m/s) delay = 0s; //Retardo inherente al canal // NOTA: Si quiere accederse remotamente al canal y a sus parametros, el indice de cada uno es: // getChannel()->par(0) = (bool) isDisabled // getChannel()->par(1) = (double) delay // getChannel()->par(2) = (double) distanceWifi // getChannel()->par(3) = (double) Weight // getChannel()->par(4) = (double) propag_delay } channel hops extends ned.DelayChannel { @display("ls=purple,1,da"); // Canal 'hops': BS<-->BS double distanceHops; //Longitud del canal double Weight = 0.0; //Peso del canal double propag_delay = distanceHops * 0.00000000333333333; //Retardo de propagacion del canal // retardo = distancia/velocidad_luz_en_aire(3*10^8m/s) delay = 0s; //Retardo inherente al canal // NOTA: Si quiere accederse remotamente al canal y a sus parametros, el indice de cada uno es: // getChannel()->par(0) = (bool) isDisabled // getChannel()->par(1) = (double) delay // getChannel()->par(2) = (double) distanceHops // getChannel()->par(3) = (double) Weight // getChannel()->par(4) = (double) propag_delay } channel pasarela extends ned.DelayChannel { @display("ls=orange,1,s"); // Canal 'pasarela': BS <--> ONU double distancePasarela; //Longitud del canal double Weight = 0.0; //Peso del canal double propag_delay = distancePasarela * 0.00000000333333333; //Retardo de propagacion del canal // retardo = distancia/velocidad_luz_en_aire(3*10^8m/s) delay = 0s; //Retardo inherente al canal // NOTA: Si quiere accederse remotamente al canal y a sus parametros, el indice de cada uno es: // getChannel()->par(0) = (bool) isDisabled // getChannel()->par(1) = (double) delay // getChannel()->par(2) = (double) distanceHops // getChannel()->par(3) = (double) Weight // getChannel()->par(4) = (double) propag_delay } channel pon1 extends ned.DelayChannel { @display("ls=red,2,s"); // Canal 'pon1': OLT <--> SPLITTER delay = lengthpon1 * 0.000000005s; //Retardo inherente al canal optico // retardo = longitud/velocidad_luz_en_fibra(2*10^8m/s) double lengthpon1 = longpon1; //Longitud del canal } channel pon2 extends ned.DelayChannel { @display("ls=red,2,s"); // Canal 'pon2': SPLITTER <--> ONUs delay = lengthpon2 * 0.000000005s; //Retardo inherente al canal // retardo = longitud/velocidad_luz_en_fibra(2*10^8m/s) double lengthpon2 = longpon2; //Longitud del canal } submodules: // numBS modulos BS bs[numBS]: BS { parameters: @display("p=1250,350,matrix,$columns,250,250;r=250,,red"); // Matriz de "$columns" columnas, con los elementos separados 100 píxeles numBS = numBS; numUser = numUser; numGW = numGW; numcolas = numcolas; carga_nodo = carga_nodo; delta_time = delta_time; buffer_size = buffer_size; longitud_media_paquete = longitud_media_paquete; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; posicion = uniform(1.0,750.0,0); indice = 0; gates: physicalBS[conexiones]; } // numUser modulos User user[numUser]: User { parameters: @display("r=250,,cyan"); numBS = numBS; numUser = numUser; numGW = numGW; location = 0.0; //uniform(1.0,250.0,0); tasabinaria = tasabinaria; numcolas = numcolas; buffer_size = buffer_size; carga_nodo = carga_nodo; longitud_media_paquete = longitud_media_paquete; user_longpacketfixed0_trimodal1 = user_longpacketfixed0_trimodal1; user_numstreamV2_32_128_256 = user_numstreamV2_32_128_256; user_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; } // Modulo OLT olt: OLT { parameters: @display("p=250,675"); oltmethod_Centralized0_Polling1_wdm2_PollingPID3_DaSPID4 = oltmethod_Centralized0_Polling1_wdm2_PollingPID3_DaSPID4; extractionmethod_StrictPQ0_Centralized1 = extractionmethod_StrictPQ0_Centralized1; methodlength_longvariable0_longfija1 = methodlength_longvariable0_longfija1; numOnu = numOnu; numlong = numlong; txrate = txrate; numqueue = numqueue; longpon1 = longpon1; longpon2 = longpon2; numSLA = numSLA; w_sla0 = w_sla0; w_sla1 = w_sla1; w_sla2 = w_sla2; w_sla3 = w_sla3; w_sla4 = w_sla4; numonu_sla0 = numonu_sla0; numonu_sla1 = numonu_sla1; numonu_sla2 = numonu_sla2; numonu_sla3 = numonu_sla3; numonu_sla4 = numonu_sla4; gates: physicalolt[numlong]; } // Modulo SPLITTER splitter: SPLITTER { parameters: @display("p=500,675"); numlong = numlong; gates: splitterIn[numlong]; splitterOut[numlong*numOnu]; } // numOnu modulos ONU onu[numOnu]: ONU { parameters: @display("p=,,column,150"); extractionmethod_StrictPQ0_Centralized1 = extractionmethod_StrictPQ0_Centralized1; insercionmethod_separatequeue0_priorityqueue1 = insercionmethod_separatequeue0_priorityqueue1; methodlength_longvariable0_longfija1 = methodlength_longvariable0_longfija1; longpacketfixed0_trimodal1 = longpacketfixed0_trimodal1; numstreamV2_32_128_256 = numstreamV2_32_128_256; node_load = node_load; numlong = numlong; tambuffer = tambuffer; txrate = txrate; numqueue = numqueue; numcolas = numcolas; numOnu = numOnu; dist_pasarela = 0.0; //uniform(1.0,500.0,0); gates: physicalonu[numlong]; gatewirelessInOut[numqueue*2]; } // Bucles de conexiones hechos de forma dinámica. connections allowunconnected: // Conexion de cada BS con su conjunto de numUser usuarios (interfaces de User) for i=0..numUser-1 { user[i].physicalUser <--> wifi { distanceWifi = user[i].location; } <--> bs[i].physicalBS++; } // Conexiones entre cada BS pasarela y su ONU asociada for i=0..numGW-1, for j=0..numcolas-1 { bs[i].physicalBS++ <--> pasarela { distancePasarela = onu[i].dist_pasarela; } <--> onu[i].gatewirelessInOut++; } // Conexion de las numBS estaciones base según su distancia máxima for i=0..numBS-1, for j=0..numBS-1 { bs[i].physicalBS++ <--> hops { distanceHops = fabs( bs[i].posicion - bs[j].posicion); } <--> bs[j].physicalBS++ if fabs(bs[i].posicion - bs[j].posicion)<501 && fabs(bs[i].posicion - bs[j].posicion)>100 && i<j; } // Conexion entre el OLT y el SPLITTER for j=0..numlong-1 { olt.physicalolt[j] <--> pon1 <--> splitter.splitterIn[j]; } // Conexion entre el SPLITTER y todas las ONUs for j=0..(numlong*numOnu)-1 { splitter.splitterOut[j] <--> pon2 <--> onu[j/numlong].physicalonu[j%numlong]; } }