File Underlay/SingleHostUnderlay/SingleHost.ned

Contains:

//
// Copyright (C) 2006 Institut fuer Telematik, Universitaet Karlsruhe (TH)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//

//
// @author Stephan Krause
//

import
    "NotificationBoard",
    "InterfaceTable",
    "RoutingTable",
    "Overlay",
    "BootstrapList",
    "Tiers",
    "UDP",
    "NetworkLayer",
    "PingApp",
    "RealworldDevice",
    "PacketParser",
    "PingCache";

//
// simulates a single host to connect it to a real network
//
module SingleHost
    parameters:
        IPForward: bool, // true if ip packets should be forwarded
        outDeviceType: string, // outDevice to use
        overlayType: string, // overlay protocol compound module to use
        tier1Type: string, // tier 1 module to use
        tier2Type: string, // tier 2 module to use
        tier3Type: string, // tier 3 module to use
        numTiers: numeric const, // number of tiers
        parser: string, // name of the PacketParser to use
        appParser: string, // name of the PacketParser to use
        routingFile: string; // use predefined routing file if given

    gates:
        in: overlayNeighborArrowIn[]; // incoming gate for direct connections from overlay neighbors
        out: overlayNeighborArrowOut[]; // outgoing gate for direct connections to overlay neighbors

    submodules:
        notificationBoard: NotificationBoard;
            display: "p=68,136;i=block/control";
        interfaceTable: InterfaceTable;
            display: "p=68,206;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,276;i=block/table";
        packetParser: parser like PacketParser;
            display: "p=171,278;i=block/wheelbarrow";
        applicationParser: appParser like PacketParser;
            display: "p=171,348;i=block/wheelbarrow";
        tier3: tier3Type like Tier;
            display: "p=64,56;i=block/segm";
        tier2: tier2Type like Tier;
            display: "p=131,56;i=block/segm";
        tier1: tier1Type like Tier;
            display: "p=202,58;i=block/segm";
        overlay: overlayType like Overlay;
            display: "p=266,128;i=block/network2";
        udp: UDP;
            display: "p=266,198;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[1],
                ifOut[1];
            display: "p=266,268;i=block/fork;q=queue";
        outDev: outDeviceType like RealworldDevice;
            display: "p=266,358,row,90;q=txQueue;i=block/ifcard";
        pingCache: PingCache;
            display: "p=68,352;i=block/table";
        bootstrapList: BootstrapList;
            display: "p=176,208;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++;

        udp.to_ip --> networkLayer.UDPIn;
        udp.from_ip <-- networkLayer.UDPOut;

        // connections to network outside
        outDev.netwOut --> networkLayer.ifIn[0];
        outDev.netwIn <-- networkLayer.ifOut[0];

    display: "b=330,410";
endmodule