Index: sys/netinet6/in6_ifattach.c =================================================================== --- sys/netinet6/in6_ifattach.c +++ sys/netinet6/in6_ifattach.c @@ -828,6 +828,7 @@ in6_tmpaddrtimer(void *arg) { CURVNET_SET((struct vnet *) arg); + struct epoch_tracker et; struct nd_ifinfo *ndi; u_int8_t nullbuf[8]; struct ifnet *ifp; @@ -837,6 +838,7 @@ V_ip6_temp_regen_advance) * hz, in6_tmpaddrtimer, curvnet); bzero(nullbuf, sizeof(nullbuf)); + NET_EPOCH_ENTER(et); CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) { if (ifp->if_afdata[AF_INET6] == NULL) continue; @@ -845,12 +847,14 @@ /* * We've been generating a random ID on this interface. * Create a new one. + * + * XXX no synchronization for ndi->randomid */ (void)generate_tmp_ifid(ndi->randomseed0, ndi->randomseed1, ndi->randomid); } } - + NET_EPOCH_EXIT(et); CURVNET_RESTORE(); } @@ -887,7 +891,7 @@ { /* Timer for regeneranation of temporary addresses randomize ID. */ - callout_init(&V_in6_tmpaddrtimer_ch, 0); + callout_init(&V_in6_tmpaddrtimer_ch, 1); callout_reset(&V_in6_tmpaddrtimer_ch, (V_ip6_temp_preferred_lifetime - V_ip6_desync_factor - V_ip6_temp_regen_advance) * hz, Index: sys/netinet6/nd6.c =================================================================== --- sys/netinet6/nd6.c +++ sys/netinet6/nd6.c @@ -225,11 +225,11 @@ nd6_defrouter_init(); /* Start timers. */ - callout_init(&V_nd6_slowtimo_ch, 0); + callout_init(&V_nd6_slowtimo_ch, 1); callout_reset(&V_nd6_slowtimo_ch, ND6_SLOWTIMER_INTERVAL * hz, nd6_slowtimo, curvnet); - callout_init(&V_nd6_timer_ch, 0); + callout_init(&V_nd6_timer_ch, 1); callout_reset(&V_nd6_timer_ch, hz, nd6_timer, curvnet); nd6_dad_init();