ipvs: Pass ipvs not net into ip_vs_app_net_init and ip_vs_app_net_cleanup
[deliverable/linux.git] / net / bluetooth / sco.c
CommitLineData
8e87d142 1/*
1da177e4
LT
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
8e87d142
YH
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
1da177e4
LT
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
8e87d142
YH
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
1da177e4
LT
22 SOFTWARE IS DISCLAIMED.
23*/
24
25/* Bluetooth SCO sockets. */
26
1da177e4 27#include <linux/module.h>
aef7d97c
MH
28#include <linux/debugfs.h>
29#include <linux/seq_file.h>
1da177e4
LT
30
31#include <net/bluetooth/bluetooth.h>
32#include <net/bluetooth/hci_core.h>
33#include <net/bluetooth/sco.h>
34
eb939922 35static bool disable_esco;
1da177e4 36
90ddc4f0 37static const struct proto_ops sco_sock_ops;
1da177e4
LT
38
39static struct bt_sock_list sco_sk_list = {
d5fb2962 40 .lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
1da177e4
LT
41};
42
fc8f525a
MH
43/* ---- SCO connections ---- */
44struct 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
1da177e4
LT
56static void sco_sock_close(struct sock *sk);
57static void sco_sock_kill(struct sock *sk);
58
2a0dccb3
MH
59/* ----- SCO socket info ----- */
60#define sco_pi(sk) ((struct sco_pinfo *) sk)
61
62struct 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
1da177e4 71/* ---- SCO timers ---- */
068d69e5
MH
72#define SCO_CONN_TIMEOUT (HZ * 40)
73#define SCO_DISCONN_TIMEOUT (HZ * 2)
74
1da177e4
LT
75static 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
90static 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
96static 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
1da177e4 102/* ---- SCO connections ---- */
519e42b3 103static struct sco_conn *sco_conn_add(struct hci_conn *hcon)
1da177e4
LT
104{
105 struct hci_dev *hdev = hcon->hdev;
25ea6db0 106 struct sco_conn *conn = hcon->sco_data;
1da177e4 107
519e42b3 108 if (conn)
1da177e4
LT
109 return conn;
110
c10cc5a9 111 conn = kzalloc(sizeof(struct sco_conn), GFP_KERNEL);
25ea6db0 112 if (!conn)
1da177e4 113 return NULL;
1da177e4
LT
114
115 spin_lock_init(&conn->lock);
116
117 hcon->sco_data = conn;
118 conn->hcon = hcon;
119
1da177e4
LT
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);
25ea6db0 126
1da177e4
LT
127 return conn;
128}
129
e03ab519
MH
130/* Delete channel.
131 * Must be called on the locked socket. */
132static 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
df945360 157static void sco_conn_del(struct hci_conn *hcon, int err)
1da177e4 158{
735cbc47 159 struct sco_conn *conn = hcon->sco_data;
1da177e4
LT
160 struct sock *sk;
161
735cbc47 162 if (!conn)
df945360 163 return;
1da177e4
LT
164
165 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
166
167 /* Kill socket */
eb5a4de8
MH
168 sco_conn_lock(conn);
169 sk = conn->sk;
170 sco_conn_unlock(conn);
171
735cbc47 172 if (sk) {
1da177e4
LT
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);
1da177e4
LT
182}
183
015b01cb
MH
184static 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
6039aa73
GP
195static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
196 struct sock *parent)
1da177e4
LT
197{
198 int err = 0;
199
200 sco_conn_lock(conn);
b9dbdbc1 201 if (conn->sk)
1da177e4 202 err = -EBUSY;
b9dbdbc1 203 else
1da177e4 204 __sco_chan_add(conn, sk, parent);
b9dbdbc1 205
1da177e4
LT
206 sco_conn_unlock(conn);
207 return err;
208}
209
210static int sco_connect(struct sock *sk)
211{
1da177e4
LT
212 struct sco_conn *conn;
213 struct hci_conn *hcon;
214 struct hci_dev *hdev;
b6a0dc82 215 int err, type;
1da177e4 216
eea96364 217 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
1da177e4 218
eea96364 219 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src);
735cbc47 220 if (!hdev)
1da177e4
LT
221 return -EHOSTUNREACH;
222
09fd0de5 223 hci_dev_lock(hdev);
1da177e4 224
7cb127d5
MH
225 if (lmp_esco_capable(hdev) && !disable_esco)
226 type = ESCO_LINK;
227 else
228 type = SCO_LINK;
b6a0dc82 229
79dc0087
FD
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
eea96364 236 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
041987cf 237 sco_pi(sk)->setting);
30e76272
VT
238 if (IS_ERR(hcon)) {
239 err = PTR_ERR(hcon);
1da177e4 240 goto done;
30e76272 241 }
1da177e4 242
519e42b3 243 conn = sco_conn_add(hcon);
1da177e4 244 if (!conn) {
76a68ba0 245 hci_conn_drop(hcon);
30e76272 246 err = -ENOMEM;
1da177e4
LT
247 goto done;
248 }
249
250 /* Update source addr of the socket */
eea96364 251 bacpy(&sco_pi(sk)->src, &hcon->src);
1da177e4
LT
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 }
b6a0dc82 264
1da177e4 265done:
09fd0de5 266 hci_dev_unlock(hdev);
1da177e4
LT
267 hci_dev_put(hdev);
268 return err;
269}
270
6039aa73 271static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
1da177e4
LT
272{
273 struct sco_conn *conn = sco_pi(sk)->conn;
274 struct sk_buff *skb;
088ce088 275 int err;
1da177e4
LT
276
277 /* Check outgoing MTU */
278 if (len > conn->mtu)
279 return -EINVAL;
280
281 BT_DBG("sk %p len %d", sk, len);
282
088ce088 283 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
b9dbdbc1 284 if (!skb)
1da177e4
LT
285 return err;
286
6ce8e9ce 287 if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
b9dbdbc1
GP
288 kfree_skb(skb);
289 return -EFAULT;
1da177e4
LT
290 }
291
0d861d8b 292 hci_send_sco(conn->hcon, skb);
1da177e4 293
088ce088 294 return len;
1da177e4
LT
295}
296
6039aa73 297static void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
1da177e4 298{
eb5a4de8
MH
299 struct sock *sk;
300
301 sco_conn_lock(conn);
302 sk = conn->sk;
303 sco_conn_unlock(conn);
1da177e4
LT
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
316drop:
317 kfree_skb(skb);
1da177e4
LT
318}
319
320/* -------- Socket interface ---------- */
fb334059 321static struct sock *__sco_get_sock_listen_by_addr(bdaddr_t *ba)
1da177e4 322{
fb334059
MH
323 struct sock *sk;
324
b67bfe0d 325 sk_for_each(sk, &sco_sk_list.head) {
fb334059
MH
326 if (sk->sk_state != BT_LISTEN)
327 continue;
1da177e4 328
eea96364 329 if (!bacmp(&sco_pi(sk)->src, ba))
fb334059
MH
330 return sk;
331 }
332
333 return NULL;
1da177e4
LT
334}
335
336/* Find socket listening on source bdaddr.
337 * Returns closest match.
338 */
339static struct sock *sco_get_sock_listen(bdaddr_t *src)
340{
341 struct sock *sk = NULL, *sk1 = NULL;
1da177e4
LT
342
343 read_lock(&sco_sk_list.lock);
344
b67bfe0d 345 sk_for_each(sk, &sco_sk_list.head) {
1da177e4
LT
346 if (sk->sk_state != BT_LISTEN)
347 continue;
348
349 /* Exact match. */
eea96364 350 if (!bacmp(&sco_pi(sk)->src, src))
1da177e4
LT
351 break;
352
353 /* Closest match */
eea96364 354 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
1da177e4
LT
355 sk1 = sk;
356 }
357
358 read_unlock(&sco_sk_list.lock);
359
b67bfe0d 360 return sk ? sk : sk1;
1da177e4
LT
361}
362
363static 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
371static 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 */
390static 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
fd0b3ff7 403static void __sco_sock_close(struct sock *sk)
1da177e4 404{
fd0b3ff7 405 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
1da177e4
LT
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:
b7e98b51 414 if (sco_pi(sk)->conn->hcon) {
4a77708b
LAD
415 sk->sk_state = BT_DISCONN;
416 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
76a68ba0 417 hci_conn_drop(sco_pi(sk)->conn->hcon);
4a77708b
LAD
418 sco_pi(sk)->conn->hcon = NULL;
419 } else
420 sco_chan_del(sk, ECONNRESET);
421 break;
422
eb20ff9c 423 case BT_CONNECT2:
1da177e4
LT
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;
3ff50b79 432 }
fd0b3ff7 433}
1da177e4 434
fd0b3ff7
MH
435/* Must be called on unlocked socket. */
436static void sco_sock_close(struct sock *sk)
437{
438 sco_sock_clear_timer(sk);
439 lock_sock(sk);
440 __sco_sock_close(sk);
1da177e4 441 release_sock(sk);
1da177e4
LT
442 sco_sock_kill(sk);
443}
444
445static void sco_sock_init(struct sock *sk, struct sock *parent)
446{
447 BT_DBG("sk %p", sk);
448
6230c9b4 449 if (parent) {
1da177e4 450 sk->sk_type = parent->sk_type;
20714bfe 451 bt_sk(sk)->flags = bt_sk(parent)->flags;
6230c9b4
PM
452 security_sk_clone(parent, sk);
453 }
1da177e4
LT
454}
455
456static struct proto sco_proto = {
457 .name = "SCO",
458 .owner = THIS_MODULE,
459 .obj_size = sizeof(struct sco_pinfo)
460};
461
11aa9c28 462static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio, int kern)
1da177e4
LT
463{
464 struct sock *sk;
465
11aa9c28 466 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
1da177e4
LT
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
ad10b1a4
FD
481 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
482
b24b8a24 483 setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
1da177e4
LT
484
485 bt_sock_link(&sco_sk_list, sk);
486 return sk;
487}
488
3f378b68
EP
489static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
490 int kern)
1da177e4
LT
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
11aa9c28 503 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
74da626a 504 if (!sk)
1da177e4
LT
505 return -ENOMEM;
506
507 sco_sock_init(sk, NULL);
508 return 0;
509}
510
511static 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;
1da177e4
LT
515 int err = 0;
516
6ed93dc6 517 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
1da177e4
LT
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
8ed21f7e
MH
529 if (sk->sk_type != SOCK_SEQPACKET) {
530 err = -EINVAL;
531 goto done;
1da177e4
LT
532 }
533
eea96364 534 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
8ed21f7e
MH
535
536 sk->sk_state = BT_BOUND;
1da177e4
LT
537
538done:
539 release_sock(sk);
540 return err;
541}
542
543static 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;
92f185c8 547 int err;
1da177e4
LT
548
549 BT_DBG("sk %p", sk);
550
6503d961
CG
551 if (alen < sizeof(struct sockaddr_sco) ||
552 addr->sa_family != AF_BLUETOOTH)
1da177e4
LT
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 */
eea96364 564 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
1da177e4 565
735cbc47
AE
566 err = sco_connect(sk);
567 if (err)
1da177e4
LT
568 goto done;
569
8e87d142 570 err = bt_sock_wait_state(sk, BT_CONNECTED,
be7c2b99 571 sock_sndtimeo(sk, flags & O_NONBLOCK));
1da177e4
LT
572
573done:
574 release_sock(sk);
575 return err;
576}
577
578static int sco_sock_listen(struct socket *sock, int backlog)
579{
580 struct sock *sk = sock->sk;
eea96364 581 bdaddr_t *src = &sco_pi(sk)->src;
1da177e4
LT
582 int err = 0;
583
584 BT_DBG("sk %p backlog %d", sk, backlog);
585
586 lock_sock(sk);
587
7d5d775a 588 if (sk->sk_state != BT_BOUND) {
1da177e4
LT
589 err = -EBADFD;
590 goto done;
591 }
592
7d5d775a
MH
593 if (sk->sk_type != SOCK_SEQPACKET) {
594 err = -EINVAL;
595 goto done;
596 }
597
fb334059
MH
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
1da177e4
LT
605 sk->sk_max_ack_backlog = backlog;
606 sk->sk_ack_backlog = 0;
fb334059 607
1da177e4
LT
608 sk->sk_state = BT_LISTEN;
609
fb334059
MH
610unlock:
611 write_unlock(&sco_sk_list.lock);
612
1da177e4
LT
613done:
614 release_sock(sk);
615 return err;
616}
617
618static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
619{
dfb2fae7 620 DEFINE_WAIT_FUNC(wait, woken_wake_function);
1da177e4
LT
621 struct sock *sk = sock->sk, *ch;
622 long timeo;
623 int err = 0;
624
625 lock_sock(sk);
626
1da177e4
LT
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). */
aa395145 632 add_wait_queue_exclusive(sk_sleep(sk), &wait);
552b0d3c 633 while (1) {
552b0d3c
PH
634 if (sk->sk_state != BT_LISTEN) {
635 err = -EBADFD;
1da177e4
LT
636 break;
637 }
638
552b0d3c
PH
639 ch = bt_accept_dequeue(sk, newsock);
640 if (ch)
641 break;
1da177e4 642
552b0d3c
PH
643 if (!timeo) {
644 err = -EAGAIN;
1da177e4
LT
645 break;
646 }
647
648 if (signal_pending(current)) {
649 err = sock_intr_errno(timeo);
650 break;
651 }
552b0d3c
PH
652
653 release_sock(sk);
dfb2fae7
PH
654
655 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
552b0d3c 656 lock_sock(sk);
1da177e4 657 }
aa395145 658 remove_wait_queue(sk_sleep(sk), &wait);
1da177e4
LT
659
660 if (err)
661 goto done;
662
663 newsock->state = SS_CONNECTED;
664
665 BT_DBG("new socket %p", ch);
666
667done:
668 release_sock(sk);
669 return err;
670}
671
672static 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)
eea96364 683 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
1da177e4 684 else
eea96364 685 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
1da177e4
LT
686
687 return 0;
688}
689
1b784140
YX
690static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,
691 size_t len)
1da177e4
LT
692{
693 struct sock *sk = sock->sk;
b9dbdbc1 694 int err;
1da177e4
LT
695
696 BT_DBG("sock %p, sk %p", sock, sk);
697
c1cbe4b7
BL
698 err = sock_error(sk);
699 if (err)
700 return err;
1da177e4
LT
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
2f69a82a 716static void sco_conn_defer_accept(struct hci_conn *conn, u16 setting)
fa5513be
FD
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);
33f24048 728 cp.role = 0x00; /* Ignored */
fa5513be
FD
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
dcf4adbf
JP
737 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
738 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
2f69a82a
FD
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)
dcf4adbf 744 cp.max_latency = cpu_to_le16(0x0008);
2f69a82a 745 else
dcf4adbf 746 cp.max_latency = cpu_to_le16(0x000D);
2f69a82a
FD
747 cp.retrans_effort = 0x02;
748 break;
749 case SCO_AIRMODE_CVSD:
dcf4adbf 750 cp.max_latency = cpu_to_le16(0xffff);
2f69a82a
FD
751 cp.retrans_effort = 0xff;
752 break;
753 }
fa5513be
FD
754
755 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
756 sizeof(cp), &cp);
757 }
758}
759
1b784140
YX
760static int sco_sock_recvmsg(struct socket *sock, struct msghdr *msg,
761 size_t len, int flags)
20714bfe
FD
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)) {
2f69a82a 770 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
20714bfe
FD
771 sk->sk_state = BT_CONFIG;
772
773 release_sock(sk);
774 return 0;
775 }
776
777 release_sock(sk);
778
1b784140 779 return bt_sock_recvmsg(sock, msg, len, flags);
20714bfe
FD
780}
781
b7058842 782static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
1da177e4
LT
783{
784 struct sock *sk = sock->sk;
ad10b1a4
FD
785 int len, err = 0;
786 struct bt_voice voice;
b96e9c67 787 u32 opt;
1da177e4
LT
788
789 BT_DBG("sk %p", sk);
790
791 lock_sock(sk);
792
793 switch (optname) {
b96e9c67
FD
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
ad10b1a4
FD
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
1da177e4
LT
837 default:
838 err = -ENOPROTOOPT;
839 break;
840 }
841
842 release_sock(sk);
843 return err;
844}
845
d58daf42 846static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
1da177e4
LT
847{
848 struct sock *sk = sock->sk;
849 struct sco_options opts;
850 struct sco_conninfo cinfo;
8e87d142 851 int len, err = 0;
1da177e4
LT
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:
9d225d22
JH
862 if (sk->sk_state != BT_CONNECTED &&
863 !(sk->sk_state == BT_CONNECT2 &&
864 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1da177e4
LT
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:
9d225d22
JH
880 if (sk->sk_state != BT_CONNECTED &&
881 !(sk->sk_state == BT_CONNECT2 &&
882 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1da177e4
LT
883 err = -ENOTCONN;
884 break;
885 }
886
c4c896e1 887 memset(&cinfo, 0, sizeof(cinfo));
1da177e4
LT
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
d58daf42
MH
906static 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;
ad10b1a4 910 struct bt_voice voice;
d58daf42
MH
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) {
b96e9c67
FD
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
ad10b1a4
FD
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
d58daf42
MH
945 default:
946 err = -ENOPROTOOPT;
947 break;
948 }
949
950 release_sock(sk);
951 return err;
952}
953
fd0b3ff7
MH
954static 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
093facf3
VD
970 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
971 !(current->flags & PF_EXITING))
fd0b3ff7 972 err = bt_sock_wait_state(sk, BT_CLOSED,
be7c2b99 973 sk->sk_lingertime);
fd0b3ff7
MH
974 }
975 release_sock(sk);
976 return err;
977}
978
1da177e4
LT
979static 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
093facf3
VD
991 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
992 !(current->flags & PF_EXITING)) {
1da177e4
LT
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
1da177e4
LT
1003static void sco_conn_ready(struct sco_conn *conn)
1004{
735cbc47
AE
1005 struct sock *parent;
1006 struct sock *sk = conn->sk;
1da177e4
LT
1007
1008 BT_DBG("conn %p", conn);
1009
735cbc47 1010 if (sk) {
1da177e4
LT
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 {
40528088
AG
1017 sco_conn_lock(conn);
1018
041987cf 1019 parent = sco_get_sock_listen(&conn->hcon->src);
40528088
AG
1020 if (!parent) {
1021 sco_conn_unlock(conn);
1022 return;
1023 }
1da177e4
LT
1024
1025 bh_lock_sock(parent);
1026
b9dbdbc1 1027 sk = sco_sock_alloc(sock_net(parent), NULL,
11aa9c28 1028 BTPROTO_SCO, GFP_ATOMIC, 0);
1da177e4
LT
1029 if (!sk) {
1030 bh_unlock_sock(parent);
40528088
AG
1031 sco_conn_unlock(conn);
1032 return;
1da177e4
LT
1033 }
1034
1035 sco_sock_init(sk, parent);
1036
eea96364
MH
1037 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1038 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1da177e4
LT
1039
1040 hci_conn_hold(conn->hcon);
1041 __sco_chan_add(conn, sk, parent);
1042
20714bfe
FD
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;
1da177e4
LT
1047
1048 /* Wake up parent */
676d2369 1049 parent->sk_data_ready(parent);
1da177e4
LT
1050
1051 bh_unlock_sock(parent);
1da177e4 1052
40528088
AG
1053 sco_conn_unlock(conn);
1054 }
1da177e4
LT
1055}
1056
1057/* ----- SCO interface with lower layer (HCI) ----- */
20714bfe 1058int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1da177e4 1059{
fc5fef61 1060 struct sock *sk;
71aeeaa1
MH
1061 int lm = 0;
1062
6ed93dc6 1063 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1da177e4 1064
71aeeaa1
MH
1065 /* Find listening sockets */
1066 read_lock(&sco_sk_list.lock);
b67bfe0d 1067 sk_for_each(sk, &sco_sk_list.head) {
71aeeaa1
MH
1068 if (sk->sk_state != BT_LISTEN)
1069 continue;
1070
eea96364
MH
1071 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1072 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
71aeeaa1 1073 lm |= HCI_LM_ACCEPT;
20714bfe
FD
1074
1075 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1076 *flags |= HCI_PROTO_DEFER;
71aeeaa1
MH
1077 break;
1078 }
1079 }
1080 read_unlock(&sco_sk_list.lock);
1081
1082 return lm;
1da177e4
LT
1083}
1084
539c496d 1085static void sco_connect_cfm(struct hci_conn *hcon, __u8 status)
1da177e4 1086{
539c496d
JH
1087 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1088 return;
1089
6ed93dc6 1090 BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
539c496d 1091
1da177e4
LT
1092 if (!status) {
1093 struct sco_conn *conn;
1094
519e42b3 1095 conn = sco_conn_add(hcon);
1da177e4
LT
1096 if (conn)
1097 sco_conn_ready(conn);
8e87d142 1098 } else
e175072f 1099 sco_conn_del(hcon, bt_to_errno(status));
1da177e4
LT
1100}
1101
3a6d576b 1102static void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1da177e4 1103{
3a6d576b
JH
1104 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1105 return;
1106
1da177e4
LT
1107 BT_DBG("hcon %p reason %d", hcon, reason);
1108
e175072f 1109 sco_conn_del(hcon, bt_to_errno(reason));
1da177e4
LT
1110}
1111
9b4c3336 1112void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
1da177e4
LT
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);
9b4c3336 1123 return;
1da177e4
LT
1124 }
1125
1126drop:
8e87d142 1127 kfree_skb(skb);
1da177e4
LT
1128}
1129
539c496d
JH
1130static struct hci_cb sco_cb = {
1131 .name = "SCO",
1132 .connect_cfm = sco_connect_cfm,
3a6d576b 1133 .disconn_cfm = sco_disconn_cfm,
539c496d
JH
1134};
1135
aef7d97c 1136static int sco_debugfs_show(struct seq_file *f, void *p)
1da177e4
LT
1137{
1138 struct sock *sk;
1da177e4 1139
ee65d19e 1140 read_lock(&sco_sk_list.lock);
1da177e4 1141
b67bfe0d 1142 sk_for_each(sk, &sco_sk_list.head) {
eea96364
MH
1143 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1144 &sco_pi(sk)->dst, sk->sk_state);
be9d1227 1145 }
1da177e4 1146
ee65d19e 1147 read_unlock(&sco_sk_list.lock);
1da177e4 1148
aef7d97c 1149 return 0;
1da177e4
LT
1150}
1151
aef7d97c
MH
1152static int sco_debugfs_open(struct inode *inode, struct file *file)
1153{
1154 return single_open(file, sco_debugfs_show, inode->i_private);
1155}
1156
1157static 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
1164static struct dentry *sco_debugfs;
1da177e4 1165
90ddc4f0 1166static const struct proto_ops sco_sock_ops = {
1da177e4
LT
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,
20714bfe 1176 .recvmsg = sco_sock_recvmsg,
1da177e4 1177 .poll = bt_sock_poll,
3241ad82 1178 .ioctl = bt_sock_ioctl,
1da177e4
LT
1179 .mmap = sock_no_mmap,
1180 .socketpair = sock_no_socketpair,
fd0b3ff7 1181 .shutdown = sco_sock_shutdown,
1da177e4
LT
1182 .setsockopt = sco_sock_setsockopt,
1183 .getsockopt = sco_sock_getsockopt
1184};
1185
ec1b4cf7 1186static const struct net_proto_family sco_sock_family_ops = {
1da177e4
LT
1187 .family = PF_BLUETOOTH,
1188 .owner = THIS_MODULE,
1189 .create = sco_sock_create,
1190};
1191
64274518 1192int __init sco_init(void)
1da177e4
LT
1193{
1194 int err;
1195
15762fa7
MH
1196 BUILD_BUG_ON(sizeof(struct sockaddr_sco) > sizeof(struct sockaddr));
1197
1da177e4
LT
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
b0316615 1208 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
de9b9212
MY
1209 if (err < 0) {
1210 BT_ERR("Failed to create SCO proc file");
1211 bt_sock_unregister(BTPROTO_SCO);
1212 goto error;
1213 }
1214
1da177e4
LT
1215 BT_INFO("SCO socket layer initialized");
1216
539c496d
JH
1217 hci_register_cb(&sco_cb);
1218
1120e4bf
MH
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
1da177e4
LT
1225 return 0;
1226
1227error:
1228 proto_unregister(&sco_proto);
1229 return err;
1230}
1231
0402d9f2 1232void sco_exit(void)
1da177e4 1233{
de9b9212
MY
1234 bt_procfs_cleanup(&init_net, "sco");
1235
aef7d97c 1236 debugfs_remove(sco_debugfs);
1da177e4 1237
539c496d
JH
1238 hci_unregister_cb(&sco_cb);
1239
5e9d7f86 1240 bt_sock_unregister(BTPROTO_SCO);
1da177e4 1241
1da177e4
LT
1242 proto_unregister(&sco_proto);
1243}
1244
7cb127d5
MH
1245module_param(disable_esco, bool, 0644);
1246MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");
This page took 0.821056 seconds and 5 git commands to generate.