Network InetUnderlayNetwork

Package: oversim.underlay.inetunderlay
File: src/underlay/inetunderlay/InetUnderlay.ned

The InetUnderlay ned-file

See also: InetUnderlayConfigurator

InetOverlayHost InetUnderlayConfigurator Router TunOutRouter AccessRouter OverlayAccessRouter OverlayRouter ChurnGenerator GlobalObserver

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Parameters:

Name Type Default value 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 int

number of backbone routers in the network

accessRouterNum int

number of access routers in the network

overlayBackboneRouterNum int

number of backbone routers in the network that participate the overlay

overlayAccessRouterNum int

number of access routers in the network that participate the overlay

outRouterNum int

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

connectivity double

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

Properties:

Name Value Description
isNetwork

Unassigned submodule parameters:

Name Type Default value Description
overlayTerminal.networkLayer.ip.procDelay double 0s
overlayTerminal.networkLayer.arp.retryTimeout double 1s

number seconds ARP waits between retries to resolve an IP address

overlayTerminal.networkLayer.arp.retryCount int 3

number of times ARP will attempt to resolve an IP address

overlayTerminal.networkLayer.arp.cacheTimeout double 120s

number seconds unused entries in the cache will time out

overlayTerminal.ppp.ppp.mtu int 4470
overlayTerminal.neighborCache.rpcUdpTimeout double

default timeout value for direct RPCs

overlayTerminal.neighborCache.rpcKeyTimeout double

default timeout value for routed RPCs

overlayTerminal.neighborCache.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

overlayTerminal.neighborCache.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

overlayTerminal.neighborCache.debugOutput bool

enable debug output

overlayTerminal.neighborCache.enableNeighborCache bool

use neighbor cache for reducing ping traffic?

overlayTerminal.neighborCache.rttExpirationTime double

expiration of the validity of the measured rtts

overlayTerminal.neighborCache.maxSize double

maximum size of the cache

overlayTerminal.neighborCache.rttHistory int
overlayTerminal.neighborCache.timeoutAccuracyLimit double
overlayTerminal.neighborCache.defaultQueryType string
overlayTerminal.neighborCache.defaultQueryTypeI string
overlayTerminal.neighborCache.defaultQueryTypeQ string
overlayTerminal.neighborCache.doDiscovery bool
overlayTerminal.neighborCache.ncsType string
overlayTerminal.neighborCache.npsDimensions int

gnp settings

overlayTerminal.neighborCache.npsCoordCalcRuns int
overlayTerminal.neighborCache.landmarkTimeout double
overlayTerminal.neighborCache.npsMaxLayer int

nps settings

overlayTerminal.neighborCache.showVivaldiPosition bool

vivaldi settings

overlayTerminal.neighborCache.vivaldiErrorConst double
overlayTerminal.neighborCache.vivaldiCoordConst double
overlayTerminal.neighborCache.vivaldiDimConst double
overlayTerminal.neighborCache.vivaldiEnableHeightVector bool
overlayTerminal.neighborCache.vivaldiLossConst double

svivaldi settings

overlayTerminal.neighborCache.lossResetLimit double
overlayTerminal.bootstrapList.rpcUdpTimeout double

default timeout value for direct RPCs

overlayTerminal.bootstrapList.rpcKeyTimeout double

default timeout value for routed RPCs

overlayTerminal.bootstrapList.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

overlayTerminal.bootstrapList.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

overlayTerminal.bootstrapList.debugOutput bool

enable debug output

overlayTerminal.bootstrapList.mergeOverlayPartitions bool

if true, detect and merge overlay partitions

overlayTerminal.bootstrapList.maintainList bool

maintain a list of bootstrap candidates and check them periodically

overlayTerminal.cryptoModule.keyFile string

the name of the file containing the public key pair used to sign messages

underlayConfigurator.terminalTypes string

list of terminal types

underlayConfigurator.churnGeneratorTypes string

a list of churn generators to be used

underlayConfigurator.transitionTime double

time to wait before measuring after init phase is finished

underlayConfigurator.measurementTime double

duration of the simulation after init and transition phase

underlayConfigurator.gracefulLeaveDelay double

time between prekill and removal from overlay

underlayConfigurator.gracefulLeaveProbability double

probability of gracefull leave

underlayConfigurator.startIP string

IP configuration starts with this IP

underlayConfigurator.gatewayIP string

IP of the gateway (if an outRouter is used)

backboneRouter.networkLayer.ip.procDelay double 0s
backboneRouter.networkLayer.arp.retryTimeout double 1s

number seconds ARP waits between retries to resolve an IP address

backboneRouter.networkLayer.arp.retryCount int 3

number of times ARP will attempt to resolve an IP address

backboneRouter.networkLayer.arp.cacheTimeout double 120s

number seconds unused entries in the cache will time out

backboneRouter.ppp.ppp.mtu int 4470
backboneRouter.eth.mac.promiscuous bool false

if true, all packets are received, otherwise only the ones with matching destination MAC address

backboneRouter.eth.mac.address string "auto"

MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0.

backboneRouter.eth.mac.txrate double 100Mbps

maximum data rate supported by this station (bit/s); actually chosen speed may be lower due to auto- configuration. 0 means fully auto-configured.

backboneRouter.eth.mac.duplexEnabled bool true

whether duplex mode can be enabled or not; whether MAC will actually use duplex mode depends on the result of the auto-configuration process (duplex is only possible with DTE-to-DTE connection).

backboneRouter.eth.mac.mtu int 1500
outRouter.networkLayer.ip.procDelay double 0s
outRouter.networkLayer.arp.retryTimeout double 1s

number seconds ARP waits between retries to resolve an IP address

outRouter.networkLayer.arp.retryCount int 3

number of times ARP will attempt to resolve an IP address

outRouter.networkLayer.arp.cacheTimeout double 120s

number seconds unused entries in the cache will time out

outRouter.ppp.ppp.mtu int 4470
outRouter.tunDev.mtu int

maximum transmission unit of the underlaying network

accessRouter.accessNet.channelTypes string

list of (tx) channel types (from common/channels.ned)

accessRouter.accessNet.channelTypesRx string

list of (rx) channel types (from common/channels.ned)

accessRouter.networkLayer.ip.procDelay double 0s
accessRouter.networkLayer.arp.retryTimeout double 1s

number seconds ARP waits between retries to resolve an IP address

accessRouter.networkLayer.arp.retryCount int 3

number of times ARP will attempt to resolve an IP address

accessRouter.networkLayer.arp.cacheTimeout double 120s

number seconds unused entries in the cache will time out

accessRouter.ppp.ppp.mtu int 4470
accessRouter.eth.mac.promiscuous bool false

if true, all packets are received, otherwise only the ones with matching destination MAC address

accessRouter.eth.mac.address string "auto"

MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0.

accessRouter.eth.mac.txrate double 100Mbps

maximum data rate supported by this station (bit/s); actually chosen speed may be lower due to auto- configuration. 0 means fully auto-configured.

accessRouter.eth.mac.duplexEnabled bool true

whether duplex mode can be enabled or not; whether MAC will actually use duplex mode depends on the result of the auto-configuration process (duplex is only possible with DTE-to-DTE connection).

accessRouter.eth.mac.mtu int 1500
overlayAccessRouter.accessNet.channelTypes string

list of (tx) channel types (from common/channels.ned)

overlayAccessRouter.accessNet.channelTypesRx string

list of (rx) channel types (from common/channels.ned)

overlayAccessRouter.networkLayer.ip.procDelay double 0s
overlayAccessRouter.networkLayer.arp.retryTimeout double 1s

number seconds ARP waits between retries to resolve an IP address

overlayAccessRouter.networkLayer.arp.retryCount int 3

number of times ARP will attempt to resolve an IP address

overlayAccessRouter.networkLayer.arp.cacheTimeout double 120s

number seconds unused entries in the cache will time out

overlayAccessRouter.ppp.ppp.mtu int 4470
overlayAccessRouter.eth.mac.promiscuous bool false

if true, all packets are received, otherwise only the ones with matching destination MAC address

overlayAccessRouter.eth.mac.address string "auto"

MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0.

overlayAccessRouter.eth.mac.txrate double 100Mbps

maximum data rate supported by this station (bit/s); actually chosen speed may be lower due to auto- configuration. 0 means fully auto-configured.

overlayAccessRouter.eth.mac.duplexEnabled bool true

whether duplex mode can be enabled or not; whether MAC will actually use duplex mode depends on the result of the auto-configuration process (duplex is only possible with DTE-to-DTE connection).

overlayAccessRouter.eth.mac.mtu int 1500
overlayAccessRouter.neighborCache.rpcUdpTimeout double

default timeout value for direct RPCs

overlayAccessRouter.neighborCache.rpcKeyTimeout double

default timeout value for routed RPCs

overlayAccessRouter.neighborCache.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

overlayAccessRouter.neighborCache.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

overlayAccessRouter.neighborCache.debugOutput bool

enable debug output

overlayAccessRouter.neighborCache.enableNeighborCache bool

use neighbor cache for reducing ping traffic?

overlayAccessRouter.neighborCache.rttExpirationTime double

expiration of the validity of the measured rtts

overlayAccessRouter.neighborCache.maxSize double

maximum size of the cache

overlayAccessRouter.neighborCache.rttHistory int
overlayAccessRouter.neighborCache.timeoutAccuracyLimit double
overlayAccessRouter.neighborCache.defaultQueryType string
overlayAccessRouter.neighborCache.defaultQueryTypeI string
overlayAccessRouter.neighborCache.defaultQueryTypeQ string
overlayAccessRouter.neighborCache.doDiscovery bool
overlayAccessRouter.neighborCache.ncsType string
overlayAccessRouter.neighborCache.npsDimensions int

gnp settings

overlayAccessRouter.neighborCache.npsCoordCalcRuns int
overlayAccessRouter.neighborCache.landmarkTimeout double
overlayAccessRouter.neighborCache.npsMaxLayer int

nps settings

overlayAccessRouter.neighborCache.showVivaldiPosition bool

vivaldi settings

overlayAccessRouter.neighborCache.vivaldiErrorConst double
overlayAccessRouter.neighborCache.vivaldiCoordConst double
overlayAccessRouter.neighborCache.vivaldiDimConst double
overlayAccessRouter.neighborCache.vivaldiEnableHeightVector bool
overlayAccessRouter.neighborCache.vivaldiLossConst double

svivaldi settings

overlayAccessRouter.neighborCache.lossResetLimit double
overlayAccessRouter.bootstrapList.rpcUdpTimeout double

default timeout value for direct RPCs

overlayAccessRouter.bootstrapList.rpcKeyTimeout double

default timeout value for routed RPCs

overlayAccessRouter.bootstrapList.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

overlayAccessRouter.bootstrapList.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

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

overlayAccessRouter.cryptoModule.keyFile string

the name of the file containing the public key pair used to sign messages

overlayBackboneRouter.networkLayer.ip.procDelay double 0s
overlayBackboneRouter.networkLayer.arp.retryTimeout double 1s

number seconds ARP waits between retries to resolve an IP address

overlayBackboneRouter.networkLayer.arp.retryCount int 3

number of times ARP will attempt to resolve an IP address

overlayBackboneRouter.networkLayer.arp.cacheTimeout double 120s

number seconds unused entries in the cache will time out

overlayBackboneRouter.ppp.ppp.mtu int 4470
overlayBackboneRouter.neighborCache.rpcUdpTimeout double

default timeout value for direct RPCs

overlayBackboneRouter.neighborCache.rpcKeyTimeout double

default timeout value for routed RPCs

overlayBackboneRouter.neighborCache.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

overlayBackboneRouter.neighborCache.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

overlayBackboneRouter.neighborCache.debugOutput bool

enable debug output

overlayBackboneRouter.neighborCache.enableNeighborCache bool

use neighbor cache for reducing ping traffic?

overlayBackboneRouter.neighborCache.rttExpirationTime double

expiration of the validity of the measured rtts

overlayBackboneRouter.neighborCache.maxSize double

maximum size of the cache

overlayBackboneRouter.neighborCache.rttHistory int
overlayBackboneRouter.neighborCache.timeoutAccuracyLimit double
overlayBackboneRouter.neighborCache.defaultQueryType string
overlayBackboneRouter.neighborCache.defaultQueryTypeI string
overlayBackboneRouter.neighborCache.defaultQueryTypeQ string
overlayBackboneRouter.neighborCache.doDiscovery bool
overlayBackboneRouter.neighborCache.ncsType string
overlayBackboneRouter.neighborCache.npsDimensions int

gnp settings

overlayBackboneRouter.neighborCache.npsCoordCalcRuns int
overlayBackboneRouter.neighborCache.landmarkTimeout double
overlayBackboneRouter.neighborCache.npsMaxLayer int

nps settings

overlayBackboneRouter.neighborCache.showVivaldiPosition bool

vivaldi settings

overlayBackboneRouter.neighborCache.vivaldiErrorConst double
overlayBackboneRouter.neighborCache.vivaldiCoordConst double
overlayBackboneRouter.neighborCache.vivaldiDimConst double
overlayBackboneRouter.neighborCache.vivaldiEnableHeightVector bool
overlayBackboneRouter.neighborCache.vivaldiLossConst double

svivaldi settings

overlayBackboneRouter.neighborCache.lossResetLimit double
overlayBackboneRouter.bootstrapList.rpcUdpTimeout double

default timeout value for direct RPCs

overlayBackboneRouter.bootstrapList.rpcKeyTimeout double

default timeout value for routed RPCs

overlayBackboneRouter.bootstrapList.optimizeTimeouts bool

calculate timeouts from measured RTTs and network coordinates

overlayBackboneRouter.bootstrapList.rpcExponentialBackoff bool

if true, doubles the timeout for every retransmission

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

overlayBackboneRouter.cryptoModule.keyFile string

the name of the file containing the public key pair used to sign messages

churnGenerator.targetOverlayTerminalNum int

number of nodes after init phase

churnGenerator.initPhaseCreationInterval double

node creation interval in init phase

churnGenerator.noChurnThreshold double

if the lifetimeMean of a specific churn generator exceeds this, NoChurn is used instead

churnGenerator.overlayType string

the overlay used in the simulation

churnGenerator.channelTypes string

used (tx) access technologies (from common/channels.ned)

churnGenerator.channelTypesRx string

used (rx) access technologies (from common/channels.ned)

churnGenerator.tier1Type string

the application on top of the overlay used in the simulation

churnGenerator.tier2Type string

the module type on top of tier 1

churnGenerator.tier3Type string

the module type on top of tier 2

globalObserver.globalNodeList.maliciousNodeProbability double

probability for a node to be malicious on creation

globalObserver.globalNodeList.maliciousNodeChange bool

dynamically change number of malicious nodes

globalObserver.globalNodeList.maliciousNodeChangeStartTime double

simTime at which nodes begin to become malicious

globalObserver.globalNodeList.maliciousNodeChangeRate double

number of nodes to change to malicious compared to all nodes

globalObserver.globalNodeList.maliciousNodeChangeInterval double

time between two node changes to malicious

globalObserver.globalNodeList.maliciousNodeChangeStartValue double

minimum amount of malicious nodes in the peerSet

globalObserver.globalNodeList.maliciousNodeChangeStopValue double

maximum amount of malicious nodes in the peerSet

globalObserver.globalNodeList.maxNumberOfKeys int

maximum number of overlay keys the bootstrap oracle handles

globalObserver.globalNodeList.keyProbability double

probability of keys to be owned by nodes

globalObserver.globalParameters.rpcUdpTimeout double

default timeout value for direct RPCs

globalObserver.globalParameters.rpcKeyTimeout double

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.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 double

interval length of periodic statistic timer

Source code:

//
// The InetUnderlay ned-file @see InetUnderlayConfigurator
//
network InetUnderlayNetwork
{
    parameters:
        string overlayType;    // the overlay used in the simulation (for overlayBackboneRouters)
        string tier1Type;    // the application on top of the overlay used in the simulation (for overlayBackboneRouters)
        string tier2Type;    // the module type on top of tier 1 (for overlayBackboneRouters)
        string tier3Type;    // the module type on top of tier 2 (for overlayBackboneRouters)
        int backboneRouterNum;    // number of backbone routers in the network
        int accessRouterNum;    // number of access routers in the network
        int overlayBackboneRouterNum;    // number of backbone routers in the network that participate the overlay
        int overlayAccessRouterNum;    // number of access routers in the network that participate the overlay
        int outRouterNum;    // set to 1 if you want to use a TunOutRouter as connection to a real network
        double connectivity;    // degree of connectivity of backbone routers (1 = every backbone router is connected to all the others)
    submodules:
        overlayTerminal[0]: InetOverlayHost {
            @dynamic;
        }
        underlayConfigurator: InetUnderlayConfigurator {
            @display("p=70,160");
        }
        backboneRouter[backboneRouterNum]: Router {
            parameters:
                @display("i=device/server2");
        }
        outRouter[min(1, outRouterNum)]: TunOutRouter;
        accessRouter[accessRouterNum]: AccessRouter {
            parameters:
                @display("i=device/server2,gray,30");
        }
        overlayAccessRouter[overlayAccessRouterNum]: OverlayAccessRouter {
            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[overlayBackboneRouterNum]: OverlayRouter {
            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");
        }
        churnGenerator[0]: ChurnGenerator {
            @display("p=70,240,column");
        }
        globalObserver: GlobalObserver {
            parameters:
                @display("i=block/control;p=70,50");
        }

    connections allowunconnected:

        //
        // BACKBONE ROUTER
        //
        // connect outRouter to a backboneRouter
        backboneRouter[0].pppg$o++ --> inet_fiberline --> outRouter[0].pppg$i++ if outRouterNum>0;
        backboneRouter[0].pppg$i++ <-- inet_fiberline <-- outRouter[0].pppg$o++ if outRouterNum>0;

        // connect backboneRouters with other backboneRouters
        for i=0..backboneRouterNum-1, for j=0..backboneRouterNum-1 {
            backboneRouter[i].pppg$o++ --> inet_fiberline --> backboneRouter[j].pppg$i++ if i<j&&uniform2(0, 1, i, 1)<=connectivity;
            backboneRouter[i].pppg$i++ <-- inet_fiberline <-- backboneRouter[j].pppg$o++ if i<j&&uniform2(0, 1, i, 0)<=connectivity;
        }

        // connect backboneRouters with overlayBackboneRouters
        for i=0..backboneRouterNum-1, for j=0..overlayBackboneRouterNum-1 {
            backboneRouter[i].pppg$o++ --> inet_fiberline --> overlayBackboneRouter[j].pppg$i++ if i<=j&&uniform2(0, 1, i, 0)<=connectivity;
            backboneRouter[i].pppg$i++ <-- inet_fiberline <-- overlayBackboneRouter[j].pppg$o++ if i<=j&&uniform2(0, 1, i, 0)<=connectivity;
        }

        // connect overlayBackboneRouters with backboneRouters
        for i=0..overlayBackboneRouterNum-1, for j=0..backboneRouterNum-1 {
            overlayBackboneRouter[i].pppg$o++ --> inet_fiberline --> backboneRouter[j].pppg$i++ if i<j&&uniform2(0, 1, i, 1)<=connectivity;
            overlayBackboneRouter[i].pppg$i++ <-- inet_fiberline <-- backboneRouter[j].pppg$o++ if i<j&&uniform2(0, 1, i, 0)<=connectivity;
        }

        // connect overlayBackboneRouters with other overlayBackboneRouters
        for i=0..overlayBackboneRouterNum-1, for j=0..overlayBackboneRouterNum-1 {
            overlayBackboneRouter[i].pppg$o++ --> inet_fiberline --> overlayBackboneRouter[j].pppg$i++ if i<j&&uniform2(0, 1, i, 0)<=connectivity;
            overlayBackboneRouter[i].pppg$i++ <-- inet_fiberline <-- overlayBackboneRouter[j].pppg$o++ if i<j&&uniform2(0, 1, i, 0)<=connectivity;
        }

        //
        // ACCESS ROUTER
        //
        // connect accessRouters with backboneRouters
        for i=0..accessRouterNum-1 {
            accessRouter[i].pppg$o++ --> inet_fiberline --> backboneRouter[intuniform2(0, backboneRouterNum-1, 0, 1)].pppg$i++ if uniform2(0, 1, i, 1)>overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
            accessRouter[i].pppg$i++ <-- inet_fiberline <-- backboneRouter[intuniform2(0, backboneRouterNum-1, 0, 0)].pppg$o++ if uniform2(0, 1, i, 0)>overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
        }

        // connect accessRouters with overlayBackboneRouters
        for i=0..accessRouterNum-1 {
            accessRouter[i].pppg$o++ --> inet_fiberline --> overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum-1, 0, 1)].pppg$i++ if uniform2(0, 1, i, 0)<=overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
            accessRouter[i].pppg$i++ <-- inet_fiberline <-- overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum-1, 0, 0)].pppg$o++ if uniform2(0, 1, i, 0)<=overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
        }

        // connect overlayAccessRouters with backboneRouters
        for i=0..overlayAccessRouterNum-1 {
            overlayAccessRouter[i].pppg$o++ --> inet_fiberline --> backboneRouter[intuniform2(0, backboneRouterNum-1, 0, 1)].pppg$i++ if uniform2(0, 1, i, 1)>overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
            overlayAccessRouter[i].pppg$i++ <-- inet_fiberline <-- backboneRouter[intuniform2(0, backboneRouterNum-1, 0, 0)].pppg$o++ if uniform2(0, 1, i, 0)>overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
        }

        // connect overlayAccessRouters with overlayBackboneRouters
        for i=0..overlayAccessRouterNum-1 {
            overlayAccessRouter[i].pppg$o++ --> inet_fiberline --> overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum-1, 0, 1)].pppg$i++ if uniform2(0, 1, i, 0)<=overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
            overlayAccessRouter[i].pppg$i++ <-- inet_fiberline <-- overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum-1, 0, 0)].pppg$o++ if uniform2(0, 1, i, 0)<=overlayBackboneRouterNum/(overlayBackboneRouterNum+backboneRouterNum);
        }

}