2 RFCOMM implementation for Linux Bluetooth stack (BlueZ).
3 Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
4 Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation;
10 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21 SOFTWARE IS DISCLAIMED.
27 * $Id: sock.c,v 1.24 2002/10/03 01:00:34 maxk Exp $
30 #include <linux/config.h>
31 #include <linux/module.h>
33 #include <linux/types.h>
34 #include <linux/errno.h>
35 #include <linux/kernel.h>
36 #include <linux/major.h>
37 #include <linux/sched.h>
38 #include <linux/slab.h>
39 #include <linux/poll.h>
40 #include <linux/fcntl.h>
41 #include <linux/init.h>
42 #include <linux/interrupt.h>
43 #include <linux/socket.h>
44 #include <linux/skbuff.h>
45 #include <linux/list.h>
46 #include <linux/proc_fs.h>
47 #include <linux/seq_file.h>
50 #include <asm/system.h>
51 #include <asm/uaccess.h>
53 #include <net/bluetooth/bluetooth.h>
54 #include <net/bluetooth/rfcomm.h>
56 #ifndef CONFIG_BT_RFCOMM_DEBUG
61 static struct proto_ops rfcomm_sock_ops;
63 static struct bt_sock_list rfcomm_sk_list = {
64 .lock = RW_LOCK_UNLOCKED
67 static void rfcomm_sock_close(struct sock *sk);
68 static void rfcomm_sock_kill(struct sock *sk);
70 /* ---- DLC callbacks ----
72 * called under rfcomm_dlc_lock()
74 static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
76 struct sock *sk = d->owner;
80 atomic_add(skb->len, &sk->sk_rmem_alloc);
81 skb_queue_tail(&sk->sk_receive_queue, skb);
82 sk->sk_data_ready(sk, skb->len);
84 if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
85 rfcomm_dlc_throttle(d);
88 static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
90 struct sock *sk = d->owner, *parent;
94 BT_DBG("dlc %p state %ld err %d", d, d->state, err);
100 sk->sk_state = d->state;
102 parent = bt_sk(sk)->parent;
104 if (d->state == BT_CONNECTED)
105 rfcomm_session_getaddr(d->session, &bt_sk(sk)->src, NULL);
106 sk->sk_state_change(sk);
108 parent->sk_data_ready(parent, 0);
113 /* ---- Socket functions ---- */
114 static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
116 struct sock *sk = NULL;
117 struct hlist_node *node;
119 sk_for_each(sk, node, &rfcomm_sk_list.head) {
120 if (rfcomm_pi(sk)->channel == channel &&
121 !bacmp(&bt_sk(sk)->src, src))
125 return node ? sk : NULL;
128 /* Find socket with channel and source bdaddr.
129 * Returns closest match.
131 static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
133 struct sock *sk = NULL, *sk1 = NULL;
134 struct hlist_node *node;
136 sk_for_each(sk, node, &rfcomm_sk_list.head) {
137 if (state && sk->sk_state != state)
140 if (rfcomm_pi(sk)->channel == channel) {
142 if (!bacmp(&bt_sk(sk)->src, src))
146 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
150 return node ? sk : sk1;
153 /* Find socket with given address (channel, src).
154 * Returns locked socket */
155 static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
158 read_lock(&rfcomm_sk_list.lock);
159 s = __rfcomm_get_sock_by_channel(state, channel, src);
160 if (s) bh_lock_sock(s);
161 read_unlock(&rfcomm_sk_list.lock);
165 static void rfcomm_sock_destruct(struct sock *sk)
167 struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
169 BT_DBG("sk %p dlc %p", sk, d);
171 skb_queue_purge(&sk->sk_receive_queue);
172 skb_queue_purge(&sk->sk_write_queue);
175 rfcomm_pi(sk)->dlc = NULL;
177 /* Detach DLC if it's owned by this socket */
180 rfcomm_dlc_unlock(d);
185 kfree(sk->sk_protinfo);
188 static void rfcomm_sock_cleanup_listen(struct sock *parent)
192 BT_DBG("parent %p", parent);
194 /* Close not yet accepted dlcs */
195 while ((sk = bt_accept_dequeue(parent, NULL))) {
196 rfcomm_sock_close(sk);
197 rfcomm_sock_kill(sk);
200 parent->sk_state = BT_CLOSED;
201 parent->sk_zapped = 1;
204 /* Kill socket (only if zapped and orphan)
205 * Must be called on unlocked socket.
207 static void rfcomm_sock_kill(struct sock *sk)
209 if (!sk->sk_zapped || sk->sk_socket)
212 BT_DBG("sk %p state %d refcnt %d", sk, sk->sk_state, atomic_read(&sk->sk_refcnt));
214 /* Kill poor orphan */
215 bt_sock_unlink(&rfcomm_sk_list, sk);
216 sock_set_flag(sk, SOCK_DEAD);
220 static void __rfcomm_sock_close(struct sock *sk)
222 struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
224 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
226 switch (sk->sk_state) {
228 rfcomm_sock_cleanup_listen(sk);
235 rfcomm_dlc_close(d, 0);
244 * Must be called on unlocked socket.
246 static void rfcomm_sock_close(struct sock *sk)
249 __rfcomm_sock_close(sk);
253 static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
258 sk->sk_type = parent->sk_type;
261 static struct sock *rfcomm_sock_alloc(struct socket *sock, int proto, int prio)
263 struct rfcomm_dlc *d;
266 sk = bt_sock_alloc(sock, BTPROTO_RFCOMM, sizeof(struct rfcomm_pinfo), prio);
270 sk_set_owner(sk, THIS_MODULE);
272 d = rfcomm_dlc_alloc(prio);
277 d->data_ready = rfcomm_sk_data_ready;
278 d->state_change = rfcomm_sk_state_change;
280 rfcomm_pi(sk)->dlc = d;
283 sk->sk_destruct = rfcomm_sock_destruct;
284 sk->sk_sndtimeo = RFCOMM_CONN_TIMEOUT;
286 sk->sk_sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
287 sk->sk_rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
289 sk->sk_protocol = proto;
290 sk->sk_state = BT_OPEN;
292 bt_sock_link(&rfcomm_sk_list, sk);
298 static int rfcomm_sock_create(struct socket *sock, int protocol)
302 BT_DBG("sock %p", sock);
304 sock->state = SS_UNCONNECTED;
306 if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
307 return -ESOCKTNOSUPPORT;
309 sock->ops = &rfcomm_sock_ops;
311 if (!(sk = rfcomm_sock_alloc(sock, protocol, GFP_KERNEL)))
314 rfcomm_sock_init(sk, NULL);
318 static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
320 struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
321 struct sock *sk = sock->sk;
324 BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
326 if (!addr || addr->sa_family != AF_BLUETOOTH)
331 if (sk->sk_state != BT_OPEN) {
336 write_lock_bh(&rfcomm_sk_list.lock);
338 if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
341 /* Save source address */
342 bacpy(&bt_sk(sk)->src, &sa->rc_bdaddr);
343 rfcomm_pi(sk)->channel = sa->rc_channel;
344 sk->sk_state = BT_BOUND;
347 write_unlock_bh(&rfcomm_sk_list.lock);
354 static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
356 struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
357 struct sock *sk = sock->sk;
358 struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
363 if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_rc))
366 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
369 if (sk->sk_type != SOCK_STREAM)
374 sk->sk_state = BT_CONNECT;
375 bacpy(&bt_sk(sk)->dst, &sa->rc_bdaddr);
376 rfcomm_pi(sk)->channel = sa->rc_channel;
378 err = rfcomm_dlc_open(d, &bt_sk(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
380 err = bt_sock_wait_state(sk, BT_CONNECTED,
381 sock_sndtimeo(sk, flags & O_NONBLOCK));
387 int rfcomm_sock_listen(struct socket *sock, int backlog)
389 struct sock *sk = sock->sk;
392 BT_DBG("sk %p backlog %d", sk, backlog);
396 if (sk->sk_state != BT_BOUND) {
401 if (!rfcomm_pi(sk)->channel) {
402 bdaddr_t *src = &bt_sk(sk)->src;
407 write_lock_bh(&rfcomm_sk_list.lock);
409 for (channel = 1; channel < 31; channel++)
410 if (!__rfcomm_get_sock_by_addr(channel, src)) {
411 rfcomm_pi(sk)->channel = channel;
416 write_unlock_bh(&rfcomm_sk_list.lock);
422 sk->sk_max_ack_backlog = backlog;
423 sk->sk_ack_backlog = 0;
424 sk->sk_state = BT_LISTEN;
431 int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
433 DECLARE_WAITQUEUE(wait, current);
434 struct sock *sk = sock->sk, *nsk;
440 if (sk->sk_state != BT_LISTEN) {
445 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
447 BT_DBG("sk %p timeo %ld", sk, timeo);
449 /* Wait for an incoming connection. (wake-one). */
450 add_wait_queue_exclusive(sk->sk_sleep, &wait);
451 while (!(nsk = bt_accept_dequeue(sk, newsock))) {
452 set_current_state(TASK_INTERRUPTIBLE);
459 timeo = schedule_timeout(timeo);
462 if (sk->sk_state != BT_LISTEN) {
467 if (signal_pending(current)) {
468 err = sock_intr_errno(timeo);
472 set_current_state(TASK_RUNNING);
473 remove_wait_queue(sk->sk_sleep, &wait);
478 newsock->state = SS_CONNECTED;
480 BT_DBG("new socket %p", nsk);
487 static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
489 struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
490 struct sock *sk = sock->sk;
492 BT_DBG("sock %p, sk %p", sock, sk);
494 sa->rc_family = AF_BLUETOOTH;
495 sa->rc_channel = rfcomm_pi(sk)->channel;
497 bacpy(&sa->rc_bdaddr, &bt_sk(sk)->dst);
499 bacpy(&sa->rc_bdaddr, &bt_sk(sk)->src);
501 *len = sizeof(struct sockaddr_rc);
505 static int rfcomm_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
506 struct msghdr *msg, size_t len)
508 struct sock *sk = sock->sk;
509 struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
514 if (msg->msg_flags & MSG_OOB)
517 if (sk->sk_shutdown & SEND_SHUTDOWN)
520 BT_DBG("sock %p, sk %p", sock, sk);
525 size_t size = min_t(size_t, len, d->mtu);
527 skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
528 msg->msg_flags & MSG_DONTWAIT, &err);
531 skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
533 err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
540 err = rfcomm_dlc_send(d, skb);
552 return sent ? sent : err;
555 static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
557 DECLARE_WAITQUEUE(wait, current);
559 add_wait_queue(sk->sk_sleep, &wait);
561 set_current_state(TASK_INTERRUPTIBLE);
563 if (skb_queue_len(&sk->sk_receive_queue) || sk->sk_err || (sk->sk_shutdown & RCV_SHUTDOWN) ||
564 signal_pending(current) || !timeo)
567 set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
569 timeo = schedule_timeout(timeo);
571 clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
574 __set_current_state(TASK_RUNNING);
575 remove_wait_queue(sk->sk_sleep, &wait);
579 static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
580 struct msghdr *msg, size_t size, int flags)
582 struct sock *sk = sock->sk;
584 size_t target, copied = 0;
590 msg->msg_namelen = 0;
592 BT_DBG("sk %p size %d", sk, size);
596 target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
597 timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
603 skb = skb_dequeue(&sk->sk_receive_queue);
605 if (copied >= target)
608 if ((err = sock_error(sk)) != 0)
610 if (sk->sk_shutdown & RCV_SHUTDOWN)
617 timeo = rfcomm_sock_data_wait(sk, timeo);
619 if (signal_pending(current)) {
620 err = sock_intr_errno(timeo);
626 chunk = min_t(unsigned int, skb->len, size);
627 if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
628 skb_queue_head(&sk->sk_receive_queue, skb);
636 if (!(flags & MSG_PEEK)) {
637 atomic_sub(chunk, &sk->sk_rmem_alloc);
639 skb_pull(skb, chunk);
641 skb_queue_head(&sk->sk_receive_queue, skb);
647 /* put message back and return */
648 skb_queue_head(&sk->sk_receive_queue, skb);
654 if (atomic_read(&sk->sk_rmem_alloc) <= (sk->sk_rcvbuf >> 2))
655 rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
658 return copied ? : err;
661 static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
663 struct sock *sk = sock->sk;
680 static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
682 struct sock *sk = sock->sk;
687 if (get_user(len, optlen))
702 static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
704 struct sock *sk = sock->sk;
709 #ifdef CONFIG_BT_RFCOMM_TTY
710 err = rfcomm_dev_ioctl(sk, cmd, (void __user *)arg);
719 static int rfcomm_sock_shutdown(struct socket *sock, int how)
721 struct sock *sk = sock->sk;
724 BT_DBG("sock %p, sk %p", sock, sk);
729 if (!sk->sk_shutdown) {
730 sk->sk_shutdown = SHUTDOWN_MASK;
731 __rfcomm_sock_close(sk);
733 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
734 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
740 static int rfcomm_sock_release(struct socket *sock)
742 struct sock *sk = sock->sk;
745 BT_DBG("sock %p, sk %p", sock, sk);
750 err = rfcomm_sock_shutdown(sock, 2);
753 rfcomm_sock_kill(sk);
757 /* ---- RFCOMM core layer callbacks ----
759 * called under rfcomm_lock()
761 int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
763 struct sock *sk, *parent;
767 BT_DBG("session %p channel %d", s, channel);
769 rfcomm_session_getaddr(s, &src, &dst);
771 /* Check if we have socket listening on channel */
772 parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
776 /* Check for backlog size */
777 if (parent->sk_ack_backlog > parent->sk_max_ack_backlog) {
778 BT_DBG("backlog full %d", parent->sk_ack_backlog);
782 sk = rfcomm_sock_alloc(NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
786 rfcomm_sock_init(sk, parent);
787 bacpy(&bt_sk(sk)->src, &src);
788 bacpy(&bt_sk(sk)->dst, &dst);
789 rfcomm_pi(sk)->channel = channel;
791 sk->sk_state = BT_CONFIG;
792 bt_accept_enqueue(parent, sk);
794 /* Accept connection and return socket DLC */
795 *d = rfcomm_pi(sk)->dlc;
799 bh_unlock_sock(parent);
803 /* ---- Proc fs support ---- */
804 #ifdef CONFIG_PROC_FS
805 static void *rfcomm_seq_start(struct seq_file *seq, loff_t *pos)
808 struct hlist_node *node;
811 read_lock_bh(&rfcomm_sk_list.lock);
813 sk_for_each(sk, node, &rfcomm_sk_list.head)
819 static void *rfcomm_seq_next(struct seq_file *seq, void *e, loff_t *pos)
826 static void rfcomm_seq_stop(struct seq_file *seq, void *e)
828 read_unlock_bh(&rfcomm_sk_list.lock);
831 static int rfcomm_seq_show(struct seq_file *seq, void *e)
834 seq_printf(seq, "%s %s %d %d\n",
835 batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
836 sk->sk_state, rfcomm_pi(sk)->channel);
840 static struct seq_operations rfcomm_seq_ops = {
841 .start = rfcomm_seq_start,
842 .next = rfcomm_seq_next,
843 .stop = rfcomm_seq_stop,
844 .show = rfcomm_seq_show
847 static int rfcomm_seq_open(struct inode *inode, struct file *file)
849 return seq_open(file, &rfcomm_seq_ops);
852 static struct file_operations rfcomm_seq_fops = {
853 .owner = THIS_MODULE,
854 .open = rfcomm_seq_open,
857 .release = seq_release,
860 static int __init rfcomm_sock_proc_init(void)
862 struct proc_dir_entry *p = create_proc_entry("sock", S_IRUGO, proc_bt_rfcomm);
865 p->proc_fops = &rfcomm_seq_fops;
869 static void __exit rfcomm_sock_proc_cleanup(void)
871 remove_proc_entry("sock", proc_bt_rfcomm);
874 #else /* CONFIG_PROC_FS */
876 static int __init rfcomm_sock_proc_init(void)
881 static void __exit rfcomm_sock_proc_cleanup(void)
885 #endif /* CONFIG_PROC_FS */
887 static struct proto_ops rfcomm_sock_ops = {
888 .family = PF_BLUETOOTH,
889 .owner = THIS_MODULE,
890 .release = rfcomm_sock_release,
891 .bind = rfcomm_sock_bind,
892 .connect = rfcomm_sock_connect,
893 .listen = rfcomm_sock_listen,
894 .accept = rfcomm_sock_accept,
895 .getname = rfcomm_sock_getname,
896 .sendmsg = rfcomm_sock_sendmsg,
897 .recvmsg = rfcomm_sock_recvmsg,
898 .shutdown = rfcomm_sock_shutdown,
899 .setsockopt = rfcomm_sock_setsockopt,
900 .getsockopt = rfcomm_sock_getsockopt,
901 .ioctl = rfcomm_sock_ioctl,
902 .poll = bt_sock_poll,
903 .socketpair = sock_no_socketpair,
907 static struct net_proto_family rfcomm_sock_family_ops = {
908 .family = PF_BLUETOOTH,
909 .owner = THIS_MODULE,
910 .create = rfcomm_sock_create
913 int __init rfcomm_init_sockets(void)
917 if ((err = bt_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops))) {
918 BT_ERR("RFCOMM socket layer registration failed. %d", err);
922 rfcomm_sock_proc_init();
924 BT_INFO("RFCOMM socket layer initialized");
928 void __exit rfcomm_cleanup_sockets(void)
932 rfcomm_sock_proc_cleanup();
934 /* Unregister socket, protocol and notifier */
935 if ((err = bt_sock_unregister(BTPROTO_RFCOMM)))
936 BT_ERR("RFCOMM socket layer unregistration failed. %d", err);