Compound Module IPv4Underlay

File: Underlay/IPv4Underlay/IPv4Underlay.ned

The IPv4Underlay ned-file

See also: IPv4UnderlayConfigurator

underlayConfigurator: IPv4UnderlayConfigurator backboneRouter: Router outRouter: TunOutRouter 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

Access router connects the access nets to the network backbone

GlobalObserver

global module that contains the bootstrapOracle and the globalStatistics module

IPv4UnderlayConfigurator

Configurator of the IPv4Underlay

OverlayAccessRouter

Access router that participates in the overlay

OverlayRouter

Router in the overlay network

TunOutRouter

TunOut router.

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 (for overlayBackboneRouters)

tier1Type string

the application on top of the overlay used in the simulation (for overlayBackboneRouters)

tier2Type string

the module type on top of tier 1 (for overlayBackboneRouters)

tier3Type string

the module type on top of tier 2 (for overlayBackboneRouters)

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

outRouterNum numeric

set to 1 if you want to use a TunOutRouter as connection to a real network

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.startIP string

IP configuration starts with this IP

underlayConfigurator.gatewayIP string

IP of the gateway (if an outRouter is used)

underlayConfigurator.channelTypes string

used access technologies

underlayConfigurator.gracefulLeaveDelay numeric

time between prekill and removal from overlay

underlayConfigurator.gracefulLeaveProbability numeric

probability of graceful leave

underlayConfigurator.churnGeneratorTypes string

a list of churn generators to be used

underlayConfigurator.terminalTypes string

list of terminal types

underlayConfigurator.transitionTime numeric

time to wait before measuring after init phase is finished

underlayConfigurator.measurementTime numeric

duration of the simulation after init and transition phase

outRouter[*].parser string

name of the PacketParser to use

outRouter[*].routingFile string

use predefined routing file if given

outRouter[*].tunDev.mtu numeric

maximum transmission unit of the underlaying network

accessRouter[*].routingFile string

use predefined routing file if given

overlayAccessRouter[*].IPForward bool

true if ip packets should be forwarded

overlayAccessRouter[*].routingFile string

use predefined routing file if given

overlayAccessRouter[*].numTiers numeric const

number of tiers

overlayAccessRouter[*].neighborCache.enableNeighborCache bool
overlayAccessRouter[*].neighborCache.rttExpirationTime numeric
overlayAccessRouter[*].neighborCache.maxSize numeric
overlayAccessRouter[*].bootstrapList.debugOutput bool

enable debug output

overlayAccessRouter[*].bootstrapList.mergeOverlayPartitions bool

if true, detect and merge overlay partitions

overlayAccessRouter[*].bootstrapList.maintainList bool

maintain a list of bootstrap candidates and check them periodically

overlayBackboneRouter[*].numTiers numeric const

number of tiers

overlayBackboneRouter[*].IPForward bool

true if ip packets should be forwarded

overlayBackboneRouter[*].routingFile string

predefined routing

overlayBackboneRouter[*].neighborCache.enableNeighborCache bool
overlayBackboneRouter[*].neighborCache.rttExpirationTime numeric
overlayBackboneRouter[*].neighborCache.maxSize numeric
overlayBackboneRouter[*].bootstrapList.debugOutput bool

enable debug output

overlayBackboneRouter[*].bootstrapList.mergeOverlayPartitions bool

if true, detect and merge overlay partitions

overlayBackboneRouter[*].bootstrapList.maintainList bool

maintain a list of bootstrap candidates and check them periodically

globalObserver.useGlobalFunctions numeric

are globalFunctions used?

globalObserver.globalFunctionsType string

type of globalFunctions

globalObserver.bootstrapOracle.maliciousNodeProbability numeric

probability for a node to be malicious on creation

globalObserver.bootstrapOracle.maliciousNodeChange bool

dynamically change number of malicious nodes

globalObserver.bootstrapOracle.maliciousNodeChangeStartTime numeric

simTime at which nodes begin to become malicious

globalObserver.bootstrapOracle.maliciousNodeChangeRate numeric

number of nodes to change to malicious compared to all nodes

globalObserver.bootstrapOracle.maliciousNodeChangeInterval numeric

time between two node changes to malicious

globalObserver.bootstrapOracle.maliciousNodeChangeStartValue numeric

minimum amount of malicious nodes in the peerSet

globalObserver.bootstrapOracle.maliciousNodeChangeStopValue numeric

maximum amount of malicious nodes in the peerSet

globalObserver.bootstrapOracle.maxNumberOfKeys numeric

maximum number of overlay keys the bootstrap oracle handles

globalObserver.bootstrapOracle.keyProbability numeric

probability of keys to be owned by nodes

globalObserver.globalStatistics.outputMinMax bool

enable output of minimum and maximum for scalars

globalObserver.globalStatistics.outputStdDev bool

enable output of standard deviation for scalars

globalObserver.globalStatistics.measureNetwInitPhase bool

fetch statistics in init phase?

globalObserver.globalStatistics.globalStatTimerInterval numeric

interval length of periodic statistic timer

globalObserver.globalParameters.rpcUdpTimeout numeric

default timeout value for direct RPCs

globalObserver.globalParameters.rpcKeyTimeout numeric

default timeout value for routed RPCs

globalObserver.globalParameters.printStateToStdOut bool

print overlay ready messages to std::cout

globalObserver.globalParameters.topologyAdaptation bool

turn on topologyAdaptation (for demonstrator)

globalObserver.globalTraceManager.traceFile string

file name of the trace file

globalObserver.globalTraceManager.numTiers numeric

number of tiers used

globalObserver.globalTraceManager.overlayType string

the overlay used in the simulation

globalObserver.globalTraceManager.channelTypes string

used access technologies

globalObserver.globalTraceManager.tier1Type string

the application on top of the overlay used in the simulation

globalObserver.globalTraceManager.tier2Type string

the module type on top of tier 1

globalObserver.globalTraceManager.tier3Type string

the module type on top of tier 2

Source code:

module IPv4Underlay

    parameters:
        overlayType: string,    // the overlay used in the simulation (for overlayBackboneRouters)
        tier1Type: string,    // the application on top of the overlay used in the simulation (for overlayBackboneRouters)
        tier2Type: string,    // the module type on top of tier 1 (for overlayBackboneRouters)
        tier3Type: string,    // the module type on top of tier 2 (for overlayBackboneRouters)
        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
        outRouterNum: numeric,    // set to 1 if you want to use a TunOutRouter as connection to a real network
        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";
        outRouter: TunOutRouter[min(1, outRouterNum)];
            display: "i=misc/globe";
        accessRouter: AccessRouter[accessRouterNum];
            display: "i=device/server2,gray,30";
        overlayAccessRouter: OverlayAccessRouter[overlayAccessRouterNum]
            parameters:
                overlayType = overlayType,    // the overlay used in the simulation
                tier1Type = tier1Type,    // the application on top off the overly used in the simulation
                tier2Type = tier2Type,    // tier 2 module to use
                tier3Type = tier3Type;    // tier 3 module to use
            display: "i=device/server2,gray,30;i2=block/circle_s";
        overlayBackboneRouter: OverlayRouter[overlayBackboneRouterNum]
            parameters:
                overlayType = overlayType,    // the overlay used in the simulation
                tier1Type = tier1Type,    // the application on top off the overly used in the simulation
                tier2Type = tier2Type,    // tier 2 module to use
                tier3Type = tier3Type;    // tier 3 module to use
            display: "i=device/server2;i2=block/circle_s";
        globalObserver: GlobalObserver;
            display: "i=block/control";
    connections nocheck:

        //
        // BACKBONE ROUTER
        //
        // connect outRouter to a backboneRouter
            backboneRouter[0].out++ --> fiberline --> outRouter[0].in++ if outRouterNum > 0;
            backboneRouter[0].in++ <-- fiberline <-- outRouter[0].out++ if outRouterNum > 0;

        // 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