Node support for multicast is realized in two primary ways: it serves
as a focal point for access to the multicast protocols, in the areas
of address allocation, control and management, and group membership
dynamics; and secondly, it provides primitives to access and control
interfaces on links incident on that node.
rX
[]expandaddr, & 
[]allocaddr &
        Class procedures for address management.
        []expandaddr is now obsoleted.
        []allocaddr allocates the next available multicast
        address.
[]start-mcast, & 
[]stop-mcast &
        To start and stop multicast routing at that node. 
[]notify-mcast &
        []notify-mcast signals the mrtObject at that node to
        recompute multicastroutes following a topology change or
        unicast route update from a neighbour.  
[]getArbiter &
        returns a handle to mrtObject operating at that node. 
[file-handle]dump-routes &
        to dump the multicast forwarding tables at that node. 
[s g iif code]new-group &
        When a multicast data packet is received, and the multicast
        classifier cannot find the slot corresponding to that data
        packet, it invokes []Node nstproc new-group to
        establish the appropriate entry.  The code indicates the
        reason for not finding the slot.  Currently there are two
        possibilities, cache-miss and wrong-iif.  This procedure
        notifies the arbiter instance to establish the new group. 
[a g]join-group &
        An agent at a node that joins a particular group invokes
        ``node join-group agent group''.  The
        node signals the mrtObject to join the particular group,
        and adds agent to its list of agents at that
        group.  It then adds agent to all replicators
        associated with group. 
[a g]leave-group &
        Node instproc leave-group reverses the process
        described earlier.  It disables the outgoing interfaces to the
        receiver agents for all the replicators of the group, deletes
        the receiver agents from the local Agents
_ list; it
        then invokes the arbiter instance's
        []leave-group.
[s g iif oiflist]add-mfc &
        Node instproc add-mfc adds a multicast forwarding cache
        entry for a particular source, group, iif.
        The mechanism is:
        
- create a new replicator (if one does not already exist),
- update the replicator
 _ instance variable array at the node,
- add all outgoing interfaces and local agents to the
            appropriate replicator,
- invoke the multicast classifier's []add-rep
            to create a slot for the replicator in the multicast
            classifier.
        
[s g oiflist]del-mfc &
        disables each oif in oiflist from the replicator for s, g.
The list of primitives accessible at the node to control its interfaces are listed below.
rX
[ifid link]add-iif, & 
[link if]add-oif &
        Invoked during link creation to prep the node about its 
        incoming interface label and outgoing interface object. 
[]get-all-oifs &
        Returns all oifs for this node. 
[]get-all-iifs &
        Returns all iifs for this node. 
[ifid]iif2link &
        Returns the link object labelled with given interface
        label. 
[link]link2iif &
        Returns the incoming interface label for the given
        link. 
[oif]oif2link &
        Returns the link object corresponding to the given outgoing
        interface. 
[link]link2oif &
        Returns the outgoing interface for the link (ns         object that is incident to the node).
[src]rpf-nbr &
        Returns a handle to the neighbour node that is its next hop to the 
        specified src.
[s g]getReps &
        Returns a handle to the replicator that matches s, g.
        Either argument can be a wildcard (*). 
[s g]getReps-raw &
        As above, but returns a list of key, handle pairs. 
[s g]clearReps &
        Removes all replicators associated with s, g. 
Tom Henderson
2014-12-17