addrconf.c (f2344a131bccdbfc5338e17fa71a807dee7944fa) | addrconf.c (622ccdf107bcb49c4d8fb65512652566d4c8928a) |
---|---|
1/* 2 * IPv6 Address [auto]configuration 3 * Linux INET6 implementation 4 * 5 * Authors: 6 * Pedro Roque <roque@di.fc.ul.pt> 7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> 8 * --- 2839 unchanged lines hidden (view full) --- 2848 struct inet6_dev *idev = ifp->idev; 2849 struct net_device *dev = idev->dev; 2850 2851 addrconf_join_solict(dev, &ifp->addr); 2852 2853 net_srandom(ifp->addr.s6_addr32[3]); 2854 2855 read_lock_bh(&idev->lock); | 1/* 2 * IPv6 Address [auto]configuration 3 * Linux INET6 implementation 4 * 5 * Authors: 6 * Pedro Roque <roque@di.fc.ul.pt> 7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> 8 * --- 2839 unchanged lines hidden (view full) --- 2848 struct inet6_dev *idev = ifp->idev; 2849 struct net_device *dev = idev->dev; 2850 2851 addrconf_join_solict(dev, &ifp->addr); 2852 2853 net_srandom(ifp->addr.s6_addr32[3]); 2854 2855 read_lock_bh(&idev->lock); |
2856 spin_lock(&ifp->lock); |
|
2856 if (ifp->state == INET6_IFADDR_STATE_DEAD) 2857 goto out; 2858 | 2857 if (ifp->state == INET6_IFADDR_STATE_DEAD) 2858 goto out; 2859 |
2859 spin_lock(&ifp->lock); | |
2860 if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) || 2861 idev->cnf.accept_dad < 1 || 2862 !(ifp->flags&IFA_F_TENTATIVE) || 2863 ifp->flags & IFA_F_NODAD) { 2864 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); 2865 spin_unlock(&ifp->lock); 2866 read_unlock_bh(&idev->lock); 2867 --- 17 unchanged lines hidden (view full) --- 2885 /* 2886 * Optimistic nodes can start receiving 2887 * Frames right away 2888 */ 2889 if (ifp->flags & IFA_F_OPTIMISTIC) 2890 ip6_ins_rt(ifp->rt); 2891 2892 addrconf_dad_kick(ifp); | 2860 if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) || 2861 idev->cnf.accept_dad < 1 || 2862 !(ifp->flags&IFA_F_TENTATIVE) || 2863 ifp->flags & IFA_F_NODAD) { 2864 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); 2865 spin_unlock(&ifp->lock); 2866 read_unlock_bh(&idev->lock); 2867 --- 17 unchanged lines hidden (view full) --- 2885 /* 2886 * Optimistic nodes can start receiving 2887 * Frames right away 2888 */ 2889 if (ifp->flags & IFA_F_OPTIMISTIC) 2890 ip6_ins_rt(ifp->rt); 2891 2892 addrconf_dad_kick(ifp); |
2893 spin_unlock(&ifp->lock); | |
2894out: | 2893out: |
2894 spin_unlock(&ifp->lock); |
|
2895 read_unlock_bh(&idev->lock); 2896} 2897 2898static void addrconf_dad_timer(unsigned long data) 2899{ 2900 struct inet6_ifaddr *ifp = (struct inet6_ifaddr *) data; 2901 struct inet6_dev *idev = ifp->idev; 2902 struct in6_addr mcaddr; 2903 2904 if (!ifp->probes && addrconf_dad_end(ifp)) 2905 goto out; 2906 2907 read_lock(&idev->lock); 2908 if (idev->dead || !(idev->if_flags & IF_READY)) { 2909 read_unlock(&idev->lock); 2910 goto out; 2911 } 2912 2913 spin_lock(&ifp->lock); | 2895 read_unlock_bh(&idev->lock); 2896} 2897 2898static void addrconf_dad_timer(unsigned long data) 2899{ 2900 struct inet6_ifaddr *ifp = (struct inet6_ifaddr *) data; 2901 struct inet6_dev *idev = ifp->idev; 2902 struct in6_addr mcaddr; 2903 2904 if (!ifp->probes && addrconf_dad_end(ifp)) 2905 goto out; 2906 2907 read_lock(&idev->lock); 2908 if (idev->dead || !(idev->if_flags & IF_READY)) { 2909 read_unlock(&idev->lock); 2910 goto out; 2911 } 2912 2913 spin_lock(&ifp->lock); |
2914 if (ifp->state == INET6_IFADDR_STATE_DEAD) { 2915 spin_unlock(&ifp->lock); 2916 read_unlock(&idev->lock); 2917 goto out; 2918 } 2919 |
|
2914 if (ifp->probes == 0) { 2915 /* 2916 * DAD was successful 2917 */ 2918 2919 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); 2920 spin_unlock(&ifp->lock); 2921 read_unlock(&idev->lock); --- 1773 unchanged lines hidden --- | 2920 if (ifp->probes == 0) { 2921 /* 2922 * DAD was successful 2923 */ 2924 2925 ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); 2926 spin_unlock(&ifp->lock); 2927 read_unlock(&idev->lock); --- 1773 unchanged lines hidden --- |