File Underlay/TunOut/TunOutUnderlay.ned

Contains:

import
    "TunOutRouter",
    "Router",
    "AccessRouter",
    "IPv4UnderlayConfigurator",
    "BootstrapOracle";

module TunOutUnderlay

    parameters:
	overlayType: string,
	overlayAppType: string,
        backboneRouterNum: numeric,
        accessRouterNum: numeric,
        overlayBackboneRouterNum: numeric,
        overlayAccessRouterNum: numeric,
        connectivity: numeric;

    submodules:
        underlayConfigurator: IPv4UnderlayConfigurator;
            display: "i=block/cogwheel";
        backboneRouter: Router[backboneRouterNum];
            display: "i=device/server2";
	tunOutRouter: TunOutRouter;
	    display: "i=misc/globe";
        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";
        bootstrapOracle: BootstrapOracle;
            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;

        //
        // TUNOUT ROUTER
        //
        // connect tunOutRouters with backboneRouters
        tunOutRouter.out++ --> fiberline --> backboneRouter[intuniform2(0, backboneRouterNum - 1, 0, 1)].in++ if uniform2(0, 1, 0, 1) > overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
        tunOutRouter.in++ <-- fiberline <-- backboneRouter[intuniform2(0, backboneRouterNum - 1, 0, 0)].out++ if uniform2(0, 1, 0, 0) > overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);

        // connect tunOutRouters with overlayBackboneRouters
        tunOutRouter.out++ --> fiberline --> overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum - 1, 0, 1)].in++ if uniform2(0, 1, 0, 0) <= overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);
        tunOutRouter.in++ <-- fiberline <-- overlayBackboneRouter[intuniform2(0, overlayBackboneRouterNum - 1, 0, 0)].out++ if uniform2(0, 1, 0, 0) <= overlayBackboneRouterNum / (overlayBackboneRouterNum + backboneRouterNum);

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

network TunOutNetwork : TunOutUnderlay
endnetwork