NED File SFNet.ned

Name Description
SFNet (network)

Modelado de SFNet, red WOBAN de San Francisco con 25 BSs, 25 usuarios, 16 ONUs, 1 OLT y 1 Splitter. 5 de BSs-pasarela conectan con 4 ONUs-pasarela.

Source code:

////////////////////////////////////////////////////////////////////////////////////////
// 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;
//Modelado de SFNet, red WOBAN de San Francisco con 25 BSs, 25 usuarios, 16 ONUs, 1 OLT y 1 Splitter.
// 5 de BSs-pasarela conectan con 4 ONUs-pasarela.
network SFNet
{
    @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; //Numero de estaciones base en la parte inalambrica de la red de acceso
    int numUser; //Numero de usuarios inalambricos conectados a las estaciones base
    int numGW; //Numero de BSs que actuan como pasarelas entre la parte optica y la inalambrica
    int criterio; //Criterio aplicado para realizar el encaminamiento (SPRA, MHRA, DARA).
    int numcolas; //Numero de clases de servicio en la parte inalambrica
    int longitud_media_paquete; //Longitud media de los paquetes generados en los modulos User_traffic[] (en Bytes)
    int conexiones; //Longitud del array de puertas physicalBS[] del modulo compuesto BS
    int caminos; //Parametro para elegir el numero de "caminos optimos" por el que se encaminan los paquetes inalambricos
    double tasabinaria; // Capacidad de radio de las BSs
    double delta_time; // Tiempo de ciclo de cada enlace de las BSs
    double buffer_size; //Tamanyo del buffer de cada BS
    double carga_nodo; //Carga de cada fuente de trafico de los usuarios inalambricos
    int user_insercionmethod_separatequeue0_priorityqueue1; //Parametro para elegir el metodo de insercion de los paquetes en los modulos BS_queue[]
    int user_extractionmethod_StrictPQ0_Centralized1; //Parametro para elegir el metodo de extraccion de los paquetes en los modulos BS_queue[]
    double node_load; //Carga de las fuentes de trafico optico
    int numOnu; //Numero de ONUs en la subred EPON
    double longpon1; //Longitud del enlace entre OLT y Splitter
    double longpon2; //Longitud del enlace entre SPlitter y ONUs
    int numlong; //Numero de longitudes de onda que soporta la parte optica de la red
    double tambuffer; //Tamanyo del buffer de cada ONU
    double txrate; //Capacidad de transmision de cada enlace optico
    int oltmethod_Centralized0_Polling1_wdm2_PollingPID3_DaSPID4; //Parametro para elegir el mecanismo de gestion de ancho de banda dinamico implementado en la capa MAC del OLT
    int extractionmethod_StrictPQ0_Centralized1; //Parametro para elegir el metodo de extraccion de paquetes de los modulos ONU_SISTqueue[]
    int insercionmethod_separatequeue0_priorityqueue1; //Parametro para elegir el metodo de insercion de paquetes en los modulos ONU_SISTqueue[]
    int methodlength_longvariable0_longfija1; //Parametro para elegir la configuracion de los enlaces de la subred EPON (longitud fija o variable)
    int longpacketfixed0_trimodal1; //Parametro para elegir el modo de generacion de trafico Self-Similar (paquetes de longitud fija o trimodal)
    int numstreamV2_32_128_256; //Parametro para elegir el numero de streams de cada fuente optica Self-Similar
    int numqueue; //Numero de clases de servicio en la parte optica de la red hibrida
    int numSLA; //Numero de SLAs que soporta la subred optica
    int w_sla0; //Peso del SLA0
    int w_sla1; //Peso del SLA1
    int w_sla2; //Peso del SLA2
    int w_sla3; //Peso del SLA3
    int w_sla4; //Peso del SLA4
    int numonu_sla0; //Numero de ONUs asociadas al SLA0
    int numonu_sla1; //Numero de ONUs asociadas al SLA1
    int numonu_sla2; //Numero de ONUs asociadas al SLA2
    int numonu_sla3; //Numero de ONUs asociadas al SLA3
    int numonu_sla4; //Numero de ONUs asociadas al SLA4
    int BW_garantizado0; //Ancho de banda garantizado para el SLA0
    int BW_garantizado1; //Ancho de banda garantizado para el SLA1
    int BW_garantizado2; //Ancho de banda garantizado para el SLA2
    types:
        channel wifi extends ned.DelayChannel
        {
            // Canal 'wifi': BS<-->User
            @display("ls=,0");
            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
        {
            // Canal 'hops': BS<-->BS
            @display("ls=purple,1,da");
            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:
        bs0: BS {
            parameters:
                @display("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];
        }
        bs1: BS {
            parameters:
                @display("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];
        }
        bs2: BS {
            parameters:
                @display("is=s;p=1515.3846,1603.8462");
                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];
        }
        bs3: BS {
            parameters:
                @display("is=s;p=1880.7693,1538.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 = 3;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs4: BS {
            parameters:
                @display("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];
        }
        bs5: BS {
            parameters:
                @display("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];
        }
        bs6: BS {
            parameters:
                @display("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];
        }
        bs7: BS {
            parameters:
                @display("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];
        }
        bs8: BS {
            parameters:
                @display("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];
        }
        bs9: BS {
            parameters:
                @display("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];
        }
        bs10: BS {
            parameters:
                @display("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];
        }
        bs11: BS {
            parameters:
                @display("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];
        }
        bs12: BS {
            parameters:
                @display("is=s;p=2330.7693,1469.2308");
                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];
        }
        bs13: BS {
            parameters:
                @display("is=s;p=2573.077,1665.3846");
                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;
                txrate = txrate;
            gates:
                physicalBS[conexiones];
        }
        bs14: BS {
            parameters:
                @display("is=s;p=2573.077,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 = 14;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs15: BS {
            parameters:
                @display("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 = 15;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs16: BS {
            parameters:
                @display("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 = 16;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs17: BS {
            parameters:
                @display("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 = 17;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs18: BS {
            parameters:
                @display("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 = 18;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs19: BS {
            parameters:
                @display("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 = 19;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs20: BS {
            parameters:
                @display("is=s;p=2857.6924,646.1539");
                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 = 20;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs21: BS {
            parameters:
                @display("is=s;p=2823.0771,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;
                indice = 21;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs22: BS {
            parameters:
                @display("is=s;p=2507.6924,365.38464");
                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 = 22;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs23: BS {
            parameters:
                @display("is=s;p=2300,150");
                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 = 23;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        bs24: BS {
            parameters:
                @display("is=s;p=2734.6155,215.38463");
                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 = 24;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones];
        }
        user[numUser]: User {
            parameters:
                @display("is=s");
                caminos = caminos;
                numBS = numBS;
                numUser = numUser;
                numGW = numGW;
                tasabinaria = tasabinaria;
                numcolas = numcolas;
                buffer_size = buffer_size;
                carga_nodo = carga_nodo;
                location = 0.0; //uniform(1.0,250.00,0);
                longitud_media_paquete = longitud_media_paquete;
                user_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1;
        }
        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];
        }
        splitter: SPLITTER {
            parameters:
                @display("p=296.15387,838.46155;i=abstract/dispatcher;is=s");
                numlong = numlong;
            gates:
                splitterIn[numlong];
                splitterOut[numlong*numOnu];
        }
        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];
        }
    connections allowunconnected:
        // Conexiones entre cada BS y su User asociado (distancias creadas aleatoriamente):
        user[0].physicalUser <--> wifi {  distanceWifi = user[0].location; } <--> bs0.physicalBS++;
        user[1].physicalUser <--> wifi {  distanceWifi = user[1].location; } <--> bs1.physicalBS++;
        user[2].physicalUser <--> wifi {  distanceWifi = user[2].location; } <--> bs2.physicalBS++;
        user[3].physicalUser <--> wifi {  distanceWifi = user[3].location; } <--> bs3.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[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++;
        user[15].physicalUser <--> wifi {  distanceWifi = user[15].location; } <--> bs15.physicalBS++;
        user[16].physicalUser <--> wifi {  distanceWifi = user[16].location; } <--> bs16.physicalBS++;
        user[17].physicalUser <--> wifi {  distanceWifi = user[17].location; } <--> bs17.physicalBS++;
        user[18].physicalUser <--> wifi {  distanceWifi = user[18].location; } <--> bs18.physicalBS++;
        user[19].physicalUser <--> wifi {  distanceWifi = user[19].location; } <--> bs19.physicalBS++;
        user[20].physicalUser <--> wifi {  distanceWifi = user[20].location; } <--> bs20.physicalBS++;
        user[21].physicalUser <--> wifi {  distanceWifi = user[21].location; } <--> bs21.physicalBS++;
        user[22].physicalUser <--> wifi {  distanceWifi = user[22].location; } <--> bs22.physicalBS++;
        user[23].physicalUser <--> wifi {  distanceWifi = user[23].location; } <--> bs23.physicalBS++;
        user[24].physicalUser <--> wifi {  distanceWifi = user[24].location; } <--> bs24.physicalBS++;

		// Conexiones entre las 5 BSs-pasarela y la correspondiente ONU-pasarela (distancia nula):
        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 {
            bs24.physicalBS++ <--> pasarela <--> onu[1].gatewirelessInOut++;
        }
        for j=0..numcolas-1 {
            bs19.physicalBS++ <--> pasarela <--> onu[2].gatewirelessInOut++;
        }
        for j=0..numcolas-1 {
            bs13.physicalBS++ <--> pasarela <--> onu[3].gatewirelessInOut++;
        }

		// Conexiones entre los 25 modulos BS de la red inalambrica en malla (distancias reales):
        bs0.physicalBS++ <--> hops {  distanceHops = 269.23; } <--> bs1.physicalBS++;
        bs0.physicalBS++ <--> hops {  distanceHops = 571.15; } <--> bs2.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.00; } <--> bs7.physicalBS++;
        bs2.physicalBS++ <--> hops {  distanceHops = 380.77; } <--> bs3.physicalBS++;
        bs2.physicalBS++ <--> hops {  distanceHops = 419.23; } <--> bs5.physicalBS++;
        bs3.physicalBS++ <--> hops {  distanceHops = 435.77; } <--> bs4.physicalBS++;
        bs3.physicalBS++ <--> hops {  distanceHops = 387.50; } <--> bs11.physicalBS++;
        bs3.physicalBS++ <--> hops {  distanceHops = 444.23; } <--> bs12.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; } <--> bs17.physicalBS++;
        bs9.physicalBS++ <--> hops {  distanceHops = 395.00; } <--> bs23.physicalBS++;
        bs10.physicalBS++ <--> hops {  distanceHops = 435.38; } <--> bs11.physicalBS++;
        bs10.physicalBS++ <--> hops {  distanceHops = 339.23; } <--> bs16.physicalBS++;
        bs10.physicalBS++ <--> hops {  distanceHops = 308.08; } <--> bs17.physicalBS++;
        bs11.physicalBS++ <--> hops {  distanceHops = 440.77; } <--> bs12.physicalBS++;
        bs11.physicalBS++ <--> hops {  distanceHops = 359.23; } <--> bs15.physicalBS++;
        bs11.physicalBS++ <--> hops {  distanceHops = 351.54; } <--> bs16.physicalBS++;
        bs12.physicalBS++ <--> hops {  distanceHops = 300.00; } <--> bs13.physicalBS++;
        bs12.physicalBS++ <--> hops {  distanceHops = 371.15; } <--> bs14.physicalBS++;
        bs12.physicalBS++ <--> hops {  distanceHops = 359.62; } <--> bs15.physicalBS++;
        bs13.physicalBS++ <--> hops {  distanceHops = 454.23; } <--> bs14.physicalBS++;
        bs14.physicalBS++ <--> hops {  distanceHops = 230.77; } <--> bs15.physicalBS++;
        bs14.physicalBS++ <--> hops {  distanceHops = 269.23; } <--> bs19.physicalBS++;
        bs15.physicalBS++ <--> hops {  distanceHops = 217.31; } <--> bs16.physicalBS++;
        bs15.physicalBS++ <--> hops {  distanceHops = 405.77; } <--> bs19.physicalBS++;
        bs16.physicalBS++ <--> hops {  distanceHops = 332.69; } <--> bs17.physicalBS++;
        bs16.physicalBS++ <--> hops {  distanceHops = 390.38; } <--> bs18.physicalBS++;
        bs16.physicalBS++ <--> hops {  distanceHops = 486.54; } <--> bs19.physicalBS++;
        bs17.physicalBS++ <--> hops {  distanceHops = 315.38; } <--> bs18.physicalBS++;
        bs17.physicalBS++ <--> hops {  distanceHops = 350.00; } <--> bs22.physicalBS++;
        bs18.physicalBS++ <--> hops {  distanceHops = 384.62; } <--> bs19.physicalBS++;
        bs18.physicalBS++ <--> hops {  distanceHops = 305.77; } <--> bs20.physicalBS++;
        bs18.physicalBS++ <--> hops {  distanceHops = 351.92; } <--> bs21.physicalBS++;
        bs18.physicalBS++ <--> hops {  distanceHops = 295.38; } <--> bs22.physicalBS++;
        bs19.physicalBS++ <--> hops {  distanceHops = 372.12; } <--> bs20.physicalBS++;
        bs20.physicalBS++ <--> hops {  distanceHops = 216.54; } <--> bs21.physicalBS++;
        bs21.physicalBS++ <--> hops {  distanceHops = 313.85; } <--> bs22.physicalBS++;
        bs21.physicalBS++ <--> hops {  distanceHops = 218.46; } <--> bs24.physicalBS++;
        bs22.physicalBS++ <--> hops {  distanceHops = 272.31; } <--> bs23.physicalBS++;
        bs22.physicalBS++ <--> hops {  distanceHops = 276.15; } <--> bs24.physicalBS++;
        bs23.physicalBS++ <--> hops {  distanceHops = 429.62; } <--> bs24.physicalBS++;

		// 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];
        }
}