• Hangbin Liu's avatar
    net/ipv6: re-do dad when interface has IFF_NOARP flag change · 896585d4
    Hangbin Liu authored
    When we add a new IPv6 address, we should also join corresponding solicited-node
    multicast address, unless the interface has IFF_NOARP flag, as function
    addrconf_join_solict() did. But if we remove IFF_NOARP flag later, we do
    not do dad and add the mcast address. So we will drop corresponding neighbour
    discovery message that came from other nodes.
    
    A typical example is after creating a ipvlan with mode l3, setting up an ipv6
    address and changing the mode to l2. Then we will not be able to ping this
    address as the interface doesn't join related solicited-node mcast address.
    
    Fix it by re-doing dad when interface changed IFF_NOARP flag. Then we will add
    corresponding mcast group and check if there is a duplicate address on the
    network.
    Reported-by: default avatarJianlin Shi <jishi@redhat.com>
    Reviewed-by: default avatarStefano Brivio <sbrivio@redhat.com>
    Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    896585d4
addrconf.c 169 KB