Compound Module NetworkLayer6

File: Nodes/IPv6/NetworkLayer6.ned

Represents an IPv6 network layer (L3).

The module has ports to connect to a higher layer (TCP,UDP) and several network interfaces.

ipv6: IPv6 icmpv6: ICMPv6 ipv6ErrorHandling: IPv6ErrorHandling neighbourDiscovery: IPv6NeighbourDiscovery

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.

NetworkLayer6 ICMPv6 IPv6NeighbourDiscovery IPv6 IPv6ErrorHandling Router6 StandardHost6

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.

ICMPv6

ICMPv6 implementation.

IPv6

Implements the IPv6 protocol.

IPv6ErrorHandling

Handles error notifications that arrive from other protocol modules.

IPv6NeighbourDiscovery

Implements IPv6 Neighbour Discovery.

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.

Router6

IPv6 router.

StandardHost6

IPv6 host with TCP, UDP layers and applications.

Gates:

Name Direction Description
ifIn [ ] input
ifOut [ ] output
TCPIn input
TCPOut output
UDPIn input
UDPOut output
RSVPIn input
RSVPOut output
OSPFIn input
OSPFOut output
pingIn input
pingOut output
errorOut output

Unassigned submodule parameters:

Name Type Description
ipv6.procDelay numeric const

Source code:

module NetworkLayer6
    gates:
        in: ifIn[];
        out: ifOut[];
        in: TCPIn;
        out: TCPOut;
        in: UDPIn;
        out: UDPOut;
        in: RSVPIn;
        out: RSVPOut;
        in: OSPFIn;
        out: OSPFOut;
        in: pingIn;
        out: pingOut;
        out: errorOut;
    submodules:
        ipv6: IPv6;
            parameters:
                protocolMapping = "6:0,17:1,46:2,89:3";
            gatesizes:
                transportIn[4],
                transportOut[4],
                queueIn[sizeof(ifIn)],
                queueOut[sizeof(ifIn)];
            display: "i=block/network2;p=84,129";
        icmpv6: ICMPv6;
            display: "i=block/control;p=208,79";
        ipv6ErrorHandling: IPv6ErrorHandling;
            display: "p=280,79;i=block/process_s";
        neighbourDiscovery: IPv6NeighbourDiscovery;
            display: "p=208,171;i=block/network";
    connections nocheck:  // FIXME remove 'nocheck'!
        // IPv6 to transport Layer
        ipv6.transportOut[0] --> TCPOut display "m=n";
        ipv6.transportIn[0] <-- TCPIn display "m=n";

        ipv6.transportOut[1] --> UDPOut display "m=n";
        ipv6.transportIn[1] <-- UDPIn display "m=n";

        ipv6.transportOut[2] --> RSVPOut display "m=n";
        ipv6.transportIn[2] <-- RSVPIn display "m=n";

        ipv6.transportOut[3] --> OSPFOut display "m=n";
        ipv6.transportIn[3] <-- OSPFIn display "m=n";

        // IPv6 to ICMPv6
        ipv6.icmpOut --> icmpv6.fromIPv6;
        ipv6.icmpIn <-- icmpv6.toIPv6;

        // ICMPv6 to IPv6ErrorHandling
        icmpv6.errorOut --> ipv6ErrorHandling.in;

        // ICMPv6 to ping I/O
        icmpv6.pingOut --> pingOut;
        icmpv6.pingIn <-- pingIn;

        // IPv6 to Neighbour Discovery
        ipv6.ndOut --> neighbourDiscovery.fromIPv6;
        ipv6.ndIn <-- neighbourDiscovery.toIPv6;

        // IPv6 to L2
        for i=0..sizeof(ifOut)-1 do
            ifIn[i] --> ipv6.queueIn[i] display "m=s";
            ifOut[i] <-- ipv6.queueOut[i] display "m=s";
        endfor;
endmodule