Module Name:    src
Committed By:   martin
Date:           Mon Aug 26 13:42:36 UTC 2019

Modified Files:
        src/sys/net [netbsd-9]: route.h rtsock.c
        src/sys/netinet [netbsd-9]: if_arp.c
        src/sys/netinet6 [netbsd-9]: nd6.c nd6_nbr.c

Log Message:
Pull up following revision(s) (requested by roy in ticket #109):

        sys/net/route.h: revision 1.124
        sys/netinet6/nd6.c: revision 1.258
        sys/netinet6/nd6.c: revision 1.259
        sys/net/rtsock.c: revision 1.251
        sys/netinet/if_arp.c: revision 1.284
        sys/netinet6/nd6_nbr.c: revision 1.167

rtsock: rework rt_clonedmsg to take a message type and lladdr

We will use this in a future patch to notify userland of lladdr
changes.

XXX pullup -8 -9

 -

nd6: notify userland of neighbour lla updates once more

XXX pullup -8 -9


To generate a diff of this commit:
cvs rdiff -u -r1.123 -r1.123.2.1 src/sys/net/route.h
cvs rdiff -u -r1.250 -r1.250.2.1 src/sys/net/rtsock.c
cvs rdiff -u -r1.282 -r1.282.2.1 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.256.2.1 -r1.256.2.2 src/sys/netinet6/nd6.c
cvs rdiff -u -r1.166 -r1.166.2.1 src/sys/netinet6/nd6_nbr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/route.h
diff -u src/sys/net/route.h:1.123 src/sys/net/route.h:1.123.2.1
--- src/sys/net/route.h:1.123	Mon Apr 29 16:12:30 2019
+++ src/sys/net/route.h	Mon Aug 26 13:42:36 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: route.h,v 1.123 2019/04/29 16:12:30 roy Exp $	*/
+/*	$NetBSD: route.h,v 1.123.2.1 2019/08/26 13:42:36 martin Exp $	*/
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -521,8 +521,8 @@ void	rt_addrmsg_rt(int, struct ifaddr *,
 void	route_enqueue(struct mbuf *, int);
 
 struct llentry;
-void	rt_clonedmsg(const struct sockaddr *, const struct ifnet *,
-	    const struct rtentry *);
+void	rt_clonedmsg(int, const struct sockaddr *, const uint8_t *,
+            const struct ifnet *);
 
 void	rt_setmetrics(void *, struct rtentry *);
 

Index: src/sys/net/rtsock.c
diff -u src/sys/net/rtsock.c:1.250 src/sys/net/rtsock.c:1.250.2.1
--- src/sys/net/rtsock.c:1.250	Mon May 27 05:33:48 2019
+++ src/sys/net/rtsock.c	Mon Aug 26 13:42:36 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtsock.c,v 1.250 2019/05/27 05:33:48 ozaki-r Exp $	*/
+/*	$NetBSD: rtsock.c,v 1.250.2.1 2019/08/26 13:42:36 martin Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.250 2019/05/27 05:33:48 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.250.2.1 2019/08/26 13:42:36 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -145,14 +145,14 @@ if_addrflags(struct ifaddr *ifa)
  * Send a routing message as mimicing that a cloned route is added.
  */
 void
-rt_clonedmsg(const struct sockaddr *dst, const struct ifnet *ifp,
-    const struct rtentry *rt)
+rt_clonedmsg(int type, const struct sockaddr *dst, const uint8_t *lladdr,
+    const struct ifnet *ifp)
 {
 	struct rt_addrinfo info;
 	/* Mimic flags exactly */
 #define RTF_LLINFO	0x400
 #define RTF_CLONED	0x2000
-	int flags = RTF_UP | RTF_HOST | RTF_DONE | RTF_LLINFO | RTF_CLONED;
+	int flags = RTF_HOST | RTF_DONE | RTF_LLINFO | RTF_CLONED;
 	union {
 		struct sockaddr sa;
 		struct sockaddr_storage ss;
@@ -161,16 +161,15 @@ rt_clonedmsg(const struct sockaddr *dst,
 	uint8_t namelen = strlen(ifp->if_xname);
 	uint8_t addrlen = ifp->if_addrlen;
 
-	if (rt == NULL)
-		return; /* XXX */
-
+	if (type != RTM_DELETE)
+		flags |= RTF_UP;
 	memset(&info, 0, sizeof(info));
 	info.rti_info[RTAX_DST] = dst;
 	sockaddr_dl_init(&u.sdl, sizeof(u.ss), ifp->if_index, ifp->if_type,
-	    NULL, namelen, NULL, addrlen);
+	    NULL, namelen, lladdr, addrlen);
 	info.rti_info[RTAX_GATEWAY] = &u.sa;
 
-	rt_missmsg(RTM_ADD, &info, flags, 0);
+	rt_missmsg(type, &info, flags, 0);
 #undef RTF_LLINFO
 #undef RTF_CLONED
 }

Index: src/sys/netinet/if_arp.c
diff -u src/sys/netinet/if_arp.c:1.282 src/sys/netinet/if_arp.c:1.282.2.1
--- src/sys/netinet/if_arp.c:1.282	Mon Apr 29 16:12:30 2019
+++ src/sys/netinet/if_arp.c	Mon Aug 26 13:42:36 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_arp.c,v 1.282 2019/04/29 16:12:30 roy Exp $	*/
+/*	$NetBSD: if_arp.c,v 1.282.2.1 2019/08/26 13:42:36 martin Exp $	*/
 
 /*
  * Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.282 2019/04/29 16:12:30 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.282.2.1 2019/08/26 13:42:36 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ddb.h"
@@ -744,7 +744,8 @@ notfound:
 
 			arp_init_llentry(ifp, la);
 			sockaddr_in_init(&sin, &la->r_l3addr.addr4, 0);
-			rt_clonedmsg(sintosa(&sin), ifp, rt);
+			if (rt != NULL)
+				rt_clonedmsg(RTM_ADD, sintosa(&sin), NULL, ifp);
 		}
 	} else if (LLE_TRY_UPGRADE(la) == 0) {
 		create_lookup = "lookup";

Index: src/sys/netinet6/nd6.c
diff -u src/sys/netinet6/nd6.c:1.256.2.1 src/sys/netinet6/nd6.c:1.256.2.2
--- src/sys/netinet6/nd6.c:1.256.2.1	Mon Aug 19 16:08:19 2019
+++ src/sys/netinet6/nd6.c	Mon Aug 26 13:42:36 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6.c,v 1.256.2.1 2019/08/19 16:08:19 martin Exp $	*/
+/*	$NetBSD: nd6.c,v 1.256.2.2 2019/08/26 13:42:36 martin Exp $	*/
 /*	$KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.256.2.1 2019/08/19 16:08:19 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.256.2.2 2019/08/26 13:42:36 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1192,6 +1192,7 @@ nd6_free(struct llentry *ln, int gc)
 	struct nd_defrouter *dr;
 	struct ifnet *ifp;
 	struct in6_addr *in6;
+	struct sockaddr_in6 sin6;
 
 	KASSERT(ln != NULL);
 	LLE_WLOCK_ASSERT(ln);
@@ -1293,6 +1294,10 @@ nd6_free(struct llentry *ln, int gc)
 			LLE_WLOCK(ln);
 	}
 
+	sockaddr_in6_init(&sin6, in6, 0, 0, 0);
+	rt_clonedmsg(RTM_DELETE, sin6tosa(&sin6),
+	    (const uint8_t *)&ln->ll_addr, ifp);
+
 	/*
 	 * Save to unlock. We still hold an extra reference and will not
 	 * free(9) in llentry_free() if someone else holds one as well.
@@ -2225,11 +2230,13 @@ nd6_cache_lladdr(
 		break;
 	}
 
-#if 0
-	/* XXX should we send rtmsg as it used to be? */
-	if (do_update)
-		rt_newmsg(RTM_CHANGE, rt);  /* tell user process */
-#endif
+	if (do_update) {
+		struct sockaddr_in6 sin6;
+
+		sockaddr_in6_init(&sin6, from, 0, 0, 0);
+		rt_clonedmsg(is_newentry ? RTM_ADD : RTM_CHANGE,
+		    sin6tosa(&sin6), lladdr, ifp);
+	}
 
 	if (ln != NULL) {
 		router = ln->ln_router;
@@ -2357,7 +2364,8 @@ nd6_resolve(struct ifnet *ifp, const str
 		}
 
 		sockaddr_in6_init(&sin6, &ln->r_l3addr.addr6, 0, 0, 0);
-		rt_clonedmsg(sin6tosa(&sin6), ifp, rt);
+		if (rt != NULL)
+			rt_clonedmsg(RTM_ADD, sin6tosa(&sin6), NULL, ifp);
 
 		created = true;
 	}

Index: src/sys/netinet6/nd6_nbr.c
diff -u src/sys/netinet6/nd6_nbr.c:1.166 src/sys/netinet6/nd6_nbr.c:1.166.2.1
--- src/sys/netinet6/nd6_nbr.c:1.166	Mon Apr 29 16:12:30 2019
+++ src/sys/netinet6/nd6_nbr.c	Mon Aug 26 13:42:36 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6_nbr.c,v 1.166 2019/04/29 16:12:30 roy Exp $	*/
+/*	$NetBSD: nd6_nbr.c,v 1.166.2.1 2019/08/26 13:42:36 martin Exp $	*/
 /*	$KAME: nd6_nbr.c,v 1.61 2001/02/10 16:06:14 jinmei Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6_nbr.c,v 1.166 2019/04/29 16:12:30 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6_nbr.c,v 1.166.2.1 2019/08/26 13:42:36 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -883,11 +883,13 @@ nd6_na_input(struct mbuf *m, int off, in
 	 */
 	ln->ln_asked = 0;
 	nd6_llinfo_release_pkts(ln, ifp);
-	/* FIXME */
-#if 0
-	if (rt_announce) /* tell user process about any new lladdr */
-		rt_newmsg(RTM_CHANGE, rt);
-#endif
+
+	if (rt_announce) {
+		struct sockaddr_in6 sin6;
+
+		sockaddr_in6_init(&sin6, &taddr6, 0, 0, 0);
+		rt_clonedmsg(RTM_CHANGE, sin6tosa(&sin6), lladdr, ifp);
+	}
 
  freeit:
 	if (ln != NULL)

Reply via email to