Network red_hibrida

Package: red_wireless
File: red_hibrida.ned

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.

BS User OLT SPLITTER ONU

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram. Click here to see the full picture.

red_hibrida ONU User SPLITTER OLT BS

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram. Click here to see the full picture.

red_hibrida

Parameters:

Name Type Default value Description
numBS int
numUser int
numGW int
criterio int
numcolas int
longitud_media_paquete int
tasabinaria double
delta_time double
buffer_size double
carga_nodo double
rows int numGW
columns int ceil(numBS/numGW)
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 int
node_load double
numOnu int
longpon1 double
longpon2 double
numlong int
tambuffer double
txrate double
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 int

Properties:

Name Value Description
isNetwork
display bgl=6;bgs=0.3,m;i=misc/cloud;bgi=background/streetmap,s

Cada 0.3 píxeles del layout representan 1 metro

Unassigned submodule parameters:

Name Type Default value Description
bs.bs_rx_tx.numBS int

Numero de estaciones base en la parte inalambrica de la red hibrida

bs.bs_rx_tx.numUser int

Numero de usuarios inalambricos conectados a las estaciones base

bs.bs_rx_tx.numGW int

Numero de BSs que actuan de pasarelas con la parte optica de la red

user.user_interface.numcolas int

Numero de clases se servicio del trafico de la parte inalambrica de la red hibrida

olt.olt_mac.BW_garantizado0 int

Ancho de banda garantizado para el SLA0

olt.olt_mac.BW_garantizado1 int

Ancho de banda garantizado para el SLA1

olt.olt_mac.BW_garantizado2 int

Ancho de banda garantizado para el SLA2

Source code:

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