svn commit: r256811 - user/ae/inet6/sys/netinet6
Andrey V. Elsukov
ae at FreeBSD.org
Sun Oct 20 21:23:53 UTC 2013
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)
More information about the svn-src-user
mailing list