Multicast protocol behavior

{
        MCast behaviour
        Version 0.02 - unreleased
        Last modified: 01-04-96
        Written by G. Hiddink
}

<Datagram> on link l
  if l is not the 'fastest link' of <Source> then
    set l to be the 'fastest link' of <Source>		/* so that links are symmetrically loaded */
  Create a destination list for each existing link
  For each ServerID in <Dest>
    if ServerID is not the serverID of this server
      lookup the 'fastest link' of the server with ServerID
      put the serverid in the destination list for this link
  For each non-empty destination list <LinkDest> of a link 
    send <Source> <Group> <Seq> <LinkDest> <Data> on this link
  if the serverID of this server was in <dest>:
    if this server has seen the tuple <Source> <Group> before:
      if <Seq> is the 'previous seen <Seq>' +1:
        pass the datagram to the layer above
        n=2
        while 'previous seen <Seq>' +n is in the sequencer storage:
          pass its datagram to the layer above
          increase n
        define the 'previous seen <Seq>' as the <Seq> of the datagram that is last passed on 
      else:
        store the datagram in the sequencer storage
       
<Broadcast> on link l
  if this server hasn't seen the tuple <Source>, <LocalID> before:
    set l to be the 'fastest link' of <Source>
    resend <Broadcast> on all existing links except l
    pass <Data> to the layer above


<Bounced>


/* During the process of the distributed algorithm, servers are not allowed to leave.
 * Recovery mechanisms still need to be defined in case of silent or fail stops.
 */
<FW_sum>		
  if this server hasn't seen the tuple <Source>, <LocalID> before:
    set l to be the 'fastest link' of <Source>
    remember that <Source>, <LocalID> arrived on link l
    remember which links the message was resent on
    if l is not the only link this server has:
      resend '/'<BroadcastID> <Data> to all existing links ecept l
    else
      pass <Data> to the layer above and await <SumData>
      send '\'<BroadcastID> <SumData> to link l 			/* BroadcastID unchanged */

<BW_sum>
  Mark the link on which the message was received
  if a message has been received on all links one was sent on:
    concatenate all replies into one message
    pass on this data to the layer above and wait for return data
    if the <Source> of the <BW_sum> was not the serverID of this server:
      send a <BW_sum> message on the link the FW_sum was first received on
  else:
    store the message and the link it was received on


<Unreachable>
  if <ServerID> is not known to this server then 
    rebroadcast the message to all links
    except the one it arrived on
  else if this server's primary route was the link the <Unreachable> arrived on then
    mark the server as 'unreachable'
    rebroadcast the message to all links except the one it arrived on 
  else
    send a <Reachable> message with the hop level for the server that was supposed to be
      unreachable

<Reachable>
  if <ServerID> was marked 'unreachable', 
  or it didn't exist yet, or
  if it was reachable and the hop level in the message is smaller than the one we registered then
    mark the server to be reachable
    use the link the <Reachable> arrived on as primary link for <ServerID>
    set the hop_level to the one mentioned in the message.
    rebroadcast the <Reachable> message with the hop level increased by 1.    

Back to Specification of WWCP


(c) 1996 by G. Hiddink

If you have any comments, please mail to grit@cal050031.student.utwente.nl