• Hannes Frederic Sowa's avatar
    net: neighbour: use source address of last enqueued packet for solicitation · 4ed377e3
    Hannes Frederic Sowa authored
    Currently we always use the first member of the arp_queue to determine
    the sender ip address of the arp packet (or in case of IPv6 - source
    address of the ndisc packet). This skb is fixed as long as the queue is
    not drained by a complete purge because of a timeout or by a successful
    response.
    
    If the first packet enqueued on the arp_queue is from a local application
    with a manually set source address and the to be discovered system
    does some kind of uRPF checks on the source address in the arp packet
    the resolving process hangs until a timeout and restarts. This hurts
    communication with the participating network node.
    
    This could be mitigated a bit if we use the latest enqueued skb's
    source address for the resolving process, which is not as static as
    the arp_queue's head. This change of the source address could result in
    better recovery of a failed solicitation.
    
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Julian Anastasov <ja@ssi.bg>
    Reviewed-by: default avatarJulian Anastasov <ja@ssi.bg>
    Signed-off-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4ed377e3
neighbour.c 73.7 KB