mrtObject class

There is one mrtObject (aka Arbiter) object per multicast capable node. This object supports the ability for a node to run multiple multicast routing protocols by maintaining an array of multicast protocols indexed by the incoming interface. Thus, if there are several multicast protocols at a node, each interface is owned by just one protocol. Therefore, this object supports the ability for a node to run multiple multicast routing protocols. The node uses the arbiter to perform protocol actions, either to a specific protocol instance active at that node, or to all protocol instances at that node. rX [instance]addproto & adds the handle for a protocol instance to its array of protocols. The second optional argument is the incoming interface list controlled by the protocol. If this argument is an empty list or not specified, the protocol is assumed to run on all interfaces (just one protocol).
[protocol]getType & returns the handle to the protocol instance active at that node that matches the specified type (first and only argument). This function is often used to locate a protocol's peer at another node. An empty string is returned if the protocol of the given type could not be found.
[op, args]all-mprotos & internal routine to execute ``op'' with ``args'' on all protocol instances active at that node.
[]start &
[]stop & start/stop execution of all protocols.
[dummy]notify & is called when a topology change occurs. The dummy argument is currently not used.
[file-handle]dump-mroutes & dump multicast routes to specified file-handle.
[G, S]join-group & signals all protocol instances to join S, G.
[G, S]leave-group & signals all protocol instances to leave S, G.
[code, s, g, iif]upcall & signalled by node on forwarding errors in classifier; this routine in turn signals the protocol instance that owns the incoming interface (iif) by invoking the appropriate handle function for that particular code.
[rep, s, g, iif]drop & Called on packet drop, possibly to prune an interface.

In addition, the mrtObject class supports the concept of well known groups, , those groups that do not require explicit protocol support. Two well known groups, ALL_ROUTERS and ALL_PIM_ROUTERS are predefined in ns.

The mrtObject../ns-2/tcl/mcast/McastProto.tcl defines two class procedures to set and get information about these well known groups. rX [name]registerWellKnownGroups & assigns name a well known group address.
[name]getWellKnownGroup & returns the address allocated to well known group, name. If name is not registered as a well known group, then it returns the address for ALL

Tom Henderson 2011-11-05