summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/in6.c
diff options
context:
space:
mode:
authorqingli <qingli@FreeBSD.org>2009-09-05 20:35:18 +0000
committerqingli <qingli@FreeBSD.org>2009-09-05 20:35:18 +0000
commitbf55d011e10802798b8073a157412cab5a590399 (patch)
tree351f7cf79b98b23c9b4c4747ce2a9bc4a8e437fa /sys/netinet6/in6.c
parent854d705b6c5997a91e7f08ef9f3d078180076d1c (diff)
downloadFreeBSD-src-bf55d011e10802798b8073a157412cab5a590399.zip
FreeBSD-src-bf55d011e10802798b8073a157412cab5a590399.tar.gz
MFC r196871
The addresses that are assigned to the loopback interface should be part of the kernel routing table. Reviewed by: bz Approved by: re
Diffstat (limited to 'sys/netinet6/in6.c')
-rw-r--r--sys/netinet6/in6.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 9521e8e..c832305 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -1192,9 +1192,10 @@ in6_purgeaddr(struct ifaddr *ifa)
/*
* Remove the loopback route to the interface address.
- * The check for the current setting of "nd6_useloopback" is not needed.
+ * The check for the current setting of "nd6_useloopback"
+ * is not needed.
*/
- if (!(ia->ia_ifp->if_flags & IFF_LOOPBACK)) {
+ {
struct rt_addrinfo info;
struct sockaddr_dl null_sdl;
@@ -1767,7 +1768,9 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia,
/*
* add a loopback route to self
*/
- if (V_nd6_useloopback && !(ifp->if_flags & IFF_LOOPBACK)) {
+ if (!(ia->ia_flags & IFA_ROUTE)
+ && (V_nd6_useloopback
+ || (ifp->if_flags & IFF_LOOPBACK))) {
struct rt_addrinfo info;
struct rtentry *rt = NULL;
static struct sockaddr_dl null_sdl = {sizeof(null_sdl), AF_LINK};
@@ -1788,7 +1791,7 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia,
RT_REMREF(rt);
RT_UNLOCK(rt);
} else if (error != 0)
- log(LOG_INFO, "in6_ifinit: insertion failed\n");
+ log(LOG_INFO, "in6_ifinit: error = %d, insertion failed\n", error);
}
/* Add ownaddr as loopback rtentry, if necessary (ex. on p2p link). */
OpenPOWER on IntegriCloud