2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth SCO sockets. */
27 #include <linux/module.h>
28 #include <linux/debugfs.h>
29 #include <linux/seq_file.h>
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/sco.h>
35 static bool disable_esco;
37 static const struct proto_ops sco_sock_ops;
39 static struct bt_sock_list sco_sk_list = {
40 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
43 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
44 static void sco_chan_del(struct sock *sk, int err);
46 static void sco_sock_close(struct sock *sk);
47 static void sco_sock_kill(struct sock *sk);
49 /* ---- SCO timers ---- */
50 static void sco_sock_timeout(unsigned long arg)
52 struct sock *sk = (struct sock *) arg;
54 BT_DBG("sock %p state %d", sk, sk->sk_state);
57 sk->sk_err = ETIMEDOUT;
58 sk->sk_state_change(sk);
65 static void sco_sock_set_timer(struct sock *sk, long timeout)
67 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
68 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
71 static void sco_sock_clear_timer(struct sock *sk)
73 BT_DBG("sock %p state %d", sk, sk->sk_state);
74 sk_stop_timer(sk, &sk->sk_timer);
77 /* ---- SCO connections ---- */
78 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
80 struct hci_dev *hdev = hcon->hdev;
81 struct sco_conn *conn = hcon->sco_data;
86 conn = kzalloc(sizeof(struct sco_conn), GFP_ATOMIC);
90 spin_lock_init(&conn->lock);
92 hcon->sco_data = conn;
95 conn->src = &hdev->bdaddr;
96 conn->dst = &hcon->dst;
98 if (hdev->sco_mtu > 0)
99 conn->mtu = hdev->sco_mtu;
103 BT_DBG("hcon %p conn %p", hcon, conn);
108 static struct sock *sco_chan_get(struct sco_conn *conn)
110 struct sock *sk = NULL;
113 sco_conn_unlock(conn);
117 static int sco_conn_del(struct hci_conn *hcon, int err)
119 struct sco_conn *conn = hcon->sco_data;
125 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
128 sk = sco_chan_get(conn);
131 sco_sock_clear_timer(sk);
132 sco_chan_del(sk, err);
137 hcon->sco_data = NULL;
142 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
151 __sco_chan_add(conn, sk, parent);
153 sco_conn_unlock(conn);
157 static int sco_connect(struct sock *sk)
159 bdaddr_t *src = &bt_sk(sk)->src;
160 bdaddr_t *dst = &bt_sk(sk)->dst;
161 struct sco_conn *conn;
162 struct hci_conn *hcon;
163 struct hci_dev *hdev;
166 BT_DBG("%pMR -> %pMR", src, dst);
168 hdev = hci_get_route(dst, src);
170 return -EHOSTUNREACH;
174 if (lmp_esco_capable(hdev) && !disable_esco)
179 hcon = hci_connect(hdev, type, dst, BDADDR_BREDR, BT_SECURITY_LOW,
186 conn = sco_conn_add(hcon);
193 /* Update source addr of the socket */
194 bacpy(src, conn->src);
196 err = sco_chan_add(conn, sk, NULL);
200 if (hcon->state == BT_CONNECTED) {
201 sco_sock_clear_timer(sk);
202 sk->sk_state = BT_CONNECTED;
204 sk->sk_state = BT_CONNECT;
205 sco_sock_set_timer(sk, sk->sk_sndtimeo);
209 hci_dev_unlock(hdev);
214 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
216 struct sco_conn *conn = sco_pi(sk)->conn;
220 /* Check outgoing MTU */
224 BT_DBG("sk %p len %d", sk, len);
226 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
230 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
235 hci_send_sco(conn->hcon, skb);
240 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
242 struct sock *sk = sco_chan_get(conn);
247 BT_DBG("sk %p len %d", sk, skb->len);
249 if (sk->sk_state != BT_CONNECTED)
252 if (!sock_queue_rcv_skb(sk, skb))
259 /* -------- Socket interface ---------- */
260 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
264 sk_for_each(sk, &sco_sk_list.head) {
265 if (sk->sk_state != BT_LISTEN)
268 if (!bacmp(&bt_sk(sk)->src, ba))
275 /* Find socket listening on source bdaddr.
276 * Returns closest match.
278 static struct sock *sco_get_sock_listen(bdaddr_t *src)
280 struct sock *sk = NULL, *sk1 = NULL;
282 read_lock(&sco_sk_list.lock);
284 sk_for_each(sk, &sco_sk_list.head) {
285 if (sk->sk_state != BT_LISTEN)
289 if (!bacmp(&bt_sk(sk)->src, src))
293 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
297 read_unlock(&sco_sk_list.lock);
299 return sk ? sk : sk1;
302 static void sco_sock_destruct(struct sock *sk)
306 skb_queue_purge(&sk->sk_receive_queue);
307 skb_queue_purge(&sk->sk_write_queue);
310 static void sco_sock_cleanup_listen(struct sock *parent)
314 BT_DBG("parent %p", parent);
316 /* Close not yet accepted channels */
317 while ((sk = bt_accept_dequeue(parent, NULL))) {
322 parent->sk_state = BT_CLOSED;
323 sock_set_flag(parent, SOCK_ZAPPED);
326 /* Kill socket (only if zapped and orphan)
327 * Must be called on unlocked socket.
329 static void sco_sock_kill(struct sock *sk)
331 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
334 BT_DBG("sk %p state %d", sk, sk->sk_state);
336 /* Kill poor orphan */
337 bt_sock_unlink(&sco_sk_list, sk);
338 sock_set_flag(sk, SOCK_DEAD);
342 static void __sco_sock_close(struct sock *sk)
344 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
346 switch (sk->sk_state) {
348 sco_sock_cleanup_listen(sk);
353 if (sco_pi(sk)->conn->hcon) {
354 sk->sk_state = BT_DISCONN;
355 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
356 hci_conn_put(sco_pi(sk)->conn->hcon);
357 sco_pi(sk)->conn->hcon = NULL;
359 sco_chan_del(sk, ECONNRESET);
364 sco_chan_del(sk, ECONNRESET);
368 sock_set_flag(sk, SOCK_ZAPPED);
373 /* Must be called on unlocked socket. */
374 static void sco_sock_close(struct sock *sk)
376 sco_sock_clear_timer(sk);
378 __sco_sock_close(sk);
383 static void sco_sock_init(struct sock *sk, struct sock *parent)
388 sk->sk_type = parent->sk_type;
389 bt_sk(sk)->flags = bt_sk(parent)->flags;
390 security_sk_clone(parent, sk);
394 static struct proto sco_proto = {
396 .owner = THIS_MODULE,
397 .obj_size = sizeof(struct sco_pinfo)
400 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
404 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
408 sock_init_data(sock, sk);
409 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
411 sk->sk_destruct = sco_sock_destruct;
412 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
414 sock_reset_flag(sk, SOCK_ZAPPED);
416 sk->sk_protocol = proto;
417 sk->sk_state = BT_OPEN;
419 setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
421 bt_sock_link(&sco_sk_list, sk);
425 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
430 BT_DBG("sock %p", sock);
432 sock->state = SS_UNCONNECTED;
434 if (sock->type != SOCK_SEQPACKET)
435 return -ESOCKTNOSUPPORT;
437 sock->ops = &sco_sock_ops;
439 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
443 sco_sock_init(sk, NULL);
447 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
449 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
450 struct sock *sk = sock->sk;
453 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
455 if (!addr || addr->sa_family != AF_BLUETOOTH)
460 if (sk->sk_state != BT_OPEN) {
465 if (sk->sk_type != SOCK_SEQPACKET) {
470 bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
472 sk->sk_state = BT_BOUND;
479 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
481 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
482 struct sock *sk = sock->sk;
488 if (alen < sizeof(struct sockaddr_sco) ||
489 addr->sa_family != AF_BLUETOOTH)
492 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
495 if (sk->sk_type != SOCK_SEQPACKET)
500 /* Set destination address and psm */
501 bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
503 err = sco_connect(sk);
507 err = bt_sock_wait_state(sk, BT_CONNECTED,
508 sock_sndtimeo(sk, flags & O_NONBLOCK));
515 static int sco_sock_listen(struct socket *sock, int backlog)
517 struct sock *sk = sock->sk;
518 bdaddr_t *src = &bt_sk(sk)->src;
521 BT_DBG("sk %p backlog %d", sk, backlog);
525 if (sk->sk_state != BT_BOUND) {
530 if (sk->sk_type != SOCK_SEQPACKET) {
535 write_lock(&sco_sk_list.lock);
537 if (__sco_get_sock_listen_by_addr(src)) {
542 sk->sk_max_ack_backlog = backlog;
543 sk->sk_ack_backlog = 0;
545 sk->sk_state = BT_LISTEN;
548 write_unlock(&sco_sk_list.lock);
555 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
557 DECLARE_WAITQUEUE(wait, current);
558 struct sock *sk = sock->sk, *ch;
564 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
566 BT_DBG("sk %p timeo %ld", sk, timeo);
568 /* Wait for an incoming connection. (wake-one). */
569 add_wait_queue_exclusive(sk_sleep(sk), &wait);
571 set_current_state(TASK_INTERRUPTIBLE);
573 if (sk->sk_state != BT_LISTEN) {
578 ch = bt_accept_dequeue(sk, newsock);
587 if (signal_pending(current)) {
588 err = sock_intr_errno(timeo);
593 timeo = schedule_timeout(timeo);
596 __set_current_state(TASK_RUNNING);
597 remove_wait_queue(sk_sleep(sk), &wait);
602 newsock->state = SS_CONNECTED;
604 BT_DBG("new socket %p", ch);
611 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
613 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
614 struct sock *sk = sock->sk;
616 BT_DBG("sock %p, sk %p", sock, sk);
618 addr->sa_family = AF_BLUETOOTH;
619 *len = sizeof(struct sockaddr_sco);
622 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
624 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
629 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
630 struct msghdr *msg, size_t len)
632 struct sock *sk = sock->sk;
635 BT_DBG("sock %p, sk %p", sock, sk);
637 err = sock_error(sk);
641 if (msg->msg_flags & MSG_OOB)
646 if (sk->sk_state == BT_CONNECTED)
647 err = sco_send_frame(sk, msg, len);
655 static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
656 struct msghdr *msg, size_t len, int flags)
658 struct sock *sk = sock->sk;
659 struct sco_pinfo *pi = sco_pi(sk);
663 if (sk->sk_state == BT_CONNECT2 &&
664 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
665 hci_conn_accept(pi->conn->hcon, 0);
666 sk->sk_state = BT_CONFIG;
674 return bt_sock_recvmsg(iocb, sock, msg, len, flags);
677 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
679 struct sock *sk = sock->sk;
690 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
695 if (get_user(opt, (u32 __user *) optval)) {
701 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
703 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
715 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
717 struct sock *sk = sock->sk;
718 struct sco_options opts;
719 struct sco_conninfo cinfo;
724 if (get_user(len, optlen))
731 if (sk->sk_state != BT_CONNECTED) {
736 opts.mtu = sco_pi(sk)->conn->mtu;
738 BT_DBG("mtu %d", opts.mtu);
740 len = min_t(unsigned int, len, sizeof(opts));
741 if (copy_to_user(optval, (char *)&opts, len))
747 if (sk->sk_state != BT_CONNECTED) {
752 memset(&cinfo, 0, sizeof(cinfo));
753 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
754 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
756 len = min_t(unsigned int, len, sizeof(cinfo));
757 if (copy_to_user(optval, (char *)&cinfo, len))
771 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
773 struct sock *sk = sock->sk;
778 if (level == SOL_SCO)
779 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
781 if (get_user(len, optlen))
789 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
794 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
795 (u32 __user *) optval))
809 static int sco_sock_shutdown(struct socket *sock, int how)
811 struct sock *sk = sock->sk;
814 BT_DBG("sock %p, sk %p", sock, sk);
820 if (!sk->sk_shutdown) {
821 sk->sk_shutdown = SHUTDOWN_MASK;
822 sco_sock_clear_timer(sk);
823 __sco_sock_close(sk);
825 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
826 err = bt_sock_wait_state(sk, BT_CLOSED,
833 static int sco_sock_release(struct socket *sock)
835 struct sock *sk = sock->sk;
838 BT_DBG("sock %p, sk %p", sock, sk);
845 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
847 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
856 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
858 BT_DBG("conn %p", conn);
860 sco_pi(sk)->conn = conn;
864 bt_accept_enqueue(parent, sk);
868 * Must be called on the locked socket. */
869 static void sco_chan_del(struct sock *sk, int err)
871 struct sco_conn *conn;
873 conn = sco_pi(sk)->conn;
875 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
880 sco_pi(sk)->conn = NULL;
881 sco_conn_unlock(conn);
884 hci_conn_put(conn->hcon);
887 sk->sk_state = BT_CLOSED;
889 sk->sk_state_change(sk);
891 sock_set_flag(sk, SOCK_ZAPPED);
894 static void sco_conn_ready(struct sco_conn *conn)
897 struct sock *sk = conn->sk;
899 BT_DBG("conn %p", conn);
902 sco_sock_clear_timer(sk);
904 sk->sk_state = BT_CONNECTED;
905 sk->sk_state_change(sk);
910 parent = sco_get_sock_listen(conn->src);
912 sco_conn_unlock(conn);
916 bh_lock_sock(parent);
918 sk = sco_sock_alloc(sock_net(parent), NULL,
919 BTPROTO_SCO, GFP_ATOMIC);
921 bh_unlock_sock(parent);
922 sco_conn_unlock(conn);
926 sco_sock_init(sk, parent);
928 bacpy(&bt_sk(sk)->src, conn->src);
929 bacpy(&bt_sk(sk)->dst, conn->dst);
931 hci_conn_hold(conn->hcon);
932 __sco_chan_add(conn, sk, parent);
934 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
935 sk->sk_state = BT_CONNECT2;
937 sk->sk_state = BT_CONNECTED;
940 parent->sk_data_ready(parent, 1);
942 bh_unlock_sock(parent);
944 sco_conn_unlock(conn);
948 /* ----- SCO interface with lower layer (HCI) ----- */
949 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
954 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
956 /* Find listening sockets */
957 read_lock(&sco_sk_list.lock);
958 sk_for_each(sk, &sco_sk_list.head) {
959 if (sk->sk_state != BT_LISTEN)
962 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
963 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
966 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
967 *flags |= HCI_PROTO_DEFER;
971 read_unlock(&sco_sk_list.lock);
976 void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
978 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
980 struct sco_conn *conn;
982 conn = sco_conn_add(hcon);
984 sco_conn_ready(conn);
986 sco_conn_del(hcon, bt_to_errno(status));
989 void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
991 BT_DBG("hcon %p reason %d", hcon, reason);
993 sco_conn_del(hcon, bt_to_errno(reason));
996 int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
998 struct sco_conn *conn = hcon->sco_data;
1003 BT_DBG("conn %p len %d", conn, skb->len);
1006 sco_recv_frame(conn, skb);
1015 static int sco_debugfs_show(struct seq_file *f, void *p)
1019 read_lock(&sco_sk_list.lock);
1021 sk_for_each(sk, &sco_sk_list.head) {
1022 seq_printf(f, "%pMR %pMR %d\n", &bt_sk(sk)->src,
1023 &bt_sk(sk)->dst, sk->sk_state);
1026 read_unlock(&sco_sk_list.lock);
1031 static int sco_debugfs_open(struct inode *inode, struct file *file)
1033 return single_open(file, sco_debugfs_show, inode->i_private);
1036 static const struct file_operations sco_debugfs_fops = {
1037 .open = sco_debugfs_open,
1039 .llseek = seq_lseek,
1040 .release = single_release,
1043 static struct dentry *sco_debugfs;
1045 static const struct proto_ops sco_sock_ops = {
1046 .family = PF_BLUETOOTH,
1047 .owner = THIS_MODULE,
1048 .release = sco_sock_release,
1049 .bind = sco_sock_bind,
1050 .connect = sco_sock_connect,
1051 .listen = sco_sock_listen,
1052 .accept = sco_sock_accept,
1053 .getname = sco_sock_getname,
1054 .sendmsg = sco_sock_sendmsg,
1055 .recvmsg = sco_sock_recvmsg,
1056 .poll = bt_sock_poll,
1057 .ioctl = bt_sock_ioctl,
1058 .mmap = sock_no_mmap,
1059 .socketpair = sock_no_socketpair,
1060 .shutdown = sco_sock_shutdown,
1061 .setsockopt = sco_sock_setsockopt,
1062 .getsockopt = sco_sock_getsockopt
1065 static const struct net_proto_family sco_sock_family_ops = {
1066 .family = PF_BLUETOOTH,
1067 .owner = THIS_MODULE,
1068 .create = sco_sock_create,
1071 int __init sco_init(void)
1075 err = proto_register(&sco_proto, 0);
1079 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1081 BT_ERR("SCO socket registration failed");
1085 err = bt_procfs_init(THIS_MODULE, &init_net, "sco", &sco_sk_list, NULL);
1087 BT_ERR("Failed to create SCO proc file");
1088 bt_sock_unregister(BTPROTO_SCO);
1093 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1094 NULL, &sco_debugfs_fops);
1096 BT_ERR("Failed to create SCO debug file");
1099 BT_INFO("SCO socket layer initialized");
1104 proto_unregister(&sco_proto);
1108 void __exit sco_exit(void)
1110 bt_procfs_cleanup(&init_net, "sco");
1112 debugfs_remove(sco_debugfs);
1114 if (bt_sock_unregister(BTPROTO_SCO) < 0)
1115 BT_ERR("SCO socket unregistration failed");
1117 proto_unregister(&sco_proto);
1120 module_param(disable_esco, bool, 0644);
1121 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");