Ipv6NetworkLayer

Package: inet.networklayer.ipv6

Ipv6NetworkLayer

compound module

Represents an IPv6 network layer (L3).

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

routingTable : Ipv6RoutingTable

IPv6 Routing Table and Neighbour Discovery data structures.

Source:
routingTable: Ipv6RoutingTable {
    parameters:
        @display("p=100,100;is=s");
} up : MessageDispatcher

This module connects multiple applications, protocols and interfaces with each other and...

Source:
up: MessageDispatcher {
    parameters:
        @display("p=550,100;b=600,5");
} icmpv6 : Icmpv6

ICMPv6 implementation.

Source:
icmpv6: Icmpv6 {
    parameters:
        @display("p=700,200");
} lp : MessageDispatcher

This module connects multiple applications, protocols and interfaces with each other and...

Source:
lp: MessageDispatcher {
    parameters:
        @display("p=550,300;b=600,5");
} neighbourDiscovery : Ipv6NeighbourDiscovery

Implements IPv6 Neighbour Discovery.

Source:
neighbourDiscovery: Ipv6NeighbourDiscovery {
    parameters:
        @display("p=400,400");
} ipv6 : Ipv6

Implements the IPv6 protocol.

Source:
ipv6: Ipv6 {
    parameters:
        @display("p=550,400");
} iptunneling : like IIpv6Tunneling

IIpv6Tunneling: IPv6 Tunnel Manager

Source:
iptunneling: <default(firstAvailable("Ipv6Tunneling"))> like IIpv6Tunneling {
    parameters:
        @display("p=700,400");
} mipv6support : like IxMIPv6Support

xMIPv6Support: Implements xMIPv6 (where x = F, H, F-H).

IxMIPv6Support: Module interface for xMIPv6 (where x = F, H, F-H).

Source:
mipv6support: <default("xMIPv6Support")> like IxMIPv6Support if xMIPv6Support {
    parameters:
        @display("p=700,500");
}

Usage diagram

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Parameters

Name Type Default value Description
xMIPv6Support bool false
forwarding bool false
multicastForwarding bool false
interfaceTableModule string

Properties

Name Value Description
display i=block/fork

Gates

Name Direction Size Description
ifIn input
ifOut output
transportIn input
transportOut output

Unassigned submodule parameters

Name Type Default value Description
routingTable.interfaceTableModule string

The path to the InterfaceTable module

routingTable.ipv6TunnelingModule string "^.ipv6.iptunneling"
routingTable.routes xml xml("")
routingTable.forwarding bool false
routingTable.isRouter bool this.forwarding
routingTable.multicastForwarding bool false
routingTable.useAdminDist bool false

Use Cisco like administrative distances

up.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

up.forwardServiceRegistration bool true
up.forwardProtocolRegistration bool true
icmpv6.interfaceTableModule string

The path to the InterfaceTable module

icmpv6.crcMode string "declared"
lp.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

lp.forwardServiceRegistration bool true
lp.forwardProtocolRegistration bool true
neighbourDiscovery.interfaceTableModule string

The path to the InterfaceTable module

neighbourDiscovery.crcMode string "declared"
neighbourDiscovery.icmpv6Module string
neighbourDiscovery.xmipv6Module string
neighbourDiscovery.routingTableModule string
neighbourDiscovery.minIntervalBetweenRAs double 30ms

minRtrAdvInterval: 0.03 sec for MIPv6 , declared as parameter to facilitate testing without recompiling (Zarrar 15.07.07)

neighbourDiscovery.maxIntervalBetweenRAs double 70ms

MaxrtrAdvInterval: 0.07 sec for MIPv6, declared as parameter to facilitate testing without recompiling (Zarrar 15.07.07)

ipv6.interfaceTableModule string

The path to the InterfaceTable module

ipv6.routingTableModule string
ipv6.ipv6NeighbourDiscoveryModule string
ipv6.icmpv6Module string
ipv6.ipv6TunnelingModule string
ipv6.procDelay double 0s
mipv6support.isHomeAgent bool
mipv6support.isMobileNode bool

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 Ipv6NetworkLayer like INetworkLayer
{
    parameters:
        bool xMIPv6Support = default(false);
        bool forwarding = default(false);
        bool multicastForwarding = default(false);
        *.xmipv6Module = xMIPv6Support ? absPath(".mipv6support.xMobileIPv6") : "";
        string interfaceTableModule;
        *.forwarding = this.forwarding;
        *.multicastForwarding = this.multicastForwarding;
        *.interfaceTableModule = default(absPath(this.interfaceTableModule));
        *.routingTableModule = default(absPath(".routingTable"));
        *.ipv6NeighbourDiscoveryModule = default(absPath(".neighbourDiscovery"));
        *.icmpv6Module = default(absPath(".icmpv6"));
        *.ipv6TunnelingModule = default(absPath(".iptunneling"));
        @display("i=block/fork");

    gates:
        input ifIn @labels(INetworkHeader);
        output ifOut @labels(INetworkHeader);
        input transportIn @labels(Ipv4ControlInfo/down);
        output transportOut @labels(Ipv4ControlInfo/up);

    submodules:
        routingTable: Ipv6RoutingTable {
            parameters:
                @display("p=100,100;is=s");
        }
        up: MessageDispatcher {
            parameters:
                @display("p=550,100;b=600,5");
        }
        icmpv6: Icmpv6 {
            parameters:
                @display("p=700,200");
        }
        lp: MessageDispatcher {
            parameters:
                @display("p=550,300;b=600,5");
        }
        neighbourDiscovery: Ipv6NeighbourDiscovery {
            parameters:
                @display("p=400,400");
        }
        // TODO rename to ip
        ipv6: Ipv6 {
            parameters:
                @display("p=550,400");
        }
        iptunneling: <default(firstAvailable("Ipv6Tunneling"))> like IIpv6Tunneling {
            parameters:
                @display("p=700,400");
        }
        mipv6support: <default("xMIPv6Support")> like IxMIPv6Support if xMIPv6Support {
            parameters:
                @display("p=700,500");
        }

    connections allowunconnected:  // FIXME remove 'nocheck'!
        transportIn --> { @display("m=n"); } --> up.in++;
        transportOut <-- { @display("m=n"); } <-- up.out++;

        up.out++ --> lp.in++;
        up.in++ <-- lp.out++;

        up.out++ --> icmpv6.transportIn;
        up.in++ <-- icmpv6.transportOut;

        icmpv6.ipv6Out --> lp.in++;
        icmpv6.ipv6In <-- lp.out++;

        lp.out++ --> ipv6.transportIn;
        lp.in++ <-- ipv6.transportOut;

        iptunneling.upperLayerOut --> ipv6.upperTunnelingIn;
        iptunneling.upperLayerIn <-- ipv6.upperTunnelingOut;

        iptunneling.linkLayerOut --> ipv6.lowerTunnelingIn;
        iptunneling.linkLayerIn <-- ipv6.lowerTunnelingOut;

        neighbourDiscovery.ipv6Out --> ipv6.ndIn;
        neighbourDiscovery.ipv6In <-- ipv6.ndOut;

        mipv6support.fromIPv6 <-- ipv6.xMIPv6Out if xMIPv6Support;
        mipv6support.toIPv6 --> ipv6.xMIPv6In if xMIPv6Support;

        ipv6.queueOut --> { @display("m=s"); } --> ifOut;
        ipv6.queueIn <-- { @display("m=s"); } <-- ifIn;
}

File: src/inet/networklayer/ipv6/Ipv6NetworkLayer.ned