OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [net/] [bluetooth/] [l2cap.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
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
/*
26
 * BlueZ L2CAP core and sockets.
27
 *
28
 * $Id: l2cap.c,v 1.1.1.1 2004-04-15 01:17:03 phoenix Exp $
29
 */
30
#define VERSION "2.3"
31
 
32
#include <linux/config.h>
33
#include <linux/module.h>
34
 
35
#include <linux/types.h>
36
#include <linux/errno.h>
37
#include <linux/kernel.h>
38
#include <linux/major.h>
39
#include <linux/sched.h>
40
#include <linux/slab.h>
41
#include <linux/poll.h>
42
#include <linux/fcntl.h>
43
#include <linux/init.h>
44
#include <linux/skbuff.h>
45
#include <linux/interrupt.h>
46
#include <linux/socket.h>
47
#include <linux/skbuff.h>
48
#include <linux/proc_fs.h>
49
#include <linux/list.h>
50
#include <net/sock.h>
51
 
52
#include <asm/system.h>
53
#include <asm/uaccess.h>
54
#include <asm/unaligned.h>
55
 
56
#include <net/bluetooth/bluetooth.h>
57
#include <net/bluetooth/hci_core.h>
58
#include <net/bluetooth/l2cap.h>
59
 
60
#ifndef L2CAP_DEBUG
61
#undef  BT_DBG
62
#define BT_DBG( A... )
63
#endif
64
 
65
static struct proto_ops l2cap_sock_ops;
66
 
67
struct bluez_sock_list l2cap_sk_list = {
68
        lock: RW_LOCK_UNLOCKED
69
};
70
 
71
static int l2cap_conn_del(struct hci_conn *conn, int err);
72
 
73
static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent);
74
static void l2cap_chan_del(struct sock *sk, int err);
75
static int  l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len);
76
 
77
static void __l2cap_sock_close(struct sock *sk, int reason);
78
static void l2cap_sock_close(struct sock *sk);
79
static void l2cap_sock_kill(struct sock *sk);
80
 
81
static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data);
82
static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data);
83
 
84
/* ----- L2CAP timers ------ */
85
static void l2cap_sock_timeout(unsigned long arg)
86
{
87
        struct sock *sk = (struct sock *) arg;
88
 
89
        BT_DBG("sock %p state %d", sk, sk->state);
90
 
91
        bh_lock_sock(sk);
92
        __l2cap_sock_close(sk, ETIMEDOUT);
93
        bh_unlock_sock(sk);
94
 
95
        l2cap_sock_kill(sk);
96
        sock_put(sk);
97
}
98
 
99
static void l2cap_sock_set_timer(struct sock *sk, long timeout)
100
{
101
        BT_DBG("sk %p state %d timeout %ld", sk, sk->state, timeout);
102
 
103
        if (!mod_timer(&sk->timer, jiffies + timeout))
104
                sock_hold(sk);
105
}
106
 
107
static void l2cap_sock_clear_timer(struct sock *sk)
108
{
109
        BT_DBG("sock %p state %d", sk, sk->state);
110
 
111
        if (timer_pending(&sk->timer) && del_timer(&sk->timer))
112
                __sock_put(sk);
113
}
114
 
115
static void l2cap_sock_init_timer(struct sock *sk)
116
{
117
        init_timer(&sk->timer);
118
        sk->timer.function = l2cap_sock_timeout;
119
        sk->timer.data = (unsigned long)sk;
120
}
121
 
122
/* -------- L2CAP connections --------- */
123
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, __u8 status)
124
{
125
        struct l2cap_conn *conn;
126
 
127
        if ((conn = hcon->l2cap_data))
128
                return conn;
129
 
130
        if (status)
131
                return conn;
132
 
133
        if (!(conn = kmalloc(sizeof(struct l2cap_conn), GFP_ATOMIC)))
134
                return NULL;
135
        memset(conn, 0, sizeof(struct l2cap_conn));
136
 
137
        hcon->l2cap_data = conn;
138
        conn->hcon = hcon;
139
 
140
        conn->mtu = hcon->hdev->acl_mtu;
141
        conn->src = &hcon->hdev->bdaddr;
142
        conn->dst = &hcon->dst;
143
 
144
        spin_lock_init(&conn->lock);
145
        conn->chan_list.lock = RW_LOCK_UNLOCKED;
146
 
147
        BT_DBG("hcon %p conn %p", hcon, conn);
148
 
149
        MOD_INC_USE_COUNT;
150
        return conn;
151
}
152
 
153
static int l2cap_conn_del(struct hci_conn *hcon, int err)
154
{
155
        struct l2cap_conn *conn;
156
        struct sock *sk;
157
 
158
        if (!(conn = hcon->l2cap_data))
159
                return 0;
160
 
161
        BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
162
 
163
        if (conn->rx_skb)
164
                kfree_skb(conn->rx_skb);
165
 
166
        /* Kill channels */
167
        while ((sk = conn->chan_list.head)) {
168
                bh_lock_sock(sk);
169
                l2cap_chan_del(sk, err);
170
                bh_unlock_sock(sk);
171
                l2cap_sock_kill(sk);
172
        }
173
 
174
        hcon->l2cap_data = NULL;
175
        kfree(conn);
176
 
177
        MOD_DEC_USE_COUNT;
178
        return 0;
179
}
180
 
181
/* -------- Socket interface ---------- */
182
static struct sock *__l2cap_get_sock_by_addr(__u16 psm, bdaddr_t *src)
183
{
184
        struct sock *sk;
185
        for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
186
                if (sk->sport == psm && !bacmp(&bluez_pi(sk)->src, src))
187
                        break;
188
        }
189
        return sk;
190
}
191
 
192
/* Find socket with psm and source bdaddr.
193
 * Returns closest match.
194
 */
195
static struct sock *__l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
196
{
197
        struct sock *sk, *sk1 = NULL;
198
 
199
        for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
200
                if (state && sk->state != state)
201
                        continue;
202
 
203
                if (l2cap_pi(sk)->psm == psm) {
204
                        /* Exact match. */
205
                        if (!bacmp(&bluez_pi(sk)->src, src))
206
                                break;
207
 
208
                        /* Closest match */
209
                        if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
210
                                sk1 = sk;
211
                }
212
        }
213
        return sk ? sk : sk1;
214
}
215
 
216
/* Find socket with given address (psm, src).
217
 * Returns locked socket */
218
static inline struct sock *l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
219
{
220
        struct sock *s;
221
        read_lock(&l2cap_sk_list.lock);
222
        s = __l2cap_get_sock_by_psm(state, psm, src);
223
        if (s) bh_lock_sock(s);
224
        read_unlock(&l2cap_sk_list.lock);
225
        return s;
226
}
227
 
228
static void l2cap_sock_destruct(struct sock *sk)
229
{
230
        BT_DBG("sk %p", sk);
231
 
232
        skb_queue_purge(&sk->receive_queue);
233
        skb_queue_purge(&sk->write_queue);
234
 
235
        MOD_DEC_USE_COUNT;
236
}
237
 
238
static void l2cap_sock_cleanup_listen(struct sock *parent)
239
{
240
        struct sock *sk;
241
 
242
        BT_DBG("parent %p", parent);
243
 
244
        /* Close not yet accepted channels */
245
        while ((sk = bluez_accept_dequeue(parent, NULL)))
246
                l2cap_sock_close(sk);
247
 
248
        parent->state  = BT_CLOSED;
249
        parent->zapped = 1;
250
}
251
 
252
/* Kill socket (only if zapped and orphan)
253
 * Must be called on unlocked socket.
254
 */
255
static void l2cap_sock_kill(struct sock *sk)
256
{
257
        if (!sk->zapped || sk->socket)
258
                return;
259
 
260
        BT_DBG("sk %p state %d", sk, sk->state);
261
 
262
        /* Kill poor orphan */
263
        bluez_sock_unlink(&l2cap_sk_list, sk);
264
        sk->dead = 1;
265
        sock_put(sk);
266
}
267
 
268
/* Close socket.
269
 */
270
static void __l2cap_sock_close(struct sock *sk, int reason)
271
{
272
        BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
273
 
274
        switch (sk->state) {
275
        case BT_LISTEN:
276
                l2cap_sock_cleanup_listen(sk);
277
                break;
278
 
279
        case BT_CONNECTED:
280
        case BT_CONFIG:
281
        case BT_CONNECT2:
282
                if (sk->type == SOCK_SEQPACKET) {
283
                        struct l2cap_conn *conn = l2cap_pi(sk)->conn;
284
                        l2cap_disconn_req req;
285
 
286
                        sk->state = BT_DISCONN;
287
                        l2cap_sock_set_timer(sk, sk->sndtimeo);
288
 
289
                        req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
290
                        req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
291
                        l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
292
                } else {
293
                        l2cap_chan_del(sk, reason);
294
                }
295
                break;
296
 
297
        case BT_CONNECT:
298
        case BT_DISCONN:
299
                l2cap_chan_del(sk, reason);
300
                break;
301
 
302
        default:
303
                sk->zapped = 1;
304
                break;
305
        };
306
}
307
 
308
/* Must be called on unlocked socket. */
309
static void l2cap_sock_close(struct sock *sk)
310
{
311
        l2cap_sock_clear_timer(sk);
312
        lock_sock(sk);
313
        __l2cap_sock_close(sk, ECONNRESET);
314
        release_sock(sk);
315
        l2cap_sock_kill(sk);
316
}
317
 
318
static void l2cap_sock_init(struct sock *sk, struct sock *parent)
319
{
320
        struct l2cap_pinfo *pi = l2cap_pi(sk);
321
 
322
        BT_DBG("sk %p", sk);
323
 
324
        if (parent) {
325
                sk->type = parent->type;
326
                pi->imtu = l2cap_pi(parent)->imtu;
327
                pi->omtu = l2cap_pi(parent)->omtu;
328
                pi->link_mode = l2cap_pi(parent)->link_mode;
329
        } else {
330
                pi->imtu = L2CAP_DEFAULT_MTU;
331
                pi->omtu = 0;
332
                pi->link_mode = 0;
333
        }
334
 
335
        /* Default config options */
336
        pi->conf_mtu = L2CAP_DEFAULT_MTU;
337
        pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
338
}
339
 
340
static struct sock *l2cap_sock_alloc(struct socket *sock, int proto, int prio)
341
{
342
        struct sock *sk;
343
 
344
        if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
345
                return NULL;
346
 
347
        bluez_sock_init(sock, sk);
348
 
349
        sk->zapped   = 0;
350
 
351
        sk->destruct = l2cap_sock_destruct;
352
        sk->sndtimeo = L2CAP_CONN_TIMEOUT;
353
 
354
        sk->protocol = proto;
355
        sk->state    = BT_OPEN;
356
 
357
        l2cap_sock_init_timer(sk);
358
 
359
        bluez_sock_link(&l2cap_sk_list, sk);
360
 
361
        MOD_INC_USE_COUNT;
362
        return sk;
363
}
364
 
365
static int l2cap_sock_create(struct socket *sock, int protocol)
366
{
367
        struct sock *sk;
368
 
369
        BT_DBG("sock %p", sock);
370
 
371
        sock->state = SS_UNCONNECTED;
372
 
373
        if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
374
                return -ESOCKTNOSUPPORT;
375
 
376
        if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
377
                return -EPERM;
378
 
379
        sock->ops = &l2cap_sock_ops;
380
 
381
        if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
382
                return -ENOMEM;
383
 
384
        l2cap_sock_init(sk, NULL);
385
        return 0;
386
}
387
 
388
static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
389
{
390
        struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
391
        struct sock *sk = sock->sk;
392
        int err = 0;
393
 
394
        BT_DBG("sk %p, %s %d", sk, batostr(&la->l2_bdaddr), la->l2_psm);
395
 
396
        if (!addr || addr->sa_family != AF_BLUETOOTH)
397
                return -EINVAL;
398
 
399
        lock_sock(sk);
400
 
401
        if (sk->state != BT_OPEN) {
402
                err = -EBADFD;
403
                goto done;
404
        }
405
 
406
        write_lock_bh(&l2cap_sk_list.lock);
407
        if (la->l2_psm && __l2cap_get_sock_by_addr(la->l2_psm, &la->l2_bdaddr)) {
408
                err = -EADDRINUSE;
409
        } else {
410
                /* Save source address */
411
                bacpy(&bluez_pi(sk)->src, &la->l2_bdaddr);
412
                l2cap_pi(sk)->psm = la->l2_psm;
413
                sk->sport = la->l2_psm;
414
                sk->state = BT_BOUND;
415
        }
416
        write_unlock_bh(&l2cap_sk_list.lock);
417
 
418
done:
419
        release_sock(sk);
420
        return err;
421
}
422
 
423
static int l2cap_do_connect(struct sock *sk)
424
{
425
        bdaddr_t *src = &bluez_pi(sk)->src;
426
        bdaddr_t *dst = &bluez_pi(sk)->dst;
427
        struct l2cap_conn *conn;
428
        struct hci_conn   *hcon;
429
        struct hci_dev    *hdev;
430
        int err = 0;
431
 
432
        BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
433
 
434
        if (!(hdev = hci_get_route(dst, src)))
435
                return -EHOSTUNREACH;
436
 
437
        hci_dev_lock_bh(hdev);
438
 
439
        err = -ENOMEM;
440
 
441
        hcon = hci_connect(hdev, ACL_LINK, dst);
442
        if (!hcon)
443
                goto done;
444
 
445
        conn = l2cap_conn_add(hcon, 0);
446
        if (!conn) {
447
                hci_conn_put(hcon);
448
                goto done;
449
        }
450
 
451
        err = 0;
452
 
453
        /* Update source addr of the socket */
454
        bacpy(src, conn->src);
455
 
456
        l2cap_chan_add(conn, sk, NULL);
457
 
458
        sk->state = BT_CONNECT;
459
        l2cap_sock_set_timer(sk, sk->sndtimeo);
460
 
461
        if (hcon->state == BT_CONNECTED) {
462
                if (sk->type == SOCK_SEQPACKET) {
463
                        l2cap_conn_req req;
464
                        req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
465
                        req.psm  = l2cap_pi(sk)->psm;
466
                        l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
467
                } else {
468
                        l2cap_sock_clear_timer(sk);
469
                        sk->state = BT_CONNECTED;
470
                }
471
        }
472
 
473
done:
474
        hci_dev_unlock_bh(hdev);
475
        hci_dev_put(hdev);
476
        return err;
477
}
478
 
479
static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
480
{
481
        struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
482
        struct sock *sk = sock->sk;
483
        int err = 0;
484
 
485
        lock_sock(sk);
486
 
487
        BT_DBG("sk %p", sk);
488
 
489
        if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_l2)) {
490
                err = -EINVAL;
491
                goto done;
492
        }
493
 
494
        if (sk->type == SOCK_SEQPACKET && !la->l2_psm) {
495
                err = -EINVAL;
496
                goto done;
497
        }
498
 
499
        switch(sk->state) {
500
        case BT_CONNECT:
501
        case BT_CONNECT2:
502
        case BT_CONFIG:
503
                /* Already connecting */
504
                goto wait;
505
 
506
        case BT_CONNECTED:
507
                /* Already connected */
508
                goto done;
509
 
510
        case BT_OPEN:
511
        case BT_BOUND:
512
                /* Can connect */
513
                break;
514
 
515
        default:
516
                err = -EBADFD;
517
                goto done;
518
        }
519
 
520
        /* Set destination address and psm */
521
        bacpy(&bluez_pi(sk)->dst, &la->l2_bdaddr);
522
        l2cap_pi(sk)->psm = la->l2_psm;
523
 
524
        if ((err = l2cap_do_connect(sk)))
525
                goto done;
526
 
527
wait:
528
        err = bluez_sock_wait_state(sk, BT_CONNECTED,
529
                        sock_sndtimeo(sk, flags & O_NONBLOCK));
530
 
531
done:
532
        release_sock(sk);
533
        return err;
534
}
535
 
536
int l2cap_sock_listen(struct socket *sock, int backlog)
537
{
538
        struct sock *sk = sock->sk;
539
        int err = 0;
540
 
541
        BT_DBG("sk %p backlog %d", sk, backlog);
542
 
543
        lock_sock(sk);
544
 
545
        if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
546
                err = -EBADFD;
547
                goto done;
548
        }
549
 
550
        if (!l2cap_pi(sk)->psm) {
551
                err = -EINVAL;
552
                goto done;
553
        }
554
 
555
        sk->max_ack_backlog = backlog;
556
        sk->ack_backlog = 0;
557
        sk->state = BT_LISTEN;
558
 
559
done:
560
        release_sock(sk);
561
        return err;
562
}
563
 
564
int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
565
{
566
        DECLARE_WAITQUEUE(wait, current);
567
        struct sock *sk = sock->sk, *nsk;
568
        long timeo;
569
        int err = 0;
570
 
571
        lock_sock(sk);
572
 
573
        if (sk->state != BT_LISTEN) {
574
                err = -EBADFD;
575
                goto done;
576
        }
577
 
578
        timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
579
 
580
        BT_DBG("sk %p timeo %ld", sk, timeo);
581
 
582
        /* Wait for an incoming connection. (wake-one). */
583
        add_wait_queue_exclusive(sk->sleep, &wait);
584
        while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
585
                set_current_state(TASK_INTERRUPTIBLE);
586
                if (!timeo) {
587
                        err = -EAGAIN;
588
                        break;
589
                }
590
 
591
                release_sock(sk);
592
                timeo = schedule_timeout(timeo);
593
                lock_sock(sk);
594
 
595
                if (sk->state != BT_LISTEN) {
596
                        err = -EBADFD;
597
                        break;
598
                }
599
 
600
                if (signal_pending(current)) {
601
                        err = sock_intr_errno(timeo);
602
                        break;
603
                }
604
        }
605
        set_current_state(TASK_RUNNING);
606
        remove_wait_queue(sk->sleep, &wait);
607
 
608
        if (err)
609
                goto done;
610
 
611
        newsock->state = SS_CONNECTED;
612
 
613
        BT_DBG("new socket %p", nsk);
614
 
615
done:
616
        release_sock(sk);
617
        return err;
618
}
619
 
620
static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
621
{
622
        struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
623
        struct sock *sk = sock->sk;
624
 
625
        BT_DBG("sock %p, sk %p", sock, sk);
626
 
627
        addr->sa_family = AF_BLUETOOTH;
628
        *len = sizeof(struct sockaddr_l2);
629
 
630
        if (peer)
631
                bacpy(&la->l2_bdaddr, &bluez_pi(sk)->dst);
632
        else
633
                bacpy(&la->l2_bdaddr, &bluez_pi(sk)->src);
634
 
635
        la->l2_psm = l2cap_pi(sk)->psm;
636
        return 0;
637
}
638
 
639
static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
640
{
641
        struct sock *sk = sock->sk;
642
        int err = 0;
643
 
644
        BT_DBG("sock %p, sk %p", sock, sk);
645
 
646
        if (sk->err)
647
                return sock_error(sk);
648
 
649
        if (msg->msg_flags & MSG_OOB)
650
                return -EOPNOTSUPP;
651
 
652
        /* Check outgoing MTU */
653
        if (len > l2cap_pi(sk)->omtu)
654
                return -EINVAL;
655
 
656
        lock_sock(sk);
657
 
658
        if (sk->state == BT_CONNECTED)
659
                err = l2cap_chan_send(sk, msg, len);
660
        else
661
                err = -ENOTCONN;
662
 
663
        release_sock(sk);
664
        return err;
665
}
666
 
667
static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
668
{
669
        struct sock *sk = sock->sk;
670
        struct l2cap_options opts;
671
        int err = 0, len;
672
        __u32 opt;
673
 
674
        BT_DBG("sk %p", sk);
675
 
676
        lock_sock(sk);
677
 
678
        switch (optname) {
679
        case L2CAP_OPTIONS:
680
                len = MIN(sizeof(opts), optlen);
681
                if (copy_from_user((char *)&opts, optval, len)) {
682
                        err = -EFAULT;
683
                        break;
684
                }
685
                l2cap_pi(sk)->imtu  = opts.imtu;
686
                l2cap_pi(sk)->omtu  = opts.omtu;
687
                break;
688
 
689
        case L2CAP_LM:
690
                if (get_user(opt, (__u32 *)optval)) {
691
                        err = -EFAULT;
692
                        break;
693
                }
694
 
695
                l2cap_pi(sk)->link_mode = opt;
696
                break;
697
 
698
        default:
699
                err = -ENOPROTOOPT;
700
                break;
701
        }
702
 
703
        release_sock(sk);
704
        return err;
705
}
706
 
707
static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
708
{
709
        struct sock *sk = sock->sk;
710
        struct l2cap_options opts;
711
        struct l2cap_conninfo cinfo;
712
        int len, err = 0;
713
 
714
        if (get_user(len, optlen))
715
                return -EFAULT;
716
 
717
        lock_sock(sk);
718
 
719
        switch (optname) {
720
        case L2CAP_OPTIONS:
721
                opts.imtu     = l2cap_pi(sk)->imtu;
722
                opts.omtu     = l2cap_pi(sk)->omtu;
723
                opts.flush_to = l2cap_pi(sk)->flush_to;
724
 
725
                len = MIN(len, sizeof(opts));
726
                if (copy_to_user(optval, (char *)&opts, len))
727
                        err = -EFAULT;
728
 
729
                break;
730
 
731
        case L2CAP_LM:
732
                if (put_user(l2cap_pi(sk)->link_mode, (__u32 *)optval))
733
                        err = -EFAULT;
734
                break;
735
 
736
        case L2CAP_CONNINFO:
737
                if (sk->state != BT_CONNECTED) {
738
                        err = -ENOTCONN;
739
                        break;
740
                }
741
 
742
                cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
743
 
744
                len = MIN(len, sizeof(cinfo));
745
                if (copy_to_user(optval, (char *)&cinfo, len))
746
                        err = -EFAULT;
747
 
748
                break;
749
 
750
        default:
751
                err = -ENOPROTOOPT;
752
                break;
753
        }
754
 
755
        release_sock(sk);
756
        return err;
757
}
758
 
759
static int l2cap_sock_shutdown(struct socket *sock, int how)
760
{
761
        struct sock *sk = sock->sk;
762
        int err = 0;
763
 
764
        BT_DBG("sock %p, sk %p", sock, sk);
765
 
766
        if (!sk) return 0;
767
 
768
        lock_sock(sk);
769
        if (!sk->shutdown) {
770
                sk->shutdown = SHUTDOWN_MASK;
771
                l2cap_sock_clear_timer(sk);
772
                __l2cap_sock_close(sk, 0);
773
 
774
                if (sk->linger)
775
                        err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
776
        }
777
        release_sock(sk);
778
        return err;
779
}
780
 
781
static int l2cap_sock_release(struct socket *sock)
782
{
783
        struct sock *sk = sock->sk;
784
        int err;
785
 
786
        BT_DBG("sock %p, sk %p", sock, sk);
787
 
788
        if (!sk) return 0;
789
 
790
        err = l2cap_sock_shutdown(sock, 2);
791
 
792
        sock_orphan(sk);
793
        l2cap_sock_kill(sk);
794
        return err;
795
}
796
 
797
/* --------- L2CAP channels --------- */
798
static struct sock * __l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
799
{
800
        struct sock *s;
801
        for (s = l->head; s; s = l2cap_pi(s)->next_c) {
802
                if (l2cap_pi(s)->dcid == cid)
803
                        break;
804
        }
805
        return s;
806
}
807
 
808
static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
809
{
810
        struct sock *s;
811
        for (s = l->head; s; s = l2cap_pi(s)->next_c) {
812
                if (l2cap_pi(s)->scid == cid)
813
                        break;
814
        }
815
        return s;
816
}
817
 
818
/* Find channel with given SCID.
819
 * Returns locked socket */
820
static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
821
{
822
        struct sock *s;
823
        read_lock(&l->lock);
824
        s = __l2cap_get_chan_by_scid(l, cid);
825
        if (s) bh_lock_sock(s);
826
        read_unlock(&l->lock);
827
        return s;
828
}
829
 
830
static __u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
831
{
832
        __u16 cid = 0x0040;
833
 
834
        for (; cid < 0xffff; cid++) {
835
                if(!__l2cap_get_chan_by_scid(l, cid))
836
                        return cid;
837
        }
838
 
839
        return 0;
840
}
841
 
842
static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
843
{
844
        sock_hold(sk);
845
 
846
        if (l->head)
847
                l2cap_pi(l->head)->prev_c = sk;
848
 
849
        l2cap_pi(sk)->next_c = l->head;
850
        l2cap_pi(sk)->prev_c = NULL;
851
        l->head = sk;
852
}
853
 
854
static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
855
{
856
        struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
857
 
858
        write_lock(&l->lock);
859
        if (sk == l->head)
860
                l->head = next;
861
 
862
        if (next)
863
                l2cap_pi(next)->prev_c = prev;
864
        if (prev)
865
                l2cap_pi(prev)->next_c = next;
866
        write_unlock(&l->lock);
867
 
868
        __sock_put(sk);
869
}
870
 
871
static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
872
{
873
        struct l2cap_chan_list *l = &conn->chan_list;
874
 
875
        BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
876
 
877
        l2cap_pi(sk)->conn = conn;
878
 
879
        if (sk->type == SOCK_SEQPACKET) {
880
                /* Alloc CID for connection-oriented socket */
881
                l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
882
        } else if (sk->type == SOCK_DGRAM) {
883
                /* Connectionless socket */
884
                l2cap_pi(sk)->scid = 0x0002;
885
                l2cap_pi(sk)->dcid = 0x0002;
886
                l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
887
        } else {
888
                /* Raw socket can send/recv signalling messages only */
889
                l2cap_pi(sk)->scid = 0x0001;
890
                l2cap_pi(sk)->dcid = 0x0001;
891
                l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
892
        }
893
 
894
        __l2cap_chan_link(l, sk);
895
 
896
        if (parent)
897
                bluez_accept_enqueue(parent, sk);
898
}
899
 
900
static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
901
{
902
        struct l2cap_chan_list *l = &conn->chan_list;
903
        write_lock(&l->lock);
904
        __l2cap_chan_add(conn, sk, parent);
905
        write_unlock(&l->lock);
906
}
907
 
908
/* Delete channel.
909
 * Must be called on the locked socket. */
910
static void l2cap_chan_del(struct sock *sk, int err)
911
{
912
        struct l2cap_conn *conn = l2cap_pi(sk)->conn;
913
        struct sock *parent = bluez_pi(sk)->parent;
914
 
915
        l2cap_sock_clear_timer(sk);
916
 
917
        BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
918
 
919
        if (conn) {
920
                /* Unlink from channel list */
921
                l2cap_chan_unlink(&conn->chan_list, sk);
922
                l2cap_pi(sk)->conn = NULL;
923
                hci_conn_put(conn->hcon);
924
        }
925
 
926
        sk->state  = BT_CLOSED;
927
        sk->zapped = 1;
928
 
929
        if (err)
930
                sk->err = err;
931
 
932
        if (parent)
933
                parent->data_ready(parent, 0);
934
        else
935
                sk->state_change(sk);
936
}
937
 
938
static void l2cap_conn_ready(struct l2cap_conn *conn)
939
{
940
        struct l2cap_chan_list *l = &conn->chan_list;
941
        struct sock *sk;
942
 
943
        BT_DBG("conn %p", conn);
944
 
945
        read_lock(&l->lock);
946
 
947
        for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
948
                bh_lock_sock(sk);
949
 
950
                if (sk->type != SOCK_SEQPACKET) {
951
                        l2cap_sock_clear_timer(sk);
952
                        sk->state = BT_CONNECTED;
953
                        sk->state_change(sk);
954
                } else if (sk->state == BT_CONNECT) {
955
                        l2cap_conn_req req;
956
                        req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
957
                        req.psm  = l2cap_pi(sk)->psm;
958
                        l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
959
                }
960
 
961
                bh_unlock_sock(sk);
962
        }
963
 
964
        read_unlock(&l->lock);
965
}
966
 
967
/* Notify sockets that we cannot guaranty reliability anymore */
968
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
969
{
970
        struct l2cap_chan_list *l = &conn->chan_list;
971
        struct sock *sk;
972
 
973
        BT_DBG("conn %p", conn);
974
 
975
        read_lock(&l->lock);
976
        for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
977
                if (l2cap_pi(sk)->link_mode & L2CAP_LM_RELIABLE)
978
                        sk->err = err;
979
        }
980
        read_unlock(&l->lock);
981
}
982
 
983
static void l2cap_chan_ready(struct sock *sk)
984
{
985
        struct sock *parent = bluez_pi(sk)->parent;
986
 
987
        BT_DBG("sk %p, parent %p", sk, parent);
988
 
989
        l2cap_pi(sk)->conf_state = 0;
990
        l2cap_sock_clear_timer(sk);
991
 
992
        if (!parent) {
993
                /* Outgoing channel.
994
                 * Wake up socket sleeping on connect.
995
                 */
996
                sk->state = BT_CONNECTED;
997
                sk->state_change(sk);
998
        } else {
999
                /* Incomming channel.
1000
                 * Wake up socket sleeping on accept.
1001
                 */
1002
                parent->data_ready(parent, 0);
1003
        }
1004
}
1005
 
1006
/* Copy frame to all raw sockets on that connection */
1007
void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
1008
{
1009
        struct l2cap_chan_list *l = &conn->chan_list;
1010
        struct sk_buff *nskb;
1011
        struct sock * sk;
1012
 
1013
        BT_DBG("conn %p", conn);
1014
 
1015
        read_lock(&l->lock);
1016
        for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
1017
                if (sk->type != SOCK_RAW)
1018
                        continue;
1019
 
1020
                /* Don't send frame to the socket it came from */
1021
                if (skb->sk == sk)
1022
                        continue;
1023
 
1024
                if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
1025
                        continue;
1026
 
1027
                if (sock_queue_rcv_skb(sk, nskb))
1028
                        kfree_skb(nskb);
1029
        }
1030
        read_unlock(&l->lock);
1031
}
1032
 
1033
static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len)
1034
{
1035
        struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1036
        struct sk_buff *skb, **frag;
1037
        int err, hlen, count, sent=0;
1038
        l2cap_hdr *lh;
1039
 
1040
        BT_DBG("sk %p len %d", sk, len);
1041
 
1042
        /* First fragment (with L2CAP header) */
1043
        if (sk->type == SOCK_DGRAM)
1044
                hlen = L2CAP_HDR_SIZE + 2;
1045
        else
1046
                hlen = L2CAP_HDR_SIZE;
1047
 
1048
        count = MIN(conn->mtu - hlen, len);
1049
 
1050
        skb = bluez_skb_send_alloc(sk, hlen + count,
1051
                        msg->msg_flags & MSG_DONTWAIT, &err);
1052
        if (!skb)
1053
                return err;
1054
 
1055
        /* Create L2CAP header */
1056
        lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1057
        lh->cid = __cpu_to_le16(l2cap_pi(sk)->dcid);
1058
        lh->len = __cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1059
 
1060
        if (sk->type == SOCK_DGRAM)
1061
                put_unaligned(l2cap_pi(sk)->psm, (__u16 *) skb_put(skb, 2));
1062
 
1063
        if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
1064
                err = -EFAULT;
1065
                goto fail;
1066
        }
1067
 
1068
        sent += count;
1069
        len  -= count;
1070
 
1071
        /* Continuation fragments (no L2CAP header) */
1072
        frag = &skb_shinfo(skb)->frag_list;
1073
        while (len) {
1074
                count = MIN(conn->mtu, len);
1075
 
1076
                *frag = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
1077
                if (!*frag)
1078
                        goto fail;
1079
 
1080
                if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) {
1081
                        err = -EFAULT;
1082
                        goto fail;
1083
                }
1084
 
1085
                sent += count;
1086
                len  -= count;
1087
 
1088
                frag = &(*frag)->next;
1089
        }
1090
 
1091
        if ((err = hci_send_acl(conn->hcon, skb, 0)) < 0)
1092
                goto fail;
1093
 
1094
        return sent;
1095
 
1096
fail:
1097
        kfree_skb(skb);
1098
        return err;
1099
}
1100
 
1101
/* --------- L2CAP signalling commands --------- */
1102
static inline __u8 l2cap_get_ident(struct l2cap_conn *conn)
1103
{
1104
        __u8 id;
1105
 
1106
        /* Get next available identificator.
1107
         *    1 - 199 are used by kernel.
1108
         *  200 - 254 are used by utilities like l2ping, etc
1109
         */
1110
 
1111
        spin_lock(&conn->lock);
1112
 
1113
        if (++conn->tx_ident > 199)
1114
                conn->tx_ident = 1;
1115
 
1116
        id = conn->tx_ident;
1117
 
1118
        spin_unlock(&conn->lock);
1119
 
1120
        return id;
1121
}
1122
 
1123
static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
1124
                                __u8 code, __u8 ident, __u16 dlen, void *data)
1125
{
1126
        struct sk_buff *skb, **frag;
1127
        l2cap_cmd_hdr *cmd;
1128
        l2cap_hdr *lh;
1129
        int len, count;
1130
 
1131
        BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d", conn, code, ident, dlen);
1132
 
1133
        len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
1134
        count = MIN(conn->mtu, len);
1135
 
1136
        skb = bluez_skb_alloc(count, GFP_ATOMIC);
1137
        if (!skb)
1138
                return NULL;
1139
 
1140
        lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1141
        lh->len = __cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1142
        lh->cid = __cpu_to_le16(0x0001);
1143
 
1144
        cmd = (l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
1145
        cmd->code  = code;
1146
        cmd->ident = ident;
1147
        cmd->len   = __cpu_to_le16(dlen);
1148
 
1149
        if (dlen) {
1150
                count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
1151
                memcpy(skb_put(skb, count), data, count);
1152
                data += count;
1153
        }
1154
 
1155
        len -= skb->len;
1156
 
1157
        /* Continuation fragments (no L2CAP header) */
1158
        frag = &skb_shinfo(skb)->frag_list;
1159
        while (len) {
1160
                count = MIN(conn->mtu, len);
1161
 
1162
                *frag = bluez_skb_alloc(count, GFP_ATOMIC);
1163
                if (!*frag)
1164
                        goto fail;
1165
 
1166
                memcpy(skb_put(*frag, count), data, count);
1167
 
1168
                len  -= count;
1169
                data += count;
1170
 
1171
                frag = &(*frag)->next;
1172
        }
1173
 
1174
        return skb;
1175
 
1176
fail:
1177
        kfree_skb(skb);
1178
        return NULL;
1179
}
1180
 
1181
static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data)
1182
{
1183
        __u8 ident = l2cap_get_ident(conn);
1184
        struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
1185
 
1186
        BT_DBG("code 0x%2.2x", code);
1187
 
1188
        if (!skb)
1189
                return -ENOMEM;
1190
        return hci_send_acl(conn->hcon, skb, 0);
1191
}
1192
 
1193
static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data)
1194
{
1195
        struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
1196
 
1197
        BT_DBG("code 0x%2.2x", code);
1198
 
1199
        if (!skb)
1200
                return -ENOMEM;
1201
        return hci_send_acl(conn->hcon, skb, 0);
1202
}
1203
 
1204
static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
1205
{
1206
        l2cap_conf_opt *opt = *ptr;
1207
        int len;
1208
 
1209
        len = L2CAP_CONF_OPT_SIZE + opt->len;
1210
        *ptr += len;
1211
 
1212
        *type = opt->type;
1213
        *olen = opt->len;
1214
 
1215
        switch (opt->len) {
1216
        case 1:
1217
                *val = *((__u8 *) opt->val);
1218
                break;
1219
 
1220
        case 2:
1221
                *val = __le16_to_cpu(*((__u16 *)opt->val));
1222
                break;
1223
 
1224
        case 4:
1225
                *val = __le32_to_cpu(*((__u32 *)opt->val));
1226
                break;
1227
 
1228
        default:
1229
                *val = (unsigned long) opt->val;
1230
                break;
1231
        };
1232
 
1233
        BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
1234
        return len;
1235
}
1236
 
1237
static inline void l2cap_parse_conf_req(struct sock *sk, void *data, int len)
1238
{
1239
        int type, hint, olen;
1240
        unsigned long val;
1241
        void *ptr = data;
1242
 
1243
        BT_DBG("sk %p len %d", sk, len);
1244
 
1245
        while (len >= L2CAP_CONF_OPT_SIZE) {
1246
                len -= l2cap_get_conf_opt(&ptr, &type, &olen, &val);
1247
 
1248
                hint  = type & 0x80;
1249
                type &= 0x7f;
1250
 
1251
                switch (type) {
1252
                case L2CAP_CONF_MTU:
1253
                        l2cap_pi(sk)->conf_mtu = val;
1254
                        break;
1255
 
1256
                case L2CAP_CONF_FLUSH_TO:
1257
                        l2cap_pi(sk)->flush_to = val;
1258
                        break;
1259
 
1260
                case L2CAP_CONF_QOS:
1261
                        break;
1262
 
1263
                default:
1264
                        if (hint)
1265
                                break;
1266
 
1267
                        /* FIXME: Reject unknown option */
1268
                        break;
1269
                };
1270
        }
1271
}
1272
 
1273
static void l2cap_add_conf_opt(void **ptr, __u8 type, __u8 len, unsigned long val)
1274
{
1275
        register l2cap_conf_opt *opt = *ptr;
1276
 
1277
        BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
1278
 
1279
        opt->type = type;
1280
        opt->len  = len;
1281
 
1282
        switch (len) {
1283
        case 1:
1284
                *((__u8 *) opt->val)  = val;
1285
                break;
1286
 
1287
        case 2:
1288
                *((__u16 *) opt->val) = __cpu_to_le16(val);
1289
                break;
1290
 
1291
        case 4:
1292
                *((__u32 *) opt->val) = __cpu_to_le32(val);
1293
                break;
1294
 
1295
        default:
1296
                memcpy(opt->val, (void *) val, len);
1297
                break;
1298
        };
1299
 
1300
        *ptr += L2CAP_CONF_OPT_SIZE + len;
1301
}
1302
 
1303
static int l2cap_build_conf_req(struct sock *sk, void *data)
1304
{
1305
        struct l2cap_pinfo *pi = l2cap_pi(sk);
1306
        l2cap_conf_req *req = (l2cap_conf_req *) data;
1307
        void *ptr = req->data;
1308
 
1309
        BT_DBG("sk %p", sk);
1310
 
1311
        if (pi->imtu != L2CAP_DEFAULT_MTU)
1312
                l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
1313
 
1314
        /* FIXME. Need actual value of the flush timeout */
1315
        //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
1316
        //   l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
1317
 
1318
        req->dcid  = __cpu_to_le16(pi->dcid);
1319
        req->flags = __cpu_to_le16(0);
1320
 
1321
        return ptr - data;
1322
}
1323
 
1324
static inline int l2cap_conf_output(struct sock *sk, void **ptr)
1325
{
1326
        struct l2cap_pinfo *pi = l2cap_pi(sk);
1327
        int result = 0;
1328
 
1329
        /* Configure output options and let the other side know
1330
         * which ones we don't like.
1331
         */
1332
        if (pi->conf_mtu < pi->omtu) {
1333
                l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu);
1334
                result = L2CAP_CONF_UNACCEPT;
1335
        } else {
1336
                pi->omtu = pi->conf_mtu;
1337
        }
1338
 
1339
        BT_DBG("sk %p result %d", sk, result);
1340
        return result;
1341
}
1342
 
1343
static int l2cap_build_conf_rsp(struct sock *sk, void *data, int *result)
1344
{
1345
        l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
1346
        void *ptr = rsp->data;
1347
        u16 flags = 0;
1348
 
1349
        BT_DBG("sk %p complete %d", sk, result ? 1 : 0);
1350
 
1351
        if (result)
1352
                *result = l2cap_conf_output(sk, &ptr);
1353
        else
1354
                flags |= 0x0001;
1355
 
1356
        rsp->scid   = __cpu_to_le16(l2cap_pi(sk)->dcid);
1357
        rsp->result = __cpu_to_le16(result ? *result : 0);
1358
        rsp->flags  = __cpu_to_le16(flags);
1359
 
1360
        return ptr - data;
1361
}
1362
 
1363
static inline int l2cap_connect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
1364
{
1365
        struct l2cap_chan_list *list = &conn->chan_list;
1366
        l2cap_conn_req *req = (l2cap_conn_req *) data;
1367
        l2cap_conn_rsp rsp;
1368
        struct sock *sk, *parent;
1369
        int result = 0, status = 0;
1370
 
1371
        __u16 dcid = 0, scid = __le16_to_cpu(req->scid);
1372
        __u16 psm  = req->psm;
1373
 
1374
        BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
1375
 
1376
        /* Check if we have socket listening on psm */
1377
        parent = l2cap_get_sock_by_psm(BT_LISTEN, psm, conn->src);
1378
        if (!parent) {
1379
                result = L2CAP_CR_BAD_PSM;
1380
                goto sendresp;
1381
        }
1382
 
1383
        result = L2CAP_CR_NO_MEM;
1384
 
1385
        /* Check for backlog size */
1386
        if (parent->ack_backlog > parent->max_ack_backlog) {
1387
                BT_DBG("backlog full %d", parent->ack_backlog);
1388
                goto response;
1389
        }
1390
 
1391
        sk = l2cap_sock_alloc(NULL, BTPROTO_L2CAP, GFP_ATOMIC);
1392
        if (!sk)
1393
                goto response;
1394
 
1395
        write_lock(&list->lock);
1396
 
1397
        /* Check if we already have channel with that dcid */
1398
        if (__l2cap_get_chan_by_dcid(list, scid)) {
1399
                write_unlock(&list->lock);
1400
                sk->zapped = 1;
1401
                l2cap_sock_kill(sk);
1402
                goto response;
1403
        }
1404
 
1405
        hci_conn_hold(conn->hcon);
1406
 
1407
        l2cap_sock_init(sk, parent);
1408
        bacpy(&bluez_pi(sk)->src, conn->src);
1409
        bacpy(&bluez_pi(sk)->dst, conn->dst);
1410
        l2cap_pi(sk)->psm  = psm;
1411
        l2cap_pi(sk)->dcid = scid;
1412
 
1413
        __l2cap_chan_add(conn, sk, parent);
1414
        dcid = l2cap_pi(sk)->scid;
1415
 
1416
        l2cap_sock_set_timer(sk, sk->sndtimeo);
1417
 
1418
        /* Service level security */
1419
        result = L2CAP_CR_PEND;
1420
        status = L2CAP_CS_AUTHEN_PEND;
1421
        sk->state = BT_CONNECT2;
1422
        l2cap_pi(sk)->ident = cmd->ident;
1423
 
1424
        if (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT) {
1425
                if (!hci_conn_encrypt(conn->hcon))
1426
                        goto done;
1427
        } else if (l2cap_pi(sk)->link_mode & L2CAP_LM_AUTH) {
1428
                if (!hci_conn_auth(conn->hcon))
1429
                        goto done;
1430
        }
1431
 
1432
        sk->state = BT_CONFIG;
1433
        result = status = 0;
1434
 
1435
done:
1436
        write_unlock(&list->lock);
1437
 
1438
response:
1439
        bh_unlock_sock(parent);
1440
 
1441
sendresp:
1442
        rsp.scid   = __cpu_to_le16(scid);
1443
        rsp.dcid   = __cpu_to_le16(dcid);
1444
        rsp.result = __cpu_to_le16(result);
1445
        rsp.status = __cpu_to_le16(status);
1446
        l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
1447
        return 0;
1448
}
1449
 
1450
static inline int l2cap_connect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
1451
{
1452
        l2cap_conn_rsp *rsp = (l2cap_conn_rsp *) data;
1453
        __u16 scid, dcid, result, status;
1454
        struct sock *sk;
1455
        char req[128];
1456
 
1457
        scid   = __le16_to_cpu(rsp->scid);
1458
        dcid   = __le16_to_cpu(rsp->dcid);
1459
        result = __le16_to_cpu(rsp->result);
1460
        status = __le16_to_cpu(rsp->status);
1461
 
1462
        BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
1463
 
1464
        if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
1465
                return -ENOENT;
1466
 
1467
        switch (result) {
1468
        case L2CAP_CR_SUCCESS:
1469
                sk->state = BT_CONFIG;
1470
                l2cap_pi(sk)->dcid = dcid;
1471
                l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
1472
 
1473
                l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
1474
                break;
1475
 
1476
        case L2CAP_CR_PEND:
1477
                break;
1478
 
1479
        default:
1480
                l2cap_chan_del(sk, ECONNREFUSED);
1481
                break;
1482
        }
1483
 
1484
        bh_unlock_sock(sk);
1485
        return 0;
1486
}
1487
 
1488
static inline int l2cap_config_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
1489
{
1490
        l2cap_conf_req * req = (l2cap_conf_req *) data;
1491
        __u16 dcid, flags;
1492
        __u8 rsp[64];
1493
        struct sock *sk;
1494
        int result;
1495
 
1496
        dcid  = __le16_to_cpu(req->dcid);
1497
        flags = __le16_to_cpu(req->flags);
1498
 
1499
        BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
1500
 
1501
        if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
1502
                return -ENOENT;
1503
 
1504
        l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
1505
 
1506
        if (flags & 0x0001) {
1507
                /* Incomplete config. Send empty response. */
1508
                l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
1509
                goto unlock;
1510
        }
1511
 
1512
        /* Complete config. */
1513
        l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, &result), rsp);
1514
 
1515
        if (result)
1516
                goto unlock;
1517
 
1518
        /* Output config done */
1519
        l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
1520
 
1521
        if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
1522
                sk->state = BT_CONNECTED;
1523
                l2cap_chan_ready(sk);
1524
        } else if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
1525
                char req[64];
1526
                l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
1527
        }
1528
 
1529
unlock:
1530
        bh_unlock_sock(sk);
1531
        return 0;
1532
}
1533
 
1534
static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
1535
{
1536
        l2cap_conf_rsp *rsp = (l2cap_conf_rsp *)data;
1537
        __u16 scid, flags, result;
1538
        struct sock *sk;
1539
        int err = 0;
1540
 
1541
        scid   = __le16_to_cpu(rsp->scid);
1542
        flags  = __le16_to_cpu(rsp->flags);
1543
        result = __le16_to_cpu(rsp->result);
1544
 
1545
        BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x", scid, flags, result);
1546
 
1547
        if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
1548
                return -ENOENT;
1549
 
1550
        switch (result) {
1551
        case L2CAP_CONF_SUCCESS:
1552
                break;
1553
 
1554
        case L2CAP_CONF_UNACCEPT:
1555
                if (++l2cap_pi(sk)->conf_retry < L2CAP_CONF_MAX_RETRIES) {
1556
                        char req[128];
1557
                        /*
1558
                           It does not make sense to adjust L2CAP parameters
1559
                           that are currently defined in the spec. We simply
1560
                           resend config request that we sent earlier. It is
1561
                           stupid :) but it helps qualification testing
1562
                           which expects at least some response from us.
1563
                        */
1564
                        l2cap_send_req(conn, L2CAP_CONF_REQ,
1565
                                l2cap_build_conf_req(sk, req), req);
1566
                        goto done;
1567
                }
1568
        default:
1569
                sk->state = BT_DISCONN;
1570
                sk->err   = ECONNRESET;
1571
                l2cap_sock_set_timer(sk, HZ * 5);
1572
                {
1573
                        l2cap_disconn_req req;
1574
                        req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
1575
                        req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
1576
                        l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
1577
                }
1578
                goto done;
1579
        }
1580
 
1581
        if (flags & 0x01)
1582
                goto done;
1583
 
1584
        /* Input config done */
1585
        l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
1586
 
1587
        if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
1588
                sk->state = BT_CONNECTED;
1589
                l2cap_chan_ready(sk);
1590
        }
1591
 
1592
done:
1593
        bh_unlock_sock(sk);
1594
        return err;
1595
}
1596
 
1597
static inline int l2cap_disconnect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
1598
{
1599
        l2cap_disconn_req *req = (l2cap_disconn_req *) data;
1600
        l2cap_disconn_rsp rsp;
1601
        __u16 dcid, scid;
1602
        struct sock *sk;
1603
 
1604
        scid = __le16_to_cpu(req->scid);
1605
        dcid = __le16_to_cpu(req->dcid);
1606
 
1607
        BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
1608
 
1609
        if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
1610
                return 0;
1611
 
1612
        rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
1613
        rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
1614
        l2cap_send_rsp(conn, cmd->ident, L2CAP_DISCONN_RSP, L2CAP_DISCONN_RSP_SIZE, &rsp);
1615
 
1616
        sk->shutdown = SHUTDOWN_MASK;
1617
 
1618
        l2cap_chan_del(sk, ECONNRESET);
1619
        bh_unlock_sock(sk);
1620
 
1621
        l2cap_sock_kill(sk);
1622
        return 0;
1623
}
1624
 
1625
static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
1626
{
1627
        l2cap_disconn_rsp *rsp = (l2cap_disconn_rsp *) data;
1628
        __u16 dcid, scid;
1629
        struct sock *sk;
1630
 
1631
        scid = __le16_to_cpu(rsp->scid);
1632
        dcid = __le16_to_cpu(rsp->dcid);
1633
 
1634
        BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
1635
 
1636
        if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
1637
                return 0;
1638
        l2cap_chan_del(sk, 0);
1639
        bh_unlock_sock(sk);
1640
 
1641
        l2cap_sock_kill(sk);
1642
        return 0;
1643
}
1644
 
1645
static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
1646
{
1647
        __u8 *data = skb->data;
1648
        int len = skb->len;
1649
        l2cap_cmd_hdr cmd;
1650
        int err = 0;
1651
 
1652
        l2cap_raw_recv(conn, skb);
1653
 
1654
        while (len >= L2CAP_CMD_HDR_SIZE) {
1655
                memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
1656
                data += L2CAP_CMD_HDR_SIZE;
1657
                len  -= L2CAP_CMD_HDR_SIZE;
1658
 
1659
                cmd.len = __le16_to_cpu(cmd.len);
1660
 
1661
                BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd.len, cmd.ident);
1662
 
1663
                if (cmd.len > len || !cmd.ident) {
1664
                        BT_DBG("corrupted command");
1665
                        break;
1666
                }
1667
 
1668
                switch (cmd.code) {
1669
                case L2CAP_CONN_REQ:
1670
                        err = l2cap_connect_req(conn, &cmd, data);
1671
                        break;
1672
 
1673
                case L2CAP_CONN_RSP:
1674
                        err = l2cap_connect_rsp(conn, &cmd, data);
1675
                        break;
1676
 
1677
                case L2CAP_CONF_REQ:
1678
                        err = l2cap_config_req(conn, &cmd, data);
1679
                        break;
1680
 
1681
                case L2CAP_CONF_RSP:
1682
                        err = l2cap_config_rsp(conn, &cmd, data);
1683
                        break;
1684
 
1685
                case L2CAP_DISCONN_REQ:
1686
                        err = l2cap_disconnect_req(conn, &cmd, data);
1687
                        break;
1688
 
1689
                case L2CAP_DISCONN_RSP:
1690
                        err = l2cap_disconnect_rsp(conn, &cmd, data);
1691
                        break;
1692
 
1693
                case L2CAP_COMMAND_REJ:
1694
                        /* FIXME: We should process this */
1695
                        break;
1696
 
1697
                case L2CAP_ECHO_REQ:
1698
                        l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
1699
                        break;
1700
 
1701
                case L2CAP_ECHO_RSP:
1702
                case L2CAP_INFO_REQ:
1703
                case L2CAP_INFO_RSP:
1704
                        break;
1705
 
1706
                default:
1707
                        BT_ERR("Unknown signaling command 0x%2.2x", cmd.code);
1708
                        err = -EINVAL;
1709
                        break;
1710
                };
1711
 
1712
                if (err) {
1713
                        l2cap_cmd_rej rej;
1714
                        BT_DBG("error %d", err);
1715
 
1716
                        /* FIXME: Map err to a valid reason. */
1717
                        rej.reason = __cpu_to_le16(0);
1718
                        l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
1719
                }
1720
 
1721
                data += cmd.len;
1722
                len  -= cmd.len;
1723
        }
1724
 
1725
        kfree_skb(skb);
1726
}
1727
 
1728
static inline int l2cap_data_channel(struct l2cap_conn *conn, __u16 cid, struct sk_buff *skb)
1729
{
1730
        struct sock *sk;
1731
 
1732
        sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
1733
        if (!sk) {
1734
                BT_DBG("unknown cid 0x%4.4x", cid);
1735
                goto drop;
1736
        }
1737
 
1738
        BT_DBG("sk %p, len %d", sk, skb->len);
1739
 
1740
        if (sk->state != BT_CONNECTED)
1741
                goto drop;
1742
 
1743
        if (l2cap_pi(sk)->imtu < skb->len)
1744
                goto drop;
1745
 
1746
        /* If socket recv buffers overflows we drop data here
1747
         * which is *bad* because L2CAP has to be reliable.
1748
         * But we don't have any other choice. L2CAP doesn't
1749
         * provide flow control mechanism */
1750
 
1751
        if (!sock_queue_rcv_skb(sk, skb))
1752
                goto done;
1753
 
1754
drop:
1755
        kfree_skb(skb);
1756
 
1757
done:
1758
        if (sk) bh_unlock_sock(sk);
1759
        return 0;
1760
}
1761
 
1762
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __u16 psm, struct sk_buff *skb)
1763
{
1764
        struct sock *sk;
1765
 
1766
        sk = l2cap_get_sock_by_psm(0, psm, conn->src);
1767
        if (!sk)
1768
                goto drop;
1769
 
1770
        BT_DBG("sk %p, len %d", sk, skb->len);
1771
 
1772
        if (sk->state != BT_BOUND && sk->state != BT_CONNECTED)
1773
                goto drop;
1774
 
1775
        if (l2cap_pi(sk)->imtu < skb->len)
1776
                goto drop;
1777
 
1778
        if (!sock_queue_rcv_skb(sk, skb))
1779
                goto done;
1780
 
1781
drop:
1782
        kfree_skb(skb);
1783
 
1784
done:
1785
        if (sk) bh_unlock_sock(sk);
1786
        return 0;
1787
}
1788
 
1789
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
1790
{
1791
        l2cap_hdr *lh = (l2cap_hdr *) skb->data;
1792
        __u16 cid, psm, len;
1793
 
1794
        skb_pull(skb, L2CAP_HDR_SIZE);
1795
        cid = __le16_to_cpu(lh->cid);
1796
        len = __le16_to_cpu(lh->len);
1797
 
1798
        BT_DBG("len %d, cid 0x%4.4x", len, cid);
1799
 
1800
        switch (cid) {
1801
        case 0x0001:
1802
                l2cap_sig_channel(conn, skb);
1803
                break;
1804
 
1805
        case 0x0002:
1806
                psm = get_unaligned((__u16 *) skb->data);
1807
                skb_pull(skb, 2);
1808
                l2cap_conless_channel(conn, psm, skb);
1809
                break;
1810
 
1811
        default:
1812
                l2cap_data_channel(conn, cid, skb);
1813
                break;
1814
        }
1815
}
1816
 
1817
/* ------------ L2CAP interface with lower layer (HCI) ------------- */
1818
 
1819
static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
1820
{
1821
        int exact = 0, lm1 = 0, lm2 = 0;
1822
        register struct sock *sk;
1823
 
1824
        if (type != ACL_LINK)
1825
                return 0;
1826
 
1827
        BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
1828
 
1829
        /* Find listening sockets and check their link_mode */
1830
        read_lock(&l2cap_sk_list.lock);
1831
        for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
1832
                if (sk->state != BT_LISTEN)
1833
                        continue;
1834
 
1835
                if (!bacmp(&bluez_pi(sk)->src, &hdev->bdaddr)) {
1836
                        lm1 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
1837
                        exact++;
1838
                } else if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
1839
                        lm2 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
1840
        }
1841
        read_unlock(&l2cap_sk_list.lock);
1842
 
1843
        return exact ? lm1 : lm2;
1844
}
1845
 
1846
static int l2cap_connect_cfm(struct hci_conn *hcon, __u8 status)
1847
{
1848
        BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
1849
 
1850
        if (hcon->type != ACL_LINK)
1851
                return 0;
1852
 
1853
        if (!status) {
1854
                struct l2cap_conn *conn;
1855
 
1856
                conn = l2cap_conn_add(hcon, status);
1857
                if (conn)
1858
                        l2cap_conn_ready(conn);
1859
        } else
1860
                l2cap_conn_del(hcon, bterr(status));
1861
 
1862
        return 0;
1863
}
1864
 
1865
static int l2cap_disconn_ind(struct hci_conn *hcon, __u8 reason)
1866
{
1867
        BT_DBG("hcon %p reason %d", hcon, reason);
1868
 
1869
        if (hcon->type != ACL_LINK)
1870
                return 0;
1871
 
1872
        l2cap_conn_del(hcon, bterr(reason));
1873
        return 0;
1874
}
1875
 
1876
static int l2cap_auth_cfm(struct hci_conn *hcon, __u8 status)
1877
{
1878
        struct l2cap_chan_list *l;
1879
        struct l2cap_conn *conn;
1880
        l2cap_conn_rsp rsp;
1881
        struct sock *sk;
1882
        int result;
1883
 
1884
        if (!(conn = hcon->l2cap_data))
1885
                return 0;
1886
        l = &conn->chan_list;
1887
 
1888
        BT_DBG("conn %p", conn);
1889
 
1890
        read_lock(&l->lock);
1891
 
1892
        for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
1893
                bh_lock_sock(sk);
1894
 
1895
                if (sk->state != BT_CONNECT2 ||
1896
                                (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT)) {
1897
                        bh_unlock_sock(sk);
1898
                        continue;
1899
                }
1900
 
1901
                if (!status) {
1902
                        sk->state = BT_CONFIG;
1903
                        result = 0;
1904
                } else {
1905
                        sk->state = BT_DISCONN;
1906
                        l2cap_sock_set_timer(sk, HZ/10);
1907
                        result = L2CAP_CR_SEC_BLOCK;
1908
                }
1909
 
1910
                rsp.scid   = __cpu_to_le16(l2cap_pi(sk)->dcid);
1911
                rsp.dcid   = __cpu_to_le16(l2cap_pi(sk)->scid);
1912
                rsp.result = __cpu_to_le16(result);
1913
                rsp.status = __cpu_to_le16(0);
1914
                l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
1915
                        L2CAP_CONN_RSP_SIZE, &rsp);
1916
 
1917
                bh_unlock_sock(sk);
1918
        }
1919
 
1920
        read_unlock(&l->lock);
1921
        return 0;
1922
}
1923
 
1924
static int l2cap_encrypt_cfm(struct hci_conn *hcon, __u8 status)
1925
{
1926
        struct l2cap_chan_list *l;
1927
        struct l2cap_conn *conn;
1928
        l2cap_conn_rsp rsp;
1929
        struct sock *sk;
1930
        int result;
1931
 
1932
        if (!(conn = hcon->l2cap_data))
1933
                return 0;
1934
        l = &conn->chan_list;
1935
 
1936
        BT_DBG("conn %p", conn);
1937
 
1938
        read_lock(&l->lock);
1939
 
1940
        for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
1941
                bh_lock_sock(sk);
1942
 
1943
                if (sk->state != BT_CONNECT2) {
1944
                        bh_unlock_sock(sk);
1945
                        continue;
1946
                }
1947
 
1948
                if (!status) {
1949
                        sk->state = BT_CONFIG;
1950
                        result = 0;
1951
                } else {
1952
                        sk->state = BT_DISCONN;
1953
                        l2cap_sock_set_timer(sk, HZ/10);
1954
                        result = L2CAP_CR_SEC_BLOCK;
1955
                }
1956
 
1957
                rsp.scid   = __cpu_to_le16(l2cap_pi(sk)->dcid);
1958
                rsp.dcid   = __cpu_to_le16(l2cap_pi(sk)->scid);
1959
                rsp.result = __cpu_to_le16(result);
1960
                rsp.status = __cpu_to_le16(0);
1961
                l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
1962
                        L2CAP_CONN_RSP_SIZE, &rsp);
1963
 
1964
                bh_unlock_sock(sk);
1965
        }
1966
 
1967
        read_unlock(&l->lock);
1968
        return 0;
1969
}
1970
 
1971
static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, __u16 flags)
1972
{
1973
        struct l2cap_conn *conn = hcon->l2cap_data;
1974
 
1975
        if (!conn && !(conn = l2cap_conn_add(hcon, 0)))
1976
                goto drop;
1977
 
1978
        BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
1979
 
1980
        if (flags & ACL_START) {
1981
                l2cap_hdr *hdr;
1982
                int len;
1983
 
1984
                if (conn->rx_len) {
1985
                        BT_ERR("Unexpected start frame (len %d)", skb->len);
1986
                        kfree_skb(conn->rx_skb);
1987
                        conn->rx_skb = NULL;
1988
                        conn->rx_len = 0;
1989
                        l2cap_conn_unreliable(conn, ECOMM);
1990
                }
1991
 
1992
                if (skb->len < 2) {
1993
                        BT_ERR("Frame is too short (len %d)", skb->len);
1994
                        l2cap_conn_unreliable(conn, ECOMM);
1995
                        goto drop;
1996
                }
1997
 
1998
                hdr = (l2cap_hdr *) skb->data;
1999
                len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
2000
 
2001
                if (len == skb->len) {
2002
                        /* Complete frame received */
2003
                        l2cap_recv_frame(conn, skb);
2004
                        return 0;
2005
                }
2006
 
2007
                BT_DBG("Start: total len %d, frag len %d", len, skb->len);
2008
 
2009
                if (skb->len > len) {
2010
                        BT_ERR("Frame is too long (len %d, expected len %d)",
2011
                                skb->len, len);
2012
                        l2cap_conn_unreliable(conn, ECOMM);
2013
                        goto drop;
2014
                }
2015
 
2016
                /* Allocate skb for the complete frame including header */
2017
                conn->rx_skb = bluez_skb_alloc(len, GFP_ATOMIC);
2018
                if (!conn->rx_skb)
2019
                        goto drop;
2020
 
2021
                memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
2022
                conn->rx_len = len - skb->len;
2023
        } else {
2024
                BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
2025
 
2026
                if (!conn->rx_len) {
2027
                        BT_ERR("Unexpected continuation frame (len %d)", skb->len);
2028
                        l2cap_conn_unreliable(conn, ECOMM);
2029
                        goto drop;
2030
                }
2031
 
2032
                if (skb->len > conn->rx_len) {
2033
                        BT_ERR("Fragment is too long (len %d, expected %d)",
2034
                                        skb->len, conn->rx_len);
2035
                        kfree_skb(conn->rx_skb);
2036
                        conn->rx_skb = NULL;
2037
                        conn->rx_len = 0;
2038
                        l2cap_conn_unreliable(conn, ECOMM);
2039
                        goto drop;
2040
                }
2041
 
2042
                memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
2043
                conn->rx_len -= skb->len;
2044
 
2045
                if (!conn->rx_len) {
2046
                        /* Complete frame received */
2047
                        l2cap_recv_frame(conn, conn->rx_skb);
2048
                        conn->rx_skb = NULL;
2049
                }
2050
        }
2051
 
2052
drop:
2053
        kfree_skb(skb);
2054
        return 0;
2055
}
2056
 
2057
/* ----- Proc fs support ------ */
2058
static int l2cap_sock_dump(char *buf, struct bluez_sock_list *list)
2059
{
2060
        struct l2cap_pinfo *pi;
2061
        struct sock *sk;
2062
        char *ptr = buf;
2063
 
2064
        read_lock_bh(&list->lock);
2065
 
2066
        for (sk = list->head; sk; sk = sk->next) {
2067
                pi = l2cap_pi(sk);
2068
                ptr += sprintf(ptr, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d 0x%x\n",
2069
                                batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
2070
                                sk->state, pi->psm, pi->scid, pi->dcid, pi->imtu, pi->omtu,
2071
                                pi->link_mode);
2072
        }
2073
 
2074
        read_unlock_bh(&list->lock);
2075
 
2076
        ptr += sprintf(ptr, "\n");
2077
        return ptr - buf;
2078
}
2079
 
2080
static int l2cap_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
2081
{
2082
        char *ptr = buf;
2083
        int len;
2084
 
2085
        BT_DBG("count %d, offset %ld", count, offset);
2086
 
2087
        ptr += l2cap_sock_dump(ptr, &l2cap_sk_list);
2088
        len  = ptr - buf;
2089
 
2090
        if (len <= count + offset)
2091
                *eof = 1;
2092
 
2093
        *start = buf + offset;
2094
        len -= offset;
2095
 
2096
        if (len > count)
2097
                len = count;
2098
        if (len < 0)
2099
                len = 0;
2100
 
2101
        return len;
2102
}
2103
 
2104
static struct proto_ops l2cap_sock_ops = {
2105
        family:         PF_BLUETOOTH,
2106
        release:        l2cap_sock_release,
2107
        bind:           l2cap_sock_bind,
2108
        connect:        l2cap_sock_connect,
2109
        listen:         l2cap_sock_listen,
2110
        accept:         l2cap_sock_accept,
2111
        getname:        l2cap_sock_getname,
2112
        sendmsg:        l2cap_sock_sendmsg,
2113
        recvmsg:        bluez_sock_recvmsg,
2114
        poll:           bluez_sock_poll,
2115
        socketpair:     sock_no_socketpair,
2116
        ioctl:          sock_no_ioctl,
2117
        shutdown:       l2cap_sock_shutdown,
2118
        setsockopt:     l2cap_sock_setsockopt,
2119
        getsockopt:     l2cap_sock_getsockopt,
2120
        mmap:           sock_no_mmap
2121
};
2122
 
2123
static struct net_proto_family l2cap_sock_family_ops = {
2124
        family:         PF_BLUETOOTH,
2125
        create:         l2cap_sock_create
2126
};
2127
 
2128
static struct hci_proto l2cap_hci_proto = {
2129
        name:           "L2CAP",
2130
        id:             HCI_PROTO_L2CAP,
2131
        connect_ind:    l2cap_connect_ind,
2132
        connect_cfm:    l2cap_connect_cfm,
2133
        disconn_ind:    l2cap_disconn_ind,
2134
        recv_acldata:   l2cap_recv_acldata,
2135
        auth_cfm:       l2cap_auth_cfm,
2136
        encrypt_cfm:    l2cap_encrypt_cfm
2137
};
2138
 
2139
int __init l2cap_init(void)
2140
{
2141
        int err;
2142
 
2143
        if ((err = bluez_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops))) {
2144
                BT_ERR("Can't register L2CAP socket");
2145
                return err;
2146
        }
2147
 
2148
        if ((err = hci_register_proto(&l2cap_hci_proto))) {
2149
                BT_ERR("Can't register L2CAP protocol");
2150
                return err;
2151
        }
2152
 
2153
        create_proc_read_entry("bluetooth/l2cap", 0, 0, l2cap_read_proc, NULL);
2154
 
2155
        BT_INFO("BlueZ L2CAP ver %s Copyright (C) 2000,2001 Qualcomm Inc", VERSION);
2156
        BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
2157
        return 0;
2158
}
2159
 
2160
void l2cap_cleanup(void)
2161
{
2162
        remove_proc_entry("bluetooth/l2cap", NULL);
2163
 
2164
        /* Unregister socket and protocol */
2165
        if (bluez_sock_unregister(BTPROTO_L2CAP))
2166
                BT_ERR("Can't unregister L2CAP socket");
2167
 
2168
        if (hci_unregister_proto(&l2cap_hci_proto))
2169
                BT_ERR("Can't unregister L2CAP protocol");
2170
}
2171
 
2172
void l2cap_load(void)
2173
{
2174
        /* Dummy function to trigger automatic L2CAP module loading by
2175
           other modules that use L2CAP sockets but do not use any other
2176
           symbols from it. */
2177
        return;
2178
}
2179
 
2180
EXPORT_SYMBOL(l2cap_load);
2181
 
2182
module_init(l2cap_init);
2183
module_exit(l2cap_cleanup);
2184
 
2185
MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
2186
MODULE_DESCRIPTION("BlueZ L2CAP ver " VERSION);
2187
MODULE_LICENSE("GPL");

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.