NED File SFNet_small2.ned

Name Description
SFNet_small2 (network)

Version reducida de la red SFNet, en la que se ha limitado el numero de BSs y Users a 10. De las 10 BSs, 3 son pasarelas que conectan en total con 2 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;
// Version reducida de la red SFNet, en la que se ha limitado el numero de BSs y Users a 10.
// De las 10 BSs, 3 son pasarelas que conectan en total con 2 ONUs-pasarela.
network SFNet_small2
{
    @display("bgl=6;bgs=0.26,m;i=misc/cloud;bgi=background/SFNet_nodes_2,s;bgb=2992.308,1957.692");
    //@display("bgl=6;bgs=0.26,m;i=misc/cloud;bgi=background/SFNet,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 user_longpacketfixed0_trimodal1;
    int user_numstreamV2_32_128_256;

    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
        {
            // 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.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) 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=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 = 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
        }
        bs2: 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 = 2;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso
        }
        bs3: BS {
            parameters:
                @display("is=s;p=2507.6924,365.38464");
                //@display("r=250,,red;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 = 3;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso
        }
        bs4: BS { 
            parameters:
                @display("is=s;p=2300,150");
                //@display("r=250,,red;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 = 4;
                conexiones = conexiones;
            gates:
                physicalBS[conexiones]; // Aunque la mayoria no se usan, se crean por si acaso
        }
        bs5: BS { 
            parameters:
                @display("is=s;p=2734.6155,215.38463");
                //@display("r=250,,red;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 = 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
        }
        // 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];
        }
        // 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 = 0.0; //uniform(1.0,250.0,0);
                longitud_media_paquete = longitud_media_paquete;
                user_insercionmethod_separatequeue0_priorityqueue1 = user_insercionmethod_separatequeue0_priorityqueue1;
        }
    // 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[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++;
        
        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 {
            bs5.physicalBS++ <--> pasarela <--> onu[1].gatewirelessInOut++;
        }

		bs0.physicalBS++ <--> hops {  distanceHops = 308.08; } <--> bs2.physicalBS++;
        bs0.physicalBS++ <--> hops {  distanceHops = 515.38; } <--> bs6.physicalBS++;
        bs0.physicalBS++ <--> hops {  distanceHops = 510.77; } <--> bs8.physicalBS++;
        bs0.physicalBS++ <--> hops {  distanceHops = 318.08; } <--> bs9.physicalBS++;
        bs1.physicalBS++ <--> hops {  distanceHops = 317.69; } <--> bs6.physicalBS++;
        bs1.physicalBS++ <--> hops {  distanceHops = 350.00; } <--> bs7.physicalBS++;
        bs2.physicalBS++ <--> hops {  distanceHops = 350.00; } <--> bs3.physicalBS++;
        bs2.physicalBS++ <--> hops {  distanceHops = 296.15; } <--> bs9.physicalBS++;
        bs3.physicalBS++ <--> hops {  distanceHops = 272.31; } <--> bs4.physicalBS++;
        bs3.physicalBS++ <--> hops {  distanceHops = 276.15; } <--> bs5.physicalBS++;
        bs4.physicalBS++ <--> hops {  distanceHops = 429.62; } <--> bs5.physicalBS++;
        bs4.physicalBS++ <--> hops {  distanceHops = 396.15; } <--> bs9.physicalBS++;
        bs6.physicalBS++ <--> hops {  distanceHops = 257.69; } <--> bs7.physicalBS++;
        bs6.physicalBS++ <--> hops {  distanceHops = 488.46; } <--> bs8.physicalBS++;
        bs7.physicalBS++ <--> hops {  distanceHops = 419.23; } <--> bs8.physicalBS++;
        bs8.physicalBS++ <--> hops {  distanceHops = 396.15; } <--> bs9.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];
        }
}