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.
6 Copyright (C) 2011 ProFUSION Embedded Systems
8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License version 2 as
12 published by the Free Software Foundation;
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
17 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
18 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
24 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
25 SOFTWARE IS DISCLAIMED.
28 /* Bluetooth L2CAP core. */
30 #include <linux/module.h>
32 #include <linux/types.h>
33 #include <linux/capability.h>
34 #include <linux/errno.h>
35 #include <linux/kernel.h>
36 #include <linux/sched.h>
37 #include <linux/slab.h>
38 #include <linux/poll.h>
39 #include <linux/fcntl.h>
40 #include <linux/init.h>
41 #include <linux/interrupt.h>
42 #include <linux/socket.h>
43 #include <linux/skbuff.h>
44 #include <linux/list.h>
45 #include <linux/device.h>
46 #include <linux/debugfs.h>
47 #include <linux/seq_file.h>
48 #include <linux/uaccess.h>
49 #include <linux/crc16.h>
52 #include <asm/system.h>
53 #include <asm/unaligned.h>
55 #include <net/bluetooth/bluetooth.h>
56 #include <net/bluetooth/hci_core.h>
57 #include <net/bluetooth/l2cap.h>
58 #include <net/bluetooth/smp.h>
62 static u32 l2cap_feat_mask
= L2CAP_FEAT_FIXED_CHAN
;
63 static u8 l2cap_fixed_chan
[8] = { L2CAP_FC_L2CAP
, };
65 static LIST_HEAD(chan_list
);
66 static DEFINE_RWLOCK(chan_list_lock
);
68 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
69 u8 code
, u8 ident
, u16 dlen
, void *data
);
70 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
,
72 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
);
73 static void l2cap_send_disconn_req(struct l2cap_conn
*conn
,
74 struct l2cap_chan
*chan
, int err
);
76 /* ---- L2CAP channels ---- */
78 static struct l2cap_chan
*__l2cap_get_chan_by_dcid(struct l2cap_conn
*conn
, u16 cid
)
82 list_for_each_entry(c
, &conn
->chan_l
, list
) {
89 static struct l2cap_chan
*__l2cap_get_chan_by_scid(struct l2cap_conn
*conn
, u16 cid
)
93 list_for_each_entry(c
, &conn
->chan_l
, list
) {
100 /* Find channel with given SCID.
101 * Returns locked socket */
102 static struct l2cap_chan
*l2cap_get_chan_by_scid(struct l2cap_conn
*conn
, u16 cid
)
104 struct l2cap_chan
*c
;
106 mutex_lock(&conn
->chan_lock
);
107 c
= __l2cap_get_chan_by_scid(conn
, cid
);
108 mutex_unlock(&conn
->chan_lock
);
113 static struct l2cap_chan
*__l2cap_get_chan_by_ident(struct l2cap_conn
*conn
, u8 ident
)
115 struct l2cap_chan
*c
;
117 list_for_each_entry(c
, &conn
->chan_l
, list
) {
118 if (c
->ident
== ident
)
124 static inline struct l2cap_chan
*l2cap_get_chan_by_ident(struct l2cap_conn
*conn
, u8 ident
)
126 struct l2cap_chan
*c
;
128 mutex_lock(&conn
->chan_lock
);
129 c
= __l2cap_get_chan_by_ident(conn
, ident
);
130 mutex_unlock(&conn
->chan_lock
);
135 static struct l2cap_chan
*__l2cap_global_chan_by_addr(__le16 psm
, bdaddr_t
*src
)
137 struct l2cap_chan
*c
;
139 list_for_each_entry(c
, &chan_list
, global_l
) {
140 if (c
->sport
== psm
&& !bacmp(&bt_sk(c
->sk
)->src
, src
))
146 int l2cap_add_psm(struct l2cap_chan
*chan
, bdaddr_t
*src
, __le16 psm
)
150 write_lock(&chan_list_lock
);
152 if (psm
&& __l2cap_global_chan_by_addr(psm
, src
)) {
165 for (p
= 0x1001; p
< 0x1100; p
+= 2)
166 if (!__l2cap_global_chan_by_addr(cpu_to_le16(p
), src
)) {
167 chan
->psm
= cpu_to_le16(p
);
168 chan
->sport
= cpu_to_le16(p
);
175 write_unlock(&chan_list_lock
);
179 int l2cap_add_scid(struct l2cap_chan
*chan
, __u16 scid
)
181 write_lock(&chan_list_lock
);
185 write_unlock(&chan_list_lock
);
190 static u16
l2cap_alloc_cid(struct l2cap_conn
*conn
)
192 u16 cid
= L2CAP_CID_DYN_START
;
194 for (; cid
< L2CAP_CID_DYN_END
; cid
++) {
195 if (!__l2cap_get_chan_by_scid(conn
, cid
))
202 static void __l2cap_state_change(struct l2cap_chan
*chan
, int state
)
204 BT_DBG("chan %p %s -> %s", chan
, state_to_string(chan
->state
),
205 state_to_string(state
));
208 chan
->ops
->state_change(chan
->data
, state
);
211 static void l2cap_state_change(struct l2cap_chan
*chan
, int state
)
213 struct sock
*sk
= chan
->sk
;
216 __l2cap_state_change(chan
, state
);
220 static inline void __l2cap_chan_set_err(struct l2cap_chan
*chan
, int err
)
222 struct sock
*sk
= chan
->sk
;
227 static inline void l2cap_chan_set_err(struct l2cap_chan
*chan
, int err
)
229 struct sock
*sk
= chan
->sk
;
232 __l2cap_chan_set_err(chan
, err
);
236 static void l2cap_chan_timeout(struct work_struct
*work
)
238 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
240 struct l2cap_conn
*conn
= chan
->conn
;
243 BT_DBG("chan %p state %s", chan
, state_to_string(chan
->state
));
245 mutex_lock(&conn
->chan_lock
);
246 l2cap_chan_lock(chan
);
248 if (chan
->state
== BT_CONNECTED
|| chan
->state
== BT_CONFIG
)
249 reason
= ECONNREFUSED
;
250 else if (chan
->state
== BT_CONNECT
&&
251 chan
->sec_level
!= BT_SECURITY_SDP
)
252 reason
= ECONNREFUSED
;
256 l2cap_chan_close(chan
, reason
);
258 l2cap_chan_unlock(chan
);
260 chan
->ops
->close(chan
->data
);
261 mutex_unlock(&conn
->chan_lock
);
263 l2cap_chan_put(chan
);
266 struct l2cap_chan
*l2cap_chan_create(struct sock
*sk
)
268 struct l2cap_chan
*chan
;
270 chan
= kzalloc(sizeof(*chan
), GFP_ATOMIC
);
274 mutex_init(&chan
->lock
);
278 write_lock(&chan_list_lock
);
279 list_add(&chan
->global_l
, &chan_list
);
280 write_unlock(&chan_list_lock
);
282 INIT_DELAYED_WORK(&chan
->chan_timer
, l2cap_chan_timeout
);
284 chan
->state
= BT_OPEN
;
286 atomic_set(&chan
->refcnt
, 1);
288 BT_DBG("sk %p chan %p", sk
, chan
);
293 void l2cap_chan_destroy(struct l2cap_chan
*chan
)
295 write_lock(&chan_list_lock
);
296 list_del(&chan
->global_l
);
297 write_unlock(&chan_list_lock
);
299 l2cap_chan_put(chan
);
302 void __l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
304 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn
,
305 chan
->psm
, chan
->dcid
);
307 conn
->disc_reason
= HCI_ERROR_REMOTE_USER_TERM
;
311 switch (chan
->chan_type
) {
312 case L2CAP_CHAN_CONN_ORIENTED
:
313 if (conn
->hcon
->type
== LE_LINK
) {
315 chan
->omtu
= L2CAP_LE_DEFAULT_MTU
;
316 chan
->scid
= L2CAP_CID_LE_DATA
;
317 chan
->dcid
= L2CAP_CID_LE_DATA
;
319 /* Alloc CID for connection-oriented socket */
320 chan
->scid
= l2cap_alloc_cid(conn
);
321 chan
->omtu
= L2CAP_DEFAULT_MTU
;
325 case L2CAP_CHAN_CONN_LESS
:
326 /* Connectionless socket */
327 chan
->scid
= L2CAP_CID_CONN_LESS
;
328 chan
->dcid
= L2CAP_CID_CONN_LESS
;
329 chan
->omtu
= L2CAP_DEFAULT_MTU
;
333 /* Raw socket can send/recv signalling messages only */
334 chan
->scid
= L2CAP_CID_SIGNALING
;
335 chan
->dcid
= L2CAP_CID_SIGNALING
;
336 chan
->omtu
= L2CAP_DEFAULT_MTU
;
339 chan
->local_id
= L2CAP_BESTEFFORT_ID
;
340 chan
->local_stype
= L2CAP_SERV_BESTEFFORT
;
341 chan
->local_msdu
= L2CAP_DEFAULT_MAX_SDU_SIZE
;
342 chan
->local_sdu_itime
= L2CAP_DEFAULT_SDU_ITIME
;
343 chan
->local_acc_lat
= L2CAP_DEFAULT_ACC_LAT
;
344 chan
->local_flush_to
= L2CAP_DEFAULT_FLUSH_TO
;
346 l2cap_chan_hold(chan
);
348 list_add(&chan
->list
, &conn
->chan_l
);
351 void l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
353 mutex_lock(&conn
->chan_lock
);
354 __l2cap_chan_add(conn
, chan
);
355 mutex_unlock(&conn
->chan_lock
);
358 static void l2cap_chan_del(struct l2cap_chan
*chan
, int err
)
360 struct sock
*sk
= chan
->sk
;
361 struct l2cap_conn
*conn
= chan
->conn
;
362 struct sock
*parent
= bt_sk(sk
)->parent
;
364 __clear_chan_timer(chan
);
366 BT_DBG("chan %p, conn %p, err %d", chan
, conn
, err
);
369 /* Delete from channel list */
370 list_del(&chan
->list
);
372 l2cap_chan_put(chan
);
375 hci_conn_put(conn
->hcon
);
380 __l2cap_state_change(chan
, BT_CLOSED
);
381 sock_set_flag(sk
, SOCK_ZAPPED
);
384 __l2cap_chan_set_err(chan
, err
);
387 bt_accept_unlink(sk
);
388 parent
->sk_data_ready(parent
, 0);
390 sk
->sk_state_change(sk
);
394 if (!(test_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
) &&
395 test_bit(CONF_INPUT_DONE
, &chan
->conf_state
)))
398 skb_queue_purge(&chan
->tx_q
);
400 if (chan
->mode
== L2CAP_MODE_ERTM
) {
401 struct srej_list
*l
, *tmp
;
403 __clear_retrans_timer(chan
);
404 __clear_monitor_timer(chan
);
405 __clear_ack_timer(chan
);
407 skb_queue_purge(&chan
->srej_q
);
409 list_for_each_entry_safe(l
, tmp
, &chan
->srej_l
, list
) {
416 static void l2cap_chan_cleanup_listen(struct sock
*parent
)
420 BT_DBG("parent %p", parent
);
422 /* Close not yet accepted channels */
423 while ((sk
= bt_accept_dequeue(parent
, NULL
))) {
424 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
426 l2cap_chan_lock(chan
);
427 __clear_chan_timer(chan
);
428 l2cap_chan_close(chan
, ECONNRESET
);
429 l2cap_chan_unlock(chan
);
431 chan
->ops
->close(chan
->data
);
435 void l2cap_chan_close(struct l2cap_chan
*chan
, int reason
)
437 struct l2cap_conn
*conn
= chan
->conn
;
438 struct sock
*sk
= chan
->sk
;
440 BT_DBG("chan %p state %s sk %p", chan
,
441 state_to_string(chan
->state
), sk
);
443 switch (chan
->state
) {
446 l2cap_chan_cleanup_listen(sk
);
448 __l2cap_state_change(chan
, BT_CLOSED
);
449 sock_set_flag(sk
, SOCK_ZAPPED
);
455 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
456 conn
->hcon
->type
== ACL_LINK
) {
457 __clear_chan_timer(chan
);
458 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
459 l2cap_send_disconn_req(conn
, chan
, reason
);
461 l2cap_chan_del(chan
, reason
);
465 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
466 conn
->hcon
->type
== ACL_LINK
) {
467 struct l2cap_conn_rsp rsp
;
470 if (bt_sk(sk
)->defer_setup
)
471 result
= L2CAP_CR_SEC_BLOCK
;
473 result
= L2CAP_CR_BAD_PSM
;
474 l2cap_state_change(chan
, BT_DISCONN
);
476 rsp
.scid
= cpu_to_le16(chan
->dcid
);
477 rsp
.dcid
= cpu_to_le16(chan
->scid
);
478 rsp
.result
= cpu_to_le16(result
);
479 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
480 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
484 l2cap_chan_del(chan
, reason
);
489 l2cap_chan_del(chan
, reason
);
494 sock_set_flag(sk
, SOCK_ZAPPED
);
500 static inline u8
l2cap_get_auth_type(struct l2cap_chan
*chan
)
502 if (chan
->chan_type
== L2CAP_CHAN_RAW
) {
503 switch (chan
->sec_level
) {
504 case BT_SECURITY_HIGH
:
505 return HCI_AT_DEDICATED_BONDING_MITM
;
506 case BT_SECURITY_MEDIUM
:
507 return HCI_AT_DEDICATED_BONDING
;
509 return HCI_AT_NO_BONDING
;
511 } else if (chan
->psm
== cpu_to_le16(0x0001)) {
512 if (chan
->sec_level
== BT_SECURITY_LOW
)
513 chan
->sec_level
= BT_SECURITY_SDP
;
515 if (chan
->sec_level
== BT_SECURITY_HIGH
)
516 return HCI_AT_NO_BONDING_MITM
;
518 return HCI_AT_NO_BONDING
;
520 switch (chan
->sec_level
) {
521 case BT_SECURITY_HIGH
:
522 return HCI_AT_GENERAL_BONDING_MITM
;
523 case BT_SECURITY_MEDIUM
:
524 return HCI_AT_GENERAL_BONDING
;
526 return HCI_AT_NO_BONDING
;
531 /* Service level security */
532 int l2cap_chan_check_security(struct l2cap_chan
*chan
)
534 struct l2cap_conn
*conn
= chan
->conn
;
537 auth_type
= l2cap_get_auth_type(chan
);
539 return hci_conn_security(conn
->hcon
, chan
->sec_level
, auth_type
);
542 static u8
l2cap_get_ident(struct l2cap_conn
*conn
)
546 /* Get next available identificator.
547 * 1 - 128 are used by kernel.
548 * 129 - 199 are reserved.
549 * 200 - 254 are used by utilities like l2ping, etc.
552 spin_lock(&conn
->lock
);
554 if (++conn
->tx_ident
> 128)
559 spin_unlock(&conn
->lock
);
564 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
, void *data
)
566 struct sk_buff
*skb
= l2cap_build_cmd(conn
, code
, ident
, len
, data
);
569 BT_DBG("code 0x%2.2x", code
);
574 if (lmp_no_flush_capable(conn
->hcon
->hdev
))
575 flags
= ACL_START_NO_FLUSH
;
579 bt_cb(skb
)->force_active
= BT_POWER_FORCE_ACTIVE_ON
;
580 skb
->priority
= HCI_PRIO_MAX
;
582 hci_send_acl(conn
->hchan
, skb
, flags
);
585 static void l2cap_do_send(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
587 struct hci_conn
*hcon
= chan
->conn
->hcon
;
590 BT_DBG("chan %p, skb %p len %d priority %u", chan
, skb
, skb
->len
,
593 if (!test_bit(FLAG_FLUSHABLE
, &chan
->flags
) &&
594 lmp_no_flush_capable(hcon
->hdev
))
595 flags
= ACL_START_NO_FLUSH
;
599 bt_cb(skb
)->force_active
= test_bit(FLAG_FORCE_ACTIVE
, &chan
->flags
);
600 hci_send_acl(chan
->conn
->hchan
, skb
, flags
);
603 static inline void l2cap_send_sframe(struct l2cap_chan
*chan
, u32 control
)
606 struct l2cap_hdr
*lh
;
607 struct l2cap_conn
*conn
= chan
->conn
;
610 if (chan
->state
!= BT_CONNECTED
)
613 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
614 hlen
= L2CAP_EXT_HDR_SIZE
;
616 hlen
= L2CAP_ENH_HDR_SIZE
;
618 if (chan
->fcs
== L2CAP_FCS_CRC16
)
619 hlen
+= L2CAP_FCS_SIZE
;
621 BT_DBG("chan %p, control 0x%8.8x", chan
, control
);
623 count
= min_t(unsigned int, conn
->mtu
, hlen
);
625 control
|= __set_sframe(chan
);
627 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
))
628 control
|= __set_ctrl_final(chan
);
630 if (test_and_clear_bit(CONN_SEND_PBIT
, &chan
->conn_state
))
631 control
|= __set_ctrl_poll(chan
);
633 skb
= bt_skb_alloc(count
, GFP_ATOMIC
);
637 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
638 lh
->len
= cpu_to_le16(hlen
- L2CAP_HDR_SIZE
);
639 lh
->cid
= cpu_to_le16(chan
->dcid
);
641 __put_control(chan
, control
, skb_put(skb
, __ctrl_size(chan
)));
643 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
644 u16 fcs
= crc16(0, (u8
*)lh
, count
- L2CAP_FCS_SIZE
);
645 put_unaligned_le16(fcs
, skb_put(skb
, L2CAP_FCS_SIZE
));
648 skb
->priority
= HCI_PRIO_MAX
;
649 l2cap_do_send(chan
, skb
);
652 static inline void l2cap_send_rr_or_rnr(struct l2cap_chan
*chan
, u32 control
)
654 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
655 control
|= __set_ctrl_super(chan
, L2CAP_SUPER_RNR
);
656 set_bit(CONN_RNR_SENT
, &chan
->conn_state
);
658 control
|= __set_ctrl_super(chan
, L2CAP_SUPER_RR
);
660 control
|= __set_reqseq(chan
, chan
->buffer_seq
);
662 l2cap_send_sframe(chan
, control
);
665 static inline int __l2cap_no_conn_pending(struct l2cap_chan
*chan
)
667 return !test_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
670 static void l2cap_send_conn_req(struct l2cap_chan
*chan
)
672 struct l2cap_conn
*conn
= chan
->conn
;
673 struct l2cap_conn_req req
;
675 req
.scid
= cpu_to_le16(chan
->scid
);
678 chan
->ident
= l2cap_get_ident(conn
);
680 set_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
682 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_REQ
, sizeof(req
), &req
);
685 static void l2cap_do_start(struct l2cap_chan
*chan
)
687 struct l2cap_conn
*conn
= chan
->conn
;
689 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) {
690 if (!(conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
))
693 if (l2cap_chan_check_security(chan
) &&
694 __l2cap_no_conn_pending(chan
))
695 l2cap_send_conn_req(chan
);
697 struct l2cap_info_req req
;
698 req
.type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
700 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
701 conn
->info_ident
= l2cap_get_ident(conn
);
703 schedule_delayed_work(&conn
->info_timer
, L2CAP_INFO_TIMEOUT
);
705 l2cap_send_cmd(conn
, conn
->info_ident
,
706 L2CAP_INFO_REQ
, sizeof(req
), &req
);
710 static inline int l2cap_mode_supported(__u8 mode
, __u32 feat_mask
)
712 u32 local_feat_mask
= l2cap_feat_mask
;
714 local_feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
;
717 case L2CAP_MODE_ERTM
:
718 return L2CAP_FEAT_ERTM
& feat_mask
& local_feat_mask
;
719 case L2CAP_MODE_STREAMING
:
720 return L2CAP_FEAT_STREAMING
& feat_mask
& local_feat_mask
;
726 static void l2cap_send_disconn_req(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
, int err
)
728 struct sock
*sk
= chan
->sk
;
729 struct l2cap_disconn_req req
;
734 if (chan
->mode
== L2CAP_MODE_ERTM
) {
735 __clear_retrans_timer(chan
);
736 __clear_monitor_timer(chan
);
737 __clear_ack_timer(chan
);
740 req
.dcid
= cpu_to_le16(chan
->dcid
);
741 req
.scid
= cpu_to_le16(chan
->scid
);
742 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
743 L2CAP_DISCONN_REQ
, sizeof(req
), &req
);
746 __l2cap_state_change(chan
, BT_DISCONN
);
747 __l2cap_chan_set_err(chan
, err
);
751 /* ---- L2CAP connections ---- */
752 static void l2cap_conn_start(struct l2cap_conn
*conn
)
754 struct l2cap_chan
*chan
, *tmp
;
756 BT_DBG("conn %p", conn
);
758 mutex_lock(&conn
->chan_lock
);
760 list_for_each_entry_safe(chan
, tmp
, &conn
->chan_l
, list
) {
761 struct sock
*sk
= chan
->sk
;
763 l2cap_chan_lock(chan
);
765 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
766 l2cap_chan_unlock(chan
);
770 if (chan
->state
== BT_CONNECT
) {
771 if (!l2cap_chan_check_security(chan
) ||
772 !__l2cap_no_conn_pending(chan
)) {
773 l2cap_chan_unlock(chan
);
777 if (!l2cap_mode_supported(chan
->mode
, conn
->feat_mask
)
778 && test_bit(CONF_STATE2_DEVICE
,
779 &chan
->conf_state
)) {
780 l2cap_chan_close(chan
, ECONNRESET
);
781 l2cap_chan_unlock(chan
);
785 l2cap_send_conn_req(chan
);
787 } else if (chan
->state
== BT_CONNECT2
) {
788 struct l2cap_conn_rsp rsp
;
790 rsp
.scid
= cpu_to_le16(chan
->dcid
);
791 rsp
.dcid
= cpu_to_le16(chan
->scid
);
793 if (l2cap_chan_check_security(chan
)) {
795 if (bt_sk(sk
)->defer_setup
) {
796 struct sock
*parent
= bt_sk(sk
)->parent
;
797 rsp
.result
= cpu_to_le16(L2CAP_CR_PEND
);
798 rsp
.status
= cpu_to_le16(L2CAP_CS_AUTHOR_PEND
);
800 parent
->sk_data_ready(parent
, 0);
803 __l2cap_state_change(chan
, BT_CONFIG
);
804 rsp
.result
= cpu_to_le16(L2CAP_CR_SUCCESS
);
805 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
809 rsp
.result
= cpu_to_le16(L2CAP_CR_PEND
);
810 rsp
.status
= cpu_to_le16(L2CAP_CS_AUTHEN_PEND
);
813 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
816 if (test_bit(CONF_REQ_SENT
, &chan
->conf_state
) ||
817 rsp
.result
!= L2CAP_CR_SUCCESS
) {
818 l2cap_chan_unlock(chan
);
822 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
823 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
824 l2cap_build_conf_req(chan
, buf
), buf
);
825 chan
->num_conf_req
++;
828 l2cap_chan_unlock(chan
);
831 mutex_unlock(&conn
->chan_lock
);
834 /* Find socket with cid and source bdaddr.
835 * Returns closest match, locked.
837 static struct l2cap_chan
*l2cap_global_chan_by_scid(int state
, __le16 cid
, bdaddr_t
*src
)
839 struct l2cap_chan
*c
, *c1
= NULL
;
841 read_lock(&chan_list_lock
);
843 list_for_each_entry(c
, &chan_list
, global_l
) {
844 struct sock
*sk
= c
->sk
;
846 if (state
&& c
->state
!= state
)
849 if (c
->scid
== cid
) {
851 if (!bacmp(&bt_sk(sk
)->src
, src
)) {
852 read_unlock(&chan_list_lock
);
857 if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
))
862 read_unlock(&chan_list_lock
);
867 static void l2cap_le_conn_ready(struct l2cap_conn
*conn
)
869 struct sock
*parent
, *sk
;
870 struct l2cap_chan
*chan
, *pchan
;
874 /* Check if we have socket listening on cid */
875 pchan
= l2cap_global_chan_by_scid(BT_LISTEN
, L2CAP_CID_LE_DATA
,
884 /* Check for backlog size */
885 if (sk_acceptq_is_full(parent
)) {
886 BT_DBG("backlog full %d", parent
->sk_ack_backlog
);
890 chan
= pchan
->ops
->new_connection(pchan
->data
);
896 hci_conn_hold(conn
->hcon
);
898 bacpy(&bt_sk(sk
)->src
, conn
->src
);
899 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
901 bt_accept_enqueue(parent
, sk
);
903 l2cap_chan_add(conn
, chan
);
905 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
907 __l2cap_state_change(chan
, BT_CONNECTED
);
908 parent
->sk_data_ready(parent
, 0);
911 release_sock(parent
);
914 static void l2cap_chan_ready(struct l2cap_chan
*chan
)
916 struct sock
*sk
= chan
->sk
;
921 parent
= bt_sk(sk
)->parent
;
923 BT_DBG("sk %p, parent %p", sk
, parent
);
925 chan
->conf_state
= 0;
926 __clear_chan_timer(chan
);
928 __l2cap_state_change(chan
, BT_CONNECTED
);
929 sk
->sk_state_change(sk
);
932 parent
->sk_data_ready(parent
, 0);
937 static void l2cap_conn_ready(struct l2cap_conn
*conn
)
939 struct l2cap_chan
*chan
;
941 BT_DBG("conn %p", conn
);
943 if (!conn
->hcon
->out
&& conn
->hcon
->type
== LE_LINK
)
944 l2cap_le_conn_ready(conn
);
946 if (conn
->hcon
->out
&& conn
->hcon
->type
== LE_LINK
)
947 smp_conn_security(conn
, conn
->hcon
->pending_sec_level
);
949 mutex_lock(&conn
->chan_lock
);
951 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
953 l2cap_chan_lock(chan
);
955 if (conn
->hcon
->type
== LE_LINK
) {
956 if (smp_conn_security(conn
, chan
->sec_level
))
957 l2cap_chan_ready(chan
);
959 } else if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
960 struct sock
*sk
= chan
->sk
;
961 __clear_chan_timer(chan
);
963 __l2cap_state_change(chan
, BT_CONNECTED
);
964 sk
->sk_state_change(sk
);
967 } else if (chan
->state
== BT_CONNECT
)
968 l2cap_do_start(chan
);
970 l2cap_chan_unlock(chan
);
973 mutex_unlock(&conn
->chan_lock
);
976 /* Notify sockets that we cannot guaranty reliability anymore */
977 static void l2cap_conn_unreliable(struct l2cap_conn
*conn
, int err
)
979 struct l2cap_chan
*chan
;
981 BT_DBG("conn %p", conn
);
983 mutex_lock(&conn
->chan_lock
);
985 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
986 if (test_bit(FLAG_FORCE_RELIABLE
, &chan
->flags
))
987 __l2cap_chan_set_err(chan
, err
);
990 mutex_unlock(&conn
->chan_lock
);
993 static void l2cap_info_timeout(struct work_struct
*work
)
995 struct l2cap_conn
*conn
= container_of(work
, struct l2cap_conn
,
998 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
999 conn
->info_ident
= 0;
1001 l2cap_conn_start(conn
);
1004 static void l2cap_conn_del(struct hci_conn
*hcon
, int err
)
1006 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1007 struct l2cap_chan
*chan
, *l
;
1012 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
1014 kfree_skb(conn
->rx_skb
);
1016 mutex_lock(&conn
->chan_lock
);
1019 list_for_each_entry_safe(chan
, l
, &conn
->chan_l
, list
) {
1020 l2cap_chan_lock(chan
);
1022 l2cap_chan_del(chan
, err
);
1024 l2cap_chan_unlock(chan
);
1026 chan
->ops
->close(chan
->data
);
1029 mutex_unlock(&conn
->chan_lock
);
1031 hci_chan_del(conn
->hchan
);
1033 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
)
1034 cancel_delayed_work_sync(&conn
->info_timer
);
1036 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->flags
)) {
1037 cancel_delayed_work_sync(&conn
->security_timer
);
1038 smp_chan_destroy(conn
);
1041 hcon
->l2cap_data
= NULL
;
1045 static void security_timeout(struct work_struct
*work
)
1047 struct l2cap_conn
*conn
= container_of(work
, struct l2cap_conn
,
1048 security_timer
.work
);
1050 l2cap_conn_del(conn
->hcon
, ETIMEDOUT
);
1053 static struct l2cap_conn
*l2cap_conn_add(struct hci_conn
*hcon
, u8 status
)
1055 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1056 struct hci_chan
*hchan
;
1061 hchan
= hci_chan_create(hcon
);
1065 conn
= kzalloc(sizeof(struct l2cap_conn
), GFP_ATOMIC
);
1067 hci_chan_del(hchan
);
1071 hcon
->l2cap_data
= conn
;
1073 conn
->hchan
= hchan
;
1075 BT_DBG("hcon %p conn %p hchan %p", hcon
, conn
, hchan
);
1077 if (hcon
->hdev
->le_mtu
&& hcon
->type
== LE_LINK
)
1078 conn
->mtu
= hcon
->hdev
->le_mtu
;
1080 conn
->mtu
= hcon
->hdev
->acl_mtu
;
1082 conn
->src
= &hcon
->hdev
->bdaddr
;
1083 conn
->dst
= &hcon
->dst
;
1085 conn
->feat_mask
= 0;
1087 spin_lock_init(&conn
->lock
);
1088 mutex_init(&conn
->chan_lock
);
1090 INIT_LIST_HEAD(&conn
->chan_l
);
1092 if (hcon
->type
== LE_LINK
)
1093 INIT_DELAYED_WORK(&conn
->security_timer
, security_timeout
);
1095 INIT_DELAYED_WORK(&conn
->info_timer
, l2cap_info_timeout
);
1097 conn
->disc_reason
= HCI_ERROR_REMOTE_USER_TERM
;
1102 /* ---- Socket interface ---- */
1104 /* Find socket with psm and source bdaddr.
1105 * Returns closest match.
1107 static struct l2cap_chan
*l2cap_global_chan_by_psm(int state
, __le16 psm
, bdaddr_t
*src
)
1109 struct l2cap_chan
*c
, *c1
= NULL
;
1111 read_lock(&chan_list_lock
);
1113 list_for_each_entry(c
, &chan_list
, global_l
) {
1114 struct sock
*sk
= c
->sk
;
1116 if (state
&& c
->state
!= state
)
1119 if (c
->psm
== psm
) {
1121 if (!bacmp(&bt_sk(sk
)->src
, src
)) {
1122 read_unlock(&chan_list_lock
);
1127 if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
))
1132 read_unlock(&chan_list_lock
);
1137 int l2cap_chan_connect(struct l2cap_chan
*chan
, __le16 psm
, u16 cid
, bdaddr_t
*dst
)
1139 struct sock
*sk
= chan
->sk
;
1140 bdaddr_t
*src
= &bt_sk(sk
)->src
;
1141 struct l2cap_conn
*conn
;
1142 struct hci_conn
*hcon
;
1143 struct hci_dev
*hdev
;
1147 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src
), batostr(dst
),
1150 hdev
= hci_get_route(dst
, src
);
1152 return -EHOSTUNREACH
;
1156 l2cap_chan_lock(chan
);
1158 /* PSM must be odd and lsb of upper byte must be 0 */
1159 if ((__le16_to_cpu(psm
) & 0x0101) != 0x0001 && !cid
&&
1160 chan
->chan_type
!= L2CAP_CHAN_RAW
) {
1165 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&& !(psm
|| cid
)) {
1170 switch (chan
->mode
) {
1171 case L2CAP_MODE_BASIC
:
1173 case L2CAP_MODE_ERTM
:
1174 case L2CAP_MODE_STREAMING
:
1185 switch (sk
->sk_state
) {
1189 /* Already connecting */
1195 /* Already connected */
1211 /* Set destination address and psm */
1212 bacpy(&bt_sk(sk
)->dst
, dst
);
1219 auth_type
= l2cap_get_auth_type(chan
);
1221 if (chan
->dcid
== L2CAP_CID_LE_DATA
)
1222 hcon
= hci_connect(hdev
, LE_LINK
, dst
,
1223 chan
->sec_level
, auth_type
);
1225 hcon
= hci_connect(hdev
, ACL_LINK
, dst
,
1226 chan
->sec_level
, auth_type
);
1229 err
= PTR_ERR(hcon
);
1233 conn
= l2cap_conn_add(hcon
, 0);
1240 /* Update source addr of the socket */
1241 bacpy(src
, conn
->src
);
1243 l2cap_chan_unlock(chan
);
1244 l2cap_chan_add(conn
, chan
);
1245 l2cap_chan_lock(chan
);
1247 l2cap_state_change(chan
, BT_CONNECT
);
1248 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
1250 if (hcon
->state
== BT_CONNECTED
) {
1251 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1252 __clear_chan_timer(chan
);
1253 if (l2cap_chan_check_security(chan
))
1254 l2cap_state_change(chan
, BT_CONNECTED
);
1256 l2cap_do_start(chan
);
1262 l2cap_chan_unlock(chan
);
1263 hci_dev_unlock(hdev
);
1268 int __l2cap_wait_ack(struct sock
*sk
)
1270 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
1271 DECLARE_WAITQUEUE(wait
, current
);
1275 add_wait_queue(sk_sleep(sk
), &wait
);
1276 set_current_state(TASK_INTERRUPTIBLE
);
1277 while (chan
->unacked_frames
> 0 && chan
->conn
) {
1281 if (signal_pending(current
)) {
1282 err
= sock_intr_errno(timeo
);
1287 timeo
= schedule_timeout(timeo
);
1289 set_current_state(TASK_INTERRUPTIBLE
);
1291 err
= sock_error(sk
);
1295 set_current_state(TASK_RUNNING
);
1296 remove_wait_queue(sk_sleep(sk
), &wait
);
1300 static void l2cap_monitor_timeout(struct work_struct
*work
)
1302 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
1303 monitor_timer
.work
);
1305 BT_DBG("chan %p", chan
);
1307 l2cap_chan_lock(chan
);
1309 if (chan
->retry_count
>= chan
->remote_max_tx
) {
1310 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNABORTED
);
1311 l2cap_chan_unlock(chan
);
1315 chan
->retry_count
++;
1316 __set_monitor_timer(chan
);
1318 l2cap_send_rr_or_rnr(chan
, L2CAP_CTRL_POLL
);
1319 l2cap_chan_unlock(chan
);
1322 static void l2cap_retrans_timeout(struct work_struct
*work
)
1324 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
1325 retrans_timer
.work
);
1327 BT_DBG("chan %p", chan
);
1329 l2cap_chan_lock(chan
);
1331 chan
->retry_count
= 1;
1332 __set_monitor_timer(chan
);
1334 set_bit(CONN_WAIT_F
, &chan
->conn_state
);
1336 l2cap_send_rr_or_rnr(chan
, L2CAP_CTRL_POLL
);
1338 l2cap_chan_unlock(chan
);
1341 static void l2cap_drop_acked_frames(struct l2cap_chan
*chan
)
1343 struct sk_buff
*skb
;
1345 while ((skb
= skb_peek(&chan
->tx_q
)) &&
1346 chan
->unacked_frames
) {
1347 if (bt_cb(skb
)->tx_seq
== chan
->expected_ack_seq
)
1350 skb
= skb_dequeue(&chan
->tx_q
);
1353 chan
->unacked_frames
--;
1356 if (!chan
->unacked_frames
)
1357 __clear_retrans_timer(chan
);
1360 static void l2cap_streaming_send(struct l2cap_chan
*chan
)
1362 struct sk_buff
*skb
;
1366 while ((skb
= skb_dequeue(&chan
->tx_q
))) {
1367 control
= __get_control(chan
, skb
->data
+ L2CAP_HDR_SIZE
);
1368 control
|= __set_txseq(chan
, chan
->next_tx_seq
);
1369 __put_control(chan
, control
, skb
->data
+ L2CAP_HDR_SIZE
);
1371 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1372 fcs
= crc16(0, (u8
*)skb
->data
,
1373 skb
->len
- L2CAP_FCS_SIZE
);
1374 put_unaligned_le16(fcs
,
1375 skb
->data
+ skb
->len
- L2CAP_FCS_SIZE
);
1378 l2cap_do_send(chan
, skb
);
1380 chan
->next_tx_seq
= __next_seq(chan
, chan
->next_tx_seq
);
1384 static void l2cap_retransmit_one_frame(struct l2cap_chan
*chan
, u16 tx_seq
)
1386 struct sk_buff
*skb
, *tx_skb
;
1390 skb
= skb_peek(&chan
->tx_q
);
1394 while (bt_cb(skb
)->tx_seq
!= tx_seq
) {
1395 if (skb_queue_is_last(&chan
->tx_q
, skb
))
1398 skb
= skb_queue_next(&chan
->tx_q
, skb
);
1401 if (chan
->remote_max_tx
&&
1402 bt_cb(skb
)->retries
== chan
->remote_max_tx
) {
1403 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNABORTED
);
1407 tx_skb
= skb_clone(skb
, GFP_ATOMIC
);
1408 bt_cb(skb
)->retries
++;
1410 control
= __get_control(chan
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1411 control
&= __get_sar_mask(chan
);
1413 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
))
1414 control
|= __set_ctrl_final(chan
);
1416 control
|= __set_reqseq(chan
, chan
->buffer_seq
);
1417 control
|= __set_txseq(chan
, tx_seq
);
1419 __put_control(chan
, control
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1421 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1422 fcs
= crc16(0, (u8
*)tx_skb
->data
,
1423 tx_skb
->len
- L2CAP_FCS_SIZE
);
1424 put_unaligned_le16(fcs
,
1425 tx_skb
->data
+ tx_skb
->len
- L2CAP_FCS_SIZE
);
1428 l2cap_do_send(chan
, tx_skb
);
1431 static int l2cap_ertm_send(struct l2cap_chan
*chan
)
1433 struct sk_buff
*skb
, *tx_skb
;
1438 if (chan
->state
!= BT_CONNECTED
)
1441 while ((skb
= chan
->tx_send_head
) && (!l2cap_tx_window_full(chan
))) {
1443 if (chan
->remote_max_tx
&&
1444 bt_cb(skb
)->retries
== chan
->remote_max_tx
) {
1445 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNABORTED
);
1449 tx_skb
= skb_clone(skb
, GFP_ATOMIC
);
1451 bt_cb(skb
)->retries
++;
1453 control
= __get_control(chan
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1454 control
&= __get_sar_mask(chan
);
1456 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
))
1457 control
|= __set_ctrl_final(chan
);
1459 control
|= __set_reqseq(chan
, chan
->buffer_seq
);
1460 control
|= __set_txseq(chan
, chan
->next_tx_seq
);
1462 __put_control(chan
, control
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1464 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1465 fcs
= crc16(0, (u8
*)skb
->data
,
1466 tx_skb
->len
- L2CAP_FCS_SIZE
);
1467 put_unaligned_le16(fcs
, skb
->data
+
1468 tx_skb
->len
- L2CAP_FCS_SIZE
);
1471 l2cap_do_send(chan
, tx_skb
);
1473 __set_retrans_timer(chan
);
1475 bt_cb(skb
)->tx_seq
= chan
->next_tx_seq
;
1477 chan
->next_tx_seq
= __next_seq(chan
, chan
->next_tx_seq
);
1479 if (bt_cb(skb
)->retries
== 1) {
1480 chan
->unacked_frames
++;
1483 __clear_ack_timer(chan
);
1486 chan
->frames_sent
++;
1488 if (skb_queue_is_last(&chan
->tx_q
, skb
))
1489 chan
->tx_send_head
= NULL
;
1491 chan
->tx_send_head
= skb_queue_next(&chan
->tx_q
, skb
);
1497 static int l2cap_retransmit_frames(struct l2cap_chan
*chan
)
1501 if (!skb_queue_empty(&chan
->tx_q
))
1502 chan
->tx_send_head
= chan
->tx_q
.next
;
1504 chan
->next_tx_seq
= chan
->expected_ack_seq
;
1505 ret
= l2cap_ertm_send(chan
);
1509 static void __l2cap_send_ack(struct l2cap_chan
*chan
)
1513 control
|= __set_reqseq(chan
, chan
->buffer_seq
);
1515 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
1516 control
|= __set_ctrl_super(chan
, L2CAP_SUPER_RNR
);
1517 set_bit(CONN_RNR_SENT
, &chan
->conn_state
);
1518 l2cap_send_sframe(chan
, control
);
1522 if (l2cap_ertm_send(chan
) > 0)
1525 control
|= __set_ctrl_super(chan
, L2CAP_SUPER_RR
);
1526 l2cap_send_sframe(chan
, control
);
1529 static void l2cap_send_ack(struct l2cap_chan
*chan
)
1531 __clear_ack_timer(chan
);
1532 __l2cap_send_ack(chan
);
1535 static void l2cap_send_srejtail(struct l2cap_chan
*chan
)
1537 struct srej_list
*tail
;
1540 control
= __set_ctrl_super(chan
, L2CAP_SUPER_SREJ
);
1541 control
|= __set_ctrl_final(chan
);
1543 tail
= list_entry((&chan
->srej_l
)->prev
, struct srej_list
, list
);
1544 control
|= __set_reqseq(chan
, tail
->tx_seq
);
1546 l2cap_send_sframe(chan
, control
);
1549 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan
*chan
,
1550 struct msghdr
*msg
, int len
,
1551 int count
, struct sk_buff
*skb
)
1553 struct l2cap_conn
*conn
= chan
->conn
;
1554 struct sk_buff
**frag
;
1557 if (memcpy_fromiovec(skb_put(skb
, count
), msg
->msg_iov
, count
))
1563 /* Continuation fragments (no L2CAP header) */
1564 frag
= &skb_shinfo(skb
)->frag_list
;
1566 count
= min_t(unsigned int, conn
->mtu
, len
);
1568 *frag
= chan
->ops
->alloc_skb(chan
, count
,
1569 msg
->msg_flags
& MSG_DONTWAIT
,
1574 if (memcpy_fromiovec(skb_put(*frag
, count
), msg
->msg_iov
, count
))
1577 (*frag
)->priority
= skb
->priority
;
1582 frag
= &(*frag
)->next
;
1588 static struct sk_buff
*l2cap_create_connless_pdu(struct l2cap_chan
*chan
,
1589 struct msghdr
*msg
, size_t len
,
1592 struct l2cap_conn
*conn
= chan
->conn
;
1593 struct sk_buff
*skb
;
1594 int err
, count
, hlen
= L2CAP_HDR_SIZE
+ L2CAP_PSMLEN_SIZE
;
1595 struct l2cap_hdr
*lh
;
1597 BT_DBG("chan %p len %d priority %u", chan
, (int)len
, priority
);
1599 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1601 skb
= chan
->ops
->alloc_skb(chan
, count
+ hlen
,
1602 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1605 return ERR_PTR(err
);
1607 skb
->priority
= priority
;
1609 /* Create L2CAP header */
1610 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1611 lh
->cid
= cpu_to_le16(chan
->dcid
);
1612 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1613 put_unaligned_le16(chan
->psm
, skb_put(skb
, 2));
1615 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
1616 if (unlikely(err
< 0)) {
1618 return ERR_PTR(err
);
1623 static struct sk_buff
*l2cap_create_basic_pdu(struct l2cap_chan
*chan
,
1624 struct msghdr
*msg
, size_t len
,
1627 struct l2cap_conn
*conn
= chan
->conn
;
1628 struct sk_buff
*skb
;
1629 int err
, count
, hlen
= L2CAP_HDR_SIZE
;
1630 struct l2cap_hdr
*lh
;
1632 BT_DBG("chan %p len %d", chan
, (int)len
);
1634 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1636 skb
= chan
->ops
->alloc_skb(chan
, count
+ hlen
,
1637 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1640 return ERR_PTR(err
);
1642 skb
->priority
= priority
;
1644 /* Create L2CAP header */
1645 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1646 lh
->cid
= cpu_to_le16(chan
->dcid
);
1647 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1649 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
1650 if (unlikely(err
< 0)) {
1652 return ERR_PTR(err
);
1657 static struct sk_buff
*l2cap_create_iframe_pdu(struct l2cap_chan
*chan
,
1658 struct msghdr
*msg
, size_t len
,
1659 u32 control
, u16 sdulen
)
1661 struct l2cap_conn
*conn
= chan
->conn
;
1662 struct sk_buff
*skb
;
1663 int err
, count
, hlen
;
1664 struct l2cap_hdr
*lh
;
1666 BT_DBG("chan %p len %d", chan
, (int)len
);
1669 return ERR_PTR(-ENOTCONN
);
1671 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
1672 hlen
= L2CAP_EXT_HDR_SIZE
;
1674 hlen
= L2CAP_ENH_HDR_SIZE
;
1677 hlen
+= L2CAP_SDULEN_SIZE
;
1679 if (chan
->fcs
== L2CAP_FCS_CRC16
)
1680 hlen
+= L2CAP_FCS_SIZE
;
1682 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1684 skb
= chan
->ops
->alloc_skb(chan
, count
+ hlen
,
1685 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1688 return ERR_PTR(err
);
1690 /* Create L2CAP header */
1691 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1692 lh
->cid
= cpu_to_le16(chan
->dcid
);
1693 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1695 __put_control(chan
, control
, skb_put(skb
, __ctrl_size(chan
)));
1698 put_unaligned_le16(sdulen
, skb_put(skb
, L2CAP_SDULEN_SIZE
));
1700 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
1701 if (unlikely(err
< 0)) {
1703 return ERR_PTR(err
);
1706 if (chan
->fcs
== L2CAP_FCS_CRC16
)
1707 put_unaligned_le16(0, skb_put(skb
, L2CAP_FCS_SIZE
));
1709 bt_cb(skb
)->retries
= 0;
1713 static int l2cap_sar_segment_sdu(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
)
1715 struct sk_buff
*skb
;
1716 struct sk_buff_head sar_queue
;
1720 skb_queue_head_init(&sar_queue
);
1721 control
= __set_ctrl_sar(chan
, L2CAP_SAR_START
);
1722 skb
= l2cap_create_iframe_pdu(chan
, msg
, chan
->remote_mps
, control
, len
);
1724 return PTR_ERR(skb
);
1726 __skb_queue_tail(&sar_queue
, skb
);
1727 len
-= chan
->remote_mps
;
1728 size
+= chan
->remote_mps
;
1733 if (len
> chan
->remote_mps
) {
1734 control
= __set_ctrl_sar(chan
, L2CAP_SAR_CONTINUE
);
1735 buflen
= chan
->remote_mps
;
1737 control
= __set_ctrl_sar(chan
, L2CAP_SAR_END
);
1741 skb
= l2cap_create_iframe_pdu(chan
, msg
, buflen
, control
, 0);
1743 skb_queue_purge(&sar_queue
);
1744 return PTR_ERR(skb
);
1747 __skb_queue_tail(&sar_queue
, skb
);
1751 skb_queue_splice_tail(&sar_queue
, &chan
->tx_q
);
1752 if (chan
->tx_send_head
== NULL
)
1753 chan
->tx_send_head
= sar_queue
.next
;
1758 int l2cap_chan_send(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
,
1761 struct sk_buff
*skb
;
1765 /* Connectionless channel */
1766 if (chan
->chan_type
== L2CAP_CHAN_CONN_LESS
) {
1767 skb
= l2cap_create_connless_pdu(chan
, msg
, len
, priority
);
1769 return PTR_ERR(skb
);
1771 l2cap_do_send(chan
, skb
);
1775 switch (chan
->mode
) {
1776 case L2CAP_MODE_BASIC
:
1777 /* Check outgoing MTU */
1778 if (len
> chan
->omtu
)
1781 /* Create a basic PDU */
1782 skb
= l2cap_create_basic_pdu(chan
, msg
, len
, priority
);
1784 return PTR_ERR(skb
);
1786 l2cap_do_send(chan
, skb
);
1790 case L2CAP_MODE_ERTM
:
1791 case L2CAP_MODE_STREAMING
:
1792 /* Entire SDU fits into one PDU */
1793 if (len
<= chan
->remote_mps
) {
1794 control
= __set_ctrl_sar(chan
, L2CAP_SAR_UNSEGMENTED
);
1795 skb
= l2cap_create_iframe_pdu(chan
, msg
, len
, control
,
1798 return PTR_ERR(skb
);
1800 __skb_queue_tail(&chan
->tx_q
, skb
);
1802 if (chan
->tx_send_head
== NULL
)
1803 chan
->tx_send_head
= skb
;
1806 /* Segment SDU into multiples PDUs */
1807 err
= l2cap_sar_segment_sdu(chan
, msg
, len
);
1812 if (chan
->mode
== L2CAP_MODE_STREAMING
) {
1813 l2cap_streaming_send(chan
);
1818 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
) &&
1819 test_bit(CONN_WAIT_F
, &chan
->conn_state
)) {
1824 err
= l2cap_ertm_send(chan
);
1831 BT_DBG("bad state %1.1x", chan
->mode
);
1838 /* Copy frame to all raw sockets on that connection */
1839 static void l2cap_raw_recv(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
1841 struct sk_buff
*nskb
;
1842 struct l2cap_chan
*chan
;
1844 BT_DBG("conn %p", conn
);
1846 mutex_lock(&conn
->chan_lock
);
1848 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
1849 struct sock
*sk
= chan
->sk
;
1850 if (chan
->chan_type
!= L2CAP_CHAN_RAW
)
1853 /* Don't send frame to the socket it came from */
1856 nskb
= skb_clone(skb
, GFP_ATOMIC
);
1860 if (chan
->ops
->recv(chan
->data
, nskb
))
1864 mutex_unlock(&conn
->chan_lock
);
1867 /* ---- L2CAP signalling commands ---- */
1868 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
1869 u8 code
, u8 ident
, u16 dlen
, void *data
)
1871 struct sk_buff
*skb
, **frag
;
1872 struct l2cap_cmd_hdr
*cmd
;
1873 struct l2cap_hdr
*lh
;
1876 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
1877 conn
, code
, ident
, dlen
);
1879 len
= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
+ dlen
;
1880 count
= min_t(unsigned int, conn
->mtu
, len
);
1882 skb
= bt_skb_alloc(count
, GFP_ATOMIC
);
1886 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1887 lh
->len
= cpu_to_le16(L2CAP_CMD_HDR_SIZE
+ dlen
);
1889 if (conn
->hcon
->type
== LE_LINK
)
1890 lh
->cid
= cpu_to_le16(L2CAP_CID_LE_SIGNALING
);
1892 lh
->cid
= cpu_to_le16(L2CAP_CID_SIGNALING
);
1894 cmd
= (struct l2cap_cmd_hdr
*) skb_put(skb
, L2CAP_CMD_HDR_SIZE
);
1897 cmd
->len
= cpu_to_le16(dlen
);
1900 count
-= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
;
1901 memcpy(skb_put(skb
, count
), data
, count
);
1907 /* Continuation fragments (no L2CAP header) */
1908 frag
= &skb_shinfo(skb
)->frag_list
;
1910 count
= min_t(unsigned int, conn
->mtu
, len
);
1912 *frag
= bt_skb_alloc(count
, GFP_ATOMIC
);
1916 memcpy(skb_put(*frag
, count
), data
, count
);
1921 frag
= &(*frag
)->next
;
1931 static inline int l2cap_get_conf_opt(void **ptr
, int *type
, int *olen
, unsigned long *val
)
1933 struct l2cap_conf_opt
*opt
= *ptr
;
1936 len
= L2CAP_CONF_OPT_SIZE
+ opt
->len
;
1944 *val
= *((u8
*) opt
->val
);
1948 *val
= get_unaligned_le16(opt
->val
);
1952 *val
= get_unaligned_le32(opt
->val
);
1956 *val
= (unsigned long) opt
->val
;
1960 BT_DBG("type 0x%2.2x len %d val 0x%lx", *type
, opt
->len
, *val
);
1964 static void l2cap_add_conf_opt(void **ptr
, u8 type
, u8 len
, unsigned long val
)
1966 struct l2cap_conf_opt
*opt
= *ptr
;
1968 BT_DBG("type 0x%2.2x len %d val 0x%lx", type
, len
, val
);
1975 *((u8
*) opt
->val
) = val
;
1979 put_unaligned_le16(val
, opt
->val
);
1983 put_unaligned_le32(val
, opt
->val
);
1987 memcpy(opt
->val
, (void *) val
, len
);
1991 *ptr
+= L2CAP_CONF_OPT_SIZE
+ len
;
1994 static void l2cap_add_opt_efs(void **ptr
, struct l2cap_chan
*chan
)
1996 struct l2cap_conf_efs efs
;
1998 switch (chan
->mode
) {
1999 case L2CAP_MODE_ERTM
:
2000 efs
.id
= chan
->local_id
;
2001 efs
.stype
= chan
->local_stype
;
2002 efs
.msdu
= cpu_to_le16(chan
->local_msdu
);
2003 efs
.sdu_itime
= cpu_to_le32(chan
->local_sdu_itime
);
2004 efs
.acc_lat
= cpu_to_le32(L2CAP_DEFAULT_ACC_LAT
);
2005 efs
.flush_to
= cpu_to_le32(L2CAP_DEFAULT_FLUSH_TO
);
2008 case L2CAP_MODE_STREAMING
:
2010 efs
.stype
= L2CAP_SERV_BESTEFFORT
;
2011 efs
.msdu
= cpu_to_le16(chan
->local_msdu
);
2012 efs
.sdu_itime
= cpu_to_le32(chan
->local_sdu_itime
);
2021 l2cap_add_conf_opt(ptr
, L2CAP_CONF_EFS
, sizeof(efs
),
2022 (unsigned long) &efs
);
2025 static void l2cap_ack_timeout(struct work_struct
*work
)
2027 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
2030 BT_DBG("chan %p", chan
);
2032 l2cap_chan_lock(chan
);
2034 __l2cap_send_ack(chan
);
2036 l2cap_chan_unlock(chan
);
2038 l2cap_chan_put(chan
);
2041 static inline void l2cap_ertm_init(struct l2cap_chan
*chan
)
2043 chan
->expected_ack_seq
= 0;
2044 chan
->unacked_frames
= 0;
2045 chan
->buffer_seq
= 0;
2046 chan
->num_acked
= 0;
2047 chan
->frames_sent
= 0;
2049 INIT_DELAYED_WORK(&chan
->retrans_timer
, l2cap_retrans_timeout
);
2050 INIT_DELAYED_WORK(&chan
->monitor_timer
, l2cap_monitor_timeout
);
2051 INIT_DELAYED_WORK(&chan
->ack_timer
, l2cap_ack_timeout
);
2053 skb_queue_head_init(&chan
->srej_q
);
2055 INIT_LIST_HEAD(&chan
->srej_l
);
2058 static inline __u8
l2cap_select_mode(__u8 mode
, __u16 remote_feat_mask
)
2061 case L2CAP_MODE_STREAMING
:
2062 case L2CAP_MODE_ERTM
:
2063 if (l2cap_mode_supported(mode
, remote_feat_mask
))
2067 return L2CAP_MODE_BASIC
;
2071 static inline bool __l2cap_ews_supported(struct l2cap_chan
*chan
)
2073 return enable_hs
&& chan
->conn
->feat_mask
& L2CAP_FEAT_EXT_WINDOW
;
2076 static inline bool __l2cap_efs_supported(struct l2cap_chan
*chan
)
2078 return enable_hs
&& chan
->conn
->feat_mask
& L2CAP_FEAT_EXT_FLOW
;
2081 static inline void l2cap_txwin_setup(struct l2cap_chan
*chan
)
2083 if (chan
->tx_win
> L2CAP_DEFAULT_TX_WINDOW
&&
2084 __l2cap_ews_supported(chan
)) {
2085 /* use extended control field */
2086 set_bit(FLAG_EXT_CTRL
, &chan
->flags
);
2087 chan
->tx_win_max
= L2CAP_DEFAULT_EXT_WINDOW
;
2089 chan
->tx_win
= min_t(u16
, chan
->tx_win
,
2090 L2CAP_DEFAULT_TX_WINDOW
);
2091 chan
->tx_win_max
= L2CAP_DEFAULT_TX_WINDOW
;
2095 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
)
2097 struct l2cap_conf_req
*req
= data
;
2098 struct l2cap_conf_rfc rfc
= { .mode
= chan
->mode
};
2099 void *ptr
= req
->data
;
2102 BT_DBG("chan %p", chan
);
2104 if (chan
->num_conf_req
|| chan
->num_conf_rsp
)
2107 switch (chan
->mode
) {
2108 case L2CAP_MODE_STREAMING
:
2109 case L2CAP_MODE_ERTM
:
2110 if (test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
))
2113 if (__l2cap_efs_supported(chan
))
2114 set_bit(FLAG_EFS_ENABLE
, &chan
->flags
);
2118 chan
->mode
= l2cap_select_mode(rfc
.mode
, chan
->conn
->feat_mask
);
2123 if (chan
->imtu
!= L2CAP_DEFAULT_MTU
)
2124 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
2126 switch (chan
->mode
) {
2127 case L2CAP_MODE_BASIC
:
2128 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_ERTM
) &&
2129 !(chan
->conn
->feat_mask
& L2CAP_FEAT_STREAMING
))
2132 rfc
.mode
= L2CAP_MODE_BASIC
;
2134 rfc
.max_transmit
= 0;
2135 rfc
.retrans_timeout
= 0;
2136 rfc
.monitor_timeout
= 0;
2137 rfc
.max_pdu_size
= 0;
2139 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
2140 (unsigned long) &rfc
);
2143 case L2CAP_MODE_ERTM
:
2144 rfc
.mode
= L2CAP_MODE_ERTM
;
2145 rfc
.max_transmit
= chan
->max_tx
;
2146 rfc
.retrans_timeout
= 0;
2147 rfc
.monitor_timeout
= 0;
2149 size
= min_t(u16
, L2CAP_DEFAULT_MAX_PDU_SIZE
, chan
->conn
->mtu
-
2150 L2CAP_EXT_HDR_SIZE
-
2153 rfc
.max_pdu_size
= cpu_to_le16(size
);
2155 l2cap_txwin_setup(chan
);
2157 rfc
.txwin_size
= min_t(u16
, chan
->tx_win
,
2158 L2CAP_DEFAULT_TX_WINDOW
);
2160 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
2161 (unsigned long) &rfc
);
2163 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
))
2164 l2cap_add_opt_efs(&ptr
, chan
);
2166 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
2169 if (chan
->fcs
== L2CAP_FCS_NONE
||
2170 test_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
)) {
2171 chan
->fcs
= L2CAP_FCS_NONE
;
2172 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, chan
->fcs
);
2175 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
2176 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EWS
, 2,
2180 case L2CAP_MODE_STREAMING
:
2181 rfc
.mode
= L2CAP_MODE_STREAMING
;
2183 rfc
.max_transmit
= 0;
2184 rfc
.retrans_timeout
= 0;
2185 rfc
.monitor_timeout
= 0;
2187 size
= min_t(u16
, L2CAP_DEFAULT_MAX_PDU_SIZE
, chan
->conn
->mtu
-
2188 L2CAP_EXT_HDR_SIZE
-
2191 rfc
.max_pdu_size
= cpu_to_le16(size
);
2193 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
2194 (unsigned long) &rfc
);
2196 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
))
2197 l2cap_add_opt_efs(&ptr
, chan
);
2199 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
2202 if (chan
->fcs
== L2CAP_FCS_NONE
||
2203 test_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
)) {
2204 chan
->fcs
= L2CAP_FCS_NONE
;
2205 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, chan
->fcs
);
2210 req
->dcid
= cpu_to_le16(chan
->dcid
);
2211 req
->flags
= cpu_to_le16(0);
2216 static int l2cap_parse_conf_req(struct l2cap_chan
*chan
, void *data
)
2218 struct l2cap_conf_rsp
*rsp
= data
;
2219 void *ptr
= rsp
->data
;
2220 void *req
= chan
->conf_req
;
2221 int len
= chan
->conf_len
;
2222 int type
, hint
, olen
;
2224 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
2225 struct l2cap_conf_efs efs
;
2227 u16 mtu
= L2CAP_DEFAULT_MTU
;
2228 u16 result
= L2CAP_CONF_SUCCESS
;
2231 BT_DBG("chan %p", chan
);
2233 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2234 len
-= l2cap_get_conf_opt(&req
, &type
, &olen
, &val
);
2236 hint
= type
& L2CAP_CONF_HINT
;
2237 type
&= L2CAP_CONF_MASK
;
2240 case L2CAP_CONF_MTU
:
2244 case L2CAP_CONF_FLUSH_TO
:
2245 chan
->flush_to
= val
;
2248 case L2CAP_CONF_QOS
:
2251 case L2CAP_CONF_RFC
:
2252 if (olen
== sizeof(rfc
))
2253 memcpy(&rfc
, (void *) val
, olen
);
2256 case L2CAP_CONF_FCS
:
2257 if (val
== L2CAP_FCS_NONE
)
2258 set_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
);
2261 case L2CAP_CONF_EFS
:
2263 if (olen
== sizeof(efs
))
2264 memcpy(&efs
, (void *) val
, olen
);
2267 case L2CAP_CONF_EWS
:
2269 return -ECONNREFUSED
;
2271 set_bit(FLAG_EXT_CTRL
, &chan
->flags
);
2272 set_bit(CONF_EWS_RECV
, &chan
->conf_state
);
2273 chan
->tx_win_max
= L2CAP_DEFAULT_EXT_WINDOW
;
2274 chan
->remote_tx_win
= val
;
2281 result
= L2CAP_CONF_UNKNOWN
;
2282 *((u8
*) ptr
++) = type
;
2287 if (chan
->num_conf_rsp
|| chan
->num_conf_req
> 1)
2290 switch (chan
->mode
) {
2291 case L2CAP_MODE_STREAMING
:
2292 case L2CAP_MODE_ERTM
:
2293 if (!test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
)) {
2294 chan
->mode
= l2cap_select_mode(rfc
.mode
,
2295 chan
->conn
->feat_mask
);
2300 if (__l2cap_efs_supported(chan
))
2301 set_bit(FLAG_EFS_ENABLE
, &chan
->flags
);
2303 return -ECONNREFUSED
;
2306 if (chan
->mode
!= rfc
.mode
)
2307 return -ECONNREFUSED
;
2313 if (chan
->mode
!= rfc
.mode
) {
2314 result
= L2CAP_CONF_UNACCEPT
;
2315 rfc
.mode
= chan
->mode
;
2317 if (chan
->num_conf_rsp
== 1)
2318 return -ECONNREFUSED
;
2320 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2321 sizeof(rfc
), (unsigned long) &rfc
);
2324 if (result
== L2CAP_CONF_SUCCESS
) {
2325 /* Configure output options and let the other side know
2326 * which ones we don't like. */
2328 if (mtu
< L2CAP_DEFAULT_MIN_MTU
)
2329 result
= L2CAP_CONF_UNACCEPT
;
2332 set_bit(CONF_MTU_DONE
, &chan
->conf_state
);
2334 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->omtu
);
2337 if (chan
->local_stype
!= L2CAP_SERV_NOTRAFIC
&&
2338 efs
.stype
!= L2CAP_SERV_NOTRAFIC
&&
2339 efs
.stype
!= chan
->local_stype
) {
2341 result
= L2CAP_CONF_UNACCEPT
;
2343 if (chan
->num_conf_req
>= 1)
2344 return -ECONNREFUSED
;
2346 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
2348 (unsigned long) &efs
);
2350 /* Send PENDING Conf Rsp */
2351 result
= L2CAP_CONF_PENDING
;
2352 set_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
2357 case L2CAP_MODE_BASIC
:
2358 chan
->fcs
= L2CAP_FCS_NONE
;
2359 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
2362 case L2CAP_MODE_ERTM
:
2363 if (!test_bit(CONF_EWS_RECV
, &chan
->conf_state
))
2364 chan
->remote_tx_win
= rfc
.txwin_size
;
2366 rfc
.txwin_size
= L2CAP_DEFAULT_TX_WINDOW
;
2368 chan
->remote_max_tx
= rfc
.max_transmit
;
2370 size
= min_t(u16
, le16_to_cpu(rfc
.max_pdu_size
),
2372 L2CAP_EXT_HDR_SIZE
-
2375 rfc
.max_pdu_size
= cpu_to_le16(size
);
2376 chan
->remote_mps
= size
;
2378 rfc
.retrans_timeout
=
2379 le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO
);
2380 rfc
.monitor_timeout
=
2381 le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO
);
2383 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
2385 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2386 sizeof(rfc
), (unsigned long) &rfc
);
2388 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
)) {
2389 chan
->remote_id
= efs
.id
;
2390 chan
->remote_stype
= efs
.stype
;
2391 chan
->remote_msdu
= le16_to_cpu(efs
.msdu
);
2392 chan
->remote_flush_to
=
2393 le32_to_cpu(efs
.flush_to
);
2394 chan
->remote_acc_lat
=
2395 le32_to_cpu(efs
.acc_lat
);
2396 chan
->remote_sdu_itime
=
2397 le32_to_cpu(efs
.sdu_itime
);
2398 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
2399 sizeof(efs
), (unsigned long) &efs
);
2403 case L2CAP_MODE_STREAMING
:
2404 size
= min_t(u16
, le16_to_cpu(rfc
.max_pdu_size
),
2406 L2CAP_EXT_HDR_SIZE
-
2409 rfc
.max_pdu_size
= cpu_to_le16(size
);
2410 chan
->remote_mps
= size
;
2412 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
2414 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2415 sizeof(rfc
), (unsigned long) &rfc
);
2420 result
= L2CAP_CONF_UNACCEPT
;
2422 memset(&rfc
, 0, sizeof(rfc
));
2423 rfc
.mode
= chan
->mode
;
2426 if (result
== L2CAP_CONF_SUCCESS
)
2427 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
2429 rsp
->scid
= cpu_to_le16(chan
->dcid
);
2430 rsp
->result
= cpu_to_le16(result
);
2431 rsp
->flags
= cpu_to_le16(0x0000);
2436 static int l2cap_parse_conf_rsp(struct l2cap_chan
*chan
, void *rsp
, int len
, void *data
, u16
*result
)
2438 struct l2cap_conf_req
*req
= data
;
2439 void *ptr
= req
->data
;
2442 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
2443 struct l2cap_conf_efs efs
;
2445 BT_DBG("chan %p, rsp %p, len %d, req %p", chan
, rsp
, len
, data
);
2447 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2448 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
2451 case L2CAP_CONF_MTU
:
2452 if (val
< L2CAP_DEFAULT_MIN_MTU
) {
2453 *result
= L2CAP_CONF_UNACCEPT
;
2454 chan
->imtu
= L2CAP_DEFAULT_MIN_MTU
;
2457 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
2460 case L2CAP_CONF_FLUSH_TO
:
2461 chan
->flush_to
= val
;
2462 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FLUSH_TO
,
2466 case L2CAP_CONF_RFC
:
2467 if (olen
== sizeof(rfc
))
2468 memcpy(&rfc
, (void *)val
, olen
);
2470 if (test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
) &&
2471 rfc
.mode
!= chan
->mode
)
2472 return -ECONNREFUSED
;
2476 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2477 sizeof(rfc
), (unsigned long) &rfc
);
2480 case L2CAP_CONF_EWS
:
2481 chan
->tx_win
= min_t(u16
, val
,
2482 L2CAP_DEFAULT_EXT_WINDOW
);
2483 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EWS
, 2,
2487 case L2CAP_CONF_EFS
:
2488 if (olen
== sizeof(efs
))
2489 memcpy(&efs
, (void *)val
, olen
);
2491 if (chan
->local_stype
!= L2CAP_SERV_NOTRAFIC
&&
2492 efs
.stype
!= L2CAP_SERV_NOTRAFIC
&&
2493 efs
.stype
!= chan
->local_stype
)
2494 return -ECONNREFUSED
;
2496 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
2497 sizeof(efs
), (unsigned long) &efs
);
2502 if (chan
->mode
== L2CAP_MODE_BASIC
&& chan
->mode
!= rfc
.mode
)
2503 return -ECONNREFUSED
;
2505 chan
->mode
= rfc
.mode
;
2507 if (*result
== L2CAP_CONF_SUCCESS
|| *result
== L2CAP_CONF_PENDING
) {
2509 case L2CAP_MODE_ERTM
:
2510 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
2511 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
2512 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2514 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
)) {
2515 chan
->local_msdu
= le16_to_cpu(efs
.msdu
);
2516 chan
->local_sdu_itime
=
2517 le32_to_cpu(efs
.sdu_itime
);
2518 chan
->local_acc_lat
= le32_to_cpu(efs
.acc_lat
);
2519 chan
->local_flush_to
=
2520 le32_to_cpu(efs
.flush_to
);
2524 case L2CAP_MODE_STREAMING
:
2525 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2529 req
->dcid
= cpu_to_le16(chan
->dcid
);
2530 req
->flags
= cpu_to_le16(0x0000);
2535 static int l2cap_build_conf_rsp(struct l2cap_chan
*chan
, void *data
, u16 result
, u16 flags
)
2537 struct l2cap_conf_rsp
*rsp
= data
;
2538 void *ptr
= rsp
->data
;
2540 BT_DBG("chan %p", chan
);
2542 rsp
->scid
= cpu_to_le16(chan
->dcid
);
2543 rsp
->result
= cpu_to_le16(result
);
2544 rsp
->flags
= cpu_to_le16(flags
);
2549 void __l2cap_connect_rsp_defer(struct l2cap_chan
*chan
)
2551 struct l2cap_conn_rsp rsp
;
2552 struct l2cap_conn
*conn
= chan
->conn
;
2555 rsp
.scid
= cpu_to_le16(chan
->dcid
);
2556 rsp
.dcid
= cpu_to_le16(chan
->scid
);
2557 rsp
.result
= cpu_to_le16(L2CAP_CR_SUCCESS
);
2558 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
2559 l2cap_send_cmd(conn
, chan
->ident
,
2560 L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
2562 if (test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
))
2565 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2566 l2cap_build_conf_req(chan
, buf
), buf
);
2567 chan
->num_conf_req
++;
2570 static void l2cap_conf_rfc_get(struct l2cap_chan
*chan
, void *rsp
, int len
)
2574 struct l2cap_conf_rfc rfc
;
2576 BT_DBG("chan %p, rsp %p, len %d", chan
, rsp
, len
);
2578 if ((chan
->mode
!= L2CAP_MODE_ERTM
) && (chan
->mode
!= L2CAP_MODE_STREAMING
))
2581 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2582 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
2585 case L2CAP_CONF_RFC
:
2586 if (olen
== sizeof(rfc
))
2587 memcpy(&rfc
, (void *)val
, olen
);
2592 /* Use sane default values in case a misbehaving remote device
2593 * did not send an RFC option.
2595 rfc
.mode
= chan
->mode
;
2596 rfc
.retrans_timeout
= cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO
);
2597 rfc
.monitor_timeout
= cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO
);
2598 rfc
.max_pdu_size
= cpu_to_le16(chan
->imtu
);
2600 BT_ERR("Expected RFC option was not found, using defaults");
2604 case L2CAP_MODE_ERTM
:
2605 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
2606 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
2607 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2609 case L2CAP_MODE_STREAMING
:
2610 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2614 static inline int l2cap_command_rej(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2616 struct l2cap_cmd_rej_unk
*rej
= (struct l2cap_cmd_rej_unk
*) data
;
2618 if (rej
->reason
!= L2CAP_REJ_NOT_UNDERSTOOD
)
2621 if ((conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) &&
2622 cmd
->ident
== conn
->info_ident
) {
2623 cancel_delayed_work(&conn
->info_timer
);
2625 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2626 conn
->info_ident
= 0;
2628 l2cap_conn_start(conn
);
2634 static inline int l2cap_connect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2636 struct l2cap_conn_req
*req
= (struct l2cap_conn_req
*) data
;
2637 struct l2cap_conn_rsp rsp
;
2638 struct l2cap_chan
*chan
= NULL
, *pchan
;
2639 struct sock
*parent
, *sk
= NULL
;
2640 int result
, status
= L2CAP_CS_NO_INFO
;
2642 u16 dcid
= 0, scid
= __le16_to_cpu(req
->scid
);
2643 __le16 psm
= req
->psm
;
2645 BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm
, scid
);
2647 /* Check if we have socket listening on psm */
2648 pchan
= l2cap_global_chan_by_psm(BT_LISTEN
, psm
, conn
->src
);
2650 result
= L2CAP_CR_BAD_PSM
;
2656 mutex_lock(&conn
->chan_lock
);
2659 /* Check if the ACL is secure enough (if not SDP) */
2660 if (psm
!= cpu_to_le16(0x0001) &&
2661 !hci_conn_check_link_mode(conn
->hcon
)) {
2662 conn
->disc_reason
= HCI_ERROR_AUTH_FAILURE
;
2663 result
= L2CAP_CR_SEC_BLOCK
;
2667 result
= L2CAP_CR_NO_MEM
;
2669 /* Check for backlog size */
2670 if (sk_acceptq_is_full(parent
)) {
2671 BT_DBG("backlog full %d", parent
->sk_ack_backlog
);
2675 chan
= pchan
->ops
->new_connection(pchan
->data
);
2681 /* Check if we already have channel with that dcid */
2682 if (__l2cap_get_chan_by_dcid(conn
, scid
)) {
2683 sock_set_flag(sk
, SOCK_ZAPPED
);
2684 chan
->ops
->close(chan
->data
);
2688 hci_conn_hold(conn
->hcon
);
2690 bacpy(&bt_sk(sk
)->src
, conn
->src
);
2691 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
2695 bt_accept_enqueue(parent
, sk
);
2697 __l2cap_chan_add(conn
, chan
);
2701 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
2703 chan
->ident
= cmd
->ident
;
2705 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
) {
2706 if (l2cap_chan_check_security(chan
)) {
2707 if (bt_sk(sk
)->defer_setup
) {
2708 __l2cap_state_change(chan
, BT_CONNECT2
);
2709 result
= L2CAP_CR_PEND
;
2710 status
= L2CAP_CS_AUTHOR_PEND
;
2711 parent
->sk_data_ready(parent
, 0);
2713 __l2cap_state_change(chan
, BT_CONFIG
);
2714 result
= L2CAP_CR_SUCCESS
;
2715 status
= L2CAP_CS_NO_INFO
;
2718 __l2cap_state_change(chan
, BT_CONNECT2
);
2719 result
= L2CAP_CR_PEND
;
2720 status
= L2CAP_CS_AUTHEN_PEND
;
2723 __l2cap_state_change(chan
, BT_CONNECT2
);
2724 result
= L2CAP_CR_PEND
;
2725 status
= L2CAP_CS_NO_INFO
;
2729 release_sock(parent
);
2730 mutex_unlock(&conn
->chan_lock
);
2733 rsp
.scid
= cpu_to_le16(scid
);
2734 rsp
.dcid
= cpu_to_le16(dcid
);
2735 rsp
.result
= cpu_to_le16(result
);
2736 rsp
.status
= cpu_to_le16(status
);
2737 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
2739 if (result
== L2CAP_CR_PEND
&& status
== L2CAP_CS_NO_INFO
) {
2740 struct l2cap_info_req info
;
2741 info
.type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
2743 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
2744 conn
->info_ident
= l2cap_get_ident(conn
);
2746 schedule_delayed_work(&conn
->info_timer
, L2CAP_INFO_TIMEOUT
);
2748 l2cap_send_cmd(conn
, conn
->info_ident
,
2749 L2CAP_INFO_REQ
, sizeof(info
), &info
);
2752 if (chan
&& !test_bit(CONF_REQ_SENT
, &chan
->conf_state
) &&
2753 result
== L2CAP_CR_SUCCESS
) {
2755 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
2756 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2757 l2cap_build_conf_req(chan
, buf
), buf
);
2758 chan
->num_conf_req
++;
2764 static inline int l2cap_connect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2766 struct l2cap_conn_rsp
*rsp
= (struct l2cap_conn_rsp
*) data
;
2767 u16 scid
, dcid
, result
, status
;
2768 struct l2cap_chan
*chan
;
2772 scid
= __le16_to_cpu(rsp
->scid
);
2773 dcid
= __le16_to_cpu(rsp
->dcid
);
2774 result
= __le16_to_cpu(rsp
->result
);
2775 status
= __le16_to_cpu(rsp
->status
);
2777 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
2778 dcid
, scid
, result
, status
);
2780 mutex_lock(&conn
->chan_lock
);
2783 chan
= __l2cap_get_chan_by_scid(conn
, scid
);
2789 chan
= __l2cap_get_chan_by_ident(conn
, cmd
->ident
);
2798 l2cap_chan_lock(chan
);
2801 case L2CAP_CR_SUCCESS
:
2802 l2cap_state_change(chan
, BT_CONFIG
);
2805 clear_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
2807 if (test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
))
2810 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2811 l2cap_build_conf_req(chan
, req
), req
);
2812 chan
->num_conf_req
++;
2816 set_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
2820 l2cap_chan_del(chan
, ECONNREFUSED
);
2824 l2cap_chan_unlock(chan
);
2827 mutex_unlock(&conn
->chan_lock
);
2832 static inline void set_default_fcs(struct l2cap_chan
*chan
)
2834 /* FCS is enabled only in ERTM or streaming mode, if one or both
2837 if (chan
->mode
!= L2CAP_MODE_ERTM
&& chan
->mode
!= L2CAP_MODE_STREAMING
)
2838 chan
->fcs
= L2CAP_FCS_NONE
;
2839 else if (!test_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
))
2840 chan
->fcs
= L2CAP_FCS_CRC16
;
2843 static inline int l2cap_config_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
2845 struct l2cap_conf_req
*req
= (struct l2cap_conf_req
*) data
;
2848 struct l2cap_chan
*chan
;
2851 dcid
= __le16_to_cpu(req
->dcid
);
2852 flags
= __le16_to_cpu(req
->flags
);
2854 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid
, flags
);
2856 chan
= l2cap_get_chan_by_scid(conn
, dcid
);
2860 l2cap_chan_lock(chan
);
2862 if (chan
->state
!= BT_CONFIG
&& chan
->state
!= BT_CONNECT2
) {
2863 struct l2cap_cmd_rej_cid rej
;
2865 rej
.reason
= cpu_to_le16(L2CAP_REJ_INVALID_CID
);
2866 rej
.scid
= cpu_to_le16(chan
->scid
);
2867 rej
.dcid
= cpu_to_le16(chan
->dcid
);
2869 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_COMMAND_REJ
,
2874 /* Reject if config buffer is too small. */
2875 len
= cmd_len
- sizeof(*req
);
2876 if (len
< 0 || chan
->conf_len
+ len
> sizeof(chan
->conf_req
)) {
2877 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2878 l2cap_build_conf_rsp(chan
, rsp
,
2879 L2CAP_CONF_REJECT
, flags
), rsp
);
2884 memcpy(chan
->conf_req
+ chan
->conf_len
, req
->data
, len
);
2885 chan
->conf_len
+= len
;
2887 if (flags
& 0x0001) {
2888 /* Incomplete config. Send empty response. */
2889 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2890 l2cap_build_conf_rsp(chan
, rsp
,
2891 L2CAP_CONF_SUCCESS
, 0x0001), rsp
);
2895 /* Complete config. */
2896 len
= l2cap_parse_conf_req(chan
, rsp
);
2898 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
2902 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
, len
, rsp
);
2903 chan
->num_conf_rsp
++;
2905 /* Reset config buffer. */
2908 if (!test_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
))
2911 if (test_bit(CONF_INPUT_DONE
, &chan
->conf_state
)) {
2912 set_default_fcs(chan
);
2914 l2cap_state_change(chan
, BT_CONNECTED
);
2916 chan
->next_tx_seq
= 0;
2917 chan
->expected_tx_seq
= 0;
2918 skb_queue_head_init(&chan
->tx_q
);
2919 if (chan
->mode
== L2CAP_MODE_ERTM
)
2920 l2cap_ertm_init(chan
);
2922 l2cap_chan_ready(chan
);
2926 if (!test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
)) {
2928 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2929 l2cap_build_conf_req(chan
, buf
), buf
);
2930 chan
->num_conf_req
++;
2933 /* Got Conf Rsp PENDING from remote side and asume we sent
2934 Conf Rsp PENDING in the code above */
2935 if (test_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
) &&
2936 test_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
)) {
2938 /* check compatibility */
2940 clear_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
2941 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
2943 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2944 l2cap_build_conf_rsp(chan
, rsp
,
2945 L2CAP_CONF_SUCCESS
, 0x0000), rsp
);
2949 l2cap_chan_unlock(chan
);
2953 static inline int l2cap_config_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2955 struct l2cap_conf_rsp
*rsp
= (struct l2cap_conf_rsp
*)data
;
2956 u16 scid
, flags
, result
;
2957 struct l2cap_chan
*chan
;
2958 int len
= cmd
->len
- sizeof(*rsp
);
2960 scid
= __le16_to_cpu(rsp
->scid
);
2961 flags
= __le16_to_cpu(rsp
->flags
);
2962 result
= __le16_to_cpu(rsp
->result
);
2964 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
2965 scid
, flags
, result
);
2967 chan
= l2cap_get_chan_by_scid(conn
, scid
);
2971 l2cap_chan_lock(chan
);
2974 case L2CAP_CONF_SUCCESS
:
2975 l2cap_conf_rfc_get(chan
, rsp
->data
, len
);
2976 clear_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
);
2979 case L2CAP_CONF_PENDING
:
2980 set_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
);
2982 if (test_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
)) {
2985 len
= l2cap_parse_conf_rsp(chan
, rsp
->data
, len
,
2988 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
2992 /* check compatibility */
2994 clear_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
2995 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
2997 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2998 l2cap_build_conf_rsp(chan
, buf
,
2999 L2CAP_CONF_SUCCESS
, 0x0000), buf
);
3003 case L2CAP_CONF_UNACCEPT
:
3004 if (chan
->num_conf_rsp
<= L2CAP_CONF_MAX_CONF_RSP
) {
3007 if (len
> sizeof(req
) - sizeof(struct l2cap_conf_req
)) {
3008 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3012 /* throw out any old stored conf requests */
3013 result
= L2CAP_CONF_SUCCESS
;
3014 len
= l2cap_parse_conf_rsp(chan
, rsp
->data
, len
,
3017 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3021 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
3022 L2CAP_CONF_REQ
, len
, req
);
3023 chan
->num_conf_req
++;
3024 if (result
!= L2CAP_CONF_SUCCESS
)
3030 l2cap_chan_set_err(chan
, ECONNRESET
);
3032 __set_chan_timer(chan
, L2CAP_DISC_REJ_TIMEOUT
);
3033 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3040 set_bit(CONF_INPUT_DONE
, &chan
->conf_state
);
3042 if (test_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
)) {
3043 set_default_fcs(chan
);
3045 l2cap_state_change(chan
, BT_CONNECTED
);
3046 chan
->next_tx_seq
= 0;
3047 chan
->expected_tx_seq
= 0;
3048 skb_queue_head_init(&chan
->tx_q
);
3049 if (chan
->mode
== L2CAP_MODE_ERTM
)
3050 l2cap_ertm_init(chan
);
3052 l2cap_chan_ready(chan
);
3056 l2cap_chan_unlock(chan
);
3060 static inline int l2cap_disconnect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3062 struct l2cap_disconn_req
*req
= (struct l2cap_disconn_req
*) data
;
3063 struct l2cap_disconn_rsp rsp
;
3065 struct l2cap_chan
*chan
;
3068 scid
= __le16_to_cpu(req
->scid
);
3069 dcid
= __le16_to_cpu(req
->dcid
);
3071 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid
, dcid
);
3073 mutex_lock(&conn
->chan_lock
);
3075 chan
= __l2cap_get_chan_by_scid(conn
, dcid
);
3077 mutex_unlock(&conn
->chan_lock
);
3081 l2cap_chan_lock(chan
);
3085 rsp
.dcid
= cpu_to_le16(chan
->scid
);
3086 rsp
.scid
= cpu_to_le16(chan
->dcid
);
3087 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_DISCONN_RSP
, sizeof(rsp
), &rsp
);
3090 sk
->sk_shutdown
= SHUTDOWN_MASK
;
3093 l2cap_chan_del(chan
, ECONNRESET
);
3095 l2cap_chan_unlock(chan
);
3097 chan
->ops
->close(chan
->data
);
3099 mutex_unlock(&conn
->chan_lock
);
3104 static inline int l2cap_disconnect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3106 struct l2cap_disconn_rsp
*rsp
= (struct l2cap_disconn_rsp
*) data
;
3108 struct l2cap_chan
*chan
;
3110 scid
= __le16_to_cpu(rsp
->scid
);
3111 dcid
= __le16_to_cpu(rsp
->dcid
);
3113 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid
, scid
);
3115 mutex_lock(&conn
->chan_lock
);
3117 chan
= __l2cap_get_chan_by_scid(conn
, scid
);
3119 mutex_unlock(&conn
->chan_lock
);
3123 l2cap_chan_lock(chan
);
3125 l2cap_chan_del(chan
, 0);
3127 l2cap_chan_unlock(chan
);
3129 chan
->ops
->close(chan
->data
);
3131 mutex_unlock(&conn
->chan_lock
);
3136 static inline int l2cap_information_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3138 struct l2cap_info_req
*req
= (struct l2cap_info_req
*) data
;
3141 type
= __le16_to_cpu(req
->type
);
3143 BT_DBG("type 0x%4.4x", type
);
3145 if (type
== L2CAP_IT_FEAT_MASK
) {
3147 u32 feat_mask
= l2cap_feat_mask
;
3148 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
3149 rsp
->type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
3150 rsp
->result
= cpu_to_le16(L2CAP_IR_SUCCESS
);
3152 feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
3155 feat_mask
|= L2CAP_FEAT_EXT_FLOW
3156 | L2CAP_FEAT_EXT_WINDOW
;
3158 put_unaligned_le32(feat_mask
, rsp
->data
);
3159 l2cap_send_cmd(conn
, cmd
->ident
,
3160 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
3161 } else if (type
== L2CAP_IT_FIXED_CHAN
) {
3163 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
3166 l2cap_fixed_chan
[0] |= L2CAP_FC_A2MP
;
3168 l2cap_fixed_chan
[0] &= ~L2CAP_FC_A2MP
;
3170 rsp
->type
= cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
3171 rsp
->result
= cpu_to_le16(L2CAP_IR_SUCCESS
);
3172 memcpy(rsp
->data
, l2cap_fixed_chan
, sizeof(l2cap_fixed_chan
));
3173 l2cap_send_cmd(conn
, cmd
->ident
,
3174 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
3176 struct l2cap_info_rsp rsp
;
3177 rsp
.type
= cpu_to_le16(type
);
3178 rsp
.result
= cpu_to_le16(L2CAP_IR_NOTSUPP
);
3179 l2cap_send_cmd(conn
, cmd
->ident
,
3180 L2CAP_INFO_RSP
, sizeof(rsp
), &rsp
);
3186 static inline int l2cap_information_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3188 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) data
;
3191 type
= __le16_to_cpu(rsp
->type
);
3192 result
= __le16_to_cpu(rsp
->result
);
3194 BT_DBG("type 0x%4.4x result 0x%2.2x", type
, result
);
3196 /* L2CAP Info req/rsp are unbound to channels, add extra checks */
3197 if (cmd
->ident
!= conn
->info_ident
||
3198 conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
)
3201 cancel_delayed_work(&conn
->info_timer
);
3203 if (result
!= L2CAP_IR_SUCCESS
) {
3204 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3205 conn
->info_ident
= 0;
3207 l2cap_conn_start(conn
);
3213 case L2CAP_IT_FEAT_MASK
:
3214 conn
->feat_mask
= get_unaligned_le32(rsp
->data
);
3216 if (conn
->feat_mask
& L2CAP_FEAT_FIXED_CHAN
) {
3217 struct l2cap_info_req req
;
3218 req
.type
= cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
3220 conn
->info_ident
= l2cap_get_ident(conn
);
3222 l2cap_send_cmd(conn
, conn
->info_ident
,
3223 L2CAP_INFO_REQ
, sizeof(req
), &req
);
3225 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3226 conn
->info_ident
= 0;
3228 l2cap_conn_start(conn
);
3232 case L2CAP_IT_FIXED_CHAN
:
3233 conn
->fixed_chan_mask
= rsp
->data
[0];
3234 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3235 conn
->info_ident
= 0;
3237 l2cap_conn_start(conn
);
3244 static inline int l2cap_create_channel_req(struct l2cap_conn
*conn
,
3245 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
3248 struct l2cap_create_chan_req
*req
= data
;
3249 struct l2cap_create_chan_rsp rsp
;
3252 if (cmd_len
!= sizeof(*req
))
3258 psm
= le16_to_cpu(req
->psm
);
3259 scid
= le16_to_cpu(req
->scid
);
3261 BT_DBG("psm %d, scid %d, amp_id %d", psm
, scid
, req
->amp_id
);
3263 /* Placeholder: Always reject */
3265 rsp
.scid
= cpu_to_le16(scid
);
3266 rsp
.result
= L2CAP_CR_NO_MEM
;
3267 rsp
.status
= L2CAP_CS_NO_INFO
;
3269 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CREATE_CHAN_RSP
,
3275 static inline int l2cap_create_channel_rsp(struct l2cap_conn
*conn
,
3276 struct l2cap_cmd_hdr
*cmd
, void *data
)
3278 BT_DBG("conn %p", conn
);
3280 return l2cap_connect_rsp(conn
, cmd
, data
);
3283 static void l2cap_send_move_chan_rsp(struct l2cap_conn
*conn
, u8 ident
,
3284 u16 icid
, u16 result
)
3286 struct l2cap_move_chan_rsp rsp
;
3288 BT_DBG("icid %d, result %d", icid
, result
);
3290 rsp
.icid
= cpu_to_le16(icid
);
3291 rsp
.result
= cpu_to_le16(result
);
3293 l2cap_send_cmd(conn
, ident
, L2CAP_MOVE_CHAN_RSP
, sizeof(rsp
), &rsp
);
3296 static void l2cap_send_move_chan_cfm(struct l2cap_conn
*conn
,
3297 struct l2cap_chan
*chan
, u16 icid
, u16 result
)
3299 struct l2cap_move_chan_cfm cfm
;
3302 BT_DBG("icid %d, result %d", icid
, result
);
3304 ident
= l2cap_get_ident(conn
);
3306 chan
->ident
= ident
;
3308 cfm
.icid
= cpu_to_le16(icid
);
3309 cfm
.result
= cpu_to_le16(result
);
3311 l2cap_send_cmd(conn
, ident
, L2CAP_MOVE_CHAN_CFM
, sizeof(cfm
), &cfm
);
3314 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn
*conn
, u8 ident
,
3317 struct l2cap_move_chan_cfm_rsp rsp
;
3319 BT_DBG("icid %d", icid
);
3321 rsp
.icid
= cpu_to_le16(icid
);
3322 l2cap_send_cmd(conn
, ident
, L2CAP_MOVE_CHAN_CFM_RSP
, sizeof(rsp
), &rsp
);
3325 static inline int l2cap_move_channel_req(struct l2cap_conn
*conn
,
3326 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, void *data
)
3328 struct l2cap_move_chan_req
*req
= data
;
3330 u16 result
= L2CAP_MR_NOT_ALLOWED
;
3332 if (cmd_len
!= sizeof(*req
))
3335 icid
= le16_to_cpu(req
->icid
);
3337 BT_DBG("icid %d, dest_amp_id %d", icid
, req
->dest_amp_id
);
3342 /* Placeholder: Always refuse */
3343 l2cap_send_move_chan_rsp(conn
, cmd
->ident
, icid
, result
);
3348 static inline int l2cap_move_channel_rsp(struct l2cap_conn
*conn
,
3349 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, void *data
)
3351 struct l2cap_move_chan_rsp
*rsp
= data
;
3354 if (cmd_len
!= sizeof(*rsp
))
3357 icid
= le16_to_cpu(rsp
->icid
);
3358 result
= le16_to_cpu(rsp
->result
);
3360 BT_DBG("icid %d, result %d", icid
, result
);
3362 /* Placeholder: Always unconfirmed */
3363 l2cap_send_move_chan_cfm(conn
, NULL
, icid
, L2CAP_MC_UNCONFIRMED
);
3368 static inline int l2cap_move_channel_confirm(struct l2cap_conn
*conn
,
3369 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, void *data
)
3371 struct l2cap_move_chan_cfm
*cfm
= data
;
3374 if (cmd_len
!= sizeof(*cfm
))
3377 icid
= le16_to_cpu(cfm
->icid
);
3378 result
= le16_to_cpu(cfm
->result
);
3380 BT_DBG("icid %d, result %d", icid
, result
);
3382 l2cap_send_move_chan_cfm_rsp(conn
, cmd
->ident
, icid
);
3387 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn
*conn
,
3388 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, void *data
)
3390 struct l2cap_move_chan_cfm_rsp
*rsp
= data
;
3393 if (cmd_len
!= sizeof(*rsp
))
3396 icid
= le16_to_cpu(rsp
->icid
);
3398 BT_DBG("icid %d", icid
);
3403 static inline int l2cap_check_conn_param(u16 min
, u16 max
, u16 latency
,
3408 if (min
> max
|| min
< 6 || max
> 3200)
3411 if (to_multiplier
< 10 || to_multiplier
> 3200)
3414 if (max
>= to_multiplier
* 8)
3417 max_latency
= (to_multiplier
* 8 / max
) - 1;
3418 if (latency
> 499 || latency
> max_latency
)
3424 static inline int l2cap_conn_param_update_req(struct l2cap_conn
*conn
,
3425 struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3427 struct hci_conn
*hcon
= conn
->hcon
;
3428 struct l2cap_conn_param_update_req
*req
;
3429 struct l2cap_conn_param_update_rsp rsp
;
3430 u16 min
, max
, latency
, to_multiplier
, cmd_len
;
3433 if (!(hcon
->link_mode
& HCI_LM_MASTER
))
3436 cmd_len
= __le16_to_cpu(cmd
->len
);
3437 if (cmd_len
!= sizeof(struct l2cap_conn_param_update_req
))
3440 req
= (struct l2cap_conn_param_update_req
*) data
;
3441 min
= __le16_to_cpu(req
->min
);
3442 max
= __le16_to_cpu(req
->max
);
3443 latency
= __le16_to_cpu(req
->latency
);
3444 to_multiplier
= __le16_to_cpu(req
->to_multiplier
);
3446 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
3447 min
, max
, latency
, to_multiplier
);
3449 memset(&rsp
, 0, sizeof(rsp
));
3451 err
= l2cap_check_conn_param(min
, max
, latency
, to_multiplier
);
3453 rsp
.result
= cpu_to_le16(L2CAP_CONN_PARAM_REJECTED
);
3455 rsp
.result
= cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED
);
3457 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_PARAM_UPDATE_RSP
,
3461 hci_le_conn_update(hcon
, min
, max
, latency
, to_multiplier
);
3466 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn
*conn
,
3467 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
3471 switch (cmd
->code
) {
3472 case L2CAP_COMMAND_REJ
:
3473 l2cap_command_rej(conn
, cmd
, data
);
3476 case L2CAP_CONN_REQ
:
3477 err
= l2cap_connect_req(conn
, cmd
, data
);
3480 case L2CAP_CONN_RSP
:
3481 err
= l2cap_connect_rsp(conn
, cmd
, data
);
3484 case L2CAP_CONF_REQ
:
3485 err
= l2cap_config_req(conn
, cmd
, cmd_len
, data
);
3488 case L2CAP_CONF_RSP
:
3489 err
= l2cap_config_rsp(conn
, cmd
, data
);
3492 case L2CAP_DISCONN_REQ
:
3493 err
= l2cap_disconnect_req(conn
, cmd
, data
);
3496 case L2CAP_DISCONN_RSP
:
3497 err
= l2cap_disconnect_rsp(conn
, cmd
, data
);
3500 case L2CAP_ECHO_REQ
:
3501 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_ECHO_RSP
, cmd_len
, data
);
3504 case L2CAP_ECHO_RSP
:
3507 case L2CAP_INFO_REQ
:
3508 err
= l2cap_information_req(conn
, cmd
, data
);
3511 case L2CAP_INFO_RSP
:
3512 err
= l2cap_information_rsp(conn
, cmd
, data
);
3515 case L2CAP_CREATE_CHAN_REQ
:
3516 err
= l2cap_create_channel_req(conn
, cmd
, cmd_len
, data
);
3519 case L2CAP_CREATE_CHAN_RSP
:
3520 err
= l2cap_create_channel_rsp(conn
, cmd
, data
);
3523 case L2CAP_MOVE_CHAN_REQ
:
3524 err
= l2cap_move_channel_req(conn
, cmd
, cmd_len
, data
);
3527 case L2CAP_MOVE_CHAN_RSP
:
3528 err
= l2cap_move_channel_rsp(conn
, cmd
, cmd_len
, data
);
3531 case L2CAP_MOVE_CHAN_CFM
:
3532 err
= l2cap_move_channel_confirm(conn
, cmd
, cmd_len
, data
);
3535 case L2CAP_MOVE_CHAN_CFM_RSP
:
3536 err
= l2cap_move_channel_confirm_rsp(conn
, cmd
, cmd_len
, data
);
3540 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd
->code
);
3548 static inline int l2cap_le_sig_cmd(struct l2cap_conn
*conn
,
3549 struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3551 switch (cmd
->code
) {
3552 case L2CAP_COMMAND_REJ
:
3555 case L2CAP_CONN_PARAM_UPDATE_REQ
:
3556 return l2cap_conn_param_update_req(conn
, cmd
, data
);
3558 case L2CAP_CONN_PARAM_UPDATE_RSP
:
3562 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd
->code
);
3567 static inline void l2cap_sig_channel(struct l2cap_conn
*conn
,
3568 struct sk_buff
*skb
)
3570 u8
*data
= skb
->data
;
3572 struct l2cap_cmd_hdr cmd
;
3575 l2cap_raw_recv(conn
, skb
);
3577 while (len
>= L2CAP_CMD_HDR_SIZE
) {
3579 memcpy(&cmd
, data
, L2CAP_CMD_HDR_SIZE
);
3580 data
+= L2CAP_CMD_HDR_SIZE
;
3581 len
-= L2CAP_CMD_HDR_SIZE
;
3583 cmd_len
= le16_to_cpu(cmd
.len
);
3585 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd
.code
, cmd_len
, cmd
.ident
);
3587 if (cmd_len
> len
|| !cmd
.ident
) {
3588 BT_DBG("corrupted command");
3592 if (conn
->hcon
->type
== LE_LINK
)
3593 err
= l2cap_le_sig_cmd(conn
, &cmd
, data
);
3595 err
= l2cap_bredr_sig_cmd(conn
, &cmd
, cmd_len
, data
);
3598 struct l2cap_cmd_rej_unk rej
;
3600 BT_ERR("Wrong link type (%d)", err
);
3602 /* FIXME: Map err to a valid reason */
3603 rej
.reason
= cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD
);
3604 l2cap_send_cmd(conn
, cmd
.ident
, L2CAP_COMMAND_REJ
, sizeof(rej
), &rej
);
3614 static int l2cap_check_fcs(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
3616 u16 our_fcs
, rcv_fcs
;
3619 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
3620 hdr_size
= L2CAP_EXT_HDR_SIZE
;
3622 hdr_size
= L2CAP_ENH_HDR_SIZE
;
3624 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
3625 skb_trim(skb
, skb
->len
- L2CAP_FCS_SIZE
);
3626 rcv_fcs
= get_unaligned_le16(skb
->data
+ skb
->len
);
3627 our_fcs
= crc16(0, skb
->data
- hdr_size
, skb
->len
+ hdr_size
);
3629 if (our_fcs
!= rcv_fcs
)
3635 static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan
*chan
)
3639 chan
->frames_sent
= 0;
3641 control
|= __set_reqseq(chan
, chan
->buffer_seq
);
3643 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
3644 control
|= __set_ctrl_super(chan
, L2CAP_SUPER_RNR
);
3645 l2cap_send_sframe(chan
, control
);
3646 set_bit(CONN_RNR_SENT
, &chan
->conn_state
);
3649 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
))
3650 l2cap_retransmit_frames(chan
);
3652 l2cap_ertm_send(chan
);
3654 if (!test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
) &&
3655 chan
->frames_sent
== 0) {
3656 control
|= __set_ctrl_super(chan
, L2CAP_SUPER_RR
);
3657 l2cap_send_sframe(chan
, control
);
3661 static int l2cap_add_to_srej_queue(struct l2cap_chan
*chan
, struct sk_buff
*skb
, u16 tx_seq
, u8 sar
)
3663 struct sk_buff
*next_skb
;
3664 int tx_seq_offset
, next_tx_seq_offset
;
3666 bt_cb(skb
)->tx_seq
= tx_seq
;
3667 bt_cb(skb
)->sar
= sar
;
3669 next_skb
= skb_peek(&chan
->srej_q
);
3671 tx_seq_offset
= __seq_offset(chan
, tx_seq
, chan
->buffer_seq
);
3674 if (bt_cb(next_skb
)->tx_seq
== tx_seq
)
3677 next_tx_seq_offset
= __seq_offset(chan
,
3678 bt_cb(next_skb
)->tx_seq
, chan
->buffer_seq
);
3680 if (next_tx_seq_offset
> tx_seq_offset
) {
3681 __skb_queue_before(&chan
->srej_q
, next_skb
, skb
);
3685 if (skb_queue_is_last(&chan
->srej_q
, next_skb
))
3688 next_skb
= skb_queue_next(&chan
->srej_q
, next_skb
);
3691 __skb_queue_tail(&chan
->srej_q
, skb
);
3696 static void append_skb_frag(struct sk_buff
*skb
,
3697 struct sk_buff
*new_frag
, struct sk_buff
**last_frag
)
3699 /* skb->len reflects data in skb as well as all fragments
3700 * skb->data_len reflects only data in fragments
3702 if (!skb_has_frag_list(skb
))
3703 skb_shinfo(skb
)->frag_list
= new_frag
;
3705 new_frag
->next
= NULL
;
3707 (*last_frag
)->next
= new_frag
;
3708 *last_frag
= new_frag
;
3710 skb
->len
+= new_frag
->len
;
3711 skb
->data_len
+= new_frag
->len
;
3712 skb
->truesize
+= new_frag
->truesize
;
3715 static int l2cap_reassemble_sdu(struct l2cap_chan
*chan
, struct sk_buff
*skb
, u32 control
)
3719 switch (__get_ctrl_sar(chan
, control
)) {
3720 case L2CAP_SAR_UNSEGMENTED
:
3724 err
= chan
->ops
->recv(chan
->data
, skb
);
3727 case L2CAP_SAR_START
:
3731 chan
->sdu_len
= get_unaligned_le16(skb
->data
);
3732 skb_pull(skb
, L2CAP_SDULEN_SIZE
);
3734 if (chan
->sdu_len
> chan
->imtu
) {
3739 if (skb
->len
>= chan
->sdu_len
)
3743 chan
->sdu_last_frag
= skb
;
3749 case L2CAP_SAR_CONTINUE
:
3753 append_skb_frag(chan
->sdu
, skb
,
3754 &chan
->sdu_last_frag
);
3757 if (chan
->sdu
->len
>= chan
->sdu_len
)
3767 append_skb_frag(chan
->sdu
, skb
,
3768 &chan
->sdu_last_frag
);
3771 if (chan
->sdu
->len
!= chan
->sdu_len
)
3774 err
= chan
->ops
->recv(chan
->data
, chan
->sdu
);
3777 /* Reassembly complete */
3779 chan
->sdu_last_frag
= NULL
;
3787 kfree_skb(chan
->sdu
);
3789 chan
->sdu_last_frag
= NULL
;
3796 static void l2cap_ertm_enter_local_busy(struct l2cap_chan
*chan
)
3798 BT_DBG("chan %p, Enter local busy", chan
);
3800 set_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
3802 __set_ack_timer(chan
);
3805 static void l2cap_ertm_exit_local_busy(struct l2cap_chan
*chan
)
3809 if (!test_bit(CONN_RNR_SENT
, &chan
->conn_state
))
3812 control
= __set_reqseq(chan
, chan
->buffer_seq
);
3813 control
|= __set_ctrl_poll(chan
);
3814 control
|= __set_ctrl_super(chan
, L2CAP_SUPER_RR
);
3815 l2cap_send_sframe(chan
, control
);
3816 chan
->retry_count
= 1;
3818 __clear_retrans_timer(chan
);
3819 __set_monitor_timer(chan
);
3821 set_bit(CONN_WAIT_F
, &chan
->conn_state
);
3824 clear_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
3825 clear_bit(CONN_RNR_SENT
, &chan
->conn_state
);
3827 BT_DBG("chan %p, Exit local busy", chan
);
3830 void l2cap_chan_busy(struct l2cap_chan
*chan
, int busy
)
3832 if (chan
->mode
== L2CAP_MODE_ERTM
) {
3834 l2cap_ertm_enter_local_busy(chan
);
3836 l2cap_ertm_exit_local_busy(chan
);
3840 static void l2cap_check_srej_gap(struct l2cap_chan
*chan
, u16 tx_seq
)
3842 struct sk_buff
*skb
;
3845 while ((skb
= skb_peek(&chan
->srej_q
)) &&
3846 !test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
3849 if (bt_cb(skb
)->tx_seq
!= tx_seq
)
3852 skb
= skb_dequeue(&chan
->srej_q
);
3853 control
= __set_ctrl_sar(chan
, bt_cb(skb
)->sar
);
3854 err
= l2cap_reassemble_sdu(chan
, skb
, control
);
3857 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3861 chan
->buffer_seq_srej
= __next_seq(chan
, chan
->buffer_seq_srej
);
3862 tx_seq
= __next_seq(chan
, tx_seq
);
3866 static void l2cap_resend_srejframe(struct l2cap_chan
*chan
, u16 tx_seq
)
3868 struct srej_list
*l
, *tmp
;
3871 list_for_each_entry_safe(l
, tmp
, &chan
->srej_l
, list
) {
3872 if (l
->tx_seq
== tx_seq
) {
3877 control
= __set_ctrl_super(chan
, L2CAP_SUPER_SREJ
);
3878 control
|= __set_reqseq(chan
, l
->tx_seq
);
3879 l2cap_send_sframe(chan
, control
);
3881 list_add_tail(&l
->list
, &chan
->srej_l
);
3885 static int l2cap_send_srejframe(struct l2cap_chan
*chan
, u16 tx_seq
)
3887 struct srej_list
*new;
3890 while (tx_seq
!= chan
->expected_tx_seq
) {
3891 control
= __set_ctrl_super(chan
, L2CAP_SUPER_SREJ
);
3892 control
|= __set_reqseq(chan
, chan
->expected_tx_seq
);
3893 l2cap_send_sframe(chan
, control
);
3895 new = kzalloc(sizeof(struct srej_list
), GFP_ATOMIC
);
3899 new->tx_seq
= chan
->expected_tx_seq
;
3901 chan
->expected_tx_seq
= __next_seq(chan
, chan
->expected_tx_seq
);
3903 list_add_tail(&new->list
, &chan
->srej_l
);
3906 chan
->expected_tx_seq
= __next_seq(chan
, chan
->expected_tx_seq
);
3911 static inline int l2cap_data_channel_iframe(struct l2cap_chan
*chan
, u32 rx_control
, struct sk_buff
*skb
)
3913 u16 tx_seq
= __get_txseq(chan
, rx_control
);
3914 u16 req_seq
= __get_reqseq(chan
, rx_control
);
3915 u8 sar
= __get_ctrl_sar(chan
, rx_control
);
3916 int tx_seq_offset
, expected_tx_seq_offset
;
3917 int num_to_ack
= (chan
->tx_win
/6) + 1;
3920 BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan
, skb
->len
,
3921 tx_seq
, rx_control
);
3923 if (__is_ctrl_final(chan
, rx_control
) &&
3924 test_bit(CONN_WAIT_F
, &chan
->conn_state
)) {
3925 __clear_monitor_timer(chan
);
3926 if (chan
->unacked_frames
> 0)
3927 __set_retrans_timer(chan
);
3928 clear_bit(CONN_WAIT_F
, &chan
->conn_state
);
3931 chan
->expected_ack_seq
= req_seq
;
3932 l2cap_drop_acked_frames(chan
);
3934 tx_seq_offset
= __seq_offset(chan
, tx_seq
, chan
->buffer_seq
);
3936 /* invalid tx_seq */
3937 if (tx_seq_offset
>= chan
->tx_win
) {
3938 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
3942 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
3943 if (!test_bit(CONN_RNR_SENT
, &chan
->conn_state
))
3944 l2cap_send_ack(chan
);
3948 if (tx_seq
== chan
->expected_tx_seq
)
3951 if (test_bit(CONN_SREJ_SENT
, &chan
->conn_state
)) {
3952 struct srej_list
*first
;
3954 first
= list_first_entry(&chan
->srej_l
,
3955 struct srej_list
, list
);
3956 if (tx_seq
== first
->tx_seq
) {
3957 l2cap_add_to_srej_queue(chan
, skb
, tx_seq
, sar
);
3958 l2cap_check_srej_gap(chan
, tx_seq
);
3960 list_del(&first
->list
);
3963 if (list_empty(&chan
->srej_l
)) {
3964 chan
->buffer_seq
= chan
->buffer_seq_srej
;
3965 clear_bit(CONN_SREJ_SENT
, &chan
->conn_state
);
3966 l2cap_send_ack(chan
);
3967 BT_DBG("chan %p, Exit SREJ_SENT", chan
);
3970 struct srej_list
*l
;
3972 /* duplicated tx_seq */
3973 if (l2cap_add_to_srej_queue(chan
, skb
, tx_seq
, sar
) < 0)
3976 list_for_each_entry(l
, &chan
->srej_l
, list
) {
3977 if (l
->tx_seq
== tx_seq
) {
3978 l2cap_resend_srejframe(chan
, tx_seq
);
3983 err
= l2cap_send_srejframe(chan
, tx_seq
);
3985 l2cap_send_disconn_req(chan
->conn
, chan
, -err
);
3990 expected_tx_seq_offset
= __seq_offset(chan
,
3991 chan
->expected_tx_seq
, chan
->buffer_seq
);
3993 /* duplicated tx_seq */
3994 if (tx_seq_offset
< expected_tx_seq_offset
)
3997 set_bit(CONN_SREJ_SENT
, &chan
->conn_state
);
3999 BT_DBG("chan %p, Enter SREJ", chan
);
4001 INIT_LIST_HEAD(&chan
->srej_l
);
4002 chan
->buffer_seq_srej
= chan
->buffer_seq
;
4004 __skb_queue_head_init(&chan
->srej_q
);
4005 l2cap_add_to_srej_queue(chan
, skb
, tx_seq
, sar
);
4007 /* Set P-bit only if there are some I-frames to ack. */
4008 if (__clear_ack_timer(chan
))
4009 set_bit(CONN_SEND_PBIT
, &chan
->conn_state
);
4011 err
= l2cap_send_srejframe(chan
, tx_seq
);
4013 l2cap_send_disconn_req(chan
->conn
, chan
, -err
);
4020 chan
->expected_tx_seq
= __next_seq(chan
, chan
->expected_tx_seq
);
4022 if (test_bit(CONN_SREJ_SENT
, &chan
->conn_state
)) {
4023 bt_cb(skb
)->tx_seq
= tx_seq
;
4024 bt_cb(skb
)->sar
= sar
;
4025 __skb_queue_tail(&chan
->srej_q
, skb
);
4029 err
= l2cap_reassemble_sdu(chan
, skb
, rx_control
);
4030 chan
->buffer_seq
= __next_seq(chan
, chan
->buffer_seq
);
4033 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4037 if (__is_ctrl_final(chan
, rx_control
)) {
4038 if (!test_and_clear_bit(CONN_REJ_ACT
, &chan
->conn_state
))
4039 l2cap_retransmit_frames(chan
);
4043 chan
->num_acked
= (chan
->num_acked
+ 1) % num_to_ack
;
4044 if (chan
->num_acked
== num_to_ack
- 1)
4045 l2cap_send_ack(chan
);
4047 __set_ack_timer(chan
);
4056 static inline void l2cap_data_channel_rrframe(struct l2cap_chan
*chan
, u32 rx_control
)
4058 BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan
,
4059 __get_reqseq(chan
, rx_control
), rx_control
);
4061 chan
->expected_ack_seq
= __get_reqseq(chan
, rx_control
);
4062 l2cap_drop_acked_frames(chan
);
4064 if (__is_ctrl_poll(chan
, rx_control
)) {
4065 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
4066 if (test_bit(CONN_SREJ_SENT
, &chan
->conn_state
)) {
4067 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
) &&
4068 (chan
->unacked_frames
> 0))
4069 __set_retrans_timer(chan
);
4071 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4072 l2cap_send_srejtail(chan
);
4074 l2cap_send_i_or_rr_or_rnr(chan
);
4077 } else if (__is_ctrl_final(chan
, rx_control
)) {
4078 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4080 if (!test_and_clear_bit(CONN_REJ_ACT
, &chan
->conn_state
))
4081 l2cap_retransmit_frames(chan
);
4084 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
) &&
4085 (chan
->unacked_frames
> 0))
4086 __set_retrans_timer(chan
);
4088 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4089 if (test_bit(CONN_SREJ_SENT
, &chan
->conn_state
))
4090 l2cap_send_ack(chan
);
4092 l2cap_ertm_send(chan
);
4096 static inline void l2cap_data_channel_rejframe(struct l2cap_chan
*chan
, u32 rx_control
)
4098 u16 tx_seq
= __get_reqseq(chan
, rx_control
);
4100 BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan
, tx_seq
, rx_control
);
4102 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4104 chan
->expected_ack_seq
= tx_seq
;
4105 l2cap_drop_acked_frames(chan
);
4107 if (__is_ctrl_final(chan
, rx_control
)) {
4108 if (!test_and_clear_bit(CONN_REJ_ACT
, &chan
->conn_state
))
4109 l2cap_retransmit_frames(chan
);
4111 l2cap_retransmit_frames(chan
);
4113 if (test_bit(CONN_WAIT_F
, &chan
->conn_state
))
4114 set_bit(CONN_REJ_ACT
, &chan
->conn_state
);
4117 static inline void l2cap_data_channel_srejframe(struct l2cap_chan
*chan
, u32 rx_control
)
4119 u16 tx_seq
= __get_reqseq(chan
, rx_control
);
4121 BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan
, tx_seq
, rx_control
);
4123 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4125 if (__is_ctrl_poll(chan
, rx_control
)) {
4126 chan
->expected_ack_seq
= tx_seq
;
4127 l2cap_drop_acked_frames(chan
);
4129 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
4130 l2cap_retransmit_one_frame(chan
, tx_seq
);
4132 l2cap_ertm_send(chan
);
4134 if (test_bit(CONN_WAIT_F
, &chan
->conn_state
)) {
4135 chan
->srej_save_reqseq
= tx_seq
;
4136 set_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
4138 } else if (__is_ctrl_final(chan
, rx_control
)) {
4139 if (test_bit(CONN_SREJ_ACT
, &chan
->conn_state
) &&
4140 chan
->srej_save_reqseq
== tx_seq
)
4141 clear_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
4143 l2cap_retransmit_one_frame(chan
, tx_seq
);
4145 l2cap_retransmit_one_frame(chan
, tx_seq
);
4146 if (test_bit(CONN_WAIT_F
, &chan
->conn_state
)) {
4147 chan
->srej_save_reqseq
= tx_seq
;
4148 set_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
4153 static inline void l2cap_data_channel_rnrframe(struct l2cap_chan
*chan
, u32 rx_control
)
4155 u16 tx_seq
= __get_reqseq(chan
, rx_control
);
4157 BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan
, tx_seq
, rx_control
);
4159 set_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4160 chan
->expected_ack_seq
= tx_seq
;
4161 l2cap_drop_acked_frames(chan
);
4163 if (__is_ctrl_poll(chan
, rx_control
))
4164 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
4166 if (!test_bit(CONN_SREJ_SENT
, &chan
->conn_state
)) {
4167 __clear_retrans_timer(chan
);
4168 if (__is_ctrl_poll(chan
, rx_control
))
4169 l2cap_send_rr_or_rnr(chan
, L2CAP_CTRL_FINAL
);
4173 if (__is_ctrl_poll(chan
, rx_control
)) {
4174 l2cap_send_srejtail(chan
);
4176 rx_control
= __set_ctrl_super(chan
, L2CAP_SUPER_RR
);
4177 l2cap_send_sframe(chan
, rx_control
);
4181 static inline int l2cap_data_channel_sframe(struct l2cap_chan
*chan
, u32 rx_control
, struct sk_buff
*skb
)
4183 BT_DBG("chan %p rx_control 0x%8.8x len %d", chan
, rx_control
, skb
->len
);
4185 if (__is_ctrl_final(chan
, rx_control
) &&
4186 test_bit(CONN_WAIT_F
, &chan
->conn_state
)) {
4187 __clear_monitor_timer(chan
);
4188 if (chan
->unacked_frames
> 0)
4189 __set_retrans_timer(chan
);
4190 clear_bit(CONN_WAIT_F
, &chan
->conn_state
);
4193 switch (__get_ctrl_super(chan
, rx_control
)) {
4194 case L2CAP_SUPER_RR
:
4195 l2cap_data_channel_rrframe(chan
, rx_control
);
4198 case L2CAP_SUPER_REJ
:
4199 l2cap_data_channel_rejframe(chan
, rx_control
);
4202 case L2CAP_SUPER_SREJ
:
4203 l2cap_data_channel_srejframe(chan
, rx_control
);
4206 case L2CAP_SUPER_RNR
:
4207 l2cap_data_channel_rnrframe(chan
, rx_control
);
4215 static int l2cap_ertm_data_rcv(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
4219 int len
, next_tx_seq_offset
, req_seq_offset
;
4221 control
= __get_control(chan
, skb
->data
);
4222 skb_pull(skb
, __ctrl_size(chan
));
4226 * We can just drop the corrupted I-frame here.
4227 * Receiver will miss it and start proper recovery
4228 * procedures and ask retransmission.
4230 if (l2cap_check_fcs(chan
, skb
))
4233 if (__is_sar_start(chan
, control
) && !__is_sframe(chan
, control
))
4234 len
-= L2CAP_SDULEN_SIZE
;
4236 if (chan
->fcs
== L2CAP_FCS_CRC16
)
4237 len
-= L2CAP_FCS_SIZE
;
4239 if (len
> chan
->mps
) {
4240 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4244 req_seq
= __get_reqseq(chan
, control
);
4246 req_seq_offset
= __seq_offset(chan
, req_seq
, chan
->expected_ack_seq
);
4248 next_tx_seq_offset
= __seq_offset(chan
, chan
->next_tx_seq
,
4249 chan
->expected_ack_seq
);
4251 /* check for invalid req-seq */
4252 if (req_seq_offset
> next_tx_seq_offset
) {
4253 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4257 if (!__is_sframe(chan
, control
)) {
4259 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4263 l2cap_data_channel_iframe(chan
, control
, skb
);
4267 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4271 l2cap_data_channel_sframe(chan
, control
, skb
);
4281 static inline int l2cap_data_channel(struct l2cap_conn
*conn
, u16 cid
, struct sk_buff
*skb
)
4283 struct l2cap_chan
*chan
;
4288 chan
= l2cap_get_chan_by_scid(conn
, cid
);
4290 BT_DBG("unknown cid 0x%4.4x", cid
);
4291 /* Drop packet and return */
4296 l2cap_chan_lock(chan
);
4298 BT_DBG("chan %p, len %d", chan
, skb
->len
);
4300 if (chan
->state
!= BT_CONNECTED
)
4303 switch (chan
->mode
) {
4304 case L2CAP_MODE_BASIC
:
4305 /* If socket recv buffers overflows we drop data here
4306 * which is *bad* because L2CAP has to be reliable.
4307 * But we don't have any other choice. L2CAP doesn't
4308 * provide flow control mechanism. */
4310 if (chan
->imtu
< skb
->len
)
4313 if (!chan
->ops
->recv(chan
->data
, skb
))
4317 case L2CAP_MODE_ERTM
:
4318 l2cap_ertm_data_rcv(chan
, skb
);
4322 case L2CAP_MODE_STREAMING
:
4323 control
= __get_control(chan
, skb
->data
);
4324 skb_pull(skb
, __ctrl_size(chan
));
4327 if (l2cap_check_fcs(chan
, skb
))
4330 if (__is_sar_start(chan
, control
))
4331 len
-= L2CAP_SDULEN_SIZE
;
4333 if (chan
->fcs
== L2CAP_FCS_CRC16
)
4334 len
-= L2CAP_FCS_SIZE
;
4336 if (len
> chan
->mps
|| len
< 0 || __is_sframe(chan
, control
))
4339 tx_seq
= __get_txseq(chan
, control
);
4341 if (chan
->expected_tx_seq
!= tx_seq
) {
4342 /* Frame(s) missing - must discard partial SDU */
4343 kfree_skb(chan
->sdu
);
4345 chan
->sdu_last_frag
= NULL
;
4348 /* TODO: Notify userland of missing data */
4351 chan
->expected_tx_seq
= __next_seq(chan
, tx_seq
);
4353 if (l2cap_reassemble_sdu(chan
, skb
, control
) == -EMSGSIZE
)
4354 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4359 BT_DBG("chan %p: bad mode 0x%2.2x", chan
, chan
->mode
);
4367 l2cap_chan_unlock(chan
);
4372 static inline int l2cap_conless_channel(struct l2cap_conn
*conn
, __le16 psm
, struct sk_buff
*skb
)
4374 struct l2cap_chan
*chan
;
4376 chan
= l2cap_global_chan_by_psm(0, psm
, conn
->src
);
4380 BT_DBG("chan %p, len %d", chan
, skb
->len
);
4382 if (chan
->state
!= BT_BOUND
&& chan
->state
!= BT_CONNECTED
)
4385 if (chan
->imtu
< skb
->len
)
4388 if (!chan
->ops
->recv(chan
->data
, skb
))
4397 static inline int l2cap_att_channel(struct l2cap_conn
*conn
, __le16 cid
, struct sk_buff
*skb
)
4399 struct l2cap_chan
*chan
;
4401 chan
= l2cap_global_chan_by_scid(0, cid
, conn
->src
);
4405 BT_DBG("chan %p, len %d", chan
, skb
->len
);
4407 if (chan
->state
!= BT_BOUND
&& chan
->state
!= BT_CONNECTED
)
4410 if (chan
->imtu
< skb
->len
)
4413 if (!chan
->ops
->recv(chan
->data
, skb
))
4422 static void l2cap_recv_frame(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
4424 struct l2cap_hdr
*lh
= (void *) skb
->data
;
4428 skb_pull(skb
, L2CAP_HDR_SIZE
);
4429 cid
= __le16_to_cpu(lh
->cid
);
4430 len
= __le16_to_cpu(lh
->len
);
4432 if (len
!= skb
->len
) {
4437 BT_DBG("len %d, cid 0x%4.4x", len
, cid
);
4440 case L2CAP_CID_LE_SIGNALING
:
4441 case L2CAP_CID_SIGNALING
:
4442 l2cap_sig_channel(conn
, skb
);
4445 case L2CAP_CID_CONN_LESS
:
4446 psm
= get_unaligned_le16(skb
->data
);
4448 l2cap_conless_channel(conn
, psm
, skb
);
4451 case L2CAP_CID_LE_DATA
:
4452 l2cap_att_channel(conn
, cid
, skb
);
4456 if (smp_sig_channel(conn
, skb
))
4457 l2cap_conn_del(conn
->hcon
, EACCES
);
4461 l2cap_data_channel(conn
, cid
, skb
);
4466 /* ---- L2CAP interface with lower layer (HCI) ---- */
4468 int l2cap_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
4470 int exact
= 0, lm1
= 0, lm2
= 0;
4471 struct l2cap_chan
*c
;
4473 BT_DBG("hdev %s, bdaddr %s", hdev
->name
, batostr(bdaddr
));
4475 /* Find listening sockets and check their link_mode */
4476 read_lock(&chan_list_lock
);
4477 list_for_each_entry(c
, &chan_list
, global_l
) {
4478 struct sock
*sk
= c
->sk
;
4480 if (c
->state
!= BT_LISTEN
)
4483 if (!bacmp(&bt_sk(sk
)->src
, &hdev
->bdaddr
)) {
4484 lm1
|= HCI_LM_ACCEPT
;
4485 if (test_bit(FLAG_ROLE_SWITCH
, &c
->flags
))
4486 lm1
|= HCI_LM_MASTER
;
4488 } else if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
)) {
4489 lm2
|= HCI_LM_ACCEPT
;
4490 if (test_bit(FLAG_ROLE_SWITCH
, &c
->flags
))
4491 lm2
|= HCI_LM_MASTER
;
4494 read_unlock(&chan_list_lock
);
4496 return exact
? lm1
: lm2
;
4499 int l2cap_connect_cfm(struct hci_conn
*hcon
, u8 status
)
4501 struct l2cap_conn
*conn
;
4503 BT_DBG("hcon %p bdaddr %s status %d", hcon
, batostr(&hcon
->dst
), status
);
4506 conn
= l2cap_conn_add(hcon
, status
);
4508 l2cap_conn_ready(conn
);
4510 l2cap_conn_del(hcon
, bt_to_errno(status
));
4515 int l2cap_disconn_ind(struct hci_conn
*hcon
)
4517 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
4519 BT_DBG("hcon %p", hcon
);
4522 return HCI_ERROR_REMOTE_USER_TERM
;
4523 return conn
->disc_reason
;
4526 int l2cap_disconn_cfm(struct hci_conn
*hcon
, u8 reason
)
4528 BT_DBG("hcon %p reason %d", hcon
, reason
);
4530 l2cap_conn_del(hcon
, bt_to_errno(reason
));
4534 static inline void l2cap_check_encryption(struct l2cap_chan
*chan
, u8 encrypt
)
4536 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
)
4539 if (encrypt
== 0x00) {
4540 if (chan
->sec_level
== BT_SECURITY_MEDIUM
) {
4541 __clear_chan_timer(chan
);
4542 __set_chan_timer(chan
, L2CAP_ENC_TIMEOUT
);
4543 } else if (chan
->sec_level
== BT_SECURITY_HIGH
)
4544 l2cap_chan_close(chan
, ECONNREFUSED
);
4546 if (chan
->sec_level
== BT_SECURITY_MEDIUM
)
4547 __clear_chan_timer(chan
);
4551 int l2cap_security_cfm(struct hci_conn
*hcon
, u8 status
, u8 encrypt
)
4553 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
4554 struct l2cap_chan
*chan
;
4559 BT_DBG("conn %p", conn
);
4561 if (hcon
->type
== LE_LINK
) {
4562 smp_distribute_keys(conn
, 0);
4563 cancel_delayed_work(&conn
->security_timer
);
4566 mutex_lock(&conn
->chan_lock
);
4568 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
4569 l2cap_chan_lock(chan
);
4571 BT_DBG("chan->scid %d", chan
->scid
);
4573 if (chan
->scid
== L2CAP_CID_LE_DATA
) {
4574 if (!status
&& encrypt
) {
4575 chan
->sec_level
= hcon
->sec_level
;
4576 l2cap_chan_ready(chan
);
4579 l2cap_chan_unlock(chan
);
4583 if (test_bit(CONF_CONNECT_PEND
, &chan
->conf_state
)) {
4584 l2cap_chan_unlock(chan
);
4588 if (!status
&& (chan
->state
== BT_CONNECTED
||
4589 chan
->state
== BT_CONFIG
)) {
4590 l2cap_check_encryption(chan
, encrypt
);
4591 l2cap_chan_unlock(chan
);
4595 if (chan
->state
== BT_CONNECT
) {
4597 l2cap_send_conn_req(chan
);
4599 __clear_chan_timer(chan
);
4600 __set_chan_timer(chan
, L2CAP_DISC_TIMEOUT
);
4602 } else if (chan
->state
== BT_CONNECT2
) {
4603 struct sock
*sk
= chan
->sk
;
4604 struct l2cap_conn_rsp rsp
;
4610 if (bt_sk(sk
)->defer_setup
) {
4611 struct sock
*parent
= bt_sk(sk
)->parent
;
4612 res
= L2CAP_CR_PEND
;
4613 stat
= L2CAP_CS_AUTHOR_PEND
;
4615 parent
->sk_data_ready(parent
, 0);
4617 __l2cap_state_change(chan
, BT_CONFIG
);
4618 res
= L2CAP_CR_SUCCESS
;
4619 stat
= L2CAP_CS_NO_INFO
;
4622 __l2cap_state_change(chan
, BT_DISCONN
);
4623 __set_chan_timer(chan
, L2CAP_DISC_TIMEOUT
);
4624 res
= L2CAP_CR_SEC_BLOCK
;
4625 stat
= L2CAP_CS_NO_INFO
;
4630 rsp
.scid
= cpu_to_le16(chan
->dcid
);
4631 rsp
.dcid
= cpu_to_le16(chan
->scid
);
4632 rsp
.result
= cpu_to_le16(res
);
4633 rsp
.status
= cpu_to_le16(stat
);
4634 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
4638 l2cap_chan_unlock(chan
);
4641 mutex_unlock(&conn
->chan_lock
);
4646 int l2cap_recv_acldata(struct hci_conn
*hcon
, struct sk_buff
*skb
, u16 flags
)
4648 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
4651 conn
= l2cap_conn_add(hcon
, 0);
4656 BT_DBG("conn %p len %d flags 0x%x", conn
, skb
->len
, flags
);
4658 if (!(flags
& ACL_CONT
)) {
4659 struct l2cap_hdr
*hdr
;
4660 struct l2cap_chan
*chan
;
4665 BT_ERR("Unexpected start frame (len %d)", skb
->len
);
4666 kfree_skb(conn
->rx_skb
);
4667 conn
->rx_skb
= NULL
;
4669 l2cap_conn_unreliable(conn
, ECOMM
);
4672 /* Start fragment always begin with Basic L2CAP header */
4673 if (skb
->len
< L2CAP_HDR_SIZE
) {
4674 BT_ERR("Frame is too short (len %d)", skb
->len
);
4675 l2cap_conn_unreliable(conn
, ECOMM
);
4679 hdr
= (struct l2cap_hdr
*) skb
->data
;
4680 len
= __le16_to_cpu(hdr
->len
) + L2CAP_HDR_SIZE
;
4681 cid
= __le16_to_cpu(hdr
->cid
);
4683 if (len
== skb
->len
) {
4684 /* Complete frame received */
4685 l2cap_recv_frame(conn
, skb
);
4689 BT_DBG("Start: total len %d, frag len %d", len
, skb
->len
);
4691 if (skb
->len
> len
) {
4692 BT_ERR("Frame is too long (len %d, expected len %d)",
4694 l2cap_conn_unreliable(conn
, ECOMM
);
4698 chan
= l2cap_get_chan_by_scid(conn
, cid
);
4700 if (chan
&& chan
->sk
) {
4701 struct sock
*sk
= chan
->sk
;
4704 if (chan
->imtu
< len
- L2CAP_HDR_SIZE
) {
4705 BT_ERR("Frame exceeding recv MTU (len %d, "
4709 l2cap_conn_unreliable(conn
, ECOMM
);
4715 /* Allocate skb for the complete frame (with header) */
4716 conn
->rx_skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
4720 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
4722 conn
->rx_len
= len
- skb
->len
;
4724 BT_DBG("Cont: frag len %d (expecting %d)", skb
->len
, conn
->rx_len
);
4726 if (!conn
->rx_len
) {
4727 BT_ERR("Unexpected continuation frame (len %d)", skb
->len
);
4728 l2cap_conn_unreliable(conn
, ECOMM
);
4732 if (skb
->len
> conn
->rx_len
) {
4733 BT_ERR("Fragment is too long (len %d, expected %d)",
4734 skb
->len
, conn
->rx_len
);
4735 kfree_skb(conn
->rx_skb
);
4736 conn
->rx_skb
= NULL
;
4738 l2cap_conn_unreliable(conn
, ECOMM
);
4742 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
4744 conn
->rx_len
-= skb
->len
;
4746 if (!conn
->rx_len
) {
4747 /* Complete frame received */
4748 l2cap_recv_frame(conn
, conn
->rx_skb
);
4749 conn
->rx_skb
= NULL
;
4758 static int l2cap_debugfs_show(struct seq_file
*f
, void *p
)
4760 struct l2cap_chan
*c
;
4762 read_lock(&chan_list_lock
);
4764 list_for_each_entry(c
, &chan_list
, global_l
) {
4765 struct sock
*sk
= c
->sk
;
4767 seq_printf(f
, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4768 batostr(&bt_sk(sk
)->src
),
4769 batostr(&bt_sk(sk
)->dst
),
4770 c
->state
, __le16_to_cpu(c
->psm
),
4771 c
->scid
, c
->dcid
, c
->imtu
, c
->omtu
,
4772 c
->sec_level
, c
->mode
);
4775 read_unlock(&chan_list_lock
);
4780 static int l2cap_debugfs_open(struct inode
*inode
, struct file
*file
)
4782 return single_open(file
, l2cap_debugfs_show
, inode
->i_private
);
4785 static const struct file_operations l2cap_debugfs_fops
= {
4786 .open
= l2cap_debugfs_open
,
4788 .llseek
= seq_lseek
,
4789 .release
= single_release
,
4792 static struct dentry
*l2cap_debugfs
;
4794 int __init
l2cap_init(void)
4798 err
= l2cap_init_sockets();
4803 l2cap_debugfs
= debugfs_create_file("l2cap", 0444,
4804 bt_debugfs
, NULL
, &l2cap_debugfs_fops
);
4806 BT_ERR("Failed to create L2CAP debug file");
4812 void l2cap_exit(void)
4814 debugfs_remove(l2cap_debugfs
);
4815 l2cap_cleanup_sockets();
4818 module_param(disable_ertm
, bool, 0644);
4819 MODULE_PARM_DESC(disable_ertm
, "Disable enhanced retransmission mode");