diff options
Diffstat (limited to 'sys/netgraph/atm/ng_atm.c')
| -rw-r--r-- | sys/netgraph/atm/ng_atm.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/sys/netgraph/atm/ng_atm.c b/sys/netgraph/atm/ng_atm.c index 1378eec7d55c..2beed3292827 100644 --- a/sys/netgraph/atm/ng_atm.c +++ b/sys/netgraph/atm/ng_atm.c @@ -1379,6 +1379,7 @@ ng_atm_constructor(node_p nodep) static int ng_atm_mod_event(module_t mod, int event, void *data) { + VNET_ITERATOR_DECL(vnet_iter); struct ifnet *ifp; int error = 0; @@ -1402,10 +1403,17 @@ ng_atm_mod_event(module_t mod, int event, void *data) ng_atm_event_p = ng_atm_event; /* Create nodes for existing ATM interfaces */ - TAILQ_FOREACH(ifp, &V_ifnet, if_link) { - if (ifp->if_type == IFT_ATM) - ng_atm_attach(ifp); + VNET_LIST_RLOCK(); + VNET_FOREACH(vnet_iter) { + CURVNET_SET_QUIET(vnet_iter); + INIT_VNET_NET(vnet_iter); + TAILQ_FOREACH(ifp, &V_ifnet, if_link) { + if (ifp->if_type == IFT_ATM) + ng_atm_attach(ifp); + } + CURVNET_RESTORE(); } + VNET_LIST_RUNLOCK(); IFNET_RUNLOCK(); break; @@ -1419,10 +1427,17 @@ ng_atm_mod_event(module_t mod, int event, void *data) ng_atm_input_orphan_p = NULL; ng_atm_event_p = NULL; - TAILQ_FOREACH(ifp, &V_ifnet, if_link) { - if (ifp->if_type == IFT_ATM) - ng_atm_detach(ifp); + VNET_LIST_RLOCK(); + VNET_FOREACH(vnet_iter) { + CURVNET_SET_QUIET(vnet_iter); + INIT_VNET_NET(vnet_iter); + TAILQ_FOREACH(ifp, &V_ifnet, if_link) { + if (ifp->if_type == IFT_ATM) + ng_atm_detach(ifp); + } + CURVNET_RESTORE(); } + VNET_LIST_RUNLOCK(); IFNET_RUNLOCK(); break; |
