void vboxNetAdpOsDestroy(PVBOXNETADP pThis) { u_int32_t i; /* Bring down the interface */ int rc = VINF_SUCCESS; errno_t err; AssertPtr(pThis->u.s.pIface); Assert(pThis->u.s.hEvtDetached != NIL_RTSEMEVENT); err = ifnet_set_flags(pThis->u.s.pIface, 0, IFF_UP | IFF_RUNNING); if (err) Log(("vboxNetAdpDarwinUnregisterDevice: Failed to bring down interface " "(err=%d).\n", err)); /* Detach all protocols. */ for (i = 0; i < VBOXNETADP_MAX_FAMILIES; i++) if (pThis->u.s.aAttachedFamilies[i]) ifnet_detach_protocol(pThis->u.s.pIface, pThis->u.s.aAttachedFamilies[i]); err = ifnet_detach(pThis->u.s.pIface); if (err) Log(("vboxNetAdpDarwinUnregisterDevice: Failed to detach interface " "(err=%d).\n", err)); Log2(("vboxNetAdpDarwinUnregisterDevice: Waiting for 'detached' event...\n")); /* Wait until we get a signal from detach callback. */ rc = RTSemEventWait(pThis->u.s.hEvtDetached, VBOXNETADP_DETACH_TIMEOUT); if (rc == VERR_TIMEOUT) LogRel(("VBoxAdpDrv: Failed to detach interface %s%d\n.", VBOXNETADP_NAME, pThis->iUnit)); err = ifnet_release(pThis->u.s.pIface); if (err) Log(("vboxNetAdpUnregisterDevice: Failed to release interface (err=%d).\n", err)); RTSemEventDestroy(pThis->u.s.hEvtDetached); pThis->u.s.hEvtDetached = NIL_RTSEMEVENT; }
/* ----------------------------------------------------------------------------- detach the PPPx interface ifp from the network protocol IPv6, called when the ppp interface stops ip traffic ----------------------------------------------------------------------------- */ void ppp_ipv6_detach(ifnet_t ifp, protocol_family_t protocol) { int ret; struct ppp_if *wan = (struct ppp_if *)ifnet_softc(ifp); LOGDBG(ifp, ("ppp_ipv6_detach\n")); if (!wan->ipv6_attached) return; // already detached ret = ifnet_detach_protocol(ifp, PF_INET6); if (ret) IOLog("ppp_ipv6_detach: ifnet_detach_protocol error = 0x%x\n", ret); wan->ipv6_attached = 0; }
void ether_detach_inet6(struct ifnet *ifp, protocol_family_t protocol_family) { (void) ifnet_detach_protocol(ifp, protocol_family); }
void tun_inet6_detach(ifnet_t ifp, protocol_family_t proto) { /* just detach the protocol */ ifnet_detach_protocol(ifp, proto); }