Simple Module PIMDM

Package: inet.routing.pim.modes
File: src/inet/routing/pim/modes/PIMDM.ned

C++ definition

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.

PIMDM

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.

Used in compound modules:

Name Type Description
PIMRouting 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

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;
}