NED File src/inet/routing/pim/modes/PimSm.ned¶
Name |
Type |
Description |
|---|---|---|
simple module |
Implementation of PIM-SM protocol (RFC 4601). |
Source code¶
//
// Copyright (C) 2013 Brno University of Technology (http://nes.fit.vutbr.cz/ansa)
//
// SPDX-License-Identifier: LGPL-3.0-or-later
//
// Authors: Veronika Rybova, Vladimir Vesely ([email protected]),
// Tamas Borbely ([email protected])
package inet.routing.pim.modes;
import inet.common.SimpleModule;
//
// Implementation of PIM-SM protocol (RFC 4601).
//
// PIM-SM is a multicast routing protocol which
// builds a shared multicast forwarding tree rooted at a Rendezvous Point (RP)
// per group, and a source specific forwarding tree from the sources to the RP.
// It is also capable of switching to a shortest path tree, so that traffic from
// sources to receivers does not have to pass through the RP.
//
// The module must access the ~PimInterfaceTable and ~PimNeighborTable
// modules; their path is given as the `pimInterfaceTableModule` and
// `pimNeighborTableModule` parameters.
//
// The 'RP' parameter specifies the address of the Rendezvous Point.
// Currently only one global RP is supported.
//
// If there are multiple PIM routers on a multi-access LAN, only one
// of them will be responsible for forwarding datagrams to the LAN.
// This will be the router with the highest IP address except if
// all routers have `designatedRouterPriority` set, in which case
// the highest priority wins (or highest IP address on ties).
//
// Other parameters set the time constants to the values specified
// in RFC 4601. They should not be changed except for testing.
//
// Limitations:
// - Only one global RP is supported and it must be specified statically.
// PIM Bootstrap and RP discovery are not yet implemented.
// - Switchover to the shortest path tree is not supported.
// - Source specific excludes in the shared tree are not supported.
//
simple PimSm extends SimpleModule
{
parameters:
@class(PimSm);
@display("i=block/network2");
string interfaceTableModule;
string routingTableModule;
string pimInterfaceTableModule;
string pimNeighborTableModule;
string addressFamily @enum("ipv4","ipv6") = default("ipv4"); // address family this PIM-SM instance operates on
string RP = default("");
int designatedRouterPriority = default(-1);
volatile double triggeredHelloDelay @unit(s) = uniform(0s,5s);
double helloPeriod @unit(s) = 30s;
double holdTime @unit(s) = default(3.5 * helloPeriod);
double joinPrunePeriod @unit(s) = default(60s); // Period between Join/Prune messages (called t_periodic in the RFC)
double defaultOverrideInterval @unit(s) = 2.5s;
double defaultPropagationDelay @unit(s) = 0.5s;
double keepAlivePeriod @unit(s) = 210s;
double rpKeepAlivePeriod @unit(s) = 3 * registerSuppressionTime + registerProbeTime;
double registerSuppressionTime @unit(s) = 60s;
double registerProbeTime @unit(s) = 5s;
double assertTime @unit(s) = 180s;
double assertOverrideInterval @unit(s) = 3s;
@signal[sentHelloPk](type=cPacket);
@signal[rcvdHelloPk](type=cPacket);
@signal[sentRegisterPk](type=cPacket);
@signal[rcvdRegisterPk](type=cPacket);
@signal[sentRegisterStopPk](type=cPacket);
@signal[rcvdRegisterStopPk](type=cPacket);
@signal[sentJoinPrunePk](type=cPacket);
@signal[rcvdJoinPrunePk](type=cPacket);
@signal[sentAssertPk](type=cPacket);
@signal[rcvdAssertPk](type=cPacket);
gates:
input ipIn;
output ipOut;
}