• Sabrina Dubroca's avatar
    ipv6: allow userspace to add IFA_F_OPTIMISTIC addresses · f1c02cfb
    Sabrina Dubroca authored
    According to RFC 4429 (section 3.1), adding new IPv6 addresses as
    optimistic addresses is acceptable, as long as the implementation
    follows some rules:
    
       * Optimistic DAD SHOULD only be used when the implementation is aware
            that the address is based on a most likely unique interface
            identifier (such as in [RFC2464]), generated randomly [RFC3041],
            or by a well-distributed hash function [RFC3972] or assigned by
            Dynamic Host Configuration Protocol for IPv6 (DHCPv6) [RFC3315].
            Optimistic DAD SHOULD NOT be used for manually entered
            addresses.
    
    Thus, it seems reasonable to allow userspace to set the optimistic flag
    when adding new addresses.
    
    We must not let userspace set NODAD + OPTIMISTIC, since if the kernel is
    not performing DAD we would never clear the optimistic flag. We must
    also ignore userspace's request to add OPTIMISTIC flag to addresses that
    have already completed DAD (addresses that don't have the TENTATIVE
    flag, or that have the DADFAILED flag).
    
    Then we also need to clear the OPTIMISTIC flag on permanent addresses
    when DAD fails. Otherwise, IFA_F_OPTIMISTIC addresses added by userspace
    can still be used after DAD has failed, because in
    ipv6_chk_addr_and_flags(), IFA_F_OPTIMISTIC overrides IFA_F_TENTATIVE.
    
    Setting IFA_F_OPTIMISTIC from userspace is conditional on
    CONFIG_IPV6_OPTIMISTIC_DAD and the optimistic_dad sysctl.
    Signed-off-by: default avatarSabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: default avatarStefano Brivio <sbrivio@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f1c02cfb
addrconf.c 162 KB