Compound Module OverlayAccessRouter

File: Underlay/IPv4Underlay/OverlayAccessRouter.ned

Access router that participates in the overlay

Author: Markus Mauch, Bernhard Heep

notificationBoard: NotificationBoard interfaceTable: InterfaceTable routingTable: RoutingTable accessNet: AccessNet tier3: tier3Type like Tier tier2: tier2Type like Tier tier1: tier1Type like Tier overlay: overlayType like Overlay udp: UDP networkLayer: NetworkLayer ppp: PPPInterface

Usage diagram:

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.

Contains the following modules:

If a module type shows up more than once, that means it has been defined in more than one NED file.

AccessNet

Access net connects participating hosts over an access router with the backbone

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)

Used in compound modules:

If a module type shows up more than once, that means it has been defined in more than one NED file.

IPv4Underlay

The IPv4Underlay ned-file

See also: IPv4UnderlayConfigurator

Parameters:

Name Type Description
IPForward bool

true if ip packets should be forwarded

routingFile string

use predefined routing file if given

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

Gates:

Name Direction Description
in [ ] input

incoming gates from overlay

ethIn [ ] input

placeholder for zero-size vector

overlayNeighborArrowIn [ ] input

incoming gates for direct connections from overlay neigbors

out [ ] output

outgoing gates to overlay

ethOut [ ] output

placeholder for zero-size vector

overlayNeighborArrowOut [ ] output

outgoing gates for direct connections to overlay neighbors

Unassigned submodule parameters:

Name Type Description

Source code:

module OverlayAccessRouter
    parameters:
        IPForward: bool,// true if ip packets should be forwarded
        routingFile: string, // use predefined routing file if given
        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

    gates:
        in: in[]; // incoming gates from overlay
        in: ethIn[]; // placeholder for zero-size vector
        in: overlayNeighborArrowIn[]; // incoming gates for direct connections from overlay neigbors

        out: out[]; // outgoing gates to overlay
        out: ethOut[]; // placeholder for zero-size vector
        out: overlayNeighborArrowOut[]; // outgoing gates for direct connections to overlay neighbors

    submodules:
        notificationBoard: NotificationBoard;
            display: "p=76,192;i=block/control";
        interfaceTable: InterfaceTable;
            display: "p=76,262;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=76,332;i=block/table";
        accessNet: AccessNet;
            display: "p=76,402;i=block/cogwheeli";
        tier3: tier3Type like Tier;
            display: "p=56,64;i=block/segm";
        tier2: tier2Type like Tier;
            display: "p=139,88;i=block/segm";
        tier1: tier1Type like Tier;
            display: "p=218,122;i=block/segm";
        overlay: overlayType like Overlay;
            display: "p=290,184;i=block/network2";
        udp: UDP;
            display: "p=290,262;i=block/transport";
        networkLayer: NetworkLayer;
            parameters:
                proxyARP = false;
            gatesizes:
                ifIn[sizeof(out)+sizeof(ethOut)],
                ifOut[sizeof(out)+sizeof(ethOut)];
            display: "p=290,340;i=block/fork;q=queue";
        ppp: PPPInterface[sizeof(out)];
            display: "p=290,414,row,90;q=txQueue;i=block/ifcard";
    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++;

        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=361,464";
endmodule