From d6976e0558a7468c02ba5c8aedea468adf2a0eca Mon Sep 17 00:00:00 2001 From: Marko Zec Date: Fri, 28 Aug 2009 19:18:20 +0000 Subject: [PATCH] MFC r196504: When moving ifnets from one vnet to another, and the ifnet has ifaddresses of AF_LINK type which thus have an embedded if_index "backpointer", we must update that if_index backpointer to reflect the new if_index that our ifnet just got assigned. This change affects only options VIMAGE builds. Submitted by: bz Reviewed by: bz Approved by: re (rwatson), julian (mentor) Approved by: re (rwatson) --- sys/net/if.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sys/net/if.c b/sys/net/if.c index 5d108981cdde..e42dddfadadd 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -570,6 +570,21 @@ if_attach_internal(struct ifnet *ifp, int vmove) /* Reliably crash if used uninitialized. */ ifp->if_broadcastaddr = NULL; } +#ifdef VIMAGE + else { + /* + * Update the interface index in the link layer address + * of the interface. + */ + for (ifa = ifp->if_addr; ifa != NULL; + ifa = TAILQ_NEXT(ifa, ifa_link)) { + if (ifa->ifa_addr->sa_family == AF_LINK) { + sdl = (struct sockaddr_dl *)ifa->ifa_addr; + sdl->sdl_index = ifp->if_index; + } + } + } +#endif IFNET_WLOCK(); TAILQ_INSERT_TAIL(&V_ifnet, ifp, if_link);