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
7 Copyright (c) 2012 Code Aurora Forum. All rights reserved.
9 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License version 2 as
13 published by the Free Software Foundation;
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
18 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
19 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
25 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
26 SOFTWARE IS DISCLAIMED.
29 /* Bluetooth L2CAP core. */
31 #include <linux/module.h>
33 #include <linux/debugfs.h>
34 #include <linux/crc16.h>
36 #include <net/bluetooth/bluetooth.h>
37 #include <net/bluetooth/hci_core.h>
38 #include <net/bluetooth/l2cap.h>
39 #include <net/bluetooth/smp.h>
40 #include <net/bluetooth/a2mp.h>
41 #include <net/bluetooth/amp.h>
45 static u32 l2cap_feat_mask
= L2CAP_FEAT_FIXED_CHAN
;
46 static u8 l2cap_fixed_chan
[8] = { L2CAP_FC_L2CAP
, };
48 static LIST_HEAD(chan_list
);
49 static DEFINE_RWLOCK(chan_list_lock
);
51 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
52 u8 code
, u8 ident
, u16 dlen
, void *data
);
53 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
,
55 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
);
56 static void l2cap_send_disconn_req(struct l2cap_chan
*chan
, int err
);
58 static void l2cap_tx(struct l2cap_chan
*chan
, struct l2cap_ctrl
*control
,
59 struct sk_buff_head
*skbs
, u8 event
);
61 /* ---- L2CAP channels ---- */
63 static struct l2cap_chan
*__l2cap_get_chan_by_dcid(struct l2cap_conn
*conn
,
68 list_for_each_entry(c
, &conn
->chan_l
, list
) {
75 static struct l2cap_chan
*__l2cap_get_chan_by_scid(struct l2cap_conn
*conn
,
80 list_for_each_entry(c
, &conn
->chan_l
, list
) {
87 /* Find channel with given SCID.
88 * Returns locked channel. */
89 static struct l2cap_chan
*l2cap_get_chan_by_scid(struct l2cap_conn
*conn
,
94 mutex_lock(&conn
->chan_lock
);
95 c
= __l2cap_get_chan_by_scid(conn
, cid
);
98 mutex_unlock(&conn
->chan_lock
);
103 /* Find channel with given DCID.
104 * Returns locked channel.
106 static struct l2cap_chan
*l2cap_get_chan_by_dcid(struct l2cap_conn
*conn
,
109 struct l2cap_chan
*c
;
111 mutex_lock(&conn
->chan_lock
);
112 c
= __l2cap_get_chan_by_dcid(conn
, cid
);
115 mutex_unlock(&conn
->chan_lock
);
120 static struct l2cap_chan
*__l2cap_get_chan_by_ident(struct l2cap_conn
*conn
,
123 struct l2cap_chan
*c
;
125 list_for_each_entry(c
, &conn
->chan_l
, list
) {
126 if (c
->ident
== ident
)
132 static struct l2cap_chan
*l2cap_get_chan_by_ident(struct l2cap_conn
*conn
,
135 struct l2cap_chan
*c
;
137 mutex_lock(&conn
->chan_lock
);
138 c
= __l2cap_get_chan_by_ident(conn
, ident
);
141 mutex_unlock(&conn
->chan_lock
);
146 static struct l2cap_chan
*__l2cap_global_chan_by_addr(__le16 psm
, bdaddr_t
*src
)
148 struct l2cap_chan
*c
;
150 list_for_each_entry(c
, &chan_list
, global_l
) {
151 if (c
->sport
== psm
&& !bacmp(&bt_sk(c
->sk
)->src
, src
))
157 int l2cap_add_psm(struct l2cap_chan
*chan
, bdaddr_t
*src
, __le16 psm
)
161 write_lock(&chan_list_lock
);
163 if (psm
&& __l2cap_global_chan_by_addr(psm
, src
)) {
176 for (p
= 0x1001; p
< 0x1100; p
+= 2)
177 if (!__l2cap_global_chan_by_addr(cpu_to_le16(p
), src
)) {
178 chan
->psm
= cpu_to_le16(p
);
179 chan
->sport
= cpu_to_le16(p
);
186 write_unlock(&chan_list_lock
);
190 int l2cap_add_scid(struct l2cap_chan
*chan
, __u16 scid
)
192 write_lock(&chan_list_lock
);
196 write_unlock(&chan_list_lock
);
201 static u16
l2cap_alloc_cid(struct l2cap_conn
*conn
)
203 u16 cid
= L2CAP_CID_DYN_START
;
205 for (; cid
< L2CAP_CID_DYN_END
; cid
++) {
206 if (!__l2cap_get_chan_by_scid(conn
, cid
))
213 static void __l2cap_state_change(struct l2cap_chan
*chan
, int state
)
215 BT_DBG("chan %p %s -> %s", chan
, state_to_string(chan
->state
),
216 state_to_string(state
));
219 chan
->ops
->state_change(chan
, state
);
222 static void l2cap_state_change(struct l2cap_chan
*chan
, int state
)
224 struct sock
*sk
= chan
->sk
;
227 __l2cap_state_change(chan
, state
);
231 static inline void __l2cap_chan_set_err(struct l2cap_chan
*chan
, int err
)
233 struct sock
*sk
= chan
->sk
;
238 static inline void l2cap_chan_set_err(struct l2cap_chan
*chan
, int err
)
240 struct sock
*sk
= chan
->sk
;
243 __l2cap_chan_set_err(chan
, err
);
247 static void __set_retrans_timer(struct l2cap_chan
*chan
)
249 if (!delayed_work_pending(&chan
->monitor_timer
) &&
250 chan
->retrans_timeout
) {
251 l2cap_set_timer(chan
, &chan
->retrans_timer
,
252 msecs_to_jiffies(chan
->retrans_timeout
));
256 static void __set_monitor_timer(struct l2cap_chan
*chan
)
258 __clear_retrans_timer(chan
);
259 if (chan
->monitor_timeout
) {
260 l2cap_set_timer(chan
, &chan
->monitor_timer
,
261 msecs_to_jiffies(chan
->monitor_timeout
));
265 static struct sk_buff
*l2cap_ertm_seq_in_queue(struct sk_buff_head
*head
,
270 skb_queue_walk(head
, skb
) {
271 if (bt_cb(skb
)->control
.txseq
== seq
)
278 /* ---- L2CAP sequence number lists ---- */
280 /* For ERTM, ordered lists of sequence numbers must be tracked for
281 * SREJ requests that are received and for frames that are to be
282 * retransmitted. These seq_list functions implement a singly-linked
283 * list in an array, where membership in the list can also be checked
284 * in constant time. Items can also be added to the tail of the list
285 * and removed from the head in constant time, without further memory
289 static int l2cap_seq_list_init(struct l2cap_seq_list
*seq_list
, u16 size
)
291 size_t alloc_size
, i
;
293 /* Allocated size is a power of 2 to map sequence numbers
294 * (which may be up to 14 bits) in to a smaller array that is
295 * sized for the negotiated ERTM transmit windows.
297 alloc_size
= roundup_pow_of_two(size
);
299 seq_list
->list
= kmalloc(sizeof(u16
) * alloc_size
, GFP_KERNEL
);
303 seq_list
->mask
= alloc_size
- 1;
304 seq_list
->head
= L2CAP_SEQ_LIST_CLEAR
;
305 seq_list
->tail
= L2CAP_SEQ_LIST_CLEAR
;
306 for (i
= 0; i
< alloc_size
; i
++)
307 seq_list
->list
[i
] = L2CAP_SEQ_LIST_CLEAR
;
312 static inline void l2cap_seq_list_free(struct l2cap_seq_list
*seq_list
)
314 kfree(seq_list
->list
);
317 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list
*seq_list
,
320 /* Constant-time check for list membership */
321 return seq_list
->list
[seq
& seq_list
->mask
] != L2CAP_SEQ_LIST_CLEAR
;
324 static u16
l2cap_seq_list_remove(struct l2cap_seq_list
*seq_list
, u16 seq
)
326 u16 mask
= seq_list
->mask
;
328 if (seq_list
->head
== L2CAP_SEQ_LIST_CLEAR
) {
329 /* In case someone tries to pop the head of an empty list */
330 return L2CAP_SEQ_LIST_CLEAR
;
331 } else if (seq_list
->head
== seq
) {
332 /* Head can be removed in constant time */
333 seq_list
->head
= seq_list
->list
[seq
& mask
];
334 seq_list
->list
[seq
& mask
] = L2CAP_SEQ_LIST_CLEAR
;
336 if (seq_list
->head
== L2CAP_SEQ_LIST_TAIL
) {
337 seq_list
->head
= L2CAP_SEQ_LIST_CLEAR
;
338 seq_list
->tail
= L2CAP_SEQ_LIST_CLEAR
;
341 /* Walk the list to find the sequence number */
342 u16 prev
= seq_list
->head
;
343 while (seq_list
->list
[prev
& mask
] != seq
) {
344 prev
= seq_list
->list
[prev
& mask
];
345 if (prev
== L2CAP_SEQ_LIST_TAIL
)
346 return L2CAP_SEQ_LIST_CLEAR
;
349 /* Unlink the number from the list and clear it */
350 seq_list
->list
[prev
& mask
] = seq_list
->list
[seq
& mask
];
351 seq_list
->list
[seq
& mask
] = L2CAP_SEQ_LIST_CLEAR
;
352 if (seq_list
->tail
== seq
)
353 seq_list
->tail
= prev
;
358 static inline u16
l2cap_seq_list_pop(struct l2cap_seq_list
*seq_list
)
360 /* Remove the head in constant time */
361 return l2cap_seq_list_remove(seq_list
, seq_list
->head
);
364 static void l2cap_seq_list_clear(struct l2cap_seq_list
*seq_list
)
368 if (seq_list
->head
== L2CAP_SEQ_LIST_CLEAR
)
371 for (i
= 0; i
<= seq_list
->mask
; i
++)
372 seq_list
->list
[i
] = L2CAP_SEQ_LIST_CLEAR
;
374 seq_list
->head
= L2CAP_SEQ_LIST_CLEAR
;
375 seq_list
->tail
= L2CAP_SEQ_LIST_CLEAR
;
378 static void l2cap_seq_list_append(struct l2cap_seq_list
*seq_list
, u16 seq
)
380 u16 mask
= seq_list
->mask
;
382 /* All appends happen in constant time */
384 if (seq_list
->list
[seq
& mask
] != L2CAP_SEQ_LIST_CLEAR
)
387 if (seq_list
->tail
== L2CAP_SEQ_LIST_CLEAR
)
388 seq_list
->head
= seq
;
390 seq_list
->list
[seq_list
->tail
& mask
] = seq
;
392 seq_list
->tail
= seq
;
393 seq_list
->list
[seq
& mask
] = L2CAP_SEQ_LIST_TAIL
;
396 static void l2cap_chan_timeout(struct work_struct
*work
)
398 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
400 struct l2cap_conn
*conn
= chan
->conn
;
403 BT_DBG("chan %p state %s", chan
, state_to_string(chan
->state
));
405 mutex_lock(&conn
->chan_lock
);
406 l2cap_chan_lock(chan
);
408 if (chan
->state
== BT_CONNECTED
|| chan
->state
== BT_CONFIG
)
409 reason
= ECONNREFUSED
;
410 else if (chan
->state
== BT_CONNECT
&&
411 chan
->sec_level
!= BT_SECURITY_SDP
)
412 reason
= ECONNREFUSED
;
416 l2cap_chan_close(chan
, reason
);
418 l2cap_chan_unlock(chan
);
420 chan
->ops
->close(chan
);
421 mutex_unlock(&conn
->chan_lock
);
423 l2cap_chan_put(chan
);
426 struct l2cap_chan
*l2cap_chan_create(void)
428 struct l2cap_chan
*chan
;
430 chan
= kzalloc(sizeof(*chan
), GFP_ATOMIC
);
434 mutex_init(&chan
->lock
);
436 write_lock(&chan_list_lock
);
437 list_add(&chan
->global_l
, &chan_list
);
438 write_unlock(&chan_list_lock
);
440 INIT_DELAYED_WORK(&chan
->chan_timer
, l2cap_chan_timeout
);
442 chan
->state
= BT_OPEN
;
444 kref_init(&chan
->kref
);
446 /* This flag is cleared in l2cap_chan_ready() */
447 set_bit(CONF_NOT_COMPLETE
, &chan
->conf_state
);
449 BT_DBG("chan %p", chan
);
454 static void l2cap_chan_destroy(struct kref
*kref
)
456 struct l2cap_chan
*chan
= container_of(kref
, struct l2cap_chan
, kref
);
458 BT_DBG("chan %p", chan
);
460 write_lock(&chan_list_lock
);
461 list_del(&chan
->global_l
);
462 write_unlock(&chan_list_lock
);
467 void l2cap_chan_hold(struct l2cap_chan
*c
)
469 BT_DBG("chan %p orig refcnt %d", c
, atomic_read(&c
->kref
.refcount
));
474 void l2cap_chan_put(struct l2cap_chan
*c
)
476 BT_DBG("chan %p orig refcnt %d", c
, atomic_read(&c
->kref
.refcount
));
478 kref_put(&c
->kref
, l2cap_chan_destroy
);
481 void l2cap_chan_set_defaults(struct l2cap_chan
*chan
)
483 chan
->fcs
= L2CAP_FCS_CRC16
;
484 chan
->max_tx
= L2CAP_DEFAULT_MAX_TX
;
485 chan
->tx_win
= L2CAP_DEFAULT_TX_WINDOW
;
486 chan
->tx_win_max
= L2CAP_DEFAULT_TX_WINDOW
;
487 chan
->ack_win
= L2CAP_DEFAULT_TX_WINDOW
;
488 chan
->sec_level
= BT_SECURITY_LOW
;
490 set_bit(FLAG_FORCE_ACTIVE
, &chan
->flags
);
493 void __l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
495 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn
,
496 __le16_to_cpu(chan
->psm
), chan
->dcid
);
498 conn
->disc_reason
= HCI_ERROR_REMOTE_USER_TERM
;
502 switch (chan
->chan_type
) {
503 case L2CAP_CHAN_CONN_ORIENTED
:
504 if (conn
->hcon
->type
== LE_LINK
) {
506 chan
->omtu
= L2CAP_DEFAULT_MTU
;
507 if (chan
->dcid
== L2CAP_CID_ATT
)
508 chan
->scid
= L2CAP_CID_ATT
;
510 chan
->scid
= l2cap_alloc_cid(conn
);
512 /* Alloc CID for connection-oriented socket */
513 chan
->scid
= l2cap_alloc_cid(conn
);
514 chan
->omtu
= L2CAP_DEFAULT_MTU
;
518 case L2CAP_CHAN_CONN_LESS
:
519 /* Connectionless socket */
520 chan
->scid
= L2CAP_CID_CONN_LESS
;
521 chan
->dcid
= L2CAP_CID_CONN_LESS
;
522 chan
->omtu
= L2CAP_DEFAULT_MTU
;
525 case L2CAP_CHAN_CONN_FIX_A2MP
:
526 chan
->scid
= L2CAP_CID_A2MP
;
527 chan
->dcid
= L2CAP_CID_A2MP
;
528 chan
->omtu
= L2CAP_A2MP_DEFAULT_MTU
;
529 chan
->imtu
= L2CAP_A2MP_DEFAULT_MTU
;
533 /* Raw socket can send/recv signalling messages only */
534 chan
->scid
= L2CAP_CID_SIGNALING
;
535 chan
->dcid
= L2CAP_CID_SIGNALING
;
536 chan
->omtu
= L2CAP_DEFAULT_MTU
;
539 chan
->local_id
= L2CAP_BESTEFFORT_ID
;
540 chan
->local_stype
= L2CAP_SERV_BESTEFFORT
;
541 chan
->local_msdu
= L2CAP_DEFAULT_MAX_SDU_SIZE
;
542 chan
->local_sdu_itime
= L2CAP_DEFAULT_SDU_ITIME
;
543 chan
->local_acc_lat
= L2CAP_DEFAULT_ACC_LAT
;
544 chan
->local_flush_to
= L2CAP_EFS_DEFAULT_FLUSH_TO
;
546 l2cap_chan_hold(chan
);
548 list_add(&chan
->list
, &conn
->chan_l
);
551 void l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
553 mutex_lock(&conn
->chan_lock
);
554 __l2cap_chan_add(conn
, chan
);
555 mutex_unlock(&conn
->chan_lock
);
558 void l2cap_chan_del(struct l2cap_chan
*chan
, int err
)
560 struct l2cap_conn
*conn
= chan
->conn
;
562 __clear_chan_timer(chan
);
564 BT_DBG("chan %p, conn %p, err %d", chan
, conn
, err
);
567 struct amp_mgr
*mgr
= conn
->hcon
->amp_mgr
;
568 /* Delete from channel list */
569 list_del(&chan
->list
);
571 l2cap_chan_put(chan
);
575 if (chan
->chan_type
!= L2CAP_CHAN_CONN_FIX_A2MP
)
576 hci_conn_drop(conn
->hcon
);
578 if (mgr
&& mgr
->bredr_chan
== chan
)
579 mgr
->bredr_chan
= NULL
;
582 if (chan
->hs_hchan
) {
583 struct hci_chan
*hs_hchan
= chan
->hs_hchan
;
585 BT_DBG("chan %p disconnect hs_hchan %p", chan
, hs_hchan
);
586 amp_disconnect_logical_link(hs_hchan
);
589 chan
->ops
->teardown(chan
, err
);
591 if (test_bit(CONF_NOT_COMPLETE
, &chan
->conf_state
))
595 case L2CAP_MODE_BASIC
:
598 case L2CAP_MODE_ERTM
:
599 __clear_retrans_timer(chan
);
600 __clear_monitor_timer(chan
);
601 __clear_ack_timer(chan
);
603 skb_queue_purge(&chan
->srej_q
);
605 l2cap_seq_list_free(&chan
->srej_list
);
606 l2cap_seq_list_free(&chan
->retrans_list
);
610 case L2CAP_MODE_STREAMING
:
611 skb_queue_purge(&chan
->tx_q
);
618 void l2cap_chan_close(struct l2cap_chan
*chan
, int reason
)
620 struct l2cap_conn
*conn
= chan
->conn
;
621 struct sock
*sk
= chan
->sk
;
623 BT_DBG("chan %p state %s sk %p", chan
, state_to_string(chan
->state
),
626 switch (chan
->state
) {
628 chan
->ops
->teardown(chan
, 0);
633 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
634 conn
->hcon
->type
== ACL_LINK
) {
635 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
636 l2cap_send_disconn_req(chan
, reason
);
638 l2cap_chan_del(chan
, reason
);
642 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
643 conn
->hcon
->type
== ACL_LINK
) {
644 struct l2cap_conn_rsp rsp
;
647 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))
648 result
= L2CAP_CR_SEC_BLOCK
;
650 result
= L2CAP_CR_BAD_PSM
;
651 l2cap_state_change(chan
, BT_DISCONN
);
653 rsp
.scid
= cpu_to_le16(chan
->dcid
);
654 rsp
.dcid
= cpu_to_le16(chan
->scid
);
655 rsp
.result
= cpu_to_le16(result
);
656 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
657 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
661 l2cap_chan_del(chan
, reason
);
666 l2cap_chan_del(chan
, reason
);
670 chan
->ops
->teardown(chan
, 0);
675 static inline u8
l2cap_get_auth_type(struct l2cap_chan
*chan
)
677 if (chan
->chan_type
== L2CAP_CHAN_RAW
) {
678 switch (chan
->sec_level
) {
679 case BT_SECURITY_HIGH
:
680 return HCI_AT_DEDICATED_BONDING_MITM
;
681 case BT_SECURITY_MEDIUM
:
682 return HCI_AT_DEDICATED_BONDING
;
684 return HCI_AT_NO_BONDING
;
686 } else if (chan
->psm
== __constant_cpu_to_le16(L2CAP_PSM_SDP
)) {
687 if (chan
->sec_level
== BT_SECURITY_LOW
)
688 chan
->sec_level
= BT_SECURITY_SDP
;
690 if (chan
->sec_level
== BT_SECURITY_HIGH
)
691 return HCI_AT_NO_BONDING_MITM
;
693 return HCI_AT_NO_BONDING
;
695 switch (chan
->sec_level
) {
696 case BT_SECURITY_HIGH
:
697 return HCI_AT_GENERAL_BONDING_MITM
;
698 case BT_SECURITY_MEDIUM
:
699 return HCI_AT_GENERAL_BONDING
;
701 return HCI_AT_NO_BONDING
;
706 /* Service level security */
707 int l2cap_chan_check_security(struct l2cap_chan
*chan
)
709 struct l2cap_conn
*conn
= chan
->conn
;
712 auth_type
= l2cap_get_auth_type(chan
);
714 return hci_conn_security(conn
->hcon
, chan
->sec_level
, auth_type
);
717 static u8
l2cap_get_ident(struct l2cap_conn
*conn
)
721 /* Get next available identificator.
722 * 1 - 128 are used by kernel.
723 * 129 - 199 are reserved.
724 * 200 - 254 are used by utilities like l2ping, etc.
727 spin_lock(&conn
->lock
);
729 if (++conn
->tx_ident
> 128)
734 spin_unlock(&conn
->lock
);
739 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
,
742 struct sk_buff
*skb
= l2cap_build_cmd(conn
, code
, ident
, len
, data
);
745 BT_DBG("code 0x%2.2x", code
);
750 if (lmp_no_flush_capable(conn
->hcon
->hdev
))
751 flags
= ACL_START_NO_FLUSH
;
755 bt_cb(skb
)->force_active
= BT_POWER_FORCE_ACTIVE_ON
;
756 skb
->priority
= HCI_PRIO_MAX
;
758 hci_send_acl(conn
->hchan
, skb
, flags
);
761 static bool __chan_is_moving(struct l2cap_chan
*chan
)
763 return chan
->move_state
!= L2CAP_MOVE_STABLE
&&
764 chan
->move_state
!= L2CAP_MOVE_WAIT_PREPARE
;
767 static void l2cap_do_send(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
769 struct hci_conn
*hcon
= chan
->conn
->hcon
;
772 BT_DBG("chan %p, skb %p len %d priority %u", chan
, skb
, skb
->len
,
775 if (chan
->hs_hcon
&& !__chan_is_moving(chan
)) {
777 hci_send_acl(chan
->hs_hchan
, skb
, ACL_COMPLETE
);
784 if (!test_bit(FLAG_FLUSHABLE
, &chan
->flags
) &&
785 lmp_no_flush_capable(hcon
->hdev
))
786 flags
= ACL_START_NO_FLUSH
;
790 bt_cb(skb
)->force_active
= test_bit(FLAG_FORCE_ACTIVE
, &chan
->flags
);
791 hci_send_acl(chan
->conn
->hchan
, skb
, flags
);
794 static void __unpack_enhanced_control(u16 enh
, struct l2cap_ctrl
*control
)
796 control
->reqseq
= (enh
& L2CAP_CTRL_REQSEQ
) >> L2CAP_CTRL_REQSEQ_SHIFT
;
797 control
->final
= (enh
& L2CAP_CTRL_FINAL
) >> L2CAP_CTRL_FINAL_SHIFT
;
799 if (enh
& L2CAP_CTRL_FRAME_TYPE
) {
802 control
->poll
= (enh
& L2CAP_CTRL_POLL
) >> L2CAP_CTRL_POLL_SHIFT
;
803 control
->super
= (enh
& L2CAP_CTRL_SUPERVISE
) >> L2CAP_CTRL_SUPER_SHIFT
;
810 control
->sar
= (enh
& L2CAP_CTRL_SAR
) >> L2CAP_CTRL_SAR_SHIFT
;
811 control
->txseq
= (enh
& L2CAP_CTRL_TXSEQ
) >> L2CAP_CTRL_TXSEQ_SHIFT
;
818 static void __unpack_extended_control(u32 ext
, struct l2cap_ctrl
*control
)
820 control
->reqseq
= (ext
& L2CAP_EXT_CTRL_REQSEQ
) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT
;
821 control
->final
= (ext
& L2CAP_EXT_CTRL_FINAL
) >> L2CAP_EXT_CTRL_FINAL_SHIFT
;
823 if (ext
& L2CAP_EXT_CTRL_FRAME_TYPE
) {
826 control
->poll
= (ext
& L2CAP_EXT_CTRL_POLL
) >> L2CAP_EXT_CTRL_POLL_SHIFT
;
827 control
->super
= (ext
& L2CAP_EXT_CTRL_SUPERVISE
) >> L2CAP_EXT_CTRL_SUPER_SHIFT
;
834 control
->sar
= (ext
& L2CAP_EXT_CTRL_SAR
) >> L2CAP_EXT_CTRL_SAR_SHIFT
;
835 control
->txseq
= (ext
& L2CAP_EXT_CTRL_TXSEQ
) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT
;
842 static inline void __unpack_control(struct l2cap_chan
*chan
,
845 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
)) {
846 __unpack_extended_control(get_unaligned_le32(skb
->data
),
847 &bt_cb(skb
)->control
);
848 skb_pull(skb
, L2CAP_EXT_CTRL_SIZE
);
850 __unpack_enhanced_control(get_unaligned_le16(skb
->data
),
851 &bt_cb(skb
)->control
);
852 skb_pull(skb
, L2CAP_ENH_CTRL_SIZE
);
856 static u32
__pack_extended_control(struct l2cap_ctrl
*control
)
860 packed
= control
->reqseq
<< L2CAP_EXT_CTRL_REQSEQ_SHIFT
;
861 packed
|= control
->final
<< L2CAP_EXT_CTRL_FINAL_SHIFT
;
863 if (control
->sframe
) {
864 packed
|= control
->poll
<< L2CAP_EXT_CTRL_POLL_SHIFT
;
865 packed
|= control
->super
<< L2CAP_EXT_CTRL_SUPER_SHIFT
;
866 packed
|= L2CAP_EXT_CTRL_FRAME_TYPE
;
868 packed
|= control
->sar
<< L2CAP_EXT_CTRL_SAR_SHIFT
;
869 packed
|= control
->txseq
<< L2CAP_EXT_CTRL_TXSEQ_SHIFT
;
875 static u16
__pack_enhanced_control(struct l2cap_ctrl
*control
)
879 packed
= control
->reqseq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
880 packed
|= control
->final
<< L2CAP_CTRL_FINAL_SHIFT
;
882 if (control
->sframe
) {
883 packed
|= control
->poll
<< L2CAP_CTRL_POLL_SHIFT
;
884 packed
|= control
->super
<< L2CAP_CTRL_SUPER_SHIFT
;
885 packed
|= L2CAP_CTRL_FRAME_TYPE
;
887 packed
|= control
->sar
<< L2CAP_CTRL_SAR_SHIFT
;
888 packed
|= control
->txseq
<< L2CAP_CTRL_TXSEQ_SHIFT
;
894 static inline void __pack_control(struct l2cap_chan
*chan
,
895 struct l2cap_ctrl
*control
,
898 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
)) {
899 put_unaligned_le32(__pack_extended_control(control
),
900 skb
->data
+ L2CAP_HDR_SIZE
);
902 put_unaligned_le16(__pack_enhanced_control(control
),
903 skb
->data
+ L2CAP_HDR_SIZE
);
907 static inline unsigned int __ertm_hdr_size(struct l2cap_chan
*chan
)
909 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
910 return L2CAP_EXT_HDR_SIZE
;
912 return L2CAP_ENH_HDR_SIZE
;
915 static struct sk_buff
*l2cap_create_sframe_pdu(struct l2cap_chan
*chan
,
919 struct l2cap_hdr
*lh
;
920 int hlen
= __ertm_hdr_size(chan
);
922 if (chan
->fcs
== L2CAP_FCS_CRC16
)
923 hlen
+= L2CAP_FCS_SIZE
;
925 skb
= bt_skb_alloc(hlen
, GFP_KERNEL
);
928 return ERR_PTR(-ENOMEM
);
930 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
931 lh
->len
= cpu_to_le16(hlen
- L2CAP_HDR_SIZE
);
932 lh
->cid
= cpu_to_le16(chan
->dcid
);
934 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
935 put_unaligned_le32(control
, skb_put(skb
, L2CAP_EXT_CTRL_SIZE
));
937 put_unaligned_le16(control
, skb_put(skb
, L2CAP_ENH_CTRL_SIZE
));
939 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
940 u16 fcs
= crc16(0, (u8
*)skb
->data
, skb
->len
);
941 put_unaligned_le16(fcs
, skb_put(skb
, L2CAP_FCS_SIZE
));
944 skb
->priority
= HCI_PRIO_MAX
;
948 static void l2cap_send_sframe(struct l2cap_chan
*chan
,
949 struct l2cap_ctrl
*control
)
954 BT_DBG("chan %p, control %p", chan
, control
);
956 if (!control
->sframe
)
959 if (__chan_is_moving(chan
))
962 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
) &&
966 if (control
->super
== L2CAP_SUPER_RR
)
967 clear_bit(CONN_RNR_SENT
, &chan
->conn_state
);
968 else if (control
->super
== L2CAP_SUPER_RNR
)
969 set_bit(CONN_RNR_SENT
, &chan
->conn_state
);
971 if (control
->super
!= L2CAP_SUPER_SREJ
) {
972 chan
->last_acked_seq
= control
->reqseq
;
973 __clear_ack_timer(chan
);
976 BT_DBG("reqseq %d, final %d, poll %d, super %d", control
->reqseq
,
977 control
->final
, control
->poll
, control
->super
);
979 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
980 control_field
= __pack_extended_control(control
);
982 control_field
= __pack_enhanced_control(control
);
984 skb
= l2cap_create_sframe_pdu(chan
, control_field
);
986 l2cap_do_send(chan
, skb
);
989 static void l2cap_send_rr_or_rnr(struct l2cap_chan
*chan
, bool poll
)
991 struct l2cap_ctrl control
;
993 BT_DBG("chan %p, poll %d", chan
, poll
);
995 memset(&control
, 0, sizeof(control
));
999 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
))
1000 control
.super
= L2CAP_SUPER_RNR
;
1002 control
.super
= L2CAP_SUPER_RR
;
1004 control
.reqseq
= chan
->buffer_seq
;
1005 l2cap_send_sframe(chan
, &control
);
1008 static inline int __l2cap_no_conn_pending(struct l2cap_chan
*chan
)
1010 return !test_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
1013 static bool __amp_capable(struct l2cap_chan
*chan
)
1015 struct l2cap_conn
*conn
= chan
->conn
;
1018 hci_amp_capable() &&
1019 chan
->chan_policy
== BT_CHANNEL_POLICY_AMP_PREFERRED
&&
1020 conn
->fixed_chan_mask
& L2CAP_FC_A2MP
)
1026 static bool l2cap_check_efs(struct l2cap_chan
*chan
)
1028 /* Check EFS parameters */
1032 void l2cap_send_conn_req(struct l2cap_chan
*chan
)
1034 struct l2cap_conn
*conn
= chan
->conn
;
1035 struct l2cap_conn_req req
;
1037 req
.scid
= cpu_to_le16(chan
->scid
);
1038 req
.psm
= chan
->psm
;
1040 chan
->ident
= l2cap_get_ident(conn
);
1042 set_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
1044 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_REQ
, sizeof(req
), &req
);
1047 static void l2cap_send_create_chan_req(struct l2cap_chan
*chan
, u8 amp_id
)
1049 struct l2cap_create_chan_req req
;
1050 req
.scid
= cpu_to_le16(chan
->scid
);
1051 req
.psm
= chan
->psm
;
1052 req
.amp_id
= amp_id
;
1054 chan
->ident
= l2cap_get_ident(chan
->conn
);
1056 l2cap_send_cmd(chan
->conn
, chan
->ident
, L2CAP_CREATE_CHAN_REQ
,
1060 static void l2cap_move_setup(struct l2cap_chan
*chan
)
1062 struct sk_buff
*skb
;
1064 BT_DBG("chan %p", chan
);
1066 if (chan
->mode
!= L2CAP_MODE_ERTM
)
1069 __clear_retrans_timer(chan
);
1070 __clear_monitor_timer(chan
);
1071 __clear_ack_timer(chan
);
1073 chan
->retry_count
= 0;
1074 skb_queue_walk(&chan
->tx_q
, skb
) {
1075 if (bt_cb(skb
)->control
.retries
)
1076 bt_cb(skb
)->control
.retries
= 1;
1081 chan
->expected_tx_seq
= chan
->buffer_seq
;
1083 clear_bit(CONN_REJ_ACT
, &chan
->conn_state
);
1084 clear_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
1085 l2cap_seq_list_clear(&chan
->retrans_list
);
1086 l2cap_seq_list_clear(&chan
->srej_list
);
1087 skb_queue_purge(&chan
->srej_q
);
1089 chan
->tx_state
= L2CAP_TX_STATE_XMIT
;
1090 chan
->rx_state
= L2CAP_RX_STATE_MOVE
;
1092 set_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
1095 static void l2cap_move_done(struct l2cap_chan
*chan
)
1097 u8 move_role
= chan
->move_role
;
1098 BT_DBG("chan %p", chan
);
1100 chan
->move_state
= L2CAP_MOVE_STABLE
;
1101 chan
->move_role
= L2CAP_MOVE_ROLE_NONE
;
1103 if (chan
->mode
!= L2CAP_MODE_ERTM
)
1106 switch (move_role
) {
1107 case L2CAP_MOVE_ROLE_INITIATOR
:
1108 l2cap_tx(chan
, NULL
, NULL
, L2CAP_EV_EXPLICIT_POLL
);
1109 chan
->rx_state
= L2CAP_RX_STATE_WAIT_F
;
1111 case L2CAP_MOVE_ROLE_RESPONDER
:
1112 chan
->rx_state
= L2CAP_RX_STATE_WAIT_P
;
1117 static void l2cap_chan_ready(struct l2cap_chan
*chan
)
1119 /* This clears all conf flags, including CONF_NOT_COMPLETE */
1120 chan
->conf_state
= 0;
1121 __clear_chan_timer(chan
);
1123 chan
->state
= BT_CONNECTED
;
1125 chan
->ops
->ready(chan
);
1128 static void l2cap_start_connection(struct l2cap_chan
*chan
)
1130 if (__amp_capable(chan
)) {
1131 BT_DBG("chan %p AMP capable: discover AMPs", chan
);
1132 a2mp_discover_amp(chan
);
1134 l2cap_send_conn_req(chan
);
1138 static void l2cap_do_start(struct l2cap_chan
*chan
)
1140 struct l2cap_conn
*conn
= chan
->conn
;
1142 if (conn
->hcon
->type
== LE_LINK
) {
1143 l2cap_chan_ready(chan
);
1147 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) {
1148 if (!(conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
))
1151 if (l2cap_chan_check_security(chan
) &&
1152 __l2cap_no_conn_pending(chan
)) {
1153 l2cap_start_connection(chan
);
1156 struct l2cap_info_req req
;
1157 req
.type
= __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK
);
1159 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
1160 conn
->info_ident
= l2cap_get_ident(conn
);
1162 schedule_delayed_work(&conn
->info_timer
, L2CAP_INFO_TIMEOUT
);
1164 l2cap_send_cmd(conn
, conn
->info_ident
, L2CAP_INFO_REQ
,
1169 static inline int l2cap_mode_supported(__u8 mode
, __u32 feat_mask
)
1171 u32 local_feat_mask
= l2cap_feat_mask
;
1173 local_feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
;
1176 case L2CAP_MODE_ERTM
:
1177 return L2CAP_FEAT_ERTM
& feat_mask
& local_feat_mask
;
1178 case L2CAP_MODE_STREAMING
:
1179 return L2CAP_FEAT_STREAMING
& feat_mask
& local_feat_mask
;
1185 static void l2cap_send_disconn_req(struct l2cap_chan
*chan
, int err
)
1187 struct sock
*sk
= chan
->sk
;
1188 struct l2cap_conn
*conn
= chan
->conn
;
1189 struct l2cap_disconn_req req
;
1194 if (chan
->mode
== L2CAP_MODE_ERTM
&& chan
->state
== BT_CONNECTED
) {
1195 __clear_retrans_timer(chan
);
1196 __clear_monitor_timer(chan
);
1197 __clear_ack_timer(chan
);
1200 if (chan
->chan_type
== L2CAP_CHAN_CONN_FIX_A2MP
) {
1201 l2cap_state_change(chan
, BT_DISCONN
);
1205 req
.dcid
= cpu_to_le16(chan
->dcid
);
1206 req
.scid
= cpu_to_le16(chan
->scid
);
1207 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_DISCONN_REQ
,
1211 __l2cap_state_change(chan
, BT_DISCONN
);
1212 __l2cap_chan_set_err(chan
, err
);
1216 /* ---- L2CAP connections ---- */
1217 static void l2cap_conn_start(struct l2cap_conn
*conn
)
1219 struct l2cap_chan
*chan
, *tmp
;
1221 BT_DBG("conn %p", conn
);
1223 mutex_lock(&conn
->chan_lock
);
1225 list_for_each_entry_safe(chan
, tmp
, &conn
->chan_l
, list
) {
1226 struct sock
*sk
= chan
->sk
;
1228 l2cap_chan_lock(chan
);
1230 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1231 l2cap_chan_unlock(chan
);
1235 if (chan
->state
== BT_CONNECT
) {
1236 if (!l2cap_chan_check_security(chan
) ||
1237 !__l2cap_no_conn_pending(chan
)) {
1238 l2cap_chan_unlock(chan
);
1242 if (!l2cap_mode_supported(chan
->mode
, conn
->feat_mask
)
1243 && test_bit(CONF_STATE2_DEVICE
,
1244 &chan
->conf_state
)) {
1245 l2cap_chan_close(chan
, ECONNRESET
);
1246 l2cap_chan_unlock(chan
);
1250 l2cap_start_connection(chan
);
1252 } else if (chan
->state
== BT_CONNECT2
) {
1253 struct l2cap_conn_rsp rsp
;
1255 rsp
.scid
= cpu_to_le16(chan
->dcid
);
1256 rsp
.dcid
= cpu_to_le16(chan
->scid
);
1258 if (l2cap_chan_check_security(chan
)) {
1260 if (test_bit(BT_SK_DEFER_SETUP
,
1261 &bt_sk(sk
)->flags
)) {
1262 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_PEND
);
1263 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_AUTHOR_PEND
);
1264 chan
->ops
->defer(chan
);
1267 __l2cap_state_change(chan
, BT_CONFIG
);
1268 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_SUCCESS
);
1269 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
1273 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_PEND
);
1274 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_AUTHEN_PEND
);
1277 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
1280 if (test_bit(CONF_REQ_SENT
, &chan
->conf_state
) ||
1281 rsp
.result
!= L2CAP_CR_SUCCESS
) {
1282 l2cap_chan_unlock(chan
);
1286 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
1287 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
1288 l2cap_build_conf_req(chan
, buf
), buf
);
1289 chan
->num_conf_req
++;
1292 l2cap_chan_unlock(chan
);
1295 mutex_unlock(&conn
->chan_lock
);
1298 /* Find socket with cid and source/destination bdaddr.
1299 * Returns closest match, locked.
1301 static struct l2cap_chan
*l2cap_global_chan_by_scid(int state
, u16 cid
,
1305 struct l2cap_chan
*c
, *c1
= NULL
;
1307 read_lock(&chan_list_lock
);
1309 list_for_each_entry(c
, &chan_list
, global_l
) {
1310 struct sock
*sk
= c
->sk
;
1312 if (state
&& c
->state
!= state
)
1315 if (c
->scid
== cid
) {
1316 int src_match
, dst_match
;
1317 int src_any
, dst_any
;
1320 src_match
= !bacmp(&bt_sk(sk
)->src
, src
);
1321 dst_match
= !bacmp(&bt_sk(sk
)->dst
, dst
);
1322 if (src_match
&& dst_match
) {
1323 read_unlock(&chan_list_lock
);
1328 src_any
= !bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
);
1329 dst_any
= !bacmp(&bt_sk(sk
)->dst
, BDADDR_ANY
);
1330 if ((src_match
&& dst_any
) || (src_any
&& dst_match
) ||
1331 (src_any
&& dst_any
))
1336 read_unlock(&chan_list_lock
);
1341 static void l2cap_le_conn_ready(struct l2cap_conn
*conn
)
1343 struct sock
*parent
;
1344 struct l2cap_chan
*chan
, *pchan
;
1348 /* Check if we have socket listening on cid */
1349 pchan
= l2cap_global_chan_by_scid(BT_LISTEN
, L2CAP_CID_ATT
,
1350 conn
->src
, conn
->dst
);
1358 chan
= pchan
->ops
->new_connection(pchan
);
1362 chan
->dcid
= L2CAP_CID_ATT
;
1364 hci_conn_hold(conn
->hcon
);
1365 conn
->hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1367 bacpy(&bt_sk(chan
->sk
)->src
, conn
->src
);
1368 bacpy(&bt_sk(chan
->sk
)->dst
, conn
->dst
);
1370 l2cap_chan_add(conn
, chan
);
1373 release_sock(parent
);
1376 static void l2cap_conn_ready(struct l2cap_conn
*conn
)
1378 struct l2cap_chan
*chan
;
1379 struct hci_conn
*hcon
= conn
->hcon
;
1381 BT_DBG("conn %p", conn
);
1383 if (!hcon
->out
&& hcon
->type
== LE_LINK
)
1384 l2cap_le_conn_ready(conn
);
1386 /* For outgoing pairing which doesn't necessarily have an
1387 * associated socket (e.g. mgmt_pair_device).
1389 if (hcon
->out
&& hcon
->type
== LE_LINK
)
1390 smp_conn_security(hcon
, hcon
->pending_sec_level
);
1392 mutex_lock(&conn
->chan_lock
);
1394 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
1396 l2cap_chan_lock(chan
);
1398 if (chan
->chan_type
== L2CAP_CHAN_CONN_FIX_A2MP
) {
1399 l2cap_chan_unlock(chan
);
1403 if (hcon
->type
== LE_LINK
) {
1404 if (smp_conn_security(hcon
, chan
->sec_level
))
1405 l2cap_chan_ready(chan
);
1407 } else if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1408 struct sock
*sk
= chan
->sk
;
1409 __clear_chan_timer(chan
);
1411 __l2cap_state_change(chan
, BT_CONNECTED
);
1412 sk
->sk_state_change(sk
);
1415 } else if (chan
->state
== BT_CONNECT
)
1416 l2cap_do_start(chan
);
1418 l2cap_chan_unlock(chan
);
1421 mutex_unlock(&conn
->chan_lock
);
1424 /* Notify sockets that we cannot guaranty reliability anymore */
1425 static void l2cap_conn_unreliable(struct l2cap_conn
*conn
, int err
)
1427 struct l2cap_chan
*chan
;
1429 BT_DBG("conn %p", conn
);
1431 mutex_lock(&conn
->chan_lock
);
1433 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
1434 if (test_bit(FLAG_FORCE_RELIABLE
, &chan
->flags
))
1435 l2cap_chan_set_err(chan
, err
);
1438 mutex_unlock(&conn
->chan_lock
);
1441 static void l2cap_info_timeout(struct work_struct
*work
)
1443 struct l2cap_conn
*conn
= container_of(work
, struct l2cap_conn
,
1446 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
1447 conn
->info_ident
= 0;
1449 l2cap_conn_start(conn
);
1454 * External modules can register l2cap_user objects on l2cap_conn. The ->probe
1455 * callback is called during registration. The ->remove callback is called
1456 * during unregistration.
1457 * An l2cap_user object can either be explicitly unregistered or when the
1458 * underlying l2cap_conn object is deleted. This guarantees that l2cap->hcon,
1459 * l2cap->hchan, .. are valid as long as the remove callback hasn't been called.
1460 * External modules must own a reference to the l2cap_conn object if they intend
1461 * to call l2cap_unregister_user(). The l2cap_conn object might get destroyed at
1462 * any time if they don't.
1465 int l2cap_register_user(struct l2cap_conn
*conn
, struct l2cap_user
*user
)
1467 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
1470 /* We need to check whether l2cap_conn is registered. If it is not, we
1471 * must not register the l2cap_user. l2cap_conn_del() is unregisters
1472 * l2cap_conn objects, but doesn't provide its own locking. Instead, it
1473 * relies on the parent hci_conn object to be locked. This itself relies
1474 * on the hci_dev object to be locked. So we must lock the hci device
1479 if (user
->list
.next
|| user
->list
.prev
) {
1484 /* conn->hchan is NULL after l2cap_conn_del() was called */
1490 ret
= user
->probe(conn
, user
);
1494 list_add(&user
->list
, &conn
->users
);
1498 hci_dev_unlock(hdev
);
1501 EXPORT_SYMBOL(l2cap_register_user
);
1503 void l2cap_unregister_user(struct l2cap_conn
*conn
, struct l2cap_user
*user
)
1505 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
1509 if (!user
->list
.next
|| !user
->list
.prev
)
1512 list_del(&user
->list
);
1513 user
->list
.next
= NULL
;
1514 user
->list
.prev
= NULL
;
1515 user
->remove(conn
, user
);
1518 hci_dev_unlock(hdev
);
1520 EXPORT_SYMBOL(l2cap_unregister_user
);
1522 static void l2cap_unregister_all_users(struct l2cap_conn
*conn
)
1524 struct l2cap_user
*user
;
1526 while (!list_empty(&conn
->users
)) {
1527 user
= list_first_entry(&conn
->users
, struct l2cap_user
, list
);
1528 list_del(&user
->list
);
1529 user
->list
.next
= NULL
;
1530 user
->list
.prev
= NULL
;
1531 user
->remove(conn
, user
);
1535 static void l2cap_conn_del(struct hci_conn
*hcon
, int err
)
1537 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1538 struct l2cap_chan
*chan
, *l
;
1543 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
1545 kfree_skb(conn
->rx_skb
);
1547 l2cap_unregister_all_users(conn
);
1549 mutex_lock(&conn
->chan_lock
);
1552 list_for_each_entry_safe(chan
, l
, &conn
->chan_l
, list
) {
1553 l2cap_chan_hold(chan
);
1554 l2cap_chan_lock(chan
);
1556 l2cap_chan_del(chan
, err
);
1558 l2cap_chan_unlock(chan
);
1560 chan
->ops
->close(chan
);
1561 l2cap_chan_put(chan
);
1564 mutex_unlock(&conn
->chan_lock
);
1566 hci_chan_del(conn
->hchan
);
1568 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
)
1569 cancel_delayed_work_sync(&conn
->info_timer
);
1571 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->flags
)) {
1572 cancel_delayed_work_sync(&conn
->security_timer
);
1573 smp_chan_destroy(conn
);
1576 hcon
->l2cap_data
= NULL
;
1578 l2cap_conn_put(conn
);
1581 static void security_timeout(struct work_struct
*work
)
1583 struct l2cap_conn
*conn
= container_of(work
, struct l2cap_conn
,
1584 security_timer
.work
);
1586 BT_DBG("conn %p", conn
);
1588 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
)) {
1589 smp_chan_destroy(conn
);
1590 l2cap_conn_del(conn
->hcon
, ETIMEDOUT
);
1594 static struct l2cap_conn
*l2cap_conn_add(struct hci_conn
*hcon
)
1596 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1597 struct hci_chan
*hchan
;
1602 hchan
= hci_chan_create(hcon
);
1606 conn
= kzalloc(sizeof(struct l2cap_conn
), GFP_KERNEL
);
1608 hci_chan_del(hchan
);
1612 kref_init(&conn
->ref
);
1613 hcon
->l2cap_data
= conn
;
1615 hci_conn_get(conn
->hcon
);
1616 conn
->hchan
= hchan
;
1618 BT_DBG("hcon %p conn %p hchan %p", hcon
, conn
, hchan
);
1620 switch (hcon
->type
) {
1622 if (hcon
->hdev
->le_mtu
) {
1623 conn
->mtu
= hcon
->hdev
->le_mtu
;
1628 conn
->mtu
= hcon
->hdev
->acl_mtu
;
1632 conn
->src
= &hcon
->hdev
->bdaddr
;
1633 conn
->dst
= &hcon
->dst
;
1635 conn
->feat_mask
= 0;
1637 spin_lock_init(&conn
->lock
);
1638 mutex_init(&conn
->chan_lock
);
1640 INIT_LIST_HEAD(&conn
->chan_l
);
1641 INIT_LIST_HEAD(&conn
->users
);
1643 if (hcon
->type
== LE_LINK
)
1644 INIT_DELAYED_WORK(&conn
->security_timer
, security_timeout
);
1646 INIT_DELAYED_WORK(&conn
->info_timer
, l2cap_info_timeout
);
1648 conn
->disc_reason
= HCI_ERROR_REMOTE_USER_TERM
;
1653 static void l2cap_conn_free(struct kref
*ref
)
1655 struct l2cap_conn
*conn
= container_of(ref
, struct l2cap_conn
, ref
);
1657 hci_conn_put(conn
->hcon
);
1661 void l2cap_conn_get(struct l2cap_conn
*conn
)
1663 kref_get(&conn
->ref
);
1665 EXPORT_SYMBOL(l2cap_conn_get
);
1667 void l2cap_conn_put(struct l2cap_conn
*conn
)
1669 kref_put(&conn
->ref
, l2cap_conn_free
);
1671 EXPORT_SYMBOL(l2cap_conn_put
);
1673 /* ---- Socket interface ---- */
1675 /* Find socket with psm and source / destination bdaddr.
1676 * Returns closest match.
1678 static struct l2cap_chan
*l2cap_global_chan_by_psm(int state
, __le16 psm
,
1682 struct l2cap_chan
*c
, *c1
= NULL
;
1684 read_lock(&chan_list_lock
);
1686 list_for_each_entry(c
, &chan_list
, global_l
) {
1687 struct sock
*sk
= c
->sk
;
1689 if (state
&& c
->state
!= state
)
1692 if (c
->psm
== psm
) {
1693 int src_match
, dst_match
;
1694 int src_any
, dst_any
;
1697 src_match
= !bacmp(&bt_sk(sk
)->src
, src
);
1698 dst_match
= !bacmp(&bt_sk(sk
)->dst
, dst
);
1699 if (src_match
&& dst_match
) {
1700 read_unlock(&chan_list_lock
);
1705 src_any
= !bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
);
1706 dst_any
= !bacmp(&bt_sk(sk
)->dst
, BDADDR_ANY
);
1707 if ((src_match
&& dst_any
) || (src_any
&& dst_match
) ||
1708 (src_any
&& dst_any
))
1713 read_unlock(&chan_list_lock
);
1718 int l2cap_chan_connect(struct l2cap_chan
*chan
, __le16 psm
, u16 cid
,
1719 bdaddr_t
*dst
, u8 dst_type
)
1721 struct sock
*sk
= chan
->sk
;
1722 bdaddr_t
*src
= &bt_sk(sk
)->src
;
1723 struct l2cap_conn
*conn
;
1724 struct hci_conn
*hcon
;
1725 struct hci_dev
*hdev
;
1729 BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", src
, dst
,
1730 dst_type
, __le16_to_cpu(psm
));
1732 hdev
= hci_get_route(dst
, src
);
1734 return -EHOSTUNREACH
;
1738 l2cap_chan_lock(chan
);
1740 /* PSM must be odd and lsb of upper byte must be 0 */
1741 if ((__le16_to_cpu(psm
) & 0x0101) != 0x0001 && !cid
&&
1742 chan
->chan_type
!= L2CAP_CHAN_RAW
) {
1747 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&& !(psm
|| cid
)) {
1752 switch (chan
->mode
) {
1753 case L2CAP_MODE_BASIC
:
1755 case L2CAP_MODE_ERTM
:
1756 case L2CAP_MODE_STREAMING
:
1765 switch (chan
->state
) {
1769 /* Already connecting */
1774 /* Already connected */
1788 /* Set destination address and psm */
1790 bacpy(&bt_sk(sk
)->dst
, dst
);
1796 auth_type
= l2cap_get_auth_type(chan
);
1798 if (bdaddr_type_is_le(dst_type
))
1799 hcon
= hci_connect(hdev
, LE_LINK
, dst
, dst_type
,
1800 chan
->sec_level
, auth_type
);
1802 hcon
= hci_connect(hdev
, ACL_LINK
, dst
, dst_type
,
1803 chan
->sec_level
, auth_type
);
1806 err
= PTR_ERR(hcon
);
1810 conn
= l2cap_conn_add(hcon
);
1812 hci_conn_drop(hcon
);
1817 if (cid
&& __l2cap_get_chan_by_dcid(conn
, cid
)) {
1818 hci_conn_drop(hcon
);
1823 /* Update source addr of the socket */
1824 bacpy(src
, conn
->src
);
1826 l2cap_chan_unlock(chan
);
1827 l2cap_chan_add(conn
, chan
);
1828 l2cap_chan_lock(chan
);
1830 l2cap_state_change(chan
, BT_CONNECT
);
1831 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
1833 if (hcon
->state
== BT_CONNECTED
) {
1834 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1835 __clear_chan_timer(chan
);
1836 if (l2cap_chan_check_security(chan
))
1837 l2cap_state_change(chan
, BT_CONNECTED
);
1839 l2cap_do_start(chan
);
1845 l2cap_chan_unlock(chan
);
1846 hci_dev_unlock(hdev
);
1851 int __l2cap_wait_ack(struct sock
*sk
)
1853 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
1854 DECLARE_WAITQUEUE(wait
, current
);
1858 add_wait_queue(sk_sleep(sk
), &wait
);
1859 set_current_state(TASK_INTERRUPTIBLE
);
1860 while (chan
->unacked_frames
> 0 && chan
->conn
) {
1864 if (signal_pending(current
)) {
1865 err
= sock_intr_errno(timeo
);
1870 timeo
= schedule_timeout(timeo
);
1872 set_current_state(TASK_INTERRUPTIBLE
);
1874 err
= sock_error(sk
);
1878 set_current_state(TASK_RUNNING
);
1879 remove_wait_queue(sk_sleep(sk
), &wait
);
1883 static void l2cap_monitor_timeout(struct work_struct
*work
)
1885 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
1886 monitor_timer
.work
);
1888 BT_DBG("chan %p", chan
);
1890 l2cap_chan_lock(chan
);
1893 l2cap_chan_unlock(chan
);
1894 l2cap_chan_put(chan
);
1898 l2cap_tx(chan
, NULL
, NULL
, L2CAP_EV_MONITOR_TO
);
1900 l2cap_chan_unlock(chan
);
1901 l2cap_chan_put(chan
);
1904 static void l2cap_retrans_timeout(struct work_struct
*work
)
1906 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
1907 retrans_timer
.work
);
1909 BT_DBG("chan %p", chan
);
1911 l2cap_chan_lock(chan
);
1914 l2cap_chan_unlock(chan
);
1915 l2cap_chan_put(chan
);
1919 l2cap_tx(chan
, NULL
, NULL
, L2CAP_EV_RETRANS_TO
);
1920 l2cap_chan_unlock(chan
);
1921 l2cap_chan_put(chan
);
1924 static void l2cap_streaming_send(struct l2cap_chan
*chan
,
1925 struct sk_buff_head
*skbs
)
1927 struct sk_buff
*skb
;
1928 struct l2cap_ctrl
*control
;
1930 BT_DBG("chan %p, skbs %p", chan
, skbs
);
1932 if (__chan_is_moving(chan
))
1935 skb_queue_splice_tail_init(skbs
, &chan
->tx_q
);
1937 while (!skb_queue_empty(&chan
->tx_q
)) {
1939 skb
= skb_dequeue(&chan
->tx_q
);
1941 bt_cb(skb
)->control
.retries
= 1;
1942 control
= &bt_cb(skb
)->control
;
1944 control
->reqseq
= 0;
1945 control
->txseq
= chan
->next_tx_seq
;
1947 __pack_control(chan
, control
, skb
);
1949 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1950 u16 fcs
= crc16(0, (u8
*) skb
->data
, skb
->len
);
1951 put_unaligned_le16(fcs
, skb_put(skb
, L2CAP_FCS_SIZE
));
1954 l2cap_do_send(chan
, skb
);
1956 BT_DBG("Sent txseq %u", control
->txseq
);
1958 chan
->next_tx_seq
= __next_seq(chan
, chan
->next_tx_seq
);
1959 chan
->frames_sent
++;
1963 static int l2cap_ertm_send(struct l2cap_chan
*chan
)
1965 struct sk_buff
*skb
, *tx_skb
;
1966 struct l2cap_ctrl
*control
;
1969 BT_DBG("chan %p", chan
);
1971 if (chan
->state
!= BT_CONNECTED
)
1974 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
))
1977 if (__chan_is_moving(chan
))
1980 while (chan
->tx_send_head
&&
1981 chan
->unacked_frames
< chan
->remote_tx_win
&&
1982 chan
->tx_state
== L2CAP_TX_STATE_XMIT
) {
1984 skb
= chan
->tx_send_head
;
1986 bt_cb(skb
)->control
.retries
= 1;
1987 control
= &bt_cb(skb
)->control
;
1989 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
))
1992 control
->reqseq
= chan
->buffer_seq
;
1993 chan
->last_acked_seq
= chan
->buffer_seq
;
1994 control
->txseq
= chan
->next_tx_seq
;
1996 __pack_control(chan
, control
, skb
);
1998 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1999 u16 fcs
= crc16(0, (u8
*) skb
->data
, skb
->len
);
2000 put_unaligned_le16(fcs
, skb_put(skb
, L2CAP_FCS_SIZE
));
2003 /* Clone after data has been modified. Data is assumed to be
2004 read-only (for locking purposes) on cloned sk_buffs.
2006 tx_skb
= skb_clone(skb
, GFP_KERNEL
);
2011 __set_retrans_timer(chan
);
2013 chan
->next_tx_seq
= __next_seq(chan
, chan
->next_tx_seq
);
2014 chan
->unacked_frames
++;
2015 chan
->frames_sent
++;
2018 if (skb_queue_is_last(&chan
->tx_q
, skb
))
2019 chan
->tx_send_head
= NULL
;
2021 chan
->tx_send_head
= skb_queue_next(&chan
->tx_q
, skb
);
2023 l2cap_do_send(chan
, tx_skb
);
2024 BT_DBG("Sent txseq %u", control
->txseq
);
2027 BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent
,
2028 chan
->unacked_frames
, skb_queue_len(&chan
->tx_q
));
2033 static void l2cap_ertm_resend(struct l2cap_chan
*chan
)
2035 struct l2cap_ctrl control
;
2036 struct sk_buff
*skb
;
2037 struct sk_buff
*tx_skb
;
2040 BT_DBG("chan %p", chan
);
2042 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
))
2045 if (__chan_is_moving(chan
))
2048 while (chan
->retrans_list
.head
!= L2CAP_SEQ_LIST_CLEAR
) {
2049 seq
= l2cap_seq_list_pop(&chan
->retrans_list
);
2051 skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, seq
);
2053 BT_DBG("Error: Can't retransmit seq %d, frame missing",
2058 bt_cb(skb
)->control
.retries
++;
2059 control
= bt_cb(skb
)->control
;
2061 if (chan
->max_tx
!= 0 &&
2062 bt_cb(skb
)->control
.retries
> chan
->max_tx
) {
2063 BT_DBG("Retry limit exceeded (%d)", chan
->max_tx
);
2064 l2cap_send_disconn_req(chan
, ECONNRESET
);
2065 l2cap_seq_list_clear(&chan
->retrans_list
);
2069 control
.reqseq
= chan
->buffer_seq
;
2070 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
))
2075 if (skb_cloned(skb
)) {
2076 /* Cloned sk_buffs are read-only, so we need a
2079 tx_skb
= skb_copy(skb
, GFP_KERNEL
);
2081 tx_skb
= skb_clone(skb
, GFP_KERNEL
);
2085 l2cap_seq_list_clear(&chan
->retrans_list
);
2089 /* Update skb contents */
2090 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
)) {
2091 put_unaligned_le32(__pack_extended_control(&control
),
2092 tx_skb
->data
+ L2CAP_HDR_SIZE
);
2094 put_unaligned_le16(__pack_enhanced_control(&control
),
2095 tx_skb
->data
+ L2CAP_HDR_SIZE
);
2098 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
2099 u16 fcs
= crc16(0, (u8
*) tx_skb
->data
, tx_skb
->len
);
2100 put_unaligned_le16(fcs
, skb_put(tx_skb
,
2104 l2cap_do_send(chan
, tx_skb
);
2106 BT_DBG("Resent txseq %d", control
.txseq
);
2108 chan
->last_acked_seq
= chan
->buffer_seq
;
2112 static void l2cap_retransmit(struct l2cap_chan
*chan
,
2113 struct l2cap_ctrl
*control
)
2115 BT_DBG("chan %p, control %p", chan
, control
);
2117 l2cap_seq_list_append(&chan
->retrans_list
, control
->reqseq
);
2118 l2cap_ertm_resend(chan
);
2121 static void l2cap_retransmit_all(struct l2cap_chan
*chan
,
2122 struct l2cap_ctrl
*control
)
2124 struct sk_buff
*skb
;
2126 BT_DBG("chan %p, control %p", chan
, control
);
2129 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
2131 l2cap_seq_list_clear(&chan
->retrans_list
);
2133 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
))
2136 if (chan
->unacked_frames
) {
2137 skb_queue_walk(&chan
->tx_q
, skb
) {
2138 if (bt_cb(skb
)->control
.txseq
== control
->reqseq
||
2139 skb
== chan
->tx_send_head
)
2143 skb_queue_walk_from(&chan
->tx_q
, skb
) {
2144 if (skb
== chan
->tx_send_head
)
2147 l2cap_seq_list_append(&chan
->retrans_list
,
2148 bt_cb(skb
)->control
.txseq
);
2151 l2cap_ertm_resend(chan
);
2155 static void l2cap_send_ack(struct l2cap_chan
*chan
)
2157 struct l2cap_ctrl control
;
2158 u16 frames_to_ack
= __seq_offset(chan
, chan
->buffer_seq
,
2159 chan
->last_acked_seq
);
2162 BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
2163 chan
, chan
->last_acked_seq
, chan
->buffer_seq
);
2165 memset(&control
, 0, sizeof(control
));
2168 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
) &&
2169 chan
->rx_state
== L2CAP_RX_STATE_RECV
) {
2170 __clear_ack_timer(chan
);
2171 control
.super
= L2CAP_SUPER_RNR
;
2172 control
.reqseq
= chan
->buffer_seq
;
2173 l2cap_send_sframe(chan
, &control
);
2175 if (!test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
)) {
2176 l2cap_ertm_send(chan
);
2177 /* If any i-frames were sent, they included an ack */
2178 if (chan
->buffer_seq
== chan
->last_acked_seq
)
2182 /* Ack now if the window is 3/4ths full.
2183 * Calculate without mul or div
2185 threshold
= chan
->ack_win
;
2186 threshold
+= threshold
<< 1;
2189 BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack
,
2192 if (frames_to_ack
>= threshold
) {
2193 __clear_ack_timer(chan
);
2194 control
.super
= L2CAP_SUPER_RR
;
2195 control
.reqseq
= chan
->buffer_seq
;
2196 l2cap_send_sframe(chan
, &control
);
2201 __set_ack_timer(chan
);
2205 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan
*chan
,
2206 struct msghdr
*msg
, int len
,
2207 int count
, struct sk_buff
*skb
)
2209 struct l2cap_conn
*conn
= chan
->conn
;
2210 struct sk_buff
**frag
;
2213 if (memcpy_fromiovec(skb_put(skb
, count
), msg
->msg_iov
, count
))
2219 /* Continuation fragments (no L2CAP header) */
2220 frag
= &skb_shinfo(skb
)->frag_list
;
2222 struct sk_buff
*tmp
;
2224 count
= min_t(unsigned int, conn
->mtu
, len
);
2226 tmp
= chan
->ops
->alloc_skb(chan
, count
,
2227 msg
->msg_flags
& MSG_DONTWAIT
);
2229 return PTR_ERR(tmp
);
2233 if (memcpy_fromiovec(skb_put(*frag
, count
), msg
->msg_iov
, count
))
2236 (*frag
)->priority
= skb
->priority
;
2241 skb
->len
+= (*frag
)->len
;
2242 skb
->data_len
+= (*frag
)->len
;
2244 frag
= &(*frag
)->next
;
2250 static struct sk_buff
*l2cap_create_connless_pdu(struct l2cap_chan
*chan
,
2251 struct msghdr
*msg
, size_t len
,
2254 struct l2cap_conn
*conn
= chan
->conn
;
2255 struct sk_buff
*skb
;
2256 int err
, count
, hlen
= L2CAP_HDR_SIZE
+ L2CAP_PSMLEN_SIZE
;
2257 struct l2cap_hdr
*lh
;
2259 BT_DBG("chan %p len %zu priority %u", chan
, len
, priority
);
2261 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
2263 skb
= chan
->ops
->alloc_skb(chan
, count
+ hlen
,
2264 msg
->msg_flags
& MSG_DONTWAIT
);
2268 skb
->priority
= priority
;
2270 /* Create L2CAP header */
2271 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
2272 lh
->cid
= cpu_to_le16(chan
->dcid
);
2273 lh
->len
= cpu_to_le16(len
+ L2CAP_PSMLEN_SIZE
);
2274 put_unaligned(chan
->psm
, skb_put(skb
, L2CAP_PSMLEN_SIZE
));
2276 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
2277 if (unlikely(err
< 0)) {
2279 return ERR_PTR(err
);
2284 static struct sk_buff
*l2cap_create_basic_pdu(struct l2cap_chan
*chan
,
2285 struct msghdr
*msg
, size_t len
,
2288 struct l2cap_conn
*conn
= chan
->conn
;
2289 struct sk_buff
*skb
;
2291 struct l2cap_hdr
*lh
;
2293 BT_DBG("chan %p len %zu", chan
, len
);
2295 count
= min_t(unsigned int, (conn
->mtu
- L2CAP_HDR_SIZE
), len
);
2297 skb
= chan
->ops
->alloc_skb(chan
, count
+ L2CAP_HDR_SIZE
,
2298 msg
->msg_flags
& MSG_DONTWAIT
);
2302 skb
->priority
= priority
;
2304 /* Create L2CAP header */
2305 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
2306 lh
->cid
= cpu_to_le16(chan
->dcid
);
2307 lh
->len
= cpu_to_le16(len
);
2309 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
2310 if (unlikely(err
< 0)) {
2312 return ERR_PTR(err
);
2317 static struct sk_buff
*l2cap_create_iframe_pdu(struct l2cap_chan
*chan
,
2318 struct msghdr
*msg
, size_t len
,
2321 struct l2cap_conn
*conn
= chan
->conn
;
2322 struct sk_buff
*skb
;
2323 int err
, count
, hlen
;
2324 struct l2cap_hdr
*lh
;
2326 BT_DBG("chan %p len %zu", chan
, len
);
2329 return ERR_PTR(-ENOTCONN
);
2331 hlen
= __ertm_hdr_size(chan
);
2334 hlen
+= L2CAP_SDULEN_SIZE
;
2336 if (chan
->fcs
== L2CAP_FCS_CRC16
)
2337 hlen
+= L2CAP_FCS_SIZE
;
2339 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
2341 skb
= chan
->ops
->alloc_skb(chan
, count
+ hlen
,
2342 msg
->msg_flags
& MSG_DONTWAIT
);
2346 /* Create L2CAP header */
2347 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
2348 lh
->cid
= cpu_to_le16(chan
->dcid
);
2349 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
2351 /* Control header is populated later */
2352 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
2353 put_unaligned_le32(0, skb_put(skb
, L2CAP_EXT_CTRL_SIZE
));
2355 put_unaligned_le16(0, skb_put(skb
, L2CAP_ENH_CTRL_SIZE
));
2358 put_unaligned_le16(sdulen
, skb_put(skb
, L2CAP_SDULEN_SIZE
));
2360 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
2361 if (unlikely(err
< 0)) {
2363 return ERR_PTR(err
);
2366 bt_cb(skb
)->control
.fcs
= chan
->fcs
;
2367 bt_cb(skb
)->control
.retries
= 0;
2371 static int l2cap_segment_sdu(struct l2cap_chan
*chan
,
2372 struct sk_buff_head
*seg_queue
,
2373 struct msghdr
*msg
, size_t len
)
2375 struct sk_buff
*skb
;
2380 BT_DBG("chan %p, msg %p, len %zu", chan
, msg
, len
);
2382 /* It is critical that ERTM PDUs fit in a single HCI fragment,
2383 * so fragmented skbs are not used. The HCI layer's handling
2384 * of fragmented skbs is not compatible with ERTM's queueing.
2387 /* PDU size is derived from the HCI MTU */
2388 pdu_len
= chan
->conn
->mtu
;
2390 /* Constrain PDU size for BR/EDR connections */
2392 pdu_len
= min_t(size_t, pdu_len
, L2CAP_BREDR_MAX_PAYLOAD
);
2394 /* Adjust for largest possible L2CAP overhead. */
2396 pdu_len
-= L2CAP_FCS_SIZE
;
2398 pdu_len
-= __ertm_hdr_size(chan
);
2400 /* Remote device may have requested smaller PDUs */
2401 pdu_len
= min_t(size_t, pdu_len
, chan
->remote_mps
);
2403 if (len
<= pdu_len
) {
2404 sar
= L2CAP_SAR_UNSEGMENTED
;
2408 sar
= L2CAP_SAR_START
;
2410 pdu_len
-= L2CAP_SDULEN_SIZE
;
2414 skb
= l2cap_create_iframe_pdu(chan
, msg
, pdu_len
, sdu_len
);
2417 __skb_queue_purge(seg_queue
);
2418 return PTR_ERR(skb
);
2421 bt_cb(skb
)->control
.sar
= sar
;
2422 __skb_queue_tail(seg_queue
, skb
);
2427 pdu_len
+= L2CAP_SDULEN_SIZE
;
2430 if (len
<= pdu_len
) {
2431 sar
= L2CAP_SAR_END
;
2434 sar
= L2CAP_SAR_CONTINUE
;
2441 int l2cap_chan_send(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
,
2444 struct sk_buff
*skb
;
2446 struct sk_buff_head seg_queue
;
2448 /* Connectionless channel */
2449 if (chan
->chan_type
== L2CAP_CHAN_CONN_LESS
) {
2450 skb
= l2cap_create_connless_pdu(chan
, msg
, len
, priority
);
2452 return PTR_ERR(skb
);
2454 l2cap_do_send(chan
, skb
);
2458 switch (chan
->mode
) {
2459 case L2CAP_MODE_BASIC
:
2460 /* Check outgoing MTU */
2461 if (len
> chan
->omtu
)
2464 /* Create a basic PDU */
2465 skb
= l2cap_create_basic_pdu(chan
, msg
, len
, priority
);
2467 return PTR_ERR(skb
);
2469 l2cap_do_send(chan
, skb
);
2473 case L2CAP_MODE_ERTM
:
2474 case L2CAP_MODE_STREAMING
:
2475 /* Check outgoing MTU */
2476 if (len
> chan
->omtu
) {
2481 __skb_queue_head_init(&seg_queue
);
2483 /* Do segmentation before calling in to the state machine,
2484 * since it's possible to block while waiting for memory
2487 err
= l2cap_segment_sdu(chan
, &seg_queue
, msg
, len
);
2489 /* The channel could have been closed while segmenting,
2490 * check that it is still connected.
2492 if (chan
->state
!= BT_CONNECTED
) {
2493 __skb_queue_purge(&seg_queue
);
2500 if (chan
->mode
== L2CAP_MODE_ERTM
)
2501 l2cap_tx(chan
, NULL
, &seg_queue
, L2CAP_EV_DATA_REQUEST
);
2503 l2cap_streaming_send(chan
, &seg_queue
);
2507 /* If the skbs were not queued for sending, they'll still be in
2508 * seg_queue and need to be purged.
2510 __skb_queue_purge(&seg_queue
);
2514 BT_DBG("bad state %1.1x", chan
->mode
);
2521 static void l2cap_send_srej(struct l2cap_chan
*chan
, u16 txseq
)
2523 struct l2cap_ctrl control
;
2526 BT_DBG("chan %p, txseq %u", chan
, txseq
);
2528 memset(&control
, 0, sizeof(control
));
2530 control
.super
= L2CAP_SUPER_SREJ
;
2532 for (seq
= chan
->expected_tx_seq
; seq
!= txseq
;
2533 seq
= __next_seq(chan
, seq
)) {
2534 if (!l2cap_ertm_seq_in_queue(&chan
->srej_q
, seq
)) {
2535 control
.reqseq
= seq
;
2536 l2cap_send_sframe(chan
, &control
);
2537 l2cap_seq_list_append(&chan
->srej_list
, seq
);
2541 chan
->expected_tx_seq
= __next_seq(chan
, txseq
);
2544 static void l2cap_send_srej_tail(struct l2cap_chan
*chan
)
2546 struct l2cap_ctrl control
;
2548 BT_DBG("chan %p", chan
);
2550 if (chan
->srej_list
.tail
== L2CAP_SEQ_LIST_CLEAR
)
2553 memset(&control
, 0, sizeof(control
));
2555 control
.super
= L2CAP_SUPER_SREJ
;
2556 control
.reqseq
= chan
->srej_list
.tail
;
2557 l2cap_send_sframe(chan
, &control
);
2560 static void l2cap_send_srej_list(struct l2cap_chan
*chan
, u16 txseq
)
2562 struct l2cap_ctrl control
;
2566 BT_DBG("chan %p, txseq %u", chan
, txseq
);
2568 memset(&control
, 0, sizeof(control
));
2570 control
.super
= L2CAP_SUPER_SREJ
;
2572 /* Capture initial list head to allow only one pass through the list. */
2573 initial_head
= chan
->srej_list
.head
;
2576 seq
= l2cap_seq_list_pop(&chan
->srej_list
);
2577 if (seq
== txseq
|| seq
== L2CAP_SEQ_LIST_CLEAR
)
2580 control
.reqseq
= seq
;
2581 l2cap_send_sframe(chan
, &control
);
2582 l2cap_seq_list_append(&chan
->srej_list
, seq
);
2583 } while (chan
->srej_list
.head
!= initial_head
);
2586 static void l2cap_process_reqseq(struct l2cap_chan
*chan
, u16 reqseq
)
2588 struct sk_buff
*acked_skb
;
2591 BT_DBG("chan %p, reqseq %u", chan
, reqseq
);
2593 if (chan
->unacked_frames
== 0 || reqseq
== chan
->expected_ack_seq
)
2596 BT_DBG("expected_ack_seq %u, unacked_frames %u",
2597 chan
->expected_ack_seq
, chan
->unacked_frames
);
2599 for (ackseq
= chan
->expected_ack_seq
; ackseq
!= reqseq
;
2600 ackseq
= __next_seq(chan
, ackseq
)) {
2602 acked_skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, ackseq
);
2604 skb_unlink(acked_skb
, &chan
->tx_q
);
2605 kfree_skb(acked_skb
);
2606 chan
->unacked_frames
--;
2610 chan
->expected_ack_seq
= reqseq
;
2612 if (chan
->unacked_frames
== 0)
2613 __clear_retrans_timer(chan
);
2615 BT_DBG("unacked_frames %u", chan
->unacked_frames
);
2618 static void l2cap_abort_rx_srej_sent(struct l2cap_chan
*chan
)
2620 BT_DBG("chan %p", chan
);
2622 chan
->expected_tx_seq
= chan
->buffer_seq
;
2623 l2cap_seq_list_clear(&chan
->srej_list
);
2624 skb_queue_purge(&chan
->srej_q
);
2625 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
2628 static void l2cap_tx_state_xmit(struct l2cap_chan
*chan
,
2629 struct l2cap_ctrl
*control
,
2630 struct sk_buff_head
*skbs
, u8 event
)
2632 BT_DBG("chan %p, control %p, skbs %p, event %d", chan
, control
, skbs
,
2636 case L2CAP_EV_DATA_REQUEST
:
2637 if (chan
->tx_send_head
== NULL
)
2638 chan
->tx_send_head
= skb_peek(skbs
);
2640 skb_queue_splice_tail_init(skbs
, &chan
->tx_q
);
2641 l2cap_ertm_send(chan
);
2643 case L2CAP_EV_LOCAL_BUSY_DETECTED
:
2644 BT_DBG("Enter LOCAL_BUSY");
2645 set_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2647 if (chan
->rx_state
== L2CAP_RX_STATE_SREJ_SENT
) {
2648 /* The SREJ_SENT state must be aborted if we are to
2649 * enter the LOCAL_BUSY state.
2651 l2cap_abort_rx_srej_sent(chan
);
2654 l2cap_send_ack(chan
);
2657 case L2CAP_EV_LOCAL_BUSY_CLEAR
:
2658 BT_DBG("Exit LOCAL_BUSY");
2659 clear_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2661 if (test_bit(CONN_RNR_SENT
, &chan
->conn_state
)) {
2662 struct l2cap_ctrl local_control
;
2664 memset(&local_control
, 0, sizeof(local_control
));
2665 local_control
.sframe
= 1;
2666 local_control
.super
= L2CAP_SUPER_RR
;
2667 local_control
.poll
= 1;
2668 local_control
.reqseq
= chan
->buffer_seq
;
2669 l2cap_send_sframe(chan
, &local_control
);
2671 chan
->retry_count
= 1;
2672 __set_monitor_timer(chan
);
2673 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2676 case L2CAP_EV_RECV_REQSEQ_AND_FBIT
:
2677 l2cap_process_reqseq(chan
, control
->reqseq
);
2679 case L2CAP_EV_EXPLICIT_POLL
:
2680 l2cap_send_rr_or_rnr(chan
, 1);
2681 chan
->retry_count
= 1;
2682 __set_monitor_timer(chan
);
2683 __clear_ack_timer(chan
);
2684 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2686 case L2CAP_EV_RETRANS_TO
:
2687 l2cap_send_rr_or_rnr(chan
, 1);
2688 chan
->retry_count
= 1;
2689 __set_monitor_timer(chan
);
2690 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2692 case L2CAP_EV_RECV_FBIT
:
2693 /* Nothing to process */
2700 static void l2cap_tx_state_wait_f(struct l2cap_chan
*chan
,
2701 struct l2cap_ctrl
*control
,
2702 struct sk_buff_head
*skbs
, u8 event
)
2704 BT_DBG("chan %p, control %p, skbs %p, event %d", chan
, control
, skbs
,
2708 case L2CAP_EV_DATA_REQUEST
:
2709 if (chan
->tx_send_head
== NULL
)
2710 chan
->tx_send_head
= skb_peek(skbs
);
2711 /* Queue data, but don't send. */
2712 skb_queue_splice_tail_init(skbs
, &chan
->tx_q
);
2714 case L2CAP_EV_LOCAL_BUSY_DETECTED
:
2715 BT_DBG("Enter LOCAL_BUSY");
2716 set_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2718 if (chan
->rx_state
== L2CAP_RX_STATE_SREJ_SENT
) {
2719 /* The SREJ_SENT state must be aborted if we are to
2720 * enter the LOCAL_BUSY state.
2722 l2cap_abort_rx_srej_sent(chan
);
2725 l2cap_send_ack(chan
);
2728 case L2CAP_EV_LOCAL_BUSY_CLEAR
:
2729 BT_DBG("Exit LOCAL_BUSY");
2730 clear_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2732 if (test_bit(CONN_RNR_SENT
, &chan
->conn_state
)) {
2733 struct l2cap_ctrl local_control
;
2734 memset(&local_control
, 0, sizeof(local_control
));
2735 local_control
.sframe
= 1;
2736 local_control
.super
= L2CAP_SUPER_RR
;
2737 local_control
.poll
= 1;
2738 local_control
.reqseq
= chan
->buffer_seq
;
2739 l2cap_send_sframe(chan
, &local_control
);
2741 chan
->retry_count
= 1;
2742 __set_monitor_timer(chan
);
2743 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2746 case L2CAP_EV_RECV_REQSEQ_AND_FBIT
:
2747 l2cap_process_reqseq(chan
, control
->reqseq
);
2751 case L2CAP_EV_RECV_FBIT
:
2752 if (control
&& control
->final
) {
2753 __clear_monitor_timer(chan
);
2754 if (chan
->unacked_frames
> 0)
2755 __set_retrans_timer(chan
);
2756 chan
->retry_count
= 0;
2757 chan
->tx_state
= L2CAP_TX_STATE_XMIT
;
2758 BT_DBG("recv fbit tx_state 0x2.2%x", chan
->tx_state
);
2761 case L2CAP_EV_EXPLICIT_POLL
:
2764 case L2CAP_EV_MONITOR_TO
:
2765 if (chan
->max_tx
== 0 || chan
->retry_count
< chan
->max_tx
) {
2766 l2cap_send_rr_or_rnr(chan
, 1);
2767 __set_monitor_timer(chan
);
2768 chan
->retry_count
++;
2770 l2cap_send_disconn_req(chan
, ECONNABORTED
);
2778 static void l2cap_tx(struct l2cap_chan
*chan
, struct l2cap_ctrl
*control
,
2779 struct sk_buff_head
*skbs
, u8 event
)
2781 BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
2782 chan
, control
, skbs
, event
, chan
->tx_state
);
2784 switch (chan
->tx_state
) {
2785 case L2CAP_TX_STATE_XMIT
:
2786 l2cap_tx_state_xmit(chan
, control
, skbs
, event
);
2788 case L2CAP_TX_STATE_WAIT_F
:
2789 l2cap_tx_state_wait_f(chan
, control
, skbs
, event
);
2797 static void l2cap_pass_to_tx(struct l2cap_chan
*chan
,
2798 struct l2cap_ctrl
*control
)
2800 BT_DBG("chan %p, control %p", chan
, control
);
2801 l2cap_tx(chan
, control
, NULL
, L2CAP_EV_RECV_REQSEQ_AND_FBIT
);
2804 static void l2cap_pass_to_tx_fbit(struct l2cap_chan
*chan
,
2805 struct l2cap_ctrl
*control
)
2807 BT_DBG("chan %p, control %p", chan
, control
);
2808 l2cap_tx(chan
, control
, NULL
, L2CAP_EV_RECV_FBIT
);
2811 /* Copy frame to all raw sockets on that connection */
2812 static void l2cap_raw_recv(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2814 struct sk_buff
*nskb
;
2815 struct l2cap_chan
*chan
;
2817 BT_DBG("conn %p", conn
);
2819 mutex_lock(&conn
->chan_lock
);
2821 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
2822 struct sock
*sk
= chan
->sk
;
2823 if (chan
->chan_type
!= L2CAP_CHAN_RAW
)
2826 /* Don't send frame to the socket it came from */
2829 nskb
= skb_clone(skb
, GFP_KERNEL
);
2833 if (chan
->ops
->recv(chan
, nskb
))
2837 mutex_unlock(&conn
->chan_lock
);
2840 /* ---- L2CAP signalling commands ---- */
2841 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
, u8 code
,
2842 u8 ident
, u16 dlen
, void *data
)
2844 struct sk_buff
*skb
, **frag
;
2845 struct l2cap_cmd_hdr
*cmd
;
2846 struct l2cap_hdr
*lh
;
2849 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
2850 conn
, code
, ident
, dlen
);
2852 if (conn
->mtu
< L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
)
2855 len
= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
+ dlen
;
2856 count
= min_t(unsigned int, conn
->mtu
, len
);
2858 skb
= bt_skb_alloc(count
, GFP_KERNEL
);
2862 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
2863 lh
->len
= cpu_to_le16(L2CAP_CMD_HDR_SIZE
+ dlen
);
2865 if (conn
->hcon
->type
== LE_LINK
)
2866 lh
->cid
= __constant_cpu_to_le16(L2CAP_CID_LE_SIGNALING
);
2868 lh
->cid
= __constant_cpu_to_le16(L2CAP_CID_SIGNALING
);
2870 cmd
= (struct l2cap_cmd_hdr
*) skb_put(skb
, L2CAP_CMD_HDR_SIZE
);
2873 cmd
->len
= cpu_to_le16(dlen
);
2876 count
-= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
;
2877 memcpy(skb_put(skb
, count
), data
, count
);
2883 /* Continuation fragments (no L2CAP header) */
2884 frag
= &skb_shinfo(skb
)->frag_list
;
2886 count
= min_t(unsigned int, conn
->mtu
, len
);
2888 *frag
= bt_skb_alloc(count
, GFP_KERNEL
);
2892 memcpy(skb_put(*frag
, count
), data
, count
);
2897 frag
= &(*frag
)->next
;
2907 static inline int l2cap_get_conf_opt(void **ptr
, int *type
, int *olen
,
2910 struct l2cap_conf_opt
*opt
= *ptr
;
2913 len
= L2CAP_CONF_OPT_SIZE
+ opt
->len
;
2921 *val
= *((u8
*) opt
->val
);
2925 *val
= get_unaligned_le16(opt
->val
);
2929 *val
= get_unaligned_le32(opt
->val
);
2933 *val
= (unsigned long) opt
->val
;
2937 BT_DBG("type 0x%2.2x len %u val 0x%lx", *type
, opt
->len
, *val
);
2941 static void l2cap_add_conf_opt(void **ptr
, u8 type
, u8 len
, unsigned long val
)
2943 struct l2cap_conf_opt
*opt
= *ptr
;
2945 BT_DBG("type 0x%2.2x len %u val 0x%lx", type
, len
, val
);
2952 *((u8
*) opt
->val
) = val
;
2956 put_unaligned_le16(val
, opt
->val
);
2960 put_unaligned_le32(val
, opt
->val
);
2964 memcpy(opt
->val
, (void *) val
, len
);
2968 *ptr
+= L2CAP_CONF_OPT_SIZE
+ len
;
2971 static void l2cap_add_opt_efs(void **ptr
, struct l2cap_chan
*chan
)
2973 struct l2cap_conf_efs efs
;
2975 switch (chan
->mode
) {
2976 case L2CAP_MODE_ERTM
:
2977 efs
.id
= chan
->local_id
;
2978 efs
.stype
= chan
->local_stype
;
2979 efs
.msdu
= cpu_to_le16(chan
->local_msdu
);
2980 efs
.sdu_itime
= cpu_to_le32(chan
->local_sdu_itime
);
2981 efs
.acc_lat
= __constant_cpu_to_le32(L2CAP_DEFAULT_ACC_LAT
);
2982 efs
.flush_to
= __constant_cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO
);
2985 case L2CAP_MODE_STREAMING
:
2987 efs
.stype
= L2CAP_SERV_BESTEFFORT
;
2988 efs
.msdu
= cpu_to_le16(chan
->local_msdu
);
2989 efs
.sdu_itime
= cpu_to_le32(chan
->local_sdu_itime
);
2998 l2cap_add_conf_opt(ptr
, L2CAP_CONF_EFS
, sizeof(efs
),
2999 (unsigned long) &efs
);
3002 static void l2cap_ack_timeout(struct work_struct
*work
)
3004 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
3008 BT_DBG("chan %p", chan
);
3010 l2cap_chan_lock(chan
);
3012 frames_to_ack
= __seq_offset(chan
, chan
->buffer_seq
,
3013 chan
->last_acked_seq
);
3016 l2cap_send_rr_or_rnr(chan
, 0);
3018 l2cap_chan_unlock(chan
);
3019 l2cap_chan_put(chan
);
3022 int l2cap_ertm_init(struct l2cap_chan
*chan
)
3026 chan
->next_tx_seq
= 0;
3027 chan
->expected_tx_seq
= 0;
3028 chan
->expected_ack_seq
= 0;
3029 chan
->unacked_frames
= 0;
3030 chan
->buffer_seq
= 0;
3031 chan
->frames_sent
= 0;
3032 chan
->last_acked_seq
= 0;
3034 chan
->sdu_last_frag
= NULL
;
3037 skb_queue_head_init(&chan
->tx_q
);
3039 chan
->local_amp_id
= 0;
3041 chan
->move_state
= L2CAP_MOVE_STABLE
;
3042 chan
->move_role
= L2CAP_MOVE_ROLE_NONE
;
3044 if (chan
->mode
!= L2CAP_MODE_ERTM
)
3047 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
3048 chan
->tx_state
= L2CAP_TX_STATE_XMIT
;
3050 INIT_DELAYED_WORK(&chan
->retrans_timer
, l2cap_retrans_timeout
);
3051 INIT_DELAYED_WORK(&chan
->monitor_timer
, l2cap_monitor_timeout
);
3052 INIT_DELAYED_WORK(&chan
->ack_timer
, l2cap_ack_timeout
);
3054 skb_queue_head_init(&chan
->srej_q
);
3056 err
= l2cap_seq_list_init(&chan
->srej_list
, chan
->tx_win
);
3060 err
= l2cap_seq_list_init(&chan
->retrans_list
, chan
->remote_tx_win
);
3062 l2cap_seq_list_free(&chan
->srej_list
);
3067 static inline __u8
l2cap_select_mode(__u8 mode
, __u16 remote_feat_mask
)
3070 case L2CAP_MODE_STREAMING
:
3071 case L2CAP_MODE_ERTM
:
3072 if (l2cap_mode_supported(mode
, remote_feat_mask
))
3076 return L2CAP_MODE_BASIC
;
3080 static inline bool __l2cap_ews_supported(struct l2cap_chan
*chan
)
3082 return enable_hs
&& chan
->conn
->feat_mask
& L2CAP_FEAT_EXT_WINDOW
;
3085 static inline bool __l2cap_efs_supported(struct l2cap_chan
*chan
)
3087 return enable_hs
&& chan
->conn
->feat_mask
& L2CAP_FEAT_EXT_FLOW
;
3090 static void __l2cap_set_ertm_timeouts(struct l2cap_chan
*chan
,
3091 struct l2cap_conf_rfc
*rfc
)
3093 if (chan
->local_amp_id
&& chan
->hs_hcon
) {
3094 u64 ertm_to
= chan
->hs_hcon
->hdev
->amp_be_flush_to
;
3096 /* Class 1 devices have must have ERTM timeouts
3097 * exceeding the Link Supervision Timeout. The
3098 * default Link Supervision Timeout for AMP
3099 * controllers is 10 seconds.
3101 * Class 1 devices use 0xffffffff for their
3102 * best-effort flush timeout, so the clamping logic
3103 * will result in a timeout that meets the above
3104 * requirement. ERTM timeouts are 16-bit values, so
3105 * the maximum timeout is 65.535 seconds.
3108 /* Convert timeout to milliseconds and round */
3109 ertm_to
= DIV_ROUND_UP_ULL(ertm_to
, 1000);
3111 /* This is the recommended formula for class 2 devices
3112 * that start ERTM timers when packets are sent to the
3115 ertm_to
= 3 * ertm_to
+ 500;
3117 if (ertm_to
> 0xffff)
3120 rfc
->retrans_timeout
= cpu_to_le16((u16
) ertm_to
);
3121 rfc
->monitor_timeout
= rfc
->retrans_timeout
;
3123 rfc
->retrans_timeout
= __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO
);
3124 rfc
->monitor_timeout
= __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO
);
3128 static inline void l2cap_txwin_setup(struct l2cap_chan
*chan
)
3130 if (chan
->tx_win
> L2CAP_DEFAULT_TX_WINDOW
&&
3131 __l2cap_ews_supported(chan
)) {
3132 /* use extended control field */
3133 set_bit(FLAG_EXT_CTRL
, &chan
->flags
);
3134 chan
->tx_win_max
= L2CAP_DEFAULT_EXT_WINDOW
;
3136 chan
->tx_win
= min_t(u16
, chan
->tx_win
,
3137 L2CAP_DEFAULT_TX_WINDOW
);
3138 chan
->tx_win_max
= L2CAP_DEFAULT_TX_WINDOW
;
3140 chan
->ack_win
= chan
->tx_win
;
3143 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
)
3145 struct l2cap_conf_req
*req
= data
;
3146 struct l2cap_conf_rfc rfc
= { .mode
= chan
->mode
};
3147 void *ptr
= req
->data
;
3150 BT_DBG("chan %p", chan
);
3152 if (chan
->num_conf_req
|| chan
->num_conf_rsp
)
3155 switch (chan
->mode
) {
3156 case L2CAP_MODE_STREAMING
:
3157 case L2CAP_MODE_ERTM
:
3158 if (test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
))
3161 if (__l2cap_efs_supported(chan
))
3162 set_bit(FLAG_EFS_ENABLE
, &chan
->flags
);
3166 chan
->mode
= l2cap_select_mode(rfc
.mode
, chan
->conn
->feat_mask
);
3171 if (chan
->imtu
!= L2CAP_DEFAULT_MTU
)
3172 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
3174 switch (chan
->mode
) {
3175 case L2CAP_MODE_BASIC
:
3176 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_ERTM
) &&
3177 !(chan
->conn
->feat_mask
& L2CAP_FEAT_STREAMING
))
3180 rfc
.mode
= L2CAP_MODE_BASIC
;
3182 rfc
.max_transmit
= 0;
3183 rfc
.retrans_timeout
= 0;
3184 rfc
.monitor_timeout
= 0;
3185 rfc
.max_pdu_size
= 0;
3187 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
3188 (unsigned long) &rfc
);
3191 case L2CAP_MODE_ERTM
:
3192 rfc
.mode
= L2CAP_MODE_ERTM
;
3193 rfc
.max_transmit
= chan
->max_tx
;
3195 __l2cap_set_ertm_timeouts(chan
, &rfc
);
3197 size
= min_t(u16
, L2CAP_DEFAULT_MAX_PDU_SIZE
, chan
->conn
->mtu
-
3198 L2CAP_EXT_HDR_SIZE
- L2CAP_SDULEN_SIZE
-
3200 rfc
.max_pdu_size
= cpu_to_le16(size
);
3202 l2cap_txwin_setup(chan
);
3204 rfc
.txwin_size
= min_t(u16
, chan
->tx_win
,
3205 L2CAP_DEFAULT_TX_WINDOW
);
3207 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
3208 (unsigned long) &rfc
);
3210 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
))
3211 l2cap_add_opt_efs(&ptr
, chan
);
3213 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
3214 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EWS
, 2,
3217 if (chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
)
3218 if (chan
->fcs
== L2CAP_FCS_NONE
||
3219 test_bit(CONF_RECV_NO_FCS
, &chan
->conf_state
)) {
3220 chan
->fcs
= L2CAP_FCS_NONE
;
3221 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1,
3226 case L2CAP_MODE_STREAMING
:
3227 l2cap_txwin_setup(chan
);
3228 rfc
.mode
= L2CAP_MODE_STREAMING
;
3230 rfc
.max_transmit
= 0;
3231 rfc
.retrans_timeout
= 0;
3232 rfc
.monitor_timeout
= 0;
3234 size
= min_t(u16
, L2CAP_DEFAULT_MAX_PDU_SIZE
, chan
->conn
->mtu
-
3235 L2CAP_EXT_HDR_SIZE
- L2CAP_SDULEN_SIZE
-
3237 rfc
.max_pdu_size
= cpu_to_le16(size
);
3239 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
3240 (unsigned long) &rfc
);
3242 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
))
3243 l2cap_add_opt_efs(&ptr
, chan
);
3245 if (chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
)
3246 if (chan
->fcs
== L2CAP_FCS_NONE
||
3247 test_bit(CONF_RECV_NO_FCS
, &chan
->conf_state
)) {
3248 chan
->fcs
= L2CAP_FCS_NONE
;
3249 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1,
3255 req
->dcid
= cpu_to_le16(chan
->dcid
);
3256 req
->flags
= __constant_cpu_to_le16(0);
3261 static int l2cap_parse_conf_req(struct l2cap_chan
*chan
, void *data
)
3263 struct l2cap_conf_rsp
*rsp
= data
;
3264 void *ptr
= rsp
->data
;
3265 void *req
= chan
->conf_req
;
3266 int len
= chan
->conf_len
;
3267 int type
, hint
, olen
;
3269 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
3270 struct l2cap_conf_efs efs
;
3272 u16 mtu
= L2CAP_DEFAULT_MTU
;
3273 u16 result
= L2CAP_CONF_SUCCESS
;
3276 BT_DBG("chan %p", chan
);
3278 while (len
>= L2CAP_CONF_OPT_SIZE
) {
3279 len
-= l2cap_get_conf_opt(&req
, &type
, &olen
, &val
);
3281 hint
= type
& L2CAP_CONF_HINT
;
3282 type
&= L2CAP_CONF_MASK
;
3285 case L2CAP_CONF_MTU
:
3289 case L2CAP_CONF_FLUSH_TO
:
3290 chan
->flush_to
= val
;
3293 case L2CAP_CONF_QOS
:
3296 case L2CAP_CONF_RFC
:
3297 if (olen
== sizeof(rfc
))
3298 memcpy(&rfc
, (void *) val
, olen
);
3301 case L2CAP_CONF_FCS
:
3302 if (val
== L2CAP_FCS_NONE
)
3303 set_bit(CONF_RECV_NO_FCS
, &chan
->conf_state
);
3306 case L2CAP_CONF_EFS
:
3308 if (olen
== sizeof(efs
))
3309 memcpy(&efs
, (void *) val
, olen
);
3312 case L2CAP_CONF_EWS
:
3314 return -ECONNREFUSED
;
3316 set_bit(FLAG_EXT_CTRL
, &chan
->flags
);
3317 set_bit(CONF_EWS_RECV
, &chan
->conf_state
);
3318 chan
->tx_win_max
= L2CAP_DEFAULT_EXT_WINDOW
;
3319 chan
->remote_tx_win
= val
;
3326 result
= L2CAP_CONF_UNKNOWN
;
3327 *((u8
*) ptr
++) = type
;
3332 if (chan
->num_conf_rsp
|| chan
->num_conf_req
> 1)
3335 switch (chan
->mode
) {
3336 case L2CAP_MODE_STREAMING
:
3337 case L2CAP_MODE_ERTM
:
3338 if (!test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
)) {
3339 chan
->mode
= l2cap_select_mode(rfc
.mode
,
3340 chan
->conn
->feat_mask
);
3345 if (__l2cap_efs_supported(chan
))
3346 set_bit(FLAG_EFS_ENABLE
, &chan
->flags
);
3348 return -ECONNREFUSED
;
3351 if (chan
->mode
!= rfc
.mode
)
3352 return -ECONNREFUSED
;
3358 if (chan
->mode
!= rfc
.mode
) {
3359 result
= L2CAP_CONF_UNACCEPT
;
3360 rfc
.mode
= chan
->mode
;
3362 if (chan
->num_conf_rsp
== 1)
3363 return -ECONNREFUSED
;
3365 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
3366 (unsigned long) &rfc
);
3369 if (result
== L2CAP_CONF_SUCCESS
) {
3370 /* Configure output options and let the other side know
3371 * which ones we don't like. */
3373 if (mtu
< L2CAP_DEFAULT_MIN_MTU
)
3374 result
= L2CAP_CONF_UNACCEPT
;
3377 set_bit(CONF_MTU_DONE
, &chan
->conf_state
);
3379 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->omtu
);
3382 if (chan
->local_stype
!= L2CAP_SERV_NOTRAFIC
&&
3383 efs
.stype
!= L2CAP_SERV_NOTRAFIC
&&
3384 efs
.stype
!= chan
->local_stype
) {
3386 result
= L2CAP_CONF_UNACCEPT
;
3388 if (chan
->num_conf_req
>= 1)
3389 return -ECONNREFUSED
;
3391 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
3393 (unsigned long) &efs
);
3395 /* Send PENDING Conf Rsp */
3396 result
= L2CAP_CONF_PENDING
;
3397 set_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
3402 case L2CAP_MODE_BASIC
:
3403 chan
->fcs
= L2CAP_FCS_NONE
;
3404 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
3407 case L2CAP_MODE_ERTM
:
3408 if (!test_bit(CONF_EWS_RECV
, &chan
->conf_state
))
3409 chan
->remote_tx_win
= rfc
.txwin_size
;
3411 rfc
.txwin_size
= L2CAP_DEFAULT_TX_WINDOW
;
3413 chan
->remote_max_tx
= rfc
.max_transmit
;
3415 size
= min_t(u16
, le16_to_cpu(rfc
.max_pdu_size
),
3416 chan
->conn
->mtu
- L2CAP_EXT_HDR_SIZE
-
3417 L2CAP_SDULEN_SIZE
- L2CAP_FCS_SIZE
);
3418 rfc
.max_pdu_size
= cpu_to_le16(size
);
3419 chan
->remote_mps
= size
;
3421 __l2cap_set_ertm_timeouts(chan
, &rfc
);
3423 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
3425 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
3426 sizeof(rfc
), (unsigned long) &rfc
);
3428 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
)) {
3429 chan
->remote_id
= efs
.id
;
3430 chan
->remote_stype
= efs
.stype
;
3431 chan
->remote_msdu
= le16_to_cpu(efs
.msdu
);
3432 chan
->remote_flush_to
=
3433 le32_to_cpu(efs
.flush_to
);
3434 chan
->remote_acc_lat
=
3435 le32_to_cpu(efs
.acc_lat
);
3436 chan
->remote_sdu_itime
=
3437 le32_to_cpu(efs
.sdu_itime
);
3438 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
3440 (unsigned long) &efs
);
3444 case L2CAP_MODE_STREAMING
:
3445 size
= min_t(u16
, le16_to_cpu(rfc
.max_pdu_size
),
3446 chan
->conn
->mtu
- L2CAP_EXT_HDR_SIZE
-
3447 L2CAP_SDULEN_SIZE
- L2CAP_FCS_SIZE
);
3448 rfc
.max_pdu_size
= cpu_to_le16(size
);
3449 chan
->remote_mps
= size
;
3451 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
3453 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
3454 (unsigned long) &rfc
);
3459 result
= L2CAP_CONF_UNACCEPT
;
3461 memset(&rfc
, 0, sizeof(rfc
));
3462 rfc
.mode
= chan
->mode
;
3465 if (result
== L2CAP_CONF_SUCCESS
)
3466 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
3468 rsp
->scid
= cpu_to_le16(chan
->dcid
);
3469 rsp
->result
= cpu_to_le16(result
);
3470 rsp
->flags
= __constant_cpu_to_le16(0);
3475 static int l2cap_parse_conf_rsp(struct l2cap_chan
*chan
, void *rsp
, int len
,
3476 void *data
, u16
*result
)
3478 struct l2cap_conf_req
*req
= data
;
3479 void *ptr
= req
->data
;
3482 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
3483 struct l2cap_conf_efs efs
;
3485 BT_DBG("chan %p, rsp %p, len %d, req %p", chan
, rsp
, len
, data
);
3487 while (len
>= L2CAP_CONF_OPT_SIZE
) {
3488 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
3491 case L2CAP_CONF_MTU
:
3492 if (val
< L2CAP_DEFAULT_MIN_MTU
) {
3493 *result
= L2CAP_CONF_UNACCEPT
;
3494 chan
->imtu
= L2CAP_DEFAULT_MIN_MTU
;
3497 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
3500 case L2CAP_CONF_FLUSH_TO
:
3501 chan
->flush_to
= val
;
3502 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FLUSH_TO
,
3506 case L2CAP_CONF_RFC
:
3507 if (olen
== sizeof(rfc
))
3508 memcpy(&rfc
, (void *)val
, olen
);
3510 if (test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
) &&
3511 rfc
.mode
!= chan
->mode
)
3512 return -ECONNREFUSED
;
3516 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
3517 sizeof(rfc
), (unsigned long) &rfc
);
3520 case L2CAP_CONF_EWS
:
3521 chan
->ack_win
= min_t(u16
, val
, chan
->ack_win
);
3522 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EWS
, 2,
3526 case L2CAP_CONF_EFS
:
3527 if (olen
== sizeof(efs
))
3528 memcpy(&efs
, (void *)val
, olen
);
3530 if (chan
->local_stype
!= L2CAP_SERV_NOTRAFIC
&&
3531 efs
.stype
!= L2CAP_SERV_NOTRAFIC
&&
3532 efs
.stype
!= chan
->local_stype
)
3533 return -ECONNREFUSED
;
3535 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
, sizeof(efs
),
3536 (unsigned long) &efs
);
3539 case L2CAP_CONF_FCS
:
3540 if (*result
== L2CAP_CONF_PENDING
)
3541 if (val
== L2CAP_FCS_NONE
)
3542 set_bit(CONF_RECV_NO_FCS
,
3548 if (chan
->mode
== L2CAP_MODE_BASIC
&& chan
->mode
!= rfc
.mode
)
3549 return -ECONNREFUSED
;
3551 chan
->mode
= rfc
.mode
;
3553 if (*result
== L2CAP_CONF_SUCCESS
|| *result
== L2CAP_CONF_PENDING
) {
3555 case L2CAP_MODE_ERTM
:
3556 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
3557 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
3558 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3559 if (!test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
3560 chan
->ack_win
= min_t(u16
, chan
->ack_win
,
3563 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
)) {
3564 chan
->local_msdu
= le16_to_cpu(efs
.msdu
);
3565 chan
->local_sdu_itime
=
3566 le32_to_cpu(efs
.sdu_itime
);
3567 chan
->local_acc_lat
= le32_to_cpu(efs
.acc_lat
);
3568 chan
->local_flush_to
=
3569 le32_to_cpu(efs
.flush_to
);
3573 case L2CAP_MODE_STREAMING
:
3574 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3578 req
->dcid
= cpu_to_le16(chan
->dcid
);
3579 req
->flags
= __constant_cpu_to_le16(0);
3584 static int l2cap_build_conf_rsp(struct l2cap_chan
*chan
, void *data
,
3585 u16 result
, u16 flags
)
3587 struct l2cap_conf_rsp
*rsp
= data
;
3588 void *ptr
= rsp
->data
;
3590 BT_DBG("chan %p", chan
);
3592 rsp
->scid
= cpu_to_le16(chan
->dcid
);
3593 rsp
->result
= cpu_to_le16(result
);
3594 rsp
->flags
= cpu_to_le16(flags
);
3599 void __l2cap_connect_rsp_defer(struct l2cap_chan
*chan
)
3601 struct l2cap_conn_rsp rsp
;
3602 struct l2cap_conn
*conn
= chan
->conn
;
3606 rsp
.scid
= cpu_to_le16(chan
->dcid
);
3607 rsp
.dcid
= cpu_to_le16(chan
->scid
);
3608 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_SUCCESS
);
3609 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
3612 rsp_code
= L2CAP_CREATE_CHAN_RSP
;
3614 rsp_code
= L2CAP_CONN_RSP
;
3616 BT_DBG("chan %p rsp_code %u", chan
, rsp_code
);
3618 l2cap_send_cmd(conn
, chan
->ident
, rsp_code
, sizeof(rsp
), &rsp
);
3620 if (test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
))
3623 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
3624 l2cap_build_conf_req(chan
, buf
), buf
);
3625 chan
->num_conf_req
++;
3628 static void l2cap_conf_rfc_get(struct l2cap_chan
*chan
, void *rsp
, int len
)
3632 /* Use sane default values in case a misbehaving remote device
3633 * did not send an RFC or extended window size option.
3635 u16 txwin_ext
= chan
->ack_win
;
3636 struct l2cap_conf_rfc rfc
= {
3638 .retrans_timeout
= __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO
),
3639 .monitor_timeout
= __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO
),
3640 .max_pdu_size
= cpu_to_le16(chan
->imtu
),
3641 .txwin_size
= min_t(u16
, chan
->ack_win
, L2CAP_DEFAULT_TX_WINDOW
),
3644 BT_DBG("chan %p, rsp %p, len %d", chan
, rsp
, len
);
3646 if ((chan
->mode
!= L2CAP_MODE_ERTM
) && (chan
->mode
!= L2CAP_MODE_STREAMING
))
3649 while (len
>= L2CAP_CONF_OPT_SIZE
) {
3650 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
3653 case L2CAP_CONF_RFC
:
3654 if (olen
== sizeof(rfc
))
3655 memcpy(&rfc
, (void *)val
, olen
);
3657 case L2CAP_CONF_EWS
:
3664 case L2CAP_MODE_ERTM
:
3665 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
3666 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
3667 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3668 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
3669 chan
->ack_win
= min_t(u16
, chan
->ack_win
, txwin_ext
);
3671 chan
->ack_win
= min_t(u16
, chan
->ack_win
,
3674 case L2CAP_MODE_STREAMING
:
3675 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3679 static inline int l2cap_command_rej(struct l2cap_conn
*conn
,
3680 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
3683 struct l2cap_cmd_rej_unk
*rej
= (struct l2cap_cmd_rej_unk
*) data
;
3685 if (cmd_len
< sizeof(*rej
))
3688 if (rej
->reason
!= L2CAP_REJ_NOT_UNDERSTOOD
)
3691 if ((conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) &&
3692 cmd
->ident
== conn
->info_ident
) {
3693 cancel_delayed_work(&conn
->info_timer
);
3695 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3696 conn
->info_ident
= 0;
3698 l2cap_conn_start(conn
);
3704 static struct l2cap_chan
*l2cap_connect(struct l2cap_conn
*conn
,
3705 struct l2cap_cmd_hdr
*cmd
,
3706 u8
*data
, u8 rsp_code
, u8 amp_id
)
3708 struct l2cap_conn_req
*req
= (struct l2cap_conn_req
*) data
;
3709 struct l2cap_conn_rsp rsp
;
3710 struct l2cap_chan
*chan
= NULL
, *pchan
;
3711 struct sock
*parent
, *sk
= NULL
;
3712 int result
, status
= L2CAP_CS_NO_INFO
;
3714 u16 dcid
= 0, scid
= __le16_to_cpu(req
->scid
);
3715 __le16 psm
= req
->psm
;
3717 BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm
), scid
);
3719 /* Check if we have socket listening on psm */
3720 pchan
= l2cap_global_chan_by_psm(BT_LISTEN
, psm
, conn
->src
, conn
->dst
);
3722 result
= L2CAP_CR_BAD_PSM
;
3728 mutex_lock(&conn
->chan_lock
);
3731 /* Check if the ACL is secure enough (if not SDP) */
3732 if (psm
!= __constant_cpu_to_le16(L2CAP_PSM_SDP
) &&
3733 !hci_conn_check_link_mode(conn
->hcon
)) {
3734 conn
->disc_reason
= HCI_ERROR_AUTH_FAILURE
;
3735 result
= L2CAP_CR_SEC_BLOCK
;
3739 result
= L2CAP_CR_NO_MEM
;
3741 /* Check if we already have channel with that dcid */
3742 if (__l2cap_get_chan_by_dcid(conn
, scid
))
3745 chan
= pchan
->ops
->new_connection(pchan
);
3751 hci_conn_hold(conn
->hcon
);
3753 bacpy(&bt_sk(sk
)->src
, conn
->src
);
3754 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
3757 chan
->local_amp_id
= amp_id
;
3759 __l2cap_chan_add(conn
, chan
);
3763 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
3765 chan
->ident
= cmd
->ident
;
3767 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
) {
3768 if (l2cap_chan_check_security(chan
)) {
3769 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
)) {
3770 __l2cap_state_change(chan
, BT_CONNECT2
);
3771 result
= L2CAP_CR_PEND
;
3772 status
= L2CAP_CS_AUTHOR_PEND
;
3773 chan
->ops
->defer(chan
);
3775 /* Force pending result for AMP controllers.
3776 * The connection will succeed after the
3777 * physical link is up.
3780 __l2cap_state_change(chan
, BT_CONNECT2
);
3781 result
= L2CAP_CR_PEND
;
3783 __l2cap_state_change(chan
, BT_CONFIG
);
3784 result
= L2CAP_CR_SUCCESS
;
3786 status
= L2CAP_CS_NO_INFO
;
3789 __l2cap_state_change(chan
, BT_CONNECT2
);
3790 result
= L2CAP_CR_PEND
;
3791 status
= L2CAP_CS_AUTHEN_PEND
;
3794 __l2cap_state_change(chan
, BT_CONNECT2
);
3795 result
= L2CAP_CR_PEND
;
3796 status
= L2CAP_CS_NO_INFO
;
3800 release_sock(parent
);
3801 mutex_unlock(&conn
->chan_lock
);
3804 rsp
.scid
= cpu_to_le16(scid
);
3805 rsp
.dcid
= cpu_to_le16(dcid
);
3806 rsp
.result
= cpu_to_le16(result
);
3807 rsp
.status
= cpu_to_le16(status
);
3808 l2cap_send_cmd(conn
, cmd
->ident
, rsp_code
, sizeof(rsp
), &rsp
);
3810 if (result
== L2CAP_CR_PEND
&& status
== L2CAP_CS_NO_INFO
) {
3811 struct l2cap_info_req info
;
3812 info
.type
= __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK
);
3814 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
3815 conn
->info_ident
= l2cap_get_ident(conn
);
3817 schedule_delayed_work(&conn
->info_timer
, L2CAP_INFO_TIMEOUT
);
3819 l2cap_send_cmd(conn
, conn
->info_ident
, L2CAP_INFO_REQ
,
3820 sizeof(info
), &info
);
3823 if (chan
&& !test_bit(CONF_REQ_SENT
, &chan
->conf_state
) &&
3824 result
== L2CAP_CR_SUCCESS
) {
3826 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
3827 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
3828 l2cap_build_conf_req(chan
, buf
), buf
);
3829 chan
->num_conf_req
++;
3835 static int l2cap_connect_req(struct l2cap_conn
*conn
,
3836 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
3838 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
3839 struct hci_conn
*hcon
= conn
->hcon
;
3841 if (cmd_len
< sizeof(struct l2cap_conn_req
))
3845 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
) &&
3846 !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &hcon
->flags
))
3847 mgmt_device_connected(hdev
, &hcon
->dst
, hcon
->type
,
3848 hcon
->dst_type
, 0, NULL
, 0,
3850 hci_dev_unlock(hdev
);
3852 l2cap_connect(conn
, cmd
, data
, L2CAP_CONN_RSP
, 0);
3856 static int l2cap_connect_create_rsp(struct l2cap_conn
*conn
,
3857 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
3860 struct l2cap_conn_rsp
*rsp
= (struct l2cap_conn_rsp
*) data
;
3861 u16 scid
, dcid
, result
, status
;
3862 struct l2cap_chan
*chan
;
3866 if (cmd_len
< sizeof(*rsp
))
3869 scid
= __le16_to_cpu(rsp
->scid
);
3870 dcid
= __le16_to_cpu(rsp
->dcid
);
3871 result
= __le16_to_cpu(rsp
->result
);
3872 status
= __le16_to_cpu(rsp
->status
);
3874 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
3875 dcid
, scid
, result
, status
);
3877 mutex_lock(&conn
->chan_lock
);
3880 chan
= __l2cap_get_chan_by_scid(conn
, scid
);
3886 chan
= __l2cap_get_chan_by_ident(conn
, cmd
->ident
);
3895 l2cap_chan_lock(chan
);
3898 case L2CAP_CR_SUCCESS
:
3899 l2cap_state_change(chan
, BT_CONFIG
);
3902 clear_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
3904 if (test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
))
3907 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
3908 l2cap_build_conf_req(chan
, req
), req
);
3909 chan
->num_conf_req
++;
3913 set_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
3917 l2cap_chan_del(chan
, ECONNREFUSED
);
3921 l2cap_chan_unlock(chan
);
3924 mutex_unlock(&conn
->chan_lock
);
3929 static inline void set_default_fcs(struct l2cap_chan
*chan
)
3931 /* FCS is enabled only in ERTM or streaming mode, if one or both
3934 if (chan
->mode
!= L2CAP_MODE_ERTM
&& chan
->mode
!= L2CAP_MODE_STREAMING
)
3935 chan
->fcs
= L2CAP_FCS_NONE
;
3936 else if (!test_bit(CONF_RECV_NO_FCS
, &chan
->conf_state
))
3937 chan
->fcs
= L2CAP_FCS_CRC16
;
3940 static void l2cap_send_efs_conf_rsp(struct l2cap_chan
*chan
, void *data
,
3941 u8 ident
, u16 flags
)
3943 struct l2cap_conn
*conn
= chan
->conn
;
3945 BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn
, chan
, ident
,
3948 clear_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
3949 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
3951 l2cap_send_cmd(conn
, ident
, L2CAP_CONF_RSP
,
3952 l2cap_build_conf_rsp(chan
, data
,
3953 L2CAP_CONF_SUCCESS
, flags
), data
);
3956 static inline int l2cap_config_req(struct l2cap_conn
*conn
,
3957 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
3960 struct l2cap_conf_req
*req
= (struct l2cap_conf_req
*) data
;
3963 struct l2cap_chan
*chan
;
3966 if (cmd_len
< sizeof(*req
))
3969 dcid
= __le16_to_cpu(req
->dcid
);
3970 flags
= __le16_to_cpu(req
->flags
);
3972 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid
, flags
);
3974 chan
= l2cap_get_chan_by_scid(conn
, dcid
);
3978 if (chan
->state
!= BT_CONFIG
&& chan
->state
!= BT_CONNECT2
) {
3979 struct l2cap_cmd_rej_cid rej
;
3981 rej
.reason
= __constant_cpu_to_le16(L2CAP_REJ_INVALID_CID
);
3982 rej
.scid
= cpu_to_le16(chan
->scid
);
3983 rej
.dcid
= cpu_to_le16(chan
->dcid
);
3985 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_COMMAND_REJ
,
3990 /* Reject if config buffer is too small. */
3991 len
= cmd_len
- sizeof(*req
);
3992 if (chan
->conf_len
+ len
> sizeof(chan
->conf_req
)) {
3993 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
3994 l2cap_build_conf_rsp(chan
, rsp
,
3995 L2CAP_CONF_REJECT
, flags
), rsp
);
4000 memcpy(chan
->conf_req
+ chan
->conf_len
, req
->data
, len
);
4001 chan
->conf_len
+= len
;
4003 if (flags
& L2CAP_CONF_FLAG_CONTINUATION
) {
4004 /* Incomplete config. Send empty response. */
4005 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
4006 l2cap_build_conf_rsp(chan
, rsp
,
4007 L2CAP_CONF_SUCCESS
, flags
), rsp
);
4011 /* Complete config. */
4012 len
= l2cap_parse_conf_req(chan
, rsp
);
4014 l2cap_send_disconn_req(chan
, ECONNRESET
);
4018 chan
->ident
= cmd
->ident
;
4019 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
, len
, rsp
);
4020 chan
->num_conf_rsp
++;
4022 /* Reset config buffer. */
4025 if (!test_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
))
4028 if (test_bit(CONF_INPUT_DONE
, &chan
->conf_state
)) {
4029 set_default_fcs(chan
);
4031 if (chan
->mode
== L2CAP_MODE_ERTM
||
4032 chan
->mode
== L2CAP_MODE_STREAMING
)
4033 err
= l2cap_ertm_init(chan
);
4036 l2cap_send_disconn_req(chan
, -err
);
4038 l2cap_chan_ready(chan
);
4043 if (!test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
)) {
4045 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
4046 l2cap_build_conf_req(chan
, buf
), buf
);
4047 chan
->num_conf_req
++;
4050 /* Got Conf Rsp PENDING from remote side and asume we sent
4051 Conf Rsp PENDING in the code above */
4052 if (test_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
) &&
4053 test_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
)) {
4055 /* check compatibility */
4057 /* Send rsp for BR/EDR channel */
4059 l2cap_send_efs_conf_rsp(chan
, rsp
, cmd
->ident
, flags
);
4061 chan
->ident
= cmd
->ident
;
4065 l2cap_chan_unlock(chan
);
4069 static inline int l2cap_config_rsp(struct l2cap_conn
*conn
,
4070 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
4073 struct l2cap_conf_rsp
*rsp
= (struct l2cap_conf_rsp
*)data
;
4074 u16 scid
, flags
, result
;
4075 struct l2cap_chan
*chan
;
4076 int len
= cmd_len
- sizeof(*rsp
);
4079 if (cmd_len
< sizeof(*rsp
))
4082 scid
= __le16_to_cpu(rsp
->scid
);
4083 flags
= __le16_to_cpu(rsp
->flags
);
4084 result
= __le16_to_cpu(rsp
->result
);
4086 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid
, flags
,
4089 chan
= l2cap_get_chan_by_scid(conn
, scid
);
4094 case L2CAP_CONF_SUCCESS
:
4095 l2cap_conf_rfc_get(chan
, rsp
->data
, len
);
4096 clear_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
);
4099 case L2CAP_CONF_PENDING
:
4100 set_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
);
4102 if (test_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
)) {
4105 len
= l2cap_parse_conf_rsp(chan
, rsp
->data
, len
,
4108 l2cap_send_disconn_req(chan
, ECONNRESET
);
4112 if (!chan
->hs_hcon
) {
4113 l2cap_send_efs_conf_rsp(chan
, buf
, cmd
->ident
,
4116 if (l2cap_check_efs(chan
)) {
4117 amp_create_logical_link(chan
);
4118 chan
->ident
= cmd
->ident
;
4124 case L2CAP_CONF_UNACCEPT
:
4125 if (chan
->num_conf_rsp
<= L2CAP_CONF_MAX_CONF_RSP
) {
4128 if (len
> sizeof(req
) - sizeof(struct l2cap_conf_req
)) {
4129 l2cap_send_disconn_req(chan
, ECONNRESET
);
4133 /* throw out any old stored conf requests */
4134 result
= L2CAP_CONF_SUCCESS
;
4135 len
= l2cap_parse_conf_rsp(chan
, rsp
->data
, len
,
4138 l2cap_send_disconn_req(chan
, ECONNRESET
);
4142 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
4143 L2CAP_CONF_REQ
, len
, req
);
4144 chan
->num_conf_req
++;
4145 if (result
!= L2CAP_CONF_SUCCESS
)
4151 l2cap_chan_set_err(chan
, ECONNRESET
);
4153 __set_chan_timer(chan
, L2CAP_DISC_REJ_TIMEOUT
);
4154 l2cap_send_disconn_req(chan
, ECONNRESET
);
4158 if (flags
& L2CAP_CONF_FLAG_CONTINUATION
)
4161 set_bit(CONF_INPUT_DONE
, &chan
->conf_state
);
4163 if (test_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
)) {
4164 set_default_fcs(chan
);
4166 if (chan
->mode
== L2CAP_MODE_ERTM
||
4167 chan
->mode
== L2CAP_MODE_STREAMING
)
4168 err
= l2cap_ertm_init(chan
);
4171 l2cap_send_disconn_req(chan
, -err
);
4173 l2cap_chan_ready(chan
);
4177 l2cap_chan_unlock(chan
);
4181 static inline int l2cap_disconnect_req(struct l2cap_conn
*conn
,
4182 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
4185 struct l2cap_disconn_req
*req
= (struct l2cap_disconn_req
*) data
;
4186 struct l2cap_disconn_rsp rsp
;
4188 struct l2cap_chan
*chan
;
4191 if (cmd_len
!= sizeof(*req
))
4194 scid
= __le16_to_cpu(req
->scid
);
4195 dcid
= __le16_to_cpu(req
->dcid
);
4197 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid
, dcid
);
4199 mutex_lock(&conn
->chan_lock
);
4201 chan
= __l2cap_get_chan_by_scid(conn
, dcid
);
4203 mutex_unlock(&conn
->chan_lock
);
4207 l2cap_chan_lock(chan
);
4211 rsp
.dcid
= cpu_to_le16(chan
->scid
);
4212 rsp
.scid
= cpu_to_le16(chan
->dcid
);
4213 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_DISCONN_RSP
, sizeof(rsp
), &rsp
);
4216 sk
->sk_shutdown
= SHUTDOWN_MASK
;
4219 l2cap_chan_hold(chan
);
4220 l2cap_chan_del(chan
, ECONNRESET
);
4222 l2cap_chan_unlock(chan
);
4224 chan
->ops
->close(chan
);
4225 l2cap_chan_put(chan
);
4227 mutex_unlock(&conn
->chan_lock
);
4232 static inline int l2cap_disconnect_rsp(struct l2cap_conn
*conn
,
4233 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
4236 struct l2cap_disconn_rsp
*rsp
= (struct l2cap_disconn_rsp
*) data
;
4238 struct l2cap_chan
*chan
;
4240 if (cmd_len
!= sizeof(*rsp
))
4243 scid
= __le16_to_cpu(rsp
->scid
);
4244 dcid
= __le16_to_cpu(rsp
->dcid
);
4246 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid
, scid
);
4248 mutex_lock(&conn
->chan_lock
);
4250 chan
= __l2cap_get_chan_by_scid(conn
, scid
);
4252 mutex_unlock(&conn
->chan_lock
);
4256 l2cap_chan_lock(chan
);
4258 l2cap_chan_hold(chan
);
4259 l2cap_chan_del(chan
, 0);
4261 l2cap_chan_unlock(chan
);
4263 chan
->ops
->close(chan
);
4264 l2cap_chan_put(chan
);
4266 mutex_unlock(&conn
->chan_lock
);
4271 static inline int l2cap_information_req(struct l2cap_conn
*conn
,
4272 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
4275 struct l2cap_info_req
*req
= (struct l2cap_info_req
*) data
;
4278 if (cmd_len
!= sizeof(*req
))
4281 type
= __le16_to_cpu(req
->type
);
4283 BT_DBG("type 0x%4.4x", type
);
4285 if (type
== L2CAP_IT_FEAT_MASK
) {
4287 u32 feat_mask
= l2cap_feat_mask
;
4288 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
4289 rsp
->type
= __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK
);
4290 rsp
->result
= __constant_cpu_to_le16(L2CAP_IR_SUCCESS
);
4292 feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
4295 feat_mask
|= L2CAP_FEAT_EXT_FLOW
4296 | L2CAP_FEAT_EXT_WINDOW
;
4298 put_unaligned_le32(feat_mask
, rsp
->data
);
4299 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_INFO_RSP
, sizeof(buf
),
4301 } else if (type
== L2CAP_IT_FIXED_CHAN
) {
4303 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
4306 l2cap_fixed_chan
[0] |= L2CAP_FC_A2MP
;
4308 l2cap_fixed_chan
[0] &= ~L2CAP_FC_A2MP
;
4310 rsp
->type
= __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
4311 rsp
->result
= __constant_cpu_to_le16(L2CAP_IR_SUCCESS
);
4312 memcpy(rsp
->data
, l2cap_fixed_chan
, sizeof(l2cap_fixed_chan
));
4313 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_INFO_RSP
, sizeof(buf
),
4316 struct l2cap_info_rsp rsp
;
4317 rsp
.type
= cpu_to_le16(type
);
4318 rsp
.result
= __constant_cpu_to_le16(L2CAP_IR_NOTSUPP
);
4319 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_INFO_RSP
, sizeof(rsp
),
4326 static inline int l2cap_information_rsp(struct l2cap_conn
*conn
,
4327 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
4330 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) data
;
4333 if (cmd_len
!= sizeof(*rsp
))
4336 type
= __le16_to_cpu(rsp
->type
);
4337 result
= __le16_to_cpu(rsp
->result
);
4339 BT_DBG("type 0x%4.4x result 0x%2.2x", type
, result
);
4341 /* L2CAP Info req/rsp are unbound to channels, add extra checks */
4342 if (cmd
->ident
!= conn
->info_ident
||
4343 conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
)
4346 cancel_delayed_work(&conn
->info_timer
);
4348 if (result
!= L2CAP_IR_SUCCESS
) {
4349 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
4350 conn
->info_ident
= 0;
4352 l2cap_conn_start(conn
);
4358 case L2CAP_IT_FEAT_MASK
:
4359 conn
->feat_mask
= get_unaligned_le32(rsp
->data
);
4361 if (conn
->feat_mask
& L2CAP_FEAT_FIXED_CHAN
) {
4362 struct l2cap_info_req req
;
4363 req
.type
= __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
4365 conn
->info_ident
= l2cap_get_ident(conn
);
4367 l2cap_send_cmd(conn
, conn
->info_ident
,
4368 L2CAP_INFO_REQ
, sizeof(req
), &req
);
4370 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
4371 conn
->info_ident
= 0;
4373 l2cap_conn_start(conn
);
4377 case L2CAP_IT_FIXED_CHAN
:
4378 conn
->fixed_chan_mask
= rsp
->data
[0];
4379 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
4380 conn
->info_ident
= 0;
4382 l2cap_conn_start(conn
);
4389 static int l2cap_create_channel_req(struct l2cap_conn
*conn
,
4390 struct l2cap_cmd_hdr
*cmd
,
4391 u16 cmd_len
, void *data
)
4393 struct l2cap_create_chan_req
*req
= data
;
4394 struct l2cap_create_chan_rsp rsp
;
4395 struct l2cap_chan
*chan
;
4396 struct hci_dev
*hdev
;
4399 if (cmd_len
!= sizeof(*req
))
4405 psm
= le16_to_cpu(req
->psm
);
4406 scid
= le16_to_cpu(req
->scid
);
4408 BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm
, scid
, req
->amp_id
);
4410 /* For controller id 0 make BR/EDR connection */
4411 if (req
->amp_id
== HCI_BREDR_ID
) {
4412 l2cap_connect(conn
, cmd
, data
, L2CAP_CREATE_CHAN_RSP
,
4417 /* Validate AMP controller id */
4418 hdev
= hci_dev_get(req
->amp_id
);
4422 if (hdev
->dev_type
!= HCI_AMP
|| !test_bit(HCI_UP
, &hdev
->flags
)) {
4427 chan
= l2cap_connect(conn
, cmd
, data
, L2CAP_CREATE_CHAN_RSP
,
4430 struct amp_mgr
*mgr
= conn
->hcon
->amp_mgr
;
4431 struct hci_conn
*hs_hcon
;
4433 hs_hcon
= hci_conn_hash_lookup_ba(hdev
, AMP_LINK
, conn
->dst
);
4439 BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr
, chan
, hs_hcon
);
4441 mgr
->bredr_chan
= chan
;
4442 chan
->hs_hcon
= hs_hcon
;
4443 chan
->fcs
= L2CAP_FCS_NONE
;
4444 conn
->mtu
= hdev
->block_mtu
;
4453 rsp
.scid
= cpu_to_le16(scid
);
4454 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_BAD_AMP
);
4455 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
4457 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CREATE_CHAN_RSP
,
4463 static void l2cap_send_move_chan_req(struct l2cap_chan
*chan
, u8 dest_amp_id
)
4465 struct l2cap_move_chan_req req
;
4468 BT_DBG("chan %p, dest_amp_id %d", chan
, dest_amp_id
);
4470 ident
= l2cap_get_ident(chan
->conn
);
4471 chan
->ident
= ident
;
4473 req
.icid
= cpu_to_le16(chan
->scid
);
4474 req
.dest_amp_id
= dest_amp_id
;
4476 l2cap_send_cmd(chan
->conn
, ident
, L2CAP_MOVE_CHAN_REQ
, sizeof(req
),
4479 __set_chan_timer(chan
, L2CAP_MOVE_TIMEOUT
);
4482 static void l2cap_send_move_chan_rsp(struct l2cap_chan
*chan
, u16 result
)
4484 struct l2cap_move_chan_rsp rsp
;
4486 BT_DBG("chan %p, result 0x%4.4x", chan
, result
);
4488 rsp
.icid
= cpu_to_le16(chan
->dcid
);
4489 rsp
.result
= cpu_to_le16(result
);
4491 l2cap_send_cmd(chan
->conn
, chan
->ident
, L2CAP_MOVE_CHAN_RSP
,
4495 static void l2cap_send_move_chan_cfm(struct l2cap_chan
*chan
, u16 result
)
4497 struct l2cap_move_chan_cfm cfm
;
4499 BT_DBG("chan %p, result 0x%4.4x", chan
, result
);
4501 chan
->ident
= l2cap_get_ident(chan
->conn
);
4503 cfm
.icid
= cpu_to_le16(chan
->scid
);
4504 cfm
.result
= cpu_to_le16(result
);
4506 l2cap_send_cmd(chan
->conn
, chan
->ident
, L2CAP_MOVE_CHAN_CFM
,
4509 __set_chan_timer(chan
, L2CAP_MOVE_TIMEOUT
);
4512 static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn
*conn
, u16 icid
)
4514 struct l2cap_move_chan_cfm cfm
;
4516 BT_DBG("conn %p, icid 0x%4.4x", conn
, icid
);
4518 cfm
.icid
= cpu_to_le16(icid
);
4519 cfm
.result
= __constant_cpu_to_le16(L2CAP_MC_UNCONFIRMED
);
4521 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_MOVE_CHAN_CFM
,
4525 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn
*conn
, u8 ident
,
4528 struct l2cap_move_chan_cfm_rsp rsp
;
4530 BT_DBG("icid 0x%4.4x", icid
);
4532 rsp
.icid
= cpu_to_le16(icid
);
4533 l2cap_send_cmd(conn
, ident
, L2CAP_MOVE_CHAN_CFM_RSP
, sizeof(rsp
), &rsp
);
4536 static void __release_logical_link(struct l2cap_chan
*chan
)
4538 chan
->hs_hchan
= NULL
;
4539 chan
->hs_hcon
= NULL
;
4541 /* Placeholder - release the logical link */
4544 static void l2cap_logical_fail(struct l2cap_chan
*chan
)
4546 /* Logical link setup failed */
4547 if (chan
->state
!= BT_CONNECTED
) {
4548 /* Create channel failure, disconnect */
4549 l2cap_send_disconn_req(chan
, ECONNRESET
);
4553 switch (chan
->move_role
) {
4554 case L2CAP_MOVE_ROLE_RESPONDER
:
4555 l2cap_move_done(chan
);
4556 l2cap_send_move_chan_rsp(chan
, L2CAP_MR_NOT_SUPP
);
4558 case L2CAP_MOVE_ROLE_INITIATOR
:
4559 if (chan
->move_state
== L2CAP_MOVE_WAIT_LOGICAL_COMP
||
4560 chan
->move_state
== L2CAP_MOVE_WAIT_LOGICAL_CFM
) {
4561 /* Remote has only sent pending or
4562 * success responses, clean up
4564 l2cap_move_done(chan
);
4567 /* Other amp move states imply that the move
4568 * has already aborted
4570 l2cap_send_move_chan_cfm(chan
, L2CAP_MC_UNCONFIRMED
);
4575 static void l2cap_logical_finish_create(struct l2cap_chan
*chan
,
4576 struct hci_chan
*hchan
)
4578 struct l2cap_conf_rsp rsp
;
4580 chan
->hs_hchan
= hchan
;
4581 chan
->hs_hcon
->l2cap_data
= chan
->conn
;
4583 l2cap_send_efs_conf_rsp(chan
, &rsp
, chan
->ident
, 0);
4585 if (test_bit(CONF_INPUT_DONE
, &chan
->conf_state
)) {
4588 set_default_fcs(chan
);
4590 err
= l2cap_ertm_init(chan
);
4592 l2cap_send_disconn_req(chan
, -err
);
4594 l2cap_chan_ready(chan
);
4598 static void l2cap_logical_finish_move(struct l2cap_chan
*chan
,
4599 struct hci_chan
*hchan
)
4601 chan
->hs_hcon
= hchan
->conn
;
4602 chan
->hs_hcon
->l2cap_data
= chan
->conn
;
4604 BT_DBG("move_state %d", chan
->move_state
);
4606 switch (chan
->move_state
) {
4607 case L2CAP_MOVE_WAIT_LOGICAL_COMP
:
4608 /* Move confirm will be sent after a success
4609 * response is received
4611 chan
->move_state
= L2CAP_MOVE_WAIT_RSP_SUCCESS
;
4613 case L2CAP_MOVE_WAIT_LOGICAL_CFM
:
4614 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
4615 chan
->move_state
= L2CAP_MOVE_WAIT_LOCAL_BUSY
;
4616 } else if (chan
->move_role
== L2CAP_MOVE_ROLE_INITIATOR
) {
4617 chan
->move_state
= L2CAP_MOVE_WAIT_CONFIRM_RSP
;
4618 l2cap_send_move_chan_cfm(chan
, L2CAP_MC_CONFIRMED
);
4619 } else if (chan
->move_role
== L2CAP_MOVE_ROLE_RESPONDER
) {
4620 chan
->move_state
= L2CAP_MOVE_WAIT_CONFIRM
;
4621 l2cap_send_move_chan_rsp(chan
, L2CAP_MR_SUCCESS
);
4625 /* Move was not in expected state, free the channel */
4626 __release_logical_link(chan
);
4628 chan
->move_state
= L2CAP_MOVE_STABLE
;
4632 /* Call with chan locked */
4633 void l2cap_logical_cfm(struct l2cap_chan
*chan
, struct hci_chan
*hchan
,
4636 BT_DBG("chan %p, hchan %p, status %d", chan
, hchan
, status
);
4639 l2cap_logical_fail(chan
);
4640 __release_logical_link(chan
);
4644 if (chan
->state
!= BT_CONNECTED
) {
4645 /* Ignore logical link if channel is on BR/EDR */
4646 if (chan
->local_amp_id
)
4647 l2cap_logical_finish_create(chan
, hchan
);
4649 l2cap_logical_finish_move(chan
, hchan
);
4653 void l2cap_move_start(struct l2cap_chan
*chan
)
4655 BT_DBG("chan %p", chan
);
4657 if (chan
->local_amp_id
== HCI_BREDR_ID
) {
4658 if (chan
->chan_policy
!= BT_CHANNEL_POLICY_AMP_PREFERRED
)
4660 chan
->move_role
= L2CAP_MOVE_ROLE_INITIATOR
;
4661 chan
->move_state
= L2CAP_MOVE_WAIT_PREPARE
;
4662 /* Placeholder - start physical link setup */
4664 chan
->move_role
= L2CAP_MOVE_ROLE_INITIATOR
;
4665 chan
->move_state
= L2CAP_MOVE_WAIT_RSP_SUCCESS
;
4667 l2cap_move_setup(chan
);
4668 l2cap_send_move_chan_req(chan
, 0);
4672 static void l2cap_do_create(struct l2cap_chan
*chan
, int result
,
4673 u8 local_amp_id
, u8 remote_amp_id
)
4675 BT_DBG("chan %p state %s %u -> %u", chan
, state_to_string(chan
->state
),
4676 local_amp_id
, remote_amp_id
);
4678 chan
->fcs
= L2CAP_FCS_NONE
;
4680 /* Outgoing channel on AMP */
4681 if (chan
->state
== BT_CONNECT
) {
4682 if (result
== L2CAP_CR_SUCCESS
) {
4683 chan
->local_amp_id
= local_amp_id
;
4684 l2cap_send_create_chan_req(chan
, remote_amp_id
);
4686 /* Revert to BR/EDR connect */
4687 l2cap_send_conn_req(chan
);
4693 /* Incoming channel on AMP */
4694 if (__l2cap_no_conn_pending(chan
)) {
4695 struct l2cap_conn_rsp rsp
;
4697 rsp
.scid
= cpu_to_le16(chan
->dcid
);
4698 rsp
.dcid
= cpu_to_le16(chan
->scid
);
4700 if (result
== L2CAP_CR_SUCCESS
) {
4701 /* Send successful response */
4702 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_SUCCESS
);
4703 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
4705 /* Send negative response */
4706 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_NO_MEM
);
4707 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
4710 l2cap_send_cmd(chan
->conn
, chan
->ident
, L2CAP_CREATE_CHAN_RSP
,
4713 if (result
== L2CAP_CR_SUCCESS
) {
4714 __l2cap_state_change(chan
, BT_CONFIG
);
4715 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
4716 l2cap_send_cmd(chan
->conn
, l2cap_get_ident(chan
->conn
),
4718 l2cap_build_conf_req(chan
, buf
), buf
);
4719 chan
->num_conf_req
++;
4724 static void l2cap_do_move_initiate(struct l2cap_chan
*chan
, u8 local_amp_id
,
4727 l2cap_move_setup(chan
);
4728 chan
->move_id
= local_amp_id
;
4729 chan
->move_state
= L2CAP_MOVE_WAIT_RSP
;
4731 l2cap_send_move_chan_req(chan
, remote_amp_id
);
4734 static void l2cap_do_move_respond(struct l2cap_chan
*chan
, int result
)
4736 struct hci_chan
*hchan
= NULL
;
4738 /* Placeholder - get hci_chan for logical link */
4741 if (hchan
->state
== BT_CONNECTED
) {
4742 /* Logical link is ready to go */
4743 chan
->hs_hcon
= hchan
->conn
;
4744 chan
->hs_hcon
->l2cap_data
= chan
->conn
;
4745 chan
->move_state
= L2CAP_MOVE_WAIT_CONFIRM
;
4746 l2cap_send_move_chan_rsp(chan
, L2CAP_MR_SUCCESS
);
4748 l2cap_logical_cfm(chan
, hchan
, L2CAP_MR_SUCCESS
);
4750 /* Wait for logical link to be ready */
4751 chan
->move_state
= L2CAP_MOVE_WAIT_LOGICAL_CFM
;
4754 /* Logical link not available */
4755 l2cap_send_move_chan_rsp(chan
, L2CAP_MR_NOT_ALLOWED
);
4759 static void l2cap_do_move_cancel(struct l2cap_chan
*chan
, int result
)
4761 if (chan
->move_role
== L2CAP_MOVE_ROLE_RESPONDER
) {
4763 if (result
== -EINVAL
)
4764 rsp_result
= L2CAP_MR_BAD_ID
;
4766 rsp_result
= L2CAP_MR_NOT_ALLOWED
;
4768 l2cap_send_move_chan_rsp(chan
, rsp_result
);
4771 chan
->move_role
= L2CAP_MOVE_ROLE_NONE
;
4772 chan
->move_state
= L2CAP_MOVE_STABLE
;
4774 /* Restart data transmission */
4775 l2cap_ertm_send(chan
);
4778 /* Invoke with locked chan */
4779 void __l2cap_physical_cfm(struct l2cap_chan
*chan
, int result
)
4781 u8 local_amp_id
= chan
->local_amp_id
;
4782 u8 remote_amp_id
= chan
->remote_amp_id
;
4784 BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d",
4785 chan
, result
, local_amp_id
, remote_amp_id
);
4787 if (chan
->state
== BT_DISCONN
|| chan
->state
== BT_CLOSED
) {
4788 l2cap_chan_unlock(chan
);
4792 if (chan
->state
!= BT_CONNECTED
) {
4793 l2cap_do_create(chan
, result
, local_amp_id
, remote_amp_id
);
4794 } else if (result
!= L2CAP_MR_SUCCESS
) {
4795 l2cap_do_move_cancel(chan
, result
);
4797 switch (chan
->move_role
) {
4798 case L2CAP_MOVE_ROLE_INITIATOR
:
4799 l2cap_do_move_initiate(chan
, local_amp_id
,
4802 case L2CAP_MOVE_ROLE_RESPONDER
:
4803 l2cap_do_move_respond(chan
, result
);
4806 l2cap_do_move_cancel(chan
, result
);
4812 static inline int l2cap_move_channel_req(struct l2cap_conn
*conn
,
4813 struct l2cap_cmd_hdr
*cmd
,
4814 u16 cmd_len
, void *data
)
4816 struct l2cap_move_chan_req
*req
= data
;
4817 struct l2cap_move_chan_rsp rsp
;
4818 struct l2cap_chan
*chan
;
4820 u16 result
= L2CAP_MR_NOT_ALLOWED
;
4822 if (cmd_len
!= sizeof(*req
))
4825 icid
= le16_to_cpu(req
->icid
);
4827 BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid
, req
->dest_amp_id
);
4832 chan
= l2cap_get_chan_by_dcid(conn
, icid
);
4834 rsp
.icid
= cpu_to_le16(icid
);
4835 rsp
.result
= __constant_cpu_to_le16(L2CAP_MR_NOT_ALLOWED
);
4836 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_MOVE_CHAN_RSP
,
4841 chan
->ident
= cmd
->ident
;
4843 if (chan
->scid
< L2CAP_CID_DYN_START
||
4844 chan
->chan_policy
== BT_CHANNEL_POLICY_BREDR_ONLY
||
4845 (chan
->mode
!= L2CAP_MODE_ERTM
&&
4846 chan
->mode
!= L2CAP_MODE_STREAMING
)) {
4847 result
= L2CAP_MR_NOT_ALLOWED
;
4848 goto send_move_response
;
4851 if (chan
->local_amp_id
== req
->dest_amp_id
) {
4852 result
= L2CAP_MR_SAME_ID
;
4853 goto send_move_response
;
4856 if (req
->dest_amp_id
) {
4857 struct hci_dev
*hdev
;
4858 hdev
= hci_dev_get(req
->dest_amp_id
);
4859 if (!hdev
|| hdev
->dev_type
!= HCI_AMP
||
4860 !test_bit(HCI_UP
, &hdev
->flags
)) {
4864 result
= L2CAP_MR_BAD_ID
;
4865 goto send_move_response
;
4870 /* Detect a move collision. Only send a collision response
4871 * if this side has "lost", otherwise proceed with the move.
4872 * The winner has the larger bd_addr.
4874 if ((__chan_is_moving(chan
) ||
4875 chan
->move_role
!= L2CAP_MOVE_ROLE_NONE
) &&
4876 bacmp(conn
->src
, conn
->dst
) > 0) {
4877 result
= L2CAP_MR_COLLISION
;
4878 goto send_move_response
;
4881 chan
->move_role
= L2CAP_MOVE_ROLE_RESPONDER
;
4882 l2cap_move_setup(chan
);
4883 chan
->move_id
= req
->dest_amp_id
;
4886 if (!req
->dest_amp_id
) {
4887 /* Moving to BR/EDR */
4888 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
4889 chan
->move_state
= L2CAP_MOVE_WAIT_LOCAL_BUSY
;
4890 result
= L2CAP_MR_PEND
;
4892 chan
->move_state
= L2CAP_MOVE_WAIT_CONFIRM
;
4893 result
= L2CAP_MR_SUCCESS
;
4896 chan
->move_state
= L2CAP_MOVE_WAIT_PREPARE
;
4897 /* Placeholder - uncomment when amp functions are available */
4898 /*amp_accept_physical(chan, req->dest_amp_id);*/
4899 result
= L2CAP_MR_PEND
;
4903 l2cap_send_move_chan_rsp(chan
, result
);
4905 l2cap_chan_unlock(chan
);
4910 static void l2cap_move_continue(struct l2cap_conn
*conn
, u16 icid
, u16 result
)
4912 struct l2cap_chan
*chan
;
4913 struct hci_chan
*hchan
= NULL
;
4915 chan
= l2cap_get_chan_by_scid(conn
, icid
);
4917 l2cap_send_move_chan_cfm_icid(conn
, icid
);
4921 __clear_chan_timer(chan
);
4922 if (result
== L2CAP_MR_PEND
)
4923 __set_chan_timer(chan
, L2CAP_MOVE_ERTX_TIMEOUT
);
4925 switch (chan
->move_state
) {
4926 case L2CAP_MOVE_WAIT_LOGICAL_COMP
:
4927 /* Move confirm will be sent when logical link
4930 chan
->move_state
= L2CAP_MOVE_WAIT_LOGICAL_CFM
;
4932 case L2CAP_MOVE_WAIT_RSP_SUCCESS
:
4933 if (result
== L2CAP_MR_PEND
) {
4935 } else if (test_bit(CONN_LOCAL_BUSY
,
4936 &chan
->conn_state
)) {
4937 chan
->move_state
= L2CAP_MOVE_WAIT_LOCAL_BUSY
;
4939 /* Logical link is up or moving to BR/EDR,
4942 chan
->move_state
= L2CAP_MOVE_WAIT_CONFIRM_RSP
;
4943 l2cap_send_move_chan_cfm(chan
, L2CAP_MC_CONFIRMED
);
4946 case L2CAP_MOVE_WAIT_RSP
:
4948 if (result
== L2CAP_MR_SUCCESS
) {
4949 /* Remote is ready, send confirm immediately
4950 * after logical link is ready
4952 chan
->move_state
= L2CAP_MOVE_WAIT_LOGICAL_CFM
;
4954 /* Both logical link and move success
4955 * are required to confirm
4957 chan
->move_state
= L2CAP_MOVE_WAIT_LOGICAL_COMP
;
4960 /* Placeholder - get hci_chan for logical link */
4962 /* Logical link not available */
4963 l2cap_send_move_chan_cfm(chan
, L2CAP_MC_UNCONFIRMED
);
4967 /* If the logical link is not yet connected, do not
4968 * send confirmation.
4970 if (hchan
->state
!= BT_CONNECTED
)
4973 /* Logical link is already ready to go */
4975 chan
->hs_hcon
= hchan
->conn
;
4976 chan
->hs_hcon
->l2cap_data
= chan
->conn
;
4978 if (result
== L2CAP_MR_SUCCESS
) {
4979 /* Can confirm now */
4980 l2cap_send_move_chan_cfm(chan
, L2CAP_MC_CONFIRMED
);
4982 /* Now only need move success
4985 chan
->move_state
= L2CAP_MOVE_WAIT_RSP_SUCCESS
;
4988 l2cap_logical_cfm(chan
, hchan
, L2CAP_MR_SUCCESS
);
4991 /* Any other amp move state means the move failed. */
4992 chan
->move_id
= chan
->local_amp_id
;
4993 l2cap_move_done(chan
);
4994 l2cap_send_move_chan_cfm(chan
, L2CAP_MC_UNCONFIRMED
);
4997 l2cap_chan_unlock(chan
);
5000 static void l2cap_move_fail(struct l2cap_conn
*conn
, u8 ident
, u16 icid
,
5003 struct l2cap_chan
*chan
;
5005 chan
= l2cap_get_chan_by_ident(conn
, ident
);
5007 /* Could not locate channel, icid is best guess */
5008 l2cap_send_move_chan_cfm_icid(conn
, icid
);
5012 __clear_chan_timer(chan
);
5014 if (chan
->move_role
== L2CAP_MOVE_ROLE_INITIATOR
) {
5015 if (result
== L2CAP_MR_COLLISION
) {
5016 chan
->move_role
= L2CAP_MOVE_ROLE_RESPONDER
;
5018 /* Cleanup - cancel move */
5019 chan
->move_id
= chan
->local_amp_id
;
5020 l2cap_move_done(chan
);
5024 l2cap_send_move_chan_cfm(chan
, L2CAP_MC_UNCONFIRMED
);
5026 l2cap_chan_unlock(chan
);
5029 static int l2cap_move_channel_rsp(struct l2cap_conn
*conn
,
5030 struct l2cap_cmd_hdr
*cmd
,
5031 u16 cmd_len
, void *data
)
5033 struct l2cap_move_chan_rsp
*rsp
= data
;
5036 if (cmd_len
!= sizeof(*rsp
))
5039 icid
= le16_to_cpu(rsp
->icid
);
5040 result
= le16_to_cpu(rsp
->result
);
5042 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid
, result
);
5044 if (result
== L2CAP_MR_SUCCESS
|| result
== L2CAP_MR_PEND
)
5045 l2cap_move_continue(conn
, icid
, result
);
5047 l2cap_move_fail(conn
, cmd
->ident
, icid
, result
);
5052 static int l2cap_move_channel_confirm(struct l2cap_conn
*conn
,
5053 struct l2cap_cmd_hdr
*cmd
,
5054 u16 cmd_len
, void *data
)
5056 struct l2cap_move_chan_cfm
*cfm
= data
;
5057 struct l2cap_chan
*chan
;
5060 if (cmd_len
!= sizeof(*cfm
))
5063 icid
= le16_to_cpu(cfm
->icid
);
5064 result
= le16_to_cpu(cfm
->result
);
5066 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid
, result
);
5068 chan
= l2cap_get_chan_by_dcid(conn
, icid
);
5070 /* Spec requires a response even if the icid was not found */
5071 l2cap_send_move_chan_cfm_rsp(conn
, cmd
->ident
, icid
);
5075 if (chan
->move_state
== L2CAP_MOVE_WAIT_CONFIRM
) {
5076 if (result
== L2CAP_MC_CONFIRMED
) {
5077 chan
->local_amp_id
= chan
->move_id
;
5078 if (!chan
->local_amp_id
)
5079 __release_logical_link(chan
);
5081 chan
->move_id
= chan
->local_amp_id
;
5084 l2cap_move_done(chan
);
5087 l2cap_send_move_chan_cfm_rsp(conn
, cmd
->ident
, icid
);
5089 l2cap_chan_unlock(chan
);
5094 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn
*conn
,
5095 struct l2cap_cmd_hdr
*cmd
,
5096 u16 cmd_len
, void *data
)
5098 struct l2cap_move_chan_cfm_rsp
*rsp
= data
;
5099 struct l2cap_chan
*chan
;
5102 if (cmd_len
!= sizeof(*rsp
))
5105 icid
= le16_to_cpu(rsp
->icid
);
5107 BT_DBG("icid 0x%4.4x", icid
);
5109 chan
= l2cap_get_chan_by_scid(conn
, icid
);
5113 __clear_chan_timer(chan
);
5115 if (chan
->move_state
== L2CAP_MOVE_WAIT_CONFIRM_RSP
) {
5116 chan
->local_amp_id
= chan
->move_id
;
5118 if (!chan
->local_amp_id
&& chan
->hs_hchan
)
5119 __release_logical_link(chan
);
5121 l2cap_move_done(chan
);
5124 l2cap_chan_unlock(chan
);
5129 static inline int l2cap_check_conn_param(u16 min
, u16 max
, u16 latency
,
5134 if (min
> max
|| min
< 6 || max
> 3200)
5137 if (to_multiplier
< 10 || to_multiplier
> 3200)
5140 if (max
>= to_multiplier
* 8)
5143 max_latency
= (to_multiplier
* 8 / max
) - 1;
5144 if (latency
> 499 || latency
> max_latency
)
5150 static inline int l2cap_conn_param_update_req(struct l2cap_conn
*conn
,
5151 struct l2cap_cmd_hdr
*cmd
,
5154 struct hci_conn
*hcon
= conn
->hcon
;
5155 struct l2cap_conn_param_update_req
*req
;
5156 struct l2cap_conn_param_update_rsp rsp
;
5157 u16 min
, max
, latency
, to_multiplier
, cmd_len
;
5160 if (!(hcon
->link_mode
& HCI_LM_MASTER
))
5163 cmd_len
= __le16_to_cpu(cmd
->len
);
5164 if (cmd_len
!= sizeof(struct l2cap_conn_param_update_req
))
5167 req
= (struct l2cap_conn_param_update_req
*) data
;
5168 min
= __le16_to_cpu(req
->min
);
5169 max
= __le16_to_cpu(req
->max
);
5170 latency
= __le16_to_cpu(req
->latency
);
5171 to_multiplier
= __le16_to_cpu(req
->to_multiplier
);
5173 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
5174 min
, max
, latency
, to_multiplier
);
5176 memset(&rsp
, 0, sizeof(rsp
));
5178 err
= l2cap_check_conn_param(min
, max
, latency
, to_multiplier
);
5180 rsp
.result
= __constant_cpu_to_le16(L2CAP_CONN_PARAM_REJECTED
);
5182 rsp
.result
= __constant_cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED
);
5184 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_PARAM_UPDATE_RSP
,
5188 hci_le_conn_update(hcon
, min
, max
, latency
, to_multiplier
);
5193 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn
*conn
,
5194 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
5199 switch (cmd
->code
) {
5200 case L2CAP_COMMAND_REJ
:
5201 l2cap_command_rej(conn
, cmd
, cmd_len
, data
);
5204 case L2CAP_CONN_REQ
:
5205 err
= l2cap_connect_req(conn
, cmd
, cmd_len
, data
);
5208 case L2CAP_CONN_RSP
:
5209 case L2CAP_CREATE_CHAN_RSP
:
5210 err
= l2cap_connect_create_rsp(conn
, cmd
, cmd_len
, data
);
5213 case L2CAP_CONF_REQ
:
5214 err
= l2cap_config_req(conn
, cmd
, cmd_len
, data
);
5217 case L2CAP_CONF_RSP
:
5218 err
= l2cap_config_rsp(conn
, cmd
, cmd_len
, data
);
5221 case L2CAP_DISCONN_REQ
:
5222 err
= l2cap_disconnect_req(conn
, cmd
, cmd_len
, data
);
5225 case L2CAP_DISCONN_RSP
:
5226 err
= l2cap_disconnect_rsp(conn
, cmd
, cmd_len
, data
);
5229 case L2CAP_ECHO_REQ
:
5230 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_ECHO_RSP
, cmd_len
, data
);
5233 case L2CAP_ECHO_RSP
:
5236 case L2CAP_INFO_REQ
:
5237 err
= l2cap_information_req(conn
, cmd
, cmd_len
, data
);
5240 case L2CAP_INFO_RSP
:
5241 err
= l2cap_information_rsp(conn
, cmd
, cmd_len
, data
);
5244 case L2CAP_CREATE_CHAN_REQ
:
5245 err
= l2cap_create_channel_req(conn
, cmd
, cmd_len
, data
);
5248 case L2CAP_MOVE_CHAN_REQ
:
5249 err
= l2cap_move_channel_req(conn
, cmd
, cmd_len
, data
);
5252 case L2CAP_MOVE_CHAN_RSP
:
5253 err
= l2cap_move_channel_rsp(conn
, cmd
, cmd_len
, data
);
5256 case L2CAP_MOVE_CHAN_CFM
:
5257 err
= l2cap_move_channel_confirm(conn
, cmd
, cmd_len
, data
);
5260 case L2CAP_MOVE_CHAN_CFM_RSP
:
5261 err
= l2cap_move_channel_confirm_rsp(conn
, cmd
, cmd_len
, data
);
5265 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd
->code
);
5273 static inline int l2cap_le_sig_cmd(struct l2cap_conn
*conn
,
5274 struct l2cap_cmd_hdr
*cmd
, u8
*data
)
5276 switch (cmd
->code
) {
5277 case L2CAP_COMMAND_REJ
:
5280 case L2CAP_CONN_PARAM_UPDATE_REQ
:
5281 return l2cap_conn_param_update_req(conn
, cmd
, data
);
5283 case L2CAP_CONN_PARAM_UPDATE_RSP
:
5287 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd
->code
);
5292 static inline void l2cap_le_sig_channel(struct l2cap_conn
*conn
,
5293 struct sk_buff
*skb
)
5295 u8
*data
= skb
->data
;
5297 struct l2cap_cmd_hdr cmd
;
5300 l2cap_raw_recv(conn
, skb
);
5302 while (len
>= L2CAP_CMD_HDR_SIZE
) {
5304 memcpy(&cmd
, data
, L2CAP_CMD_HDR_SIZE
);
5305 data
+= L2CAP_CMD_HDR_SIZE
;
5306 len
-= L2CAP_CMD_HDR_SIZE
;
5308 cmd_len
= le16_to_cpu(cmd
.len
);
5310 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd
.code
, cmd_len
,
5313 if (cmd_len
> len
|| !cmd
.ident
) {
5314 BT_DBG("corrupted command");
5318 err
= l2cap_le_sig_cmd(conn
, &cmd
, data
);
5320 struct l2cap_cmd_rej_unk rej
;
5322 BT_ERR("Wrong link type (%d)", err
);
5324 /* FIXME: Map err to a valid reason */
5325 rej
.reason
= __constant_cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD
);
5326 l2cap_send_cmd(conn
, cmd
.ident
, L2CAP_COMMAND_REJ
,
5337 static inline void l2cap_sig_channel(struct l2cap_conn
*conn
,
5338 struct sk_buff
*skb
)
5340 u8
*data
= skb
->data
;
5342 struct l2cap_cmd_hdr cmd
;
5345 l2cap_raw_recv(conn
, skb
);
5347 while (len
>= L2CAP_CMD_HDR_SIZE
) {
5349 memcpy(&cmd
, data
, L2CAP_CMD_HDR_SIZE
);
5350 data
+= L2CAP_CMD_HDR_SIZE
;
5351 len
-= L2CAP_CMD_HDR_SIZE
;
5353 cmd_len
= le16_to_cpu(cmd
.len
);
5355 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd
.code
, cmd_len
,
5358 if (cmd_len
> len
|| !cmd
.ident
) {
5359 BT_DBG("corrupted command");
5363 err
= l2cap_bredr_sig_cmd(conn
, &cmd
, cmd_len
, data
);
5365 struct l2cap_cmd_rej_unk rej
;
5367 BT_ERR("Wrong link type (%d)", err
);
5369 /* FIXME: Map err to a valid reason */
5370 rej
.reason
= __constant_cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD
);
5371 l2cap_send_cmd(conn
, cmd
.ident
, L2CAP_COMMAND_REJ
,
5382 static int l2cap_check_fcs(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
5384 u16 our_fcs
, rcv_fcs
;
5387 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
5388 hdr_size
= L2CAP_EXT_HDR_SIZE
;
5390 hdr_size
= L2CAP_ENH_HDR_SIZE
;
5392 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
5393 skb_trim(skb
, skb
->len
- L2CAP_FCS_SIZE
);
5394 rcv_fcs
= get_unaligned_le16(skb
->data
+ skb
->len
);
5395 our_fcs
= crc16(0, skb
->data
- hdr_size
, skb
->len
+ hdr_size
);
5397 if (our_fcs
!= rcv_fcs
)
5403 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan
*chan
)
5405 struct l2cap_ctrl control
;
5407 BT_DBG("chan %p", chan
);
5409 memset(&control
, 0, sizeof(control
));
5412 control
.reqseq
= chan
->buffer_seq
;
5413 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
5415 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
5416 control
.super
= L2CAP_SUPER_RNR
;
5417 l2cap_send_sframe(chan
, &control
);
5420 if (test_and_clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
) &&
5421 chan
->unacked_frames
> 0)
5422 __set_retrans_timer(chan
);
5424 /* Send pending iframes */
5425 l2cap_ertm_send(chan
);
5427 if (!test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
) &&
5428 test_bit(CONN_SEND_FBIT
, &chan
->conn_state
)) {
5429 /* F-bit wasn't sent in an s-frame or i-frame yet, so
5432 control
.super
= L2CAP_SUPER_RR
;
5433 l2cap_send_sframe(chan
, &control
);
5437 static void append_skb_frag(struct sk_buff
*skb
, struct sk_buff
*new_frag
,
5438 struct sk_buff
**last_frag
)
5440 /* skb->len reflects data in skb as well as all fragments
5441 * skb->data_len reflects only data in fragments
5443 if (!skb_has_frag_list(skb
))
5444 skb_shinfo(skb
)->frag_list
= new_frag
;
5446 new_frag
->next
= NULL
;
5448 (*last_frag
)->next
= new_frag
;
5449 *last_frag
= new_frag
;
5451 skb
->len
+= new_frag
->len
;
5452 skb
->data_len
+= new_frag
->len
;
5453 skb
->truesize
+= new_frag
->truesize
;
5456 static int l2cap_reassemble_sdu(struct l2cap_chan
*chan
, struct sk_buff
*skb
,
5457 struct l2cap_ctrl
*control
)
5461 switch (control
->sar
) {
5462 case L2CAP_SAR_UNSEGMENTED
:
5466 err
= chan
->ops
->recv(chan
, skb
);
5469 case L2CAP_SAR_START
:
5473 chan
->sdu_len
= get_unaligned_le16(skb
->data
);
5474 skb_pull(skb
, L2CAP_SDULEN_SIZE
);
5476 if (chan
->sdu_len
> chan
->imtu
) {
5481 if (skb
->len
>= chan
->sdu_len
)
5485 chan
->sdu_last_frag
= skb
;
5491 case L2CAP_SAR_CONTINUE
:
5495 append_skb_frag(chan
->sdu
, skb
,
5496 &chan
->sdu_last_frag
);
5499 if (chan
->sdu
->len
>= chan
->sdu_len
)
5509 append_skb_frag(chan
->sdu
, skb
,
5510 &chan
->sdu_last_frag
);
5513 if (chan
->sdu
->len
!= chan
->sdu_len
)
5516 err
= chan
->ops
->recv(chan
, chan
->sdu
);
5519 /* Reassembly complete */
5521 chan
->sdu_last_frag
= NULL
;
5529 kfree_skb(chan
->sdu
);
5531 chan
->sdu_last_frag
= NULL
;
5538 static int l2cap_resegment(struct l2cap_chan
*chan
)
5544 void l2cap_chan_busy(struct l2cap_chan
*chan
, int busy
)
5548 if (chan
->mode
!= L2CAP_MODE_ERTM
)
5551 event
= busy
? L2CAP_EV_LOCAL_BUSY_DETECTED
: L2CAP_EV_LOCAL_BUSY_CLEAR
;
5552 l2cap_tx(chan
, NULL
, NULL
, event
);
5555 static int l2cap_rx_queued_iframes(struct l2cap_chan
*chan
)
5558 /* Pass sequential frames to l2cap_reassemble_sdu()
5559 * until a gap is encountered.
5562 BT_DBG("chan %p", chan
);
5564 while (!test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
5565 struct sk_buff
*skb
;
5566 BT_DBG("Searching for skb with txseq %d (queue len %d)",
5567 chan
->buffer_seq
, skb_queue_len(&chan
->srej_q
));
5569 skb
= l2cap_ertm_seq_in_queue(&chan
->srej_q
, chan
->buffer_seq
);
5574 skb_unlink(skb
, &chan
->srej_q
);
5575 chan
->buffer_seq
= __next_seq(chan
, chan
->buffer_seq
);
5576 err
= l2cap_reassemble_sdu(chan
, skb
, &bt_cb(skb
)->control
);
5581 if (skb_queue_empty(&chan
->srej_q
)) {
5582 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
5583 l2cap_send_ack(chan
);
5589 static void l2cap_handle_srej(struct l2cap_chan
*chan
,
5590 struct l2cap_ctrl
*control
)
5592 struct sk_buff
*skb
;
5594 BT_DBG("chan %p, control %p", chan
, control
);
5596 if (control
->reqseq
== chan
->next_tx_seq
) {
5597 BT_DBG("Invalid reqseq %d, disconnecting", control
->reqseq
);
5598 l2cap_send_disconn_req(chan
, ECONNRESET
);
5602 skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, control
->reqseq
);
5605 BT_DBG("Seq %d not available for retransmission",
5610 if (chan
->max_tx
!= 0 && bt_cb(skb
)->control
.retries
>= chan
->max_tx
) {
5611 BT_DBG("Retry limit exceeded (%d)", chan
->max_tx
);
5612 l2cap_send_disconn_req(chan
, ECONNRESET
);
5616 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
5618 if (control
->poll
) {
5619 l2cap_pass_to_tx(chan
, control
);
5621 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
5622 l2cap_retransmit(chan
, control
);
5623 l2cap_ertm_send(chan
);
5625 if (chan
->tx_state
== L2CAP_TX_STATE_WAIT_F
) {
5626 set_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
5627 chan
->srej_save_reqseq
= control
->reqseq
;
5630 l2cap_pass_to_tx_fbit(chan
, control
);
5632 if (control
->final
) {
5633 if (chan
->srej_save_reqseq
!= control
->reqseq
||
5634 !test_and_clear_bit(CONN_SREJ_ACT
,
5636 l2cap_retransmit(chan
, control
);
5638 l2cap_retransmit(chan
, control
);
5639 if (chan
->tx_state
== L2CAP_TX_STATE_WAIT_F
) {
5640 set_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
5641 chan
->srej_save_reqseq
= control
->reqseq
;
5647 static void l2cap_handle_rej(struct l2cap_chan
*chan
,
5648 struct l2cap_ctrl
*control
)
5650 struct sk_buff
*skb
;
5652 BT_DBG("chan %p, control %p", chan
, control
);
5654 if (control
->reqseq
== chan
->next_tx_seq
) {
5655 BT_DBG("Invalid reqseq %d, disconnecting", control
->reqseq
);
5656 l2cap_send_disconn_req(chan
, ECONNRESET
);
5660 skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, control
->reqseq
);
5662 if (chan
->max_tx
&& skb
&&
5663 bt_cb(skb
)->control
.retries
>= chan
->max_tx
) {
5664 BT_DBG("Retry limit exceeded (%d)", chan
->max_tx
);
5665 l2cap_send_disconn_req(chan
, ECONNRESET
);
5669 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
5671 l2cap_pass_to_tx(chan
, control
);
5673 if (control
->final
) {
5674 if (!test_and_clear_bit(CONN_REJ_ACT
, &chan
->conn_state
))
5675 l2cap_retransmit_all(chan
, control
);
5677 l2cap_retransmit_all(chan
, control
);
5678 l2cap_ertm_send(chan
);
5679 if (chan
->tx_state
== L2CAP_TX_STATE_WAIT_F
)
5680 set_bit(CONN_REJ_ACT
, &chan
->conn_state
);
5684 static u8
l2cap_classify_txseq(struct l2cap_chan
*chan
, u16 txseq
)
5686 BT_DBG("chan %p, txseq %d", chan
, txseq
);
5688 BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan
->last_acked_seq
,
5689 chan
->expected_tx_seq
);
5691 if (chan
->rx_state
== L2CAP_RX_STATE_SREJ_SENT
) {
5692 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) >=
5694 /* See notes below regarding "double poll" and
5697 if (chan
->tx_win
<= ((chan
->tx_win_max
+ 1) >> 1)) {
5698 BT_DBG("Invalid/Ignore - after SREJ");
5699 return L2CAP_TXSEQ_INVALID_IGNORE
;
5701 BT_DBG("Invalid - in window after SREJ sent");
5702 return L2CAP_TXSEQ_INVALID
;
5706 if (chan
->srej_list
.head
== txseq
) {
5707 BT_DBG("Expected SREJ");
5708 return L2CAP_TXSEQ_EXPECTED_SREJ
;
5711 if (l2cap_ertm_seq_in_queue(&chan
->srej_q
, txseq
)) {
5712 BT_DBG("Duplicate SREJ - txseq already stored");
5713 return L2CAP_TXSEQ_DUPLICATE_SREJ
;
5716 if (l2cap_seq_list_contains(&chan
->srej_list
, txseq
)) {
5717 BT_DBG("Unexpected SREJ - not requested");
5718 return L2CAP_TXSEQ_UNEXPECTED_SREJ
;
5722 if (chan
->expected_tx_seq
== txseq
) {
5723 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) >=
5725 BT_DBG("Invalid - txseq outside tx window");
5726 return L2CAP_TXSEQ_INVALID
;
5729 return L2CAP_TXSEQ_EXPECTED
;
5733 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) <
5734 __seq_offset(chan
, chan
->expected_tx_seq
, chan
->last_acked_seq
)) {
5735 BT_DBG("Duplicate - expected_tx_seq later than txseq");
5736 return L2CAP_TXSEQ_DUPLICATE
;
5739 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) >= chan
->tx_win
) {
5740 /* A source of invalid packets is a "double poll" condition,
5741 * where delays cause us to send multiple poll packets. If
5742 * the remote stack receives and processes both polls,
5743 * sequence numbers can wrap around in such a way that a
5744 * resent frame has a sequence number that looks like new data
5745 * with a sequence gap. This would trigger an erroneous SREJ
5748 * Fortunately, this is impossible with a tx window that's
5749 * less than half of the maximum sequence number, which allows
5750 * invalid frames to be safely ignored.
5752 * With tx window sizes greater than half of the tx window
5753 * maximum, the frame is invalid and cannot be ignored. This
5754 * causes a disconnect.
5757 if (chan
->tx_win
<= ((chan
->tx_win_max
+ 1) >> 1)) {
5758 BT_DBG("Invalid/Ignore - txseq outside tx window");
5759 return L2CAP_TXSEQ_INVALID_IGNORE
;
5761 BT_DBG("Invalid - txseq outside tx window");
5762 return L2CAP_TXSEQ_INVALID
;
5765 BT_DBG("Unexpected - txseq indicates missing frames");
5766 return L2CAP_TXSEQ_UNEXPECTED
;
5770 static int l2cap_rx_state_recv(struct l2cap_chan
*chan
,
5771 struct l2cap_ctrl
*control
,
5772 struct sk_buff
*skb
, u8 event
)
5775 bool skb_in_use
= 0;
5777 BT_DBG("chan %p, control %p, skb %p, event %d", chan
, control
, skb
,
5781 case L2CAP_EV_RECV_IFRAME
:
5782 switch (l2cap_classify_txseq(chan
, control
->txseq
)) {
5783 case L2CAP_TXSEQ_EXPECTED
:
5784 l2cap_pass_to_tx(chan
, control
);
5786 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
5787 BT_DBG("Busy, discarding expected seq %d",
5792 chan
->expected_tx_seq
= __next_seq(chan
,
5795 chan
->buffer_seq
= chan
->expected_tx_seq
;
5798 err
= l2cap_reassemble_sdu(chan
, skb
, control
);
5802 if (control
->final
) {
5803 if (!test_and_clear_bit(CONN_REJ_ACT
,
5804 &chan
->conn_state
)) {
5806 l2cap_retransmit_all(chan
, control
);
5807 l2cap_ertm_send(chan
);
5811 if (!test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
))
5812 l2cap_send_ack(chan
);
5814 case L2CAP_TXSEQ_UNEXPECTED
:
5815 l2cap_pass_to_tx(chan
, control
);
5817 /* Can't issue SREJ frames in the local busy state.
5818 * Drop this frame, it will be seen as missing
5819 * when local busy is exited.
5821 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
5822 BT_DBG("Busy, discarding unexpected seq %d",
5827 /* There was a gap in the sequence, so an SREJ
5828 * must be sent for each missing frame. The
5829 * current frame is stored for later use.
5831 skb_queue_tail(&chan
->srej_q
, skb
);
5833 BT_DBG("Queued %p (queue len %d)", skb
,
5834 skb_queue_len(&chan
->srej_q
));
5836 clear_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
5837 l2cap_seq_list_clear(&chan
->srej_list
);
5838 l2cap_send_srej(chan
, control
->txseq
);
5840 chan
->rx_state
= L2CAP_RX_STATE_SREJ_SENT
;
5842 case L2CAP_TXSEQ_DUPLICATE
:
5843 l2cap_pass_to_tx(chan
, control
);
5845 case L2CAP_TXSEQ_INVALID_IGNORE
:
5847 case L2CAP_TXSEQ_INVALID
:
5849 l2cap_send_disconn_req(chan
, ECONNRESET
);
5853 case L2CAP_EV_RECV_RR
:
5854 l2cap_pass_to_tx(chan
, control
);
5855 if (control
->final
) {
5856 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
5858 if (!test_and_clear_bit(CONN_REJ_ACT
, &chan
->conn_state
) &&
5859 !__chan_is_moving(chan
)) {
5861 l2cap_retransmit_all(chan
, control
);
5864 l2cap_ertm_send(chan
);
5865 } else if (control
->poll
) {
5866 l2cap_send_i_or_rr_or_rnr(chan
);
5868 if (test_and_clear_bit(CONN_REMOTE_BUSY
,
5869 &chan
->conn_state
) &&
5870 chan
->unacked_frames
)
5871 __set_retrans_timer(chan
);
5873 l2cap_ertm_send(chan
);
5876 case L2CAP_EV_RECV_RNR
:
5877 set_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
5878 l2cap_pass_to_tx(chan
, control
);
5879 if (control
&& control
->poll
) {
5880 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
5881 l2cap_send_rr_or_rnr(chan
, 0);
5883 __clear_retrans_timer(chan
);
5884 l2cap_seq_list_clear(&chan
->retrans_list
);
5886 case L2CAP_EV_RECV_REJ
:
5887 l2cap_handle_rej(chan
, control
);
5889 case L2CAP_EV_RECV_SREJ
:
5890 l2cap_handle_srej(chan
, control
);
5896 if (skb
&& !skb_in_use
) {
5897 BT_DBG("Freeing %p", skb
);
5904 static int l2cap_rx_state_srej_sent(struct l2cap_chan
*chan
,
5905 struct l2cap_ctrl
*control
,
5906 struct sk_buff
*skb
, u8 event
)
5909 u16 txseq
= control
->txseq
;
5910 bool skb_in_use
= 0;
5912 BT_DBG("chan %p, control %p, skb %p, event %d", chan
, control
, skb
,
5916 case L2CAP_EV_RECV_IFRAME
:
5917 switch (l2cap_classify_txseq(chan
, txseq
)) {
5918 case L2CAP_TXSEQ_EXPECTED
:
5919 /* Keep frame for reassembly later */
5920 l2cap_pass_to_tx(chan
, control
);
5921 skb_queue_tail(&chan
->srej_q
, skb
);
5923 BT_DBG("Queued %p (queue len %d)", skb
,
5924 skb_queue_len(&chan
->srej_q
));
5926 chan
->expected_tx_seq
= __next_seq(chan
, txseq
);
5928 case L2CAP_TXSEQ_EXPECTED_SREJ
:
5929 l2cap_seq_list_pop(&chan
->srej_list
);
5931 l2cap_pass_to_tx(chan
, control
);
5932 skb_queue_tail(&chan
->srej_q
, skb
);
5934 BT_DBG("Queued %p (queue len %d)", skb
,
5935 skb_queue_len(&chan
->srej_q
));
5937 err
= l2cap_rx_queued_iframes(chan
);
5942 case L2CAP_TXSEQ_UNEXPECTED
:
5943 /* Got a frame that can't be reassembled yet.
5944 * Save it for later, and send SREJs to cover
5945 * the missing frames.
5947 skb_queue_tail(&chan
->srej_q
, skb
);
5949 BT_DBG("Queued %p (queue len %d)", skb
,
5950 skb_queue_len(&chan
->srej_q
));
5952 l2cap_pass_to_tx(chan
, control
);
5953 l2cap_send_srej(chan
, control
->txseq
);
5955 case L2CAP_TXSEQ_UNEXPECTED_SREJ
:
5956 /* This frame was requested with an SREJ, but
5957 * some expected retransmitted frames are
5958 * missing. Request retransmission of missing
5961 skb_queue_tail(&chan
->srej_q
, skb
);
5963 BT_DBG("Queued %p (queue len %d)", skb
,
5964 skb_queue_len(&chan
->srej_q
));
5966 l2cap_pass_to_tx(chan
, control
);
5967 l2cap_send_srej_list(chan
, control
->txseq
);
5969 case L2CAP_TXSEQ_DUPLICATE_SREJ
:
5970 /* We've already queued this frame. Drop this copy. */
5971 l2cap_pass_to_tx(chan
, control
);
5973 case L2CAP_TXSEQ_DUPLICATE
:
5974 /* Expecting a later sequence number, so this frame
5975 * was already received. Ignore it completely.
5978 case L2CAP_TXSEQ_INVALID_IGNORE
:
5980 case L2CAP_TXSEQ_INVALID
:
5982 l2cap_send_disconn_req(chan
, ECONNRESET
);
5986 case L2CAP_EV_RECV_RR
:
5987 l2cap_pass_to_tx(chan
, control
);
5988 if (control
->final
) {
5989 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
5991 if (!test_and_clear_bit(CONN_REJ_ACT
,
5992 &chan
->conn_state
)) {
5994 l2cap_retransmit_all(chan
, control
);
5997 l2cap_ertm_send(chan
);
5998 } else if (control
->poll
) {
5999 if (test_and_clear_bit(CONN_REMOTE_BUSY
,
6000 &chan
->conn_state
) &&
6001 chan
->unacked_frames
) {
6002 __set_retrans_timer(chan
);
6005 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
6006 l2cap_send_srej_tail(chan
);
6008 if (test_and_clear_bit(CONN_REMOTE_BUSY
,
6009 &chan
->conn_state
) &&
6010 chan
->unacked_frames
)
6011 __set_retrans_timer(chan
);
6013 l2cap_send_ack(chan
);
6016 case L2CAP_EV_RECV_RNR
:
6017 set_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
6018 l2cap_pass_to_tx(chan
, control
);
6019 if (control
->poll
) {
6020 l2cap_send_srej_tail(chan
);
6022 struct l2cap_ctrl rr_control
;
6023 memset(&rr_control
, 0, sizeof(rr_control
));
6024 rr_control
.sframe
= 1;
6025 rr_control
.super
= L2CAP_SUPER_RR
;
6026 rr_control
.reqseq
= chan
->buffer_seq
;
6027 l2cap_send_sframe(chan
, &rr_control
);
6031 case L2CAP_EV_RECV_REJ
:
6032 l2cap_handle_rej(chan
, control
);
6034 case L2CAP_EV_RECV_SREJ
:
6035 l2cap_handle_srej(chan
, control
);
6039 if (skb
&& !skb_in_use
) {
6040 BT_DBG("Freeing %p", skb
);
6047 static int l2cap_finish_move(struct l2cap_chan
*chan
)
6049 BT_DBG("chan %p", chan
);
6051 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
6054 chan
->conn
->mtu
= chan
->hs_hcon
->hdev
->block_mtu
;
6056 chan
->conn
->mtu
= chan
->conn
->hcon
->hdev
->acl_mtu
;
6058 return l2cap_resegment(chan
);
6061 static int l2cap_rx_state_wait_p(struct l2cap_chan
*chan
,
6062 struct l2cap_ctrl
*control
,
6063 struct sk_buff
*skb
, u8 event
)
6067 BT_DBG("chan %p, control %p, skb %p, event %d", chan
, control
, skb
,
6073 l2cap_process_reqseq(chan
, control
->reqseq
);
6075 if (!skb_queue_empty(&chan
->tx_q
))
6076 chan
->tx_send_head
= skb_peek(&chan
->tx_q
);
6078 chan
->tx_send_head
= NULL
;
6080 /* Rewind next_tx_seq to the point expected
6083 chan
->next_tx_seq
= control
->reqseq
;
6084 chan
->unacked_frames
= 0;
6086 err
= l2cap_finish_move(chan
);
6090 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
6091 l2cap_send_i_or_rr_or_rnr(chan
);
6093 if (event
== L2CAP_EV_RECV_IFRAME
)
6096 return l2cap_rx_state_recv(chan
, control
, NULL
, event
);
6099 static int l2cap_rx_state_wait_f(struct l2cap_chan
*chan
,
6100 struct l2cap_ctrl
*control
,
6101 struct sk_buff
*skb
, u8 event
)
6105 if (!control
->final
)
6108 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
6110 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
6111 l2cap_process_reqseq(chan
, control
->reqseq
);
6113 if (!skb_queue_empty(&chan
->tx_q
))
6114 chan
->tx_send_head
= skb_peek(&chan
->tx_q
);
6116 chan
->tx_send_head
= NULL
;
6118 /* Rewind next_tx_seq to the point expected
6121 chan
->next_tx_seq
= control
->reqseq
;
6122 chan
->unacked_frames
= 0;
6125 chan
->conn
->mtu
= chan
->hs_hcon
->hdev
->block_mtu
;
6127 chan
->conn
->mtu
= chan
->conn
->hcon
->hdev
->acl_mtu
;
6129 err
= l2cap_resegment(chan
);
6132 err
= l2cap_rx_state_recv(chan
, control
, skb
, event
);
6137 static bool __valid_reqseq(struct l2cap_chan
*chan
, u16 reqseq
)
6139 /* Make sure reqseq is for a packet that has been sent but not acked */
6142 unacked
= __seq_offset(chan
, chan
->next_tx_seq
, chan
->expected_ack_seq
);
6143 return __seq_offset(chan
, chan
->next_tx_seq
, reqseq
) <= unacked
;
6146 static int l2cap_rx(struct l2cap_chan
*chan
, struct l2cap_ctrl
*control
,
6147 struct sk_buff
*skb
, u8 event
)
6151 BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan
,
6152 control
, skb
, event
, chan
->rx_state
);
6154 if (__valid_reqseq(chan
, control
->reqseq
)) {
6155 switch (chan
->rx_state
) {
6156 case L2CAP_RX_STATE_RECV
:
6157 err
= l2cap_rx_state_recv(chan
, control
, skb
, event
);
6159 case L2CAP_RX_STATE_SREJ_SENT
:
6160 err
= l2cap_rx_state_srej_sent(chan
, control
, skb
,
6163 case L2CAP_RX_STATE_WAIT_P
:
6164 err
= l2cap_rx_state_wait_p(chan
, control
, skb
, event
);
6166 case L2CAP_RX_STATE_WAIT_F
:
6167 err
= l2cap_rx_state_wait_f(chan
, control
, skb
, event
);
6174 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
6175 control
->reqseq
, chan
->next_tx_seq
,
6176 chan
->expected_ack_seq
);
6177 l2cap_send_disconn_req(chan
, ECONNRESET
);
6183 static int l2cap_stream_rx(struct l2cap_chan
*chan
, struct l2cap_ctrl
*control
,
6184 struct sk_buff
*skb
)
6188 BT_DBG("chan %p, control %p, skb %p, state %d", chan
, control
, skb
,
6191 if (l2cap_classify_txseq(chan
, control
->txseq
) ==
6192 L2CAP_TXSEQ_EXPECTED
) {
6193 l2cap_pass_to_tx(chan
, control
);
6195 BT_DBG("buffer_seq %d->%d", chan
->buffer_seq
,
6196 __next_seq(chan
, chan
->buffer_seq
));
6198 chan
->buffer_seq
= __next_seq(chan
, chan
->buffer_seq
);
6200 l2cap_reassemble_sdu(chan
, skb
, control
);
6203 kfree_skb(chan
->sdu
);
6206 chan
->sdu_last_frag
= NULL
;
6210 BT_DBG("Freeing %p", skb
);
6215 chan
->last_acked_seq
= control
->txseq
;
6216 chan
->expected_tx_seq
= __next_seq(chan
, control
->txseq
);
6221 static int l2cap_data_rcv(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
6223 struct l2cap_ctrl
*control
= &bt_cb(skb
)->control
;
6227 __unpack_control(chan
, skb
);
6232 * We can just drop the corrupted I-frame here.
6233 * Receiver will miss it and start proper recovery
6234 * procedures and ask for retransmission.
6236 if (l2cap_check_fcs(chan
, skb
))
6239 if (!control
->sframe
&& control
->sar
== L2CAP_SAR_START
)
6240 len
-= L2CAP_SDULEN_SIZE
;
6242 if (chan
->fcs
== L2CAP_FCS_CRC16
)
6243 len
-= L2CAP_FCS_SIZE
;
6245 if (len
> chan
->mps
) {
6246 l2cap_send_disconn_req(chan
, ECONNRESET
);
6250 if (!control
->sframe
) {
6253 BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
6254 control
->sar
, control
->reqseq
, control
->final
,
6257 /* Validate F-bit - F=0 always valid, F=1 only
6258 * valid in TX WAIT_F
6260 if (control
->final
&& chan
->tx_state
!= L2CAP_TX_STATE_WAIT_F
)
6263 if (chan
->mode
!= L2CAP_MODE_STREAMING
) {
6264 event
= L2CAP_EV_RECV_IFRAME
;
6265 err
= l2cap_rx(chan
, control
, skb
, event
);
6267 err
= l2cap_stream_rx(chan
, control
, skb
);
6271 l2cap_send_disconn_req(chan
, ECONNRESET
);
6273 const u8 rx_func_to_event
[4] = {
6274 L2CAP_EV_RECV_RR
, L2CAP_EV_RECV_REJ
,
6275 L2CAP_EV_RECV_RNR
, L2CAP_EV_RECV_SREJ
6278 /* Only I-frames are expected in streaming mode */
6279 if (chan
->mode
== L2CAP_MODE_STREAMING
)
6282 BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
6283 control
->reqseq
, control
->final
, control
->poll
,
6287 BT_ERR("Trailing bytes: %d in sframe", len
);
6288 l2cap_send_disconn_req(chan
, ECONNRESET
);
6292 /* Validate F and P bits */
6293 if (control
->final
&& (control
->poll
||
6294 chan
->tx_state
!= L2CAP_TX_STATE_WAIT_F
))
6297 event
= rx_func_to_event
[control
->super
];
6298 if (l2cap_rx(chan
, control
, skb
, event
))
6299 l2cap_send_disconn_req(chan
, ECONNRESET
);
6309 static void l2cap_data_channel(struct l2cap_conn
*conn
, u16 cid
,
6310 struct sk_buff
*skb
)
6312 struct l2cap_chan
*chan
;
6314 chan
= l2cap_get_chan_by_scid(conn
, cid
);
6316 if (cid
== L2CAP_CID_A2MP
) {
6317 chan
= a2mp_channel_create(conn
, skb
);
6323 l2cap_chan_lock(chan
);
6325 BT_DBG("unknown cid 0x%4.4x", cid
);
6326 /* Drop packet and return */
6332 BT_DBG("chan %p, len %d", chan
, skb
->len
);
6334 if (chan
->state
!= BT_CONNECTED
)
6337 switch (chan
->mode
) {
6338 case L2CAP_MODE_BASIC
:
6339 /* If socket recv buffers overflows we drop data here
6340 * which is *bad* because L2CAP has to be reliable.
6341 * But we don't have any other choice. L2CAP doesn't
6342 * provide flow control mechanism. */
6344 if (chan
->imtu
< skb
->len
)
6347 if (!chan
->ops
->recv(chan
, skb
))
6351 case L2CAP_MODE_ERTM
:
6352 case L2CAP_MODE_STREAMING
:
6353 l2cap_data_rcv(chan
, skb
);
6357 BT_DBG("chan %p: bad mode 0x%2.2x", chan
, chan
->mode
);
6365 l2cap_chan_unlock(chan
);
6368 static void l2cap_conless_channel(struct l2cap_conn
*conn
, __le16 psm
,
6369 struct sk_buff
*skb
)
6371 struct l2cap_chan
*chan
;
6373 chan
= l2cap_global_chan_by_psm(0, psm
, conn
->src
, conn
->dst
);
6377 BT_DBG("chan %p, len %d", chan
, skb
->len
);
6379 if (chan
->state
!= BT_BOUND
&& chan
->state
!= BT_CONNECTED
)
6382 if (chan
->imtu
< skb
->len
)
6385 if (!chan
->ops
->recv(chan
, skb
))
6392 static void l2cap_att_channel(struct l2cap_conn
*conn
,
6393 struct sk_buff
*skb
)
6395 struct l2cap_chan
*chan
;
6397 chan
= l2cap_global_chan_by_scid(BT_CONNECTED
, L2CAP_CID_ATT
,
6398 conn
->src
, conn
->dst
);
6402 BT_DBG("chan %p, len %d", chan
, skb
->len
);
6404 if (chan
->imtu
< skb
->len
)
6407 if (!chan
->ops
->recv(chan
, skb
))
6414 static void l2cap_recv_frame(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
6416 struct l2cap_hdr
*lh
= (void *) skb
->data
;
6420 skb_pull(skb
, L2CAP_HDR_SIZE
);
6421 cid
= __le16_to_cpu(lh
->cid
);
6422 len
= __le16_to_cpu(lh
->len
);
6424 if (len
!= skb
->len
) {
6429 BT_DBG("len %d, cid 0x%4.4x", len
, cid
);
6432 case L2CAP_CID_LE_SIGNALING
:
6433 l2cap_le_sig_channel(conn
, skb
);
6435 case L2CAP_CID_SIGNALING
:
6436 l2cap_sig_channel(conn
, skb
);
6439 case L2CAP_CID_CONN_LESS
:
6440 psm
= get_unaligned((__le16
*) skb
->data
);
6441 skb_pull(skb
, L2CAP_PSMLEN_SIZE
);
6442 l2cap_conless_channel(conn
, psm
, skb
);
6446 l2cap_att_channel(conn
, skb
);
6450 if (smp_sig_channel(conn
, skb
))
6451 l2cap_conn_del(conn
->hcon
, EACCES
);
6455 l2cap_data_channel(conn
, cid
, skb
);
6460 /* ---- L2CAP interface with lower layer (HCI) ---- */
6462 int l2cap_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
6464 int exact
= 0, lm1
= 0, lm2
= 0;
6465 struct l2cap_chan
*c
;
6467 BT_DBG("hdev %s, bdaddr %pMR", hdev
->name
, bdaddr
);
6469 /* Find listening sockets and check their link_mode */
6470 read_lock(&chan_list_lock
);
6471 list_for_each_entry(c
, &chan_list
, global_l
) {
6472 struct sock
*sk
= c
->sk
;
6474 if (c
->state
!= BT_LISTEN
)
6477 if (!bacmp(&bt_sk(sk
)->src
, &hdev
->bdaddr
)) {
6478 lm1
|= HCI_LM_ACCEPT
;
6479 if (test_bit(FLAG_ROLE_SWITCH
, &c
->flags
))
6480 lm1
|= HCI_LM_MASTER
;
6482 } else if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
)) {
6483 lm2
|= HCI_LM_ACCEPT
;
6484 if (test_bit(FLAG_ROLE_SWITCH
, &c
->flags
))
6485 lm2
|= HCI_LM_MASTER
;
6488 read_unlock(&chan_list_lock
);
6490 return exact
? lm1
: lm2
;
6493 void l2cap_connect_cfm(struct hci_conn
*hcon
, u8 status
)
6495 struct l2cap_conn
*conn
;
6497 BT_DBG("hcon %p bdaddr %pMR status %d", hcon
, &hcon
->dst
, status
);
6500 conn
= l2cap_conn_add(hcon
);
6502 l2cap_conn_ready(conn
);
6504 l2cap_conn_del(hcon
, bt_to_errno(status
));
6508 int l2cap_disconn_ind(struct hci_conn
*hcon
)
6510 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
6512 BT_DBG("hcon %p", hcon
);
6515 return HCI_ERROR_REMOTE_USER_TERM
;
6516 return conn
->disc_reason
;
6519 void l2cap_disconn_cfm(struct hci_conn
*hcon
, u8 reason
)
6521 BT_DBG("hcon %p reason %d", hcon
, reason
);
6523 l2cap_conn_del(hcon
, bt_to_errno(reason
));
6526 static inline void l2cap_check_encryption(struct l2cap_chan
*chan
, u8 encrypt
)
6528 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
)
6531 if (encrypt
== 0x00) {
6532 if (chan
->sec_level
== BT_SECURITY_MEDIUM
) {
6533 __set_chan_timer(chan
, L2CAP_ENC_TIMEOUT
);
6534 } else if (chan
->sec_level
== BT_SECURITY_HIGH
)
6535 l2cap_chan_close(chan
, ECONNREFUSED
);
6537 if (chan
->sec_level
== BT_SECURITY_MEDIUM
)
6538 __clear_chan_timer(chan
);
6542 int l2cap_security_cfm(struct hci_conn
*hcon
, u8 status
, u8 encrypt
)
6544 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
6545 struct l2cap_chan
*chan
;
6550 BT_DBG("conn %p status 0x%2.2x encrypt %u", conn
, status
, encrypt
);
6552 if (hcon
->type
== LE_LINK
) {
6553 if (!status
&& encrypt
)
6554 smp_distribute_keys(conn
, 0);
6555 cancel_delayed_work(&conn
->security_timer
);
6558 mutex_lock(&conn
->chan_lock
);
6560 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
6561 l2cap_chan_lock(chan
);
6563 BT_DBG("chan %p scid 0x%4.4x state %s", chan
, chan
->scid
,
6564 state_to_string(chan
->state
));
6566 if (chan
->chan_type
== L2CAP_CHAN_CONN_FIX_A2MP
) {
6567 l2cap_chan_unlock(chan
);
6571 if (chan
->scid
== L2CAP_CID_ATT
) {
6572 if (!status
&& encrypt
) {
6573 chan
->sec_level
= hcon
->sec_level
;
6574 l2cap_chan_ready(chan
);
6577 l2cap_chan_unlock(chan
);
6581 if (!__l2cap_no_conn_pending(chan
)) {
6582 l2cap_chan_unlock(chan
);
6586 if (!status
&& (chan
->state
== BT_CONNECTED
||
6587 chan
->state
== BT_CONFIG
)) {
6588 struct sock
*sk
= chan
->sk
;
6590 clear_bit(BT_SK_SUSPEND
, &bt_sk(sk
)->flags
);
6591 sk
->sk_state_change(sk
);
6593 l2cap_check_encryption(chan
, encrypt
);
6594 l2cap_chan_unlock(chan
);
6598 if (chan
->state
== BT_CONNECT
) {
6600 l2cap_start_connection(chan
);
6602 __set_chan_timer(chan
, L2CAP_DISC_TIMEOUT
);
6604 } else if (chan
->state
== BT_CONNECT2
) {
6605 struct sock
*sk
= chan
->sk
;
6606 struct l2cap_conn_rsp rsp
;
6612 if (test_bit(BT_SK_DEFER_SETUP
,
6613 &bt_sk(sk
)->flags
)) {
6614 res
= L2CAP_CR_PEND
;
6615 stat
= L2CAP_CS_AUTHOR_PEND
;
6616 chan
->ops
->defer(chan
);
6618 __l2cap_state_change(chan
, BT_CONFIG
);
6619 res
= L2CAP_CR_SUCCESS
;
6620 stat
= L2CAP_CS_NO_INFO
;
6623 __l2cap_state_change(chan
, BT_DISCONN
);
6624 __set_chan_timer(chan
, L2CAP_DISC_TIMEOUT
);
6625 res
= L2CAP_CR_SEC_BLOCK
;
6626 stat
= L2CAP_CS_NO_INFO
;
6631 rsp
.scid
= cpu_to_le16(chan
->dcid
);
6632 rsp
.dcid
= cpu_to_le16(chan
->scid
);
6633 rsp
.result
= cpu_to_le16(res
);
6634 rsp
.status
= cpu_to_le16(stat
);
6635 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
6638 if (!test_bit(CONF_REQ_SENT
, &chan
->conf_state
) &&
6639 res
== L2CAP_CR_SUCCESS
) {
6641 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
6642 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
6644 l2cap_build_conf_req(chan
, buf
),
6646 chan
->num_conf_req
++;
6650 l2cap_chan_unlock(chan
);
6653 mutex_unlock(&conn
->chan_lock
);
6658 int l2cap_recv_acldata(struct hci_conn
*hcon
, struct sk_buff
*skb
, u16 flags
)
6660 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
6661 struct l2cap_hdr
*hdr
;
6664 /* For AMP controller do not create l2cap conn */
6665 if (!conn
&& hcon
->hdev
->dev_type
!= HCI_BREDR
)
6669 conn
= l2cap_conn_add(hcon
);
6674 BT_DBG("conn %p len %d flags 0x%x", conn
, skb
->len
, flags
);
6678 case ACL_START_NO_FLUSH
:
6681 BT_ERR("Unexpected start frame (len %d)", skb
->len
);
6682 kfree_skb(conn
->rx_skb
);
6683 conn
->rx_skb
= NULL
;
6685 l2cap_conn_unreliable(conn
, ECOMM
);
6688 /* Start fragment always begin with Basic L2CAP header */
6689 if (skb
->len
< L2CAP_HDR_SIZE
) {
6690 BT_ERR("Frame is too short (len %d)", skb
->len
);
6691 l2cap_conn_unreliable(conn
, ECOMM
);
6695 hdr
= (struct l2cap_hdr
*) skb
->data
;
6696 len
= __le16_to_cpu(hdr
->len
) + L2CAP_HDR_SIZE
;
6698 if (len
== skb
->len
) {
6699 /* Complete frame received */
6700 l2cap_recv_frame(conn
, skb
);
6704 BT_DBG("Start: total len %d, frag len %d", len
, skb
->len
);
6706 if (skb
->len
> len
) {
6707 BT_ERR("Frame is too long (len %d, expected len %d)",
6709 l2cap_conn_unreliable(conn
, ECOMM
);
6713 /* Allocate skb for the complete frame (with header) */
6714 conn
->rx_skb
= bt_skb_alloc(len
, GFP_KERNEL
);
6718 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
6720 conn
->rx_len
= len
- skb
->len
;
6724 BT_DBG("Cont: frag len %d (expecting %d)", skb
->len
, conn
->rx_len
);
6726 if (!conn
->rx_len
) {
6727 BT_ERR("Unexpected continuation frame (len %d)", skb
->len
);
6728 l2cap_conn_unreliable(conn
, ECOMM
);
6732 if (skb
->len
> conn
->rx_len
) {
6733 BT_ERR("Fragment is too long (len %d, expected %d)",
6734 skb
->len
, conn
->rx_len
);
6735 kfree_skb(conn
->rx_skb
);
6736 conn
->rx_skb
= NULL
;
6738 l2cap_conn_unreliable(conn
, ECOMM
);
6742 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
6744 conn
->rx_len
-= skb
->len
;
6746 if (!conn
->rx_len
) {
6747 /* Complete frame received */
6748 l2cap_recv_frame(conn
, conn
->rx_skb
);
6749 conn
->rx_skb
= NULL
;
6759 static int l2cap_debugfs_show(struct seq_file
*f
, void *p
)
6761 struct l2cap_chan
*c
;
6763 read_lock(&chan_list_lock
);
6765 list_for_each_entry(c
, &chan_list
, global_l
) {
6766 struct sock
*sk
= c
->sk
;
6768 seq_printf(f
, "%pMR %pMR %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
6769 &bt_sk(sk
)->src
, &bt_sk(sk
)->dst
,
6770 c
->state
, __le16_to_cpu(c
->psm
),
6771 c
->scid
, c
->dcid
, c
->imtu
, c
->omtu
,
6772 c
->sec_level
, c
->mode
);
6775 read_unlock(&chan_list_lock
);
6780 static int l2cap_debugfs_open(struct inode
*inode
, struct file
*file
)
6782 return single_open(file
, l2cap_debugfs_show
, inode
->i_private
);
6785 static const struct file_operations l2cap_debugfs_fops
= {
6786 .open
= l2cap_debugfs_open
,
6788 .llseek
= seq_lseek
,
6789 .release
= single_release
,
6792 static struct dentry
*l2cap_debugfs
;
6794 int __init
l2cap_init(void)
6798 err
= l2cap_init_sockets();
6803 l2cap_debugfs
= debugfs_create_file("l2cap", 0444, bt_debugfs
,
6804 NULL
, &l2cap_debugfs_fops
);
6806 BT_ERR("Failed to create L2CAP debug file");
6812 void l2cap_exit(void)
6814 debugfs_remove(l2cap_debugfs
);
6815 l2cap_cleanup_sockets();
6818 module_param(disable_ertm
, bool, 0644);
6819 MODULE_PARM_DESC(disable_ertm
, "Disable enhanced retransmission mode");