File Underlay/SimpleUnderlay/SimpleMultiOverlayHost.ned
Contains:
import
"NotificationBoard",
"InterfaceTable",
"Overlay",
"BootstrapList",
"Tiers",
"SimpleUDP",
"PingCache";
module SimpleMultiOverlayHost
parameters:
IPForward: bool,
overlayType: string,
tier1Type : string,
tier2Type: string,
tier3Type: string,
numTiers: numeric const,
routingFile: string;
gates:
in: overlayNeighborArrowIn[];
out: overlayNeighborArrowOut[],
out;
submodules:
notificationBoard: NotificationBoard;
display: "p=212,296;i=block/control";
tier3: tier3Type[2] like Tier;
display: "p=64,64;i=block/segm";
tier2: tier2Type[2] like Tier;
display: "p=179,104;i=block/segm";
tier1: tier1Type[2] like Tier;
display: "p=290,162;i=block/segm";
overlay: overlayType[2] like Overlay;
display: "p=370,216;i=block/network2";
udp: SimpleUDP;
display: "p=370,342;i=block/transport";
interfaceTable: InterfaceTable;
display: "p=108,294;i=block/table";
pingCache: PingCache;
display: "p=76,224;i=block/table";
bootstrapList: BootstrapList;
display: "p=168,224;i=block/table";
connections nocheck:
for i=0..1 do
tier1[i].to_lowerTier --> overlay[i].from_app if numTiers > 0;
tier1[i].from_lowerTier <-- overlay[i].to_app if numTiers > 0;
tier1[i].to_udp --> udp.from_app++ if numTiers > 0;
udp.to_app++ --> tier1[i].from_udp if numTiers > 0;
tier2[i].to_lowerTier --> tier1[i].from_upperTier if numTiers > 1;
tier2[i].from_lowerTier <-- tier1[i].to_upperTier if numTiers > 1;
tier2[i].to_udp --> udp.from_app++ if numTiers > 1;
udp.to_app++ --> tier2[i].from_udp if numTiers > 1;
tier3[i].to_lowerTier --> tier2[i].from_upperTier if numTiers > 2;
tier3[i].from_lowerTier <-- tier2[i].to_upperTier if numTiers > 2;
tier3[i].to_udp --> udp.from_app++ if numTiers > 2;
udp.to_app++ --> tier3[i].from_udp if numTiers > 2;
overlay[i].to_udp --> udp.from_app++;
overlay[i].from_udp <-- udp.to_app++;
endfor;
display: "b=433,386";
endmodule