• Jon Paul Maloy's avatar
    tipc: don't record link RESET or ACTIVATE messages as traffic · ec37dcd3
    Jon Paul Maloy authored
    In the current code, all incoming LINK_PROTOCOL messages, irrespective
    of type, nudge the "last message received" checkpoint, informing the
    link state machine that a message was received from the peer since last
    supervision timeout event. This inhibits the link from starting probing
    the peer unnecessarily.
    
    However, not only STATE messages are recorded as legitimate incoming
    traffic this way, but even RESET and ACTIVATE messages, which in
    reality are there to inform the link that the peer endpoint has been
    reset. At the same time, some RESET messages may be dropped instead
    of causing a link reset. This happens when the link endpoint thinks
    it is fully up and working, and the session number of the RESET is
    lower than or equal to the current link session. In such cases the
    RESET is perceived as a delayed remnant from an earlier session, or
    the current one, and dropped.
    
    Now, if a TIPC module is removed and then immediately reinserted, e.g.
    when using a script, RESET messages may arrive at the peer link endpoint
    before this one has had time to discover the failure. The RESET may be
    dropped because of the session number, but only after it has been
    recorded as a legitimate traffic event. Hence, the receiving link will
    not start probing, and not discover that the peer endpoint is down, at
    the same time ignoring the periodic RESET messages coming from that
    endpoint. We have ended up in a stale state where a failed link cannot
    be re-established.
    
    In this commit, we remedy this by nudging the checkpoint only for
    received STATE messages, not for RESET or ACTIVATE messages.
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Reviewed-by: default avatarYing Xue <ying.xue@windriver.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ec37dcd3
link.c 73.7 KB