Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rkuo/linux...
[deliverable/linux.git] / net / bluetooth / sco.c
1 /*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
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;
10
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.
19
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.
23 */
24
25 /* Bluetooth SCO sockets. */
26
27 #include <linux/module.h>
28 #include <linux/debugfs.h>
29 #include <linux/seq_file.h>
30
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/sco.h>
34
35 static bool disable_esco;
36
37 static const struct proto_ops sco_sock_ops;
38
39 static struct bt_sock_list sco_sk_list = {
40 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
41 };
42
43 /* ---- SCO connections ---- */
44 struct sco_conn {
45 struct hci_conn *hcon;
46
47 spinlock_t lock;
48 struct sock *sk;
49
50 unsigned int mtu;
51 };
52
53 #define sco_conn_lock(c) spin_lock(&c->lock);
54 #define sco_conn_unlock(c) spin_unlock(&c->lock);
55
56 static void sco_sock_close(struct sock *sk);
57 static void sco_sock_kill(struct sock *sk);
58
59 /* ----- SCO socket info ----- */
60 #define sco_pi(sk) ((struct sco_pinfo *) sk)
61
62 struct sco_pinfo {
63 struct bt_sock bt;
64 bdaddr_t src;
65 bdaddr_t dst;
66 __u32 flags;
67 __u16 setting;
68 struct sco_conn *conn;
69 };
70
71 /* ---- SCO timers ---- */
72 #define SCO_CONN_TIMEOUT (HZ * 40)
73 #define SCO_DISCONN_TIMEOUT (HZ * 2)
74
75 static void sco_sock_timeout(unsigned long arg)
76 {
77 struct sock *sk = (struct sock *) arg;
78
79 BT_DBG("sock %p state %d", sk, sk->sk_state);
80
81 bh_lock_sock(sk);
82 sk->sk_err = ETIMEDOUT;
83 sk->sk_state_change(sk);
84 bh_unlock_sock(sk);
85
86 sco_sock_kill(sk);
87 sock_put(sk);
88 }
89
90 static void sco_sock_set_timer(struct sock *sk, long timeout)
91 {
92 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
93 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
94 }
95
96 static void sco_sock_clear_timer(struct sock *sk)
97 {
98 BT_DBG("sock %p state %d", sk, sk->sk_state);
99 sk_stop_timer(sk, &sk->sk_timer);
100 }
101
102 /* ---- SCO connections ---- */
103 static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
104 {
105 struct hci_dev *hdev = hcon->hdev;
106 struct sco_conn *conn = hcon->sco_data;
107
108 if (conn)
109 return conn;
110
111 conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
112 if (!conn)
113 return NULL;
114
115 spin_lock_init(&conn->lock);
116
117 hcon->sco_data = conn;
118 conn->hcon = hcon;
119
120 if (hdev->sco_mtu > 0)
121 conn->mtu = hdev->sco_mtu;
122 else
123 conn->mtu = 60;
124
125 BT_DBG("hcon %p conn %p", hcon, conn);
126
127 return conn;
128 }
129
130 /* Delete channel.
131 * Must be called on the locked socket. */
132 static void sco_chan_del(struct sock *sk, int err)
133 {
134 struct sco_conn *conn;
135
136 conn = sco_pi(sk)->conn;
137
138 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
139
140 if (conn) {
141 sco_conn_lock(conn);
142 conn->sk = NULL;
143 sco_pi(sk)->conn = NULL;
144 sco_conn_unlock(conn);
145
146 if (conn->hcon)
147 hci_conn_drop(conn->hcon);
148 }
149
150 sk->sk_state = BT_CLOSED;
151 sk->sk_err = err;
152 sk->sk_state_change(sk);
153
154 sock_set_flag(sk, SOCK_ZAPPED);
155 }
156
157 static void sco_conn_del(struct hci_conn *hcon, int err)
158 {
159 struct sco_conn *conn = hcon->sco_data;
160 struct sock *sk;
161
162 if (!conn)
163 return;
164
165 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
166
167 /* Kill socket */
168 sco_conn_lock(conn);
169 sk = conn->sk;
170 sco_conn_unlock(conn);
171
172 if (sk) {
173 bh_lock_sock(sk);
174 sco_sock_clear_timer(sk);
175 sco_chan_del(sk, err);
176 bh_unlock_sock(sk);
177 sco_sock_kill(sk);
178 }
179
180 hcon->sco_data = NULL;
181 kfree(conn);
182 }
183
184 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
185 {
186 BT_DBG("conn %p", conn);
187
188 sco_pi(sk)->conn = conn;
189 conn->sk = sk;
190
191 if (parent)
192 bt_accept_enqueue(parent, sk);
193 }
194
195 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
196 struct sock *parent)
197 {
198 int err = 0;
199
200 sco_conn_lock(conn);
201 if (conn->sk)
202 err = -EBUSY;
203 else
204 __sco_chan_add(conn, sk, parent);
205
206 sco_conn_unlock(conn);
207 return err;
208 }
209
210 static int sco_connect(struct sock *sk)
211 {
212 struct sco_conn *conn;
213 struct hci_conn *hcon;
214 struct hci_dev *hdev;
215 int err, type;
216
217 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
218
219 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src);
220 if (!hdev)
221 return -EHOSTUNREACH;
222
223 hci_dev_lock(hdev);
224
225 if (lmp_esco_capable(hdev) && !disable_esco)
226 type = ESCO_LINK;
227 else
228 type = SCO_LINK;
229
230 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
231 (!lmp_transp_capable(hdev) || !lmp_esco_capable(hdev))) {
232 err = -EOPNOTSUPP;
233 goto done;
234 }
235
236 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
237 sco_pi(sk)->setting);
238 if (IS_ERR(hcon)) {
239 err = PTR_ERR(hcon);
240 goto done;
241 }
242
243 conn = sco_conn_add(hcon);
244 if (!conn) {
245 hci_conn_drop(hcon);
246 err = -ENOMEM;
247 goto done;
248 }
249
250 /* Update source addr of the socket */
251 bacpy(&sco_pi(sk)->src, &hcon->src);
252
253 err = sco_chan_add(conn, sk, NULL);
254 if (err)
255 goto done;
256
257 if (hcon->state == BT_CONNECTED) {
258 sco_sock_clear_timer(sk);
259 sk->sk_state = BT_CONNECTED;
260 } else {
261 sk->sk_state = BT_CONNECT;
262 sco_sock_set_timer(sk, sk->sk_sndtimeo);
263 }
264
265 done:
266 hci_dev_unlock(hdev);
267 hci_dev_put(hdev);
268 return err;
269 }
270
271 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
272 {
273 struct sco_conn *conn = sco_pi(sk)->conn;
274 struct sk_buff *skb;
275 int err;
276
277 /* Check outgoing MTU */
278 if (len > conn->mtu)
279 return -EINVAL;
280
281 BT_DBG("sk %p len %d", sk, len);
282
283 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
284 if (!skb)
285 return err;
286
287 if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
288 kfree_skb(skb);
289 return -EFAULT;
290 }
291
292 hci_send_sco(conn->hcon, skb);
293
294 return len;
295 }
296
297 static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
298 {
299 struct sock *sk;
300
301 sco_conn_lock(conn);
302 sk = conn->sk;
303 sco_conn_unlock(conn);
304
305 if (!sk)
306 goto drop;
307
308 BT_DBG("sk %p len %d", sk, skb->len);
309
310 if (sk->sk_state != BT_CONNECTED)
311 goto drop;
312
313 if (!sock_queue_rcv_skb(sk, skb))
314 return;
315
316 drop:
317 kfree_skb(skb);
318 }
319
320 /* -------- Socket interface ---------- */
321 static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
322 {
323 struct sock *sk;
324
325 sk_for_each(sk, &sco_sk_list.head) {
326 if (sk->sk_state != BT_LISTEN)
327 continue;
328
329 if (!bacmp(&sco_pi(sk)->src, ba))
330 return sk;
331 }
332
333 return NULL;
334 }
335
336 /* Find socket listening on source bdaddr.
337 * Returns closest match.
338 */
339 static struct sock *sco_get_sock_listen(bdaddr_t *src)
340 {
341 struct sock *sk = NULL, *sk1 = NULL;
342
343 read_lock(&sco_sk_list.lock);
344
345 sk_for_each(sk, &sco_sk_list.head) {
346 if (sk->sk_state != BT_LISTEN)
347 continue;
348
349 /* Exact match. */
350 if (!bacmp(&sco_pi(sk)->src, src))
351 break;
352
353 /* Closest match */
354 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
355 sk1 = sk;
356 }
357
358 read_unlock(&sco_sk_list.lock);
359
360 return sk ? sk : sk1;
361 }
362
363 static void sco_sock_destruct(struct sock *sk)
364 {
365 BT_DBG("sk %p", sk);
366
367 skb_queue_purge(&sk->sk_receive_queue);
368 skb_queue_purge(&sk->sk_write_queue);
369 }
370
371 static void sco_sock_cleanup_listen(struct sock *parent)
372 {
373 struct sock *sk;
374
375 BT_DBG("parent %p", parent);
376
377 /* Close not yet accepted channels */
378 while ((sk = bt_accept_dequeue(parent, NULL))) {
379 sco_sock_close(sk);
380 sco_sock_kill(sk);
381 }
382
383 parent->sk_state = BT_CLOSED;
384 sock_set_flag(parent, SOCK_ZAPPED);
385 }
386
387 /* Kill socket (only if zapped and orphan)
388 * Must be called on unlocked socket.
389 */
390 static void sco_sock_kill(struct sock *sk)
391 {
392 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
393 return;
394
395 BT_DBG("sk %p state %d", sk, sk->sk_state);
396
397 /* Kill poor orphan */
398 bt_sock_unlink(&sco_sk_list, sk);
399 sock_set_flag(sk, SOCK_DEAD);
400 sock_put(sk);
401 }
402
403 static void __sco_sock_close(struct sock *sk)
404 {
405 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
406
407 switch (sk->sk_state) {
408 case BT_LISTEN:
409 sco_sock_cleanup_listen(sk);
410 break;
411
412 case BT_CONNECTED:
413 case BT_CONFIG:
414 if (sco_pi(sk)->conn->hcon) {
415 sk->sk_state = BT_DISCONN;
416 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
417 hci_conn_drop(sco_pi(sk)->conn->hcon);
418 sco_pi(sk)->conn->hcon = NULL;
419 } else
420 sco_chan_del(sk, ECONNRESET);
421 break;
422
423 case BT_CONNECT2:
424 case BT_CONNECT:
425 case BT_DISCONN:
426 sco_chan_del(sk, ECONNRESET);
427 break;
428
429 default:
430 sock_set_flag(sk, SOCK_ZAPPED);
431 break;
432 }
433 }
434
435 /* Must be called on unlocked socket. */
436 static void sco_sock_close(struct sock *sk)
437 {
438 sco_sock_clear_timer(sk);
439 lock_sock(sk);
440 __sco_sock_close(sk);
441 release_sock(sk);
442 sco_sock_kill(sk);
443 }
444
445 static void sco_sock_init(struct sock *sk, struct sock *parent)
446 {
447 BT_DBG("sk %p", sk);
448
449 if (parent) {
450 sk->sk_type = parent->sk_type;
451 bt_sk(sk)->flags = bt_sk(parent)->flags;
452 security_sk_clone(parent, sk);
453 }
454 }
455
456 static struct proto sco_proto = {
457 .name = "SCO",
458 .owner = THIS_MODULE,
459 .obj_size = sizeof(struct sco_pinfo)
460 };
461
462 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio, int kern)
463 {
464 struct sock *sk;
465
466 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
467 if (!sk)
468 return NULL;
469
470 sock_init_data(sock, sk);
471 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
472
473 sk->sk_destruct = sco_sock_destruct;
474 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
475
476 sock_reset_flag(sk, SOCK_ZAPPED);
477
478 sk->sk_protocol = proto;
479 sk->sk_state = BT_OPEN;
480
481 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
482
483 setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
484
485 bt_sock_link(&sco_sk_list, sk);
486 return sk;
487 }
488
489 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
490 int kern)
491 {
492 struct sock *sk;
493
494 BT_DBG("sock %p", sock);
495
496 sock->state = SS_UNCONNECTED;
497
498 if (sock->type != SOCK_SEQPACKET)
499 return -ESOCKTNOSUPPORT;
500
501 sock->ops = &sco_sock_ops;
502
503 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
504 if (!sk)
505 return -ENOMEM;
506
507 sco_sock_init(sk, NULL);
508 return 0;
509 }
510
511 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
512 {
513 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
514 struct sock *sk = sock->sk;
515 int err = 0;
516
517 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
518
519 if (!addr || addr->sa_family != AF_BLUETOOTH)
520 return -EINVAL;
521
522 lock_sock(sk);
523
524 if (sk->sk_state != BT_OPEN) {
525 err = -EBADFD;
526 goto done;
527 }
528
529 if (sk->sk_type != SOCK_SEQPACKET) {
530 err = -EINVAL;
531 goto done;
532 }
533
534 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
535
536 sk->sk_state = BT_BOUND;
537
538 done:
539 release_sock(sk);
540 return err;
541 }
542
543 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
544 {
545 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
546 struct sock *sk = sock->sk;
547 int err;
548
549 BT_DBG("sk %p", sk);
550
551 if (alen < sizeof(struct sockaddr_sco) ||
552 addr->sa_family != AF_BLUETOOTH)
553 return -EINVAL;
554
555 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
556 return -EBADFD;
557
558 if (sk->sk_type != SOCK_SEQPACKET)
559 return -EINVAL;
560
561 lock_sock(sk);
562
563 /* Set destination address and psm */
564 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
565
566 err = sco_connect(sk);
567 if (err)
568 goto done;
569
570 err = bt_sock_wait_state(sk, BT_CONNECTED,
571 sock_sndtimeo(sk, flags & O_NONBLOCK));
572
573 done:
574 release_sock(sk);
575 return err;
576 }
577
578 static int sco_sock_listen(struct socket *sock, int backlog)
579 {
580 struct sock *sk = sock->sk;
581 bdaddr_t *src = &sco_pi(sk)->src;
582 int err = 0;
583
584 BT_DBG("sk %p backlog %d", sk, backlog);
585
586 lock_sock(sk);
587
588 if (sk->sk_state != BT_BOUND) {
589 err = -EBADFD;
590 goto done;
591 }
592
593 if (sk->sk_type != SOCK_SEQPACKET) {
594 err = -EINVAL;
595 goto done;
596 }
597
598 write_lock(&sco_sk_list.lock);
599
600 if (__sco_get_sock_listen_by_addr(src)) {
601 err = -EADDRINUSE;
602 goto unlock;
603 }
604
605 sk->sk_max_ack_backlog = backlog;
606 sk->sk_ack_backlog = 0;
607
608 sk->sk_state = BT_LISTEN;
609
610 unlock:
611 write_unlock(&sco_sk_list.lock);
612
613 done:
614 release_sock(sk);
615 return err;
616 }
617
618 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
619 {
620 DEFINE_WAIT_FUNC(wait, woken_wake_function);
621 struct sock *sk = sock->sk, *ch;
622 long timeo;
623 int err = 0;
624
625 lock_sock(sk);
626
627 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
628
629 BT_DBG("sk %p timeo %ld", sk, timeo);
630
631 /* Wait for an incoming connection. (wake-one). */
632 add_wait_queue_exclusive(sk_sleep(sk), &wait);
633 while (1) {
634 if (sk->sk_state != BT_LISTEN) {
635 err = -EBADFD;
636 break;
637 }
638
639 ch = bt_accept_dequeue(sk, newsock);
640 if (ch)
641 break;
642
643 if (!timeo) {
644 err = -EAGAIN;
645 break;
646 }
647
648 if (signal_pending(current)) {
649 err = sock_intr_errno(timeo);
650 break;
651 }
652
653 release_sock(sk);
654
655 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
656 lock_sock(sk);
657 }
658 remove_wait_queue(sk_sleep(sk), &wait);
659
660 if (err)
661 goto done;
662
663 newsock->state = SS_CONNECTED;
664
665 BT_DBG("new socket %p", ch);
666
667 done:
668 release_sock(sk);
669 return err;
670 }
671
672 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
673 {
674 struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
675 struct sock *sk = sock->sk;
676
677 BT_DBG("sock %p, sk %p", sock, sk);
678
679 addr->sa_family = AF_BLUETOOTH;
680 *len = sizeof(struct sockaddr_sco);
681
682 if (peer)
683 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
684 else
685 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
686
687 return 0;
688 }
689
690 static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
691 size_t len)
692 {
693 struct sock *sk = sock->sk;
694 int err;
695
696 BT_DBG("sock %p, sk %p", sock, sk);
697
698 err = sock_error(sk);
699 if (err)
700 return err;
701
702 if (msg->msg_flags & MSG_OOB)
703 return -EOPNOTSUPP;
704
705 lock_sock(sk);
706
707 if (sk->sk_state == BT_CONNECTED)
708 err = sco_send_frame(sk, msg, len);
709 else
710 err = -ENOTCONN;
711
712 release_sock(sk);
713 return err;
714 }
715
716 static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
717 {
718 struct hci_dev *hdev = conn->hdev;
719
720 BT_DBG("conn %p", conn);
721
722 conn->state = BT_CONFIG;
723
724 if (!lmp_esco_capable(hdev)) {
725 struct hci_cp_accept_conn_req cp;
726
727 bacpy(&cp.bdaddr, &conn->dst);
728 cp.role = 0x00; /* Ignored */
729
730 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
731 } else {
732 struct hci_cp_accept_sync_conn_req cp;
733
734 bacpy(&cp.bdaddr, &conn->dst);
735 cp.pkt_type = cpu_to_le16(conn->pkt_type);
736
737 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
738 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
739 cp.content_format = cpu_to_le16(setting);
740
741 switch (setting & SCO_AIRMODE_MASK) {
742 case SCO_AIRMODE_TRANSP:
743 if (conn->pkt_type & ESCO_2EV3)
744 cp.max_latency = cpu_to_le16(0x0008);
745 else
746 cp.max_latency = cpu_to_le16(0x000D);
747 cp.retrans_effort = 0x02;
748 break;
749 case SCO_AIRMODE_CVSD:
750 cp.max_latency = cpu_to_le16(0xffff);
751 cp.retrans_effort = 0xff;
752 break;
753 }
754
755 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
756 sizeof(cp), &cp);
757 }
758 }
759
760 static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
761 size_t len, int flags)
762 {
763 struct sock *sk = sock->sk;
764 struct sco_pinfo *pi = sco_pi(sk);
765
766 lock_sock(sk);
767
768 if (sk->sk_state == BT_CONNECT2 &&
769 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
770 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
771 sk->sk_state = BT_CONFIG;
772
773 release_sock(sk);
774 return 0;
775 }
776
777 release_sock(sk);
778
779 return bt_sock_recvmsg(sock, msg, len, flags);
780 }
781
782 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
783 {
784 struct sock *sk = sock->sk;
785 int len, err = 0;
786 struct bt_voice voice;
787 u32 opt;
788
789 BT_DBG("sk %p", sk);
790
791 lock_sock(sk);
792
793 switch (optname) {
794
795 case BT_DEFER_SETUP:
796 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
797 err = -EINVAL;
798 break;
799 }
800
801 if (get_user(opt, (u32 __user *) optval)) {
802 err = -EFAULT;
803 break;
804 }
805
806 if (opt)
807 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
808 else
809 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
810 break;
811
812 case BT_VOICE:
813 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
814 sk->sk_state != BT_CONNECT2) {
815 err = -EINVAL;
816 break;
817 }
818
819 voice.setting = sco_pi(sk)->setting;
820
821 len = min_t(unsigned int, sizeof(voice), optlen);
822 if (copy_from_user((char *) &voice, optval, len)) {
823 err = -EFAULT;
824 break;
825 }
826
827 /* Explicitly check for these values */
828 if (voice.setting != BT_VOICE_TRANSPARENT &&
829 voice.setting != BT_VOICE_CVSD_16BIT) {
830 err = -EINVAL;
831 break;
832 }
833
834 sco_pi(sk)->setting = voice.setting;
835 break;
836
837 default:
838 err = -ENOPROTOOPT;
839 break;
840 }
841
842 release_sock(sk);
843 return err;
844 }
845
846 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
847 {
848 struct sock *sk = sock->sk;
849 struct sco_options opts;
850 struct sco_conninfo cinfo;
851 int len, err = 0;
852
853 BT_DBG("sk %p", sk);
854
855 if (get_user(len, optlen))
856 return -EFAULT;
857
858 lock_sock(sk);
859
860 switch (optname) {
861 case SCO_OPTIONS:
862 if (sk->sk_state != BT_CONNECTED &&
863 !(sk->sk_state == BT_CONNECT2 &&
864 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
865 err = -ENOTCONN;
866 break;
867 }
868
869 opts.mtu = sco_pi(sk)->conn->mtu;
870
871 BT_DBG("mtu %d", opts.mtu);
872
873 len = min_t(unsigned int, len, sizeof(opts));
874 if (copy_to_user(optval, (char *)&opts, len))
875 err = -EFAULT;
876
877 break;
878
879 case SCO_CONNINFO:
880 if (sk->sk_state != BT_CONNECTED &&
881 !(sk->sk_state == BT_CONNECT2 &&
882 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
883 err = -ENOTCONN;
884 break;
885 }
886
887 memset(&cinfo, 0, sizeof(cinfo));
888 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
889 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
890
891 len = min_t(unsigned int, len, sizeof(cinfo));
892 if (copy_to_user(optval, (char *)&cinfo, len))
893 err = -EFAULT;
894
895 break;
896
897 default:
898 err = -ENOPROTOOPT;
899 break;
900 }
901
902 release_sock(sk);
903 return err;
904 }
905
906 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
907 {
908 struct sock *sk = sock->sk;
909 int len, err = 0;
910 struct bt_voice voice;
911
912 BT_DBG("sk %p", sk);
913
914 if (level == SOL_SCO)
915 return sco_sock_getsockopt_old(sock, optname, optval, optlen);
916
917 if (get_user(len, optlen))
918 return -EFAULT;
919
920 lock_sock(sk);
921
922 switch (optname) {
923
924 case BT_DEFER_SETUP:
925 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
926 err = -EINVAL;
927 break;
928 }
929
930 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
931 (u32 __user *) optval))
932 err = -EFAULT;
933
934 break;
935
936 case BT_VOICE:
937 voice.setting = sco_pi(sk)->setting;
938
939 len = min_t(unsigned int, len, sizeof(voice));
940 if (copy_to_user(optval, (char *)&voice, len))
941 err = -EFAULT;
942
943 break;
944
945 default:
946 err = -ENOPROTOOPT;
947 break;
948 }
949
950 release_sock(sk);
951 return err;
952 }
953
954 static int sco_sock_shutdown(struct socket *sock, int how)
955 {
956 struct sock *sk = sock->sk;
957 int err = 0;
958
959 BT_DBG("sock %p, sk %p", sock, sk);
960
961 if (!sk)
962 return 0;
963
964 lock_sock(sk);
965 if (!sk->sk_shutdown) {
966 sk->sk_shutdown = SHUTDOWN_MASK;
967 sco_sock_clear_timer(sk);
968 __sco_sock_close(sk);
969
970 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
971 !(current->flags & PF_EXITING))
972 err = bt_sock_wait_state(sk, BT_CLOSED,
973 sk->sk_lingertime);
974 }
975 release_sock(sk);
976 return err;
977 }
978
979 static int sco_sock_release(struct socket *sock)
980 {
981 struct sock *sk = sock->sk;
982 int err = 0;
983
984 BT_DBG("sock %p, sk %p", sock, sk);
985
986 if (!sk)
987 return 0;
988
989 sco_sock_close(sk);
990
991 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
992 !(current->flags & PF_EXITING)) {
993 lock_sock(sk);
994 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
995 release_sock(sk);
996 }
997
998 sock_orphan(sk);
999 sco_sock_kill(sk);
1000 return err;
1001 }
1002
1003 static void sco_conn_ready(struct sco_conn *conn)
1004 {
1005 struct sock *parent;
1006 struct sock *sk = conn->sk;
1007
1008 BT_DBG("conn %p", conn);
1009
1010 if (sk) {
1011 sco_sock_clear_timer(sk);
1012 bh_lock_sock(sk);
1013 sk->sk_state = BT_CONNECTED;
1014 sk->sk_state_change(sk);
1015 bh_unlock_sock(sk);
1016 } else {
1017 sco_conn_lock(conn);
1018
1019 parent = sco_get_sock_listen(&conn->hcon->src);
1020 if (!parent) {
1021 sco_conn_unlock(conn);
1022 return;
1023 }
1024
1025 bh_lock_sock(parent);
1026
1027 sk = sco_sock_alloc(sock_net(parent), NULL,
1028 BTPROTO_SCO, GFP_ATOMIC, 0);
1029 if (!sk) {
1030 bh_unlock_sock(parent);
1031 sco_conn_unlock(conn);
1032 return;
1033 }
1034
1035 sco_sock_init(sk, parent);
1036
1037 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1038 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1039
1040 hci_conn_hold(conn->hcon);
1041 __sco_chan_add(conn, sk, parent);
1042
1043 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1044 sk->sk_state = BT_CONNECT2;
1045 else
1046 sk->sk_state = BT_CONNECTED;
1047
1048 /* Wake up parent */
1049 parent->sk_data_ready(parent);
1050
1051 bh_unlock_sock(parent);
1052
1053 sco_conn_unlock(conn);
1054 }
1055 }
1056
1057 /* ----- SCO interface with lower layer (HCI) ----- */
1058 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1059 {
1060 struct sock *sk;
1061 int lm = 0;
1062
1063 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1064
1065 /* Find listening sockets */
1066 read_lock(&sco_sk_list.lock);
1067 sk_for_each(sk, &sco_sk_list.head) {
1068 if (sk->sk_state != BT_LISTEN)
1069 continue;
1070
1071 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1072 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1073 lm |= HCI_LM_ACCEPT;
1074
1075 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1076 *flags |= HCI_PROTO_DEFER;
1077 break;
1078 }
1079 }
1080 read_unlock(&sco_sk_list.lock);
1081
1082 return lm;
1083 }
1084
1085 static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1086 {
1087 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1088 return;
1089
1090 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1091
1092 if (!status) {
1093 struct sco_conn *conn;
1094
1095 conn = sco_conn_add(hcon);
1096 if (conn)
1097 sco_conn_ready(conn);
1098 } else
1099 sco_conn_del(hcon, bt_to_errno(status));
1100 }
1101
1102 static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1103 {
1104 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1105 return;
1106
1107 BT_DBG("hcon %p reason %d", hcon, reason);
1108
1109 sco_conn_del(hcon, bt_to_errno(reason));
1110 }
1111
1112 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1113 {
1114 struct sco_conn *conn = hcon->sco_data;
1115
1116 if (!conn)
1117 goto drop;
1118
1119 BT_DBG("conn %p len %d", conn, skb->len);
1120
1121 if (skb->len) {
1122 sco_recv_frame(conn, skb);
1123 return;
1124 }
1125
1126 drop:
1127 kfree_skb(skb);
1128 }
1129
1130 static struct hci_cb sco_cb = {
1131 .name = "SCO",
1132 .connect_cfm = sco_connect_cfm,
1133 .disconn_cfm = sco_disconn_cfm,
1134 };
1135
1136 static int sco_debugfs_show(struct seq_file *f, void *p)
1137 {
1138 struct sock *sk;
1139
1140 read_lock(&sco_sk_list.lock);
1141
1142 sk_for_each(sk, &sco_sk_list.head) {
1143 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1144 &sco_pi(sk)->dst, sk->sk_state);
1145 }
1146
1147 read_unlock(&sco_sk_list.lock);
1148
1149 return 0;
1150 }
1151
1152 static int sco_debugfs_open(struct inode *inode, struct file *file)
1153 {
1154 return single_open(file, sco_debugfs_show, inode->i_private);
1155 }
1156
1157 static const struct file_operations sco_debugfs_fops = {
1158 .open = sco_debugfs_open,
1159 .read = seq_read,
1160 .llseek = seq_lseek,
1161 .release = single_release,
1162 };
1163
1164 static struct dentry *sco_debugfs;
1165
1166 static const struct proto_ops sco_sock_ops = {
1167 .family = PF_BLUETOOTH,
1168 .owner = THIS_MODULE,
1169 .release = sco_sock_release,
1170 .bind = sco_sock_bind,
1171 .connect = sco_sock_connect,
1172 .listen = sco_sock_listen,
1173 .accept = sco_sock_accept,
1174 .getname = sco_sock_getname,
1175 .sendmsg = sco_sock_sendmsg,
1176 .recvmsg = sco_sock_recvmsg,
1177 .poll = bt_sock_poll,
1178 .ioctl = bt_sock_ioctl,
1179 .mmap = sock_no_mmap,
1180 .socketpair = sock_no_socketpair,
1181 .shutdown = sco_sock_shutdown,
1182 .setsockopt = sco_sock_setsockopt,
1183 .getsockopt = sco_sock_getsockopt
1184 };
1185
1186 static const struct net_proto_family sco_sock_family_ops = {
1187 .family = PF_BLUETOOTH,
1188 .owner = THIS_MODULE,
1189 .create = sco_sock_create,
1190 };
1191
1192 int __init sco_init(void)
1193 {
1194 int err;
1195
1196 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1197
1198 err = proto_register(&sco_proto, 0);
1199 if (err < 0)
1200 return err;
1201
1202 err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1203 if (err < 0) {
1204 BT_ERR("SCO socket registration failed");
1205 goto error;
1206 }
1207
1208 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1209 if (err < 0) {
1210 BT_ERR("Failed to create SCO proc file");
1211 bt_sock_unregister(BTPROTO_SCO);
1212 goto error;
1213 }
1214
1215 BT_INFO("SCO socket layer initialized");
1216
1217 hci_register_cb(&sco_cb);
1218
1219 if (IS_ERR_OR_NULL(bt_debugfs))
1220 return 0;
1221
1222 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1223 NULL, &sco_debugfs_fops);
1224
1225 return 0;
1226
1227 error:
1228 proto_unregister(&sco_proto);
1229 return err;
1230 }
1231
1232 void sco_exit(void)
1233 {
1234 bt_procfs_cleanup(&init_net, "sco");
1235
1236 debugfs_remove(sco_debugfs);
1237
1238 hci_unregister_cb(&sco_cb);
1239
1240 bt_sock_unregister(BTPROTO_SCO);
1241
1242 proto_unregister(&sco_proto);
1243 }
1244
1245 module_param(disable_esco, bool, 0644);
1246 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");
This page took 0.061533 seconds and 5 git commands to generate.