o detach any nodes. */ - EVENTHANDLER_DEREGISTER(ifnet_arrival_event, - ng_ether_ifnet_arrival_cookie); + EVENTHANDLER_DEREGISTER(ifnet_arrival_event, ifnet_arrival_tag); + EVENTHANDLER_DEREGISTER(ifnet_departure_event, + ifnet_departure_tag); + EVENTHANDLER_DEREGISTER(ifnet_rename_event, ifnet_rename_tag); + EVENTHANDLER_DEREGISTER(ifnet_link_event, ifnet_linkstate_tag); /* Unregister function hooks */ - ng_ether_attach_p = NULL; - ng_ether_detach_p = NULL; ng_ether_output_p = NULL; ng_ether_input_p = NULL; ng_ether_input_orphan_p = NULL; - ng_ether_link_state_p = NULL; break; default: @@ -858,23 +859,9 @@ ng_ether_mod_event(module_t mod, int event, void *data) } static void -vnet_ng_ether_init(const void *unused) +ng_ether_vnet_init(void *arg __unused) { - struct ifnet *ifp; - - /* If module load was rejected, don't attach to vnets. */ - if (ng_ether_attach_p != ng_ether_attach) - return; - - /* Create nodes for any already-existing Ethernet interfaces. */ - IFNET_RLOCK(); - CK_STAILQ_FOREACH(ifp, &V_ifnet, if_link) { - if (ifp->if_type == IFT_ETHER || - ifp->if_type == IFT_L2VLAN || - ifp->if_type == IFT_BRIDGE) - ng_ether_attach(ifp); - } - IFNET_RUNLOCK(); + if_foreach_sleep(NULL, NULL, ng_ether_attach, NULL); } -VNET_SYSINIT(vnet_ng_ether_init, SI_SUB_PSEUDO, SI_ORDER_ANY, - vnet_ng_ether_init, NULL); +VNET_SYSINIT(ng_ether_vnet_init, SI_SUB_PROTO_IF, SI_ORDER_ANY, + ng_ether_vnet_init, NULL);