diff options
| author | rtr <rtr@NetBSD.org> | 2014-07-09 04:54:03 +0000 |
|---|---|---|
| committer | rtr <rtr@NetBSD.org> | 2014-07-09 04:54:03 +0000 |
| commit | 3bb356e962c4aed85ec2e8e8fe6d9bb419f1a718 (patch) | |
| tree | 5110a24a30081d19ac2273fb92f7463cc2da8d2a /sys/netbt | |
| parent | e90e70db6d28ea52e5f5a3bf090cff0753bd3c3a (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.c | 70 | ||||
| -rw-r--r-- | sys/netbt/l2cap.h | 8 | ||||
| -rw-r--r-- | sys/netbt/l2cap_socket.c | 54 | ||||
| -rw-r--r-- | sys/netbt/l2cap_upper.c | 12 | ||||
| -rw-r--r-- | sys/netbt/rfcomm.h | 8 | ||||
| -rw-r--r-- | sys/netbt/rfcomm_dlc.c | 10 | ||||
| -rw-r--r-- | sys/netbt/rfcomm_session.c | 8 | ||||
| -rw-r--r-- | sys/netbt/rfcomm_socket.c | 54 | ||||
| -rw-r--r-- | sys/netbt/rfcomm_upper.c | 16 | ||||
| -rw-r--r-- | sys/netbt/sco.h | 6 | ||||
| -rw-r--r-- | sys/netbt/sco_socket.c | 54 | ||||
| -rw-r--r-- | sys/netbt/sco_upper.c | 12 |
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)); |
