• Parthasarathy Bhuvaragan's avatar
    tipc: fix random link resets while adding a second bearer · d2f394dc
    Parthasarathy Bhuvaragan authored
    In a dual bearer configuration, if the second tipc link becomes
    active while the first link still has pending nametable "bulk"
    updates, it randomly leads to reset of the second link.
    
    When a link is established, the function named_distribute(),
    fills the skb based on node mtu (allows room for TUNNEL_PROTOCOL)
    with NAME_DISTRIBUTOR message for each PUBLICATION.
    However, the function named_distribute() allocates the buffer by
    increasing the node mtu by INT_H_SIZE (to insert NAME_DISTRIBUTOR).
    This consumes the space allocated for TUNNEL_PROTOCOL.
    
    When establishing the second link, the link shall tunnel all the
    messages in the first link queue including the "bulk" update.
    As size of the NAME_DISTRIBUTOR messages while tunnelling, exceeds
    the link mtu the transmission fails (-EMSGSIZE).
    
    Thus, the synch point based on the message count of the tunnel
    packets is never reached leading to link timeout.
    
    In this commit, we adjust the size of name distributor message so that
    they can be tunnelled.
    Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarParthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d2f394dc
Name
Last commit
Last update
..
Kconfig Loading commit data...
Makefile Loading commit data...
addr.c Loading commit data...
addr.h Loading commit data...
bcast.c Loading commit data...
bcast.h Loading commit data...
bearer.c Loading commit data...
bearer.h Loading commit data...
core.c Loading commit data...
core.h Loading commit data...
discover.c Loading commit data...
discover.h Loading commit data...
eth_media.c Loading commit data...
ib_media.c Loading commit data...
link.c Loading commit data...
link.h Loading commit data...
monitor.c Loading commit data...
monitor.h Loading commit data...
msg.c Loading commit data...
msg.h Loading commit data...
name_distr.c Loading commit data...
name_distr.h Loading commit data...
name_table.c Loading commit data...
name_table.h Loading commit data...
net.c Loading commit data...
net.h Loading commit data...
netlink.c Loading commit data...
netlink.h Loading commit data...
netlink_compat.c Loading commit data...
node.c Loading commit data...
node.h Loading commit data...
server.c Loading commit data...
server.h Loading commit data...
socket.c Loading commit data...
socket.h Loading commit data...
subscr.c Loading commit data...
subscr.h Loading commit data...
sysctl.c Loading commit data...
udp_media.c Loading commit data...