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
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;
}
File: src/inet/routing/pim/modes/PIMDM.ned