Index: sys/net/if_vlan.c =================================================================== --- sys/net/if_vlan.c +++ sys/net/if_vlan.c @@ -1349,7 +1349,7 @@ struct epoch_tracker et; struct ifvlantrunk *trunk; struct ifnet *ifp; - int error = 0; + int error = 0, update_lladdr; /* * We can handle non-ethernet hardware types as long as @@ -1459,11 +1459,14 @@ * Set up our interface address to reflect the underlying * physical interface's. */ + update_lladdr = memcmp(IF_LLADDR(p), IF_LLADDR(ifp), p->if_addrlen); bcopy(IF_LLADDR(p), IF_LLADDR(ifp), p->if_addrlen); ((struct sockaddr_dl *)ifp->if_addr->ifa_addr)->sdl_alen = p->if_addrlen; TASK_INIT(&ifv->lladdr_task, 0, vlan_lladdr_fn, ifv); + if (update_lladdr != 0) + taskqueue_enqueue(taskqueue_thread, &ifv->lladdr_task); /* We are ready for operation now. */ ifp->if_drv_flags |= IFF_DRV_RUNNING;