version 1.234, 2009/10/11 17:20:48 |
version 1.234.2.1, 2010/08/17 06:47:32 |
Line 208 uint64_t tk_rawcc; |
|
Line 208 uint64_t tk_rawcc; |
|
|
|
static kauth_listener_t tty_listener; |
static kauth_listener_t tty_listener; |
|
|
SYSCTL_SETUP(sysctl_kern_tkstat_setup, "sysctl kern.tkstat subtree setup") |
static struct sysctllog *kern_tkstat_sysctllog; |
|
|
|
static void |
|
sysctl_kern_tkstat_setup(void) |
{ |
{ |
|
|
sysctl_createv(clog, 0, NULL, NULL, |
sysctl_createv(&kern_tkstat_sysctllog, 0, NULL, NULL, |
CTLFLAG_PERMANENT, |
CTLFLAG_PERMANENT, |
CTLTYPE_NODE, "kern", NULL, |
CTLTYPE_NODE, "kern", NULL, |
NULL, 0, NULL, 0, |
NULL, 0, NULL, 0, |
CTL_KERN, CTL_EOL); |
CTL_KERN, CTL_EOL); |
sysctl_createv(clog, 0, NULL, NULL, |
sysctl_createv(&kern_tkstat_sysctllog, 0, NULL, NULL, |
CTLFLAG_PERMANENT, |
CTLFLAG_PERMANENT, |
CTLTYPE_NODE, "tkstat", |
CTLTYPE_NODE, "tkstat", |
SYSCTL_DESCR("Number of characters sent and and " |
SYSCTL_DESCR("Number of characters sent and and " |
Line 224 SYSCTL_SETUP(sysctl_kern_tkstat_setup, " |
|
Line 227 SYSCTL_SETUP(sysctl_kern_tkstat_setup, " |
|
NULL, 0, NULL, 0, |
NULL, 0, NULL, 0, |
CTL_KERN, KERN_TKSTAT, CTL_EOL); |
CTL_KERN, KERN_TKSTAT, CTL_EOL); |
|
|
sysctl_createv(clog, 0, NULL, NULL, |
sysctl_createv(&kern_tkstat_sysctllog, 0, NULL, NULL, |
CTLFLAG_PERMANENT, |
CTLFLAG_PERMANENT, |
CTLTYPE_QUAD, "nin", |
CTLTYPE_QUAD, "nin", |
SYSCTL_DESCR("Total number of tty input characters"), |
SYSCTL_DESCR("Total number of tty input characters"), |
NULL, 0, &tk_nin, 0, |
NULL, 0, &tk_nin, 0, |
CTL_KERN, KERN_TKSTAT, KERN_TKSTAT_NIN, CTL_EOL); |
CTL_KERN, KERN_TKSTAT, KERN_TKSTAT_NIN, CTL_EOL); |
sysctl_createv(clog, 0, NULL, NULL, |
sysctl_createv(&kern_tkstat_sysctllog, 0, NULL, NULL, |
CTLFLAG_PERMANENT, |
CTLFLAG_PERMANENT, |
CTLTYPE_QUAD, "nout", |
CTLTYPE_QUAD, "nout", |
SYSCTL_DESCR("Total number of tty output characters"), |
SYSCTL_DESCR("Total number of tty output characters"), |
NULL, 0, &tk_nout, 0, |
NULL, 0, &tk_nout, 0, |
CTL_KERN, KERN_TKSTAT, KERN_TKSTAT_NOUT, CTL_EOL); |
CTL_KERN, KERN_TKSTAT, KERN_TKSTAT_NOUT, CTL_EOL); |
sysctl_createv(clog, 0, NULL, NULL, |
sysctl_createv(&kern_tkstat_sysctllog, 0, NULL, NULL, |
CTLFLAG_PERMANENT, |
CTLFLAG_PERMANENT, |
CTLTYPE_QUAD, "cancc", |
CTLTYPE_QUAD, "cancc", |
SYSCTL_DESCR("Number of canonical tty input characters"), |
SYSCTL_DESCR("Number of canonical tty input characters"), |
NULL, 0, &tk_cancc, 0, |
NULL, 0, &tk_cancc, 0, |
CTL_KERN, KERN_TKSTAT, KERN_TKSTAT_CANCC, CTL_EOL); |
CTL_KERN, KERN_TKSTAT, KERN_TKSTAT_CANCC, CTL_EOL); |
sysctl_createv(clog, 0, NULL, NULL, |
sysctl_createv(&kern_tkstat_sysctllog, 0, NULL, NULL, |
CTLFLAG_PERMANENT, |
CTLFLAG_PERMANENT, |
CTLTYPE_QUAD, "rawcc", |
CTLTYPE_QUAD, "rawcc", |
SYSCTL_DESCR("Number of raw tty input characters"), |
SYSCTL_DESCR("Number of raw tty input characters"), |
Line 1187 ttioctl(struct tty *tp, u_long cmd, void |
|
Line 1190 ttioctl(struct tty *tp, u_long cmd, void |
|
} |
} |
|
|
if (pgid < 0) { |
if (pgid < 0) { |
pgrp = pg_find(-pgid, PFIND_LOCKED | PFIND_UNLOCK_FAIL); |
pgrp = pgrp_find(-pgid); |
if (pgrp == NULL) |
if (pgrp == NULL) { |
|
mutex_exit(proc_lock); |
return (EINVAL); |
return (EINVAL); |
|
} |
} else { |
} else { |
struct proc *p1; |
struct proc *p1; |
p1 = p_find(pgid, PFIND_LOCKED | PFIND_UNLOCK_FAIL); |
p1 = proc_find(pgid); |
if (!p1) |
if (!p1) { |
|
mutex_exit(proc_lock); |
return (ESRCH); |
return (ESRCH); |
|
} |
pgrp = p1->p_pgrp; |
pgrp = p1->p_pgrp; |
} |
} |
|
|
Line 1216 ttioctl(struct tty *tp, u_long cmd, void |
|
Line 1223 ttioctl(struct tty *tp, u_long cmd, void |
|
mutex_exit(proc_lock); |
mutex_exit(proc_lock); |
return (ENOTTY); |
return (ENOTTY); |
} |
} |
pgrp = pg_find(*(int *)data, PFIND_LOCKED | PFIND_UNLOCK_FAIL); |
pgrp = pgrp_find(*(pid_t *)data); |
if (pgrp == NULL) |
if (pgrp == NULL) { |
|
mutex_exit(proc_lock); |
return (EINVAL); |
return (EINVAL); |
|
} |
if (pgrp->pg_session != p->p_session) { |
if (pgrp->pg_session != p->p_session) { |
mutex_exit(proc_lock); |
mutex_exit(proc_lock); |
return (EPERM); |
return (EPERM); |
|
|
|
|
/* |
/* |
* Sleep on chan, returning ERESTART if tty changed while we napped and |
* Sleep on chan, returning ERESTART if tty changed while we napped and |
* returning any errors (e.g. EINTR/ETIMEDOUT) reported by tsleep. If |
* returning any errors (e.g. EINTR/ETIMEDOUT) reported by cv_timedwait(_sig). |
* the tty is revoked, restarting a pending call will redo validation done |
* If the tty is revoked, restarting a pending call will redo validation done |
* at the start of the call. |
* at the start of the call. |
* |
* |
* Must be called with the tty lock held. |
* Must be called with the tty lock held. |
|
|
|
|
tty_listener = kauth_listen_scope(KAUTH_SCOPE_DEVICE, |
tty_listener = kauth_listen_scope(KAUTH_SCOPE_DEVICE, |
tty_listener_cb, NULL); |
tty_listener_cb, NULL); |
|
|
|
sysctl_kern_tkstat_setup(); |
} |
} |
|
|
/* |
/* |