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>
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>
61 static u32 l2cap_feat_mask
= L2CAP_FEAT_FIXED_CHAN
;
62 static u8 l2cap_fixed_chan
[8] = { 0x02, };
64 static struct workqueue_struct
*_busy_wq
;
66 static LIST_HEAD(chan_list
);
67 static DEFINE_RWLOCK(chan_list_lock
);
69 static void l2cap_busy_work(struct work_struct
*work
);
71 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
72 u8 code
, u8 ident
, u16 dlen
, void *data
);
73 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
,
75 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
);
76 static void l2cap_send_disconn_req(struct l2cap_conn
*conn
,
77 struct l2cap_chan
*chan
, int err
);
79 static int l2cap_ertm_data_rcv(struct sock
*sk
, struct sk_buff
*skb
);
81 /* ---- L2CAP channels ---- */
83 static inline void chan_hold(struct l2cap_chan
*c
)
85 atomic_inc(&c
->refcnt
);
88 static inline void chan_put(struct l2cap_chan
*c
)
90 if (atomic_dec_and_test(&c
->refcnt
))
94 static struct l2cap_chan
*__l2cap_get_chan_by_dcid(struct l2cap_conn
*conn
, u16 cid
)
98 list_for_each_entry(c
, &conn
->chan_l
, list
) {
106 static struct l2cap_chan
*__l2cap_get_chan_by_scid(struct l2cap_conn
*conn
, u16 cid
)
108 struct l2cap_chan
*c
;
110 list_for_each_entry(c
, &conn
->chan_l
, list
) {
117 /* Find channel with given SCID.
118 * Returns locked socket */
119 static struct l2cap_chan
*l2cap_get_chan_by_scid(struct l2cap_conn
*conn
, u16 cid
)
121 struct l2cap_chan
*c
;
123 read_lock(&conn
->chan_lock
);
124 c
= __l2cap_get_chan_by_scid(conn
, cid
);
127 read_unlock(&conn
->chan_lock
);
131 static struct l2cap_chan
*__l2cap_get_chan_by_ident(struct l2cap_conn
*conn
, u8 ident
)
133 struct l2cap_chan
*c
;
135 list_for_each_entry(c
, &conn
->chan_l
, list
) {
136 if (c
->ident
== ident
)
142 static inline struct l2cap_chan
*l2cap_get_chan_by_ident(struct l2cap_conn
*conn
, u8 ident
)
144 struct l2cap_chan
*c
;
146 read_lock(&conn
->chan_lock
);
147 c
= __l2cap_get_chan_by_ident(conn
, ident
);
150 read_unlock(&conn
->chan_lock
);
154 static struct l2cap_chan
*__l2cap_global_chan_by_addr(__le16 psm
, bdaddr_t
*src
)
156 struct l2cap_chan
*c
;
158 list_for_each_entry(c
, &chan_list
, global_l
) {
159 if (c
->sport
== psm
&& !bacmp(&bt_sk(c
->sk
)->src
, src
))
168 int l2cap_add_psm(struct l2cap_chan
*chan
, bdaddr_t
*src
, __le16 psm
)
172 write_lock_bh(&chan_list_lock
);
174 if (psm
&& __l2cap_global_chan_by_addr(psm
, src
)) {
187 for (p
= 0x1001; p
< 0x1100; p
+= 2)
188 if (!__l2cap_global_chan_by_addr(cpu_to_le16(p
), src
)) {
189 chan
->psm
= cpu_to_le16(p
);
190 chan
->sport
= cpu_to_le16(p
);
197 write_unlock_bh(&chan_list_lock
);
201 int l2cap_add_scid(struct l2cap_chan
*chan
, __u16 scid
)
203 write_lock_bh(&chan_list_lock
);
207 write_unlock_bh(&chan_list_lock
);
212 static u16
l2cap_alloc_cid(struct l2cap_conn
*conn
)
214 u16 cid
= L2CAP_CID_DYN_START
;
216 for (; cid
< L2CAP_CID_DYN_END
; cid
++) {
217 if (!__l2cap_get_chan_by_scid(conn
, cid
))
224 static void l2cap_set_timer(struct l2cap_chan
*chan
, struct timer_list
*timer
, long timeout
)
226 BT_DBG("chan %p state %d timeout %ld", chan
->sk
, chan
->state
, timeout
);
228 if (!mod_timer(timer
, jiffies
+ timeout
))
232 static void l2cap_clear_timer(struct l2cap_chan
*chan
, struct timer_list
*timer
)
234 BT_DBG("chan %p state %d", chan
, chan
->state
);
236 if (timer_pending(timer
) && del_timer(timer
))
240 static void l2cap_state_change(struct l2cap_chan
*chan
, int state
)
243 chan
->ops
->state_change(chan
->data
, state
);
246 static void l2cap_chan_timeout(unsigned long arg
)
248 struct l2cap_chan
*chan
= (struct l2cap_chan
*) arg
;
249 struct sock
*sk
= chan
->sk
;
252 BT_DBG("chan %p state %d", chan
, chan
->state
);
256 if (sock_owned_by_user(sk
)) {
257 /* sk is owned by user. Try again later */
258 __set_chan_timer(chan
, HZ
/ 5);
264 if (chan
->state
== BT_CONNECTED
|| chan
->state
== BT_CONFIG
)
265 reason
= ECONNREFUSED
;
266 else if (chan
->state
== BT_CONNECT
&&
267 chan
->sec_level
!= BT_SECURITY_SDP
)
268 reason
= ECONNREFUSED
;
272 l2cap_chan_close(chan
, reason
);
276 chan
->ops
->close(chan
->data
);
280 struct l2cap_chan
*l2cap_chan_create(struct sock
*sk
)
282 struct l2cap_chan
*chan
;
284 chan
= kzalloc(sizeof(*chan
), GFP_ATOMIC
);
290 write_lock_bh(&chan_list_lock
);
291 list_add(&chan
->global_l
, &chan_list
);
292 write_unlock_bh(&chan_list_lock
);
294 setup_timer(&chan
->chan_timer
, l2cap_chan_timeout
, (unsigned long) chan
);
296 chan
->state
= BT_OPEN
;
298 atomic_set(&chan
->refcnt
, 1);
303 void l2cap_chan_destroy(struct l2cap_chan
*chan
)
305 write_lock_bh(&chan_list_lock
);
306 list_del(&chan
->global_l
);
307 write_unlock_bh(&chan_list_lock
);
312 static void __l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
314 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn
,
315 chan
->psm
, chan
->dcid
);
317 conn
->disc_reason
= 0x13;
321 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
) {
322 if (conn
->hcon
->type
== LE_LINK
) {
324 chan
->omtu
= L2CAP_LE_DEFAULT_MTU
;
325 chan
->scid
= L2CAP_CID_LE_DATA
;
326 chan
->dcid
= L2CAP_CID_LE_DATA
;
328 /* Alloc CID for connection-oriented socket */
329 chan
->scid
= l2cap_alloc_cid(conn
);
330 chan
->omtu
= L2CAP_DEFAULT_MTU
;
332 } else if (chan
->chan_type
== L2CAP_CHAN_CONN_LESS
) {
333 /* Connectionless socket */
334 chan
->scid
= L2CAP_CID_CONN_LESS
;
335 chan
->dcid
= L2CAP_CID_CONN_LESS
;
336 chan
->omtu
= L2CAP_DEFAULT_MTU
;
338 /* Raw socket can send/recv signalling messages only */
339 chan
->scid
= L2CAP_CID_SIGNALING
;
340 chan
->dcid
= L2CAP_CID_SIGNALING
;
341 chan
->omtu
= L2CAP_DEFAULT_MTU
;
346 list_add(&chan
->list
, &conn
->chan_l
);
350 * Must be called on the locked socket. */
351 static void l2cap_chan_del(struct l2cap_chan
*chan
, int err
)
353 struct sock
*sk
= chan
->sk
;
354 struct l2cap_conn
*conn
= chan
->conn
;
355 struct sock
*parent
= bt_sk(sk
)->parent
;
357 __clear_chan_timer(chan
);
359 BT_DBG("chan %p, conn %p, err %d", chan
, conn
, err
);
362 /* Delete from channel list */
363 write_lock_bh(&conn
->chan_lock
);
364 list_del(&chan
->list
);
365 write_unlock_bh(&conn
->chan_lock
);
369 hci_conn_put(conn
->hcon
);
372 l2cap_state_change(chan
, BT_CLOSED
);
373 sock_set_flag(sk
, SOCK_ZAPPED
);
379 bt_accept_unlink(sk
);
380 parent
->sk_data_ready(parent
, 0);
382 sk
->sk_state_change(sk
);
384 if (!(chan
->conf_state
& L2CAP_CONF_OUTPUT_DONE
&&
385 chan
->conf_state
& L2CAP_CONF_INPUT_DONE
))
388 skb_queue_purge(&chan
->tx_q
);
390 if (chan
->mode
== L2CAP_MODE_ERTM
) {
391 struct srej_list
*l
, *tmp
;
393 __clear_retrans_timer(chan
);
394 __clear_monitor_timer(chan
);
395 __clear_ack_timer(chan
);
397 skb_queue_purge(&chan
->srej_q
);
398 skb_queue_purge(&chan
->busy_q
);
400 list_for_each_entry_safe(l
, tmp
, &chan
->srej_l
, list
) {
407 static void l2cap_chan_cleanup_listen(struct sock
*parent
)
411 BT_DBG("parent %p", parent
);
413 /* Close not yet accepted channels */
414 while ((sk
= bt_accept_dequeue(parent
, NULL
))) {
415 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
416 __clear_chan_timer(chan
);
418 l2cap_chan_close(chan
, ECONNRESET
);
420 chan
->ops
->close(chan
->data
);
424 void l2cap_chan_close(struct l2cap_chan
*chan
, int reason
)
426 struct l2cap_conn
*conn
= chan
->conn
;
427 struct sock
*sk
= chan
->sk
;
429 BT_DBG("chan %p state %d socket %p", chan
, chan
->state
, sk
->sk_socket
);
431 switch (chan
->state
) {
433 l2cap_chan_cleanup_listen(sk
);
435 l2cap_state_change(chan
, BT_CLOSED
);
436 sock_set_flag(sk
, SOCK_ZAPPED
);
441 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
442 conn
->hcon
->type
== ACL_LINK
) {
443 __clear_chan_timer(chan
);
444 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
445 l2cap_send_disconn_req(conn
, chan
, reason
);
447 l2cap_chan_del(chan
, reason
);
451 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
452 conn
->hcon
->type
== ACL_LINK
) {
453 struct l2cap_conn_rsp rsp
;
456 if (bt_sk(sk
)->defer_setup
)
457 result
= L2CAP_CR_SEC_BLOCK
;
459 result
= L2CAP_CR_BAD_PSM
;
460 l2cap_state_change(chan
, BT_DISCONN
);
462 rsp
.scid
= cpu_to_le16(chan
->dcid
);
463 rsp
.dcid
= cpu_to_le16(chan
->scid
);
464 rsp
.result
= cpu_to_le16(result
);
465 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
466 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
470 l2cap_chan_del(chan
, reason
);
475 l2cap_chan_del(chan
, reason
);
479 sock_set_flag(sk
, SOCK_ZAPPED
);
484 static inline u8
l2cap_get_auth_type(struct l2cap_chan
*chan
)
486 if (chan
->chan_type
== L2CAP_CHAN_RAW
) {
487 switch (chan
->sec_level
) {
488 case BT_SECURITY_HIGH
:
489 return HCI_AT_DEDICATED_BONDING_MITM
;
490 case BT_SECURITY_MEDIUM
:
491 return HCI_AT_DEDICATED_BONDING
;
493 return HCI_AT_NO_BONDING
;
495 } else if (chan
->psm
== cpu_to_le16(0x0001)) {
496 if (chan
->sec_level
== BT_SECURITY_LOW
)
497 chan
->sec_level
= BT_SECURITY_SDP
;
499 if (chan
->sec_level
== BT_SECURITY_HIGH
)
500 return HCI_AT_NO_BONDING_MITM
;
502 return HCI_AT_NO_BONDING
;
504 switch (chan
->sec_level
) {
505 case BT_SECURITY_HIGH
:
506 return HCI_AT_GENERAL_BONDING_MITM
;
507 case BT_SECURITY_MEDIUM
:
508 return HCI_AT_GENERAL_BONDING
;
510 return HCI_AT_NO_BONDING
;
515 /* Service level security */
516 static inline int l2cap_check_security(struct l2cap_chan
*chan
)
518 struct l2cap_conn
*conn
= chan
->conn
;
521 auth_type
= l2cap_get_auth_type(chan
);
523 return hci_conn_security(conn
->hcon
, chan
->sec_level
, auth_type
);
526 static u8
l2cap_get_ident(struct l2cap_conn
*conn
)
530 /* Get next available identificator.
531 * 1 - 128 are used by kernel.
532 * 129 - 199 are reserved.
533 * 200 - 254 are used by utilities like l2ping, etc.
536 spin_lock_bh(&conn
->lock
);
538 if (++conn
->tx_ident
> 128)
543 spin_unlock_bh(&conn
->lock
);
548 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
, void *data
)
550 struct sk_buff
*skb
= l2cap_build_cmd(conn
, code
, ident
, len
, data
);
553 BT_DBG("code 0x%2.2x", code
);
558 if (lmp_no_flush_capable(conn
->hcon
->hdev
))
559 flags
= ACL_START_NO_FLUSH
;
563 bt_cb(skb
)->force_active
= BT_POWER_FORCE_ACTIVE_ON
;
565 hci_send_acl(conn
->hcon
, skb
, flags
);
568 static inline void l2cap_send_sframe(struct l2cap_chan
*chan
, u16 control
)
571 struct l2cap_hdr
*lh
;
572 struct l2cap_conn
*conn
= chan
->conn
;
573 int count
, hlen
= L2CAP_HDR_SIZE
+ 2;
576 if (chan
->state
!= BT_CONNECTED
)
579 if (chan
->fcs
== L2CAP_FCS_CRC16
)
582 BT_DBG("chan %p, control 0x%2.2x", chan
, control
);
584 count
= min_t(unsigned int, conn
->mtu
, hlen
);
585 control
|= L2CAP_CTRL_FRAME_TYPE
;
587 if (chan
->conn_state
& L2CAP_CONN_SEND_FBIT
) {
588 control
|= L2CAP_CTRL_FINAL
;
589 chan
->conn_state
&= ~L2CAP_CONN_SEND_FBIT
;
592 if (chan
->conn_state
& L2CAP_CONN_SEND_PBIT
) {
593 control
|= L2CAP_CTRL_POLL
;
594 chan
->conn_state
&= ~L2CAP_CONN_SEND_PBIT
;
597 skb
= bt_skb_alloc(count
, GFP_ATOMIC
);
601 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
602 lh
->len
= cpu_to_le16(hlen
- L2CAP_HDR_SIZE
);
603 lh
->cid
= cpu_to_le16(chan
->dcid
);
604 put_unaligned_le16(control
, skb_put(skb
, 2));
606 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
607 u16 fcs
= crc16(0, (u8
*)lh
, count
- 2);
608 put_unaligned_le16(fcs
, skb_put(skb
, 2));
611 if (lmp_no_flush_capable(conn
->hcon
->hdev
))
612 flags
= ACL_START_NO_FLUSH
;
616 bt_cb(skb
)->force_active
= chan
->force_active
;
618 hci_send_acl(chan
->conn
->hcon
, skb
, flags
);
621 static inline void l2cap_send_rr_or_rnr(struct l2cap_chan
*chan
, u16 control
)
623 if (chan
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
624 control
|= L2CAP_SUPER_RCV_NOT_READY
;
625 chan
->conn_state
|= L2CAP_CONN_RNR_SENT
;
627 control
|= L2CAP_SUPER_RCV_READY
;
629 control
|= chan
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
631 l2cap_send_sframe(chan
, control
);
634 static inline int __l2cap_no_conn_pending(struct l2cap_chan
*chan
)
636 return !(chan
->conf_state
& L2CAP_CONF_CONNECT_PEND
);
639 static void l2cap_do_start(struct l2cap_chan
*chan
)
641 struct l2cap_conn
*conn
= chan
->conn
;
643 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) {
644 if (!(conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
))
647 if (l2cap_check_security(chan
) &&
648 __l2cap_no_conn_pending(chan
)) {
649 struct l2cap_conn_req req
;
650 req
.scid
= cpu_to_le16(chan
->scid
);
653 chan
->ident
= l2cap_get_ident(conn
);
654 chan
->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
656 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_REQ
,
660 struct l2cap_info_req req
;
661 req
.type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
663 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
664 conn
->info_ident
= l2cap_get_ident(conn
);
666 mod_timer(&conn
->info_timer
, jiffies
+
667 msecs_to_jiffies(L2CAP_INFO_TIMEOUT
));
669 l2cap_send_cmd(conn
, conn
->info_ident
,
670 L2CAP_INFO_REQ
, sizeof(req
), &req
);
674 static inline int l2cap_mode_supported(__u8 mode
, __u32 feat_mask
)
676 u32 local_feat_mask
= l2cap_feat_mask
;
678 local_feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
;
681 case L2CAP_MODE_ERTM
:
682 return L2CAP_FEAT_ERTM
& feat_mask
& local_feat_mask
;
683 case L2CAP_MODE_STREAMING
:
684 return L2CAP_FEAT_STREAMING
& feat_mask
& local_feat_mask
;
690 static void l2cap_send_disconn_req(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
, int err
)
693 struct l2cap_disconn_req req
;
700 if (chan
->mode
== L2CAP_MODE_ERTM
) {
701 __clear_retrans_timer(chan
);
702 __clear_monitor_timer(chan
);
703 __clear_ack_timer(chan
);
706 req
.dcid
= cpu_to_le16(chan
->dcid
);
707 req
.scid
= cpu_to_le16(chan
->scid
);
708 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
709 L2CAP_DISCONN_REQ
, sizeof(req
), &req
);
711 l2cap_state_change(chan
, BT_DISCONN
);
715 /* ---- L2CAP connections ---- */
716 static void l2cap_conn_start(struct l2cap_conn
*conn
)
718 struct l2cap_chan
*chan
, *tmp
;
720 BT_DBG("conn %p", conn
);
722 read_lock(&conn
->chan_lock
);
724 list_for_each_entry_safe(chan
, tmp
, &conn
->chan_l
, list
) {
725 struct sock
*sk
= chan
->sk
;
729 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
734 if (chan
->state
== BT_CONNECT
) {
735 struct l2cap_conn_req req
;
737 if (!l2cap_check_security(chan
) ||
738 !__l2cap_no_conn_pending(chan
)) {
743 if (!l2cap_mode_supported(chan
->mode
,
745 && chan
->conf_state
&
746 L2CAP_CONF_STATE2_DEVICE
) {
747 /* l2cap_chan_close() calls list_del(chan)
748 * so release the lock */
749 read_unlock_bh(&conn
->chan_lock
);
750 l2cap_chan_close(chan
, ECONNRESET
);
751 read_lock_bh(&conn
->chan_lock
);
756 req
.scid
= cpu_to_le16(chan
->scid
);
759 chan
->ident
= l2cap_get_ident(conn
);
760 chan
->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
762 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_REQ
,
765 } else if (chan
->state
== BT_CONNECT2
) {
766 struct l2cap_conn_rsp rsp
;
768 rsp
.scid
= cpu_to_le16(chan
->dcid
);
769 rsp
.dcid
= cpu_to_le16(chan
->scid
);
771 if (l2cap_check_security(chan
)) {
772 if (bt_sk(sk
)->defer_setup
) {
773 struct sock
*parent
= bt_sk(sk
)->parent
;
774 rsp
.result
= cpu_to_le16(L2CAP_CR_PEND
);
775 rsp
.status
= cpu_to_le16(L2CAP_CS_AUTHOR_PEND
);
776 parent
->sk_data_ready(parent
, 0);
779 l2cap_state_change(chan
, BT_CONFIG
);
780 rsp
.result
= cpu_to_le16(L2CAP_CR_SUCCESS
);
781 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
784 rsp
.result
= cpu_to_le16(L2CAP_CR_PEND
);
785 rsp
.status
= cpu_to_le16(L2CAP_CS_AUTHEN_PEND
);
788 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
791 if (chan
->conf_state
& L2CAP_CONF_REQ_SENT
||
792 rsp
.result
!= L2CAP_CR_SUCCESS
) {
797 chan
->conf_state
|= L2CAP_CONF_REQ_SENT
;
798 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
799 l2cap_build_conf_req(chan
, buf
), buf
);
800 chan
->num_conf_req
++;
806 read_unlock(&conn
->chan_lock
);
809 /* Find socket with cid and source bdaddr.
810 * Returns closest match, locked.
812 static struct l2cap_chan
*l2cap_global_chan_by_scid(int state
, __le16 cid
, bdaddr_t
*src
)
814 struct l2cap_chan
*c
, *c1
= NULL
;
816 read_lock(&chan_list_lock
);
818 list_for_each_entry(c
, &chan_list
, global_l
) {
819 struct sock
*sk
= c
->sk
;
821 if (state
&& c
->state
!= state
)
824 if (c
->scid
== cid
) {
826 if (!bacmp(&bt_sk(sk
)->src
, src
)) {
827 read_unlock(&chan_list_lock
);
832 if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
))
837 read_unlock(&chan_list_lock
);
842 static void l2cap_le_conn_ready(struct l2cap_conn
*conn
)
844 struct sock
*parent
, *sk
;
845 struct l2cap_chan
*chan
, *pchan
;
849 /* Check if we have socket listening on cid */
850 pchan
= l2cap_global_chan_by_scid(BT_LISTEN
, L2CAP_CID_LE_DATA
,
857 bh_lock_sock(parent
);
859 /* Check for backlog size */
860 if (sk_acceptq_is_full(parent
)) {
861 BT_DBG("backlog full %d", parent
->sk_ack_backlog
);
865 chan
= pchan
->ops
->new_connection(pchan
->data
);
871 write_lock_bh(&conn
->chan_lock
);
873 hci_conn_hold(conn
->hcon
);
875 bacpy(&bt_sk(sk
)->src
, conn
->src
);
876 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
878 bt_accept_enqueue(parent
, sk
);
880 __l2cap_chan_add(conn
, chan
);
882 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
884 l2cap_state_change(chan
, BT_CONNECTED
);
885 parent
->sk_data_ready(parent
, 0);
887 write_unlock_bh(&conn
->chan_lock
);
890 bh_unlock_sock(parent
);
893 static void l2cap_conn_ready(struct l2cap_conn
*conn
)
895 struct l2cap_chan
*chan
;
897 BT_DBG("conn %p", conn
);
899 if (!conn
->hcon
->out
&& conn
->hcon
->type
== LE_LINK
)
900 l2cap_le_conn_ready(conn
);
902 read_lock(&conn
->chan_lock
);
904 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
905 struct sock
*sk
= chan
->sk
;
909 if (conn
->hcon
->type
== LE_LINK
) {
910 __clear_chan_timer(chan
);
911 l2cap_state_change(chan
, BT_CONNECTED
);
912 sk
->sk_state_change(sk
);
913 if (smp_conn_security(conn
, chan
->sec_level
))
914 BT_DBG("Insufficient security");
917 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
918 __clear_chan_timer(chan
);
919 l2cap_state_change(chan
, BT_CONNECTED
);
920 sk
->sk_state_change(sk
);
922 } else if (chan
->state
== BT_CONNECT
)
923 l2cap_do_start(chan
);
928 read_unlock(&conn
->chan_lock
);
931 /* Notify sockets that we cannot guaranty reliability anymore */
932 static void l2cap_conn_unreliable(struct l2cap_conn
*conn
, int err
)
934 struct l2cap_chan
*chan
;
936 BT_DBG("conn %p", conn
);
938 read_lock(&conn
->chan_lock
);
940 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
941 struct sock
*sk
= chan
->sk
;
943 if (chan
->force_reliable
)
947 read_unlock(&conn
->chan_lock
);
950 static void l2cap_info_timeout(unsigned long arg
)
952 struct l2cap_conn
*conn
= (void *) arg
;
954 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
955 conn
->info_ident
= 0;
957 l2cap_conn_start(conn
);
960 static struct l2cap_conn
*l2cap_conn_add(struct hci_conn
*hcon
, u8 status
)
962 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
967 conn
= kzalloc(sizeof(struct l2cap_conn
), GFP_ATOMIC
);
971 hcon
->l2cap_data
= conn
;
974 BT_DBG("hcon %p conn %p", hcon
, conn
);
976 if (hcon
->hdev
->le_mtu
&& hcon
->type
== LE_LINK
)
977 conn
->mtu
= hcon
->hdev
->le_mtu
;
979 conn
->mtu
= hcon
->hdev
->acl_mtu
;
981 conn
->src
= &hcon
->hdev
->bdaddr
;
982 conn
->dst
= &hcon
->dst
;
986 spin_lock_init(&conn
->lock
);
987 rwlock_init(&conn
->chan_lock
);
989 INIT_LIST_HEAD(&conn
->chan_l
);
991 if (hcon
->type
!= LE_LINK
)
992 setup_timer(&conn
->info_timer
, l2cap_info_timeout
,
993 (unsigned long) conn
);
995 conn
->disc_reason
= 0x13;
1000 static void l2cap_conn_del(struct hci_conn
*hcon
, int err
)
1002 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1003 struct l2cap_chan
*chan
, *l
;
1009 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
1011 kfree_skb(conn
->rx_skb
);
1014 list_for_each_entry_safe(chan
, l
, &conn
->chan_l
, list
) {
1017 l2cap_chan_del(chan
, err
);
1019 chan
->ops
->close(chan
->data
);
1022 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
)
1023 del_timer_sync(&conn
->info_timer
);
1025 hcon
->l2cap_data
= NULL
;
1029 static inline void l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
1031 write_lock_bh(&conn
->chan_lock
);
1032 __l2cap_chan_add(conn
, chan
);
1033 write_unlock_bh(&conn
->chan_lock
);
1036 /* ---- Socket interface ---- */
1038 /* Find socket with psm and source bdaddr.
1039 * Returns closest match.
1041 static struct l2cap_chan
*l2cap_global_chan_by_psm(int state
, __le16 psm
, bdaddr_t
*src
)
1043 struct l2cap_chan
*c
, *c1
= NULL
;
1045 read_lock(&chan_list_lock
);
1047 list_for_each_entry(c
, &chan_list
, global_l
) {
1048 struct sock
*sk
= c
->sk
;
1050 if (state
&& c
->state
!= state
)
1053 if (c
->psm
== psm
) {
1055 if (!bacmp(&bt_sk(sk
)->src
, src
)) {
1056 read_unlock(&chan_list_lock
);
1061 if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
))
1066 read_unlock(&chan_list_lock
);
1071 int l2cap_chan_connect(struct l2cap_chan
*chan
)
1073 struct sock
*sk
= chan
->sk
;
1074 bdaddr_t
*src
= &bt_sk(sk
)->src
;
1075 bdaddr_t
*dst
= &bt_sk(sk
)->dst
;
1076 struct l2cap_conn
*conn
;
1077 struct hci_conn
*hcon
;
1078 struct hci_dev
*hdev
;
1082 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src
), batostr(dst
),
1085 hdev
= hci_get_route(dst
, src
);
1087 return -EHOSTUNREACH
;
1089 hci_dev_lock_bh(hdev
);
1091 auth_type
= l2cap_get_auth_type(chan
);
1093 if (chan
->dcid
== L2CAP_CID_LE_DATA
)
1094 hcon
= hci_connect(hdev
, LE_LINK
, dst
,
1095 chan
->sec_level
, auth_type
);
1097 hcon
= hci_connect(hdev
, ACL_LINK
, dst
,
1098 chan
->sec_level
, auth_type
);
1101 err
= PTR_ERR(hcon
);
1105 conn
= l2cap_conn_add(hcon
, 0);
1112 /* Update source addr of the socket */
1113 bacpy(src
, conn
->src
);
1115 l2cap_chan_add(conn
, chan
);
1117 l2cap_state_change(chan
, BT_CONNECT
);
1118 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
1120 if (hcon
->state
== BT_CONNECTED
) {
1121 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1122 __clear_chan_timer(chan
);
1123 if (l2cap_check_security(chan
))
1124 l2cap_state_change(chan
, BT_CONNECTED
);
1126 l2cap_do_start(chan
);
1132 hci_dev_unlock_bh(hdev
);
1137 int __l2cap_wait_ack(struct sock
*sk
)
1139 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
1140 DECLARE_WAITQUEUE(wait
, current
);
1144 add_wait_queue(sk_sleep(sk
), &wait
);
1145 while ((chan
->unacked_frames
> 0 && chan
->conn
)) {
1146 set_current_state(TASK_INTERRUPTIBLE
);
1151 if (signal_pending(current
)) {
1152 err
= sock_intr_errno(timeo
);
1157 timeo
= schedule_timeout(timeo
);
1160 err
= sock_error(sk
);
1164 set_current_state(TASK_RUNNING
);
1165 remove_wait_queue(sk_sleep(sk
), &wait
);
1169 static void l2cap_monitor_timeout(unsigned long arg
)
1171 struct l2cap_chan
*chan
= (void *) arg
;
1172 struct sock
*sk
= chan
->sk
;
1174 BT_DBG("chan %p", chan
);
1177 if (chan
->retry_count
>= chan
->remote_max_tx
) {
1178 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNABORTED
);
1183 chan
->retry_count
++;
1184 __set_monitor_timer(chan
);
1186 l2cap_send_rr_or_rnr(chan
, L2CAP_CTRL_POLL
);
1190 static void l2cap_retrans_timeout(unsigned long arg
)
1192 struct l2cap_chan
*chan
= (void *) arg
;
1193 struct sock
*sk
= chan
->sk
;
1195 BT_DBG("chan %p", chan
);
1198 chan
->retry_count
= 1;
1199 __set_monitor_timer(chan
);
1201 chan
->conn_state
|= L2CAP_CONN_WAIT_F
;
1203 l2cap_send_rr_or_rnr(chan
, L2CAP_CTRL_POLL
);
1207 static void l2cap_drop_acked_frames(struct l2cap_chan
*chan
)
1209 struct sk_buff
*skb
;
1211 while ((skb
= skb_peek(&chan
->tx_q
)) &&
1212 chan
->unacked_frames
) {
1213 if (bt_cb(skb
)->tx_seq
== chan
->expected_ack_seq
)
1216 skb
= skb_dequeue(&chan
->tx_q
);
1219 chan
->unacked_frames
--;
1222 if (!chan
->unacked_frames
)
1223 __clear_retrans_timer(chan
);
1226 void l2cap_do_send(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
1228 struct hci_conn
*hcon
= chan
->conn
->hcon
;
1231 BT_DBG("chan %p, skb %p len %d", chan
, skb
, skb
->len
);
1233 if (!chan
->flushable
&& lmp_no_flush_capable(hcon
->hdev
))
1234 flags
= ACL_START_NO_FLUSH
;
1238 bt_cb(skb
)->force_active
= chan
->force_active
;
1239 hci_send_acl(hcon
, skb
, flags
);
1242 void l2cap_streaming_send(struct l2cap_chan
*chan
)
1244 struct sk_buff
*skb
;
1247 while ((skb
= skb_dequeue(&chan
->tx_q
))) {
1248 control
= get_unaligned_le16(skb
->data
+ L2CAP_HDR_SIZE
);
1249 control
|= chan
->next_tx_seq
<< L2CAP_CTRL_TXSEQ_SHIFT
;
1250 put_unaligned_le16(control
, skb
->data
+ L2CAP_HDR_SIZE
);
1252 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1253 fcs
= crc16(0, (u8
*)skb
->data
, skb
->len
- 2);
1254 put_unaligned_le16(fcs
, skb
->data
+ skb
->len
- 2);
1257 l2cap_do_send(chan
, skb
);
1259 chan
->next_tx_seq
= (chan
->next_tx_seq
+ 1) % 64;
1263 static void l2cap_retransmit_one_frame(struct l2cap_chan
*chan
, u8 tx_seq
)
1265 struct sk_buff
*skb
, *tx_skb
;
1268 skb
= skb_peek(&chan
->tx_q
);
1273 if (bt_cb(skb
)->tx_seq
== tx_seq
)
1276 if (skb_queue_is_last(&chan
->tx_q
, skb
))
1279 } while ((skb
= skb_queue_next(&chan
->tx_q
, skb
)));
1281 if (chan
->remote_max_tx
&&
1282 bt_cb(skb
)->retries
== chan
->remote_max_tx
) {
1283 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNABORTED
);
1287 tx_skb
= skb_clone(skb
, GFP_ATOMIC
);
1288 bt_cb(skb
)->retries
++;
1289 control
= get_unaligned_le16(tx_skb
->data
+ L2CAP_HDR_SIZE
);
1290 control
&= L2CAP_CTRL_SAR
;
1292 if (chan
->conn_state
& L2CAP_CONN_SEND_FBIT
) {
1293 control
|= L2CAP_CTRL_FINAL
;
1294 chan
->conn_state
&= ~L2CAP_CONN_SEND_FBIT
;
1297 control
|= (chan
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
)
1298 | (tx_seq
<< L2CAP_CTRL_TXSEQ_SHIFT
);
1300 put_unaligned_le16(control
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1302 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1303 fcs
= crc16(0, (u8
*)tx_skb
->data
, tx_skb
->len
- 2);
1304 put_unaligned_le16(fcs
, tx_skb
->data
+ tx_skb
->len
- 2);
1307 l2cap_do_send(chan
, tx_skb
);
1310 int l2cap_ertm_send(struct l2cap_chan
*chan
)
1312 struct sk_buff
*skb
, *tx_skb
;
1316 if (chan
->state
!= BT_CONNECTED
)
1319 while ((skb
= chan
->tx_send_head
) && (!l2cap_tx_window_full(chan
))) {
1321 if (chan
->remote_max_tx
&&
1322 bt_cb(skb
)->retries
== chan
->remote_max_tx
) {
1323 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNABORTED
);
1327 tx_skb
= skb_clone(skb
, GFP_ATOMIC
);
1329 bt_cb(skb
)->retries
++;
1331 control
= get_unaligned_le16(tx_skb
->data
+ L2CAP_HDR_SIZE
);
1332 control
&= L2CAP_CTRL_SAR
;
1334 if (chan
->conn_state
& L2CAP_CONN_SEND_FBIT
) {
1335 control
|= L2CAP_CTRL_FINAL
;
1336 chan
->conn_state
&= ~L2CAP_CONN_SEND_FBIT
;
1338 control
|= (chan
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
)
1339 | (chan
->next_tx_seq
<< L2CAP_CTRL_TXSEQ_SHIFT
);
1340 put_unaligned_le16(control
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1343 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1344 fcs
= crc16(0, (u8
*)skb
->data
, tx_skb
->len
- 2);
1345 put_unaligned_le16(fcs
, skb
->data
+ tx_skb
->len
- 2);
1348 l2cap_do_send(chan
, tx_skb
);
1350 __set_retrans_timer(chan
);
1352 bt_cb(skb
)->tx_seq
= chan
->next_tx_seq
;
1353 chan
->next_tx_seq
= (chan
->next_tx_seq
+ 1) % 64;
1355 if (bt_cb(skb
)->retries
== 1)
1356 chan
->unacked_frames
++;
1358 chan
->frames_sent
++;
1360 if (skb_queue_is_last(&chan
->tx_q
, skb
))
1361 chan
->tx_send_head
= NULL
;
1363 chan
->tx_send_head
= skb_queue_next(&chan
->tx_q
, skb
);
1371 static int l2cap_retransmit_frames(struct l2cap_chan
*chan
)
1375 if (!skb_queue_empty(&chan
->tx_q
))
1376 chan
->tx_send_head
= chan
->tx_q
.next
;
1378 chan
->next_tx_seq
= chan
->expected_ack_seq
;
1379 ret
= l2cap_ertm_send(chan
);
1383 static void l2cap_send_ack(struct l2cap_chan
*chan
)
1387 control
|= chan
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
1389 if (chan
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
1390 control
|= L2CAP_SUPER_RCV_NOT_READY
;
1391 chan
->conn_state
|= L2CAP_CONN_RNR_SENT
;
1392 l2cap_send_sframe(chan
, control
);
1396 if (l2cap_ertm_send(chan
) > 0)
1399 control
|= L2CAP_SUPER_RCV_READY
;
1400 l2cap_send_sframe(chan
, control
);
1403 static void l2cap_send_srejtail(struct l2cap_chan
*chan
)
1405 struct srej_list
*tail
;
1408 control
= L2CAP_SUPER_SELECT_REJECT
;
1409 control
|= L2CAP_CTRL_FINAL
;
1411 tail
= list_entry((&chan
->srej_l
)->prev
, struct srej_list
, list
);
1412 control
|= tail
->tx_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
1414 l2cap_send_sframe(chan
, control
);
1417 static inline int l2cap_skbuff_fromiovec(struct sock
*sk
, struct msghdr
*msg
, int len
, int count
, struct sk_buff
*skb
)
1419 struct l2cap_conn
*conn
= l2cap_pi(sk
)->chan
->conn
;
1420 struct sk_buff
**frag
;
1423 if (memcpy_fromiovec(skb_put(skb
, count
), msg
->msg_iov
, count
))
1429 /* Continuation fragments (no L2CAP header) */
1430 frag
= &skb_shinfo(skb
)->frag_list
;
1432 count
= min_t(unsigned int, conn
->mtu
, len
);
1434 *frag
= bt_skb_send_alloc(sk
, count
, msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1437 if (memcpy_fromiovec(skb_put(*frag
, count
), msg
->msg_iov
, count
))
1443 frag
= &(*frag
)->next
;
1449 struct sk_buff
*l2cap_create_connless_pdu(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
)
1451 struct sock
*sk
= chan
->sk
;
1452 struct l2cap_conn
*conn
= chan
->conn
;
1453 struct sk_buff
*skb
;
1454 int err
, count
, hlen
= L2CAP_HDR_SIZE
+ 2;
1455 struct l2cap_hdr
*lh
;
1457 BT_DBG("sk %p len %d", sk
, (int)len
);
1459 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1460 skb
= bt_skb_send_alloc(sk
, count
+ hlen
,
1461 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1463 return ERR_PTR(err
);
1465 /* Create L2CAP header */
1466 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1467 lh
->cid
= cpu_to_le16(chan
->dcid
);
1468 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1469 put_unaligned_le16(chan
->psm
, skb_put(skb
, 2));
1471 err
= l2cap_skbuff_fromiovec(sk
, msg
, len
, count
, skb
);
1472 if (unlikely(err
< 0)) {
1474 return ERR_PTR(err
);
1479 struct sk_buff
*l2cap_create_basic_pdu(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
)
1481 struct sock
*sk
= chan
->sk
;
1482 struct l2cap_conn
*conn
= chan
->conn
;
1483 struct sk_buff
*skb
;
1484 int err
, count
, hlen
= L2CAP_HDR_SIZE
;
1485 struct l2cap_hdr
*lh
;
1487 BT_DBG("sk %p len %d", sk
, (int)len
);
1489 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1490 skb
= bt_skb_send_alloc(sk
, count
+ hlen
,
1491 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1493 return ERR_PTR(err
);
1495 /* Create L2CAP header */
1496 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1497 lh
->cid
= cpu_to_le16(chan
->dcid
);
1498 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1500 err
= l2cap_skbuff_fromiovec(sk
, msg
, len
, count
, skb
);
1501 if (unlikely(err
< 0)) {
1503 return ERR_PTR(err
);
1508 struct sk_buff
*l2cap_create_iframe_pdu(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
, u16 control
, u16 sdulen
)
1510 struct sock
*sk
= chan
->sk
;
1511 struct l2cap_conn
*conn
= chan
->conn
;
1512 struct sk_buff
*skb
;
1513 int err
, count
, hlen
= L2CAP_HDR_SIZE
+ 2;
1514 struct l2cap_hdr
*lh
;
1516 BT_DBG("sk %p len %d", sk
, (int)len
);
1519 return ERR_PTR(-ENOTCONN
);
1524 if (chan
->fcs
== L2CAP_FCS_CRC16
)
1527 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1528 skb
= bt_skb_send_alloc(sk
, count
+ hlen
,
1529 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1531 return ERR_PTR(err
);
1533 /* Create L2CAP header */
1534 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1535 lh
->cid
= cpu_to_le16(chan
->dcid
);
1536 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1537 put_unaligned_le16(control
, skb_put(skb
, 2));
1539 put_unaligned_le16(sdulen
, skb_put(skb
, 2));
1541 err
= l2cap_skbuff_fromiovec(sk
, msg
, len
, count
, skb
);
1542 if (unlikely(err
< 0)) {
1544 return ERR_PTR(err
);
1547 if (chan
->fcs
== L2CAP_FCS_CRC16
)
1548 put_unaligned_le16(0, skb_put(skb
, 2));
1550 bt_cb(skb
)->retries
= 0;
1554 int l2cap_sar_segment_sdu(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
)
1556 struct sk_buff
*skb
;
1557 struct sk_buff_head sar_queue
;
1561 skb_queue_head_init(&sar_queue
);
1562 control
= L2CAP_SDU_START
;
1563 skb
= l2cap_create_iframe_pdu(chan
, msg
, chan
->remote_mps
, control
, len
);
1565 return PTR_ERR(skb
);
1567 __skb_queue_tail(&sar_queue
, skb
);
1568 len
-= chan
->remote_mps
;
1569 size
+= chan
->remote_mps
;
1574 if (len
> chan
->remote_mps
) {
1575 control
= L2CAP_SDU_CONTINUE
;
1576 buflen
= chan
->remote_mps
;
1578 control
= L2CAP_SDU_END
;
1582 skb
= l2cap_create_iframe_pdu(chan
, msg
, buflen
, control
, 0);
1584 skb_queue_purge(&sar_queue
);
1585 return PTR_ERR(skb
);
1588 __skb_queue_tail(&sar_queue
, skb
);
1592 skb_queue_splice_tail(&sar_queue
, &chan
->tx_q
);
1593 if (chan
->tx_send_head
== NULL
)
1594 chan
->tx_send_head
= sar_queue
.next
;
1599 int l2cap_chan_send(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
)
1601 struct sk_buff
*skb
;
1605 /* Connectionless channel */
1606 if (chan
->chan_type
== L2CAP_CHAN_CONN_LESS
) {
1607 skb
= l2cap_create_connless_pdu(chan
, msg
, len
);
1609 return PTR_ERR(skb
);
1611 l2cap_do_send(chan
, skb
);
1615 switch (chan
->mode
) {
1616 case L2CAP_MODE_BASIC
:
1617 /* Check outgoing MTU */
1618 if (len
> chan
->omtu
)
1621 /* Create a basic PDU */
1622 skb
= l2cap_create_basic_pdu(chan
, msg
, len
);
1624 return PTR_ERR(skb
);
1626 l2cap_do_send(chan
, skb
);
1630 case L2CAP_MODE_ERTM
:
1631 case L2CAP_MODE_STREAMING
:
1632 /* Entire SDU fits into one PDU */
1633 if (len
<= chan
->remote_mps
) {
1634 control
= L2CAP_SDU_UNSEGMENTED
;
1635 skb
= l2cap_create_iframe_pdu(chan
, msg
, len
, control
,
1638 return PTR_ERR(skb
);
1640 __skb_queue_tail(&chan
->tx_q
, skb
);
1642 if (chan
->tx_send_head
== NULL
)
1643 chan
->tx_send_head
= skb
;
1646 /* Segment SDU into multiples PDUs */
1647 err
= l2cap_sar_segment_sdu(chan
, msg
, len
);
1652 if (chan
->mode
== L2CAP_MODE_STREAMING
) {
1653 l2cap_streaming_send(chan
);
1658 if ((chan
->conn_state
& L2CAP_CONN_REMOTE_BUSY
) &&
1659 (chan
->conn_state
& L2CAP_CONN_WAIT_F
)) {
1664 err
= l2cap_ertm_send(chan
);
1671 BT_DBG("bad state %1.1x", chan
->mode
);
1678 static void l2cap_chan_ready(struct sock
*sk
)
1680 struct sock
*parent
= bt_sk(sk
)->parent
;
1681 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
1683 BT_DBG("sk %p, parent %p", sk
, parent
);
1685 chan
->conf_state
= 0;
1686 __clear_chan_timer(chan
);
1689 /* Outgoing channel.
1690 * Wake up socket sleeping on connect.
1692 l2cap_state_change(chan
, BT_CONNECTED
);
1693 sk
->sk_state_change(sk
);
1695 /* Incoming channel.
1696 * Wake up socket sleeping on accept.
1698 parent
->sk_data_ready(parent
, 0);
1702 /* Copy frame to all raw sockets on that connection */
1703 static void l2cap_raw_recv(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
1705 struct sk_buff
*nskb
;
1706 struct l2cap_chan
*chan
;
1708 BT_DBG("conn %p", conn
);
1710 read_lock(&conn
->chan_lock
);
1711 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
1712 struct sock
*sk
= chan
->sk
;
1713 if (chan
->chan_type
!= L2CAP_CHAN_RAW
)
1716 /* Don't send frame to the socket it came from */
1719 nskb
= skb_clone(skb
, GFP_ATOMIC
);
1723 if (chan
->ops
->recv(chan
->data
, nskb
))
1726 read_unlock(&conn
->chan_lock
);
1729 /* ---- L2CAP signalling commands ---- */
1730 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
1731 u8 code
, u8 ident
, u16 dlen
, void *data
)
1733 struct sk_buff
*skb
, **frag
;
1734 struct l2cap_cmd_hdr
*cmd
;
1735 struct l2cap_hdr
*lh
;
1738 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
1739 conn
, code
, ident
, dlen
);
1741 len
= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
+ dlen
;
1742 count
= min_t(unsigned int, conn
->mtu
, len
);
1744 skb
= bt_skb_alloc(count
, GFP_ATOMIC
);
1748 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1749 lh
->len
= cpu_to_le16(L2CAP_CMD_HDR_SIZE
+ dlen
);
1751 if (conn
->hcon
->type
== LE_LINK
)
1752 lh
->cid
= cpu_to_le16(L2CAP_CID_LE_SIGNALING
);
1754 lh
->cid
= cpu_to_le16(L2CAP_CID_SIGNALING
);
1756 cmd
= (struct l2cap_cmd_hdr
*) skb_put(skb
, L2CAP_CMD_HDR_SIZE
);
1759 cmd
->len
= cpu_to_le16(dlen
);
1762 count
-= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
;
1763 memcpy(skb_put(skb
, count
), data
, count
);
1769 /* Continuation fragments (no L2CAP header) */
1770 frag
= &skb_shinfo(skb
)->frag_list
;
1772 count
= min_t(unsigned int, conn
->mtu
, len
);
1774 *frag
= bt_skb_alloc(count
, GFP_ATOMIC
);
1778 memcpy(skb_put(*frag
, count
), data
, count
);
1783 frag
= &(*frag
)->next
;
1793 static inline int l2cap_get_conf_opt(void **ptr
, int *type
, int *olen
, unsigned long *val
)
1795 struct l2cap_conf_opt
*opt
= *ptr
;
1798 len
= L2CAP_CONF_OPT_SIZE
+ opt
->len
;
1806 *val
= *((u8
*) opt
->val
);
1810 *val
= get_unaligned_le16(opt
->val
);
1814 *val
= get_unaligned_le32(opt
->val
);
1818 *val
= (unsigned long) opt
->val
;
1822 BT_DBG("type 0x%2.2x len %d val 0x%lx", *type
, opt
->len
, *val
);
1826 static void l2cap_add_conf_opt(void **ptr
, u8 type
, u8 len
, unsigned long val
)
1828 struct l2cap_conf_opt
*opt
= *ptr
;
1830 BT_DBG("type 0x%2.2x len %d val 0x%lx", type
, len
, val
);
1837 *((u8
*) opt
->val
) = val
;
1841 put_unaligned_le16(val
, opt
->val
);
1845 put_unaligned_le32(val
, opt
->val
);
1849 memcpy(opt
->val
, (void *) val
, len
);
1853 *ptr
+= L2CAP_CONF_OPT_SIZE
+ len
;
1856 static void l2cap_ack_timeout(unsigned long arg
)
1858 struct l2cap_chan
*chan
= (void *) arg
;
1860 bh_lock_sock(chan
->sk
);
1861 l2cap_send_ack(chan
);
1862 bh_unlock_sock(chan
->sk
);
1865 static inline void l2cap_ertm_init(struct l2cap_chan
*chan
)
1867 struct sock
*sk
= chan
->sk
;
1869 chan
->expected_ack_seq
= 0;
1870 chan
->unacked_frames
= 0;
1871 chan
->buffer_seq
= 0;
1872 chan
->num_acked
= 0;
1873 chan
->frames_sent
= 0;
1875 setup_timer(&chan
->retrans_timer
, l2cap_retrans_timeout
,
1876 (unsigned long) chan
);
1877 setup_timer(&chan
->monitor_timer
, l2cap_monitor_timeout
,
1878 (unsigned long) chan
);
1879 setup_timer(&chan
->ack_timer
, l2cap_ack_timeout
, (unsigned long) chan
);
1881 skb_queue_head_init(&chan
->srej_q
);
1882 skb_queue_head_init(&chan
->busy_q
);
1884 INIT_LIST_HEAD(&chan
->srej_l
);
1886 INIT_WORK(&chan
->busy_work
, l2cap_busy_work
);
1888 sk
->sk_backlog_rcv
= l2cap_ertm_data_rcv
;
1891 static inline __u8
l2cap_select_mode(__u8 mode
, __u16 remote_feat_mask
)
1894 case L2CAP_MODE_STREAMING
:
1895 case L2CAP_MODE_ERTM
:
1896 if (l2cap_mode_supported(mode
, remote_feat_mask
))
1900 return L2CAP_MODE_BASIC
;
1904 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
)
1906 struct l2cap_conf_req
*req
= data
;
1907 struct l2cap_conf_rfc rfc
= { .mode
= chan
->mode
};
1908 void *ptr
= req
->data
;
1910 BT_DBG("chan %p", chan
);
1912 if (chan
->num_conf_req
|| chan
->num_conf_rsp
)
1915 switch (chan
->mode
) {
1916 case L2CAP_MODE_STREAMING
:
1917 case L2CAP_MODE_ERTM
:
1918 if (chan
->conf_state
& L2CAP_CONF_STATE2_DEVICE
)
1923 chan
->mode
= l2cap_select_mode(rfc
.mode
, chan
->conn
->feat_mask
);
1928 if (chan
->imtu
!= L2CAP_DEFAULT_MTU
)
1929 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
1931 switch (chan
->mode
) {
1932 case L2CAP_MODE_BASIC
:
1933 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_ERTM
) &&
1934 !(chan
->conn
->feat_mask
& L2CAP_FEAT_STREAMING
))
1937 rfc
.mode
= L2CAP_MODE_BASIC
;
1939 rfc
.max_transmit
= 0;
1940 rfc
.retrans_timeout
= 0;
1941 rfc
.monitor_timeout
= 0;
1942 rfc
.max_pdu_size
= 0;
1944 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
1945 (unsigned long) &rfc
);
1948 case L2CAP_MODE_ERTM
:
1949 rfc
.mode
= L2CAP_MODE_ERTM
;
1950 rfc
.txwin_size
= chan
->tx_win
;
1951 rfc
.max_transmit
= chan
->max_tx
;
1952 rfc
.retrans_timeout
= 0;
1953 rfc
.monitor_timeout
= 0;
1954 rfc
.max_pdu_size
= cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE
);
1955 if (L2CAP_DEFAULT_MAX_PDU_SIZE
> chan
->conn
->mtu
- 10)
1956 rfc
.max_pdu_size
= cpu_to_le16(chan
->conn
->mtu
- 10);
1958 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
1959 (unsigned long) &rfc
);
1961 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
1964 if (chan
->fcs
== L2CAP_FCS_NONE
||
1965 chan
->conf_state
& L2CAP_CONF_NO_FCS_RECV
) {
1966 chan
->fcs
= L2CAP_FCS_NONE
;
1967 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, chan
->fcs
);
1971 case L2CAP_MODE_STREAMING
:
1972 rfc
.mode
= L2CAP_MODE_STREAMING
;
1974 rfc
.max_transmit
= 0;
1975 rfc
.retrans_timeout
= 0;
1976 rfc
.monitor_timeout
= 0;
1977 rfc
.max_pdu_size
= cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE
);
1978 if (L2CAP_DEFAULT_MAX_PDU_SIZE
> chan
->conn
->mtu
- 10)
1979 rfc
.max_pdu_size
= cpu_to_le16(chan
->conn
->mtu
- 10);
1981 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
1982 (unsigned long) &rfc
);
1984 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
1987 if (chan
->fcs
== L2CAP_FCS_NONE
||
1988 chan
->conf_state
& L2CAP_CONF_NO_FCS_RECV
) {
1989 chan
->fcs
= L2CAP_FCS_NONE
;
1990 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, chan
->fcs
);
1995 req
->dcid
= cpu_to_le16(chan
->dcid
);
1996 req
->flags
= cpu_to_le16(0);
2001 static int l2cap_parse_conf_req(struct l2cap_chan
*chan
, void *data
)
2003 struct l2cap_conf_rsp
*rsp
= data
;
2004 void *ptr
= rsp
->data
;
2005 void *req
= chan
->conf_req
;
2006 int len
= chan
->conf_len
;
2007 int type
, hint
, olen
;
2009 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
2010 u16 mtu
= L2CAP_DEFAULT_MTU
;
2011 u16 result
= L2CAP_CONF_SUCCESS
;
2013 BT_DBG("chan %p", chan
);
2015 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2016 len
-= l2cap_get_conf_opt(&req
, &type
, &olen
, &val
);
2018 hint
= type
& L2CAP_CONF_HINT
;
2019 type
&= L2CAP_CONF_MASK
;
2022 case L2CAP_CONF_MTU
:
2026 case L2CAP_CONF_FLUSH_TO
:
2027 chan
->flush_to
= val
;
2030 case L2CAP_CONF_QOS
:
2033 case L2CAP_CONF_RFC
:
2034 if (olen
== sizeof(rfc
))
2035 memcpy(&rfc
, (void *) val
, olen
);
2038 case L2CAP_CONF_FCS
:
2039 if (val
== L2CAP_FCS_NONE
)
2040 chan
->conf_state
|= L2CAP_CONF_NO_FCS_RECV
;
2048 result
= L2CAP_CONF_UNKNOWN
;
2049 *((u8
*) ptr
++) = type
;
2054 if (chan
->num_conf_rsp
|| chan
->num_conf_req
> 1)
2057 switch (chan
->mode
) {
2058 case L2CAP_MODE_STREAMING
:
2059 case L2CAP_MODE_ERTM
:
2060 if (!(chan
->conf_state
& L2CAP_CONF_STATE2_DEVICE
)) {
2061 chan
->mode
= l2cap_select_mode(rfc
.mode
,
2062 chan
->conn
->feat_mask
);
2066 if (chan
->mode
!= rfc
.mode
)
2067 return -ECONNREFUSED
;
2073 if (chan
->mode
!= rfc
.mode
) {
2074 result
= L2CAP_CONF_UNACCEPT
;
2075 rfc
.mode
= chan
->mode
;
2077 if (chan
->num_conf_rsp
== 1)
2078 return -ECONNREFUSED
;
2080 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2081 sizeof(rfc
), (unsigned long) &rfc
);
2085 if (result
== L2CAP_CONF_SUCCESS
) {
2086 /* Configure output options and let the other side know
2087 * which ones we don't like. */
2089 if (mtu
< L2CAP_DEFAULT_MIN_MTU
)
2090 result
= L2CAP_CONF_UNACCEPT
;
2093 chan
->conf_state
|= L2CAP_CONF_MTU_DONE
;
2095 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->omtu
);
2098 case L2CAP_MODE_BASIC
:
2099 chan
->fcs
= L2CAP_FCS_NONE
;
2100 chan
->conf_state
|= L2CAP_CONF_MODE_DONE
;
2103 case L2CAP_MODE_ERTM
:
2104 chan
->remote_tx_win
= rfc
.txwin_size
;
2105 chan
->remote_max_tx
= rfc
.max_transmit
;
2107 if (le16_to_cpu(rfc
.max_pdu_size
) > chan
->conn
->mtu
- 10)
2108 rfc
.max_pdu_size
= cpu_to_le16(chan
->conn
->mtu
- 10);
2110 chan
->remote_mps
= le16_to_cpu(rfc
.max_pdu_size
);
2112 rfc
.retrans_timeout
=
2113 le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO
);
2114 rfc
.monitor_timeout
=
2115 le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO
);
2117 chan
->conf_state
|= L2CAP_CONF_MODE_DONE
;
2119 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2120 sizeof(rfc
), (unsigned long) &rfc
);
2124 case L2CAP_MODE_STREAMING
:
2125 if (le16_to_cpu(rfc
.max_pdu_size
) > chan
->conn
->mtu
- 10)
2126 rfc
.max_pdu_size
= cpu_to_le16(chan
->conn
->mtu
- 10);
2128 chan
->remote_mps
= le16_to_cpu(rfc
.max_pdu_size
);
2130 chan
->conf_state
|= L2CAP_CONF_MODE_DONE
;
2132 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2133 sizeof(rfc
), (unsigned long) &rfc
);
2138 result
= L2CAP_CONF_UNACCEPT
;
2140 memset(&rfc
, 0, sizeof(rfc
));
2141 rfc
.mode
= chan
->mode
;
2144 if (result
== L2CAP_CONF_SUCCESS
)
2145 chan
->conf_state
|= L2CAP_CONF_OUTPUT_DONE
;
2147 rsp
->scid
= cpu_to_le16(chan
->dcid
);
2148 rsp
->result
= cpu_to_le16(result
);
2149 rsp
->flags
= cpu_to_le16(0x0000);
2154 static int l2cap_parse_conf_rsp(struct l2cap_chan
*chan
, void *rsp
, int len
, void *data
, u16
*result
)
2156 struct l2cap_conf_req
*req
= data
;
2157 void *ptr
= req
->data
;
2160 struct l2cap_conf_rfc rfc
;
2162 BT_DBG("chan %p, rsp %p, len %d, req %p", chan
, rsp
, len
, data
);
2164 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2165 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
2168 case L2CAP_CONF_MTU
:
2169 if (val
< L2CAP_DEFAULT_MIN_MTU
) {
2170 *result
= L2CAP_CONF_UNACCEPT
;
2171 chan
->imtu
= L2CAP_DEFAULT_MIN_MTU
;
2174 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
2177 case L2CAP_CONF_FLUSH_TO
:
2178 chan
->flush_to
= val
;
2179 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FLUSH_TO
,
2183 case L2CAP_CONF_RFC
:
2184 if (olen
== sizeof(rfc
))
2185 memcpy(&rfc
, (void *)val
, olen
);
2187 if ((chan
->conf_state
& L2CAP_CONF_STATE2_DEVICE
) &&
2188 rfc
.mode
!= chan
->mode
)
2189 return -ECONNREFUSED
;
2193 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2194 sizeof(rfc
), (unsigned long) &rfc
);
2199 if (chan
->mode
== L2CAP_MODE_BASIC
&& chan
->mode
!= rfc
.mode
)
2200 return -ECONNREFUSED
;
2202 chan
->mode
= rfc
.mode
;
2204 if (*result
== L2CAP_CONF_SUCCESS
) {
2206 case L2CAP_MODE_ERTM
:
2207 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
2208 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
2209 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2211 case L2CAP_MODE_STREAMING
:
2212 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2216 req
->dcid
= cpu_to_le16(chan
->dcid
);
2217 req
->flags
= cpu_to_le16(0x0000);
2222 static int l2cap_build_conf_rsp(struct l2cap_chan
*chan
, void *data
, u16 result
, u16 flags
)
2224 struct l2cap_conf_rsp
*rsp
= data
;
2225 void *ptr
= rsp
->data
;
2227 BT_DBG("chan %p", chan
);
2229 rsp
->scid
= cpu_to_le16(chan
->dcid
);
2230 rsp
->result
= cpu_to_le16(result
);
2231 rsp
->flags
= cpu_to_le16(flags
);
2236 void __l2cap_connect_rsp_defer(struct l2cap_chan
*chan
)
2238 struct l2cap_conn_rsp rsp
;
2239 struct l2cap_conn
*conn
= chan
->conn
;
2242 rsp
.scid
= cpu_to_le16(chan
->dcid
);
2243 rsp
.dcid
= cpu_to_le16(chan
->scid
);
2244 rsp
.result
= cpu_to_le16(L2CAP_CR_SUCCESS
);
2245 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
2246 l2cap_send_cmd(conn
, chan
->ident
,
2247 L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
2249 if (chan
->conf_state
& L2CAP_CONF_REQ_SENT
)
2252 chan
->conf_state
|= L2CAP_CONF_REQ_SENT
;
2253 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2254 l2cap_build_conf_req(chan
, buf
), buf
);
2255 chan
->num_conf_req
++;
2258 static void l2cap_conf_rfc_get(struct l2cap_chan
*chan
, void *rsp
, int len
)
2262 struct l2cap_conf_rfc rfc
;
2264 BT_DBG("chan %p, rsp %p, len %d", chan
, rsp
, len
);
2266 if ((chan
->mode
!= L2CAP_MODE_ERTM
) && (chan
->mode
!= L2CAP_MODE_STREAMING
))
2269 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2270 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
2273 case L2CAP_CONF_RFC
:
2274 if (olen
== sizeof(rfc
))
2275 memcpy(&rfc
, (void *)val
, olen
);
2282 case L2CAP_MODE_ERTM
:
2283 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
2284 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
2285 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2287 case L2CAP_MODE_STREAMING
:
2288 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2292 static inline int l2cap_command_rej(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2294 struct l2cap_cmd_rej
*rej
= (struct l2cap_cmd_rej
*) data
;
2296 if (rej
->reason
!= 0x0000)
2299 if ((conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) &&
2300 cmd
->ident
== conn
->info_ident
) {
2301 del_timer(&conn
->info_timer
);
2303 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2304 conn
->info_ident
= 0;
2306 l2cap_conn_start(conn
);
2312 static inline int l2cap_connect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2314 struct l2cap_conn_req
*req
= (struct l2cap_conn_req
*) data
;
2315 struct l2cap_conn_rsp rsp
;
2316 struct l2cap_chan
*chan
= NULL
, *pchan
;
2317 struct sock
*parent
, *sk
= NULL
;
2318 int result
, status
= L2CAP_CS_NO_INFO
;
2320 u16 dcid
= 0, scid
= __le16_to_cpu(req
->scid
);
2321 __le16 psm
= req
->psm
;
2323 BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm
, scid
);
2325 /* Check if we have socket listening on psm */
2326 pchan
= l2cap_global_chan_by_psm(BT_LISTEN
, psm
, conn
->src
);
2328 result
= L2CAP_CR_BAD_PSM
;
2334 bh_lock_sock(parent
);
2336 /* Check if the ACL is secure enough (if not SDP) */
2337 if (psm
!= cpu_to_le16(0x0001) &&
2338 !hci_conn_check_link_mode(conn
->hcon
)) {
2339 conn
->disc_reason
= 0x05;
2340 result
= L2CAP_CR_SEC_BLOCK
;
2344 result
= L2CAP_CR_NO_MEM
;
2346 /* Check for backlog size */
2347 if (sk_acceptq_is_full(parent
)) {
2348 BT_DBG("backlog full %d", parent
->sk_ack_backlog
);
2352 chan
= pchan
->ops
->new_connection(pchan
->data
);
2358 write_lock_bh(&conn
->chan_lock
);
2360 /* Check if we already have channel with that dcid */
2361 if (__l2cap_get_chan_by_dcid(conn
, scid
)) {
2362 write_unlock_bh(&conn
->chan_lock
);
2363 sock_set_flag(sk
, SOCK_ZAPPED
);
2364 chan
->ops
->close(chan
->data
);
2368 hci_conn_hold(conn
->hcon
);
2370 bacpy(&bt_sk(sk
)->src
, conn
->src
);
2371 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
2375 bt_accept_enqueue(parent
, sk
);
2377 __l2cap_chan_add(conn
, chan
);
2381 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
2383 chan
->ident
= cmd
->ident
;
2385 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
) {
2386 if (l2cap_check_security(chan
)) {
2387 if (bt_sk(sk
)->defer_setup
) {
2388 l2cap_state_change(chan
, BT_CONNECT2
);
2389 result
= L2CAP_CR_PEND
;
2390 status
= L2CAP_CS_AUTHOR_PEND
;
2391 parent
->sk_data_ready(parent
, 0);
2393 l2cap_state_change(chan
, BT_CONFIG
);
2394 result
= L2CAP_CR_SUCCESS
;
2395 status
= L2CAP_CS_NO_INFO
;
2398 l2cap_state_change(chan
, BT_CONNECT2
);
2399 result
= L2CAP_CR_PEND
;
2400 status
= L2CAP_CS_AUTHEN_PEND
;
2403 l2cap_state_change(chan
, BT_CONNECT2
);
2404 result
= L2CAP_CR_PEND
;
2405 status
= L2CAP_CS_NO_INFO
;
2408 write_unlock_bh(&conn
->chan_lock
);
2411 bh_unlock_sock(parent
);
2414 rsp
.scid
= cpu_to_le16(scid
);
2415 rsp
.dcid
= cpu_to_le16(dcid
);
2416 rsp
.result
= cpu_to_le16(result
);
2417 rsp
.status
= cpu_to_le16(status
);
2418 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
2420 if (result
== L2CAP_CR_PEND
&& status
== L2CAP_CS_NO_INFO
) {
2421 struct l2cap_info_req info
;
2422 info
.type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
2424 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
2425 conn
->info_ident
= l2cap_get_ident(conn
);
2427 mod_timer(&conn
->info_timer
, jiffies
+
2428 msecs_to_jiffies(L2CAP_INFO_TIMEOUT
));
2430 l2cap_send_cmd(conn
, conn
->info_ident
,
2431 L2CAP_INFO_REQ
, sizeof(info
), &info
);
2434 if (chan
&& !(chan
->conf_state
& L2CAP_CONF_REQ_SENT
) &&
2435 result
== L2CAP_CR_SUCCESS
) {
2437 chan
->conf_state
|= L2CAP_CONF_REQ_SENT
;
2438 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2439 l2cap_build_conf_req(chan
, buf
), buf
);
2440 chan
->num_conf_req
++;
2446 static inline int l2cap_connect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2448 struct l2cap_conn_rsp
*rsp
= (struct l2cap_conn_rsp
*) data
;
2449 u16 scid
, dcid
, result
, status
;
2450 struct l2cap_chan
*chan
;
2454 scid
= __le16_to_cpu(rsp
->scid
);
2455 dcid
= __le16_to_cpu(rsp
->dcid
);
2456 result
= __le16_to_cpu(rsp
->result
);
2457 status
= __le16_to_cpu(rsp
->status
);
2459 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid
, scid
, result
, status
);
2462 chan
= l2cap_get_chan_by_scid(conn
, scid
);
2466 chan
= l2cap_get_chan_by_ident(conn
, cmd
->ident
);
2474 case L2CAP_CR_SUCCESS
:
2475 l2cap_state_change(chan
, BT_CONFIG
);
2478 chan
->conf_state
&= ~L2CAP_CONF_CONNECT_PEND
;
2480 if (chan
->conf_state
& L2CAP_CONF_REQ_SENT
)
2483 chan
->conf_state
|= L2CAP_CONF_REQ_SENT
;
2485 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2486 l2cap_build_conf_req(chan
, req
), req
);
2487 chan
->num_conf_req
++;
2491 chan
->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
2495 /* don't delete l2cap channel if sk is owned by user */
2496 if (sock_owned_by_user(sk
)) {
2497 l2cap_state_change(chan
, BT_DISCONN
);
2498 __clear_chan_timer(chan
);
2499 __set_chan_timer(chan
, HZ
/ 5);
2503 l2cap_chan_del(chan
, ECONNREFUSED
);
2511 static inline void set_default_fcs(struct l2cap_chan
*chan
)
2513 struct l2cap_pinfo
*pi
= l2cap_pi(chan
->sk
);
2515 /* FCS is enabled only in ERTM or streaming mode, if one or both
2518 if (chan
->mode
!= L2CAP_MODE_ERTM
&& chan
->mode
!= L2CAP_MODE_STREAMING
)
2519 chan
->fcs
= L2CAP_FCS_NONE
;
2520 else if (!(pi
->chan
->conf_state
& L2CAP_CONF_NO_FCS_RECV
))
2521 chan
->fcs
= L2CAP_FCS_CRC16
;
2524 static inline int l2cap_config_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
2526 struct l2cap_conf_req
*req
= (struct l2cap_conf_req
*) data
;
2529 struct l2cap_chan
*chan
;
2533 dcid
= __le16_to_cpu(req
->dcid
);
2534 flags
= __le16_to_cpu(req
->flags
);
2536 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid
, flags
);
2538 chan
= l2cap_get_chan_by_scid(conn
, dcid
);
2544 if (chan
->state
!= BT_CONFIG
) {
2545 struct l2cap_cmd_rej rej
;
2547 rej
.reason
= cpu_to_le16(0x0002);
2548 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_COMMAND_REJ
,
2553 /* Reject if config buffer is too small. */
2554 len
= cmd_len
- sizeof(*req
);
2555 if (chan
->conf_len
+ len
> sizeof(chan
->conf_req
)) {
2556 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2557 l2cap_build_conf_rsp(chan
, rsp
,
2558 L2CAP_CONF_REJECT
, flags
), rsp
);
2563 memcpy(chan
->conf_req
+ chan
->conf_len
, req
->data
, len
);
2564 chan
->conf_len
+= len
;
2566 if (flags
& 0x0001) {
2567 /* Incomplete config. Send empty response. */
2568 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2569 l2cap_build_conf_rsp(chan
, rsp
,
2570 L2CAP_CONF_SUCCESS
, 0x0001), rsp
);
2574 /* Complete config. */
2575 len
= l2cap_parse_conf_req(chan
, rsp
);
2577 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
2581 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
, len
, rsp
);
2582 chan
->num_conf_rsp
++;
2584 /* Reset config buffer. */
2587 if (!(chan
->conf_state
& L2CAP_CONF_OUTPUT_DONE
))
2590 if (chan
->conf_state
& L2CAP_CONF_INPUT_DONE
) {
2591 set_default_fcs(chan
);
2593 l2cap_state_change(chan
, BT_CONNECTED
);
2595 chan
->next_tx_seq
= 0;
2596 chan
->expected_tx_seq
= 0;
2597 skb_queue_head_init(&chan
->tx_q
);
2598 if (chan
->mode
== L2CAP_MODE_ERTM
)
2599 l2cap_ertm_init(chan
);
2601 l2cap_chan_ready(sk
);
2605 if (!(chan
->conf_state
& L2CAP_CONF_REQ_SENT
)) {
2607 chan
->conf_state
|= L2CAP_CONF_REQ_SENT
;
2608 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2609 l2cap_build_conf_req(chan
, buf
), buf
);
2610 chan
->num_conf_req
++;
2618 static inline int l2cap_config_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2620 struct l2cap_conf_rsp
*rsp
= (struct l2cap_conf_rsp
*)data
;
2621 u16 scid
, flags
, result
;
2622 struct l2cap_chan
*chan
;
2624 int len
= cmd
->len
- sizeof(*rsp
);
2626 scid
= __le16_to_cpu(rsp
->scid
);
2627 flags
= __le16_to_cpu(rsp
->flags
);
2628 result
= __le16_to_cpu(rsp
->result
);
2630 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
2631 scid
, flags
, result
);
2633 chan
= l2cap_get_chan_by_scid(conn
, scid
);
2640 case L2CAP_CONF_SUCCESS
:
2641 l2cap_conf_rfc_get(chan
, rsp
->data
, len
);
2644 case L2CAP_CONF_UNACCEPT
:
2645 if (chan
->num_conf_rsp
<= L2CAP_CONF_MAX_CONF_RSP
) {
2648 if (len
> sizeof(req
) - sizeof(struct l2cap_conf_req
)) {
2649 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
2653 /* throw out any old stored conf requests */
2654 result
= L2CAP_CONF_SUCCESS
;
2655 len
= l2cap_parse_conf_rsp(chan
, rsp
->data
, len
,
2658 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
2662 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
2663 L2CAP_CONF_REQ
, len
, req
);
2664 chan
->num_conf_req
++;
2665 if (result
!= L2CAP_CONF_SUCCESS
)
2671 sk
->sk_err
= ECONNRESET
;
2672 __set_chan_timer(chan
, HZ
* 5);
2673 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
2680 chan
->conf_state
|= L2CAP_CONF_INPUT_DONE
;
2682 if (chan
->conf_state
& L2CAP_CONF_OUTPUT_DONE
) {
2683 set_default_fcs(chan
);
2685 l2cap_state_change(chan
, BT_CONNECTED
);
2686 chan
->next_tx_seq
= 0;
2687 chan
->expected_tx_seq
= 0;
2688 skb_queue_head_init(&chan
->tx_q
);
2689 if (chan
->mode
== L2CAP_MODE_ERTM
)
2690 l2cap_ertm_init(chan
);
2692 l2cap_chan_ready(sk
);
2700 static inline int l2cap_disconnect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2702 struct l2cap_disconn_req
*req
= (struct l2cap_disconn_req
*) data
;
2703 struct l2cap_disconn_rsp rsp
;
2705 struct l2cap_chan
*chan
;
2708 scid
= __le16_to_cpu(req
->scid
);
2709 dcid
= __le16_to_cpu(req
->dcid
);
2711 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid
, dcid
);
2713 chan
= l2cap_get_chan_by_scid(conn
, dcid
);
2719 rsp
.dcid
= cpu_to_le16(chan
->scid
);
2720 rsp
.scid
= cpu_to_le16(chan
->dcid
);
2721 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_DISCONN_RSP
, sizeof(rsp
), &rsp
);
2723 sk
->sk_shutdown
= SHUTDOWN_MASK
;
2725 /* don't delete l2cap channel if sk is owned by user */
2726 if (sock_owned_by_user(sk
)) {
2727 l2cap_state_change(chan
, BT_DISCONN
);
2728 __clear_chan_timer(chan
);
2729 __set_chan_timer(chan
, HZ
/ 5);
2734 l2cap_chan_del(chan
, ECONNRESET
);
2737 chan
->ops
->close(chan
->data
);
2741 static inline int l2cap_disconnect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2743 struct l2cap_disconn_rsp
*rsp
= (struct l2cap_disconn_rsp
*) data
;
2745 struct l2cap_chan
*chan
;
2748 scid
= __le16_to_cpu(rsp
->scid
);
2749 dcid
= __le16_to_cpu(rsp
->dcid
);
2751 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid
, scid
);
2753 chan
= l2cap_get_chan_by_scid(conn
, scid
);
2759 /* don't delete l2cap channel if sk is owned by user */
2760 if (sock_owned_by_user(sk
)) {
2761 l2cap_state_change(chan
,BT_DISCONN
);
2762 __clear_chan_timer(chan
);
2763 __set_chan_timer(chan
, HZ
/ 5);
2768 l2cap_chan_del(chan
, 0);
2771 chan
->ops
->close(chan
->data
);
2775 static inline int l2cap_information_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2777 struct l2cap_info_req
*req
= (struct l2cap_info_req
*) data
;
2780 type
= __le16_to_cpu(req
->type
);
2782 BT_DBG("type 0x%4.4x", type
);
2784 if (type
== L2CAP_IT_FEAT_MASK
) {
2786 u32 feat_mask
= l2cap_feat_mask
;
2787 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
2788 rsp
->type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
2789 rsp
->result
= cpu_to_le16(L2CAP_IR_SUCCESS
);
2791 feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
2793 put_unaligned_le32(feat_mask
, rsp
->data
);
2794 l2cap_send_cmd(conn
, cmd
->ident
,
2795 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
2796 } else if (type
== L2CAP_IT_FIXED_CHAN
) {
2798 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
2799 rsp
->type
= cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
2800 rsp
->result
= cpu_to_le16(L2CAP_IR_SUCCESS
);
2801 memcpy(buf
+ 4, l2cap_fixed_chan
, 8);
2802 l2cap_send_cmd(conn
, cmd
->ident
,
2803 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
2805 struct l2cap_info_rsp rsp
;
2806 rsp
.type
= cpu_to_le16(type
);
2807 rsp
.result
= cpu_to_le16(L2CAP_IR_NOTSUPP
);
2808 l2cap_send_cmd(conn
, cmd
->ident
,
2809 L2CAP_INFO_RSP
, sizeof(rsp
), &rsp
);
2815 static inline int l2cap_information_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2817 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) data
;
2820 type
= __le16_to_cpu(rsp
->type
);
2821 result
= __le16_to_cpu(rsp
->result
);
2823 BT_DBG("type 0x%4.4x result 0x%2.2x", type
, result
);
2825 /* L2CAP Info req/rsp are unbound to channels, add extra checks */
2826 if (cmd
->ident
!= conn
->info_ident
||
2827 conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
)
2830 del_timer(&conn
->info_timer
);
2832 if (result
!= L2CAP_IR_SUCCESS
) {
2833 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2834 conn
->info_ident
= 0;
2836 l2cap_conn_start(conn
);
2841 if (type
== L2CAP_IT_FEAT_MASK
) {
2842 conn
->feat_mask
= get_unaligned_le32(rsp
->data
);
2844 if (conn
->feat_mask
& L2CAP_FEAT_FIXED_CHAN
) {
2845 struct l2cap_info_req req
;
2846 req
.type
= cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
2848 conn
->info_ident
= l2cap_get_ident(conn
);
2850 l2cap_send_cmd(conn
, conn
->info_ident
,
2851 L2CAP_INFO_REQ
, sizeof(req
), &req
);
2853 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2854 conn
->info_ident
= 0;
2856 l2cap_conn_start(conn
);
2858 } else if (type
== L2CAP_IT_FIXED_CHAN
) {
2859 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2860 conn
->info_ident
= 0;
2862 l2cap_conn_start(conn
);
2868 static inline int l2cap_check_conn_param(u16 min
, u16 max
, u16 latency
,
2873 if (min
> max
|| min
< 6 || max
> 3200)
2876 if (to_multiplier
< 10 || to_multiplier
> 3200)
2879 if (max
>= to_multiplier
* 8)
2882 max_latency
= (to_multiplier
* 8 / max
) - 1;
2883 if (latency
> 499 || latency
> max_latency
)
2889 static inline int l2cap_conn_param_update_req(struct l2cap_conn
*conn
,
2890 struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2892 struct hci_conn
*hcon
= conn
->hcon
;
2893 struct l2cap_conn_param_update_req
*req
;
2894 struct l2cap_conn_param_update_rsp rsp
;
2895 u16 min
, max
, latency
, to_multiplier
, cmd_len
;
2898 if (!(hcon
->link_mode
& HCI_LM_MASTER
))
2901 cmd_len
= __le16_to_cpu(cmd
->len
);
2902 if (cmd_len
!= sizeof(struct l2cap_conn_param_update_req
))
2905 req
= (struct l2cap_conn_param_update_req
*) data
;
2906 min
= __le16_to_cpu(req
->min
);
2907 max
= __le16_to_cpu(req
->max
);
2908 latency
= __le16_to_cpu(req
->latency
);
2909 to_multiplier
= __le16_to_cpu(req
->to_multiplier
);
2911 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
2912 min
, max
, latency
, to_multiplier
);
2914 memset(&rsp
, 0, sizeof(rsp
));
2916 err
= l2cap_check_conn_param(min
, max
, latency
, to_multiplier
);
2918 rsp
.result
= cpu_to_le16(L2CAP_CONN_PARAM_REJECTED
);
2920 rsp
.result
= cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED
);
2922 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_PARAM_UPDATE_RSP
,
2926 hci_le_conn_update(hcon
, min
, max
, latency
, to_multiplier
);
2931 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn
*conn
,
2932 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
2936 switch (cmd
->code
) {
2937 case L2CAP_COMMAND_REJ
:
2938 l2cap_command_rej(conn
, cmd
, data
);
2941 case L2CAP_CONN_REQ
:
2942 err
= l2cap_connect_req(conn
, cmd
, data
);
2945 case L2CAP_CONN_RSP
:
2946 err
= l2cap_connect_rsp(conn
, cmd
, data
);
2949 case L2CAP_CONF_REQ
:
2950 err
= l2cap_config_req(conn
, cmd
, cmd_len
, data
);
2953 case L2CAP_CONF_RSP
:
2954 err
= l2cap_config_rsp(conn
, cmd
, data
);
2957 case L2CAP_DISCONN_REQ
:
2958 err
= l2cap_disconnect_req(conn
, cmd
, data
);
2961 case L2CAP_DISCONN_RSP
:
2962 err
= l2cap_disconnect_rsp(conn
, cmd
, data
);
2965 case L2CAP_ECHO_REQ
:
2966 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_ECHO_RSP
, cmd_len
, data
);
2969 case L2CAP_ECHO_RSP
:
2972 case L2CAP_INFO_REQ
:
2973 err
= l2cap_information_req(conn
, cmd
, data
);
2976 case L2CAP_INFO_RSP
:
2977 err
= l2cap_information_rsp(conn
, cmd
, data
);
2981 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd
->code
);
2989 static inline int l2cap_le_sig_cmd(struct l2cap_conn
*conn
,
2990 struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2992 switch (cmd
->code
) {
2993 case L2CAP_COMMAND_REJ
:
2996 case L2CAP_CONN_PARAM_UPDATE_REQ
:
2997 return l2cap_conn_param_update_req(conn
, cmd
, data
);
2999 case L2CAP_CONN_PARAM_UPDATE_RSP
:
3003 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd
->code
);
3008 static inline void l2cap_sig_channel(struct l2cap_conn
*conn
,
3009 struct sk_buff
*skb
)
3011 u8
*data
= skb
->data
;
3013 struct l2cap_cmd_hdr cmd
;
3016 l2cap_raw_recv(conn
, skb
);
3018 while (len
>= L2CAP_CMD_HDR_SIZE
) {
3020 memcpy(&cmd
, data
, L2CAP_CMD_HDR_SIZE
);
3021 data
+= L2CAP_CMD_HDR_SIZE
;
3022 len
-= L2CAP_CMD_HDR_SIZE
;
3024 cmd_len
= le16_to_cpu(cmd
.len
);
3026 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd
.code
, cmd_len
, cmd
.ident
);
3028 if (cmd_len
> len
|| !cmd
.ident
) {
3029 BT_DBG("corrupted command");
3033 if (conn
->hcon
->type
== LE_LINK
)
3034 err
= l2cap_le_sig_cmd(conn
, &cmd
, data
);
3036 err
= l2cap_bredr_sig_cmd(conn
, &cmd
, cmd_len
, data
);
3039 struct l2cap_cmd_rej rej
;
3041 BT_ERR("Wrong link type (%d)", err
);
3043 /* FIXME: Map err to a valid reason */
3044 rej
.reason
= cpu_to_le16(0);
3045 l2cap_send_cmd(conn
, cmd
.ident
, L2CAP_COMMAND_REJ
, sizeof(rej
), &rej
);
3055 static int l2cap_check_fcs(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
3057 u16 our_fcs
, rcv_fcs
;
3058 int hdr_size
= L2CAP_HDR_SIZE
+ 2;
3060 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
3061 skb_trim(skb
, skb
->len
- 2);
3062 rcv_fcs
= get_unaligned_le16(skb
->data
+ skb
->len
);
3063 our_fcs
= crc16(0, skb
->data
- hdr_size
, skb
->len
+ hdr_size
);
3065 if (our_fcs
!= rcv_fcs
)
3071 static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan
*chan
)
3075 chan
->frames_sent
= 0;
3077 control
|= chan
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3079 if (chan
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
3080 control
|= L2CAP_SUPER_RCV_NOT_READY
;
3081 l2cap_send_sframe(chan
, control
);
3082 chan
->conn_state
|= L2CAP_CONN_RNR_SENT
;
3085 if (chan
->conn_state
& L2CAP_CONN_REMOTE_BUSY
)
3086 l2cap_retransmit_frames(chan
);
3088 l2cap_ertm_send(chan
);
3090 if (!(chan
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) &&
3091 chan
->frames_sent
== 0) {
3092 control
|= L2CAP_SUPER_RCV_READY
;
3093 l2cap_send_sframe(chan
, control
);
3097 static int l2cap_add_to_srej_queue(struct l2cap_chan
*chan
, struct sk_buff
*skb
, u8 tx_seq
, u8 sar
)
3099 struct sk_buff
*next_skb
;
3100 int tx_seq_offset
, next_tx_seq_offset
;
3102 bt_cb(skb
)->tx_seq
= tx_seq
;
3103 bt_cb(skb
)->sar
= sar
;
3105 next_skb
= skb_peek(&chan
->srej_q
);
3107 __skb_queue_tail(&chan
->srej_q
, skb
);
3111 tx_seq_offset
= (tx_seq
- chan
->buffer_seq
) % 64;
3112 if (tx_seq_offset
< 0)
3113 tx_seq_offset
+= 64;
3116 if (bt_cb(next_skb
)->tx_seq
== tx_seq
)
3119 next_tx_seq_offset
= (bt_cb(next_skb
)->tx_seq
-
3120 chan
->buffer_seq
) % 64;
3121 if (next_tx_seq_offset
< 0)
3122 next_tx_seq_offset
+= 64;
3124 if (next_tx_seq_offset
> tx_seq_offset
) {
3125 __skb_queue_before(&chan
->srej_q
, next_skb
, skb
);
3129 if (skb_queue_is_last(&chan
->srej_q
, next_skb
))
3132 } while ((next_skb
= skb_queue_next(&chan
->srej_q
, next_skb
)));
3134 __skb_queue_tail(&chan
->srej_q
, skb
);
3139 static int l2cap_ertm_reassembly_sdu(struct l2cap_chan
*chan
, struct sk_buff
*skb
, u16 control
)
3141 struct sk_buff
*_skb
;
3144 switch (control
& L2CAP_CTRL_SAR
) {
3145 case L2CAP_SDU_UNSEGMENTED
:
3146 if (chan
->conn_state
& L2CAP_CONN_SAR_SDU
)
3149 return chan
->ops
->recv(chan
->data
, skb
);
3151 case L2CAP_SDU_START
:
3152 if (chan
->conn_state
& L2CAP_CONN_SAR_SDU
)
3155 chan
->sdu_len
= get_unaligned_le16(skb
->data
);
3157 if (chan
->sdu_len
> chan
->imtu
)
3160 chan
->sdu
= bt_skb_alloc(chan
->sdu_len
, GFP_ATOMIC
);
3164 /* pull sdu_len bytes only after alloc, because of Local Busy
3165 * condition we have to be sure that this will be executed
3166 * only once, i.e., when alloc does not fail */
3169 memcpy(skb_put(chan
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3171 chan
->conn_state
|= L2CAP_CONN_SAR_SDU
;
3172 chan
->partial_sdu_len
= skb
->len
;
3175 case L2CAP_SDU_CONTINUE
:
3176 if (!(chan
->conn_state
& L2CAP_CONN_SAR_SDU
))
3182 chan
->partial_sdu_len
+= skb
->len
;
3183 if (chan
->partial_sdu_len
> chan
->sdu_len
)
3186 memcpy(skb_put(chan
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3191 if (!(chan
->conn_state
& L2CAP_CONN_SAR_SDU
))
3197 if (!(chan
->conn_state
& L2CAP_CONN_SAR_RETRY
)) {
3198 chan
->partial_sdu_len
+= skb
->len
;
3200 if (chan
->partial_sdu_len
> chan
->imtu
)
3203 if (chan
->partial_sdu_len
!= chan
->sdu_len
)
3206 memcpy(skb_put(chan
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3209 _skb
= skb_clone(chan
->sdu
, GFP_ATOMIC
);
3211 chan
->conn_state
|= L2CAP_CONN_SAR_RETRY
;
3215 err
= chan
->ops
->recv(chan
->data
, _skb
);
3218 chan
->conn_state
|= L2CAP_CONN_SAR_RETRY
;
3222 chan
->conn_state
&= ~L2CAP_CONN_SAR_RETRY
;
3223 chan
->conn_state
&= ~L2CAP_CONN_SAR_SDU
;
3225 kfree_skb(chan
->sdu
);
3233 kfree_skb(chan
->sdu
);
3237 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3242 static int l2cap_try_push_rx_skb(struct l2cap_chan
*chan
)
3244 struct sk_buff
*skb
;
3248 while ((skb
= skb_dequeue(&chan
->busy_q
))) {
3249 control
= bt_cb(skb
)->sar
<< L2CAP_CTRL_SAR_SHIFT
;
3250 err
= l2cap_ertm_reassembly_sdu(chan
, skb
, control
);
3252 skb_queue_head(&chan
->busy_q
, skb
);
3256 chan
->buffer_seq
= (chan
->buffer_seq
+ 1) % 64;
3259 if (!(chan
->conn_state
& L2CAP_CONN_RNR_SENT
))
3262 control
= chan
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3263 control
|= L2CAP_SUPER_RCV_READY
| L2CAP_CTRL_POLL
;
3264 l2cap_send_sframe(chan
, control
);
3265 chan
->retry_count
= 1;
3267 __clear_retrans_timer(chan
);
3268 __set_monitor_timer(chan
);
3270 chan
->conn_state
|= L2CAP_CONN_WAIT_F
;
3273 chan
->conn_state
&= ~L2CAP_CONN_LOCAL_BUSY
;
3274 chan
->conn_state
&= ~L2CAP_CONN_RNR_SENT
;
3276 BT_DBG("chan %p, Exit local busy", chan
);
3281 static void l2cap_busy_work(struct work_struct
*work
)
3283 DECLARE_WAITQUEUE(wait
, current
);
3284 struct l2cap_chan
*chan
=
3285 container_of(work
, struct l2cap_chan
, busy_work
);
3286 struct sock
*sk
= chan
->sk
;
3287 int n_tries
= 0, timeo
= HZ
/5, err
;
3288 struct sk_buff
*skb
;
3292 add_wait_queue(sk_sleep(sk
), &wait
);
3293 while ((skb
= skb_peek(&chan
->busy_q
))) {
3294 set_current_state(TASK_INTERRUPTIBLE
);
3296 if (n_tries
++ > L2CAP_LOCAL_BUSY_TRIES
) {
3298 l2cap_send_disconn_req(chan
->conn
, chan
, EBUSY
);
3305 if (signal_pending(current
)) {
3306 err
= sock_intr_errno(timeo
);
3311 timeo
= schedule_timeout(timeo
);
3314 err
= sock_error(sk
);
3318 if (l2cap_try_push_rx_skb(chan
) == 0)
3322 set_current_state(TASK_RUNNING
);
3323 remove_wait_queue(sk_sleep(sk
), &wait
);
3328 static int l2cap_push_rx_skb(struct l2cap_chan
*chan
, struct sk_buff
*skb
, u16 control
)
3332 if (chan
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
3333 bt_cb(skb
)->sar
= control
>> L2CAP_CTRL_SAR_SHIFT
;
3334 __skb_queue_tail(&chan
->busy_q
, skb
);
3335 return l2cap_try_push_rx_skb(chan
);
3340 err
= l2cap_ertm_reassembly_sdu(chan
, skb
, control
);
3342 chan
->buffer_seq
= (chan
->buffer_seq
+ 1) % 64;
3346 /* Busy Condition */
3347 BT_DBG("chan %p, Enter local busy", chan
);
3349 chan
->conn_state
|= L2CAP_CONN_LOCAL_BUSY
;
3350 bt_cb(skb
)->sar
= control
>> L2CAP_CTRL_SAR_SHIFT
;
3351 __skb_queue_tail(&chan
->busy_q
, skb
);
3353 sctrl
= chan
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3354 sctrl
|= L2CAP_SUPER_RCV_NOT_READY
;
3355 l2cap_send_sframe(chan
, sctrl
);
3357 chan
->conn_state
|= L2CAP_CONN_RNR_SENT
;
3359 __clear_ack_timer(chan
);
3361 queue_work(_busy_wq
, &chan
->busy_work
);
3366 static int l2cap_streaming_reassembly_sdu(struct l2cap_chan
*chan
, struct sk_buff
*skb
, u16 control
)
3368 struct sk_buff
*_skb
;
3372 * TODO: We have to notify the userland if some data is lost with the
3376 switch (control
& L2CAP_CTRL_SAR
) {
3377 case L2CAP_SDU_UNSEGMENTED
:
3378 if (chan
->conn_state
& L2CAP_CONN_SAR_SDU
) {
3379 kfree_skb(chan
->sdu
);
3383 err
= chan
->ops
->recv(chan
->data
, skb
);
3389 case L2CAP_SDU_START
:
3390 if (chan
->conn_state
& L2CAP_CONN_SAR_SDU
) {
3391 kfree_skb(chan
->sdu
);
3395 chan
->sdu_len
= get_unaligned_le16(skb
->data
);
3398 if (chan
->sdu_len
> chan
->imtu
) {
3403 chan
->sdu
= bt_skb_alloc(chan
->sdu_len
, GFP_ATOMIC
);
3409 memcpy(skb_put(chan
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3411 chan
->conn_state
|= L2CAP_CONN_SAR_SDU
;
3412 chan
->partial_sdu_len
= skb
->len
;
3416 case L2CAP_SDU_CONTINUE
:
3417 if (!(chan
->conn_state
& L2CAP_CONN_SAR_SDU
))
3420 memcpy(skb_put(chan
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3422 chan
->partial_sdu_len
+= skb
->len
;
3423 if (chan
->partial_sdu_len
> chan
->sdu_len
)
3424 kfree_skb(chan
->sdu
);
3431 if (!(chan
->conn_state
& L2CAP_CONN_SAR_SDU
))
3434 memcpy(skb_put(chan
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3436 chan
->conn_state
&= ~L2CAP_CONN_SAR_SDU
;
3437 chan
->partial_sdu_len
+= skb
->len
;
3439 if (chan
->partial_sdu_len
> chan
->imtu
)
3442 if (chan
->partial_sdu_len
== chan
->sdu_len
) {
3443 _skb
= skb_clone(chan
->sdu
, GFP_ATOMIC
);
3444 err
= chan
->ops
->recv(chan
->data
, _skb
);
3451 kfree_skb(chan
->sdu
);
3459 static void l2cap_check_srej_gap(struct l2cap_chan
*chan
, u8 tx_seq
)
3461 struct sk_buff
*skb
;
3464 while ((skb
= skb_peek(&chan
->srej_q
))) {
3465 if (bt_cb(skb
)->tx_seq
!= tx_seq
)
3468 skb
= skb_dequeue(&chan
->srej_q
);
3469 control
= bt_cb(skb
)->sar
<< L2CAP_CTRL_SAR_SHIFT
;
3470 l2cap_ertm_reassembly_sdu(chan
, skb
, control
);
3471 chan
->buffer_seq_srej
=
3472 (chan
->buffer_seq_srej
+ 1) % 64;
3473 tx_seq
= (tx_seq
+ 1) % 64;
3477 static void l2cap_resend_srejframe(struct l2cap_chan
*chan
, u8 tx_seq
)
3479 struct srej_list
*l
, *tmp
;
3482 list_for_each_entry_safe(l
, tmp
, &chan
->srej_l
, list
) {
3483 if (l
->tx_seq
== tx_seq
) {
3488 control
= L2CAP_SUPER_SELECT_REJECT
;
3489 control
|= l
->tx_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3490 l2cap_send_sframe(chan
, control
);
3492 list_add_tail(&l
->list
, &chan
->srej_l
);
3496 static void l2cap_send_srejframe(struct l2cap_chan
*chan
, u8 tx_seq
)
3498 struct srej_list
*new;
3501 while (tx_seq
!= chan
->expected_tx_seq
) {
3502 control
= L2CAP_SUPER_SELECT_REJECT
;
3503 control
|= chan
->expected_tx_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3504 l2cap_send_sframe(chan
, control
);
3506 new = kzalloc(sizeof(struct srej_list
), GFP_ATOMIC
);
3507 new->tx_seq
= chan
->expected_tx_seq
;
3508 chan
->expected_tx_seq
= (chan
->expected_tx_seq
+ 1) % 64;
3509 list_add_tail(&new->list
, &chan
->srej_l
);
3511 chan
->expected_tx_seq
= (chan
->expected_tx_seq
+ 1) % 64;
3514 static inline int l2cap_data_channel_iframe(struct l2cap_chan
*chan
, u16 rx_control
, struct sk_buff
*skb
)
3516 u8 tx_seq
= __get_txseq(rx_control
);
3517 u8 req_seq
= __get_reqseq(rx_control
);
3518 u8 sar
= rx_control
>> L2CAP_CTRL_SAR_SHIFT
;
3519 int tx_seq_offset
, expected_tx_seq_offset
;
3520 int num_to_ack
= (chan
->tx_win
/6) + 1;
3523 BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan
, skb
->len
,
3524 tx_seq
, rx_control
);
3526 if (L2CAP_CTRL_FINAL
& rx_control
&&
3527 chan
->conn_state
& L2CAP_CONN_WAIT_F
) {
3528 __clear_monitor_timer(chan
);
3529 if (chan
->unacked_frames
> 0)
3530 __set_retrans_timer(chan
);
3531 chan
->conn_state
&= ~L2CAP_CONN_WAIT_F
;
3534 chan
->expected_ack_seq
= req_seq
;
3535 l2cap_drop_acked_frames(chan
);
3537 if (tx_seq
== chan
->expected_tx_seq
)
3540 tx_seq_offset
= (tx_seq
- chan
->buffer_seq
) % 64;
3541 if (tx_seq_offset
< 0)
3542 tx_seq_offset
+= 64;
3544 /* invalid tx_seq */
3545 if (tx_seq_offset
>= chan
->tx_win
) {
3546 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3550 if (chan
->conn_state
& L2CAP_CONN_LOCAL_BUSY
)
3553 if (chan
->conn_state
& L2CAP_CONN_SREJ_SENT
) {
3554 struct srej_list
*first
;
3556 first
= list_first_entry(&chan
->srej_l
,
3557 struct srej_list
, list
);
3558 if (tx_seq
== first
->tx_seq
) {
3559 l2cap_add_to_srej_queue(chan
, skb
, tx_seq
, sar
);
3560 l2cap_check_srej_gap(chan
, tx_seq
);
3562 list_del(&first
->list
);
3565 if (list_empty(&chan
->srej_l
)) {
3566 chan
->buffer_seq
= chan
->buffer_seq_srej
;
3567 chan
->conn_state
&= ~L2CAP_CONN_SREJ_SENT
;
3568 l2cap_send_ack(chan
);
3569 BT_DBG("chan %p, Exit SREJ_SENT", chan
);
3572 struct srej_list
*l
;
3574 /* duplicated tx_seq */
3575 if (l2cap_add_to_srej_queue(chan
, skb
, tx_seq
, sar
) < 0)
3578 list_for_each_entry(l
, &chan
->srej_l
, list
) {
3579 if (l
->tx_seq
== tx_seq
) {
3580 l2cap_resend_srejframe(chan
, tx_seq
);
3584 l2cap_send_srejframe(chan
, tx_seq
);
3587 expected_tx_seq_offset
=
3588 (chan
->expected_tx_seq
- chan
->buffer_seq
) % 64;
3589 if (expected_tx_seq_offset
< 0)
3590 expected_tx_seq_offset
+= 64;
3592 /* duplicated tx_seq */
3593 if (tx_seq_offset
< expected_tx_seq_offset
)
3596 chan
->conn_state
|= L2CAP_CONN_SREJ_SENT
;
3598 BT_DBG("chan %p, Enter SREJ", chan
);
3600 INIT_LIST_HEAD(&chan
->srej_l
);
3601 chan
->buffer_seq_srej
= chan
->buffer_seq
;
3603 __skb_queue_head_init(&chan
->srej_q
);
3604 __skb_queue_head_init(&chan
->busy_q
);
3605 l2cap_add_to_srej_queue(chan
, skb
, tx_seq
, sar
);
3607 chan
->conn_state
|= L2CAP_CONN_SEND_PBIT
;
3609 l2cap_send_srejframe(chan
, tx_seq
);
3611 __clear_ack_timer(chan
);
3616 chan
->expected_tx_seq
= (chan
->expected_tx_seq
+ 1) % 64;
3618 if (chan
->conn_state
& L2CAP_CONN_SREJ_SENT
) {
3619 bt_cb(skb
)->tx_seq
= tx_seq
;
3620 bt_cb(skb
)->sar
= sar
;
3621 __skb_queue_tail(&chan
->srej_q
, skb
);
3625 err
= l2cap_push_rx_skb(chan
, skb
, rx_control
);
3629 if (rx_control
& L2CAP_CTRL_FINAL
) {
3630 if (chan
->conn_state
& L2CAP_CONN_REJ_ACT
)
3631 chan
->conn_state
&= ~L2CAP_CONN_REJ_ACT
;
3633 l2cap_retransmit_frames(chan
);
3636 __set_ack_timer(chan
);
3638 chan
->num_acked
= (chan
->num_acked
+ 1) % num_to_ack
;
3639 if (chan
->num_acked
== num_to_ack
- 1)
3640 l2cap_send_ack(chan
);
3649 static inline void l2cap_data_channel_rrframe(struct l2cap_chan
*chan
, u16 rx_control
)
3651 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan
, __get_reqseq(rx_control
),
3654 chan
->expected_ack_seq
= __get_reqseq(rx_control
);
3655 l2cap_drop_acked_frames(chan
);
3657 if (rx_control
& L2CAP_CTRL_POLL
) {
3658 chan
->conn_state
|= L2CAP_CONN_SEND_FBIT
;
3659 if (chan
->conn_state
& L2CAP_CONN_SREJ_SENT
) {
3660 if ((chan
->conn_state
& L2CAP_CONN_REMOTE_BUSY
) &&
3661 (chan
->unacked_frames
> 0))
3662 __set_retrans_timer(chan
);
3664 chan
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3665 l2cap_send_srejtail(chan
);
3667 l2cap_send_i_or_rr_or_rnr(chan
);
3670 } else if (rx_control
& L2CAP_CTRL_FINAL
) {
3671 chan
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3673 if (chan
->conn_state
& L2CAP_CONN_REJ_ACT
)
3674 chan
->conn_state
&= ~L2CAP_CONN_REJ_ACT
;
3676 l2cap_retransmit_frames(chan
);
3679 if ((chan
->conn_state
& L2CAP_CONN_REMOTE_BUSY
) &&
3680 (chan
->unacked_frames
> 0))
3681 __set_retrans_timer(chan
);
3683 chan
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3684 if (chan
->conn_state
& L2CAP_CONN_SREJ_SENT
)
3685 l2cap_send_ack(chan
);
3687 l2cap_ertm_send(chan
);
3691 static inline void l2cap_data_channel_rejframe(struct l2cap_chan
*chan
, u16 rx_control
)
3693 u8 tx_seq
= __get_reqseq(rx_control
);
3695 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan
, tx_seq
, rx_control
);
3697 chan
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3699 chan
->expected_ack_seq
= tx_seq
;
3700 l2cap_drop_acked_frames(chan
);
3702 if (rx_control
& L2CAP_CTRL_FINAL
) {
3703 if (chan
->conn_state
& L2CAP_CONN_REJ_ACT
)
3704 chan
->conn_state
&= ~L2CAP_CONN_REJ_ACT
;
3706 l2cap_retransmit_frames(chan
);
3708 l2cap_retransmit_frames(chan
);
3710 if (chan
->conn_state
& L2CAP_CONN_WAIT_F
)
3711 chan
->conn_state
|= L2CAP_CONN_REJ_ACT
;
3714 static inline void l2cap_data_channel_srejframe(struct l2cap_chan
*chan
, u16 rx_control
)
3716 u8 tx_seq
= __get_reqseq(rx_control
);
3718 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan
, tx_seq
, rx_control
);
3720 chan
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3722 if (rx_control
& L2CAP_CTRL_POLL
) {
3723 chan
->expected_ack_seq
= tx_seq
;
3724 l2cap_drop_acked_frames(chan
);
3726 chan
->conn_state
|= L2CAP_CONN_SEND_FBIT
;
3727 l2cap_retransmit_one_frame(chan
, tx_seq
);
3729 l2cap_ertm_send(chan
);
3731 if (chan
->conn_state
& L2CAP_CONN_WAIT_F
) {
3732 chan
->srej_save_reqseq
= tx_seq
;
3733 chan
->conn_state
|= L2CAP_CONN_SREJ_ACT
;
3735 } else if (rx_control
& L2CAP_CTRL_FINAL
) {
3736 if ((chan
->conn_state
& L2CAP_CONN_SREJ_ACT
) &&
3737 chan
->srej_save_reqseq
== tx_seq
)
3738 chan
->conn_state
&= ~L2CAP_CONN_SREJ_ACT
;
3740 l2cap_retransmit_one_frame(chan
, tx_seq
);
3742 l2cap_retransmit_one_frame(chan
, tx_seq
);
3743 if (chan
->conn_state
& L2CAP_CONN_WAIT_F
) {
3744 chan
->srej_save_reqseq
= tx_seq
;
3745 chan
->conn_state
|= L2CAP_CONN_SREJ_ACT
;
3750 static inline void l2cap_data_channel_rnrframe(struct l2cap_chan
*chan
, u16 rx_control
)
3752 u8 tx_seq
= __get_reqseq(rx_control
);
3754 BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan
, tx_seq
, rx_control
);
3756 chan
->conn_state
|= L2CAP_CONN_REMOTE_BUSY
;
3757 chan
->expected_ack_seq
= tx_seq
;
3758 l2cap_drop_acked_frames(chan
);
3760 if (rx_control
& L2CAP_CTRL_POLL
)
3761 chan
->conn_state
|= L2CAP_CONN_SEND_FBIT
;
3763 if (!(chan
->conn_state
& L2CAP_CONN_SREJ_SENT
)) {
3764 __clear_retrans_timer(chan
);
3765 if (rx_control
& L2CAP_CTRL_POLL
)
3766 l2cap_send_rr_or_rnr(chan
, L2CAP_CTRL_FINAL
);
3770 if (rx_control
& L2CAP_CTRL_POLL
)
3771 l2cap_send_srejtail(chan
);
3773 l2cap_send_sframe(chan
, L2CAP_SUPER_RCV_READY
);
3776 static inline int l2cap_data_channel_sframe(struct l2cap_chan
*chan
, u16 rx_control
, struct sk_buff
*skb
)
3778 BT_DBG("chan %p rx_control 0x%4.4x len %d", chan
, rx_control
, skb
->len
);
3780 if (L2CAP_CTRL_FINAL
& rx_control
&&
3781 chan
->conn_state
& L2CAP_CONN_WAIT_F
) {
3782 __clear_monitor_timer(chan
);
3783 if (chan
->unacked_frames
> 0)
3784 __set_retrans_timer(chan
);
3785 chan
->conn_state
&= ~L2CAP_CONN_WAIT_F
;
3788 switch (rx_control
& L2CAP_CTRL_SUPERVISE
) {
3789 case L2CAP_SUPER_RCV_READY
:
3790 l2cap_data_channel_rrframe(chan
, rx_control
);
3793 case L2CAP_SUPER_REJECT
:
3794 l2cap_data_channel_rejframe(chan
, rx_control
);
3797 case L2CAP_SUPER_SELECT_REJECT
:
3798 l2cap_data_channel_srejframe(chan
, rx_control
);
3801 case L2CAP_SUPER_RCV_NOT_READY
:
3802 l2cap_data_channel_rnrframe(chan
, rx_control
);
3810 static int l2cap_ertm_data_rcv(struct sock
*sk
, struct sk_buff
*skb
)
3812 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
3815 int len
, next_tx_seq_offset
, req_seq_offset
;
3817 control
= get_unaligned_le16(skb
->data
);
3822 * We can just drop the corrupted I-frame here.
3823 * Receiver will miss it and start proper recovery
3824 * procedures and ask retransmission.
3826 if (l2cap_check_fcs(chan
, skb
))
3829 if (__is_sar_start(control
) && __is_iframe(control
))
3832 if (chan
->fcs
== L2CAP_FCS_CRC16
)
3835 if (len
> chan
->mps
) {
3836 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3840 req_seq
= __get_reqseq(control
);
3841 req_seq_offset
= (req_seq
- chan
->expected_ack_seq
) % 64;
3842 if (req_seq_offset
< 0)
3843 req_seq_offset
+= 64;
3845 next_tx_seq_offset
=
3846 (chan
->next_tx_seq
- chan
->expected_ack_seq
) % 64;
3847 if (next_tx_seq_offset
< 0)
3848 next_tx_seq_offset
+= 64;
3850 /* check for invalid req-seq */
3851 if (req_seq_offset
> next_tx_seq_offset
) {
3852 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3856 if (__is_iframe(control
)) {
3858 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3862 l2cap_data_channel_iframe(chan
, control
, skb
);
3866 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3870 l2cap_data_channel_sframe(chan
, control
, skb
);
3880 static inline int l2cap_data_channel(struct l2cap_conn
*conn
, u16 cid
, struct sk_buff
*skb
)
3882 struct l2cap_chan
*chan
;
3883 struct sock
*sk
= NULL
;
3888 chan
= l2cap_get_chan_by_scid(conn
, cid
);
3890 BT_DBG("unknown cid 0x%4.4x", cid
);
3896 BT_DBG("chan %p, len %d", chan
, skb
->len
);
3898 if (chan
->state
!= BT_CONNECTED
)
3901 switch (chan
->mode
) {
3902 case L2CAP_MODE_BASIC
:
3903 /* If socket recv buffers overflows we drop data here
3904 * which is *bad* because L2CAP has to be reliable.
3905 * But we don't have any other choice. L2CAP doesn't
3906 * provide flow control mechanism. */
3908 if (chan
->imtu
< skb
->len
)
3911 if (!chan
->ops
->recv(chan
->data
, skb
))
3915 case L2CAP_MODE_ERTM
:
3916 if (!sock_owned_by_user(sk
)) {
3917 l2cap_ertm_data_rcv(sk
, skb
);
3919 if (sk_add_backlog(sk
, skb
))
3925 case L2CAP_MODE_STREAMING
:
3926 control
= get_unaligned_le16(skb
->data
);
3930 if (l2cap_check_fcs(chan
, skb
))
3933 if (__is_sar_start(control
))
3936 if (chan
->fcs
== L2CAP_FCS_CRC16
)
3939 if (len
> chan
->mps
|| len
< 0 || __is_sframe(control
))
3942 tx_seq
= __get_txseq(control
);
3944 if (chan
->expected_tx_seq
== tx_seq
)
3945 chan
->expected_tx_seq
= (chan
->expected_tx_seq
+ 1) % 64;
3947 chan
->expected_tx_seq
= (tx_seq
+ 1) % 64;
3949 l2cap_streaming_reassembly_sdu(chan
, skb
, control
);
3954 BT_DBG("chan %p: bad mode 0x%2.2x", chan
, chan
->mode
);
3968 static inline int l2cap_conless_channel(struct l2cap_conn
*conn
, __le16 psm
, struct sk_buff
*skb
)
3970 struct sock
*sk
= NULL
;
3971 struct l2cap_chan
*chan
;
3973 chan
= l2cap_global_chan_by_psm(0, psm
, conn
->src
);
3981 BT_DBG("sk %p, len %d", sk
, skb
->len
);
3983 if (chan
->state
!= BT_BOUND
&& chan
->state
!= BT_CONNECTED
)
3986 if (l2cap_pi(sk
)->chan
->imtu
< skb
->len
)
3989 if (!chan
->ops
->recv(chan
->data
, skb
))
4001 static inline int l2cap_att_channel(struct l2cap_conn
*conn
, __le16 cid
, struct sk_buff
*skb
)
4003 struct sock
*sk
= NULL
;
4004 struct l2cap_chan
*chan
;
4006 chan
= l2cap_global_chan_by_scid(0, cid
, conn
->src
);
4014 BT_DBG("sk %p, len %d", sk
, skb
->len
);
4016 if (chan
->state
!= BT_BOUND
&& chan
->state
!= BT_CONNECTED
)
4019 if (l2cap_pi(sk
)->chan
->imtu
< skb
->len
)
4022 if (!chan
->ops
->recv(chan
->data
, skb
))
4034 static void l2cap_recv_frame(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
4036 struct l2cap_hdr
*lh
= (void *) skb
->data
;
4040 skb_pull(skb
, L2CAP_HDR_SIZE
);
4041 cid
= __le16_to_cpu(lh
->cid
);
4042 len
= __le16_to_cpu(lh
->len
);
4044 if (len
!= skb
->len
) {
4049 BT_DBG("len %d, cid 0x%4.4x", len
, cid
);
4052 case L2CAP_CID_LE_SIGNALING
:
4053 case L2CAP_CID_SIGNALING
:
4054 l2cap_sig_channel(conn
, skb
);
4057 case L2CAP_CID_CONN_LESS
:
4058 psm
= get_unaligned_le16(skb
->data
);
4060 l2cap_conless_channel(conn
, psm
, skb
);
4063 case L2CAP_CID_LE_DATA
:
4064 l2cap_att_channel(conn
, cid
, skb
);
4068 if (smp_sig_channel(conn
, skb
))
4069 l2cap_conn_del(conn
->hcon
, EACCES
);
4073 l2cap_data_channel(conn
, cid
, skb
);
4078 /* ---- L2CAP interface with lower layer (HCI) ---- */
4080 static int l2cap_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
4082 int exact
= 0, lm1
= 0, lm2
= 0;
4083 struct l2cap_chan
*c
;
4085 if (type
!= ACL_LINK
)
4088 BT_DBG("hdev %s, bdaddr %s", hdev
->name
, batostr(bdaddr
));
4090 /* Find listening sockets and check their link_mode */
4091 read_lock(&chan_list_lock
);
4092 list_for_each_entry(c
, &chan_list
, global_l
) {
4093 struct sock
*sk
= c
->sk
;
4095 if (c
->state
!= BT_LISTEN
)
4098 if (!bacmp(&bt_sk(sk
)->src
, &hdev
->bdaddr
)) {
4099 lm1
|= HCI_LM_ACCEPT
;
4101 lm1
|= HCI_LM_MASTER
;
4103 } else if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
)) {
4104 lm2
|= HCI_LM_ACCEPT
;
4106 lm2
|= HCI_LM_MASTER
;
4109 read_unlock(&chan_list_lock
);
4111 return exact
? lm1
: lm2
;
4114 static int l2cap_connect_cfm(struct hci_conn
*hcon
, u8 status
)
4116 struct l2cap_conn
*conn
;
4118 BT_DBG("hcon %p bdaddr %s status %d", hcon
, batostr(&hcon
->dst
), status
);
4120 if (!(hcon
->type
== ACL_LINK
|| hcon
->type
== LE_LINK
))
4124 conn
= l2cap_conn_add(hcon
, status
);
4126 l2cap_conn_ready(conn
);
4128 l2cap_conn_del(hcon
, bt_err(status
));
4133 static int l2cap_disconn_ind(struct hci_conn
*hcon
)
4135 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
4137 BT_DBG("hcon %p", hcon
);
4139 if ((hcon
->type
!= ACL_LINK
&& hcon
->type
!= LE_LINK
) || !conn
)
4142 return conn
->disc_reason
;
4145 static int l2cap_disconn_cfm(struct hci_conn
*hcon
, u8 reason
)
4147 BT_DBG("hcon %p reason %d", hcon
, reason
);
4149 if (!(hcon
->type
== ACL_LINK
|| hcon
->type
== LE_LINK
))
4152 l2cap_conn_del(hcon
, bt_err(reason
));
4157 static inline void l2cap_check_encryption(struct l2cap_chan
*chan
, u8 encrypt
)
4159 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
)
4162 if (encrypt
== 0x00) {
4163 if (chan
->sec_level
== BT_SECURITY_MEDIUM
) {
4164 __clear_chan_timer(chan
);
4165 __set_chan_timer(chan
, HZ
* 5);
4166 } else if (chan
->sec_level
== BT_SECURITY_HIGH
)
4167 l2cap_chan_close(chan
, ECONNREFUSED
);
4169 if (chan
->sec_level
== BT_SECURITY_MEDIUM
)
4170 __clear_chan_timer(chan
);
4174 static int l2cap_security_cfm(struct hci_conn
*hcon
, u8 status
, u8 encrypt
)
4176 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
4177 struct l2cap_chan
*chan
;
4182 BT_DBG("conn %p", conn
);
4184 read_lock(&conn
->chan_lock
);
4186 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
4187 struct sock
*sk
= chan
->sk
;
4191 if (chan
->conf_state
& L2CAP_CONF_CONNECT_PEND
) {
4196 if (!status
&& (chan
->state
== BT_CONNECTED
||
4197 chan
->state
== BT_CONFIG
)) {
4198 l2cap_check_encryption(chan
, encrypt
);
4203 if (chan
->state
== BT_CONNECT
) {
4205 struct l2cap_conn_req req
;
4206 req
.scid
= cpu_to_le16(chan
->scid
);
4207 req
.psm
= chan
->psm
;
4209 chan
->ident
= l2cap_get_ident(conn
);
4210 chan
->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
4212 l2cap_send_cmd(conn
, chan
->ident
,
4213 L2CAP_CONN_REQ
, sizeof(req
), &req
);
4215 __clear_chan_timer(chan
);
4216 __set_chan_timer(chan
, HZ
/ 10);
4218 } else if (chan
->state
== BT_CONNECT2
) {
4219 struct l2cap_conn_rsp rsp
;
4223 l2cap_state_change(chan
, BT_CONFIG
);
4224 result
= L2CAP_CR_SUCCESS
;
4226 l2cap_state_change(chan
, BT_DISCONN
);
4227 __set_chan_timer(chan
, HZ
/ 10);
4228 result
= L2CAP_CR_SEC_BLOCK
;
4231 rsp
.scid
= cpu_to_le16(chan
->dcid
);
4232 rsp
.dcid
= cpu_to_le16(chan
->scid
);
4233 rsp
.result
= cpu_to_le16(result
);
4234 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
4235 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
4242 read_unlock(&conn
->chan_lock
);
4247 static int l2cap_recv_acldata(struct hci_conn
*hcon
, struct sk_buff
*skb
, u16 flags
)
4249 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
4252 conn
= l2cap_conn_add(hcon
, 0);
4257 BT_DBG("conn %p len %d flags 0x%x", conn
, skb
->len
, flags
);
4259 if (!(flags
& ACL_CONT
)) {
4260 struct l2cap_hdr
*hdr
;
4261 struct l2cap_chan
*chan
;
4266 BT_ERR("Unexpected start frame (len %d)", skb
->len
);
4267 kfree_skb(conn
->rx_skb
);
4268 conn
->rx_skb
= NULL
;
4270 l2cap_conn_unreliable(conn
, ECOMM
);
4273 /* Start fragment always begin with Basic L2CAP header */
4274 if (skb
->len
< L2CAP_HDR_SIZE
) {
4275 BT_ERR("Frame is too short (len %d)", skb
->len
);
4276 l2cap_conn_unreliable(conn
, ECOMM
);
4280 hdr
= (struct l2cap_hdr
*) skb
->data
;
4281 len
= __le16_to_cpu(hdr
->len
) + L2CAP_HDR_SIZE
;
4282 cid
= __le16_to_cpu(hdr
->cid
);
4284 if (len
== skb
->len
) {
4285 /* Complete frame received */
4286 l2cap_recv_frame(conn
, skb
);
4290 BT_DBG("Start: total len %d, frag len %d", len
, skb
->len
);
4292 if (skb
->len
> len
) {
4293 BT_ERR("Frame is too long (len %d, expected len %d)",
4295 l2cap_conn_unreliable(conn
, ECOMM
);
4299 chan
= l2cap_get_chan_by_scid(conn
, cid
);
4301 if (chan
&& chan
->sk
) {
4302 struct sock
*sk
= chan
->sk
;
4304 if (chan
->imtu
< len
- L2CAP_HDR_SIZE
) {
4305 BT_ERR("Frame exceeding recv MTU (len %d, "
4309 l2cap_conn_unreliable(conn
, ECOMM
);
4315 /* Allocate skb for the complete frame (with header) */
4316 conn
->rx_skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
4320 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
4322 conn
->rx_len
= len
- skb
->len
;
4324 BT_DBG("Cont: frag len %d (expecting %d)", skb
->len
, conn
->rx_len
);
4326 if (!conn
->rx_len
) {
4327 BT_ERR("Unexpected continuation frame (len %d)", skb
->len
);
4328 l2cap_conn_unreliable(conn
, ECOMM
);
4332 if (skb
->len
> conn
->rx_len
) {
4333 BT_ERR("Fragment is too long (len %d, expected %d)",
4334 skb
->len
, conn
->rx_len
);
4335 kfree_skb(conn
->rx_skb
);
4336 conn
->rx_skb
= NULL
;
4338 l2cap_conn_unreliable(conn
, ECOMM
);
4342 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
4344 conn
->rx_len
-= skb
->len
;
4346 if (!conn
->rx_len
) {
4347 /* Complete frame received */
4348 l2cap_recv_frame(conn
, conn
->rx_skb
);
4349 conn
->rx_skb
= NULL
;
4358 static int l2cap_debugfs_show(struct seq_file
*f
, void *p
)
4360 struct l2cap_chan
*c
;
4362 read_lock_bh(&chan_list_lock
);
4364 list_for_each_entry(c
, &chan_list
, global_l
) {
4365 struct sock
*sk
= c
->sk
;
4367 seq_printf(f
, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4368 batostr(&bt_sk(sk
)->src
),
4369 batostr(&bt_sk(sk
)->dst
),
4370 c
->state
, __le16_to_cpu(c
->psm
),
4371 c
->scid
, c
->dcid
, c
->imtu
, c
->omtu
,
4372 c
->sec_level
, c
->mode
);
4375 read_unlock_bh(&chan_list_lock
);
4380 static int l2cap_debugfs_open(struct inode
*inode
, struct file
*file
)
4382 return single_open(file
, l2cap_debugfs_show
, inode
->i_private
);
4385 static const struct file_operations l2cap_debugfs_fops
= {
4386 .open
= l2cap_debugfs_open
,
4388 .llseek
= seq_lseek
,
4389 .release
= single_release
,
4392 static struct dentry
*l2cap_debugfs
;
4394 static struct hci_proto l2cap_hci_proto
= {
4396 .id
= HCI_PROTO_L2CAP
,
4397 .connect_ind
= l2cap_connect_ind
,
4398 .connect_cfm
= l2cap_connect_cfm
,
4399 .disconn_ind
= l2cap_disconn_ind
,
4400 .disconn_cfm
= l2cap_disconn_cfm
,
4401 .security_cfm
= l2cap_security_cfm
,
4402 .recv_acldata
= l2cap_recv_acldata
4405 int __init
l2cap_init(void)
4409 err
= l2cap_init_sockets();
4413 _busy_wq
= create_singlethread_workqueue("l2cap");
4419 err
= hci_register_proto(&l2cap_hci_proto
);
4421 BT_ERR("L2CAP protocol registration failed");
4422 bt_sock_unregister(BTPROTO_L2CAP
);
4427 l2cap_debugfs
= debugfs_create_file("l2cap", 0444,
4428 bt_debugfs
, NULL
, &l2cap_debugfs_fops
);
4430 BT_ERR("Failed to create L2CAP debug file");
4436 destroy_workqueue(_busy_wq
);
4437 l2cap_cleanup_sockets();
4441 void l2cap_exit(void)
4443 debugfs_remove(l2cap_debugfs
);
4445 flush_workqueue(_busy_wq
);
4446 destroy_workqueue(_busy_wq
);
4448 if (hci_unregister_proto(&l2cap_hci_proto
) < 0)
4449 BT_ERR("L2CAP protocol unregistration failed");
4451 l2cap_cleanup_sockets();
4454 module_param(disable_ertm
, bool, 0644);
4455 MODULE_PARM_DESC(disable_ertm
, "Disable enhanced retransmission mode");