Patch "net: ipv6: send unsolicited NA after DAD" has been added to the 4.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net: ipv6: send unsolicited NA after DAD
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-ipv6-send-unsolicited-na-after-dad.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Wed Feb 7 11:29:20 PST 2018
From: David Ahern <[email protected]>
Date: Thu, 25 Jan 2018 20:16:29 -0800
Subject: net: ipv6: send unsolicited NA after DAD
From: David Ahern <[email protected]>
[ Upstream commit c76fe2d98c726224a975a0d0198c3fb50406d325 ]
Unsolicited IPv6 neighbor advertisements should be sent after DAD completes. Update ndisc_send_unsol_na to skip tentative, non-optimistic addresses and have those sent by addrconf_dad_completed after DAD.
--- net/ipv6/addrconf.c | 30 ++++++++++++++++++++++++++---- net/ipv6/ndisc.c | 5 +++++ 2 files changed, 31 insertions(+), 4 deletions(-)
net/ipv6/addrconf.c +26 -4
@@ -184,7 +184,8 @@ static struct rt6_info *addrconf_get_prestatic void addrconf_dad_start (struct inet6_ifaddr *ifp);static void addrconf_dad_work (struct work_struct *w); -static void addrconf_dad_completed (struct inet6_ifaddr *ifp,bool bump_id); +static void addrconf_dad_completed (struct inet6_ifaddr *ifp,bool bump_id, +bool send_na);static void addrconf_dad_run (struct inet6_dev *idev);static void addrconf_rs_timer (unsigned long data);static void __ipv6_ifa_notify (int event,struct inet6_ifaddr *ifa);
@@ -3825,12 +3826,17 @@ static void addrconf_dad_begin(struct in idev->cnf.accept_dad < 1) || !(ifp->flags&IFA_F_TENTATIVE) || ifp->flags & IFA_F_NODAD) { +bool send_na = false; + +if (ifp->flags &IFA_F_TENTATIVE && + !(ifp->flags &IFA_F_OPTIMISTIC )) + send_na = true; bump_id = ifp->flags &IFA_F_TENTATIVE ; ifp->flags &= ~(IFA_F_TENTATIVE |IFA_F_OPTIMISTIC |IFA_F_DADFAILED );spin_unlock (&ifp->lock);read_unlock_bh (&idev->lock); -addrconf_dad_completed (ifp, bump_id); +addrconf_dad_completed (ifp, bump_id, send_na);return ; }
@@ -3959,16 +3965,21 @@ static void addrconf_dad_work(struct wor }if (ifp->dad_probes ==0 ) { +bool send_na = false; +/* * DAD was successful */ +if (ifp->flags &IFA_F_TENTATIVE && + !(ifp->flags &IFA_F_OPTIMISTIC )) + send_na = true; bump_id = ifp->flags &IFA_F_TENTATIVE ; ifp->flags &= ~(IFA_F_TENTATIVE |IFA_F_OPTIMISTIC |IFA_F_DADFAILED );spin_unlock (&ifp->lock);write_unlock_bh (&idev->lock); -addrconf_dad_completed (ifp, bump_id); +addrconf_dad_completed (ifp, bump_id, send_na); goto out; }
@@ -4006,7 +4017,8 @@ static bool ipv6_lonely_lladdr(struct inreturn true; } -static void addrconf_dad_completed (struct inet6_ifaddr *ifp,bool bump_id) +static void addrconf_dad_completed (struct inet6_ifaddr *ifp,bool bump_id, +bool send_na) {struct net_device *dev = ifp->idev->dev;struct in6_addr lladdr;
@@ -4038,6 +4050,16 @@ static void addrconf_dad_completed(strucif (send_mld)ipv6_mc_dad_complete (ifp->idev); +/* send unsolicited NA if enabled */ +if (send_na && + (ifp->idev->cnf.ndisc_notify || +dev_net (dev)->ipv6.devconf_all->ndisc_notify)) { +ndisc_send_na (dev, &in6addr_linklocal_allnodes, &ifp->addr, +/*router=*/ !!ifp->idev->cnf.forwarding, +/*solicited=*/ false,/*override=*/ true, +/*inc_opt=*/ true); + } +if (send_rs) {/* * If a host as already performed a random delay
net/ipv6/ndisc.c +5 -0
@@ -558,6 +558,11 @@ static void ndisc_send_unsol_na(struct nread_lock_bh (&idev->lock);list_for_each_entry (ifa, &idev->addr_list, if_list) { +/* skip tentative addresses until dad completes */ +if (ifa->flags &IFA_F_TENTATIVE && + !(ifa->flags &IFA_F_OPTIMISTIC )) +continue ; + ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifa->addr, /*router=*/ !!idev->cnf.forwarding, /*solicited=*/ false, /*override=*/ true,
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/net-ipv6-send-unsolicited-na-after-dad.patch