addrconf.c (30596ec32e2cd141d73ee8701386887def9e98c0) | addrconf.c (a2d481b326c98b6b67eea8a378c858d57ca5ff3d) |
---|---|
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 * --- 2515 unchanged lines hidden (view full) --- 2524 pinfo->prefix_len, 2525 addr_type&IPV6_ADDR_SCOPE_MASK, 2526 addr_flags, valid_lft, 2527 prefered_lft, false, NULL); 2528 2529 if (IS_ERR_OR_NULL(ifp)) 2530 return -1; 2531 | 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 * --- 2515 unchanged lines hidden (view full) --- 2524 pinfo->prefix_len, 2525 addr_type&IPV6_ADDR_SCOPE_MASK, 2526 addr_flags, valid_lft, 2527 prefered_lft, false, NULL); 2528 2529 if (IS_ERR_OR_NULL(ifp)) 2530 return -1; 2531 |
2532 update_lft = 0; | |
2533 create = 1; 2534 spin_lock_bh(&ifp->lock); 2535 ifp->flags |= IFA_F_MANAGETEMPADDR; 2536 ifp->cstamp = jiffies; 2537 ifp->tokenized = tokenized; 2538 spin_unlock_bh(&ifp->lock); 2539 addrconf_dad_start(ifp); 2540 } --- 5 unchanged lines hidden (view full) --- 2546 2547 /* update lifetime (RFC2462 5.5.3 e) */ 2548 spin_lock_bh(&ifp->lock); 2549 now = jiffies; 2550 if (ifp->valid_lft > (now - ifp->tstamp) / HZ) 2551 stored_lft = ifp->valid_lft - (now - ifp->tstamp) / HZ; 2552 else 2553 stored_lft = 0; | 2532 create = 1; 2533 spin_lock_bh(&ifp->lock); 2534 ifp->flags |= IFA_F_MANAGETEMPADDR; 2535 ifp->cstamp = jiffies; 2536 ifp->tokenized = tokenized; 2537 spin_unlock_bh(&ifp->lock); 2538 addrconf_dad_start(ifp); 2539 } --- 5 unchanged lines hidden (view full) --- 2545 2546 /* update lifetime (RFC2462 5.5.3 e) */ 2547 spin_lock_bh(&ifp->lock); 2548 now = jiffies; 2549 if (ifp->valid_lft > (now - ifp->tstamp) / HZ) 2550 stored_lft = ifp->valid_lft - (now - ifp->tstamp) / HZ; 2551 else 2552 stored_lft = 0; |
2554 if (!update_lft && !create && stored_lft) { | 2553 if (!create && stored_lft) { |
2555 const u32 minimum_lft = min_t(u32, 2556 stored_lft, MIN_VALID_LIFETIME); 2557 valid_lft = max(valid_lft, minimum_lft); 2558 2559 /* RFC4862 Section 5.5.3e: 2560 * "Note that the preferred lifetime of the 2561 * corresponding address is always reset to 2562 * the Preferred Lifetime in the received --- 334 unchanged lines hidden (view full) --- 2897 valid_lft, prefered_lft, true, extack); 2898 2899 if (!IS_ERR(ifp)) { 2900 if (!(ifa_flags & IFA_F_NOPREFIXROUTE)) { 2901 addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev, 2902 expires, flags); 2903 } 2904 | 2554 const u32 minimum_lft = min_t(u32, 2555 stored_lft, MIN_VALID_LIFETIME); 2556 valid_lft = max(valid_lft, minimum_lft); 2557 2558 /* RFC4862 Section 5.5.3e: 2559 * "Note that the preferred lifetime of the 2560 * corresponding address is always reset to 2561 * the Preferred Lifetime in the received --- 334 unchanged lines hidden (view full) --- 2896 valid_lft, prefered_lft, true, extack); 2897 2898 if (!IS_ERR(ifp)) { 2899 if (!(ifa_flags & IFA_F_NOPREFIXROUTE)) { 2900 addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev, 2901 expires, flags); 2902 } 2903 |
2904 /* Send a netlink notification if DAD is enabled and 2905 * optimistic flag is not set 2906 */ 2907 if (!(ifp->flags & (IFA_F_OPTIMISTIC | IFA_F_NODAD))) 2908 ipv6_ifa_notify(0, ifp); |
|
2905 /* 2906 * Note that section 3.1 of RFC 4429 indicates 2907 * that the Optimistic flag should not be set for 2908 * manually configured addresses 2909 */ 2910 addrconf_dad_start(ifp); 2911 if (ifa_flags & IFA_F_MANAGETEMPADDR) 2912 manage_tempaddrs(idev, ifp, valid_lft, prefered_lft, --- 2111 unchanged lines hidden (view full) --- 5024} 5025 5026static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa) 5027{ 5028 struct sk_buff *skb; 5029 struct net *net = dev_net(ifa->idev->dev); 5030 int err = -ENOBUFS; 5031 | 2909 /* 2910 * Note that section 3.1 of RFC 4429 indicates 2911 * that the Optimistic flag should not be set for 2912 * manually configured addresses 2913 */ 2914 addrconf_dad_start(ifp); 2915 if (ifa_flags & IFA_F_MANAGETEMPADDR) 2916 manage_tempaddrs(idev, ifp, valid_lft, prefered_lft, --- 2111 unchanged lines hidden (view full) --- 5028} 5029 5030static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa) 5031{ 5032 struct sk_buff *skb; 5033 struct net *net = dev_net(ifa->idev->dev); 5034 int err = -ENOBUFS; 5035 |
5032 /* Don't send DELADDR notification for TENTATIVE address, 5033 * since NEWADDR notification is sent only after removing 5034 * TENTATIVE flag, if DAD has not failed. 5035 */ 5036 if (ifa->flags & IFA_F_TENTATIVE && !(ifa->flags & IFA_F_DADFAILED) && 5037 event == RTM_DELADDR) 5038 return; 5039 | |
5040 skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_ATOMIC); 5041 if (!skb) 5042 goto errout; 5043 5044 err = inet6_fill_ifaddr(skb, ifa, 0, 0, event, 0); 5045 if (err < 0) { 5046 /* -EMSGSIZE implies BUG in inet6_ifaddr_msgsize() */ 5047 WARN_ON(err == -EMSGSIZE); --- 1703 unchanged lines hidden --- | 5036 skb = nlmsg_new(inet6_ifaddr_msgsize(), GFP_ATOMIC); 5037 if (!skb) 5038 goto errout; 5039 5040 err = inet6_fill_ifaddr(skb, ifa, 0, 0, event, 0); 5041 if (err < 0) { 5042 /* -EMSGSIZE implies BUG in inet6_ifaddr_msgsize() */ 5043 WARN_ON(err == -EMSGSIZE); --- 1703 unchanged lines hidden --- |