Changeset View
Changeset View
Standalone View
Standalone View
sys/net/if.c
| Show First 20 Lines • Show All 1,109 Lines • ▼ Show 20 Lines | #endif | ||||
| */ | */ | ||||
| #ifdef ALTQ | #ifdef ALTQ | ||||
| if (ALTQ_IS_ENABLED(&ifp->if_snd)) | if (ALTQ_IS_ENABLED(&ifp->if_snd)) | ||||
| altq_disable(&ifp->if_snd); | altq_disable(&ifp->if_snd); | ||||
| if (ALTQ_IS_ATTACHED(&ifp->if_snd)) | if (ALTQ_IS_ATTACHED(&ifp->if_snd)) | ||||
| altq_detach(&ifp->if_snd); | altq_detach(&ifp->if_snd); | ||||
| #endif | #endif | ||||
| rt_flushifroutes(ifp); | |||||
| if_purgeaddrs(ifp); | if_purgeaddrs(ifp); | ||||
| EVENTHANDLER_INVOKE(ifnet_departure_event, ifp); | EVENTHANDLER_INVOKE(ifnet_departure_event, ifp); | ||||
| if_purgemaddrs(ifp); | if_purgemaddrs(ifp); | ||||
| if (IS_DEFAULT_VNET(curvnet)) | if (IS_DEFAULT_VNET(curvnet)) | ||||
| devctl_notify("IFNET", ifp->if_xname, "DETACH", NULL); | devctl_notify("IFNET", ifp->if_xname, "DETACH", NULL); | ||||
| if (!vmove) { | if (!vmove) { | ||||
| /* | /* | ||||
| * Prevent further calls into the device driver via ifnet. | * Prevent further calls into the device driver via ifnet. | ||||
| */ | */ | ||||
| if_dead(ifp); | if_dead(ifp); | ||||
| /* | /* | ||||
| * Clean up all addresses. | * Clean up all addresses. | ||||
| */ | */ | ||||
| IF_ADDR_WLOCK(ifp); | IF_ADDR_WLOCK(ifp); | ||||
| if (!CK_STAILQ_EMPTY(&ifp->if_addrhead)) { | if (!CK_STAILQ_EMPTY(&ifp->if_addrhead)) { | ||||
| ifa = CK_STAILQ_FIRST(&ifp->if_addrhead); | ifa = CK_STAILQ_FIRST(&ifp->if_addrhead); | ||||
| CK_STAILQ_REMOVE(&ifp->if_addrhead, ifa, ifaddr, ifa_link); | CK_STAILQ_REMOVE(&ifp->if_addrhead, ifa, ifaddr, ifa_link); | ||||
| IF_ADDR_WUNLOCK(ifp); | IF_ADDR_WUNLOCK(ifp); | ||||
| ifa_free(ifa); | ifa_free(ifa); | ||||
| } else | } else | ||||
| IF_ADDR_WUNLOCK(ifp); | IF_ADDR_WUNLOCK(ifp); | ||||
| } | } | ||||
| rt_flushifroutes(ifp); | |||||
| } | } | ||||
| #ifdef VIMAGE | #ifdef VIMAGE | ||||
| /* | /* | ||||
| * if_vmove() performs a limited version of if_detach() in current | * if_vmove() performs a limited version of if_detach() in current | ||||
| * vnet and if_attach()es the ifnet to the vnet specified as 2nd arg. | * vnet and if_attach()es the ifnet to the vnet specified as 2nd arg. | ||||
| */ | */ | ||||
| static void | static void | ||||
| ▲ Show 20 Lines • Show All 3,986 Lines • Show Last 20 Lines | |||||