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 Neighbor Discovery data structures.

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

Facilitates the interconnection of applications, protocols, and network interfaces, dispatching...

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

Facilitates the interconnection of applications, protocols, and network interfaces, dispatching...

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

Implements IPv6 Neighbor 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 modules (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.displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

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, supports displaying pars, watches, and module-specific information

up.interfaceTableModule string

Module path to the ~InterfaceTable module

up.forwardServiceRegistration bool true
up.forwardProtocolRegistration bool true
up.interfaceMapping object {}

Maps network interface names to connected submodule names (e.g. {"eth0": "bridging"}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

up.serviceMapping object {}

Maps protocols to connected submodule names (e.g. {"ethernetmac": "bridging"}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

up.protocolMapping object {}

Maps protocols to connected submodule names (e.g. {"ipv4": "bridging"}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

icmpv6.displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

icmpv6.interfaceTableModule string

The path to the InterfaceTable module

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

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

lp.interfaceTableModule string

Module path to the ~InterfaceTable module

lp.forwardServiceRegistration bool true
lp.forwardProtocolRegistration bool true
lp.interfaceMapping object {}

Maps network interface names to connected submodule names (e.g. {"eth0": "bridging"}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

lp.serviceMapping object {}

Maps protocols to connected submodule names (e.g. {"ethernetmac": "bridging"}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

lp.protocolMapping object {}

Maps protocols to connected submodule names (e.g. {"ipv4": "bridging"}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

neighbourDiscovery.displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

neighbourDiscovery.interfaceTableModule string

The path to the InterfaceTable module

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

MinRtrAdvInterval: 0.03 sec for MIPv6

neighbourDiscovery.maxIntervalBetweenRAs double 70ms

MaxrtrAdvInterval: 0.07 sec for MIPv6

ipv6.displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

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