Hi Martin,
 
On Thu, Jun 08, 2017 at 09:44:37AM +0200, Martin Pieuchot wrote:
> On 08/06/17(Thu) 00:47, Jan Klemkow wrote:
> > This diff adds a missing routing message to the neighbor discovery code.
> > The message informs the userland about new reachable IPv6 nodes on the
> > network.  The IPv6 network stack acts more like the IPv4 port by this
> > diff.  Now, the behavior is like arpcache() in netinet/if_ether.c on
> > line 653.
> 
> The call should be under KERNEL_LOCK()/KERNEL_UNLOCK().  Writing to
> routing sockets isn't protected by the NET_LOCK().
> 
> Yes this doesn't matter right now, but since we're working on removing
> the KERNEL_LOCK() from the protocol layer, let's have this ready ;)

Here is a fixed version of this diff.

Thanks,
Jan

Index: nd6_nbr.c
===================================================================
RCS file: /cvs/src/sys/netinet6/nd6_nbr.c,v
retrieving revision 1.116
diff -u -p -r1.116 nd6_nbr.c
--- nd6_nbr.c   16 May 2017 12:24:04 -0000      1.116
+++ nd6_nbr.c   8 Jun 2017 08:44:28 -0000
@@ -715,6 +715,10 @@ nd6_na_input(struct mbuf *m, int off, in
                if (is_solicited) {
                        ln->ln_state = ND6_LLINFO_REACHABLE;
                        ln->ln_byhint = 0;
+                       /* Notify userland that a new ND entry is reachable. */
+                       KERNEL_LOCK();
+                       rtm_send(rt, RTM_RESOLVE, ifp->if_rdomain);
+                       KERNEL_UNLOCK();
                        if (!ND6_LLINFO_PERMANENT(ln)) {
                                nd6_llinfo_settimer(ln,
                                    ND_IFINFO(ifp)->reachable);

Reply via email to