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 sco_pi(sk)->conn = NULL;
138 sco_conn_unlock(conn);
141 hci_conn_put(conn->hcon);
146 hcon->sco_data = NULL;
151 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
160 __sco_chan_add(conn, sk, parent);
162 sco_conn_unlock(conn);
166 static int sco_connect(struct sock *sk)
168 bdaddr_t *src = &bt_sk(sk)->src;
169 bdaddr_t *dst = &bt_sk(sk)->dst;
170 struct sco_conn *conn;
171 struct hci_conn *hcon;
172 struct hci_dev *hdev;
175 BT_DBG("%s -> %s", batostr(src), batostr(dst));
177 hdev = hci_get_route(dst, src);
179 return -EHOSTUNREACH;
183 if (lmp_esco_capable(hdev) && !disable_esco)
188 hcon = hci_connect(hdev, type, dst, BDADDR_BREDR, BT_SECURITY_LOW,
195 conn = sco_conn_add(hcon);
202 /* Update source addr of the socket */
203 bacpy(src, conn->src);
205 err = sco_chan_add(conn, sk, NULL);
209 if (hcon->state == BT_CONNECTED) {
210 sco_sock_clear_timer(sk);
211 sk->sk_state = BT_CONNECTED;
213 sk->sk_state = BT_CONNECT;
214 sco_sock_set_timer(sk, sk->sk_sndtimeo);
218 hci_dev_unlock(hdev);
223 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
225 struct sco_conn *conn = sco_pi(sk)->conn;
229 /* Check outgoing MTU */
233 BT_DBG("sk %p len %d", sk, len);
235 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
239 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
244 hci_send_sco(conn->hcon, skb);
249 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
251 struct sock *sk = sco_chan_get(conn);
256 BT_DBG("sk %p len %d", sk, skb->len);
258 if (sk->sk_state != BT_CONNECTED)
261 if (!sock_queue_rcv_skb(sk, skb))
268 /* -------- Socket interface ---------- */
269 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
271 struct hlist_node *node;
274 sk_for_each(sk, node, &sco_sk_list.head) {
275 if (sk->sk_state != BT_LISTEN)
278 if (!bacmp(&bt_sk(sk)->src, ba))
285 /* Find socket listening on source bdaddr.
286 * Returns closest match.
288 static struct sock *sco_get_sock_listen(bdaddr_t *src)
290 struct sock *sk = NULL, *sk1 = NULL;
291 struct hlist_node *node;
293 read_lock(&sco_sk_list.lock);
295 sk_for_each(sk, node, &sco_sk_list.head) {
296 if (sk->sk_state != BT_LISTEN)
300 if (!bacmp(&bt_sk(sk)->src, src))
304 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
308 read_unlock(&sco_sk_list.lock);
310 return node ? sk : sk1;
313 static void sco_sock_destruct(struct sock *sk)
317 skb_queue_purge(&sk->sk_receive_queue);
318 skb_queue_purge(&sk->sk_write_queue);
321 static void sco_sock_cleanup_listen(struct sock *parent)
325 BT_DBG("parent %p", parent);
327 /* Close not yet accepted channels */
328 while ((sk = bt_accept_dequeue(parent, NULL))) {
333 parent->sk_state = BT_CLOSED;
334 sock_set_flag(parent, SOCK_ZAPPED);
337 /* Kill socket (only if zapped and orphan)
338 * Must be called on unlocked socket.
340 static void sco_sock_kill(struct sock *sk)
342 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
345 BT_DBG("sk %p state %d", sk, sk->sk_state);
347 /* Kill poor orphan */
348 bt_sock_unlink(&sco_sk_list, sk);
349 sock_set_flag(sk, SOCK_DEAD);
353 static void __sco_sock_close(struct sock *sk)
355 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
357 switch (sk->sk_state) {
359 sco_sock_cleanup_listen(sk);
364 if (sco_pi(sk)->conn) {
365 sk->sk_state = BT_DISCONN;
366 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
367 hci_conn_put(sco_pi(sk)->conn->hcon);
368 sco_pi(sk)->conn->hcon = NULL;
370 sco_chan_del(sk, ECONNRESET);
375 sco_chan_del(sk, ECONNRESET);
379 sock_set_flag(sk, SOCK_ZAPPED);
384 /* Must be called on unlocked socket. */
385 static void sco_sock_close(struct sock *sk)
387 sco_sock_clear_timer(sk);
389 __sco_sock_close(sk);
394 static void sco_sock_init(struct sock *sk, struct sock *parent)
399 sk->sk_type = parent->sk_type;
400 security_sk_clone(parent, sk);
404 static struct proto sco_proto = {
406 .owner = THIS_MODULE,
407 .obj_size = sizeof(struct sco_pinfo)
410 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
414 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
418 sock_init_data(sock, sk);
419 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
421 sk->sk_destruct = sco_sock_destruct;
422 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
424 sock_reset_flag(sk, SOCK_ZAPPED);
426 sk->sk_protocol = proto;
427 sk->sk_state = BT_OPEN;
429 setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
431 bt_sock_link(&sco_sk_list, sk);
435 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
440 BT_DBG("sock %p", sock);
442 sock->state = SS_UNCONNECTED;
444 if (sock->type != SOCK_SEQPACKET)
445 return -ESOCKTNOSUPPORT;
447 sock->ops = &sco_sock_ops;
449 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
453 sco_sock_init(sk, NULL);
457 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
459 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
460 struct sock *sk = sock->sk;
463 BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
465 if (!addr || addr->sa_family != AF_BLUETOOTH)
470 if (sk->sk_state != BT_OPEN) {
475 if (sk->sk_type != SOCK_SEQPACKET) {
480 bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
482 sk->sk_state = BT_BOUND;
489 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
491 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
492 struct sock *sk = sock->sk;
498 if (alen < sizeof(struct sockaddr_sco) ||
499 addr->sa_family != AF_BLUETOOTH)
502 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
505 if (sk->sk_type != SOCK_SEQPACKET)
510 /* Set destination address and psm */
511 bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
513 err = sco_connect(sk);
517 err = bt_sock_wait_state(sk, BT_CONNECTED,
518 sock_sndtimeo(sk, flags & O_NONBLOCK));
525 static int sco_sock_listen(struct socket *sock, int backlog)
527 struct sock *sk = sock->sk;
528 bdaddr_t *src = &bt_sk(sk)->src;
531 BT_DBG("sk %p backlog %d", sk, backlog);
535 if (sk->sk_state != BT_BOUND) {
540 if (sk->sk_type != SOCK_SEQPACKET) {
545 write_lock(&sco_sk_list.lock);
547 if (__sco_get_sock_listen_by_addr(src)) {
552 sk->sk_max_ack_backlog = backlog;
553 sk->sk_ack_backlog = 0;
555 sk->sk_state = BT_LISTEN;
558 write_unlock(&sco_sk_list.lock);
565 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
567 DECLARE_WAITQUEUE(wait, current);
568 struct sock *sk = sock->sk, *ch;
574 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
576 BT_DBG("sk %p timeo %ld", sk, timeo);
578 /* Wait for an incoming connection. (wake-one). */
579 add_wait_queue_exclusive(sk_sleep(sk), &wait);
581 set_current_state(TASK_INTERRUPTIBLE);
583 if (sk->sk_state != BT_LISTEN) {
588 ch = bt_accept_dequeue(sk, newsock);
597 if (signal_pending(current)) {
598 err = sock_intr_errno(timeo);
603 timeo = schedule_timeout(timeo);
606 __set_current_state(TASK_RUNNING);
607 remove_wait_queue(sk_sleep(sk), &wait);
612 newsock->state = SS_CONNECTED;
614 BT_DBG("new socket %p", ch);
621 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
623 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
624 struct sock *sk = sock->sk;
626 BT_DBG("sock %p, sk %p", sock, sk);
628 addr->sa_family = AF_BLUETOOTH;
629 *len = sizeof(struct sockaddr_sco);
632 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
634 bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
639 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
640 struct msghdr *msg, size_t len)
642 struct sock *sk = sock->sk;
645 BT_DBG("sock %p, sk %p", sock, sk);
647 err = sock_error(sk);
651 if (msg->msg_flags & MSG_OOB)
656 if (sk->sk_state == BT_CONNECTED)
657 err = sco_send_frame(sk, msg, len);
665 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
667 struct sock *sk = sock->sk;
684 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
686 struct sock *sk = sock->sk;
687 struct sco_options opts;
688 struct sco_conninfo cinfo;
693 if (get_user(len, optlen))
700 if (sk->sk_state != BT_CONNECTED) {
705 opts.mtu = sco_pi(sk)->conn->mtu;
707 BT_DBG("mtu %d", opts.mtu);
709 len = min_t(unsigned int, len, sizeof(opts));
710 if (copy_to_user(optval, (char *)&opts, len))
716 if (sk->sk_state != BT_CONNECTED) {
721 memset(&cinfo, 0, sizeof(cinfo));
722 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
723 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
725 len = min_t(unsigned int, len, sizeof(cinfo));
726 if (copy_to_user(optval, (char *)&cinfo, len))
740 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
742 struct sock *sk = sock->sk;
747 if (level == SOL_SCO)
748 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
750 if (get_user(len, optlen))
765 static int sco_sock_shutdown(struct socket *sock, int how)
767 struct sock *sk = sock->sk;
770 BT_DBG("sock %p, sk %p", sock, sk);
776 if (!sk->sk_shutdown) {
777 sk->sk_shutdown = SHUTDOWN_MASK;
778 sco_sock_clear_timer(sk);
779 __sco_sock_close(sk);
781 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
782 err = bt_sock_wait_state(sk, BT_CLOSED,
789 static int sco_sock_release(struct socket *sock)
791 struct sock *sk = sock->sk;
794 BT_DBG("sock %p, sk %p", sock, sk);
801 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
803 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
812 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
814 BT_DBG("conn %p", conn);
816 sco_pi(sk)->conn = conn;
820 bt_accept_enqueue(parent, sk);
824 * Must be called on the locked socket. */
825 static void sco_chan_del(struct sock *sk, int err)
827 struct sco_conn *conn;
829 conn = sco_pi(sk)->conn;
831 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
833 sk->sk_state = BT_CLOSED;
835 sk->sk_state_change(sk);
837 sock_set_flag(sk, SOCK_ZAPPED);
840 static void sco_conn_ready(struct sco_conn *conn)
843 struct sock *sk = conn->sk;
845 BT_DBG("conn %p", conn);
850 sco_sock_clear_timer(sk);
852 sk->sk_state = BT_CONNECTED;
853 sk->sk_state_change(sk);
856 parent = sco_get_sock_listen(conn->src);
860 bh_lock_sock(parent);
862 sk = sco_sock_alloc(sock_net(parent), NULL,
863 BTPROTO_SCO, GFP_ATOMIC);
865 bh_unlock_sock(parent);
869 sco_sock_init(sk, parent);
871 bacpy(&bt_sk(sk)->src, conn->src);
872 bacpy(&bt_sk(sk)->dst, conn->dst);
874 hci_conn_hold(conn->hcon);
875 __sco_chan_add(conn, sk, parent);
877 sk->sk_state = BT_CONNECTED;
880 parent->sk_data_ready(parent, 1);
882 bh_unlock_sock(parent);
886 sco_conn_unlock(conn);
889 /* ----- SCO interface with lower layer (HCI) ----- */
890 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
893 struct hlist_node *node;
896 BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
898 /* Find listening sockets */
899 read_lock(&sco_sk_list.lock);
900 sk_for_each(sk, node, &sco_sk_list.head) {
901 if (sk->sk_state != BT_LISTEN)
904 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
905 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
910 read_unlock(&sco_sk_list.lock);
915 void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
917 BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
919 struct sco_conn *conn;
921 conn = sco_conn_add(hcon);
923 sco_conn_ready(conn);
925 sco_conn_del(hcon, bt_to_errno(status));
928 void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
930 BT_DBG("hcon %p reason %d", hcon, reason);
932 sco_conn_del(hcon, bt_to_errno(reason));
935 int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
937 struct sco_conn *conn = hcon->sco_data;
942 BT_DBG("conn %p len %d", conn, skb->len);
945 sco_recv_frame(conn, skb);
954 static int sco_debugfs_show(struct seq_file *f, void *p)
957 struct hlist_node *node;
959 read_lock(&sco_sk_list.lock);
961 sk_for_each(sk, node, &sco_sk_list.head) {
962 seq_printf(f, "%s %s %d\n", batostr(&bt_sk(sk)->src),
963 batostr(&bt_sk(sk)->dst), sk->sk_state);
966 read_unlock(&sco_sk_list.lock);
971 static int sco_debugfs_open(struct inode *inode, struct file *file)
973 return single_open(file, sco_debugfs_show, inode->i_private);
976 static const struct file_operations sco_debugfs_fops = {
977 .open = sco_debugfs_open,
980 .release = single_release,
983 static struct dentry *sco_debugfs;
985 static const struct proto_ops sco_sock_ops = {
986 .family = PF_BLUETOOTH,
987 .owner = THIS_MODULE,
988 .release = sco_sock_release,
989 .bind = sco_sock_bind,
990 .connect = sco_sock_connect,
991 .listen = sco_sock_listen,
992 .accept = sco_sock_accept,
993 .getname = sco_sock_getname,
994 .sendmsg = sco_sock_sendmsg,
995 .recvmsg = bt_sock_recvmsg,
996 .poll = bt_sock_poll,
997 .ioctl = bt_sock_ioctl,
998 .mmap = sock_no_mmap,
999 .socketpair = sock_no_socketpair,
1000 .shutdown = sco_sock_shutdown,
1001 .setsockopt = sco_sock_setsockopt,
1002 .getsockopt = sco_sock_getsockopt
1005 static const struct net_proto_family sco_sock_family_ops = {
1006 .family = PF_BLUETOOTH,
1007 .owner = THIS_MODULE,
1008 .create = sco_sock_create,
1011 int __init sco_init(void)
1015 err = proto_register(&sco_proto, 0);
1019 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1021 BT_ERR("SCO socket registration failed");
1025 err = bt_procfs_init(THIS_MODULE, &init_net, "sco", &sco_sk_list, NULL);
1027 BT_ERR("Failed to create SCO proc file");
1028 bt_sock_unregister(BTPROTO_SCO);
1033 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1034 NULL, &sco_debugfs_fops);
1036 BT_ERR("Failed to create SCO debug file");
1039 BT_INFO("SCO socket layer initialized");
1044 proto_unregister(&sco_proto);
1048 void __exit sco_exit(void)
1050 bt_procfs_cleanup(&init_net, "sco");
1052 debugfs_remove(sco_debugfs);
1054 if (bt_sock_unregister(BTPROTO_SCO) < 0)
1055 BT_ERR("SCO socket unregistration failed");
1057 proto_unregister(&sco_proto);
1060 module_param(disable_esco, bool, 0644);
1061 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");