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)