File Underlay/IPv4Underlay/IPv4Underlay.ned
Contains:
import
"Tiers",
"Overlay",
"Router",
"AccessRouter",
"OverlayRouter",
"OverlayAccessRouter",
"TunOutRouter",
"IPv4UnderlayConfigurator",
"GlobalObserver";
module IPv4Underlay
parameters:
overlayType: string,
tier1Type: string,
tier2Type: string,
tier3Type: string,
backboneRouterNum: numeric,
accessRouterNum: numeric,
overlayBackboneRouterNum: numeric,
overlayAccessRouterNum: numeric,
outRouterNum: numeric,
connectivity: numeric;
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,
tier1Type = tier1Type,
tier2Type = tier2Type,
tier3Type = tier3Type;
display: "i=device/server2,gray,30;i2=block/circle_s";
overlayBackboneRouter: OverlayRouter[overlayBackboneRouterNum]
parameters:
overlayType = overlayType,
tier1Type = tier1Type,
tier2Type = tier2Type,
tier3Type = tier3Type;
display: "i=device/server2;i2=block/circle_s";
globalObserver: GlobalObserver;
display: "i=block/control";
connections nocheck:
backboneRouter[0].out++ --> fiberline --> outRouter[0].in++ if outRouterNum > 0;
backboneRouter[0].in++ <-- fiberline <-- outRouter[0].out++ if outRouterNum > 0;
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;
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;
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;
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;
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;
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;
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;
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 IPv4Network : IPv4Underlay
endnetwork