Name | Description |
---|---|
SFNet_small (network) |
Version reducida de la red SFNet, en la que se ha limitado el numero de BSs y Users a 15. De las 15 BSs, 3 son pasarelas que conectan en total con 2 ONUs-pasarela. |
//////////////////////////////////////////////////////////////////////////////////////// // 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; // Version reducida de la red SFNet, en la que se ha limitado el numero de BSs y Users a 15. // De las 15 BSs, 3 son pasarelas que conectan en total con 2 ONUs-pasarela. network SFNet_small { @display("bgl=6;bgs=0.26,m;i=misc/cloud;bgi=background/SFNet_nodes_2,s;bgb=2992.308,1957.692"); // Cada 0.26 píxeles del layout representan 1 metro // Dimensiones del layout: 778x509px = 2992.3x1957.7m. int numBS; int numUser; int numGW; int criterio; int numcolas; int longitud_media_paquete; int conexiones; int caminos; double tasabinaria; double delta_time; double buffer_size; double carga_nodo; int rows = numGW; int columns = ceil(numBS/numGW); 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; 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 = 0; //Longitud del canal double Weight = 0.0; //Peso del canal double propag_delay = distancePasarela * 0.000000005; //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) distancePasarela // 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 optico // retardo = longitud/velocidad_luz_en_fibra(2*10^8m/s) double lengthpon2 = longpon2; //Longitud del canal } submodules: // numBS modulos BS bs0: BS { parameters: @display("is=s;p=1061.5385,1230.7693"); //@display("r=571,,red;is=s;p=1061.5385,1230.7693"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 0; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs1: BS { parameters: @display("is=s;p=1192.3077,969.23083"); //@display("r=318,,red;is=s;p=1192.3077,969.23083"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 1; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs4: BS { parameters: @display("is=s;p=1738.4615,1130.7693"); //@display("r=250,,red;is=s;p=1738.4615,1130.7693"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 4; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs5: BS { parameters: @display("is=s;p=1415.3846,1188.4615"); //@display("r=250,,red;is=s;p=1415.3846,1188.4615"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 5; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs6: BS { parameters: @display("is=s;p=1480.7693,838.46155"); //@display("r=250,,red;is=s;p=1480.7693,838.46155"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 6; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs7: BS { parameters: @display("is=s;p=1292.3077,673.07697"); //@display("r=250,,red;is=s;p=1292.3077,673.07697"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; txrate = txrate; indice = 7; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs8: BS { parameters: @display("is=s;p=1623.077,392.3077"); //@display("r=250,,red;is=s;p=1623.077,392.3077"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 8; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs9: BS { parameters: @display("is=s;p=1992.3077,423.07693"); //@display("r=250,,red;is=s;p=1992.3077,423.07693"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; txrate = txrate; indice = 9; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs10: BS { parameters: @display("is=s;p=1992.3077,750"); //@display("r=250,,red;is=s;p=1992.3077,750"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 10; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs11: BS { parameters: @display("is=s;p=2019.2308,1188.4615"); //@display("r=250,,red;is=s;p=2019.2308,1188.4615"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 11; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs2: BS { parameters: @display("is=s;p=2365.3848,1130.7693"); //@display("r=250,,red;is=s;p=2365.3848,1130.7693"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 2; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs3: BS { parameters: @display("is=s;p=2265.3848,926.9231"); //@display("r=250,,red;is=s;p=2265.3848,926.9231"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 3; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs12: BS { parameters: @display("is=s;p=2234.6155,592.30774"); //@display("r=250,,red;is=s;p=2234.6155,592.30774"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 12; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs13: BS { parameters: @display("is=s;p=2550,673.07697"); //@display("r=250,,red;is=s;p=2550,673.07697"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; indice = 13; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } bs14: BS { parameters: @display("is=s;p=2757.6924,1011.5385"); //@display("r=250,,red;is=s;p=2757.6924,1011.5385"); 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_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; user_extractionmethod_StrictPQ0_Centralized1 = user_extractionmethod_StrictPQ0_Centralized1; tasabinaria = tasabinaria; txrate = txrate; indice = 14; conexiones = conexiones; gates: physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso } // numUser modulos User user[numUser]: User { parameters: @display("is=s"); //@display("r=250,,cyan;is=s"); caminos = caminos; numBS = numBS; numUser = numUser; numGW = numGW; tasabinaria = tasabinaria; numcolas = numcolas; buffer_size = buffer_size; carga_nodo = carga_nodo; location = uniform(1.0,250.0,0); longitud_media_paquete = longitud_media_paquete; user_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1; } // Modulo OLT olt: OLT { parameters: @display("p=69.230774,838.46155"); 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=296.15387,838.46155;i=abstract/dispatcher;is=s"); numlong = numlong; gates: splitterIn[numlong]; splitterOut[numlong*numOnu]; } // numOnu modulos ONU onu[numOnu]: ONU { parameters: @display("p=588.46155,61.538464,column,150;i=abstract/db;is=s"); 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; gates: physicalonu[numlong]; gatewirelessInOut[numqueue*2]; } // Bucles de conexiones hechos de forma dinámica. connections allowunconnected: user[0].physicalUser <--> wifi { distanceWifi = user[0].location; } <--> bs0.physicalBS++; user[1].physicalUser <--> wifi { distanceWifi = user[1].location; } <--> bs1.physicalBS++; user[4].physicalUser <--> wifi { distanceWifi = user[4].location; } <--> bs4.physicalBS++; user[5].physicalUser <--> wifi { distanceWifi = user[5].location; } <--> bs5.physicalBS++; user[6].physicalUser <--> wifi { distanceWifi = user[6].location; } <--> bs6.physicalBS++; user[7].physicalUser <--> wifi { distanceWifi = user[7].location; } <--> bs7.physicalBS++; user[8].physicalUser <--> wifi { distanceWifi = user[8].location; } <--> bs8.physicalBS++; user[9].physicalUser <--> wifi { distanceWifi = user[9].location; } <--> bs9.physicalBS++; user[10].physicalUser <--> wifi { distanceWifi = user[10].location; } <--> bs10.physicalBS++; user[11].physicalUser <--> wifi { distanceWifi = user[11].location; } <--> bs11.physicalBS++; user[2].physicalUser <--> wifi { distanceWifi = user[2].location; } <--> bs2.physicalBS++; user[3].physicalUser <--> wifi { distanceWifi = user[3].location; } <--> bs3.physicalBS++; user[12].physicalUser <--> wifi { distanceWifi = user[12].location; } <--> bs12.physicalBS++; user[13].physicalUser <--> wifi { distanceWifi = user[13].location; } <--> bs13.physicalBS++; user[14].physicalUser <--> wifi { distanceWifi = user[14].location; } <--> bs14.physicalBS++; for j=0..numcolas-1 { bs7.physicalBS++ <--> pasarela <--> onu[0].gatewirelessInOut++; } for j=0..numcolas-1 { bs9.physicalBS++ <--> pasarela <--> onu[0].gatewirelessInOut++; } for j=0..numcolas-1 { bs14.physicalBS++ <--> pasarela <--> onu[2].gatewirelessInOut++; } bs0.physicalBS++ <--> hops { distanceHops = 269.23; } <--> bs1.physicalBS++; bs0.physicalBS++ <--> hops { distanceHops = 344.23; } <--> bs5.physicalBS++; bs1.physicalBS++ <--> hops { distanceHops = 297.12; } <--> bs5.physicalBS++; bs1.physicalBS++ <--> hops { distanceHops = 317.69; } <--> bs6.physicalBS++; bs1.physicalBS++ <--> hops { distanceHops = 350; } <--> bs7.physicalBS++; bs4.physicalBS++ <--> hops { distanceHops = 328.85; } <--> bs5.physicalBS++; bs4.physicalBS++ <--> hops { distanceHops = 388.85; } <--> bs6.physicalBS++; bs4.physicalBS++ <--> hops { distanceHops = 465.38; } <--> bs10.physicalBS++; bs4.physicalBS++ <--> hops { distanceHops = 280.77; } <--> bs11.physicalBS++; bs5.physicalBS++ <--> hops { distanceHops = 346.15; } <--> bs6.physicalBS++; bs6.physicalBS++ <--> hops { distanceHops = 257.69; } <--> bs7.physicalBS++; bs6.physicalBS++ <--> hops { distanceHops = 488.46; } <--> bs8.physicalBS++; bs6.physicalBS++ <--> hops { distanceHops = 515.38; } <--> bs10.physicalBS++; bs7.physicalBS++ <--> hops { distanceHops = 419.23; } <--> bs8.physicalBS++; bs8.physicalBS++ <--> hops { distanceHops = 396.15; } <--> bs9.physicalBS++; bs8.physicalBS++ <--> hops { distanceHops = 510.77; } <--> bs10.physicalBS++; bs9.physicalBS++ <--> hops { distanceHops = 318.08; } <--> bs10.physicalBS++; bs9.physicalBS++ <--> hops { distanceHops = 296.15; } <--> bs12.physicalBS++; bs10.physicalBS++ <--> hops { distanceHops = 435.38; } <--> bs11.physicalBS++; bs10.physicalBS++ <--> hops { distanceHops = 339.23; } <--> bs3.physicalBS++; bs10.physicalBS++ <--> hops { distanceHops = 308.08; } <--> bs12.physicalBS++; bs11.physicalBS++ <--> hops { distanceHops = 359.23; } <--> bs2.physicalBS++; bs11.physicalBS++ <--> hops { distanceHops = 351.54; } <--> bs3.physicalBS++; bs2.physicalBS++ <--> hops { distanceHops = 217.31; } <--> bs3.physicalBS++; bs2.physicalBS++ <--> hops { distanceHops = 405.77; } <--> bs14.physicalBS++; bs3.physicalBS++ <--> hops { distanceHops = 332.69; } <--> bs12.physicalBS++; bs3.physicalBS++ <--> hops { distanceHops = 390.38; } <--> bs13.physicalBS++; bs3.physicalBS++ <--> hops { distanceHops = 486.54; } <--> bs14.physicalBS++; bs12.physicalBS++ <--> hops { distanceHops = 315.38; } <--> bs13.physicalBS++; bs13.physicalBS++ <--> hops { distanceHops = 384.62; } <--> bs14.physicalBS++; 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]; } }