File: Underlay/IPv4Underlay/OverlayHost.ned
Host that participates in the overlay
Author: Markus Mauch, Bernhard Heep
The following diagram shows usage relationships between modules, networks and channels. Unresolved module (and channel) types are missing from the diagram. Click here to see the full picture.
If a module type shows up more than once, that means it has been defined in more than one NED file.
BootstrapList | The BootstrapList module maintains a list of bootstrap node candidates received from various sources (BootstrapOracle for simulations and Zeroconf for SingleHostUnderlay). This list is also used to detect overlay partitions and triggers the merging process. |
NeighborCache | (no description) |
Overlay | (no description) |
Tier | A template for Tier1-3 modules |
NotificationBoard | (unknown -- not in documented files) |
InterfaceTable | (unknown -- not in documented files) |
RoutingTable | (unknown -- not in documented files) |
UDP | (unknown -- not in documented files) |
NetworkLayer | (unknown -- not in documented files) |
PPPInterface | (unknown -- not in documented files) |
Name | Type | Description |
---|---|---|
IPForward | bool | true if ip packets should be forwarded |
overlayType | string | overlay protocol compound module to use |
tier1Type | string | tier 1 application to use |
tier2Type | string | tier 2 module to use |
tier3Type | string | tier 3 module to use |
numTiers | numeric const | number of tiers |
routingFile | string | use predefined routing file if given |
Name | Direction | Description |
---|---|---|
in [ ] | input | incoming gates from router |
ethIn [ ] | input | placeholder for zero-size vector |
overlayNeighborArrowIn [ ] | input | incoming gates for direct connections from overlay neigbors |
out [ ] | output | outgoing gates to router |
ethOut [ ] | output | placeholder for zero-size vector |
overlayNeighborArrowOut [ ] | output | outgoing gates for direct connections to overlay neighbors |
Name | Type | Description |
---|---|---|
neighborCache.enableNeighborCache | bool | |
neighborCache.rttExpirationTime | numeric | |
neighborCache.maxSize | numeric | |
bootstrapList.debugOutput | bool | enable debug output |
bootstrapList.mergeOverlayPartitions | bool | if true, detect and merge overlay partitions |
bootstrapList.maintainList | bool | maintain a list of bootstrap candidates and check them periodically |
module OverlayHost parameters: IPForward: bool, // true if ip packets should be forwarded overlayType: string, // overlay protocol compound module to use tier1Type: string, // tier 1 application to use tier2Type: string, // tier 2 module to use tier3Type: string, // tier 3 module to use numTiers: numeric const, // number of tiers routingFile: string; // use predefined routing file if given gates: in: in[]; // incoming gates from router in: ethIn[]; // placeholder for zero-size vector in: overlayNeighborArrowIn[]; // incoming gates for direct connections from overlay neigbors out: out[]; // outgoing gates to router out: ethOut[]; // placeholder for zero-size vector out: overlayNeighborArrowOut[]; // outgoing gates for direct connections to overlay neighbors submodules: notificationBoard: NotificationBoard; display: "p=68,208;i=block/control"; interfaceTable: InterfaceTable; display: "p=68,278;i=block/table"; routingTable: RoutingTable; parameters: IPForward = IPForward, // true if ip packets should be forwarded routerId = "", // id of the router routingFile = routingFile; // use predefined routing file if given display: "p=68,348;i=block/table"; tier3: tier3Type like Tier; display: "p=56,64;i=block/segm"; tier2: tier2Type like Tier; display: "p=139,80;i=block/segm"; tier1: tier1Type like Tier; display: "p=210,114;i=block/segm"; overlay: overlayType like Overlay; display: "p=274,176;i=block/network2"; udp: UDP; display: "p=274,254;i=block/transport"; networkLayer: NetworkLayer; parameters: proxyARP = false; // sets proxy \ARP mode (replying to \ARP requests for the addresses for which a routing table entry exists) gatesizes: ifIn[sizeof(out)+sizeof(ethOut)], ifOut[sizeof(out)+sizeof(ethOut)]; display: "p=274,332;i=block/fork;q=queue"; ppp: PPPInterface[sizeof(out)]; display: "p=274,414,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; // connections to network outside 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=337,472"; endmodule