void wanpipe_generic_unregister(struct ifnet *ifp) { log(LOG_INFO, "%s: Unregister interface!\n", ifp->if_xname); sppp_detach(ifp); if_free_sadl(ifp); if_detach(ifp); }
static int loop_clone_create(struct if_clone *ifc, int unit) { struct ifnet *ifp; #ifdef T2EX int error; #endif ifp = if_alloc(IFT_LOOP); #ifdef T2EX if ( ifp == NULL ) { error = ENOMEM; goto err_ret0; } #endif if_initname(ifp, ifc->ifc_name, unit); ifp->if_mtu = LOMTU; ifp->if_flags = IFF_LOOPBACK | IFF_MULTICAST | IFF_RUNNING; ifp->if_ioctl = loioctl; ifp->if_output = looutput; #ifdef ALTQ ifp->if_start = lostart; #endif ifp->if_type = IFT_LOOP; ifp->if_hdrlen = 0; ifp->if_addrlen = 0; ifp->if_dlt = DLT_NULL; IFQ_SET_READY(&ifp->if_snd); if (unit == 0) lo0ifp = ifp; #ifndef T2EX if_attach(ifp); if_alloc_sadl(ifp); #else error = if_attach(ifp); if ( error != 0 ) { goto err_ret1; } error = if_alloc_sadl(ifp); if ( error != 0 ) { goto err_ret2; } #endif #if NBPFILTER > 0 #ifndef T2EX bpfattach(ifp, DLT_NULL, sizeof(u_int)); #else error = bpfattach(ifp, DLT_NULL, sizeof(u_int)); if ( error != 0 ) { goto err_ret3; } #endif #endif #ifdef MBUFTRACE ifp->if_mowner = malloc(sizeof(struct mowner), M_DEVBUF, M_WAITOK | M_ZERO); #ifdef T2EX if ( ifp->if_mowner == NULL ) { error = ENOMEM; goto err_ret4; } #endif strlcpy(ifp->if_mowner->mo_name, ifp->if_xname, sizeof(ifp->if_mowner->mo_name)); #ifndef T2EX MOWNER_ATTACH(ifp->if_mowner); #else error = MOWNER_ATTACH(ifp->if_mowner); if ( error != 0 ) { goto err_ret5; } #endif #endif return (0); #ifdef T2EX #ifdef MBUFTRACE err_ret5: free(ifp->if_mowner, M_DEVBUF); err_ret4: bpfdetach(ifp); #endif #if NBPFILTER > 0 err_ret3: if_free_sadl(ifp); #endif err_ret2: if_detach(ifp); err_ret1: if_free(ifp); err_ret0: return error; #endif }