• Jon Maloy's avatar
    tipc: guarantee delivery of last broadcast before DOWN event · a3bada70
    Jon Maloy authored
    The following scenario is possible:
    - A user sends a broadcast message, and thereafter immediately leaves
      the group.
    - The LEAVE message, following a different path than the broadcast,
      arrives ahead of the broadcast, and the sending member is removed
      from the receiver's list.
    - The broadcast message arrives, but is dropped because the sender
      now is unknown to the receipient.
    
    We fix this by sequence numbering membership events, just like ordinary
    unicast messages. Currently, when a JOIN is sent to a peer, it contains
    a synchronization point, - the sequence number of the next sent
    broadcast, in order to give the receiver a start synchronization point.
    We now let even LEAVE messages contain such an "end synchronization"
    point, so that the recipient can delay the removal of the sending member
    until it knows that all messages have been received.
    
    The received synchronization points are added as sequence numbers to the
    generated membership events, making it possible to handle them almost
    the same way as regular unicasts in the receiving filter function. In
    particular, a DOWN event with a too high sequence number will be kept
    in the reordering queue until the missing broadcast(s) arrive and have
    been delivered.
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Acked-by: default avatarYing Xue <ying.xue@windriver.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a3bada70
group.c 18 KB