• Vlad Yasevich's avatar
    bridge: update mdb expiration timer upon reports. · f144febd
    Vlad Yasevich authored
    commit 9f00b2e7
    	bridge: only expire the mdb entry when query is received
    changed the mdb expiration timer to be armed only when QUERY is
    received.  Howerver, this causes issues in an environment where
    the multicast server socket comes and goes very fast while a client
    is trying to send traffic to it.
    
    The root cause is a race where a sequence of LEAVE followed by REPORT
    messages can race against QUERY messages generated in response to LEAVE.
    The QUERY ends up starting the expiration timer, and that timer can
    potentially expire after the new REPORT message has been received signaling
    the new join operation.  This leads to a significant drop in multicast
    traffic and possible complete stall.
    
    The solution is to have REPORT messages update the expiration timer
    on entries that already exist.
    
    CC: Cong Wang <xiyou.wangcong@gmail.com>
    CC: Herbert Xu <herbert@gondor.apana.org.au>
    CC: Stephen Hemminger <stephen@networkplumber.org>
    Signed-off-by: default avatarVlad Yasevich <vyasevic@redhat.com>
    Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f144febd
br_multicast.c 44.5 KB