X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..43866e378188c25dd1e2208016ab3cbeb086ae6c:/bsd/net/if_tun.c diff --git a/bsd/net/if_tun.c b/bsd/net/if_tun.c index 833251c07..9fad082c3 100644 --- a/bsd/net/if_tun.c +++ b/bsd/net/if_tun.c @@ -3,19 +3,22 @@ * * @APPLE_LICENSE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. + * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ @@ -77,11 +80,6 @@ #include #endif /* INET6 */ -#if NS -#include -#include -#endif - #include "bpfilter.h" #if NBPFILTER > 0 #include @@ -249,9 +247,8 @@ tunclose(dev, foo, bar, p) } ifp->if_flags &= ~IFF_RUNNING; funsetown(tp->tun_sigio); - thread_funnel_switch(NETWORK_FUNNEL, KERNEL_FUNNEL); selwakeup(&tp->tun_rsel); - thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL); + selthreadclear(&tp->tun_rsel); TUNDEBUG ("%s%d: closed\n", ifp->if_name, ifp->if_unit); return (0); @@ -305,6 +302,12 @@ tunifioctl(ifp, cmd, data) s = splimp(); switch(cmd) { + case SIOCGIFSTATUS: + ifs = (struct ifstat *)data; + if (tp->tun_pid) + sprintf(ifs->ascii + strlen(ifs->ascii), + "\tOpened by PID %d\n", tp->tun_pid); + break; case SIOCSIFADDR: tuninit(ifp->if_unit); TUNDEBUG("%s%d: address set\n", @@ -451,9 +454,7 @@ tunoutput(ifp, m0, dst, rt) } if (tp->tun_flags & TUN_ASYNC && tp->tun_sigio) pgsigio(tp->tun_sigio, SIGIO, 0); - thread_funnel_switch(NETWORK_FUNNEL, KERNEL_FUNNEL); selwakeup(&tp->tun_rsel); - thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL); return 0; } @@ -730,9 +731,10 @@ tunwrite(dev, uio, flag) * anyway, it either accepts the packet or drops it. */ static int -tunpoll(dev, events, p) +tunpoll(dev, events, wql, p) dev_t dev; int events; + void * wql; struct proc *p; { int unit = dev_val(minor(dev)), s; @@ -751,7 +753,7 @@ tunpoll(dev, events, p) } else { TUNDEBUG("%s%d: tunpoll waiting\n", ifp->if_name, ifp->if_unit); - selrecord(p, &tp->tun_rsel); + selrecord(p, &tp->tun_rsel, wql); } if (events & (POLLOUT | POLLWRNORM))