PimDm

Package: inet.routing.pim.modes

PimDm

simple module

Implementation of PIM-DM protocol (RFC 3973).

PIM-DM is a multicast routing protocol which is designed for networks where the receivers are densely distributed. PIM-DM initially floods the multicast datagrams to all areas of the network. If some areas of the network does not have group members, then they will be pruned off the forwarding tree.

The prune state of a branch must be confirmed periodically, otherwise the forwarding restarts automatically. The router can also cancel the prune by sending a Graft message.

The module must access the PimInterfaceTable and PimNeighborTable modules, their path is given as the 'pimInterfaceTableModule' and 'pimNeighborTableModule' parameters.

Other parameters are timer values from the specification. They should not be modified except for testing purposes.

Used in compound modules

Name Type Description
Pim compound module (no description)

Parameters

Name Type Default value Description
interfaceTableModule string
routingTableModule string
pimInterfaceTableModule string
pimNeighborTableModule string
triggeredHelloDelay double uniform(0s,5s)
helloPeriod double 30s
holdTime double 3.5 * helloPeriod
pruneInterval double 180s
pruneLimitInterval double 210s
overrideInterval double 2.5s
propagationDelay double 0.5s
graftRetryInterval double 3s
sourceActiveInterval double 210s
stateRefreshInterval double 60s
assertTime double 180s

Properties

Name Value Description
display i=block/network2

Gates

Name Direction Size Description
ipIn input
ipOut output

Signals

Name Type Unit
sentHelloPk cPacket
sentJoinPrunePk cPacket
rcvdStateRefreshPk cPacket
rcvdHelloPk cPacket
rcvdJoinPrunePk cPacket
sentGraftPk cPacket
rcvdGraftPk cPacket
sentAssertPk cPacket
sentGraftAckPk cPacket
rcvdAssertPk cPacket
rcvdGraftAckPk cPacket
sentStateRefreshPk cPacket

Scheduled messages (observed)

msgkindctrltagsmsgnamecontext
omnetpp::cMessage1PIM HelloTimer
omnetpp::cMessage3PimAssertTimerfilled
omnetpp::cMessage4PimPruneTimerfilled
omnetpp::cMessage5PimPrunePendingTimerfilled
omnetpp::cMessage7PIMOverrideTimerfilled

Direct method calls (observed)

call tofunctioninfo
InterfaceTableinet::InterfaceTable::interfaceChangedinterfaceChanged
Igmpv2inet::Igmpv2::receiveSignalipv4MulticastGroupJoined
Ipv4RoutingTableinet::Ipv4RoutingTable::addMulticastRouteaddMulticastRoute(...)
Ipv4RoutingTableinet::Ipv4RoutingTable::findBestMatchingRoutefindBestMatchingRoute(%u.%u.%u.%u)
PimNeighborTableinet::PimNeighborTable::addNeighboraddNeighbor
PimNeighborTableinet::PimNeighborTable::restartLivenessTimerrestartLivenessTimer

Called methods (observed)

functioninfocall from
inet::PimDm::receiveSignalipv4DataOnNonrpfIpv4
inet::PimDm::receiveSignalipv4DataOnRpfIpv4
inet::PimDm::receiveSignalipv4MulticastGroupRegisteredIgmpv2
inet::PimDm::receiveSignalipv4NewMulticastIpv4
inet::PimDm::receiveSignalrouteAddedIpv4RoutingTable

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
ipInPacket0PimSplitterDispatchProtocolReq, DscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, MacAddressInd, NetworkProtocolInd, PacketProtocolTag, TosInd

Outgoing messages (observed)

gatemsgkindctrldestModuletags
ipOutPacket0PimSplitterDispatchProtocolInd, DispatchProtocolReq, HopLimitReq, InterfaceReq, L3AddressReq, PacketProtocolTag

Packet operations (observed)

chunkTypepacketAction
PimAssertinsertAtFront, peekAtFront
PimGraftinsertAtFront, peekAtFront
PimHelloinsertAtFront, peekAtFront
PimJoinPruneinsertAtFront, peekAtFront
PimPacketpeekAtFront

Shared Tagging operations (observed)

tagTypetagAction
DispatchProtocolIndaddTag, addTagIfAbsent
DispatchProtocolReqaddTag, addTagIfAbsent
HopLimitReqaddTag, addTagIfAbsent
InterfaceIndgetTag
InterfaceReqaddTag, addTagIfAbsent
L3AddressIndgetTag
L3AddressReqaddTag, addTagIfAbsent
PacketProtocolTagaddTag, addTagIfAbsent

Tagging operations (observed)

tagTypetagAction
inet::Ipv4InterfaceDatagetTag, getTagForUpdate

Source code

//
// Implementation of PIM-DM protocol (RFC 3973).
//
// PIM-DM is a multicast routing protocol which is designed
// for networks where the receivers are densely distributed.
// PIM-DM initially floods the multicast datagrams to all areas
// of the network. If some areas of the network does not have
// group members, then they will be pruned off the forwarding tree.
//
// The prune state of a branch must be confirmed periodically,
// otherwise the forwarding restarts automatically. The router
// can also cancel the prune by sending a Graft message.
//
// The module must access the ~PimInterfaceTable and ~PimNeighborTable
// modules, their path is given as the 'pimInterfaceTableModule' and
// 'pimNeighborTableModule' parameters.
//
// Other parameters are timer values from the specification.
// They should not be modified except for testing purposes.
//
simple PimDm
{
    parameters:
        @display("i=block/network2");
        string interfaceTableModule;
        string routingTableModule;
        string pimInterfaceTableModule;
        string pimNeighborTableModule;

        volatile double triggeredHelloDelay @unit(s) = uniform(0s,5s);
        double helloPeriod @unit(s) = 30s;
        double holdTime @unit(s) = default(3.5 * helloPeriod);
        double pruneInterval @unit(s) = 180s;
        double pruneLimitInterval @unit(s) = 210s;
        double overrideInterval @unit(s) = 2.5s;
        double propagationDelay @unit(s) = 0.5s;
        double graftRetryInterval @unit(s) = 3s;
        double sourceActiveInterval @unit(s) = 210s;
        double stateRefreshInterval @unit(s) = 60s;
        double assertTime @unit(s) = 180s;

        @signal[sentHelloPk](type=cPacket);
        @signal[rcvdHelloPk](type=cPacket);
        @signal[sentGraftPk](type=cPacket);
        @signal[rcvdGraftPk](type=cPacket);
        @signal[sentGraftAckPk](type=cPacket);
        @signal[rcvdGraftAckPk](type=cPacket);
        @signal[sentJoinPrunePk](type=cPacket);
        @signal[rcvdJoinPrunePk](type=cPacket);
        @signal[sentAssertPk](type=cPacket);
        @signal[rcvdAssertPk](type=cPacket);
        @signal[sentStateRefreshPk](type=cPacket);
        @signal[rcvdStateRefreshPk](type=cPacket);

    gates:
        input ipIn;
        output ipOut;
}

File: src/inet/routing/pim/modes/PimDm.ned