SUNRPC: Ensure we always bump the backlog queue in xprt_free_slot
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / net / bluetooth / l2cap_core.c
blobb3bdb482bbe6f5fdf2d197fc1035082f495c448b
1 /*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc.
7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License version 2 as
11 published by the Free Software Foundation;
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24 SOFTWARE IS DISCLAIMED.
27 /* Bluetooth L2CAP core. */
29 #include <linux/module.h>
31 #include <linux/types.h>
32 #include <linux/capability.h>
33 #include <linux/errno.h>
34 #include <linux/kernel.h>
35 #include <linux/sched.h>
36 #include <linux/slab.h>
37 #include <linux/poll.h>
38 #include <linux/fcntl.h>
39 #include <linux/init.h>
40 #include <linux/interrupt.h>
41 #include <linux/socket.h>
42 #include <linux/skbuff.h>
43 #include <linux/list.h>
44 #include <linux/device.h>
45 #include <linux/debugfs.h>
46 #include <linux/seq_file.h>
47 #include <linux/uaccess.h>
48 #include <linux/crc16.h>
49 #include <net/sock.h>
51 #include <asm/system.h>
52 #include <asm/unaligned.h>
54 #include <net/bluetooth/bluetooth.h>
55 #include <net/bluetooth/hci_core.h>
56 #include <net/bluetooth/l2cap.h>
57 #include <net/bluetooth/smp.h>
59 int disable_ertm;
61 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
62 static u8 l2cap_fixed_chan[8] = { 0x02, };
64 static LIST_HEAD(chan_list);
65 static DEFINE_RWLOCK(chan_list_lock);
67 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
68 u8 code, u8 ident, u16 dlen, void *data);
69 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
70 void *data);
71 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
72 static void l2cap_send_disconn_req(struct l2cap_conn *conn,
73 struct l2cap_chan *chan, int err);
75 static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb);
77 /* ---- L2CAP channels ---- */
79 static inline void chan_hold(struct l2cap_chan *c)
81 atomic_inc(&c->refcnt);
84 static inline void chan_put(struct l2cap_chan *c)
86 if (atomic_dec_and_test(&c->refcnt))
87 kfree(c);
90 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
92 struct l2cap_chan *c;
94 list_for_each_entry(c, &conn->chan_l, list) {
95 if (c->dcid == cid)
96 return c;
98 return NULL;
102 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
104 struct l2cap_chan *c;
106 list_for_each_entry(c, &conn->chan_l, list) {
107 if (c->scid == cid)
108 return c;
110 return NULL;
113 /* Find channel with given SCID.
114 * Returns locked socket */
115 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
117 struct l2cap_chan *c;
119 read_lock(&conn->chan_lock);
120 c = __l2cap_get_chan_by_scid(conn, cid);
121 if (c)
122 bh_lock_sock(c->sk);
123 read_unlock(&conn->chan_lock);
124 return c;
127 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
129 struct l2cap_chan *c;
131 list_for_each_entry(c, &conn->chan_l, list) {
132 if (c->ident == ident)
133 return c;
135 return NULL;
138 static inline struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
140 struct l2cap_chan *c;
142 read_lock(&conn->chan_lock);
143 c = __l2cap_get_chan_by_ident(conn, ident);
144 if (c)
145 bh_lock_sock(c->sk);
146 read_unlock(&conn->chan_lock);
147 return c;
150 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
152 struct l2cap_chan *c;
154 list_for_each_entry(c, &chan_list, global_l) {
155 if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
156 goto found;
159 c = NULL;
160 found:
161 return c;
164 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
166 int err;
168 write_lock_bh(&chan_list_lock);
170 if (psm && __l2cap_global_chan_by_addr(psm, src)) {
171 err = -EADDRINUSE;
172 goto done;
175 if (psm) {
176 chan->psm = psm;
177 chan->sport = psm;
178 err = 0;
179 } else {
180 u16 p;
182 err = -EINVAL;
183 for (p = 0x1001; p < 0x1100; p += 2)
184 if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
185 chan->psm = cpu_to_le16(p);
186 chan->sport = cpu_to_le16(p);
187 err = 0;
188 break;
192 done:
193 write_unlock_bh(&chan_list_lock);
194 return err;
197 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid)
199 write_lock_bh(&chan_list_lock);
201 chan->scid = scid;
203 write_unlock_bh(&chan_list_lock);
205 return 0;
208 static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
210 u16 cid = L2CAP_CID_DYN_START;
212 for (; cid < L2CAP_CID_DYN_END; cid++) {
213 if (!__l2cap_get_chan_by_scid(conn, cid))
214 return cid;
217 return 0;
220 static void l2cap_set_timer(struct l2cap_chan *chan, struct timer_list *timer, long timeout)
222 BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->state, timeout);
224 if (!mod_timer(timer, jiffies + msecs_to_jiffies(timeout)))
225 chan_hold(chan);
228 static void l2cap_clear_timer(struct l2cap_chan *chan, struct timer_list *timer)
230 BT_DBG("chan %p state %d", chan, chan->state);
232 if (timer_pending(timer) && del_timer(timer))
233 chan_put(chan);
236 static void l2cap_state_change(struct l2cap_chan *chan, int state)
238 chan->state = state;
239 chan->ops->state_change(chan->data, state);
242 static void l2cap_chan_timeout(unsigned long arg)
244 struct l2cap_chan *chan = (struct l2cap_chan *) arg;
245 struct sock *sk = chan->sk;
246 int reason;
248 BT_DBG("chan %p state %d", chan, chan->state);
250 bh_lock_sock(sk);
252 if (sock_owned_by_user(sk)) {
253 /* sk is owned by user. Try again later */
254 __set_chan_timer(chan, HZ / 5);
255 bh_unlock_sock(sk);
256 chan_put(chan);
257 return;
260 if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
261 reason = ECONNREFUSED;
262 else if (chan->state == BT_CONNECT &&
263 chan->sec_level != BT_SECURITY_SDP)
264 reason = ECONNREFUSED;
265 else
266 reason = ETIMEDOUT;
268 l2cap_chan_close(chan, reason);
270 bh_unlock_sock(sk);
272 chan->ops->close(chan->data);
273 chan_put(chan);
276 struct l2cap_chan *l2cap_chan_create(struct sock *sk)
278 struct l2cap_chan *chan;
280 chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
281 if (!chan)
282 return NULL;
284 chan->sk = sk;
286 write_lock_bh(&chan_list_lock);
287 list_add(&chan->global_l, &chan_list);
288 write_unlock_bh(&chan_list_lock);
290 setup_timer(&chan->chan_timer, l2cap_chan_timeout, (unsigned long) chan);
292 chan->state = BT_OPEN;
294 atomic_set(&chan->refcnt, 1);
296 return chan;
299 void l2cap_chan_destroy(struct l2cap_chan *chan)
301 write_lock_bh(&chan_list_lock);
302 list_del(&chan->global_l);
303 write_unlock_bh(&chan_list_lock);
305 chan_put(chan);
308 static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
310 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
311 chan->psm, chan->dcid);
313 conn->disc_reason = 0x13;
315 chan->conn = conn;
317 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
318 if (conn->hcon->type == LE_LINK) {
319 /* LE connection */
320 chan->omtu = L2CAP_LE_DEFAULT_MTU;
321 chan->scid = L2CAP_CID_LE_DATA;
322 chan->dcid = L2CAP_CID_LE_DATA;
323 } else {
324 /* Alloc CID for connection-oriented socket */
325 chan->scid = l2cap_alloc_cid(conn);
326 chan->omtu = L2CAP_DEFAULT_MTU;
328 } else if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
329 /* Connectionless socket */
330 chan->scid = L2CAP_CID_CONN_LESS;
331 chan->dcid = L2CAP_CID_CONN_LESS;
332 chan->omtu = L2CAP_DEFAULT_MTU;
333 } else {
334 /* Raw socket can send/recv signalling messages only */
335 chan->scid = L2CAP_CID_SIGNALING;
336 chan->dcid = L2CAP_CID_SIGNALING;
337 chan->omtu = L2CAP_DEFAULT_MTU;
340 chan_hold(chan);
342 list_add(&chan->list, &conn->chan_l);
345 /* Delete channel.
346 * Must be called on the locked socket. */
347 static void l2cap_chan_del(struct l2cap_chan *chan, int err)
349 struct sock *sk = chan->sk;
350 struct l2cap_conn *conn = chan->conn;
351 struct sock *parent = bt_sk(sk)->parent;
353 __clear_chan_timer(chan);
355 BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
357 if (conn) {
358 /* Delete from channel list */
359 write_lock_bh(&conn->chan_lock);
360 list_del(&chan->list);
361 write_unlock_bh(&conn->chan_lock);
362 chan_put(chan);
364 chan->conn = NULL;
365 hci_conn_put(conn->hcon);
368 l2cap_state_change(chan, BT_CLOSED);
369 sock_set_flag(sk, SOCK_ZAPPED);
371 if (err)
372 sk->sk_err = err;
374 if (parent) {
375 bt_accept_unlink(sk);
376 parent->sk_data_ready(parent, 0);
377 } else
378 sk->sk_state_change(sk);
380 if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
381 test_bit(CONF_INPUT_DONE, &chan->conf_state)))
382 return;
384 skb_queue_purge(&chan->tx_q);
386 if (chan->mode == L2CAP_MODE_ERTM) {
387 struct srej_list *l, *tmp;
389 __clear_retrans_timer(chan);
390 __clear_monitor_timer(chan);
391 __clear_ack_timer(chan);
393 skb_queue_purge(&chan->srej_q);
395 list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
396 list_del(&l->list);
397 kfree(l);
402 static void l2cap_chan_cleanup_listen(struct sock *parent)
404 struct sock *sk;
406 BT_DBG("parent %p", parent);
408 /* Close not yet accepted channels */
409 while ((sk = bt_accept_dequeue(parent, NULL))) {
410 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
411 __clear_chan_timer(chan);
412 lock_sock(sk);
413 l2cap_chan_close(chan, ECONNRESET);
414 release_sock(sk);
415 chan->ops->close(chan->data);
419 void l2cap_chan_close(struct l2cap_chan *chan, int reason)
421 struct l2cap_conn *conn = chan->conn;
422 struct sock *sk = chan->sk;
424 BT_DBG("chan %p state %d socket %p", chan, chan->state, sk->sk_socket);
426 switch (chan->state) {
427 case BT_LISTEN:
428 l2cap_chan_cleanup_listen(sk);
430 l2cap_state_change(chan, BT_CLOSED);
431 sock_set_flag(sk, SOCK_ZAPPED);
432 break;
434 case BT_CONNECTED:
435 case BT_CONFIG:
436 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
437 conn->hcon->type == ACL_LINK) {
438 __clear_chan_timer(chan);
439 __set_chan_timer(chan, sk->sk_sndtimeo);
440 l2cap_send_disconn_req(conn, chan, reason);
441 } else
442 l2cap_chan_del(chan, reason);
443 break;
445 case BT_CONNECT2:
446 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
447 conn->hcon->type == ACL_LINK) {
448 struct l2cap_conn_rsp rsp;
449 __u16 result;
451 if (bt_sk(sk)->defer_setup)
452 result = L2CAP_CR_SEC_BLOCK;
453 else
454 result = L2CAP_CR_BAD_PSM;
455 l2cap_state_change(chan, BT_DISCONN);
457 rsp.scid = cpu_to_le16(chan->dcid);
458 rsp.dcid = cpu_to_le16(chan->scid);
459 rsp.result = cpu_to_le16(result);
460 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
461 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
462 sizeof(rsp), &rsp);
465 l2cap_chan_del(chan, reason);
466 break;
468 case BT_CONNECT:
469 case BT_DISCONN:
470 l2cap_chan_del(chan, reason);
471 break;
473 default:
474 sock_set_flag(sk, SOCK_ZAPPED);
475 break;
479 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
481 if (chan->chan_type == L2CAP_CHAN_RAW) {
482 switch (chan->sec_level) {
483 case BT_SECURITY_HIGH:
484 return HCI_AT_DEDICATED_BONDING_MITM;
485 case BT_SECURITY_MEDIUM:
486 return HCI_AT_DEDICATED_BONDING;
487 default:
488 return HCI_AT_NO_BONDING;
490 } else if (chan->psm == cpu_to_le16(0x0001)) {
491 if (chan->sec_level == BT_SECURITY_LOW)
492 chan->sec_level = BT_SECURITY_SDP;
494 if (chan->sec_level == BT_SECURITY_HIGH)
495 return HCI_AT_NO_BONDING_MITM;
496 else
497 return HCI_AT_NO_BONDING;
498 } else {
499 switch (chan->sec_level) {
500 case BT_SECURITY_HIGH:
501 return HCI_AT_GENERAL_BONDING_MITM;
502 case BT_SECURITY_MEDIUM:
503 return HCI_AT_GENERAL_BONDING;
504 default:
505 return HCI_AT_NO_BONDING;
510 /* Service level security */
511 static inline int l2cap_check_security(struct l2cap_chan *chan)
513 struct l2cap_conn *conn = chan->conn;
514 __u8 auth_type;
516 auth_type = l2cap_get_auth_type(chan);
518 return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
521 static u8 l2cap_get_ident(struct l2cap_conn *conn)
523 u8 id;
525 /* Get next available identificator.
526 * 1 - 128 are used by kernel.
527 * 129 - 199 are reserved.
528 * 200 - 254 are used by utilities like l2ping, etc.
531 spin_lock_bh(&conn->lock);
533 if (++conn->tx_ident > 128)
534 conn->tx_ident = 1;
536 id = conn->tx_ident;
538 spin_unlock_bh(&conn->lock);
540 return id;
543 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
545 struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
546 u8 flags;
548 BT_DBG("code 0x%2.2x", code);
550 if (!skb)
551 return;
553 if (lmp_no_flush_capable(conn->hcon->hdev))
554 flags = ACL_START_NO_FLUSH;
555 else
556 flags = ACL_START;
558 bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
560 hci_send_acl(conn->hcon, skb, flags);
563 static inline void l2cap_send_sframe(struct l2cap_chan *chan, u16 control)
565 struct sk_buff *skb;
566 struct l2cap_hdr *lh;
567 struct l2cap_conn *conn = chan->conn;
568 int count, hlen = L2CAP_HDR_SIZE + 2;
569 u8 flags;
571 if (chan->state != BT_CONNECTED)
572 return;
574 if (chan->fcs == L2CAP_FCS_CRC16)
575 hlen += 2;
577 BT_DBG("chan %p, control 0x%2.2x", chan, control);
579 count = min_t(unsigned int, conn->mtu, hlen);
580 control |= L2CAP_CTRL_FRAME_TYPE;
582 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
583 control |= L2CAP_CTRL_FINAL;
585 if (test_and_clear_bit(CONN_SEND_PBIT, &chan->conn_state))
586 control |= L2CAP_CTRL_POLL;
588 skb = bt_skb_alloc(count, GFP_ATOMIC);
589 if (!skb)
590 return;
592 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
593 lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
594 lh->cid = cpu_to_le16(chan->dcid);
595 put_unaligned_le16(control, skb_put(skb, 2));
597 if (chan->fcs == L2CAP_FCS_CRC16) {
598 u16 fcs = crc16(0, (u8 *)lh, count - 2);
599 put_unaligned_le16(fcs, skb_put(skb, 2));
602 if (lmp_no_flush_capable(conn->hcon->hdev))
603 flags = ACL_START_NO_FLUSH;
604 else
605 flags = ACL_START;
607 bt_cb(skb)->force_active = chan->force_active;
609 hci_send_acl(chan->conn->hcon, skb, flags);
612 static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u16 control)
614 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
615 control |= L2CAP_SUPER_RCV_NOT_READY;
616 set_bit(CONN_RNR_SENT, &chan->conn_state);
617 } else
618 control |= L2CAP_SUPER_RCV_READY;
620 control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
622 l2cap_send_sframe(chan, control);
625 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
627 return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
630 static void l2cap_do_start(struct l2cap_chan *chan)
632 struct l2cap_conn *conn = chan->conn;
634 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
635 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
636 return;
638 if (l2cap_check_security(chan) &&
639 __l2cap_no_conn_pending(chan)) {
640 struct l2cap_conn_req req;
641 req.scid = cpu_to_le16(chan->scid);
642 req.psm = chan->psm;
644 chan->ident = l2cap_get_ident(conn);
645 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
647 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
648 sizeof(req), &req);
650 } else {
651 struct l2cap_info_req req;
652 req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
654 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
655 conn->info_ident = l2cap_get_ident(conn);
657 mod_timer(&conn->info_timer, jiffies +
658 msecs_to_jiffies(L2CAP_INFO_TIMEOUT));
660 l2cap_send_cmd(conn, conn->info_ident,
661 L2CAP_INFO_REQ, sizeof(req), &req);
665 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
667 u32 local_feat_mask = l2cap_feat_mask;
668 if (!disable_ertm)
669 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
671 switch (mode) {
672 case L2CAP_MODE_ERTM:
673 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
674 case L2CAP_MODE_STREAMING:
675 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
676 default:
677 return 0x00;
681 static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
683 struct sock *sk;
684 struct l2cap_disconn_req req;
686 if (!conn)
687 return;
689 sk = chan->sk;
691 if (chan->mode == L2CAP_MODE_ERTM) {
692 __clear_retrans_timer(chan);
693 __clear_monitor_timer(chan);
694 __clear_ack_timer(chan);
697 req.dcid = cpu_to_le16(chan->dcid);
698 req.scid = cpu_to_le16(chan->scid);
699 l2cap_send_cmd(conn, l2cap_get_ident(conn),
700 L2CAP_DISCONN_REQ, sizeof(req), &req);
702 l2cap_state_change(chan, BT_DISCONN);
703 sk->sk_err = err;
706 /* ---- L2CAP connections ---- */
707 static void l2cap_conn_start(struct l2cap_conn *conn)
709 struct l2cap_chan *chan, *tmp;
711 BT_DBG("conn %p", conn);
713 read_lock(&conn->chan_lock);
715 list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
716 struct sock *sk = chan->sk;
718 bh_lock_sock(sk);
720 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
721 bh_unlock_sock(sk);
722 continue;
725 if (chan->state == BT_CONNECT) {
726 struct l2cap_conn_req req;
728 if (!l2cap_check_security(chan) ||
729 !__l2cap_no_conn_pending(chan)) {
730 bh_unlock_sock(sk);
731 continue;
734 if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
735 && test_bit(CONF_STATE2_DEVICE,
736 &chan->conf_state)) {
737 /* l2cap_chan_close() calls list_del(chan)
738 * so release the lock */
739 read_unlock(&conn->chan_lock);
740 l2cap_chan_close(chan, ECONNRESET);
741 read_lock(&conn->chan_lock);
742 bh_unlock_sock(sk);
743 continue;
746 req.scid = cpu_to_le16(chan->scid);
747 req.psm = chan->psm;
749 chan->ident = l2cap_get_ident(conn);
750 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
752 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
753 sizeof(req), &req);
755 } else if (chan->state == BT_CONNECT2) {
756 struct l2cap_conn_rsp rsp;
757 char buf[128];
758 rsp.scid = cpu_to_le16(chan->dcid);
759 rsp.dcid = cpu_to_le16(chan->scid);
761 if (l2cap_check_security(chan)) {
762 if (bt_sk(sk)->defer_setup) {
763 struct sock *parent = bt_sk(sk)->parent;
764 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
765 rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
766 if (parent)
767 parent->sk_data_ready(parent, 0);
769 } else {
770 l2cap_state_change(chan, BT_CONFIG);
771 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
772 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
774 } else {
775 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
776 rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
779 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
780 sizeof(rsp), &rsp);
782 if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
783 rsp.result != L2CAP_CR_SUCCESS) {
784 bh_unlock_sock(sk);
785 continue;
788 set_bit(CONF_REQ_SENT, &chan->conf_state);
789 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
790 l2cap_build_conf_req(chan, buf), buf);
791 chan->num_conf_req++;
794 bh_unlock_sock(sk);
797 read_unlock(&conn->chan_lock);
800 /* Find socket with cid and source bdaddr.
801 * Returns closest match, locked.
803 static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdaddr_t *src)
805 struct l2cap_chan *c, *c1 = NULL;
807 read_lock(&chan_list_lock);
809 list_for_each_entry(c, &chan_list, global_l) {
810 struct sock *sk = c->sk;
812 if (state && c->state != state)
813 continue;
815 if (c->scid == cid) {
816 /* Exact match. */
817 if (!bacmp(&bt_sk(sk)->src, src)) {
818 read_unlock(&chan_list_lock);
819 return c;
822 /* Closest match */
823 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
824 c1 = c;
828 read_unlock(&chan_list_lock);
830 return c1;
833 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
835 struct sock *parent, *sk;
836 struct l2cap_chan *chan, *pchan;
838 BT_DBG("");
840 /* Check if we have socket listening on cid */
841 pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
842 conn->src);
843 if (!pchan)
844 return;
846 parent = pchan->sk;
848 bh_lock_sock(parent);
850 /* Check for backlog size */
851 if (sk_acceptq_is_full(parent)) {
852 BT_DBG("backlog full %d", parent->sk_ack_backlog);
853 goto clean;
856 chan = pchan->ops->new_connection(pchan->data);
857 if (!chan)
858 goto clean;
860 sk = chan->sk;
862 write_lock_bh(&conn->chan_lock);
864 hci_conn_hold(conn->hcon);
866 bacpy(&bt_sk(sk)->src, conn->src);
867 bacpy(&bt_sk(sk)->dst, conn->dst);
869 bt_accept_enqueue(parent, sk);
871 __l2cap_chan_add(conn, chan);
873 __set_chan_timer(chan, sk->sk_sndtimeo);
875 l2cap_state_change(chan, BT_CONNECTED);
876 parent->sk_data_ready(parent, 0);
878 write_unlock_bh(&conn->chan_lock);
880 clean:
881 bh_unlock_sock(parent);
884 static void l2cap_chan_ready(struct sock *sk)
886 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
887 struct sock *parent = bt_sk(sk)->parent;
889 BT_DBG("sk %p, parent %p", sk, parent);
891 chan->conf_state = 0;
892 __clear_chan_timer(chan);
894 l2cap_state_change(chan, BT_CONNECTED);
895 sk->sk_state_change(sk);
897 if (parent)
898 parent->sk_data_ready(parent, 0);
901 static void l2cap_conn_ready(struct l2cap_conn *conn)
903 struct l2cap_chan *chan;
905 BT_DBG("conn %p", conn);
907 if (!conn->hcon->out && conn->hcon->type == LE_LINK)
908 l2cap_le_conn_ready(conn);
910 read_lock(&conn->chan_lock);
912 list_for_each_entry(chan, &conn->chan_l, list) {
913 struct sock *sk = chan->sk;
915 bh_lock_sock(sk);
917 if (conn->hcon->type == LE_LINK) {
918 if (smp_conn_security(conn, chan->sec_level))
919 l2cap_chan_ready(sk);
921 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
922 __clear_chan_timer(chan);
923 l2cap_state_change(chan, BT_CONNECTED);
924 sk->sk_state_change(sk);
926 } else if (chan->state == BT_CONNECT)
927 l2cap_do_start(chan);
929 bh_unlock_sock(sk);
932 read_unlock(&conn->chan_lock);
935 /* Notify sockets that we cannot guaranty reliability anymore */
936 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
938 struct l2cap_chan *chan;
940 BT_DBG("conn %p", conn);
942 read_lock(&conn->chan_lock);
944 list_for_each_entry(chan, &conn->chan_l, list) {
945 struct sock *sk = chan->sk;
947 if (chan->force_reliable)
948 sk->sk_err = err;
951 read_unlock(&conn->chan_lock);
954 static void l2cap_info_timeout(unsigned long arg)
956 struct l2cap_conn *conn = (void *) arg;
958 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
959 conn->info_ident = 0;
961 l2cap_conn_start(conn);
964 static void l2cap_conn_del(struct hci_conn *hcon, int err)
966 struct l2cap_conn *conn = hcon->l2cap_data;
967 struct l2cap_chan *chan, *l;
968 struct sock *sk;
970 if (!conn)
971 return;
973 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
975 kfree_skb(conn->rx_skb);
977 /* Kill channels */
978 list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
979 sk = chan->sk;
980 bh_lock_sock(sk);
981 l2cap_chan_del(chan, err);
982 bh_unlock_sock(sk);
983 chan->ops->close(chan->data);
986 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
987 del_timer_sync(&conn->info_timer);
989 if (test_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend))
990 del_timer(&conn->security_timer);
992 hcon->l2cap_data = NULL;
993 kfree(conn);
996 static void security_timeout(unsigned long arg)
998 struct l2cap_conn *conn = (void *) arg;
1000 l2cap_conn_del(conn->hcon, ETIMEDOUT);
1003 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
1005 struct l2cap_conn *conn = hcon->l2cap_data;
1007 if (conn || status)
1008 return conn;
1010 conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1011 if (!conn)
1012 return NULL;
1014 hcon->l2cap_data = conn;
1015 conn->hcon = hcon;
1017 BT_DBG("hcon %p conn %p", hcon, conn);
1019 if (hcon->hdev->le_mtu && hcon->type == LE_LINK)
1020 conn->mtu = hcon->hdev->le_mtu;
1021 else
1022 conn->mtu = hcon->hdev->acl_mtu;
1024 conn->src = &hcon->hdev->bdaddr;
1025 conn->dst = &hcon->dst;
1027 conn->feat_mask = 0;
1029 spin_lock_init(&conn->lock);
1030 rwlock_init(&conn->chan_lock);
1032 INIT_LIST_HEAD(&conn->chan_l);
1034 if (hcon->type == LE_LINK)
1035 setup_timer(&conn->security_timer, security_timeout,
1036 (unsigned long) conn);
1037 else
1038 setup_timer(&conn->info_timer, l2cap_info_timeout,
1039 (unsigned long) conn);
1041 conn->disc_reason = 0x13;
1043 return conn;
1046 static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
1048 write_lock_bh(&conn->chan_lock);
1049 __l2cap_chan_add(conn, chan);
1050 write_unlock_bh(&conn->chan_lock);
1053 /* ---- Socket interface ---- */
1055 /* Find socket with psm and source bdaddr.
1056 * Returns closest match.
1058 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, bdaddr_t *src)
1060 struct l2cap_chan *c, *c1 = NULL;
1062 read_lock(&chan_list_lock);
1064 list_for_each_entry(c, &chan_list, global_l) {
1065 struct sock *sk = c->sk;
1067 if (state && c->state != state)
1068 continue;
1070 if (c->psm == psm) {
1071 /* Exact match. */
1072 if (!bacmp(&bt_sk(sk)->src, src)) {
1073 read_unlock(&chan_list_lock);
1074 return c;
1077 /* Closest match */
1078 if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1079 c1 = c;
1083 read_unlock(&chan_list_lock);
1085 return c1;
1088 int l2cap_chan_connect(struct l2cap_chan *chan)
1090 struct sock *sk = chan->sk;
1091 bdaddr_t *src = &bt_sk(sk)->src;
1092 bdaddr_t *dst = &bt_sk(sk)->dst;
1093 struct l2cap_conn *conn;
1094 struct hci_conn *hcon;
1095 struct hci_dev *hdev;
1096 __u8 auth_type;
1097 int err;
1099 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
1100 chan->psm);
1102 hdev = hci_get_route(dst, src);
1103 if (!hdev)
1104 return -EHOSTUNREACH;
1106 hci_dev_lock_bh(hdev);
1108 auth_type = l2cap_get_auth_type(chan);
1110 if (chan->dcid == L2CAP_CID_LE_DATA)
1111 hcon = hci_connect(hdev, LE_LINK, dst,
1112 chan->sec_level, auth_type);
1113 else
1114 hcon = hci_connect(hdev, ACL_LINK, dst,
1115 chan->sec_level, auth_type);
1117 if (IS_ERR(hcon)) {
1118 err = PTR_ERR(hcon);
1119 goto done;
1122 conn = l2cap_conn_add(hcon, 0);
1123 if (!conn) {
1124 hci_conn_put(hcon);
1125 err = -ENOMEM;
1126 goto done;
1129 /* Update source addr of the socket */
1130 bacpy(src, conn->src);
1132 l2cap_chan_add(conn, chan);
1134 l2cap_state_change(chan, BT_CONNECT);
1135 __set_chan_timer(chan, sk->sk_sndtimeo);
1137 if (hcon->state == BT_CONNECTED) {
1138 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1139 __clear_chan_timer(chan);
1140 if (l2cap_check_security(chan))
1141 l2cap_state_change(chan, BT_CONNECTED);
1142 } else
1143 l2cap_do_start(chan);
1146 err = 0;
1148 done:
1149 hci_dev_unlock_bh(hdev);
1150 hci_dev_put(hdev);
1151 return err;
1154 int __l2cap_wait_ack(struct sock *sk)
1156 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1157 DECLARE_WAITQUEUE(wait, current);
1158 int err = 0;
1159 int timeo = HZ/5;
1161 add_wait_queue(sk_sleep(sk), &wait);
1162 set_current_state(TASK_INTERRUPTIBLE);
1163 while (chan->unacked_frames > 0 && chan->conn) {
1164 if (!timeo)
1165 timeo = HZ/5;
1167 if (signal_pending(current)) {
1168 err = sock_intr_errno(timeo);
1169 break;
1172 release_sock(sk);
1173 timeo = schedule_timeout(timeo);
1174 lock_sock(sk);
1175 set_current_state(TASK_INTERRUPTIBLE);
1177 err = sock_error(sk);
1178 if (err)
1179 break;
1181 set_current_state(TASK_RUNNING);
1182 remove_wait_queue(sk_sleep(sk), &wait);
1183 return err;
1186 static void l2cap_monitor_timeout(unsigned long arg)
1188 struct l2cap_chan *chan = (void *) arg;
1189 struct sock *sk = chan->sk;
1191 BT_DBG("chan %p", chan);
1193 bh_lock_sock(sk);
1194 if (chan->retry_count >= chan->remote_max_tx) {
1195 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1196 bh_unlock_sock(sk);
1197 return;
1200 chan->retry_count++;
1201 __set_monitor_timer(chan);
1203 l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1204 bh_unlock_sock(sk);
1207 static void l2cap_retrans_timeout(unsigned long arg)
1209 struct l2cap_chan *chan = (void *) arg;
1210 struct sock *sk = chan->sk;
1212 BT_DBG("chan %p", chan);
1214 bh_lock_sock(sk);
1215 chan->retry_count = 1;
1216 __set_monitor_timer(chan);
1218 set_bit(CONN_WAIT_F, &chan->conn_state);
1220 l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1221 bh_unlock_sock(sk);
1224 static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
1226 struct sk_buff *skb;
1228 while ((skb = skb_peek(&chan->tx_q)) &&
1229 chan->unacked_frames) {
1230 if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1231 break;
1233 skb = skb_dequeue(&chan->tx_q);
1234 kfree_skb(skb);
1236 chan->unacked_frames--;
1239 if (!chan->unacked_frames)
1240 __clear_retrans_timer(chan);
1243 void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
1245 struct hci_conn *hcon = chan->conn->hcon;
1246 u16 flags;
1248 BT_DBG("chan %p, skb %p len %d", chan, skb, skb->len);
1250 if (!chan->flushable && lmp_no_flush_capable(hcon->hdev))
1251 flags = ACL_START_NO_FLUSH;
1252 else
1253 flags = ACL_START;
1255 bt_cb(skb)->force_active = chan->force_active;
1256 hci_send_acl(hcon, skb, flags);
1259 void l2cap_streaming_send(struct l2cap_chan *chan)
1261 struct sk_buff *skb;
1262 u16 control, fcs;
1264 while ((skb = skb_dequeue(&chan->tx_q))) {
1265 control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1266 control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1267 put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1269 if (chan->fcs == L2CAP_FCS_CRC16) {
1270 fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
1271 put_unaligned_le16(fcs, skb->data + skb->len - 2);
1274 l2cap_do_send(chan, skb);
1276 chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1280 static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1282 struct sk_buff *skb, *tx_skb;
1283 u16 control, fcs;
1285 skb = skb_peek(&chan->tx_q);
1286 if (!skb)
1287 return;
1289 do {
1290 if (bt_cb(skb)->tx_seq == tx_seq)
1291 break;
1293 if (skb_queue_is_last(&chan->tx_q, skb))
1294 return;
1296 } while ((skb = skb_queue_next(&chan->tx_q, skb)));
1298 if (chan->remote_max_tx &&
1299 bt_cb(skb)->retries == chan->remote_max_tx) {
1300 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1301 return;
1304 tx_skb = skb_clone(skb, GFP_ATOMIC);
1305 bt_cb(skb)->retries++;
1306 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1307 control &= L2CAP_CTRL_SAR;
1309 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1310 control |= L2CAP_CTRL_FINAL;
1312 control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1313 | (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1315 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1317 if (chan->fcs == L2CAP_FCS_CRC16) {
1318 fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
1319 put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
1322 l2cap_do_send(chan, tx_skb);
1325 int l2cap_ertm_send(struct l2cap_chan *chan)
1327 struct sk_buff *skb, *tx_skb;
1328 u16 control, fcs;
1329 int nsent = 0;
1331 if (chan->state != BT_CONNECTED)
1332 return -ENOTCONN;
1334 while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1336 if (chan->remote_max_tx &&
1337 bt_cb(skb)->retries == chan->remote_max_tx) {
1338 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1339 break;
1342 tx_skb = skb_clone(skb, GFP_ATOMIC);
1344 bt_cb(skb)->retries++;
1346 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1347 control &= L2CAP_CTRL_SAR;
1349 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1350 control |= L2CAP_CTRL_FINAL;
1352 control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1353 | (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1354 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1357 if (chan->fcs == L2CAP_FCS_CRC16) {
1358 fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
1359 put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
1362 l2cap_do_send(chan, tx_skb);
1364 __set_retrans_timer(chan);
1366 bt_cb(skb)->tx_seq = chan->next_tx_seq;
1367 chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1369 if (bt_cb(skb)->retries == 1)
1370 chan->unacked_frames++;
1372 chan->frames_sent++;
1374 if (skb_queue_is_last(&chan->tx_q, skb))
1375 chan->tx_send_head = NULL;
1376 else
1377 chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1379 nsent++;
1382 return nsent;
1385 static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1387 int ret;
1389 if (!skb_queue_empty(&chan->tx_q))
1390 chan->tx_send_head = chan->tx_q.next;
1392 chan->next_tx_seq = chan->expected_ack_seq;
1393 ret = l2cap_ertm_send(chan);
1394 return ret;
1397 static void l2cap_send_ack(struct l2cap_chan *chan)
1399 u16 control = 0;
1401 control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1403 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1404 control |= L2CAP_SUPER_RCV_NOT_READY;
1405 set_bit(CONN_RNR_SENT, &chan->conn_state);
1406 l2cap_send_sframe(chan, control);
1407 return;
1410 if (l2cap_ertm_send(chan) > 0)
1411 return;
1413 control |= L2CAP_SUPER_RCV_READY;
1414 l2cap_send_sframe(chan, control);
1417 static void l2cap_send_srejtail(struct l2cap_chan *chan)
1419 struct srej_list *tail;
1420 u16 control;
1422 control = L2CAP_SUPER_SELECT_REJECT;
1423 control |= L2CAP_CTRL_FINAL;
1425 tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1426 control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1428 l2cap_send_sframe(chan, control);
1431 static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
1433 struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1434 struct sk_buff **frag;
1435 int err, sent = 0;
1437 if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1438 return -EFAULT;
1440 sent += count;
1441 len -= count;
1443 /* Continuation fragments (no L2CAP header) */
1444 frag = &skb_shinfo(skb)->frag_list;
1445 while (len) {
1446 count = min_t(unsigned int, conn->mtu, len);
1448 *frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
1449 if (!*frag)
1450 return err;
1451 if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
1452 return -EFAULT;
1454 sent += count;
1455 len -= count;
1457 frag = &(*frag)->next;
1460 return sent;
1463 struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1465 struct sock *sk = chan->sk;
1466 struct l2cap_conn *conn = chan->conn;
1467 struct sk_buff *skb;
1468 int err, count, hlen = L2CAP_HDR_SIZE + 2;
1469 struct l2cap_hdr *lh;
1471 BT_DBG("sk %p len %d", sk, (int)len);
1473 count = min_t(unsigned int, (conn->mtu - hlen), len);
1474 skb = bt_skb_send_alloc(sk, count + hlen,
1475 msg->msg_flags & MSG_DONTWAIT, &err);
1476 if (!skb)
1477 return ERR_PTR(err);
1479 /* Create L2CAP header */
1480 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1481 lh->cid = cpu_to_le16(chan->dcid);
1482 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1483 put_unaligned_le16(chan->psm, skb_put(skb, 2));
1485 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1486 if (unlikely(err < 0)) {
1487 kfree_skb(skb);
1488 return ERR_PTR(err);
1490 return skb;
1493 struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1495 struct sock *sk = chan->sk;
1496 struct l2cap_conn *conn = chan->conn;
1497 struct sk_buff *skb;
1498 int err, count, hlen = L2CAP_HDR_SIZE;
1499 struct l2cap_hdr *lh;
1501 BT_DBG("sk %p len %d", sk, (int)len);
1503 count = min_t(unsigned int, (conn->mtu - hlen), len);
1504 skb = bt_skb_send_alloc(sk, count + hlen,
1505 msg->msg_flags & MSG_DONTWAIT, &err);
1506 if (!skb)
1507 return ERR_PTR(err);
1509 /* Create L2CAP header */
1510 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1511 lh->cid = cpu_to_le16(chan->dcid);
1512 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1514 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1515 if (unlikely(err < 0)) {
1516 kfree_skb(skb);
1517 return ERR_PTR(err);
1519 return skb;
1522 struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1524 struct sock *sk = chan->sk;
1525 struct l2cap_conn *conn = chan->conn;
1526 struct sk_buff *skb;
1527 int err, count, hlen = L2CAP_HDR_SIZE + 2;
1528 struct l2cap_hdr *lh;
1530 BT_DBG("sk %p len %d", sk, (int)len);
1532 if (!conn)
1533 return ERR_PTR(-ENOTCONN);
1535 if (sdulen)
1536 hlen += 2;
1538 if (chan->fcs == L2CAP_FCS_CRC16)
1539 hlen += 2;
1541 count = min_t(unsigned int, (conn->mtu - hlen), len);
1542 skb = bt_skb_send_alloc(sk, count + hlen,
1543 msg->msg_flags & MSG_DONTWAIT, &err);
1544 if (!skb)
1545 return ERR_PTR(err);
1547 /* Create L2CAP header */
1548 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1549 lh->cid = cpu_to_le16(chan->dcid);
1550 lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1551 put_unaligned_le16(control, skb_put(skb, 2));
1552 if (sdulen)
1553 put_unaligned_le16(sdulen, skb_put(skb, 2));
1555 err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1556 if (unlikely(err < 0)) {
1557 kfree_skb(skb);
1558 return ERR_PTR(err);
1561 if (chan->fcs == L2CAP_FCS_CRC16)
1562 put_unaligned_le16(0, skb_put(skb, 2));
1564 bt_cb(skb)->retries = 0;
1565 return skb;
1568 int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1570 struct sk_buff *skb;
1571 struct sk_buff_head sar_queue;
1572 u16 control;
1573 size_t size = 0;
1575 skb_queue_head_init(&sar_queue);
1576 control = L2CAP_SDU_START;
1577 skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1578 if (IS_ERR(skb))
1579 return PTR_ERR(skb);
1581 __skb_queue_tail(&sar_queue, skb);
1582 len -= chan->remote_mps;
1583 size += chan->remote_mps;
1585 while (len > 0) {
1586 size_t buflen;
1588 if (len > chan->remote_mps) {
1589 control = L2CAP_SDU_CONTINUE;
1590 buflen = chan->remote_mps;
1591 } else {
1592 control = L2CAP_SDU_END;
1593 buflen = len;
1596 skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1597 if (IS_ERR(skb)) {
1598 skb_queue_purge(&sar_queue);
1599 return PTR_ERR(skb);
1602 __skb_queue_tail(&sar_queue, skb);
1603 len -= buflen;
1604 size += buflen;
1606 skb_queue_splice_tail(&sar_queue, &chan->tx_q);
1607 if (chan->tx_send_head == NULL)
1608 chan->tx_send_head = sar_queue.next;
1610 return size;
1613 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1615 struct sk_buff *skb;
1616 u16 control;
1617 int err;
1619 /* Connectionless channel */
1620 if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
1621 skb = l2cap_create_connless_pdu(chan, msg, len);
1622 if (IS_ERR(skb))
1623 return PTR_ERR(skb);
1625 l2cap_do_send(chan, skb);
1626 return len;
1629 switch (chan->mode) {
1630 case L2CAP_MODE_BASIC:
1631 /* Check outgoing MTU */
1632 if (len > chan->omtu)
1633 return -EMSGSIZE;
1635 /* Create a basic PDU */
1636 skb = l2cap_create_basic_pdu(chan, msg, len);
1637 if (IS_ERR(skb))
1638 return PTR_ERR(skb);
1640 l2cap_do_send(chan, skb);
1641 err = len;
1642 break;
1644 case L2CAP_MODE_ERTM:
1645 case L2CAP_MODE_STREAMING:
1646 /* Entire SDU fits into one PDU */
1647 if (len <= chan->remote_mps) {
1648 control = L2CAP_SDU_UNSEGMENTED;
1649 skb = l2cap_create_iframe_pdu(chan, msg, len, control,
1651 if (IS_ERR(skb))
1652 return PTR_ERR(skb);
1654 __skb_queue_tail(&chan->tx_q, skb);
1656 if (chan->tx_send_head == NULL)
1657 chan->tx_send_head = skb;
1659 } else {
1660 /* Segment SDU into multiples PDUs */
1661 err = l2cap_sar_segment_sdu(chan, msg, len);
1662 if (err < 0)
1663 return err;
1666 if (chan->mode == L2CAP_MODE_STREAMING) {
1667 l2cap_streaming_send(chan);
1668 err = len;
1669 break;
1672 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
1673 test_bit(CONN_WAIT_F, &chan->conn_state)) {
1674 err = len;
1675 break;
1678 err = l2cap_ertm_send(chan);
1679 if (err >= 0)
1680 err = len;
1682 break;
1684 default:
1685 BT_DBG("bad state %1.1x", chan->mode);
1686 err = -EBADFD;
1689 return err;
1692 /* Copy frame to all raw sockets on that connection */
1693 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
1695 struct sk_buff *nskb;
1696 struct l2cap_chan *chan;
1698 BT_DBG("conn %p", conn);
1700 read_lock(&conn->chan_lock);
1701 list_for_each_entry(chan, &conn->chan_l, list) {
1702 struct sock *sk = chan->sk;
1703 if (chan->chan_type != L2CAP_CHAN_RAW)
1704 continue;
1706 /* Don't send frame to the socket it came from */
1707 if (skb->sk == sk)
1708 continue;
1709 nskb = skb_clone(skb, GFP_ATOMIC);
1710 if (!nskb)
1711 continue;
1713 if (chan->ops->recv(chan->data, nskb))
1714 kfree_skb(nskb);
1716 read_unlock(&conn->chan_lock);
1719 /* ---- L2CAP signalling commands ---- */
1720 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
1721 u8 code, u8 ident, u16 dlen, void *data)
1723 struct sk_buff *skb, **frag;
1724 struct l2cap_cmd_hdr *cmd;
1725 struct l2cap_hdr *lh;
1726 int len, count;
1728 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
1729 conn, code, ident, dlen);
1731 len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
1732 count = min_t(unsigned int, conn->mtu, len);
1734 skb = bt_skb_alloc(count, GFP_ATOMIC);
1735 if (!skb)
1736 return NULL;
1738 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1739 lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1741 if (conn->hcon->type == LE_LINK)
1742 lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
1743 else
1744 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
1746 cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
1747 cmd->code = code;
1748 cmd->ident = ident;
1749 cmd->len = cpu_to_le16(dlen);
1751 if (dlen) {
1752 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
1753 memcpy(skb_put(skb, count), data, count);
1754 data += count;
1757 len -= skb->len;
1759 /* Continuation fragments (no L2CAP header) */
1760 frag = &skb_shinfo(skb)->frag_list;
1761 while (len) {
1762 count = min_t(unsigned int, conn->mtu, len);
1764 *frag = bt_skb_alloc(count, GFP_ATOMIC);
1765 if (!*frag)
1766 goto fail;
1768 memcpy(skb_put(*frag, count), data, count);
1770 len -= count;
1771 data += count;
1773 frag = &(*frag)->next;
1776 return skb;
1778 fail:
1779 kfree_skb(skb);
1780 return NULL;
1783 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
1785 struct l2cap_conf_opt *opt = *ptr;
1786 int len;
1788 len = L2CAP_CONF_OPT_SIZE + opt->len;
1789 *ptr += len;
1791 *type = opt->type;
1792 *olen = opt->len;
1794 switch (opt->len) {
1795 case 1:
1796 *val = *((u8 *) opt->val);
1797 break;
1799 case 2:
1800 *val = get_unaligned_le16(opt->val);
1801 break;
1803 case 4:
1804 *val = get_unaligned_le32(opt->val);
1805 break;
1807 default:
1808 *val = (unsigned long) opt->val;
1809 break;
1812 BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
1813 return len;
1816 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
1818 struct l2cap_conf_opt *opt = *ptr;
1820 BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
1822 opt->type = type;
1823 opt->len = len;
1825 switch (len) {
1826 case 1:
1827 *((u8 *) opt->val) = val;
1828 break;
1830 case 2:
1831 put_unaligned_le16(val, opt->val);
1832 break;
1834 case 4:
1835 put_unaligned_le32(val, opt->val);
1836 break;
1838 default:
1839 memcpy(opt->val, (void *) val, len);
1840 break;
1843 *ptr += L2CAP_CONF_OPT_SIZE + len;
1846 static void l2cap_ack_timeout(unsigned long arg)
1848 struct l2cap_chan *chan = (void *) arg;
1850 bh_lock_sock(chan->sk);
1851 l2cap_send_ack(chan);
1852 bh_unlock_sock(chan->sk);
1855 static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1857 struct sock *sk = chan->sk;
1859 chan->expected_ack_seq = 0;
1860 chan->unacked_frames = 0;
1861 chan->buffer_seq = 0;
1862 chan->num_acked = 0;
1863 chan->frames_sent = 0;
1865 setup_timer(&chan->retrans_timer, l2cap_retrans_timeout,
1866 (unsigned long) chan);
1867 setup_timer(&chan->monitor_timer, l2cap_monitor_timeout,
1868 (unsigned long) chan);
1869 setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan);
1871 skb_queue_head_init(&chan->srej_q);
1873 INIT_LIST_HEAD(&chan->srej_l);
1876 sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1879 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
1881 switch (mode) {
1882 case L2CAP_MODE_STREAMING:
1883 case L2CAP_MODE_ERTM:
1884 if (l2cap_mode_supported(mode, remote_feat_mask))
1885 return mode;
1886 /* fall through */
1887 default:
1888 return L2CAP_MODE_BASIC;
1892 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
1894 struct l2cap_conf_req *req = data;
1895 struct l2cap_conf_rfc rfc = { .mode = chan->mode };
1896 void *ptr = req->data;
1898 BT_DBG("chan %p", chan);
1900 if (chan->num_conf_req || chan->num_conf_rsp)
1901 goto done;
1903 switch (chan->mode) {
1904 case L2CAP_MODE_STREAMING:
1905 case L2CAP_MODE_ERTM:
1906 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
1907 break;
1909 /* fall through */
1910 default:
1911 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
1912 break;
1915 done:
1916 if (chan->imtu != L2CAP_DEFAULT_MTU)
1917 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1919 switch (chan->mode) {
1920 case L2CAP_MODE_BASIC:
1921 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
1922 !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
1923 break;
1925 rfc.mode = L2CAP_MODE_BASIC;
1926 rfc.txwin_size = 0;
1927 rfc.max_transmit = 0;
1928 rfc.retrans_timeout = 0;
1929 rfc.monitor_timeout = 0;
1930 rfc.max_pdu_size = 0;
1932 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1933 (unsigned long) &rfc);
1934 break;
1936 case L2CAP_MODE_ERTM:
1937 rfc.mode = L2CAP_MODE_ERTM;
1938 rfc.txwin_size = chan->tx_win;
1939 rfc.max_transmit = chan->max_tx;
1940 rfc.retrans_timeout = 0;
1941 rfc.monitor_timeout = 0;
1942 rfc.max_pdu_size = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1943 if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
1944 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1946 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1947 (unsigned long) &rfc);
1949 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1950 break;
1952 if (chan->fcs == L2CAP_FCS_NONE ||
1953 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
1954 chan->fcs = L2CAP_FCS_NONE;
1955 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1957 break;
1959 case L2CAP_MODE_STREAMING:
1960 rfc.mode = L2CAP_MODE_STREAMING;
1961 rfc.txwin_size = 0;
1962 rfc.max_transmit = 0;
1963 rfc.retrans_timeout = 0;
1964 rfc.monitor_timeout = 0;
1965 rfc.max_pdu_size = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1966 if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
1967 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1969 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1970 (unsigned long) &rfc);
1972 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1973 break;
1975 if (chan->fcs == L2CAP_FCS_NONE ||
1976 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
1977 chan->fcs = L2CAP_FCS_NONE;
1978 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1980 break;
1983 req->dcid = cpu_to_le16(chan->dcid);
1984 req->flags = cpu_to_le16(0);
1986 return ptr - data;
1989 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
1991 struct l2cap_conf_rsp *rsp = data;
1992 void *ptr = rsp->data;
1993 void *req = chan->conf_req;
1994 int len = chan->conf_len;
1995 int type, hint, olen;
1996 unsigned long val;
1997 struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
1998 u16 mtu = L2CAP_DEFAULT_MTU;
1999 u16 result = L2CAP_CONF_SUCCESS;
2001 BT_DBG("chan %p", chan);
2003 while (len >= L2CAP_CONF_OPT_SIZE) {
2004 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
2006 hint = type & L2CAP_CONF_HINT;
2007 type &= L2CAP_CONF_MASK;
2009 switch (type) {
2010 case L2CAP_CONF_MTU:
2011 mtu = val;
2012 break;
2014 case L2CAP_CONF_FLUSH_TO:
2015 chan->flush_to = val;
2016 break;
2018 case L2CAP_CONF_QOS:
2019 break;
2021 case L2CAP_CONF_RFC:
2022 if (olen == sizeof(rfc))
2023 memcpy(&rfc, (void *) val, olen);
2024 break;
2026 case L2CAP_CONF_FCS:
2027 if (val == L2CAP_FCS_NONE)
2028 set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2030 break;
2032 default:
2033 if (hint)
2034 break;
2036 result = L2CAP_CONF_UNKNOWN;
2037 *((u8 *) ptr++) = type;
2038 break;
2042 if (chan->num_conf_rsp || chan->num_conf_req > 1)
2043 goto done;
2045 switch (chan->mode) {
2046 case L2CAP_MODE_STREAMING:
2047 case L2CAP_MODE_ERTM:
2048 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2049 chan->mode = l2cap_select_mode(rfc.mode,
2050 chan->conn->feat_mask);
2051 break;
2054 if (chan->mode != rfc.mode)
2055 return -ECONNREFUSED;
2057 break;
2060 done:
2061 if (chan->mode != rfc.mode) {
2062 result = L2CAP_CONF_UNACCEPT;
2063 rfc.mode = chan->mode;
2065 if (chan->num_conf_rsp == 1)
2066 return -ECONNREFUSED;
2068 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2069 sizeof(rfc), (unsigned long) &rfc);
2073 if (result == L2CAP_CONF_SUCCESS) {
2074 /* Configure output options and let the other side know
2075 * which ones we don't like. */
2077 if (mtu < L2CAP_DEFAULT_MIN_MTU)
2078 result = L2CAP_CONF_UNACCEPT;
2079 else {
2080 chan->omtu = mtu;
2081 set_bit(CONF_MTU_DONE, &chan->conf_state);
2083 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2085 switch (rfc.mode) {
2086 case L2CAP_MODE_BASIC:
2087 chan->fcs = L2CAP_FCS_NONE;
2088 set_bit(CONF_MODE_DONE, &chan->conf_state);
2089 break;
2091 case L2CAP_MODE_ERTM:
2092 chan->remote_tx_win = rfc.txwin_size;
2093 chan->remote_max_tx = rfc.max_transmit;
2095 if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
2096 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2098 chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2100 rfc.retrans_timeout =
2101 le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
2102 rfc.monitor_timeout =
2103 le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2105 set_bit(CONF_MODE_DONE, &chan->conf_state);
2107 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2108 sizeof(rfc), (unsigned long) &rfc);
2110 break;
2112 case L2CAP_MODE_STREAMING:
2113 if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
2114 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2116 chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2118 set_bit(CONF_MODE_DONE, &chan->conf_state);
2120 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2121 sizeof(rfc), (unsigned long) &rfc);
2123 break;
2125 default:
2126 result = L2CAP_CONF_UNACCEPT;
2128 memset(&rfc, 0, sizeof(rfc));
2129 rfc.mode = chan->mode;
2132 if (result == L2CAP_CONF_SUCCESS)
2133 set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2135 rsp->scid = cpu_to_le16(chan->dcid);
2136 rsp->result = cpu_to_le16(result);
2137 rsp->flags = cpu_to_le16(0x0000);
2139 return ptr - data;
2142 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2144 struct l2cap_conf_req *req = data;
2145 void *ptr = req->data;
2146 int type, olen;
2147 unsigned long val;
2148 struct l2cap_conf_rfc rfc;
2150 BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2152 while (len >= L2CAP_CONF_OPT_SIZE) {
2153 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2155 switch (type) {
2156 case L2CAP_CONF_MTU:
2157 if (val < L2CAP_DEFAULT_MIN_MTU) {
2158 *result = L2CAP_CONF_UNACCEPT;
2159 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2160 } else
2161 chan->imtu = val;
2162 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2163 break;
2165 case L2CAP_CONF_FLUSH_TO:
2166 chan->flush_to = val;
2167 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2168 2, chan->flush_to);
2169 break;
2171 case L2CAP_CONF_RFC:
2172 if (olen == sizeof(rfc))
2173 memcpy(&rfc, (void *)val, olen);
2175 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2176 rfc.mode != chan->mode)
2177 return -ECONNREFUSED;
2179 chan->fcs = 0;
2181 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2182 sizeof(rfc), (unsigned long) &rfc);
2183 break;
2187 if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2188 return -ECONNREFUSED;
2190 chan->mode = rfc.mode;
2192 if (*result == L2CAP_CONF_SUCCESS) {
2193 switch (rfc.mode) {
2194 case L2CAP_MODE_ERTM:
2195 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2196 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2197 chan->mps = le16_to_cpu(rfc.max_pdu_size);
2198 break;
2199 case L2CAP_MODE_STREAMING:
2200 chan->mps = le16_to_cpu(rfc.max_pdu_size);
2204 req->dcid = cpu_to_le16(chan->dcid);
2205 req->flags = cpu_to_le16(0x0000);
2207 return ptr - data;
2210 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
2212 struct l2cap_conf_rsp *rsp = data;
2213 void *ptr = rsp->data;
2215 BT_DBG("chan %p", chan);
2217 rsp->scid = cpu_to_le16(chan->dcid);
2218 rsp->result = cpu_to_le16(result);
2219 rsp->flags = cpu_to_le16(flags);
2221 return ptr - data;
2224 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2226 struct l2cap_conn_rsp rsp;
2227 struct l2cap_conn *conn = chan->conn;
2228 u8 buf[128];
2230 rsp.scid = cpu_to_le16(chan->dcid);
2231 rsp.dcid = cpu_to_le16(chan->scid);
2232 rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
2233 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
2234 l2cap_send_cmd(conn, chan->ident,
2235 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2237 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2238 return;
2240 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2241 l2cap_build_conf_req(chan, buf), buf);
2242 chan->num_conf_req++;
2245 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2247 int type, olen;
2248 unsigned long val;
2249 struct l2cap_conf_rfc rfc;
2251 BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2253 if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2254 return;
2256 while (len >= L2CAP_CONF_OPT_SIZE) {
2257 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2259 switch (type) {
2260 case L2CAP_CONF_RFC:
2261 if (olen == sizeof(rfc))
2262 memcpy(&rfc, (void *)val, olen);
2263 goto done;
2267 done:
2268 switch (rfc.mode) {
2269 case L2CAP_MODE_ERTM:
2270 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2271 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2272 chan->mps = le16_to_cpu(rfc.max_pdu_size);
2273 break;
2274 case L2CAP_MODE_STREAMING:
2275 chan->mps = le16_to_cpu(rfc.max_pdu_size);
2279 static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2281 struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2283 if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2284 return 0;
2286 if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
2287 cmd->ident == conn->info_ident) {
2288 del_timer(&conn->info_timer);
2290 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2291 conn->info_ident = 0;
2293 l2cap_conn_start(conn);
2296 return 0;
2299 static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2301 struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
2302 struct l2cap_conn_rsp rsp;
2303 struct l2cap_chan *chan = NULL, *pchan;
2304 struct sock *parent, *sk = NULL;
2305 int result, status = L2CAP_CS_NO_INFO;
2307 u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2308 __le16 psm = req->psm;
2310 BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
2312 /* Check if we have socket listening on psm */
2313 pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
2314 if (!pchan) {
2315 result = L2CAP_CR_BAD_PSM;
2316 goto sendresp;
2319 parent = pchan->sk;
2321 bh_lock_sock(parent);
2323 /* Check if the ACL is secure enough (if not SDP) */
2324 if (psm != cpu_to_le16(0x0001) &&
2325 !hci_conn_check_link_mode(conn->hcon)) {
2326 conn->disc_reason = 0x05;
2327 result = L2CAP_CR_SEC_BLOCK;
2328 goto response;
2331 result = L2CAP_CR_NO_MEM;
2333 /* Check for backlog size */
2334 if (sk_acceptq_is_full(parent)) {
2335 BT_DBG("backlog full %d", parent->sk_ack_backlog);
2336 goto response;
2339 chan = pchan->ops->new_connection(pchan->data);
2340 if (!chan)
2341 goto response;
2343 sk = chan->sk;
2345 write_lock_bh(&conn->chan_lock);
2347 /* Check if we already have channel with that dcid */
2348 if (__l2cap_get_chan_by_dcid(conn, scid)) {
2349 write_unlock_bh(&conn->chan_lock);
2350 sock_set_flag(sk, SOCK_ZAPPED);
2351 chan->ops->close(chan->data);
2352 goto response;
2355 hci_conn_hold(conn->hcon);
2357 bacpy(&bt_sk(sk)->src, conn->src);
2358 bacpy(&bt_sk(sk)->dst, conn->dst);
2359 chan->psm = psm;
2360 chan->dcid = scid;
2362 bt_accept_enqueue(parent, sk);
2364 __l2cap_chan_add(conn, chan);
2366 dcid = chan->scid;
2368 __set_chan_timer(chan, sk->sk_sndtimeo);
2370 chan->ident = cmd->ident;
2372 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2373 if (l2cap_check_security(chan)) {
2374 if (bt_sk(sk)->defer_setup) {
2375 l2cap_state_change(chan, BT_CONNECT2);
2376 result = L2CAP_CR_PEND;
2377 status = L2CAP_CS_AUTHOR_PEND;
2378 parent->sk_data_ready(parent, 0);
2379 } else {
2380 l2cap_state_change(chan, BT_CONFIG);
2381 result = L2CAP_CR_SUCCESS;
2382 status = L2CAP_CS_NO_INFO;
2384 } else {
2385 l2cap_state_change(chan, BT_CONNECT2);
2386 result = L2CAP_CR_PEND;
2387 status = L2CAP_CS_AUTHEN_PEND;
2389 } else {
2390 l2cap_state_change(chan, BT_CONNECT2);
2391 result = L2CAP_CR_PEND;
2392 status = L2CAP_CS_NO_INFO;
2395 write_unlock_bh(&conn->chan_lock);
2397 response:
2398 bh_unlock_sock(parent);
2400 sendresp:
2401 rsp.scid = cpu_to_le16(scid);
2402 rsp.dcid = cpu_to_le16(dcid);
2403 rsp.result = cpu_to_le16(result);
2404 rsp.status = cpu_to_le16(status);
2405 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2407 if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
2408 struct l2cap_info_req info;
2409 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2411 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
2412 conn->info_ident = l2cap_get_ident(conn);
2414 mod_timer(&conn->info_timer, jiffies +
2415 msecs_to_jiffies(L2CAP_INFO_TIMEOUT));
2417 l2cap_send_cmd(conn, conn->info_ident,
2418 L2CAP_INFO_REQ, sizeof(info), &info);
2421 if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
2422 result == L2CAP_CR_SUCCESS) {
2423 u8 buf[128];
2424 set_bit(CONF_REQ_SENT, &chan->conf_state);
2425 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2426 l2cap_build_conf_req(chan, buf), buf);
2427 chan->num_conf_req++;
2430 return 0;
2433 static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2435 struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
2436 u16 scid, dcid, result, status;
2437 struct l2cap_chan *chan;
2438 struct sock *sk;
2439 u8 req[128];
2441 scid = __le16_to_cpu(rsp->scid);
2442 dcid = __le16_to_cpu(rsp->dcid);
2443 result = __le16_to_cpu(rsp->result);
2444 status = __le16_to_cpu(rsp->status);
2446 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
2448 if (scid) {
2449 chan = l2cap_get_chan_by_scid(conn, scid);
2450 if (!chan)
2451 return -EFAULT;
2452 } else {
2453 chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2454 if (!chan)
2455 return -EFAULT;
2458 sk = chan->sk;
2460 switch (result) {
2461 case L2CAP_CR_SUCCESS:
2462 l2cap_state_change(chan, BT_CONFIG);
2463 chan->ident = 0;
2464 chan->dcid = dcid;
2465 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2467 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2468 break;
2470 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2471 l2cap_build_conf_req(chan, req), req);
2472 chan->num_conf_req++;
2473 break;
2475 case L2CAP_CR_PEND:
2476 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
2477 break;
2479 default:
2480 /* don't delete l2cap channel if sk is owned by user */
2481 if (sock_owned_by_user(sk)) {
2482 l2cap_state_change(chan, BT_DISCONN);
2483 __clear_chan_timer(chan);
2484 __set_chan_timer(chan, HZ / 5);
2485 break;
2488 l2cap_chan_del(chan, ECONNREFUSED);
2489 break;
2492 bh_unlock_sock(sk);
2493 return 0;
2496 static inline void set_default_fcs(struct l2cap_chan *chan)
2498 /* FCS is enabled only in ERTM or streaming mode, if one or both
2499 * sides request it.
2501 if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2502 chan->fcs = L2CAP_FCS_NONE;
2503 else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2504 chan->fcs = L2CAP_FCS_CRC16;
2507 static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
2509 struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
2510 u16 dcid, flags;
2511 u8 rsp[64];
2512 struct l2cap_chan *chan;
2513 struct sock *sk;
2514 int len;
2516 dcid = __le16_to_cpu(req->dcid);
2517 flags = __le16_to_cpu(req->flags);
2519 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
2521 chan = l2cap_get_chan_by_scid(conn, dcid);
2522 if (!chan)
2523 return -ENOENT;
2525 sk = chan->sk;
2527 if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2528 struct l2cap_cmd_rej_cid rej;
2530 rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
2531 rej.scid = cpu_to_le16(chan->scid);
2532 rej.dcid = cpu_to_le16(chan->dcid);
2534 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
2535 sizeof(rej), &rej);
2536 goto unlock;
2539 /* Reject if config buffer is too small. */
2540 len = cmd_len - sizeof(*req);
2541 if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2542 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2543 l2cap_build_conf_rsp(chan, rsp,
2544 L2CAP_CONF_REJECT, flags), rsp);
2545 goto unlock;
2548 /* Store config. */
2549 memcpy(chan->conf_req + chan->conf_len, req->data, len);
2550 chan->conf_len += len;
2552 if (flags & 0x0001) {
2553 /* Incomplete config. Send empty response. */
2554 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2555 l2cap_build_conf_rsp(chan, rsp,
2556 L2CAP_CONF_SUCCESS, 0x0001), rsp);
2557 goto unlock;
2560 /* Complete config. */
2561 len = l2cap_parse_conf_req(chan, rsp);
2562 if (len < 0) {
2563 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2564 goto unlock;
2567 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2568 chan->num_conf_rsp++;
2570 /* Reset config buffer. */
2571 chan->conf_len = 0;
2573 if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2574 goto unlock;
2576 if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2577 set_default_fcs(chan);
2579 l2cap_state_change(chan, BT_CONNECTED);
2581 chan->next_tx_seq = 0;
2582 chan->expected_tx_seq = 0;
2583 skb_queue_head_init(&chan->tx_q);
2584 if (chan->mode == L2CAP_MODE_ERTM)
2585 l2cap_ertm_init(chan);
2587 l2cap_chan_ready(sk);
2588 goto unlock;
2591 if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2592 u8 buf[64];
2593 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2594 l2cap_build_conf_req(chan, buf), buf);
2595 chan->num_conf_req++;
2598 unlock:
2599 bh_unlock_sock(sk);
2600 return 0;
2603 static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2605 struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
2606 u16 scid, flags, result;
2607 struct l2cap_chan *chan;
2608 struct sock *sk;
2609 int len = cmd->len - sizeof(*rsp);
2611 scid = __le16_to_cpu(rsp->scid);
2612 flags = __le16_to_cpu(rsp->flags);
2613 result = __le16_to_cpu(rsp->result);
2615 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
2616 scid, flags, result);
2618 chan = l2cap_get_chan_by_scid(conn, scid);
2619 if (!chan)
2620 return 0;
2622 sk = chan->sk;
2624 switch (result) {
2625 case L2CAP_CONF_SUCCESS:
2626 l2cap_conf_rfc_get(chan, rsp->data, len);
2627 break;
2629 case L2CAP_CONF_UNACCEPT:
2630 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2631 char req[64];
2633 if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2634 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2635 goto done;
2638 /* throw out any old stored conf requests */
2639 result = L2CAP_CONF_SUCCESS;
2640 len = l2cap_parse_conf_rsp(chan, rsp->data, len,
2641 req, &result);
2642 if (len < 0) {
2643 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2644 goto done;
2647 l2cap_send_cmd(conn, l2cap_get_ident(conn),
2648 L2CAP_CONF_REQ, len, req);
2649 chan->num_conf_req++;
2650 if (result != L2CAP_CONF_SUCCESS)
2651 goto done;
2652 break;
2655 default:
2656 sk->sk_err = ECONNRESET;
2657 __set_chan_timer(chan, HZ * 5);
2658 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2659 goto done;
2662 if (flags & 0x01)
2663 goto done;
2665 set_bit(CONF_INPUT_DONE, &chan->conf_state);
2667 if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
2668 set_default_fcs(chan);
2670 l2cap_state_change(chan, BT_CONNECTED);
2671 chan->next_tx_seq = 0;
2672 chan->expected_tx_seq = 0;
2673 skb_queue_head_init(&chan->tx_q);
2674 if (chan->mode == L2CAP_MODE_ERTM)
2675 l2cap_ertm_init(chan);
2677 l2cap_chan_ready(sk);
2680 done:
2681 bh_unlock_sock(sk);
2682 return 0;
2685 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2687 struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
2688 struct l2cap_disconn_rsp rsp;
2689 u16 dcid, scid;
2690 struct l2cap_chan *chan;
2691 struct sock *sk;
2693 scid = __le16_to_cpu(req->scid);
2694 dcid = __le16_to_cpu(req->dcid);
2696 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
2698 chan = l2cap_get_chan_by_scid(conn, dcid);
2699 if (!chan)
2700 return 0;
2702 sk = chan->sk;
2704 rsp.dcid = cpu_to_le16(chan->scid);
2705 rsp.scid = cpu_to_le16(chan->dcid);
2706 l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
2708 sk->sk_shutdown = SHUTDOWN_MASK;
2710 /* don't delete l2cap channel if sk is owned by user */
2711 if (sock_owned_by_user(sk)) {
2712 l2cap_state_change(chan, BT_DISCONN);
2713 __clear_chan_timer(chan);
2714 __set_chan_timer(chan, HZ / 5);
2715 bh_unlock_sock(sk);
2716 return 0;
2719 l2cap_chan_del(chan, ECONNRESET);
2720 bh_unlock_sock(sk);
2722 chan->ops->close(chan->data);
2723 return 0;
2726 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2728 struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
2729 u16 dcid, scid;
2730 struct l2cap_chan *chan;
2731 struct sock *sk;
2733 scid = __le16_to_cpu(rsp->scid);
2734 dcid = __le16_to_cpu(rsp->dcid);
2736 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
2738 chan = l2cap_get_chan_by_scid(conn, scid);
2739 if (!chan)
2740 return 0;
2742 sk = chan->sk;
2744 /* don't delete l2cap channel if sk is owned by user */
2745 if (sock_owned_by_user(sk)) {
2746 l2cap_state_change(chan,BT_DISCONN);
2747 __clear_chan_timer(chan);
2748 __set_chan_timer(chan, HZ / 5);
2749 bh_unlock_sock(sk);
2750 return 0;
2753 l2cap_chan_del(chan, 0);
2754 bh_unlock_sock(sk);
2756 chan->ops->close(chan->data);
2757 return 0;
2760 static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2762 struct l2cap_info_req *req = (struct l2cap_info_req *) data;
2763 u16 type;
2765 type = __le16_to_cpu(req->type);
2767 BT_DBG("type 0x%4.4x", type);
2769 if (type == L2CAP_IT_FEAT_MASK) {
2770 u8 buf[8];
2771 u32 feat_mask = l2cap_feat_mask;
2772 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2773 rsp->type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2774 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2775 if (!disable_ertm)
2776 feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
2777 | L2CAP_FEAT_FCS;
2778 put_unaligned_le32(feat_mask, rsp->data);
2779 l2cap_send_cmd(conn, cmd->ident,
2780 L2CAP_INFO_RSP, sizeof(buf), buf);
2781 } else if (type == L2CAP_IT_FIXED_CHAN) {
2782 u8 buf[12];
2783 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2784 rsp->type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2785 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2786 memcpy(buf + 4, l2cap_fixed_chan, 8);
2787 l2cap_send_cmd(conn, cmd->ident,
2788 L2CAP_INFO_RSP, sizeof(buf), buf);
2789 } else {
2790 struct l2cap_info_rsp rsp;
2791 rsp.type = cpu_to_le16(type);
2792 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
2793 l2cap_send_cmd(conn, cmd->ident,
2794 L2CAP_INFO_RSP, sizeof(rsp), &rsp);
2797 return 0;
2800 static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2802 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
2803 u16 type, result;
2805 type = __le16_to_cpu(rsp->type);
2806 result = __le16_to_cpu(rsp->result);
2808 BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
2810 /* L2CAP Info req/rsp are unbound to channels, add extra checks */
2811 if (cmd->ident != conn->info_ident ||
2812 conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
2813 return 0;
2815 del_timer(&conn->info_timer);
2817 if (result != L2CAP_IR_SUCCESS) {
2818 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2819 conn->info_ident = 0;
2821 l2cap_conn_start(conn);
2823 return 0;
2826 if (type == L2CAP_IT_FEAT_MASK) {
2827 conn->feat_mask = get_unaligned_le32(rsp->data);
2829 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2830 struct l2cap_info_req req;
2831 req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2833 conn->info_ident = l2cap_get_ident(conn);
2835 l2cap_send_cmd(conn, conn->info_ident,
2836 L2CAP_INFO_REQ, sizeof(req), &req);
2837 } else {
2838 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2839 conn->info_ident = 0;
2841 l2cap_conn_start(conn);
2843 } else if (type == L2CAP_IT_FIXED_CHAN) {
2844 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2845 conn->info_ident = 0;
2847 l2cap_conn_start(conn);
2850 return 0;
2853 static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2854 u16 to_multiplier)
2856 u16 max_latency;
2858 if (min > max || min < 6 || max > 3200)
2859 return -EINVAL;
2861 if (to_multiplier < 10 || to_multiplier > 3200)
2862 return -EINVAL;
2864 if (max >= to_multiplier * 8)
2865 return -EINVAL;
2867 max_latency = (to_multiplier * 8 / max) - 1;
2868 if (latency > 499 || latency > max_latency)
2869 return -EINVAL;
2871 return 0;
2874 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
2875 struct l2cap_cmd_hdr *cmd, u8 *data)
2877 struct hci_conn *hcon = conn->hcon;
2878 struct l2cap_conn_param_update_req *req;
2879 struct l2cap_conn_param_update_rsp rsp;
2880 u16 min, max, latency, to_multiplier, cmd_len;
2881 int err;
2883 if (!(hcon->link_mode & HCI_LM_MASTER))
2884 return -EINVAL;
2886 cmd_len = __le16_to_cpu(cmd->len);
2887 if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
2888 return -EPROTO;
2890 req = (struct l2cap_conn_param_update_req *) data;
2891 min = __le16_to_cpu(req->min);
2892 max = __le16_to_cpu(req->max);
2893 latency = __le16_to_cpu(req->latency);
2894 to_multiplier = __le16_to_cpu(req->to_multiplier);
2896 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
2897 min, max, latency, to_multiplier);
2899 memset(&rsp, 0, sizeof(rsp));
2901 err = l2cap_check_conn_param(min, max, latency, to_multiplier);
2902 if (err)
2903 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
2904 else
2905 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
2907 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
2908 sizeof(rsp), &rsp);
2910 if (!err)
2911 hci_le_conn_update(hcon, min, max, latency, to_multiplier);
2913 return 0;
2916 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
2917 struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
2919 int err = 0;
2921 switch (cmd->code) {
2922 case L2CAP_COMMAND_REJ:
2923 l2cap_command_rej(conn, cmd, data);
2924 break;
2926 case L2CAP_CONN_REQ:
2927 err = l2cap_connect_req(conn, cmd, data);
2928 break;
2930 case L2CAP_CONN_RSP:
2931 err = l2cap_connect_rsp(conn, cmd, data);
2932 break;
2934 case L2CAP_CONF_REQ:
2935 err = l2cap_config_req(conn, cmd, cmd_len, data);
2936 break;
2938 case L2CAP_CONF_RSP:
2939 err = l2cap_config_rsp(conn, cmd, data);
2940 break;
2942 case L2CAP_DISCONN_REQ:
2943 err = l2cap_disconnect_req(conn, cmd, data);
2944 break;
2946 case L2CAP_DISCONN_RSP:
2947 err = l2cap_disconnect_rsp(conn, cmd, data);
2948 break;
2950 case L2CAP_ECHO_REQ:
2951 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
2952 break;
2954 case L2CAP_ECHO_RSP:
2955 break;
2957 case L2CAP_INFO_REQ:
2958 err = l2cap_information_req(conn, cmd, data);
2959 break;
2961 case L2CAP_INFO_RSP:
2962 err = l2cap_information_rsp(conn, cmd, data);
2963 break;
2965 default:
2966 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
2967 err = -EINVAL;
2968 break;
2971 return err;
2974 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
2975 struct l2cap_cmd_hdr *cmd, u8 *data)
2977 switch (cmd->code) {
2978 case L2CAP_COMMAND_REJ:
2979 return 0;
2981 case L2CAP_CONN_PARAM_UPDATE_REQ:
2982 return l2cap_conn_param_update_req(conn, cmd, data);
2984 case L2CAP_CONN_PARAM_UPDATE_RSP:
2985 return 0;
2987 default:
2988 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
2989 return -EINVAL;
2993 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
2994 struct sk_buff *skb)
2996 u8 *data = skb->data;
2997 int len = skb->len;
2998 struct l2cap_cmd_hdr cmd;
2999 int err;
3001 l2cap_raw_recv(conn, skb);
3003 while (len >= L2CAP_CMD_HDR_SIZE) {
3004 u16 cmd_len;
3005 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
3006 data += L2CAP_CMD_HDR_SIZE;
3007 len -= L2CAP_CMD_HDR_SIZE;
3009 cmd_len = le16_to_cpu(cmd.len);
3011 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident);
3013 if (cmd_len > len || !cmd.ident) {
3014 BT_DBG("corrupted command");
3015 break;
3018 if (conn->hcon->type == LE_LINK)
3019 err = l2cap_le_sig_cmd(conn, &cmd, data);
3020 else
3021 err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
3023 if (err) {
3024 struct l2cap_cmd_rej_unk rej;
3026 BT_ERR("Wrong link type (%d)", err);
3028 /* FIXME: Map err to a valid reason */
3029 rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
3030 l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
3033 data += cmd_len;
3034 len -= cmd_len;
3037 kfree_skb(skb);
3040 static int l2cap_check_fcs(struct l2cap_chan *chan, struct sk_buff *skb)
3042 u16 our_fcs, rcv_fcs;
3043 int hdr_size = L2CAP_HDR_SIZE + 2;
3045 if (chan->fcs == L2CAP_FCS_CRC16) {
3046 skb_trim(skb, skb->len - 2);
3047 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
3048 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
3050 if (our_fcs != rcv_fcs)
3051 return -EBADMSG;
3053 return 0;
3056 static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3058 u16 control = 0;
3060 chan->frames_sent = 0;
3062 control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3064 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3065 control |= L2CAP_SUPER_RCV_NOT_READY;
3066 l2cap_send_sframe(chan, control);
3067 set_bit(CONN_RNR_SENT, &chan->conn_state);
3070 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3071 l2cap_retransmit_frames(chan);
3073 l2cap_ertm_send(chan);
3075 if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3076 chan->frames_sent == 0) {
3077 control |= L2CAP_SUPER_RCV_READY;
3078 l2cap_send_sframe(chan, control);
3082 static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
3084 struct sk_buff *next_skb;
3085 int tx_seq_offset, next_tx_seq_offset;
3087 bt_cb(skb)->tx_seq = tx_seq;
3088 bt_cb(skb)->sar = sar;
3090 next_skb = skb_peek(&chan->srej_q);
3091 if (!next_skb) {
3092 __skb_queue_tail(&chan->srej_q, skb);
3093 return 0;
3096 tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3097 if (tx_seq_offset < 0)
3098 tx_seq_offset += 64;
3100 do {
3101 if (bt_cb(next_skb)->tx_seq == tx_seq)
3102 return -EINVAL;
3104 next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
3105 chan->buffer_seq) % 64;
3106 if (next_tx_seq_offset < 0)
3107 next_tx_seq_offset += 64;
3109 if (next_tx_seq_offset > tx_seq_offset) {
3110 __skb_queue_before(&chan->srej_q, next_skb, skb);
3111 return 0;
3114 if (skb_queue_is_last(&chan->srej_q, next_skb))
3115 break;
3117 } while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
3119 __skb_queue_tail(&chan->srej_q, skb);
3121 return 0;
3124 static int l2cap_ertm_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3126 struct sk_buff *_skb;
3127 int err;
3129 switch (control & L2CAP_CTRL_SAR) {
3130 case L2CAP_SDU_UNSEGMENTED:
3131 if (test_bit(CONN_SAR_SDU, &chan->conn_state))
3132 goto drop;
3134 return chan->ops->recv(chan->data, skb);
3136 case L2CAP_SDU_START:
3137 if (test_bit(CONN_SAR_SDU, &chan->conn_state))
3138 goto drop;
3140 chan->sdu_len = get_unaligned_le16(skb->data);
3142 if (chan->sdu_len > chan->imtu)
3143 goto disconnect;
3145 chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
3146 if (!chan->sdu)
3147 return -ENOMEM;
3149 /* pull sdu_len bytes only after alloc, because of Local Busy
3150 * condition we have to be sure that this will be executed
3151 * only once, i.e., when alloc does not fail */
3152 skb_pull(skb, 2);
3154 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3156 set_bit(CONN_SAR_SDU, &chan->conn_state);
3157 chan->partial_sdu_len = skb->len;
3158 break;
3160 case L2CAP_SDU_CONTINUE:
3161 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3162 goto disconnect;
3164 if (!chan->sdu)
3165 goto disconnect;
3167 chan->partial_sdu_len += skb->len;
3168 if (chan->partial_sdu_len > chan->sdu_len)
3169 goto drop;
3171 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3173 break;
3175 case L2CAP_SDU_END:
3176 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3177 goto disconnect;
3179 if (!chan->sdu)
3180 goto disconnect;
3182 chan->partial_sdu_len += skb->len;
3184 if (chan->partial_sdu_len > chan->imtu)
3185 goto drop;
3187 if (chan->partial_sdu_len != chan->sdu_len)
3188 goto drop;
3190 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3192 _skb = skb_clone(chan->sdu, GFP_ATOMIC);
3193 if (!_skb) {
3194 return -ENOMEM;
3197 err = chan->ops->recv(chan->data, _skb);
3198 if (err < 0) {
3199 kfree_skb(_skb);
3200 return err;
3203 clear_bit(CONN_SAR_SDU, &chan->conn_state);
3205 kfree_skb(chan->sdu);
3206 break;
3209 kfree_skb(skb);
3210 return 0;
3212 drop:
3213 kfree_skb(chan->sdu);
3214 chan->sdu = NULL;
3216 disconnect:
3217 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3218 kfree_skb(skb);
3219 return 0;
3222 static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3224 u16 control;
3226 BT_DBG("chan %p, Enter local busy", chan);
3228 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
3230 control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3231 control |= L2CAP_SUPER_RCV_NOT_READY;
3232 l2cap_send_sframe(chan, control);
3234 set_bit(CONN_RNR_SENT, &chan->conn_state);
3236 __clear_ack_timer(chan);
3239 static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
3241 u16 control;
3243 if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3244 goto done;
3246 control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3247 control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
3248 l2cap_send_sframe(chan, control);
3249 chan->retry_count = 1;
3251 __clear_retrans_timer(chan);
3252 __set_monitor_timer(chan);
3254 set_bit(CONN_WAIT_F, &chan->conn_state);
3256 done:
3257 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
3258 clear_bit(CONN_RNR_SENT, &chan->conn_state);
3260 BT_DBG("chan %p, Exit local busy", chan);
3263 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3265 if (chan->mode == L2CAP_MODE_ERTM) {
3266 if (busy)
3267 l2cap_ertm_enter_local_busy(chan);
3268 else
3269 l2cap_ertm_exit_local_busy(chan);
3273 static int l2cap_streaming_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3275 struct sk_buff *_skb;
3276 int err = -EINVAL;
3279 * TODO: We have to notify the userland if some data is lost with the
3280 * Streaming Mode.
3283 switch (control & L2CAP_CTRL_SAR) {
3284 case L2CAP_SDU_UNSEGMENTED:
3285 if (test_bit(CONN_SAR_SDU, &chan->conn_state)) {
3286 kfree_skb(chan->sdu);
3287 break;
3290 err = chan->ops->recv(chan->data, skb);
3291 if (!err)
3292 return 0;
3294 break;
3296 case L2CAP_SDU_START:
3297 if (test_bit(CONN_SAR_SDU, &chan->conn_state)) {
3298 kfree_skb(chan->sdu);
3299 break;
3302 chan->sdu_len = get_unaligned_le16(skb->data);
3303 skb_pull(skb, 2);
3305 if (chan->sdu_len > chan->imtu) {
3306 err = -EMSGSIZE;
3307 break;
3310 chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
3311 if (!chan->sdu) {
3312 err = -ENOMEM;
3313 break;
3316 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3318 set_bit(CONN_SAR_SDU, &chan->conn_state);
3319 chan->partial_sdu_len = skb->len;
3320 err = 0;
3321 break;
3323 case L2CAP_SDU_CONTINUE:
3324 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3325 break;
3327 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3329 chan->partial_sdu_len += skb->len;
3330 if (chan->partial_sdu_len > chan->sdu_len)
3331 kfree_skb(chan->sdu);
3332 else
3333 err = 0;
3335 break;
3337 case L2CAP_SDU_END:
3338 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3339 break;
3341 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3343 clear_bit(CONN_SAR_SDU, &chan->conn_state);
3344 chan->partial_sdu_len += skb->len;
3346 if (chan->partial_sdu_len > chan->imtu)
3347 goto drop;
3349 if (chan->partial_sdu_len == chan->sdu_len) {
3350 _skb = skb_clone(chan->sdu, GFP_ATOMIC);
3351 err = chan->ops->recv(chan->data, _skb);
3352 if (err < 0)
3353 kfree_skb(_skb);
3355 err = 0;
3357 drop:
3358 kfree_skb(chan->sdu);
3359 break;
3362 kfree_skb(skb);
3363 return err;
3366 static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3368 struct sk_buff *skb;
3369 u16 control;
3371 while ((skb = skb_peek(&chan->srej_q)) &&
3372 !test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3373 int err;
3375 if (bt_cb(skb)->tx_seq != tx_seq)
3376 break;
3378 skb = skb_dequeue(&chan->srej_q);
3379 control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3380 err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3382 if (err < 0) {
3383 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3384 break;
3387 chan->buffer_seq_srej =
3388 (chan->buffer_seq_srej + 1) % 64;
3389 tx_seq = (tx_seq + 1) % 64;
3393 static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3395 struct srej_list *l, *tmp;
3396 u16 control;
3398 list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3399 if (l->tx_seq == tx_seq) {
3400 list_del(&l->list);
3401 kfree(l);
3402 return;
3404 control = L2CAP_SUPER_SELECT_REJECT;
3405 control |= l->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3406 l2cap_send_sframe(chan, control);
3407 list_del(&l->list);
3408 list_add_tail(&l->list, &chan->srej_l);
3412 static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3414 struct srej_list *new;
3415 u16 control;
3417 while (tx_seq != chan->expected_tx_seq) {
3418 control = L2CAP_SUPER_SELECT_REJECT;
3419 control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3420 l2cap_send_sframe(chan, control);
3422 new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3423 new->tx_seq = chan->expected_tx_seq;
3424 chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3425 list_add_tail(&new->list, &chan->srej_l);
3427 chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3430 static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3432 u8 tx_seq = __get_txseq(rx_control);
3433 u8 req_seq = __get_reqseq(rx_control);
3434 u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3435 int tx_seq_offset, expected_tx_seq_offset;
3436 int num_to_ack = (chan->tx_win/6) + 1;
3437 int err = 0;
3439 BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
3440 tx_seq, rx_control);
3442 if (L2CAP_CTRL_FINAL & rx_control &&
3443 test_bit(CONN_WAIT_F, &chan->conn_state)) {
3444 __clear_monitor_timer(chan);
3445 if (chan->unacked_frames > 0)
3446 __set_retrans_timer(chan);
3447 clear_bit(CONN_WAIT_F, &chan->conn_state);
3450 chan->expected_ack_seq = req_seq;
3451 l2cap_drop_acked_frames(chan);
3453 tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3454 if (tx_seq_offset < 0)
3455 tx_seq_offset += 64;
3457 /* invalid tx_seq */
3458 if (tx_seq_offset >= chan->tx_win) {
3459 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3460 goto drop;
3463 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
3464 goto drop;
3466 if (tx_seq == chan->expected_tx_seq)
3467 goto expected;
3469 if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3470 struct srej_list *first;
3472 first = list_first_entry(&chan->srej_l,
3473 struct srej_list, list);
3474 if (tx_seq == first->tx_seq) {
3475 l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3476 l2cap_check_srej_gap(chan, tx_seq);
3478 list_del(&first->list);
3479 kfree(first);
3481 if (list_empty(&chan->srej_l)) {
3482 chan->buffer_seq = chan->buffer_seq_srej;
3483 clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3484 l2cap_send_ack(chan);
3485 BT_DBG("chan %p, Exit SREJ_SENT", chan);
3487 } else {
3488 struct srej_list *l;
3490 /* duplicated tx_seq */
3491 if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3492 goto drop;
3494 list_for_each_entry(l, &chan->srej_l, list) {
3495 if (l->tx_seq == tx_seq) {
3496 l2cap_resend_srejframe(chan, tx_seq);
3497 return 0;
3500 l2cap_send_srejframe(chan, tx_seq);
3502 } else {
3503 expected_tx_seq_offset =
3504 (chan->expected_tx_seq - chan->buffer_seq) % 64;
3505 if (expected_tx_seq_offset < 0)
3506 expected_tx_seq_offset += 64;
3508 /* duplicated tx_seq */
3509 if (tx_seq_offset < expected_tx_seq_offset)
3510 goto drop;
3512 set_bit(CONN_SREJ_SENT, &chan->conn_state);
3514 BT_DBG("chan %p, Enter SREJ", chan);
3516 INIT_LIST_HEAD(&chan->srej_l);
3517 chan->buffer_seq_srej = chan->buffer_seq;
3519 __skb_queue_head_init(&chan->srej_q);
3520 l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3522 set_bit(CONN_SEND_PBIT, &chan->conn_state);
3524 l2cap_send_srejframe(chan, tx_seq);
3526 __clear_ack_timer(chan);
3528 return 0;
3530 expected:
3531 chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3533 if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3534 bt_cb(skb)->tx_seq = tx_seq;
3535 bt_cb(skb)->sar = sar;
3536 __skb_queue_tail(&chan->srej_q, skb);
3537 return 0;
3540 err = l2cap_ertm_reassembly_sdu(chan, skb, rx_control);
3541 chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3542 if (err < 0) {
3543 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3544 return err;
3547 if (rx_control & L2CAP_CTRL_FINAL) {
3548 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3549 l2cap_retransmit_frames(chan);
3552 __set_ack_timer(chan);
3554 chan->num_acked = (chan->num_acked + 1) % num_to_ack;
3555 if (chan->num_acked == num_to_ack - 1)
3556 l2cap_send_ack(chan);
3558 return 0;
3560 drop:
3561 kfree_skb(skb);
3562 return 0;
3565 static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3567 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3568 rx_control);
3570 chan->expected_ack_seq = __get_reqseq(rx_control);
3571 l2cap_drop_acked_frames(chan);
3573 if (rx_control & L2CAP_CTRL_POLL) {
3574 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3575 if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3576 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3577 (chan->unacked_frames > 0))
3578 __set_retrans_timer(chan);
3580 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3581 l2cap_send_srejtail(chan);
3582 } else {
3583 l2cap_send_i_or_rr_or_rnr(chan);
3586 } else if (rx_control & L2CAP_CTRL_FINAL) {
3587 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3589 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3590 l2cap_retransmit_frames(chan);
3592 } else {
3593 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3594 (chan->unacked_frames > 0))
3595 __set_retrans_timer(chan);
3597 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3598 if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
3599 l2cap_send_ack(chan);
3600 else
3601 l2cap_ertm_send(chan);
3605 static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3607 u8 tx_seq = __get_reqseq(rx_control);
3609 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3611 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3613 chan->expected_ack_seq = tx_seq;
3614 l2cap_drop_acked_frames(chan);
3616 if (rx_control & L2CAP_CTRL_FINAL) {
3617 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3618 l2cap_retransmit_frames(chan);
3619 } else {
3620 l2cap_retransmit_frames(chan);
3622 if (test_bit(CONN_WAIT_F, &chan->conn_state))
3623 set_bit(CONN_REJ_ACT, &chan->conn_state);
3626 static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3628 u8 tx_seq = __get_reqseq(rx_control);
3630 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3632 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3634 if (rx_control & L2CAP_CTRL_POLL) {
3635 chan->expected_ack_seq = tx_seq;
3636 l2cap_drop_acked_frames(chan);
3638 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3639 l2cap_retransmit_one_frame(chan, tx_seq);
3641 l2cap_ertm_send(chan);
3643 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3644 chan->srej_save_reqseq = tx_seq;
3645 set_bit(CONN_SREJ_ACT, &chan->conn_state);
3647 } else if (rx_control & L2CAP_CTRL_FINAL) {
3648 if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
3649 chan->srej_save_reqseq == tx_seq)
3650 clear_bit(CONN_SREJ_ACT, &chan->conn_state);
3651 else
3652 l2cap_retransmit_one_frame(chan, tx_seq);
3653 } else {
3654 l2cap_retransmit_one_frame(chan, tx_seq);
3655 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3656 chan->srej_save_reqseq = tx_seq;
3657 set_bit(CONN_SREJ_ACT, &chan->conn_state);
3662 static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3664 u8 tx_seq = __get_reqseq(rx_control);
3666 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3668 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3669 chan->expected_ack_seq = tx_seq;
3670 l2cap_drop_acked_frames(chan);
3672 if (rx_control & L2CAP_CTRL_POLL)
3673 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3675 if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3676 __clear_retrans_timer(chan);
3677 if (rx_control & L2CAP_CTRL_POLL)
3678 l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3679 return;
3682 if (rx_control & L2CAP_CTRL_POLL)
3683 l2cap_send_srejtail(chan);
3684 else
3685 l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3688 static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3690 BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3692 if (L2CAP_CTRL_FINAL & rx_control &&
3693 test_bit(CONN_WAIT_F, &chan->conn_state)) {
3694 __clear_monitor_timer(chan);
3695 if (chan->unacked_frames > 0)
3696 __set_retrans_timer(chan);
3697 clear_bit(CONN_WAIT_F, &chan->conn_state);
3700 switch (rx_control & L2CAP_CTRL_SUPERVISE) {
3701 case L2CAP_SUPER_RCV_READY:
3702 l2cap_data_channel_rrframe(chan, rx_control);
3703 break;
3705 case L2CAP_SUPER_REJECT:
3706 l2cap_data_channel_rejframe(chan, rx_control);
3707 break;
3709 case L2CAP_SUPER_SELECT_REJECT:
3710 l2cap_data_channel_srejframe(chan, rx_control);
3711 break;
3713 case L2CAP_SUPER_RCV_NOT_READY:
3714 l2cap_data_channel_rnrframe(chan, rx_control);
3715 break;
3718 kfree_skb(skb);
3719 return 0;
3722 static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
3724 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3725 u16 control;
3726 u8 req_seq;
3727 int len, next_tx_seq_offset, req_seq_offset;
3729 control = get_unaligned_le16(skb->data);
3730 skb_pull(skb, 2);
3731 len = skb->len;
3734 * We can just drop the corrupted I-frame here.
3735 * Receiver will miss it and start proper recovery
3736 * procedures and ask retransmission.
3738 if (l2cap_check_fcs(chan, skb))
3739 goto drop;
3741 if (__is_sar_start(control) && __is_iframe(control))
3742 len -= 2;
3744 if (chan->fcs == L2CAP_FCS_CRC16)
3745 len -= 2;
3747 if (len > chan->mps) {
3748 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3749 goto drop;
3752 req_seq = __get_reqseq(control);
3753 req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3754 if (req_seq_offset < 0)
3755 req_seq_offset += 64;
3757 next_tx_seq_offset =
3758 (chan->next_tx_seq - chan->expected_ack_seq) % 64;
3759 if (next_tx_seq_offset < 0)
3760 next_tx_seq_offset += 64;
3762 /* check for invalid req-seq */
3763 if (req_seq_offset > next_tx_seq_offset) {
3764 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3765 goto drop;
3768 if (__is_iframe(control)) {
3769 if (len < 0) {
3770 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3771 goto drop;
3774 l2cap_data_channel_iframe(chan, control, skb);
3775 } else {
3776 if (len != 0) {
3777 BT_ERR("%d", len);
3778 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3779 goto drop;
3782 l2cap_data_channel_sframe(chan, control, skb);
3785 return 0;
3787 drop:
3788 kfree_skb(skb);
3789 return 0;
3792 static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
3794 struct l2cap_chan *chan;
3795 struct sock *sk = NULL;
3796 u16 control;
3797 u8 tx_seq;
3798 int len;
3800 chan = l2cap_get_chan_by_scid(conn, cid);
3801 if (!chan) {
3802 BT_DBG("unknown cid 0x%4.4x", cid);
3803 goto drop;
3806 sk = chan->sk;
3808 BT_DBG("chan %p, len %d", chan, skb->len);
3810 if (chan->state != BT_CONNECTED)
3811 goto drop;
3813 switch (chan->mode) {
3814 case L2CAP_MODE_BASIC:
3815 /* If socket recv buffers overflows we drop data here
3816 * which is *bad* because L2CAP has to be reliable.
3817 * But we don't have any other choice. L2CAP doesn't
3818 * provide flow control mechanism. */
3820 if (chan->imtu < skb->len)
3821 goto drop;
3823 if (!chan->ops->recv(chan->data, skb))
3824 goto done;
3825 break;
3827 case L2CAP_MODE_ERTM:
3828 if (!sock_owned_by_user(sk)) {
3829 l2cap_ertm_data_rcv(sk, skb);
3830 } else {
3831 if (sk_add_backlog(sk, skb))
3832 goto drop;
3835 goto done;
3837 case L2CAP_MODE_STREAMING:
3838 control = get_unaligned_le16(skb->data);
3839 skb_pull(skb, 2);
3840 len = skb->len;
3842 if (l2cap_check_fcs(chan, skb))
3843 goto drop;
3845 if (__is_sar_start(control))
3846 len -= 2;
3848 if (chan->fcs == L2CAP_FCS_CRC16)
3849 len -= 2;
3851 if (len > chan->mps || len < 0 || __is_sframe(control))
3852 goto drop;
3854 tx_seq = __get_txseq(control);
3856 if (chan->expected_tx_seq == tx_seq)
3857 chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3858 else
3859 chan->expected_tx_seq = (tx_seq + 1) % 64;
3861 l2cap_streaming_reassembly_sdu(chan, skb, control);
3863 goto done;
3865 default:
3866 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3867 break;
3870 drop:
3871 kfree_skb(skb);
3873 done:
3874 if (sk)
3875 bh_unlock_sock(sk);
3877 return 0;
3880 static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
3882 struct sock *sk = NULL;
3883 struct l2cap_chan *chan;
3885 chan = l2cap_global_chan_by_psm(0, psm, conn->src);
3886 if (!chan)
3887 goto drop;
3889 sk = chan->sk;
3891 bh_lock_sock(sk);
3893 BT_DBG("sk %p, len %d", sk, skb->len);
3895 if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3896 goto drop;
3898 if (chan->imtu < skb->len)
3899 goto drop;
3901 if (!chan->ops->recv(chan->data, skb))
3902 goto done;
3904 drop:
3905 kfree_skb(skb);
3907 done:
3908 if (sk)
3909 bh_unlock_sock(sk);
3910 return 0;
3913 static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
3915 struct sock *sk = NULL;
3916 struct l2cap_chan *chan;
3918 chan = l2cap_global_chan_by_scid(0, cid, conn->src);
3919 if (!chan)
3920 goto drop;
3922 sk = chan->sk;
3924 bh_lock_sock(sk);
3926 BT_DBG("sk %p, len %d", sk, skb->len);
3928 if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3929 goto drop;
3931 if (chan->imtu < skb->len)
3932 goto drop;
3934 if (!chan->ops->recv(chan->data, skb))
3935 goto done;
3937 drop:
3938 kfree_skb(skb);
3940 done:
3941 if (sk)
3942 bh_unlock_sock(sk);
3943 return 0;
3946 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
3948 struct l2cap_hdr *lh = (void *) skb->data;
3949 u16 cid, len;
3950 __le16 psm;
3952 skb_pull(skb, L2CAP_HDR_SIZE);
3953 cid = __le16_to_cpu(lh->cid);
3954 len = __le16_to_cpu(lh->len);
3956 if (len != skb->len) {
3957 kfree_skb(skb);
3958 return;
3961 BT_DBG("len %d, cid 0x%4.4x", len, cid);
3963 switch (cid) {
3964 case L2CAP_CID_LE_SIGNALING:
3965 case L2CAP_CID_SIGNALING:
3966 l2cap_sig_channel(conn, skb);
3967 break;
3969 case L2CAP_CID_CONN_LESS:
3970 psm = get_unaligned_le16(skb->data);
3971 skb_pull(skb, 2);
3972 l2cap_conless_channel(conn, psm, skb);
3973 break;
3975 case L2CAP_CID_LE_DATA:
3976 l2cap_att_channel(conn, cid, skb);
3977 break;
3979 case L2CAP_CID_SMP:
3980 if (smp_sig_channel(conn, skb))
3981 l2cap_conn_del(conn->hcon, EACCES);
3982 break;
3984 default:
3985 l2cap_data_channel(conn, cid, skb);
3986 break;
3990 /* ---- L2CAP interface with lower layer (HCI) ---- */
3992 static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3994 int exact = 0, lm1 = 0, lm2 = 0;
3995 struct l2cap_chan *c;
3997 if (type != ACL_LINK)
3998 return -EINVAL;
4000 BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
4002 /* Find listening sockets and check their link_mode */
4003 read_lock(&chan_list_lock);
4004 list_for_each_entry(c, &chan_list, global_l) {
4005 struct sock *sk = c->sk;
4007 if (c->state != BT_LISTEN)
4008 continue;
4010 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4011 lm1 |= HCI_LM_ACCEPT;
4012 if (c->role_switch)
4013 lm1 |= HCI_LM_MASTER;
4014 exact++;
4015 } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
4016 lm2 |= HCI_LM_ACCEPT;
4017 if (c->role_switch)
4018 lm2 |= HCI_LM_MASTER;
4021 read_unlock(&chan_list_lock);
4023 return exact ? lm1 : lm2;
4026 static int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
4028 struct l2cap_conn *conn;
4030 BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
4032 if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4033 return -EINVAL;
4035 if (!status) {
4036 conn = l2cap_conn_add(hcon, status);
4037 if (conn)
4038 l2cap_conn_ready(conn);
4039 } else
4040 l2cap_conn_del(hcon, bt_to_errno(status));
4042 return 0;
4045 static int l2cap_disconn_ind(struct hci_conn *hcon)
4047 struct l2cap_conn *conn = hcon->l2cap_data;
4049 BT_DBG("hcon %p", hcon);
4051 if ((hcon->type != ACL_LINK && hcon->type != LE_LINK) || !conn)
4052 return 0x13;
4054 return conn->disc_reason;
4057 static int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
4059 BT_DBG("hcon %p reason %d", hcon, reason);
4061 if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4062 return -EINVAL;
4064 l2cap_conn_del(hcon, bt_to_errno(reason));
4066 return 0;
4069 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4071 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4072 return;
4074 if (encrypt == 0x00) {
4075 if (chan->sec_level == BT_SECURITY_MEDIUM) {
4076 __clear_chan_timer(chan);
4077 __set_chan_timer(chan, HZ * 5);
4078 } else if (chan->sec_level == BT_SECURITY_HIGH)
4079 l2cap_chan_close(chan, ECONNREFUSED);
4080 } else {
4081 if (chan->sec_level == BT_SECURITY_MEDIUM)
4082 __clear_chan_timer(chan);
4086 static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
4088 struct l2cap_conn *conn = hcon->l2cap_data;
4089 struct l2cap_chan *chan;
4091 if (!conn)
4092 return 0;
4094 BT_DBG("conn %p", conn);
4096 read_lock(&conn->chan_lock);
4098 list_for_each_entry(chan, &conn->chan_l, list) {
4099 struct sock *sk = chan->sk;
4101 bh_lock_sock(sk);
4103 BT_DBG("chan->scid %d", chan->scid);
4105 if (chan->scid == L2CAP_CID_LE_DATA) {
4106 if (!status && encrypt) {
4107 chan->sec_level = hcon->sec_level;
4108 del_timer(&conn->security_timer);
4109 l2cap_chan_ready(sk);
4110 smp_distribute_keys(conn, 0);
4113 bh_unlock_sock(sk);
4114 continue;
4117 if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4118 bh_unlock_sock(sk);
4119 continue;
4122 if (!status && (chan->state == BT_CONNECTED ||
4123 chan->state == BT_CONFIG)) {
4124 l2cap_check_encryption(chan, encrypt);
4125 bh_unlock_sock(sk);
4126 continue;
4129 if (chan->state == BT_CONNECT) {
4130 if (!status) {
4131 struct l2cap_conn_req req;
4132 req.scid = cpu_to_le16(chan->scid);
4133 req.psm = chan->psm;
4135 chan->ident = l2cap_get_ident(conn);
4136 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
4138 l2cap_send_cmd(conn, chan->ident,
4139 L2CAP_CONN_REQ, sizeof(req), &req);
4140 } else {
4141 __clear_chan_timer(chan);
4142 __set_chan_timer(chan, HZ / 10);
4144 } else if (chan->state == BT_CONNECT2) {
4145 struct l2cap_conn_rsp rsp;
4146 __u16 res, stat;
4148 if (!status) {
4149 if (bt_sk(sk)->defer_setup) {
4150 struct sock *parent = bt_sk(sk)->parent;
4151 res = L2CAP_CR_PEND;
4152 stat = L2CAP_CS_AUTHOR_PEND;
4153 if (parent)
4154 parent->sk_data_ready(parent, 0);
4155 } else {
4156 l2cap_state_change(chan, BT_CONFIG);
4157 res = L2CAP_CR_SUCCESS;
4158 stat = L2CAP_CS_NO_INFO;
4160 } else {
4161 l2cap_state_change(chan, BT_DISCONN);
4162 __set_chan_timer(chan, HZ / 10);
4163 res = L2CAP_CR_SEC_BLOCK;
4164 stat = L2CAP_CS_NO_INFO;
4167 rsp.scid = cpu_to_le16(chan->dcid);
4168 rsp.dcid = cpu_to_le16(chan->scid);
4169 rsp.result = cpu_to_le16(res);
4170 rsp.status = cpu_to_le16(stat);
4171 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
4172 sizeof(rsp), &rsp);
4175 bh_unlock_sock(sk);
4178 read_unlock(&conn->chan_lock);
4180 return 0;
4183 static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
4185 struct l2cap_conn *conn = hcon->l2cap_data;
4187 if (!conn)
4188 conn = l2cap_conn_add(hcon, 0);
4190 if (!conn)
4191 goto drop;
4193 BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
4195 if (!(flags & ACL_CONT)) {
4196 struct l2cap_hdr *hdr;
4197 struct l2cap_chan *chan;
4198 u16 cid;
4199 int len;
4201 if (conn->rx_len) {
4202 BT_ERR("Unexpected start frame (len %d)", skb->len);
4203 kfree_skb(conn->rx_skb);
4204 conn->rx_skb = NULL;
4205 conn->rx_len = 0;
4206 l2cap_conn_unreliable(conn, ECOMM);
4209 /* Start fragment always begin with Basic L2CAP header */
4210 if (skb->len < L2CAP_HDR_SIZE) {
4211 BT_ERR("Frame is too short (len %d)", skb->len);
4212 l2cap_conn_unreliable(conn, ECOMM);
4213 goto drop;
4216 hdr = (struct l2cap_hdr *) skb->data;
4217 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
4218 cid = __le16_to_cpu(hdr->cid);
4220 if (len == skb->len) {
4221 /* Complete frame received */
4222 l2cap_recv_frame(conn, skb);
4223 return 0;
4226 BT_DBG("Start: total len %d, frag len %d", len, skb->len);
4228 if (skb->len > len) {
4229 BT_ERR("Frame is too long (len %d, expected len %d)",
4230 skb->len, len);
4231 l2cap_conn_unreliable(conn, ECOMM);
4232 goto drop;
4235 chan = l2cap_get_chan_by_scid(conn, cid);
4237 if (chan && chan->sk) {
4238 struct sock *sk = chan->sk;
4240 if (chan->imtu < len - L2CAP_HDR_SIZE) {
4241 BT_ERR("Frame exceeding recv MTU (len %d, "
4242 "MTU %d)", len,
4243 chan->imtu);
4244 bh_unlock_sock(sk);
4245 l2cap_conn_unreliable(conn, ECOMM);
4246 goto drop;
4248 bh_unlock_sock(sk);
4251 /* Allocate skb for the complete frame (with header) */
4252 conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
4253 if (!conn->rx_skb)
4254 goto drop;
4256 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4257 skb->len);
4258 conn->rx_len = len - skb->len;
4259 } else {
4260 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
4262 if (!conn->rx_len) {
4263 BT_ERR("Unexpected continuation frame (len %d)", skb->len);
4264 l2cap_conn_unreliable(conn, ECOMM);
4265 goto drop;
4268 if (skb->len > conn->rx_len) {
4269 BT_ERR("Fragment is too long (len %d, expected %d)",
4270 skb->len, conn->rx_len);
4271 kfree_skb(conn->rx_skb);
4272 conn->rx_skb = NULL;
4273 conn->rx_len = 0;
4274 l2cap_conn_unreliable(conn, ECOMM);
4275 goto drop;
4278 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4279 skb->len);
4280 conn->rx_len -= skb->len;
4282 if (!conn->rx_len) {
4283 /* Complete frame received */
4284 l2cap_recv_frame(conn, conn->rx_skb);
4285 conn->rx_skb = NULL;
4289 drop:
4290 kfree_skb(skb);
4291 return 0;
4294 static int l2cap_debugfs_show(struct seq_file *f, void *p)
4296 struct l2cap_chan *c;
4298 read_lock_bh(&chan_list_lock);
4300 list_for_each_entry(c, &chan_list, global_l) {
4301 struct sock *sk = c->sk;
4303 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4304 batostr(&bt_sk(sk)->src),
4305 batostr(&bt_sk(sk)->dst),
4306 c->state, __le16_to_cpu(c->psm),
4307 c->scid, c->dcid, c->imtu, c->omtu,
4308 c->sec_level, c->mode);
4311 read_unlock_bh(&chan_list_lock);
4313 return 0;
4316 static int l2cap_debugfs_open(struct inode *inode, struct file *file)
4318 return single_open(file, l2cap_debugfs_show, inode->i_private);
4321 static const struct file_operations l2cap_debugfs_fops = {
4322 .open = l2cap_debugfs_open,
4323 .read = seq_read,
4324 .llseek = seq_lseek,
4325 .release = single_release,
4328 static struct dentry *l2cap_debugfs;
4330 static struct hci_proto l2cap_hci_proto = {
4331 .name = "L2CAP",
4332 .id = HCI_PROTO_L2CAP,
4333 .connect_ind = l2cap_connect_ind,
4334 .connect_cfm = l2cap_connect_cfm,
4335 .disconn_ind = l2cap_disconn_ind,
4336 .disconn_cfm = l2cap_disconn_cfm,
4337 .security_cfm = l2cap_security_cfm,
4338 .recv_acldata = l2cap_recv_acldata
4341 int __init l2cap_init(void)
4343 int err;
4345 err = l2cap_init_sockets();
4346 if (err < 0)
4347 return err;
4349 err = hci_register_proto(&l2cap_hci_proto);
4350 if (err < 0) {
4351 BT_ERR("L2CAP protocol registration failed");
4352 bt_sock_unregister(BTPROTO_L2CAP);
4353 goto error;
4356 if (bt_debugfs) {
4357 l2cap_debugfs = debugfs_create_file("l2cap", 0444,
4358 bt_debugfs, NULL, &l2cap_debugfs_fops);
4359 if (!l2cap_debugfs)
4360 BT_ERR("Failed to create L2CAP debug file");
4363 return 0;
4365 error:
4366 l2cap_cleanup_sockets();
4367 return err;
4370 void l2cap_exit(void)
4372 debugfs_remove(l2cap_debugfs);
4374 if (hci_unregister_proto(&l2cap_hci_proto) < 0)
4375 BT_ERR("L2CAP protocol unregistration failed");
4377 l2cap_cleanup_sockets();
4380 module_param(disable_ertm, bool, 0644);
4381 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");