File Underlay/IPv4Underlay/OverlayRouter.ned
Contains:
import
"NotificationBoard",
"Tiers",
"Overlay",
"NeighborCache",
"BootstrapList",
"NAMTraceWriter",
"InterfaceTable",
"RoutingTable",
"UDP",
"NetworkLayer",
"PingApp",
"PPPInterface";
module OverlayRouter
parameters:
overlayType: string,
tier1Type: string,
tier2Type: string,
tier3Type: string,
numTiers: numeric const,
IPForward: bool,
routingFile: string;
gates:
in: in[];
in: ethIn[];
in: overlayNeighborArrowIn[];
out: out[];
out: ethOut[];
out: overlayNeighborArrowOut[];
submodules:
namTrace: NAMTraceWriter;
parameters:
namid = -1;
display: "p=82,420;i=block/sink";
notificationBoard: NotificationBoard;
display: "p=84,208;i=block/control";
interfaceTable: InterfaceTable;
display: "p=84,278;i=block/table";
routingTable: RoutingTable;
parameters:
IPForward = IPForward,
routerId = "",
routingFile = routingFile;
display: "p=84,348;i=block/table";
tier3: tier3Type like Tier;
display: "p=48,64;i=block/segm";
tier2: tier2Type like Tier;
display: "p=139,96;i=block/segm";
tier1: tier1Type like Tier;
display: "p=218,130;i=block/segm";
overlay: overlayType like Overlay;
display: "p=282,184;i=block/network2";
udp: UDP;
display: "p=282,262;i=block/transport";
networkLayer: NetworkLayer;
parameters:
proxyARP = false;
gatesizes:
ifIn[sizeof(out)+sizeof(ethOut)],
ifOut[sizeof(out)+sizeof(ethOut)];
display: "p=282,340;i=block/fork;q=queue";
ppp: PPPInterface[sizeof(out)];
display: "p=282,422,row,90;q=txQueue;i=block/ifcard";
neighborCache: NeighborCache;
display: "p=167,208;i=block/table";
bootstrapList: BootstrapList;
display: "p=168,280;i=block/table";
connections nocheck:
tier1.to_lowerTier --> overlay.from_app if numTiers > 0;
tier1.from_lowerTier <-- overlay.to_app if numTiers > 0;
tier1.to_udp --> udp.from_app++ if numTiers > 0;
udp.to_app++ --> tier1.from_udp if numTiers > 0;
tier2.to_lowerTier --> tier1.from_upperTier if numTiers > 1;
tier2.from_lowerTier <-- tier1.to_upperTier if numTiers > 1;
tier2.to_udp --> udp.from_app++ if numTiers > 1;
udp.to_app++ --> tier2.from_udp if numTiers > 1;
tier3.to_lowerTier --> tier2.from_upperTier if numTiers > 2;
tier3.from_lowerTier <-- tier2.to_upperTier if numTiers > 2;
tier3.to_udp --> udp.from_app++ if numTiers > 2;
udp.to_app++ --> tier3.from_udp if numTiers > 2;
overlay.to_udp --> udp.from_app++;
overlay.from_udp <-- udp.to_app++;
bootstrapList.to_udp --> udp.from_app++;
bootstrapList.from_udp <-- udp.to_app++;
udp.to_ip --> networkLayer.UDPIn;
udp.from_ip <-- networkLayer.UDPOut;
for i=0..sizeof(out)-1 do
in[i] --> ppp[i].physIn;
out[i] <-- ppp[i].physOut;
ppp[i].netwOut --> networkLayer.ifIn[i];
ppp[i].netwIn <-- networkLayer.ifOut[i];
endfor;
display: "b=360,476";
endmodule