summaryrefslogtreecommitdiff
path: root/sys/netbt
diff options
context:
space:
mode:
authorrtr <rtr@NetBSD.org>2014-07-09 04:54:03 +0000
committerrtr <rtr@NetBSD.org>2014-07-09 04:54:03 +0000
commit3bb356e962c4aed85ec2e8e8fe6d9bb419f1a718 (patch)
tree5110a24a30081d19ac2273fb92f7463cc2da8d2a /sys/netbt
parente90e70db6d28ea52e5f5a3bf090cff0753bd3c3a (diff)
* split PRU_PEERADDR and PRU_SOCKADDR function out of pr_generic()
usrreq switches and put into separate functions xxx_{peer,sock}addr(struct socket *, struct mbuf *). - KASSERT(solocked(so)) always in new functions even if request is not implemented - KASSERT(pcb != NULL) and KASSERT(nam) if the request is implemented and not for tcp. * for tcp roll #ifdef KPROF and #ifdef DEBUG code from tcp_usrreq() into easier to cut & paste functions tcp_debug_capture() and tcp_debug_trace() - functions provided by rmind - remaining use of PRU_{PEER,SOCK}ADDR #define to be removed in a future commit. * rename netbt functions to permit consistency of pru function names (as has been done with other requests already split out). - l2cap_{peer,sock}addr() -> l2cap_{peer,sock}_addr_pcb() - rfcomm_{peer,sock}addr() -> rfcomm_{peer,sock}_addr_pcb() - sco_{peer,sock}addr() -> sco_{peer,sock}_addr_pcb() * split/refactor do_sys_getsockname(lwp, fd, which, nam) into two functions do_sys_get{peer,sock}name(fd, nam). - move PRU_PEERADDR handling into do_sys_getpeername() from do_sys_getsockname() - have svr4_stream directly call do_sys_get{sock,peer}name() respectively instead of providing `which' & fix a DPRINTF string that incorrectly wrote "getpeername" when it meant "getsockname" - fix sys_getpeername() and sys_getsockname() to call do_sys_get{sock,peer}name() without `which' and `lwp' & adjust comments - bump kernel version for removal of lwp & which parameters from do_sys_getsockname() note: future cleanup to remove struct mbuf * abuse in xxx_{peer,sock}name() still to come, not done in this commit since it is easier to do post split. patch reviewed by rmind welcome to 6.99.47
Diffstat (limited to 'sys/netbt')
-rw-r--r--sys/netbt/hci_socket.c70
-rw-r--r--sys/netbt/l2cap.h8
-rw-r--r--sys/netbt/l2cap_socket.c54
-rw-r--r--sys/netbt/l2cap_upper.c12
-rw-r--r--sys/netbt/rfcomm.h8
-rw-r--r--sys/netbt/rfcomm_dlc.c10
-rw-r--r--sys/netbt/rfcomm_session.c8
-rw-r--r--sys/netbt/rfcomm_socket.c54
-rw-r--r--sys/netbt/rfcomm_upper.c16
-rw-r--r--sys/netbt/sco.h6
-rw-r--r--sys/netbt/sco_socket.c54
-rw-r--r--sys/netbt/sco_upper.c12
12 files changed, 203 insertions, 109 deletions
diff --git a/sys/netbt/hci_socket.c b/sys/netbt/hci_socket.c
index 00e00457fcd..f37bd7aa4fc 100644
--- a/sys/netbt/hci_socket.c
+++ b/sys/netbt/hci_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: hci_socket.c,v 1.30 2014/07/07 17:13:56 rtr Exp $ */
+/* $NetBSD: hci_socket.c,v 1.31 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.30 2014/07/07 17:13:56 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hci_socket.c,v 1.31 2014/07/09 04:54:03 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -501,6 +501,44 @@ hci_stat(struct socket *so, struct stat *ub)
return 0;
}
+static int
+hci_peeraddr(struct socket *so, struct mbuf *nam)
+{
+ struct hci_pcb *pcb = (struct hci_pcb *)so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ memset(sa, 0, sizeof(struct sockaddr_bt));
+ nam->m_len =
+ sa->bt_len = sizeof(struct sockaddr_bt);
+ sa->bt_family = AF_BLUETOOTH;
+ bdaddr_copy(&sa->bt_bdaddr, &pcb->hp_raddr);
+ return 0;
+}
+
+static int
+hci_sockaddr(struct socket *so, struct mbuf *nam)
+{
+ struct hci_pcb *pcb = (struct hci_pcb *)so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ memset(sa, 0, sizeof(struct sockaddr_bt));
+ nam->m_len =
+ sa->bt_len = sizeof(struct sockaddr_bt);
+ sa->bt_family = AF_BLUETOOTH;
+ bdaddr_copy(&sa->bt_bdaddr, &pcb->hp_laddr);
+ return 0;
+}
+
/*
* User Request.
* up is socket
@@ -524,6 +562,8 @@ hci_usrreq(struct socket *up, int req, struct mbuf *m,
KASSERT(req != PRU_DETACH);
KASSERT(req != PRU_CONTROL);
KASSERT(req != PRU_SENSE);
+ KASSERT(req != PRU_PEERADDR);
+ KASSERT(req != PRU_SOCKADDR);
switch(req) {
case PRU_PURGEIF:
@@ -590,28 +630,6 @@ hci_usrreq(struct socket *up, int req, struct mbuf *m,
soisconnected(up);
return 0;
- case PRU_PEERADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
-
- memset(sa, 0, sizeof(struct sockaddr_bt));
- nam->m_len =
- sa->bt_len = sizeof(struct sockaddr_bt);
- sa->bt_family = AF_BLUETOOTH;
- bdaddr_copy(&sa->bt_bdaddr, &pcb->hp_raddr);
- return 0;
-
- case PRU_SOCKADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
-
- memset(sa, 0, sizeof(struct sockaddr_bt));
- nam->m_len =
- sa->bt_len = sizeof(struct sockaddr_bt);
- sa->bt_family = AF_BLUETOOTH;
- bdaddr_copy(&sa->bt_bdaddr, &pcb->hp_laddr);
- return 0;
-
case PRU_SHUTDOWN:
socantsendmore(up);
break;
@@ -876,6 +894,8 @@ PR_WRAP_USRREQS(hci)
#define hci_detach hci_detach_wrapper
#define hci_ioctl hci_ioctl_wrapper
#define hci_stat hci_stat_wrapper
+#define hci_peeraddr hci_peeraddr_wrapper
+#define hci_sockaddr hci_sockaddr_wrapper
#define hci_usrreq hci_usrreq_wrapper
const struct pr_usrreqs hci_usrreqs = {
@@ -883,5 +903,7 @@ const struct pr_usrreqs hci_usrreqs = {
.pr_detach = hci_detach,
.pr_ioctl = hci_ioctl,
.pr_stat = hci_stat,
+ .pr_peeraddr = hci_peeraddr,
+ .pr_sockaddr = hci_sockaddr,
.pr_generic = hci_usrreq,
};
diff --git a/sys/netbt/l2cap.h b/sys/netbt/l2cap.h
index 0afc7e1ea1d..5b4d6ff412d 100644
--- a/sys/netbt/l2cap.h
+++ b/sys/netbt/l2cap.h
@@ -1,4 +1,4 @@
-/* $NetBSD: l2cap.h,v 1.13 2014/05/20 18:25:54 rmind Exp $ */
+/* $NetBSD: l2cap.h,v 1.14 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -54,7 +54,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: l2cap.h,v 1.13 2014/05/20 18:25:54 rmind Exp $
+ * $Id: l2cap.h,v 1.14 2014/07/09 04:54:03 rtr Exp $
* $FreeBSD: src/sys/netgraph/bluetooth/include/l2cap.h,v 1.4 2005/08/31 18:13:23 emax Exp $
*/
@@ -463,9 +463,9 @@ int l2cap_ctloutput(int, struct socket *, struct sockopt *);
/* l2cap_upper.c */
int l2cap_attach_pcb(struct l2cap_channel **, const struct btproto *, void *);
int l2cap_bind(struct l2cap_channel *, struct sockaddr_bt *);
-int l2cap_sockaddr(struct l2cap_channel *, struct sockaddr_bt *);
+int l2cap_sockaddr_pcb(struct l2cap_channel *, struct sockaddr_bt *);
int l2cap_connect(struct l2cap_channel *, struct sockaddr_bt *);
-int l2cap_peeraddr(struct l2cap_channel *, struct sockaddr_bt *);
+int l2cap_peeraddr_pcb(struct l2cap_channel *, struct sockaddr_bt *);
int l2cap_disconnect(struct l2cap_channel *, int);
void l2cap_detach_pcb(struct l2cap_channel **);
int l2cap_listen(struct l2cap_channel *);
diff --git a/sys/netbt/l2cap_socket.c b/sys/netbt/l2cap_socket.c
index f638fc5fe3f..1aa23bb7149 100644
--- a/sys/netbt/l2cap_socket.c
+++ b/sys/netbt/l2cap_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: l2cap_socket.c,v 1.21 2014/07/07 17:13:56 rtr Exp $ */
+/* $NetBSD: l2cap_socket.c,v 1.22 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.21 2014/07/07 17:13:56 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: l2cap_socket.c,v 1.22 2014/07/09 04:54:03 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -130,6 +130,36 @@ l2cap_stat(struct socket *so, struct stat *ub)
return 0;
}
+static int
+l2cap_peeraddr(struct socket *so, struct mbuf *nam)
+{
+ struct l2cap_channel *pcb = so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ nam->m_len = sizeof(struct sockaddr_bt);
+ return l2cap_peeraddr_pcb(pcb, sa);
+}
+
+static int
+l2cap_sockaddr(struct socket *so, struct mbuf *nam)
+{
+ struct l2cap_channel *pcb = so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ nam->m_len = sizeof(struct sockaddr_bt);
+ return l2cap_sockaddr_pcb(pcb, sa);
+}
+
/*
* User Request.
* up is socket
@@ -159,6 +189,8 @@ l2cap_usrreq(struct socket *up, int req, struct mbuf *m,
KASSERT(req != PRU_DETACH);
KASSERT(req != PRU_CONTROL);
KASSERT(req != PRU_SENSE);
+ KASSERT(req != PRU_PEERADDR);
+ KASSERT(req != PRU_SOCKADDR);
switch (req) {
case PRU_PURGEIF:
@@ -206,18 +238,6 @@ l2cap_usrreq(struct socket *up, int req, struct mbuf *m,
soisconnecting(up);
return l2cap_connect(pcb, sa);
- case PRU_PEERADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
- nam->m_len = sizeof(struct sockaddr_bt);
- return l2cap_peeraddr(pcb, sa);
-
- case PRU_SOCKADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
- nam->m_len = sizeof(struct sockaddr_bt);
- return l2cap_sockaddr(pcb, sa);
-
case PRU_SHUTDOWN:
socantsendmore(up);
break;
@@ -255,7 +275,7 @@ l2cap_usrreq(struct socket *up, int req, struct mbuf *m,
KASSERT(nam != NULL);
sa = mtod(nam, struct sockaddr_bt *);
nam->m_len = sizeof(struct sockaddr_bt);
- return l2cap_peeraddr(pcb, sa);
+ return l2cap_peeraddr_pcb(pcb, sa);
case PRU_CONNECT2:
case PRU_SENDOOB:
@@ -424,6 +444,8 @@ PR_WRAP_USRREQS(l2cap)
#define l2cap_detach l2cap_detach_wrapper
#define l2cap_ioctl l2cap_ioctl_wrapper
#define l2cap_stat l2cap_stat_wrapper
+#define l2cap_peeraddr l2cap_peeraddr_wrapper
+#define l2cap_sockaddr l2cap_sockaddr_wrapper
#define l2cap_usrreq l2cap_usrreq_wrapper
const struct pr_usrreqs l2cap_usrreqs = {
@@ -431,5 +453,7 @@ const struct pr_usrreqs l2cap_usrreqs = {
.pr_detach = l2cap_detach,
.pr_ioctl = l2cap_ioctl,
.pr_stat = l2cap_stat,
+ .pr_peeraddr = l2cap_peeraddr,
+ .pr_sockaddr = l2cap_sockaddr,
.pr_generic = l2cap_usrreq,
};
diff --git a/sys/netbt/l2cap_upper.c b/sys/netbt/l2cap_upper.c
index d0d55b724d3..ba742919e9e 100644
--- a/sys/netbt/l2cap_upper.c
+++ b/sys/netbt/l2cap_upper.c
@@ -1,4 +1,4 @@
-/* $NetBSD: l2cap_upper.c,v 1.13 2014/05/20 18:25:54 rmind Exp $ */
+/* $NetBSD: l2cap_upper.c,v 1.14 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: l2cap_upper.c,v 1.13 2014/05/20 18:25:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: l2cap_upper.c,v 1.14 2014/07/09 04:54:03 rtr Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -118,12 +118,12 @@ l2cap_bind(struct l2cap_channel *chan, struct sockaddr_bt *addr)
}
/*
- * l2cap_sockaddr(l2cap_channel, sockaddr)
+ * l2cap_sockaddr_pcb(l2cap_channel, sockaddr)
*
* get local address of channel
*/
int
-l2cap_sockaddr(struct l2cap_channel *chan, struct sockaddr_bt *addr)
+l2cap_sockaddr_pcb(struct l2cap_channel *chan, struct sockaddr_bt *addr)
{
memcpy(addr, &chan->lc_laddr, sizeof(struct sockaddr_bt));
@@ -209,12 +209,12 @@ fail:
}
/*
- * l2cap_peeraddr(l2cap_channel, sockaddr)
+ * l2cap_peeraddr_pcb(l2cap_channel, sockaddr)
*
* get remote address of channel
*/
int
-l2cap_peeraddr(struct l2cap_channel *chan, struct sockaddr_bt *addr)
+l2cap_peeraddr_pcb(struct l2cap_channel *chan, struct sockaddr_bt *addr)
{
memcpy(addr, &chan->lc_raddr, sizeof(struct sockaddr_bt));
diff --git a/sys/netbt/rfcomm.h b/sys/netbt/rfcomm.h
index b6d2923203d..efc6948af5a 100644
--- a/sys/netbt/rfcomm.h
+++ b/sys/netbt/rfcomm.h
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm.h,v 1.12 2014/05/20 18:25:54 rmind Exp $ */
+/* $NetBSD: rfcomm.h,v 1.13 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -55,7 +55,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: rfcomm.h,v 1.12 2014/05/20 18:25:54 rmind Exp $
+ * $Id: rfcomm.h,v 1.13 2014/07/09 04:54:03 rtr Exp $
* $FreeBSD: src/sys/netgraph/bluetooth/include/ng_btsocket_rfcomm.h,v 1.4 2005/01/11 01:39:53 emax Exp $
*/
@@ -409,9 +409,9 @@ int rfcomm_ctloutput(int, struct socket *, struct sockopt *);
/* rfcomm_upper.c */
int rfcomm_attach_pcb(struct rfcomm_dlc **, const struct btproto *, void *);
int rfcomm_bind(struct rfcomm_dlc *, struct sockaddr_bt *);
-int rfcomm_sockaddr(struct rfcomm_dlc *, struct sockaddr_bt *);
+int rfcomm_sockaddr_pcb(struct rfcomm_dlc *, struct sockaddr_bt *);
int rfcomm_connect(struct rfcomm_dlc *, struct sockaddr_bt *);
-int rfcomm_peeraddr(struct rfcomm_dlc *, struct sockaddr_bt *);
+int rfcomm_peeraddr_pcb(struct rfcomm_dlc *, struct sockaddr_bt *);
int rfcomm_disconnect(struct rfcomm_dlc *, int);
void rfcomm_detach_pcb(struct rfcomm_dlc **);
int rfcomm_listen(struct rfcomm_dlc *);
diff --git a/sys/netbt/rfcomm_dlc.c b/sys/netbt/rfcomm_dlc.c
index c1069343601..28b2e46e66f 100644
--- a/sys/netbt/rfcomm_dlc.c
+++ b/sys/netbt/rfcomm_dlc.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm_dlc.c,v 1.7 2011/08/21 14:20:34 plunky Exp $ */
+/* $NetBSD: rfcomm_dlc.c,v 1.8 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_dlc.c,v 1.7 2011/08/21 14:20:34 plunky Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_dlc.c,v 1.8 2014/07/09 04:54:03 rtr Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -84,14 +84,14 @@ rfcomm_dlc_newconn(struct rfcomm_session *rs, int dlci)
* a note of the best address and BDADDR_ANY matches in order to find
* the oldest and most specific match.
*/
- l2cap_sockaddr(rs->rs_l2cap, &laddr);
- l2cap_peeraddr(rs->rs_l2cap, &raddr);
+ l2cap_sockaddr_pcb(rs->rs_l2cap, &laddr);
+ l2cap_peeraddr_pcb(rs->rs_l2cap, &raddr);
chan = RFCOMM_CHANNEL(dlci);
new = NULL;
any = best = NULL;
LIST_FOREACH(ls, &rfcomm_session_listen, rs_next) {
- l2cap_sockaddr(ls->rs_l2cap, &addr);
+ l2cap_sockaddr_pcb(ls->rs_l2cap, &addr);
if (addr.bt_psm != laddr.bt_psm)
continue;
diff --git a/sys/netbt/rfcomm_session.c b/sys/netbt/rfcomm_session.c
index 42856defca5..d18c78f59ea 100644
--- a/sys/netbt/rfcomm_session.c
+++ b/sys/netbt/rfcomm_session.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm_session.c,v 1.19 2014/05/20 18:25:54 rmind Exp $ */
+/* $NetBSD: rfcomm_session.c,v 1.20 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_session.c,v 1.19 2014/05/20 18:25:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_session.c,v 1.20 2014/07/09 04:54:03 rtr Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -271,13 +271,13 @@ rfcomm_session_lookup(struct sockaddr_bt *src, struct sockaddr_bt *dest)
if (rs->rs_state == RFCOMM_SESSION_CLOSED)
continue;
- l2cap_sockaddr(rs->rs_l2cap, &addr);
+ l2cap_sockaddr_pcb(rs->rs_l2cap, &addr);
if (bdaddr_same(&src->bt_bdaddr, &addr.bt_bdaddr) == 0)
if (bdaddr_any(&src->bt_bdaddr) == 0)
continue;
- l2cap_peeraddr(rs->rs_l2cap, &addr);
+ l2cap_peeraddr_pcb(rs->rs_l2cap, &addr);
if (addr.bt_psm != dest->bt_psm)
continue;
diff --git a/sys/netbt/rfcomm_socket.c b/sys/netbt/rfcomm_socket.c
index ae424bb1171..604de5704f9 100644
--- a/sys/netbt/rfcomm_socket.c
+++ b/sys/netbt/rfcomm_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm_socket.c,v 1.22 2014/07/07 17:13:56 rtr Exp $ */
+/* $NetBSD: rfcomm_socket.c,v 1.23 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.22 2014/07/07 17:13:56 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_socket.c,v 1.23 2014/07/09 04:54:03 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -138,6 +138,36 @@ rfcomm_stat(struct socket *so, struct stat *ub)
return 0;
}
+static int
+rfcomm_peeraddr(struct socket *so, struct mbuf *nam)
+{
+ struct rfcomm_dlc *pcb = so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ nam->m_len = sizeof(struct sockaddr_bt);
+ return rfcomm_peeraddr_pcb(pcb, sa);
+}
+
+static int
+rfcomm_sockaddr(struct socket *so, struct mbuf *nam)
+{
+ struct rfcomm_dlc *pcb = so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ nam->m_len = sizeof(struct sockaddr_bt);
+ return rfcomm_sockaddr_pcb(pcb, sa);
+}
+
/*
* User Request.
* up is socket
@@ -167,6 +197,8 @@ rfcomm_usrreq(struct socket *up, int req, struct mbuf *m,
KASSERT(req != PRU_DETACH);
KASSERT(req != PRU_CONTROL);
KASSERT(req != PRU_SENSE);
+ KASSERT(req != PRU_PEERADDR);
+ KASSERT(req != PRU_SOCKADDR);
switch (req) {
case PRU_PURGEIF:
@@ -213,18 +245,6 @@ rfcomm_usrreq(struct socket *up, int req, struct mbuf *m,
soisconnecting(up);
return rfcomm_connect(pcb, sa);
- case PRU_PEERADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
- nam->m_len = sizeof(struct sockaddr_bt);
- return rfcomm_peeraddr(pcb, sa);
-
- case PRU_SOCKADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
- nam->m_len = sizeof(struct sockaddr_bt);
- return rfcomm_sockaddr(pcb, sa);
-
case PRU_SHUTDOWN:
socantsendmore(up);
break;
@@ -256,7 +276,7 @@ rfcomm_usrreq(struct socket *up, int req, struct mbuf *m,
KASSERT(nam != NULL);
sa = mtod(nam, struct sockaddr_bt *);
nam->m_len = sizeof(struct sockaddr_bt);
- return rfcomm_peeraddr(pcb, sa);
+ return rfcomm_peeraddr_pcb(pcb, sa);
case PRU_CONNECT2:
case PRU_SENDOOB:
@@ -437,6 +457,8 @@ PR_WRAP_USRREQS(rfcomm)
#define rfcomm_detach rfcomm_detach_wrapper
#define rfcomm_ioctl rfcomm_ioctl_wrapper
#define rfcomm_stat rfcomm_stat_wrapper
+#define rfcomm_peeraddr rfcomm_peeraddr_wrapper
+#define rfcomm_sockaddr rfcomm_sockaddr_wrapper
#define rfcomm_usrreq rfcomm_usrreq_wrapper
const struct pr_usrreqs rfcomm_usrreqs = {
@@ -444,5 +466,7 @@ const struct pr_usrreqs rfcomm_usrreqs = {
.pr_detach = rfcomm_detach,
.pr_ioctl = rfcomm_ioctl,
.pr_stat = rfcomm_stat,
+ .pr_peeraddr = rfcomm_peeraddr,
+ .pr_sockaddr = rfcomm_sockaddr,
.pr_generic = rfcomm_usrreq,
};
diff --git a/sys/netbt/rfcomm_upper.c b/sys/netbt/rfcomm_upper.c
index 231dcf2bf70..885b03ee36b 100644
--- a/sys/netbt/rfcomm_upper.c
+++ b/sys/netbt/rfcomm_upper.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rfcomm_upper.c,v 1.15 2014/05/20 18:25:54 rmind Exp $ */
+/* $NetBSD: rfcomm_upper.c,v 1.16 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_upper.c,v 1.15 2014/05/20 18:25:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_upper.c,v 1.16 2014/07/09 04:54:03 rtr Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -112,12 +112,12 @@ rfcomm_bind(struct rfcomm_dlc *dlc, struct sockaddr_bt *addr)
}
/*
- * rfcomm_sockaddr(dlc, sockaddr)
+ * rfcomm_sockaddr_pcb(dlc, sockaddr)
*
* return local address
*/
int
-rfcomm_sockaddr(struct rfcomm_dlc *dlc, struct sockaddr_bt *addr)
+rfcomm_sockaddr_pcb(struct rfcomm_dlc *dlc, struct sockaddr_bt *addr)
{
memcpy(addr, &dlc->rd_laddr, sizeof(struct sockaddr_bt));
@@ -184,7 +184,7 @@ rfcomm_connect(struct rfcomm_dlc *dlc, struct sockaddr_bt *dest)
if (rfcomm_dlc_lookup(rs, dlc->rd_dlci))
return EBUSY;
- l2cap_sockaddr(rs->rs_l2cap, &dlc->rd_laddr);
+ l2cap_sockaddr_pcb(rs->rs_l2cap, &dlc->rd_laddr);
/*
* attach the DLC to the session and start it off
@@ -200,12 +200,12 @@ rfcomm_connect(struct rfcomm_dlc *dlc, struct sockaddr_bt *dest)
}
/*
- * rfcomm_peeraddr(dlc, sockaddr)
+ * rfcomm_peeraddr_pcb(dlc, sockaddr)
*
* return remote address
*/
int
-rfcomm_peeraddr(struct rfcomm_dlc *dlc, struct sockaddr_bt *addr)
+rfcomm_peeraddr_pcb(struct rfcomm_dlc *dlc, struct sockaddr_bt *addr)
{
memcpy(addr, &dlc->rd_raddr, sizeof(struct sockaddr_bt));
@@ -332,7 +332,7 @@ rfcomm_listen(struct rfcomm_dlc *dlc)
return EADDRNOTAVAIL;
LIST_FOREACH(rs, &rfcomm_session_listen, rs_next) {
- l2cap_sockaddr(rs->rs_l2cap, &addr);
+ l2cap_sockaddr_pcb(rs->rs_l2cap, &addr);
if (addr.bt_psm != dlc->rd_laddr.bt_psm)
continue;
diff --git a/sys/netbt/sco.h b/sys/netbt/sco.h
index d9732b34ddb..2093607c48e 100644
--- a/sys/netbt/sco.h
+++ b/sys/netbt/sco.h
@@ -1,4 +1,4 @@
-/* $NetBSD: sco.h,v 1.6 2014/05/20 18:25:54 rmind Exp $ */
+/* $NetBSD: sco.h,v 1.7 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -70,9 +70,9 @@ int sco_ctloutput(int, struct socket *, struct sockopt *);
/* sco_upper.c */
int sco_attach_pcb(struct sco_pcb **, const struct btproto *, void *);
int sco_bind(struct sco_pcb *, struct sockaddr_bt *);
-int sco_sockaddr(struct sco_pcb *, struct sockaddr_bt *);
+int sco_sockaddr_pcb(struct sco_pcb *, struct sockaddr_bt *);
int sco_connect(struct sco_pcb *, struct sockaddr_bt *);
-int sco_peeraddr(struct sco_pcb *, struct sockaddr_bt *);
+int sco_peeraddr_pcb(struct sco_pcb *, struct sockaddr_bt *);
int sco_disconnect(struct sco_pcb *, int);
void sco_detach_pcb(struct sco_pcb **);
int sco_listen(struct sco_pcb *);
diff --git a/sys/netbt/sco_socket.c b/sys/netbt/sco_socket.c
index 05bd6837546..8bb6db95b8a 100644
--- a/sys/netbt/sco_socket.c
+++ b/sys/netbt/sco_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: sco_socket.c,v 1.23 2014/07/07 17:13:56 rtr Exp $ */
+/* $NetBSD: sco_socket.c,v 1.24 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.23 2014/07/07 17:13:56 rtr Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sco_socket.c,v 1.24 2014/07/09 04:54:03 rtr Exp $");
/* load symbolic names */
#ifdef BLUETOOTH_DEBUG
@@ -121,6 +121,36 @@ sco_stat(struct socket *so, struct stat *ub)
return 0;
}
+static int
+sco_peeraddr(struct socket *so, struct mbuf *nam)
+{
+ struct sco_pcb *pcb = (struct sco_pcb *)so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ nam->m_len = sizeof(struct sockaddr_bt);
+ return sco_peeraddr_pcb(pcb, sa);
+}
+
+static int
+sco_sockaddr(struct socket *so, struct mbuf *nam)
+{
+ struct sco_pcb *pcb = (struct sco_pcb *)so->so_pcb;
+ struct sockaddr_bt *sa;
+
+ KASSERT(solocked(so));
+ KASSERT(pcb != NULL);
+ KASSERT(nam != NULL);
+
+ sa = mtod(nam, struct sockaddr_bt *);
+ nam->m_len = sizeof(struct sockaddr_bt);
+ return sco_sockaddr_pcb(pcb, sa);
+}
+
/*
* User Request.
* up is socket
@@ -146,6 +176,8 @@ sco_usrreq(struct socket *up, int req, struct mbuf *m,
KASSERT(req != PRU_DETACH);
KASSERT(req != PRU_CONTROL);
KASSERT(req != PRU_SENSE);
+ KASSERT(req != PRU_PEERADDR);
+ KASSERT(req != PRU_SOCKADDR);
switch(req) {
case PRU_PURGEIF:
@@ -194,18 +226,6 @@ sco_usrreq(struct socket *up, int req, struct mbuf *m,
soisconnecting(up);
return sco_connect(pcb, sa);
- case PRU_PEERADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
- nam->m_len = sizeof(struct sockaddr_bt);
- return sco_peeraddr(pcb, sa);
-
- case PRU_SOCKADDR:
- KASSERT(nam != NULL);
- sa = mtod(nam, struct sockaddr_bt *);
- nam->m_len = sizeof(struct sockaddr_bt);
- return sco_sockaddr(pcb, sa);
-
case PRU_SHUTDOWN:
socantsendmore(up);
break;
@@ -243,7 +263,7 @@ sco_usrreq(struct socket *up, int req, struct mbuf *m,
KASSERT(nam != NULL);
sa = mtod(nam, struct sockaddr_bt *);
nam->m_len = sizeof(struct sockaddr_bt);
- return sco_peeraddr(pcb, sa);
+ return sco_peeraddr_pcb(pcb, sa);
case PRU_CONNECT2:
case PRU_SENDOOB:
@@ -391,6 +411,8 @@ PR_WRAP_USRREQS(sco)
#define sco_detach sco_detach_wrapper
#define sco_ioctl sco_ioctl_wrapper
#define sco_stat sco_stat_wrapper
+#define sco_peeraddr sco_peeraddr_wrapper
+#define sco_sockaddr sco_sockaddr_wrapper
#define sco_usrreq sco_usrreq_wrapper
const struct pr_usrreqs sco_usrreqs = {
@@ -398,5 +420,7 @@ const struct pr_usrreqs sco_usrreqs = {
.pr_detach = sco_detach,
.pr_ioctl = sco_ioctl,
.pr_stat = sco_stat,
+ .pr_peeraddr = sco_peeraddr,
+ .pr_sockaddr = sco_sockaddr,
.pr_generic = sco_usrreq,
};
diff --git a/sys/netbt/sco_upper.c b/sys/netbt/sco_upper.c
index 1bcbe2def31..18c6b846e7c 100644
--- a/sys/netbt/sco_upper.c
+++ b/sys/netbt/sco_upper.c
@@ -1,4 +1,4 @@
-/* $NetBSD: sco_upper.c,v 1.11 2014/05/20 18:25:54 rmind Exp $ */
+/* $NetBSD: sco_upper.c,v 1.12 2014/07/09 04:54:03 rtr Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sco_upper.c,v 1.11 2014/05/20 18:25:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sco_upper.c,v 1.12 2014/07/09 04:54:03 rtr Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -98,12 +98,12 @@ sco_bind(struct sco_pcb *pcb, struct sockaddr_bt *addr)
}
/*
- * sco_sockaddr(pcb, sockaddr)
+ * sco_sockaddr_pcb(pcb, sockaddr)
*
* Copy local address of PCB to sockaddr
*/
int
-sco_sockaddr(struct sco_pcb *pcb, struct sockaddr_bt *addr)
+sco_sockaddr_pcb(struct sco_pcb *pcb, struct sockaddr_bt *addr)
{
memset(addr, 0, sizeof(struct sockaddr_bt));
@@ -177,12 +177,12 @@ sco_connect(struct sco_pcb *pcb, struct sockaddr_bt *dest)
}
/*
- * sco_peeraddr(pcb, sockaddr)
+ * sco_peeraddr_pcb(pcb, sockaddr)
*
* Copy remote address of SCO pcb to sockaddr
*/
int
-sco_peeraddr(struct sco_pcb *pcb, struct sockaddr_bt *addr)
+sco_peeraddr_pcb(struct sco_pcb *pcb, struct sockaddr_bt *addr)
{
memset(addr, 0, sizeof(struct sockaddr_bt));