diff options
Diffstat (limited to 'sys/netinet6/in6.c')
-rw-r--r-- | sys/netinet6/in6.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index e260e5d..08dd259 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -1874,9 +1874,18 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia, ia->ia_addr = *sin6; if (ifacount <= 1 && ifp->if_ioctl) { + int flags; + + /* + * Historically, drivers managed IFF_UP flag theirselves, so we + * need to check whether driver did that. + */ + flags = ifp->if_flags; error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia); if (error) return (error); + if ((ifp->if_flags & IFF_UP) && (flags & IFF_UP) == 0) + if_up(ifp); } ia->ia_ifa.ifa_metric = ifp->if_metric; |