Ipv6NeighbourDiscovery

Package: inet.networklayer.icmpv6

Ipv6NeighbourDiscovery

simple module

Implements IPv6 Neighbour Discovery.

An overview of the Ipv6 implementation in the INET Framework is provided here.

See also: Ipv6, Ipv6RoutingTable, Icmpv6

Used in compound modules

Name Type Description
Ipv6NetworkLayer compound module

Represents an IPv6 network layer (L3).

Parameters

Name Type Default value Description
interfaceTableModule string

The path to the InterfaceTable module

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

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

maxIntervalBetweenRAs double 70ms

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

Properties

Name Value Description
display i=block/network

Gates

Name Direction Size Description
ipv6In input
ipv6Out output

Signals

Name Type Unit
startDad long

Statistics

Name Title Source Record Unit Interpolation Mode
startDad DAD started count, vector

Scheduled messages (observed)

msgkindctrltagsmsgnamecontext
omnetpp::cMessage0assignLinkLocalAddr
omnetpp::cMessage1sendPeriodicRAfilled
omnetpp::cMessage2sendSolicitedRAfilled
omnetpp::cMessage3initiateRTRDISfilled
omnetpp::cMessage4dadTimeoutfilled
omnetpp::cMessage5processRDTimeoutfilled
omnetpp::cMessage6NUDTimeoutfilled
omnetpp::cMessage7arTimeoutfilled

Direct method calls (observed)

call tofunctioninfo
InterfaceTableinet::InterfaceTable::interfaceChangedinterfaceChanged
Icmpv6inet::Icmpv6::sendErrorMessagesendErrorMessage(datagram, type=%d, code=%d)
Ipv6NeighbourDiscoveryinet::Ipv6NeighbourDiscovery::createAndSendNsPacketcreateAndSendNsPacket
Ipv6NeighbourDiscoveryinet::Ipv6NeighbourDiscovery::initiateDadinitiateDad
Ipv6RoutingTableinet::Ipv6RoutingTable::doLongestPrefixMatchdoLongestPrefixMatch(%s)

Called methods (observed)

functioninfocall from
inet::Ipv6NeighbourDiscovery::createAndSendNsPacketcreateAndSendNsPacketIpv6NeighbourDiscovery
inet::Ipv6NeighbourDiscovery::initiateDadinitiateDadIpv6NeighbourDiscovery
inet::Ipv6NeighbourDiscovery::resolveNeighbourresolveNeighbor(%s,if=%d)Ipv6

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
ipv6InPacket0Ipv6DispatchProtocolInd, DispatchProtocolReq, DscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, NetworkProtocolInd, PacketProtocolTag, TosInd, ErrorRateInd?, Ieee802SapInd?, MacAddressInd?, SignalPowerInd?, SignalTimeInd?, SnirInd?, Ieee80211ChannelInd?, Ieee80211ModeInd?
ipv6InPacket0Ipv6NdControlInfoIpv6DispatchProtocolReq, NetworkProtocolInd, PacketProtocolTag, InterfaceInd?, MacAddressInd?, MulticastReq?, SocketReq?, TransportProtocolInd?

Outgoing messages (observed)

gatemsgkindctrldestModuletags
ipv6OutPacket0Ipv6HopLimitReq, InterfaceReq, L3AddressReq, PacketProtocolTag
ipv6OutPacket0Ipv6NdControlInfoIpv6DispatchProtocolReq, NetworkProtocolInd, PacketProtocolTag, InterfaceInd?, MacAddressInd?, TransportProtocolInd?

Packet operations (observed)

chunkTypepacketAction
Icmpv6HeaderpeekAtFront
Ipv6HeaderpeekAtFront
Ipv6NeighbourAdvertisementinsertAtFront
Ipv6NeighbourSolicitationinsertAtFront
Ipv6RouterAdvertisementinsertAtFront
Ipv6RouterSolicitationinsertAtFront

Shared Tagging operations (observed)

tagTypetagAction
DispatchProtocolReqremoveTagIfPresent
HopLimitIndgetTag
HopLimitReqaddTagIfAbsent
InterfaceIndgetTag
InterfaceReqaddTagIfAbsent
L3AddressIndgetTag
L3AddressReqaddTagIfAbsent
PacketProtocolTagaddTagIfAbsent, getTag

Tagging operations (observed)

tagTypetagAction
inet::Ipv6InterfaceDatagetTag, getTagForUpdate

Source code

//
// Implements IPv6 Neighbour Discovery.
//
// An overview of the Ipv6 implementation in the INET Framework is
// provided <a href="ipv6overview.html">here</a>.
//
// @see ~Ipv6, ~Ipv6RoutingTable, ~Icmpv6
//
simple Ipv6NeighbourDiscovery
{
    parameters:
        string interfaceTableModule;   // The path to the InterfaceTable module
        string crcMode @enum("declared","computed") = default("declared");
        string icmpv6Module;
        string xmipv6Module;
        string routingTableModule;
        double minIntervalBetweenRAs @unit(s) = default(30ms); //minRtrAdvInterval:  0.03 sec for MIPv6 , declared as parameter to facilitate testing without recompiling (Zarrar 15.07.07)
        double maxIntervalBetweenRAs @unit(s) = default(70ms);  //MaxrtrAdvInterval: 0.07 sec for MIPv6, declared as parameter to facilitate testing without recompiling (Zarrar 15.07.07)
        @display("i=block/network");
        @signal[startDad](type=long); // emits value=1
        @statistic[startDad](title="DAD started"; record=count,vector);
    gates:
        input ipv6In;
        output ipv6Out;
}

File: src/inet/networklayer/icmpv6/Ipv6NeighbourDiscovery.ned