version 1.209.2.2.2.2, 2013/11/25 08:27:06 |
version 1.211.2.2, 2013/02/25 00:29:55 |
Line 160 static void sopendfree_thread(void *); |
|
Line 160 static void sopendfree_thread(void *); |
|
static kcondvar_t pendfree_thread_cv; |
static kcondvar_t pendfree_thread_cv; |
static lwp_t *sopendfree_lwp; |
static lwp_t *sopendfree_lwp; |
|
|
static void sysctl_kern_somaxkva_setup(void); |
static void sysctl_kern_socket_setup(void); |
static struct sysctllog *socket_sysctllog; |
static struct sysctllog *socket_sysctllog; |
|
|
static vsize_t |
static vsize_t |
Line 416 socket_listener_cb(kauth_cred_t cred, ka |
|
Line 416 socket_listener_cb(kauth_cred_t cred, ka |
|
/* Normal users can only drop their own connections. */ |
/* Normal users can only drop their own connections. */ |
struct socket *so = (struct socket *)arg1; |
struct socket *so = (struct socket *)arg1; |
|
|
if (so->so_cred && proc_uidmatch(cred, so->so_cred) == 0) |
if (proc_uidmatch(cred, so->so_cred)) |
result = KAUTH_RESULT_ALLOW; |
result = KAUTH_RESULT_ALLOW; |
|
|
break; |
break; |
|
|
soinit(void) |
soinit(void) |
{ |
{ |
|
|
sysctl_kern_somaxkva_setup(); |
sysctl_kern_socket_setup(); |
|
|
mutex_init(&so_pendfree_lock, MUTEX_DEFAULT, IPL_VM); |
mutex_init(&so_pendfree_lock, MUTEX_DEFAULT, IPL_VM); |
softnet_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE); |
softnet_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE); |
Line 624 solisten(struct socket *so, int backlog, |
|
Line 624 solisten(struct socket *so, int backlog, |
|
if ((so->so_state & (SS_ISCONNECTED | SS_ISCONNECTING | |
if ((so->so_state & (SS_ISCONNECTED | SS_ISCONNECTING | |
SS_ISDISCONNECTING)) != 0) { |
SS_ISDISCONNECTING)) != 0) { |
sounlock(so); |
sounlock(so); |
return (EOPNOTSUPP); |
return (EINVAL); |
} |
} |
error = (*so->so_proto->pr_usrreq)(so, PRU_LISTEN, NULL, |
error = (*so->so_proto->pr_usrreq)(so, PRU_LISTEN, NULL, |
NULL, NULL, l); |
NULL, NULL, l); |
Line 2368 sopoll(struct socket *so, int events) |
|
Line 2368 sopoll(struct socket *so, int events) |
|
#include <sys/sysctl.h> |
#include <sys/sysctl.h> |
|
|
static int sysctl_kern_somaxkva(SYSCTLFN_PROTO); |
static int sysctl_kern_somaxkva(SYSCTLFN_PROTO); |
|
static int sysctl_kern_sbmax(SYSCTLFN_PROTO); |
|
|
/* |
/* |
* sysctl helper routine for kern.somaxkva. ensures that the given |
* sysctl helper routine for kern.somaxkva. ensures that the given |
Line 2398 sysctl_kern_somaxkva(SYSCTLFN_ARGS) |
|
Line 2399 sysctl_kern_somaxkva(SYSCTLFN_ARGS) |
|
return (error); |
return (error); |
} |
} |
|
|
|
/* |
|
* sysctl helper routine for kern.sbmax. Basically just ensures that |
|
* any new value is not too small. |
|
*/ |
|
static int |
|
sysctl_kern_sbmax(SYSCTLFN_ARGS) |
|
{ |
|
int error, new_sbmax; |
|
struct sysctlnode node; |
|
|
|
new_sbmax = sb_max; |
|
node = *rnode; |
|
node.sysctl_data = &new_sbmax; |
|
error = sysctl_lookup(SYSCTLFN_CALL(&node)); |
|
if (error || newp == NULL) |
|
return (error); |
|
|
|
KERNEL_LOCK(1, NULL); |
|
error = sb_max_set(new_sbmax); |
|
KERNEL_UNLOCK_ONE(NULL); |
|
|
|
return (error); |
|
} |
|
|
static void |
static void |
sysctl_kern_somaxkva_setup(void) |
sysctl_kern_socket_setup(void) |
{ |
{ |
|
|
KASSERT(socket_sysctllog == NULL); |
KASSERT(socket_sysctllog == NULL); |
Line 2416 sysctl_kern_somaxkva_setup(void) |
|
Line 2441 sysctl_kern_somaxkva_setup(void) |
|
"used for socket buffers"), |
"used for socket buffers"), |
sysctl_kern_somaxkva, 0, NULL, 0, |
sysctl_kern_somaxkva, 0, NULL, 0, |
CTL_KERN, KERN_SOMAXKVA, CTL_EOL); |
CTL_KERN, KERN_SOMAXKVA, CTL_EOL); |
|
|
|
sysctl_createv(&socket_sysctllog, 0, NULL, NULL, |
|
CTLFLAG_PERMANENT|CTLFLAG_READWRITE, |
|
CTLTYPE_INT, "sbmax", |
|
SYSCTL_DESCR("Maximum socket buffer size"), |
|
sysctl_kern_sbmax, 0, NULL, 0, |
|
CTL_KERN, KERN_SBMAX, CTL_EOL); |
} |
} |