{ MCast behaviour Version 0.02 - unreleased Last modified: 01-04-96 Written by G. Hiddink } on link l if l is not the 'fastest link' of then set l to be the 'fastest link' of /* so that links are symmetrically loaded */ Create a destination list for each existing link For each ServerID in 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 of a link send on this link if the serverID of this server was in : if this server has seen the tuple before: if is the 'previous seen ' +1: pass the datagram to the layer above n=2 while 'previous seen ' +n is in the sequencer storage: pass its datagram to the layer above increase n define the 'previous seen ' as the of the datagram that is last passed on else: store the datagram in the sequencer storage on link l if this server hasn't seen the tuple , before: set l to be the 'fastest link' of resend on all existing links except l pass to the layer above /* 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. */ if this server hasn't seen the tuple , before: set l to be the 'fastest link' of remember that , arrived on link l remember which links the message was resent on if l is not the only link this server has: resend '/' to all existing links ecept l else pass to the layer above and await send '\' to link l /* BroadcastID unchanged */ 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 of the was not the serverID of this server: send a message on the link the FW_sum was first received on else: store the message and the link it was received on if 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 arrived on then mark the server as 'unreachable' rebroadcast the message to all links except the one it arrived on else send a message with the hop level for the server that was supposed to be unreachable if 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 arrived on as primary link for set the hop_level to the one mentioned in the message. rebroadcast the message with the hop level increased by 1.