Compound Module NetworkLayer6

Package: inet.nodes.ipv6
File: src/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 ICMPv6 IPv6ErrorHandling IPv6NeighbourDiscovery

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram. Click here to see the full picture.

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram. Click here to see the full picture.

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 (compound module)

IPv6 router.

StandardHost6 (compound module)

IPv6 host with TCP, UDP layers and applications.

Properties:

Name Value Description
display i=block/fork

Gates:

Name Direction Size 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 Default value Description
ipv6.procDelay double 0s

Source code:

//
// Represents an IPv6 network layer (L3).
//
// The module has ports to connect to a higher layer (TCP,UDP) and
// several network interfaces.
//
module NetworkLayer6
{
    parameters:
        @display("i=block/fork");
    gates:
        input ifIn[] @labels(IPv6Datagram);
        output ifOut[] @labels(IPv6Datagram);
        input tcpIn @labels(TCPSegment,IPv6ControlInfo/down);
        output tcpOut @labels(TCPSegment,IPv6ControlInfo/up);
        input udpIn @labels(UDPPacket,IPv6ControlInfo/down);
        output udpOut @labels(UDPPacket,IPv6ControlInfo/up);
        input rsvpIn @labels(IPv6ControlInfo/down);
        output rsvpOut @labels(IPv6ControlInfo/up);
        input ospfIn @labels(IPv6ControlInfo/down);
        output ospfOut @labels(IPv6ControlInfo/up);
        input pingIn;
        output pingOut;
        output errorOut;
    submodules:
        ipv6: IPv6 {
            parameters:
                protocolMapping = "6:0,17:1,46:2,89:3";
                @display("p=84,129");
            gates:
                transportIn[4];
                transportOut[4];
                queueIn[sizeof(ifIn)];
                queueOut[sizeof(ifIn)];
        }
        icmpv6: ICMPv6 {
            parameters:
                @display("p=208,79");
        }
        ipv6ErrorHandling: IPv6ErrorHandling {
            parameters:
                @display("p=280,79");
        }
        neighbourDiscovery: IPv6NeighbourDiscovery {
            parameters:
                @display("p=208,171");
        }
    connections allowunconnected:  // FIXME remove 'nocheck'!
        // IPv6 to transport Layer
        ipv6.transportOut[0] --> { @display("m=n"); } --> tcpOut;
        ipv6.transportIn[0] <-- { @display("m=n"); } <-- tcpIn;

        ipv6.transportOut[1] --> { @display("m=n"); } --> udpOut;
        ipv6.transportIn[1] <-- { @display("m=n"); } <-- udpIn;

        ipv6.transportOut[2] --> { @display("m=n"); } --> rsvpOut;
        ipv6.transportIn[2] <-- { @display("m=n"); } <-- rsvpIn;

        ipv6.transportOut[3] --> { @display("m=n"); } --> ospfOut;
        ipv6.transportIn[3] <-- { @display("m=n"); } <-- ospfIn;

        // IPv6 to ICMPv6
        ipv6.icmpOut --> icmpv6.ipv6In;
        ipv6.icmpIn <-- icmpv6.ipv6Out;

        // 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.ipv6In;
        ipv6.ndIn <-- neighbourDiscovery.ipv6Out;

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