• Jon Paul Maloy's avatar
    tipc: change reception of tunnelled duplicate packets · 1dab3d5a
    Jon Paul Maloy authored
    When a second link to a destination comes up, some sender sockets will
    steer their subsequent traffic through the new link. In order to
    guarantee preserved packet order and cardinality for those sockets, we
    tunnel a duplicate of the old link's send queue through the new link
    before we open it for regular traffic. The last arriving packet copy,
    on whichever link, will be dropped at the receiving end based on the
    original sequence number, to ensure that only one copy is delivered to
    the end receiver.
    
    In this commit, we change the algorithm for receiving DUPLICATE_MSG
    packets, at the same time delegating it to a new subfunction,
    tipc_link_dup_rcv(). Instead of returning an extracted inner packet to
    the packet reception loop in tipc_rcv(), we just add it to the receiving
    (new) link's deferred packet queue. The packet will then be processed by
    that link when it receives its first non-tunneled packet, i.e., at
    latest when the changeover procedure is finished.
    
    Because tipc_link_tunnel_rcv()/tipc_link_dup_rcv() now is consuming all
    packets of type DUPLICATE_MSG, the calling tipc_rcv() function can omit
    testing for this. This in turn means that the current conditional jump
    to the label 'protocol_check' becomes redundant, and we can remove that
    label.
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1dab3d5a
link.c 73.2 KB