File: Underlay/SimpleUnderlay/SimpleMultiOverlayHost.ned
Host in the simple network that participates in the overlay
Author: Stephan Krause, 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) |
SimpleUDP | UDP protocol implementation, for IPv4 and IPv6. |
Tier | A template for Tier1-3 modules |
NotificationBoard | (unknown -- not in documented files) |
InterfaceTable | (unknown -- not in documented files) |
Name | Type | Description |
---|---|---|
IPForward | bool | ? |
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 |
numOverlayModulesPerNode | numeric const | number of parallel overlays |
routingFile | string | ? |
Name | Direction | Description |
---|---|---|
overlayNeighborArrowIn [ ] | input | incoming gate for visualizing overlay neighborship with connection arrows |
overlayNeighborArrowOut [ ] | output | incoming gate for visualizing overlay neighborship with connection arrows |
out | output | Dummy gate for storing channel informations |
Name | Type | Description |
---|---|---|
udp.constantDelay | numeric | constant delay between two peers |
udp.useCoordinateBasedDelay | bool | delay should be calculated from euklidean distance between two peers |
udp.jitter | numeric | average amount of jitter in % |
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 SimpleMultiOverlayHost parameters: IPForward: bool, // ? 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 numOverlayModulesPerNode: numeric const, // number of parallel overlays routingFile: string; // ? gates: in: overlayNeighborArrowIn[]; // incoming gate for visualizing overlay neighborship with connection arrows out: overlayNeighborArrowOut[], // incoming gate for visualizing overlay neighborship with connection arrows out; // Dummy gate for storing channel informations submodules: notificationBoard: NotificationBoard; display: "p=212,296;i=block/control"; tier3: tier3Type[numOverlayModulesPerNode] like Tier; display: "p=64,64;i=block/segm"; tier2: tier2Type[numOverlayModulesPerNode] like Tier; display: "p=179,104;i=block/segm"; tier1: tier1Type[numOverlayModulesPerNode] like Tier; display: "p=290,162;i=block/segm"; overlay: overlayType[numOverlayModulesPerNode] 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"; neighborCache: NeighborCache; display: "p=76,224;i=block/table"; bootstrapList: BootstrapList; display: "p=168,224;i=block/table"; connections nocheck: bootstrapList.to_udp --> udp.from_app++; bootstrapList.from_udp <-- udp.to_app++; for i=0..numOverlayModulesPerNode-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