/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2010 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
#include <net/raw_cb.h>
-lck_mtx_t *raw_mtx; /*### global raw cb mutex for now */
+decl_lck_mtx_data(,raw_mtx_data); /*### global raw cb mutex for now */
+lck_mtx_t *raw_mtx = &raw_mtx_data;
lck_attr_t *raw_mtx_attr;
lck_grp_t *raw_mtx_grp;
lck_grp_attr_t *raw_mtx_grp_attr;
* Initialize raw connection block q.
*/
void
-raw_init()
+raw_init(void)
{
raw_mtx_grp_attr = lck_grp_attr_alloc_init();
raw_mtx_attr = lck_attr_alloc_init();
- if ((raw_mtx = lck_mtx_alloc_init(raw_mtx_grp, raw_mtx_attr)) == NULL) {
- printf("raw_init: can't alloc raw_mtx\n");
- return;
- }
+ lck_mtx_init(raw_mtx, raw_mtx_grp, raw_mtx_attr);
LIST_INIT(&rawcb_list);
}
* Raw protocol interface.
*/
void
-raw_input(m0, proto, src, dst)
- struct mbuf *m0;
- register struct sockproto *proto;
- struct sockaddr *src, *dst;
+raw_input(struct mbuf *m0, struct sockproto *proto, struct sockaddr *src,
+ struct sockaddr *dst)
{
- register struct rawcb *rp;
- register struct mbuf *m = m0;
- register int sockets = 0;
+ struct rawcb *rp;
+ struct mbuf *m = m0;
+ int sockets = 0;
struct socket *last;
int error;
//####LD socket we'll find and need to append to is unlocked.
//####LD calls from the output (locked) path need to make sure the socket is not locked when
//####LD we call in raw_input
- last = 0;
+ last = NULL;
lck_mtx_lock(raw_mtx);
LIST_FOREACH(rp, &rawcb_list, list) {
if (rp->rcb_proto.sp_family != proto->sp_family)
/*ARGSUSED*/
void
-raw_ctlinput(cmd, arg, dummy)
- int cmd;
- struct sockaddr *arg;
- void *dummy;
+raw_ctlinput(int cmd, __unused struct sockaddr *arg, __unused void *dummy)
{
if (cmd < 0 || cmd > PRC_NCMDS)
/* pru_accept is EOPNOTSUPP */
static int
-raw_uattach(struct socket *so, int proto, struct proc *p)
+raw_uattach(struct socket *so, int proto, __unused struct proc *p)
{
struct rawcb *rp = sotorawcb(so);
-#ifndef __APPLE__
- int error;
-#endif
if (rp == 0)
return EINVAL;
-#ifdef __APPLE__
if ((so->so_state & SS_PRIV) == 0)
return (EPERM);
-#else
- if (p && (error = suser(p)) != 0)
- return error;
-#endif
return raw_attach(so, proto);
}
static int
-raw_ubind(struct socket *so, struct sockaddr *nam, struct proc *p)
+raw_ubind(__unused struct socket *so, __unused struct sockaddr *nam, __unused struct proc *p)
{
return EINVAL;
}
static int
-raw_uconnect(struct socket *so, struct sockaddr *nam, struct proc *p)
+raw_uconnect(__unused struct socket *so, __unused struct sockaddr *nam, __unused struct proc *p)
{
return EINVAL;
}
static int
raw_usend(struct socket *so, int flags, struct mbuf *m,
- struct sockaddr *nam, struct mbuf *control, struct proc *p)
+ struct sockaddr *nam, struct mbuf *control, __unused struct proc *p)
{
int error;
struct rawcb *rp = sotorawcb(so);
goto release;
}
+ if (so->so_proto->pr_output == NULL) {
+ error = EOPNOTSUPP;
+ goto release;
+ }
+
if (control && control->m_len) {
error = EOPNOTSUPP;
goto release;
error = (*so->so_proto->pr_output)(m, so);
m = NULL;
if (nam)
- rp->rcb_faddr = 0;
+ rp->rcb_faddr = NULL;
release:
if (m != NULL)
m_freem(m);