Compound Module IPv4Underlay

File: Underlay/IPv4Underlay/IPv4Underlay.ned

The IPv4Underlay ned-file

See also: IPv4UnderlayConfigurator

underlayConfigurator: IPv4UnderlayConfigurator backboneRouter: Router accessRouter: AccessRouter overlayAccessRouter: OverlayAccessRouter overlayBackboneRouter: OverlayRouter globalObserver: GlobalObserver

Usage diagram:

The following diagram shows usage relationships between modules, networks and channels. Unresolved module (and channel) types are missing from the diagram. Click here to see the full picture.

Contains the following modules:

If a module type shows up more than once, that means it has been defined in more than one NED file.

AccessRouter (no description)
GlobalObserver (no description)
IPv4UnderlayConfigurator

Configurator of the IPv4Underlay

OverlayAccessRouter (no description)
OverlayRouter (no description)
Router (unknown -- not in documented files)

Contains the following channels:

fiberline (no description)

Networks:

IPv4Network

The IPv4Underlay network definition

Parameters:

Name Type Description
overlayType string

the overlay used in the simulation

overlayAppType string

the application on top off the overly used in the simulation

backboneRouterNum numeric

number of backbone routers in the network

accessRouterNum numeric

number of access routers in the network

overlayBackboneRouterNum numeric

number of backbone routers in the network that participate the overlay

overlayAccessRouterNum numeric

number of access routers in the network that participate the overlay

connectivity numeric

degree of connectivity of backbone routers (1 = every backbone router is connected to all the others)

Unassigned submodule parameters:

Name Type Description
underlayConfigurator.simulateMobility bool

add/remove nodes in and after init phase?

underlayConfigurator.initialOverlayTerminalNum numeric

number of nodes created before init phase

underlayConfigurator.targetOverlayTerminalNum numeric

number of nodes after init phase

underlayConfigurator.initialMobilityDelay numeric

node creation interval in init phase

underlayConfigurator.targetMobilityDelay numeric

node creation/removal/migration interval after init phase

underlayConfigurator.creationProbability numeric

probability that a new node gets created

underlayConfigurator.migrationProbability numeric

probability that a node migrates

underlayConfigurator.removalProbability numeric

probability that a node gets removed

underlayConfigurator.channelTypes string

used access technologies

accessRouter[*].routingFile string
overlayAccessRouter[*].IPForward bool
overlayAccessRouter[*].routingFile string
overlayBackboneRouter[*].IPForward bool
overlayBackboneRouter[*].routingFile string
globalObserver.useGlobalFunctions numeric
globalObserver.globalFunctionsType string
globalObserver.bootstrapOracle.maxNumberOfKeys numeric
globalObserver.bootstrapOracle.keyProbability numeric

Source code:

module IPv4Underlay

    parameters:
	overlayType: string, // the overlay used in the simulation
	overlayAppType: string, // the application on top off the overly used in the simulation
        backboneRouterNum: numeric, // number of backbone routers in the network
        accessRouterNum: numeric, // number of access routers in the network
        overlayBackboneRouterNum: numeric, // number of backbone routers in the network that participate the overlay
        overlayAccessRouterNum: numeric, // number of access routers in the network that participate the overlay
        connectivity: numeric; // degree of connectivity of backbone routers (1 = every backbone router is connected to all the others)

    submodules:
        underlayConfigurator: IPv4UnderlayConfigurator;
            display: "i=block/cogwheel";
        backboneRouter: Router[backboneRouterNum];
            display: "i=device/server2";
        accessRouter: AccessRouter[accessRouterNum];
            display: "i=device/server2,gray,30";
        overlayAccessRouter: OverlayAccessRouter[overlayAccessRouterNum]
	    parameters:
		overlayType = overlayType,
		overlayAppType = overlayAppType;	
            display: "i=device/server2,gray,30;i2=block/circle_s";	
        overlayBackboneRouter: OverlayRouter[overlayBackboneRouterNum]
	    parameters:
	       	overlayType = overlayType,
	       	overlayAppType = overlayAppType;
            display: "i=device/server2;i2=block/circle_s";
        globalObserver: GlobalObserver;
            display: "i=block/control";
    connections nocheck:

        //
        // BACKBONE ROUTER
        //
        // connect backboneRouters with other backboneRouters
        for i=0..backboneRouterNum - 1, j=0..backboneRouterNum - 1 do
            backboneRouter[i].out++ --> fiberline --> backboneRouter[j].in++ if i < j && uniform2(0, 1, i, 1) <= connectivity;
            backboneRouter[i].in++ <-- fiberline <-- backboneRouter[j].out++ if i < j && uniform2(0, 1, i, 0) <= connectivity;
        endfor;

        // connect backboneRouters with overlayBackboneRouters
        for i=0..backboneRouterNum - 1, j=0..overlayBackboneRouterNum - 1 do
            backboneRouter[i].out++ --> fiberline --> overlayBackboneRouter[j].in++ if i <= j && uniform2(0, 1, i, 0) <= connectivity;
            backboneRouter[i].in++ <-- fiberline <-- overlayBackboneRouter[j].out++ if i <= j && uniform2(0, 1, i, 0) <= connectivity;
        endfor;

        // connect overlayBackboneRouters with backboneRouters
        for i=0..overlayBackboneRouterNum - 1, j=0..backboneRouterNum - 1 do
            overlayBackboneRouter[i].out++ --> fiberline --> backboneRouter[j].in++ if i < j && uniform2(0, 1, i, 1) <= connectivity;
            overlayBackboneRouter[i].in++ <-- fiberline <-- backboneRouter[j].out++ if i < j && uniform2(0, 1, i, 0) <= connectivity;
        endfor;

        // connect overlayBackboneRouters with other overlayBackboneRouters
        for i=0..overlayBackboneRouterNum - 1, j=0..overlayBackboneRouterNum - 1 do
            overlayBackboneRouter[i].out++ --> fiberline --> overlayBackboneRouter[j].in++ if i < j && uniform2(0, 1, i, 0) <= connectivity;
            overlayBackboneRouter[i].in++ <-- fiberline <-- overlayBackboneRouter[j].out++ if i < j && uniform2(0, 1, i, 0) <= connectivity;
        endfor;

        //
        // ACCESS ROUTER
        //
        // connect accessRouters with backboneRouters
        for i=0..accessRouterNum - 1 do
            accessRouter[i].out++ --> fiberline --> backboneRouter[intuniform2(0, backboneRouterNum - 1, 0, 1)].in++ if uniform2(0, 1, i, 1) > overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
            accessRouter[i].in++ <-- fiberline <-- backboneRouter[intuniform2(0, backboneRouterNum - 1, 0, 0)].out++ if uniform2(0, 1, i, 0) > overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
        endfor;

        // connect accessRouters with overlayBackboneRouters
        for i=0..accessRouterNum - 1 do
            accessRouter[i].out++ --> fiberline --> overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum - 1, 0, 1)].in++ if uniform2(0, 1, i, 0) <= overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
            accessRouter[i].in++ <-- fiberline <-- overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum - 1, 0, 0)].out++ if uniform2(0, 1, i, 0) <= overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
        endfor;

        // connect overlayAccessRouters with backboneRouters
        for i=0..overlayAccessRouterNum - 1 do
            overlayAccessRouter[i].out++ --> fiberline --> backboneRouter[intuniform2(0, backboneRouterNum - 1, 0, 1)].in++ if uniform2(0, 1, i, 1) > overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
            overlayAccessRouter[i].in++ <-- fiberline <-- backboneRouter[intuniform2(0, backboneRouterNum - 1, 0, 0)].out++ if uniform2(0, 1, i, 0) > overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
        endfor;

        // connect overlayAccessRouters with overlayBackboneRouters
        for i=0..overlayAccessRouterNum - 1 do
            overlayAccessRouter[i].out++ --> fiberline --> overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum - 1, 0, 1)].in++ if uniform2(0, 1, i, 0) <= overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
            overlayAccessRouter[i].in++ <-- fiberline <-- overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum - 1, 0, 0)].out++ if uniform2(0, 1, i, 0) <= overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
        endfor;

endmodule