Date: Sun, 20 Oct 2013 21:23:53 +0000 (UTC) From: "Andrey V. Elsukov" <ae@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r256811 - user/ae/inet6/sys/netinet6 Message-ID: <201310202123.r9KLNrkW082861@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ae Date: Sun Oct 20 21:23:52 2013 New Revision: 256811 URL: http://svnweb.freebsd.org/changeset/base/256811 Log: * Initialize sin6_scope_id using specified ifnet. * Don't add loopback routes for link-local addresses. Modified: user/ae/inet6/sys/netinet6/in6.c Modified: user/ae/inet6/sys/netinet6/in6.c ============================================================================== --- user/ae/inet6/sys/netinet6/in6.c Sun Oct 20 21:21:50 2013 (r256810) +++ user/ae/inet6/sys/netinet6/in6.c Sun Oct 20 21:23:52 2013 (r256811) @@ -1684,7 +1684,11 @@ in6_ifinit(struct ifnet *ifp, struct in6 IF_ADDR_RUNLOCK(ifp); ia->ia_addr = *sin6; - + /* + * Initialize sin6_scope_id using specified ifnet. + */ + ia->ia_addr.sin6_scope_id = in6_getscopezone(ifp, + in6_addrscope(&sin6->sin6_addr)); if (ifacount <= 1 && ifp->if_ioctl) { error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia); if (error) @@ -1707,6 +1711,7 @@ in6_ifinit(struct ifnet *ifp, struct in6 if (!(ia->ia_flags & IFA_ROUTE) && plen == 128 && ia->ia_dstaddr.sin6_family == AF_INET6) { int rtflags = RTF_UP | RTF_HOST; + /* XXX: link-local destinations */ error = rtinit(&ia->ia_ifa, RTM_ADD, ia->ia_flags | rtflags); if (error) return (error); @@ -1721,7 +1726,8 @@ in6_ifinit(struct ifnet *ifp, struct in6 /* * add a loopback route to self */ - if (!(ia->ia_flags & IFA_RTSELF) && V_nd6_useloopback) { + if (!IN6_IS_ADDR_LINKLOCAL(&ia->ia_addr.sin6_addr) && + (ia->ia_flags & IFA_RTSELF) == 0 && V_nd6_useloopback) { error = ifa_add_loopback_route((struct ifaddr *)ia, (struct sockaddr *)&ia->ia_addr); if (error == 0)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310202123.r9KLNrkW082861>