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 ---