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>
44 static u32 l2cap_feat_mask
= L2CAP_FEAT_FIXED_CHAN
;
45 static u8 l2cap_fixed_chan
[8] = { L2CAP_FC_L2CAP
, };
47 static LIST_HEAD(chan_list
);
48 static DEFINE_RWLOCK(chan_list_lock
);
50 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
51 u8 code
, u8 ident
, u16 dlen
, void *data
);
52 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
,
54 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
);
55 static void l2cap_send_disconn_req(struct l2cap_conn
*conn
,
56 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
, u16 cid
)
67 list_for_each_entry(c
, &conn
->chan_l
, list
) {
74 static struct l2cap_chan
*__l2cap_get_chan_by_scid(struct l2cap_conn
*conn
, u16 cid
)
78 list_for_each_entry(c
, &conn
->chan_l
, list
) {
85 /* Find channel with given SCID.
86 * Returns locked channel. */
87 static struct l2cap_chan
*l2cap_get_chan_by_scid(struct l2cap_conn
*conn
, u16 cid
)
91 mutex_lock(&conn
->chan_lock
);
92 c
= __l2cap_get_chan_by_scid(conn
, cid
);
95 mutex_unlock(&conn
->chan_lock
);
100 static struct l2cap_chan
*__l2cap_get_chan_by_ident(struct l2cap_conn
*conn
, u8 ident
)
102 struct l2cap_chan
*c
;
104 list_for_each_entry(c
, &conn
->chan_l
, list
) {
105 if (c
->ident
== ident
)
111 static struct l2cap_chan
*__l2cap_global_chan_by_addr(__le16 psm
, bdaddr_t
*src
)
113 struct l2cap_chan
*c
;
115 list_for_each_entry(c
, &chan_list
, global_l
) {
116 if (c
->sport
== psm
&& !bacmp(&bt_sk(c
->sk
)->src
, src
))
122 int l2cap_add_psm(struct l2cap_chan
*chan
, bdaddr_t
*src
, __le16 psm
)
126 write_lock(&chan_list_lock
);
128 if (psm
&& __l2cap_global_chan_by_addr(psm
, src
)) {
141 for (p
= 0x1001; p
< 0x1100; p
+= 2)
142 if (!__l2cap_global_chan_by_addr(cpu_to_le16(p
), src
)) {
143 chan
->psm
= cpu_to_le16(p
);
144 chan
->sport
= cpu_to_le16(p
);
151 write_unlock(&chan_list_lock
);
155 int l2cap_add_scid(struct l2cap_chan
*chan
, __u16 scid
)
157 write_lock(&chan_list_lock
);
161 write_unlock(&chan_list_lock
);
166 static u16
l2cap_alloc_cid(struct l2cap_conn
*conn
)
168 u16 cid
= L2CAP_CID_DYN_START
;
170 for (; cid
< L2CAP_CID_DYN_END
; cid
++) {
171 if (!__l2cap_get_chan_by_scid(conn
, cid
))
178 static void __l2cap_state_change(struct l2cap_chan
*chan
, int state
)
180 BT_DBG("chan %p %s -> %s", chan
, state_to_string(chan
->state
),
181 state_to_string(state
));
184 chan
->ops
->state_change(chan
, state
);
187 static void l2cap_state_change(struct l2cap_chan
*chan
, int state
)
189 struct sock
*sk
= chan
->sk
;
192 __l2cap_state_change(chan
, state
);
196 static inline void __l2cap_chan_set_err(struct l2cap_chan
*chan
, int err
)
198 struct sock
*sk
= chan
->sk
;
203 static inline void l2cap_chan_set_err(struct l2cap_chan
*chan
, int err
)
205 struct sock
*sk
= chan
->sk
;
208 __l2cap_chan_set_err(chan
, err
);
212 static void __set_retrans_timer(struct l2cap_chan
*chan
)
214 if (!delayed_work_pending(&chan
->monitor_timer
) &&
215 chan
->retrans_timeout
) {
216 l2cap_set_timer(chan
, &chan
->retrans_timer
,
217 msecs_to_jiffies(chan
->retrans_timeout
));
221 static void __set_monitor_timer(struct l2cap_chan
*chan
)
223 __clear_retrans_timer(chan
);
224 if (chan
->monitor_timeout
) {
225 l2cap_set_timer(chan
, &chan
->monitor_timer
,
226 msecs_to_jiffies(chan
->monitor_timeout
));
230 static struct sk_buff
*l2cap_ertm_seq_in_queue(struct sk_buff_head
*head
,
235 skb_queue_walk(head
, skb
) {
236 if (bt_cb(skb
)->control
.txseq
== seq
)
243 /* ---- L2CAP sequence number lists ---- */
245 /* For ERTM, ordered lists of sequence numbers must be tracked for
246 * SREJ requests that are received and for frames that are to be
247 * retransmitted. These seq_list functions implement a singly-linked
248 * list in an array, where membership in the list can also be checked
249 * in constant time. Items can also be added to the tail of the list
250 * and removed from the head in constant time, without further memory
254 static int l2cap_seq_list_init(struct l2cap_seq_list
*seq_list
, u16 size
)
256 size_t alloc_size
, i
;
258 /* Allocated size is a power of 2 to map sequence numbers
259 * (which may be up to 14 bits) in to a smaller array that is
260 * sized for the negotiated ERTM transmit windows.
262 alloc_size
= roundup_pow_of_two(size
);
264 seq_list
->list
= kmalloc(sizeof(u16
) * alloc_size
, GFP_KERNEL
);
268 seq_list
->mask
= alloc_size
- 1;
269 seq_list
->head
= L2CAP_SEQ_LIST_CLEAR
;
270 seq_list
->tail
= L2CAP_SEQ_LIST_CLEAR
;
271 for (i
= 0; i
< alloc_size
; i
++)
272 seq_list
->list
[i
] = L2CAP_SEQ_LIST_CLEAR
;
277 static inline void l2cap_seq_list_free(struct l2cap_seq_list
*seq_list
)
279 kfree(seq_list
->list
);
282 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list
*seq_list
,
285 /* Constant-time check for list membership */
286 return seq_list
->list
[seq
& seq_list
->mask
] != L2CAP_SEQ_LIST_CLEAR
;
289 static u16
l2cap_seq_list_remove(struct l2cap_seq_list
*seq_list
, u16 seq
)
291 u16 mask
= seq_list
->mask
;
293 if (seq_list
->head
== L2CAP_SEQ_LIST_CLEAR
) {
294 /* In case someone tries to pop the head of an empty list */
295 return L2CAP_SEQ_LIST_CLEAR
;
296 } else if (seq_list
->head
== seq
) {
297 /* Head can be removed in constant time */
298 seq_list
->head
= seq_list
->list
[seq
& mask
];
299 seq_list
->list
[seq
& mask
] = L2CAP_SEQ_LIST_CLEAR
;
301 if (seq_list
->head
== L2CAP_SEQ_LIST_TAIL
) {
302 seq_list
->head
= L2CAP_SEQ_LIST_CLEAR
;
303 seq_list
->tail
= L2CAP_SEQ_LIST_CLEAR
;
306 /* Walk the list to find the sequence number */
307 u16 prev
= seq_list
->head
;
308 while (seq_list
->list
[prev
& mask
] != seq
) {
309 prev
= seq_list
->list
[prev
& mask
];
310 if (prev
== L2CAP_SEQ_LIST_TAIL
)
311 return L2CAP_SEQ_LIST_CLEAR
;
314 /* Unlink the number from the list and clear it */
315 seq_list
->list
[prev
& mask
] = seq_list
->list
[seq
& mask
];
316 seq_list
->list
[seq
& mask
] = L2CAP_SEQ_LIST_CLEAR
;
317 if (seq_list
->tail
== seq
)
318 seq_list
->tail
= prev
;
323 static inline u16
l2cap_seq_list_pop(struct l2cap_seq_list
*seq_list
)
325 /* Remove the head in constant time */
326 return l2cap_seq_list_remove(seq_list
, seq_list
->head
);
329 static void l2cap_seq_list_clear(struct l2cap_seq_list
*seq_list
)
333 if (seq_list
->head
== L2CAP_SEQ_LIST_CLEAR
)
336 for (i
= 0; i
<= seq_list
->mask
; i
++)
337 seq_list
->list
[i
] = L2CAP_SEQ_LIST_CLEAR
;
339 seq_list
->head
= L2CAP_SEQ_LIST_CLEAR
;
340 seq_list
->tail
= L2CAP_SEQ_LIST_CLEAR
;
343 static void l2cap_seq_list_append(struct l2cap_seq_list
*seq_list
, u16 seq
)
345 u16 mask
= seq_list
->mask
;
347 /* All appends happen in constant time */
349 if (seq_list
->list
[seq
& mask
] != L2CAP_SEQ_LIST_CLEAR
)
352 if (seq_list
->tail
== L2CAP_SEQ_LIST_CLEAR
)
353 seq_list
->head
= seq
;
355 seq_list
->list
[seq_list
->tail
& mask
] = seq
;
357 seq_list
->tail
= seq
;
358 seq_list
->list
[seq
& mask
] = L2CAP_SEQ_LIST_TAIL
;
361 static void l2cap_chan_timeout(struct work_struct
*work
)
363 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
365 struct l2cap_conn
*conn
= chan
->conn
;
368 BT_DBG("chan %p state %s", chan
, state_to_string(chan
->state
));
370 mutex_lock(&conn
->chan_lock
);
371 l2cap_chan_lock(chan
);
373 if (chan
->state
== BT_CONNECTED
|| chan
->state
== BT_CONFIG
)
374 reason
= ECONNREFUSED
;
375 else if (chan
->state
== BT_CONNECT
&&
376 chan
->sec_level
!= BT_SECURITY_SDP
)
377 reason
= ECONNREFUSED
;
381 l2cap_chan_close(chan
, reason
);
383 l2cap_chan_unlock(chan
);
385 chan
->ops
->close(chan
);
386 mutex_unlock(&conn
->chan_lock
);
388 l2cap_chan_put(chan
);
391 struct l2cap_chan
*l2cap_chan_create(void)
393 struct l2cap_chan
*chan
;
395 chan
= kzalloc(sizeof(*chan
), GFP_ATOMIC
);
399 mutex_init(&chan
->lock
);
401 write_lock(&chan_list_lock
);
402 list_add(&chan
->global_l
, &chan_list
);
403 write_unlock(&chan_list_lock
);
405 INIT_DELAYED_WORK(&chan
->chan_timer
, l2cap_chan_timeout
);
407 chan
->state
= BT_OPEN
;
409 atomic_set(&chan
->refcnt
, 1);
411 /* This flag is cleared in l2cap_chan_ready() */
412 set_bit(CONF_NOT_COMPLETE
, &chan
->conf_state
);
414 BT_DBG("chan %p", chan
);
419 static void l2cap_chan_destroy(struct l2cap_chan
*chan
)
421 BT_DBG("chan %p", chan
);
423 write_lock(&chan_list_lock
);
424 list_del(&chan
->global_l
);
425 write_unlock(&chan_list_lock
);
430 void l2cap_chan_hold(struct l2cap_chan
*c
)
432 BT_DBG("chan %p orig refcnt %d", c
, atomic_read(&c
->refcnt
));
434 atomic_inc(&c
->refcnt
);
437 void l2cap_chan_put(struct l2cap_chan
*c
)
439 BT_DBG("chan %p orig refcnt %d", c
, atomic_read(&c
->refcnt
));
441 if (atomic_dec_and_test(&c
->refcnt
))
442 l2cap_chan_destroy(c
);
445 void l2cap_chan_set_defaults(struct l2cap_chan
*chan
)
447 chan
->fcs
= L2CAP_FCS_CRC16
;
448 chan
->max_tx
= L2CAP_DEFAULT_MAX_TX
;
449 chan
->tx_win
= L2CAP_DEFAULT_TX_WINDOW
;
450 chan
->tx_win_max
= L2CAP_DEFAULT_TX_WINDOW
;
451 chan
->ack_win
= L2CAP_DEFAULT_TX_WINDOW
;
452 chan
->sec_level
= BT_SECURITY_LOW
;
454 set_bit(FLAG_FORCE_ACTIVE
, &chan
->flags
);
457 static void __l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
459 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn
,
460 __le16_to_cpu(chan
->psm
), chan
->dcid
);
462 conn
->disc_reason
= HCI_ERROR_REMOTE_USER_TERM
;
466 switch (chan
->chan_type
) {
467 case L2CAP_CHAN_CONN_ORIENTED
:
468 if (conn
->hcon
->type
== LE_LINK
) {
470 chan
->omtu
= L2CAP_DEFAULT_MTU
;
471 chan
->scid
= L2CAP_CID_LE_DATA
;
472 chan
->dcid
= L2CAP_CID_LE_DATA
;
474 /* Alloc CID for connection-oriented socket */
475 chan
->scid
= l2cap_alloc_cid(conn
);
476 chan
->omtu
= L2CAP_DEFAULT_MTU
;
480 case L2CAP_CHAN_CONN_LESS
:
481 /* Connectionless socket */
482 chan
->scid
= L2CAP_CID_CONN_LESS
;
483 chan
->dcid
= L2CAP_CID_CONN_LESS
;
484 chan
->omtu
= L2CAP_DEFAULT_MTU
;
487 case L2CAP_CHAN_CONN_FIX_A2MP
:
488 chan
->scid
= L2CAP_CID_A2MP
;
489 chan
->dcid
= L2CAP_CID_A2MP
;
490 chan
->omtu
= L2CAP_A2MP_DEFAULT_MTU
;
491 chan
->imtu
= L2CAP_A2MP_DEFAULT_MTU
;
495 /* Raw socket can send/recv signalling messages only */
496 chan
->scid
= L2CAP_CID_SIGNALING
;
497 chan
->dcid
= L2CAP_CID_SIGNALING
;
498 chan
->omtu
= L2CAP_DEFAULT_MTU
;
501 chan
->local_id
= L2CAP_BESTEFFORT_ID
;
502 chan
->local_stype
= L2CAP_SERV_BESTEFFORT
;
503 chan
->local_msdu
= L2CAP_DEFAULT_MAX_SDU_SIZE
;
504 chan
->local_sdu_itime
= L2CAP_DEFAULT_SDU_ITIME
;
505 chan
->local_acc_lat
= L2CAP_DEFAULT_ACC_LAT
;
506 chan
->local_flush_to
= L2CAP_DEFAULT_FLUSH_TO
;
508 l2cap_chan_hold(chan
);
510 list_add(&chan
->list
, &conn
->chan_l
);
513 void l2cap_chan_add(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
)
515 mutex_lock(&conn
->chan_lock
);
516 __l2cap_chan_add(conn
, chan
);
517 mutex_unlock(&conn
->chan_lock
);
520 void l2cap_chan_del(struct l2cap_chan
*chan
, int err
)
522 struct l2cap_conn
*conn
= chan
->conn
;
524 __clear_chan_timer(chan
);
526 BT_DBG("chan %p, conn %p, err %d", chan
, conn
, err
);
529 /* Delete from channel list */
530 list_del(&chan
->list
);
532 l2cap_chan_put(chan
);
536 if (chan
->chan_type
!= L2CAP_CHAN_CONN_FIX_A2MP
)
537 hci_conn_put(conn
->hcon
);
540 if (chan
->ops
->teardown
)
541 chan
->ops
->teardown(chan
, err
);
543 if (test_bit(CONF_NOT_COMPLETE
, &chan
->conf_state
))
547 case L2CAP_MODE_BASIC
:
550 case L2CAP_MODE_ERTM
:
551 __clear_retrans_timer(chan
);
552 __clear_monitor_timer(chan
);
553 __clear_ack_timer(chan
);
555 skb_queue_purge(&chan
->srej_q
);
557 l2cap_seq_list_free(&chan
->srej_list
);
558 l2cap_seq_list_free(&chan
->retrans_list
);
562 case L2CAP_MODE_STREAMING
:
563 skb_queue_purge(&chan
->tx_q
);
570 void l2cap_chan_close(struct l2cap_chan
*chan
, int reason
)
572 struct l2cap_conn
*conn
= chan
->conn
;
573 struct sock
*sk
= chan
->sk
;
575 BT_DBG("chan %p state %s sk %p", chan
,
576 state_to_string(chan
->state
), sk
);
578 switch (chan
->state
) {
580 if (chan
->ops
->teardown
)
581 chan
->ops
->teardown(chan
, 0);
586 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
587 conn
->hcon
->type
== ACL_LINK
) {
588 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
589 l2cap_send_disconn_req(conn
, chan
, reason
);
591 l2cap_chan_del(chan
, reason
);
595 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&&
596 conn
->hcon
->type
== ACL_LINK
) {
597 struct l2cap_conn_rsp rsp
;
600 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
))
601 result
= L2CAP_CR_SEC_BLOCK
;
603 result
= L2CAP_CR_BAD_PSM
;
604 l2cap_state_change(chan
, BT_DISCONN
);
606 rsp
.scid
= cpu_to_le16(chan
->dcid
);
607 rsp
.dcid
= cpu_to_le16(chan
->scid
);
608 rsp
.result
= cpu_to_le16(result
);
609 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
610 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
614 l2cap_chan_del(chan
, reason
);
619 l2cap_chan_del(chan
, reason
);
623 if (chan
->ops
->teardown
)
624 chan
->ops
->teardown(chan
, 0);
629 static inline u8
l2cap_get_auth_type(struct l2cap_chan
*chan
)
631 if (chan
->chan_type
== L2CAP_CHAN_RAW
) {
632 switch (chan
->sec_level
) {
633 case BT_SECURITY_HIGH
:
634 return HCI_AT_DEDICATED_BONDING_MITM
;
635 case BT_SECURITY_MEDIUM
:
636 return HCI_AT_DEDICATED_BONDING
;
638 return HCI_AT_NO_BONDING
;
640 } else if (chan
->psm
== __constant_cpu_to_le16(L2CAP_PSM_SDP
)) {
641 if (chan
->sec_level
== BT_SECURITY_LOW
)
642 chan
->sec_level
= BT_SECURITY_SDP
;
644 if (chan
->sec_level
== BT_SECURITY_HIGH
)
645 return HCI_AT_NO_BONDING_MITM
;
647 return HCI_AT_NO_BONDING
;
649 switch (chan
->sec_level
) {
650 case BT_SECURITY_HIGH
:
651 return HCI_AT_GENERAL_BONDING_MITM
;
652 case BT_SECURITY_MEDIUM
:
653 return HCI_AT_GENERAL_BONDING
;
655 return HCI_AT_NO_BONDING
;
660 /* Service level security */
661 int l2cap_chan_check_security(struct l2cap_chan
*chan
)
663 struct l2cap_conn
*conn
= chan
->conn
;
666 auth_type
= l2cap_get_auth_type(chan
);
668 return hci_conn_security(conn
->hcon
, chan
->sec_level
, auth_type
);
671 static u8
l2cap_get_ident(struct l2cap_conn
*conn
)
675 /* Get next available identificator.
676 * 1 - 128 are used by kernel.
677 * 129 - 199 are reserved.
678 * 200 - 254 are used by utilities like l2ping, etc.
681 spin_lock(&conn
->lock
);
683 if (++conn
->tx_ident
> 128)
688 spin_unlock(&conn
->lock
);
693 static void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
, void *data
)
695 struct sk_buff
*skb
= l2cap_build_cmd(conn
, code
, ident
, len
, data
);
698 BT_DBG("code 0x%2.2x", code
);
703 if (lmp_no_flush_capable(conn
->hcon
->hdev
))
704 flags
= ACL_START_NO_FLUSH
;
708 bt_cb(skb
)->force_active
= BT_POWER_FORCE_ACTIVE_ON
;
709 skb
->priority
= HCI_PRIO_MAX
;
711 hci_send_acl(conn
->hchan
, skb
, flags
);
714 static void l2cap_do_send(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
716 struct hci_conn
*hcon
= chan
->conn
->hcon
;
719 BT_DBG("chan %p, skb %p len %d priority %u", chan
, skb
, skb
->len
,
722 if (!test_bit(FLAG_FLUSHABLE
, &chan
->flags
) &&
723 lmp_no_flush_capable(hcon
->hdev
))
724 flags
= ACL_START_NO_FLUSH
;
728 bt_cb(skb
)->force_active
= test_bit(FLAG_FORCE_ACTIVE
, &chan
->flags
);
729 hci_send_acl(chan
->conn
->hchan
, skb
, flags
);
732 static void __unpack_enhanced_control(u16 enh
, struct l2cap_ctrl
*control
)
734 control
->reqseq
= (enh
& L2CAP_CTRL_REQSEQ
) >> L2CAP_CTRL_REQSEQ_SHIFT
;
735 control
->final
= (enh
& L2CAP_CTRL_FINAL
) >> L2CAP_CTRL_FINAL_SHIFT
;
737 if (enh
& L2CAP_CTRL_FRAME_TYPE
) {
740 control
->poll
= (enh
& L2CAP_CTRL_POLL
) >> L2CAP_CTRL_POLL_SHIFT
;
741 control
->super
= (enh
& L2CAP_CTRL_SUPERVISE
) >> L2CAP_CTRL_SUPER_SHIFT
;
748 control
->sar
= (enh
& L2CAP_CTRL_SAR
) >> L2CAP_CTRL_SAR_SHIFT
;
749 control
->txseq
= (enh
& L2CAP_CTRL_TXSEQ
) >> L2CAP_CTRL_TXSEQ_SHIFT
;
756 static void __unpack_extended_control(u32 ext
, struct l2cap_ctrl
*control
)
758 control
->reqseq
= (ext
& L2CAP_EXT_CTRL_REQSEQ
) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT
;
759 control
->final
= (ext
& L2CAP_EXT_CTRL_FINAL
) >> L2CAP_EXT_CTRL_FINAL_SHIFT
;
761 if (ext
& L2CAP_EXT_CTRL_FRAME_TYPE
) {
764 control
->poll
= (ext
& L2CAP_EXT_CTRL_POLL
) >> L2CAP_EXT_CTRL_POLL_SHIFT
;
765 control
->super
= (ext
& L2CAP_EXT_CTRL_SUPERVISE
) >> L2CAP_EXT_CTRL_SUPER_SHIFT
;
772 control
->sar
= (ext
& L2CAP_EXT_CTRL_SAR
) >> L2CAP_EXT_CTRL_SAR_SHIFT
;
773 control
->txseq
= (ext
& L2CAP_EXT_CTRL_TXSEQ
) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT
;
780 static inline void __unpack_control(struct l2cap_chan
*chan
,
783 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
)) {
784 __unpack_extended_control(get_unaligned_le32(skb
->data
),
785 &bt_cb(skb
)->control
);
786 skb_pull(skb
, L2CAP_EXT_CTRL_SIZE
);
788 __unpack_enhanced_control(get_unaligned_le16(skb
->data
),
789 &bt_cb(skb
)->control
);
790 skb_pull(skb
, L2CAP_ENH_CTRL_SIZE
);
794 static u32
__pack_extended_control(struct l2cap_ctrl
*control
)
798 packed
= control
->reqseq
<< L2CAP_EXT_CTRL_REQSEQ_SHIFT
;
799 packed
|= control
->final
<< L2CAP_EXT_CTRL_FINAL_SHIFT
;
801 if (control
->sframe
) {
802 packed
|= control
->poll
<< L2CAP_EXT_CTRL_POLL_SHIFT
;
803 packed
|= control
->super
<< L2CAP_EXT_CTRL_SUPER_SHIFT
;
804 packed
|= L2CAP_EXT_CTRL_FRAME_TYPE
;
806 packed
|= control
->sar
<< L2CAP_EXT_CTRL_SAR_SHIFT
;
807 packed
|= control
->txseq
<< L2CAP_EXT_CTRL_TXSEQ_SHIFT
;
813 static u16
__pack_enhanced_control(struct l2cap_ctrl
*control
)
817 packed
= control
->reqseq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
818 packed
|= control
->final
<< L2CAP_CTRL_FINAL_SHIFT
;
820 if (control
->sframe
) {
821 packed
|= control
->poll
<< L2CAP_CTRL_POLL_SHIFT
;
822 packed
|= control
->super
<< L2CAP_CTRL_SUPER_SHIFT
;
823 packed
|= L2CAP_CTRL_FRAME_TYPE
;
825 packed
|= control
->sar
<< L2CAP_CTRL_SAR_SHIFT
;
826 packed
|= control
->txseq
<< L2CAP_CTRL_TXSEQ_SHIFT
;
832 static inline void __pack_control(struct l2cap_chan
*chan
,
833 struct l2cap_ctrl
*control
,
836 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
)) {
837 put_unaligned_le32(__pack_extended_control(control
),
838 skb
->data
+ L2CAP_HDR_SIZE
);
840 put_unaligned_le16(__pack_enhanced_control(control
),
841 skb
->data
+ L2CAP_HDR_SIZE
);
845 static inline unsigned int __ertm_hdr_size(struct l2cap_chan
*chan
)
847 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
848 return L2CAP_EXT_HDR_SIZE
;
850 return L2CAP_ENH_HDR_SIZE
;
853 static struct sk_buff
*l2cap_create_sframe_pdu(struct l2cap_chan
*chan
,
857 struct l2cap_hdr
*lh
;
858 int hlen
= __ertm_hdr_size(chan
);
860 if (chan
->fcs
== L2CAP_FCS_CRC16
)
861 hlen
+= L2CAP_FCS_SIZE
;
863 skb
= bt_skb_alloc(hlen
, GFP_KERNEL
);
866 return ERR_PTR(-ENOMEM
);
868 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
869 lh
->len
= cpu_to_le16(hlen
- L2CAP_HDR_SIZE
);
870 lh
->cid
= cpu_to_le16(chan
->dcid
);
872 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
873 put_unaligned_le32(control
, skb_put(skb
, L2CAP_EXT_CTRL_SIZE
));
875 put_unaligned_le16(control
, skb_put(skb
, L2CAP_ENH_CTRL_SIZE
));
877 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
878 u16 fcs
= crc16(0, (u8
*)skb
->data
, skb
->len
);
879 put_unaligned_le16(fcs
, skb_put(skb
, L2CAP_FCS_SIZE
));
882 skb
->priority
= HCI_PRIO_MAX
;
886 static void l2cap_send_sframe(struct l2cap_chan
*chan
,
887 struct l2cap_ctrl
*control
)
892 BT_DBG("chan %p, control %p", chan
, control
);
894 if (!control
->sframe
)
897 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
) &&
901 if (control
->super
== L2CAP_SUPER_RR
)
902 clear_bit(CONN_RNR_SENT
, &chan
->conn_state
);
903 else if (control
->super
== L2CAP_SUPER_RNR
)
904 set_bit(CONN_RNR_SENT
, &chan
->conn_state
);
906 if (control
->super
!= L2CAP_SUPER_SREJ
) {
907 chan
->last_acked_seq
= control
->reqseq
;
908 __clear_ack_timer(chan
);
911 BT_DBG("reqseq %d, final %d, poll %d, super %d", control
->reqseq
,
912 control
->final
, control
->poll
, control
->super
);
914 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
915 control_field
= __pack_extended_control(control
);
917 control_field
= __pack_enhanced_control(control
);
919 skb
= l2cap_create_sframe_pdu(chan
, control_field
);
921 l2cap_do_send(chan
, skb
);
924 static void l2cap_send_rr_or_rnr(struct l2cap_chan
*chan
, bool poll
)
926 struct l2cap_ctrl control
;
928 BT_DBG("chan %p, poll %d", chan
, poll
);
930 memset(&control
, 0, sizeof(control
));
934 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
))
935 control
.super
= L2CAP_SUPER_RNR
;
937 control
.super
= L2CAP_SUPER_RR
;
939 control
.reqseq
= chan
->buffer_seq
;
940 l2cap_send_sframe(chan
, &control
);
943 static inline int __l2cap_no_conn_pending(struct l2cap_chan
*chan
)
945 return !test_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
948 static void l2cap_send_conn_req(struct l2cap_chan
*chan
)
950 struct l2cap_conn
*conn
= chan
->conn
;
951 struct l2cap_conn_req req
;
953 req
.scid
= cpu_to_le16(chan
->scid
);
956 chan
->ident
= l2cap_get_ident(conn
);
958 set_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
960 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_REQ
, sizeof(req
), &req
);
963 static void l2cap_chan_ready(struct l2cap_chan
*chan
)
965 /* This clears all conf flags, including CONF_NOT_COMPLETE */
966 chan
->conf_state
= 0;
967 __clear_chan_timer(chan
);
969 chan
->state
= BT_CONNECTED
;
971 chan
->ops
->ready(chan
);
974 static void l2cap_do_start(struct l2cap_chan
*chan
)
976 struct l2cap_conn
*conn
= chan
->conn
;
978 if (conn
->hcon
->type
== LE_LINK
) {
979 l2cap_chan_ready(chan
);
983 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) {
984 if (!(conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
))
987 if (l2cap_chan_check_security(chan
) &&
988 __l2cap_no_conn_pending(chan
))
989 l2cap_send_conn_req(chan
);
991 struct l2cap_info_req req
;
992 req
.type
= __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK
);
994 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
995 conn
->info_ident
= l2cap_get_ident(conn
);
997 schedule_delayed_work(&conn
->info_timer
, L2CAP_INFO_TIMEOUT
);
999 l2cap_send_cmd(conn
, conn
->info_ident
,
1000 L2CAP_INFO_REQ
, sizeof(req
), &req
);
1004 static inline int l2cap_mode_supported(__u8 mode
, __u32 feat_mask
)
1006 u32 local_feat_mask
= l2cap_feat_mask
;
1008 local_feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
;
1011 case L2CAP_MODE_ERTM
:
1012 return L2CAP_FEAT_ERTM
& feat_mask
& local_feat_mask
;
1013 case L2CAP_MODE_STREAMING
:
1014 return L2CAP_FEAT_STREAMING
& feat_mask
& local_feat_mask
;
1020 static void l2cap_send_disconn_req(struct l2cap_conn
*conn
, struct l2cap_chan
*chan
, int err
)
1022 struct sock
*sk
= chan
->sk
;
1023 struct l2cap_disconn_req req
;
1028 if (chan
->mode
== L2CAP_MODE_ERTM
&& chan
->state
== BT_CONNECTED
) {
1029 __clear_retrans_timer(chan
);
1030 __clear_monitor_timer(chan
);
1031 __clear_ack_timer(chan
);
1034 if (chan
->chan_type
== L2CAP_CHAN_CONN_FIX_A2MP
) {
1035 __l2cap_state_change(chan
, BT_DISCONN
);
1039 req
.dcid
= cpu_to_le16(chan
->dcid
);
1040 req
.scid
= cpu_to_le16(chan
->scid
);
1041 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
1042 L2CAP_DISCONN_REQ
, sizeof(req
), &req
);
1045 __l2cap_state_change(chan
, BT_DISCONN
);
1046 __l2cap_chan_set_err(chan
, err
);
1050 /* ---- L2CAP connections ---- */
1051 static void l2cap_conn_start(struct l2cap_conn
*conn
)
1053 struct l2cap_chan
*chan
, *tmp
;
1055 BT_DBG("conn %p", conn
);
1057 mutex_lock(&conn
->chan_lock
);
1059 list_for_each_entry_safe(chan
, tmp
, &conn
->chan_l
, list
) {
1060 struct sock
*sk
= chan
->sk
;
1062 l2cap_chan_lock(chan
);
1064 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1065 l2cap_chan_unlock(chan
);
1069 if (chan
->state
== BT_CONNECT
) {
1070 if (!l2cap_chan_check_security(chan
) ||
1071 !__l2cap_no_conn_pending(chan
)) {
1072 l2cap_chan_unlock(chan
);
1076 if (!l2cap_mode_supported(chan
->mode
, conn
->feat_mask
)
1077 && test_bit(CONF_STATE2_DEVICE
,
1078 &chan
->conf_state
)) {
1079 l2cap_chan_close(chan
, ECONNRESET
);
1080 l2cap_chan_unlock(chan
);
1084 l2cap_send_conn_req(chan
);
1086 } else if (chan
->state
== BT_CONNECT2
) {
1087 struct l2cap_conn_rsp rsp
;
1089 rsp
.scid
= cpu_to_le16(chan
->dcid
);
1090 rsp
.dcid
= cpu_to_le16(chan
->scid
);
1092 if (l2cap_chan_check_security(chan
)) {
1094 if (test_bit(BT_SK_DEFER_SETUP
,
1095 &bt_sk(sk
)->flags
)) {
1096 struct sock
*parent
= bt_sk(sk
)->parent
;
1097 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_PEND
);
1098 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_AUTHOR_PEND
);
1100 parent
->sk_data_ready(parent
, 0);
1103 __l2cap_state_change(chan
, BT_CONFIG
);
1104 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_SUCCESS
);
1105 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
1109 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_PEND
);
1110 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_AUTHEN_PEND
);
1113 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
1116 if (test_bit(CONF_REQ_SENT
, &chan
->conf_state
) ||
1117 rsp
.result
!= L2CAP_CR_SUCCESS
) {
1118 l2cap_chan_unlock(chan
);
1122 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
1123 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
1124 l2cap_build_conf_req(chan
, buf
), buf
);
1125 chan
->num_conf_req
++;
1128 l2cap_chan_unlock(chan
);
1131 mutex_unlock(&conn
->chan_lock
);
1134 /* Find socket with cid and source/destination bdaddr.
1135 * Returns closest match, locked.
1137 static struct l2cap_chan
*l2cap_global_chan_by_scid(int state
, u16 cid
,
1141 struct l2cap_chan
*c
, *c1
= NULL
;
1143 read_lock(&chan_list_lock
);
1145 list_for_each_entry(c
, &chan_list
, global_l
) {
1146 struct sock
*sk
= c
->sk
;
1148 if (state
&& c
->state
!= state
)
1151 if (c
->scid
== cid
) {
1152 int src_match
, dst_match
;
1153 int src_any
, dst_any
;
1156 src_match
= !bacmp(&bt_sk(sk
)->src
, src
);
1157 dst_match
= !bacmp(&bt_sk(sk
)->dst
, dst
);
1158 if (src_match
&& dst_match
) {
1159 read_unlock(&chan_list_lock
);
1164 src_any
= !bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
);
1165 dst_any
= !bacmp(&bt_sk(sk
)->dst
, BDADDR_ANY
);
1166 if ((src_match
&& dst_any
) || (src_any
&& dst_match
) ||
1167 (src_any
&& dst_any
))
1172 read_unlock(&chan_list_lock
);
1177 static void l2cap_le_conn_ready(struct l2cap_conn
*conn
)
1179 struct sock
*parent
, *sk
;
1180 struct l2cap_chan
*chan
, *pchan
;
1184 /* Check if we have socket listening on cid */
1185 pchan
= l2cap_global_chan_by_scid(BT_LISTEN
, L2CAP_CID_LE_DATA
,
1186 conn
->src
, conn
->dst
);
1194 chan
= pchan
->ops
->new_connection(pchan
);
1200 hci_conn_hold(conn
->hcon
);
1201 conn
->hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1203 bacpy(&bt_sk(sk
)->src
, conn
->src
);
1204 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
1206 bt_accept_enqueue(parent
, sk
);
1208 l2cap_chan_add(conn
, chan
);
1210 l2cap_chan_ready(chan
);
1213 release_sock(parent
);
1216 static void l2cap_conn_ready(struct l2cap_conn
*conn
)
1218 struct l2cap_chan
*chan
;
1219 struct hci_conn
*hcon
= conn
->hcon
;
1221 BT_DBG("conn %p", conn
);
1223 if (!hcon
->out
&& hcon
->type
== LE_LINK
)
1224 l2cap_le_conn_ready(conn
);
1226 if (hcon
->out
&& hcon
->type
== LE_LINK
)
1227 smp_conn_security(hcon
, hcon
->pending_sec_level
);
1229 mutex_lock(&conn
->chan_lock
);
1231 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
1233 l2cap_chan_lock(chan
);
1235 if (chan
->chan_type
== L2CAP_CHAN_CONN_FIX_A2MP
) {
1236 l2cap_chan_unlock(chan
);
1240 if (hcon
->type
== LE_LINK
) {
1241 if (smp_conn_security(hcon
, chan
->sec_level
))
1242 l2cap_chan_ready(chan
);
1244 } else if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1245 struct sock
*sk
= chan
->sk
;
1246 __clear_chan_timer(chan
);
1248 __l2cap_state_change(chan
, BT_CONNECTED
);
1249 sk
->sk_state_change(sk
);
1252 } else if (chan
->state
== BT_CONNECT
)
1253 l2cap_do_start(chan
);
1255 l2cap_chan_unlock(chan
);
1258 mutex_unlock(&conn
->chan_lock
);
1261 /* Notify sockets that we cannot guaranty reliability anymore */
1262 static void l2cap_conn_unreliable(struct l2cap_conn
*conn
, int err
)
1264 struct l2cap_chan
*chan
;
1266 BT_DBG("conn %p", conn
);
1268 mutex_lock(&conn
->chan_lock
);
1270 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
1271 if (test_bit(FLAG_FORCE_RELIABLE
, &chan
->flags
))
1272 __l2cap_chan_set_err(chan
, err
);
1275 mutex_unlock(&conn
->chan_lock
);
1278 static void l2cap_info_timeout(struct work_struct
*work
)
1280 struct l2cap_conn
*conn
= container_of(work
, struct l2cap_conn
,
1283 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
1284 conn
->info_ident
= 0;
1286 l2cap_conn_start(conn
);
1289 static void l2cap_conn_del(struct hci_conn
*hcon
, int err
)
1291 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1292 struct l2cap_chan
*chan
, *l
;
1297 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
1299 kfree_skb(conn
->rx_skb
);
1301 mutex_lock(&conn
->chan_lock
);
1304 list_for_each_entry_safe(chan
, l
, &conn
->chan_l
, list
) {
1305 l2cap_chan_hold(chan
);
1306 l2cap_chan_lock(chan
);
1308 l2cap_chan_del(chan
, err
);
1310 l2cap_chan_unlock(chan
);
1312 chan
->ops
->close(chan
);
1313 l2cap_chan_put(chan
);
1316 mutex_unlock(&conn
->chan_lock
);
1318 hci_chan_del(conn
->hchan
);
1320 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
)
1321 cancel_delayed_work_sync(&conn
->info_timer
);
1323 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->flags
)) {
1324 cancel_delayed_work_sync(&conn
->security_timer
);
1325 smp_chan_destroy(conn
);
1328 hcon
->l2cap_data
= NULL
;
1332 static void security_timeout(struct work_struct
*work
)
1334 struct l2cap_conn
*conn
= container_of(work
, struct l2cap_conn
,
1335 security_timer
.work
);
1337 BT_DBG("conn %p", conn
);
1339 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
)) {
1340 smp_chan_destroy(conn
);
1341 l2cap_conn_del(conn
->hcon
, ETIMEDOUT
);
1345 static struct l2cap_conn
*l2cap_conn_add(struct hci_conn
*hcon
, u8 status
)
1347 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1348 struct hci_chan
*hchan
;
1353 hchan
= hci_chan_create(hcon
);
1357 conn
= kzalloc(sizeof(struct l2cap_conn
), GFP_ATOMIC
);
1359 hci_chan_del(hchan
);
1363 hcon
->l2cap_data
= conn
;
1365 conn
->hchan
= hchan
;
1367 BT_DBG("hcon %p conn %p hchan %p", hcon
, conn
, hchan
);
1369 if (hcon
->hdev
->le_mtu
&& hcon
->type
== LE_LINK
)
1370 conn
->mtu
= hcon
->hdev
->le_mtu
;
1372 conn
->mtu
= hcon
->hdev
->acl_mtu
;
1374 conn
->src
= &hcon
->hdev
->bdaddr
;
1375 conn
->dst
= &hcon
->dst
;
1377 conn
->feat_mask
= 0;
1379 spin_lock_init(&conn
->lock
);
1380 mutex_init(&conn
->chan_lock
);
1382 INIT_LIST_HEAD(&conn
->chan_l
);
1384 if (hcon
->type
== LE_LINK
)
1385 INIT_DELAYED_WORK(&conn
->security_timer
, security_timeout
);
1387 INIT_DELAYED_WORK(&conn
->info_timer
, l2cap_info_timeout
);
1389 conn
->disc_reason
= HCI_ERROR_REMOTE_USER_TERM
;
1394 /* ---- Socket interface ---- */
1396 /* Find socket with psm and source / destination bdaddr.
1397 * Returns closest match.
1399 static struct l2cap_chan
*l2cap_global_chan_by_psm(int state
, __le16 psm
,
1403 struct l2cap_chan
*c
, *c1
= NULL
;
1405 read_lock(&chan_list_lock
);
1407 list_for_each_entry(c
, &chan_list
, global_l
) {
1408 struct sock
*sk
= c
->sk
;
1410 if (state
&& c
->state
!= state
)
1413 if (c
->psm
== psm
) {
1414 int src_match
, dst_match
;
1415 int src_any
, dst_any
;
1418 src_match
= !bacmp(&bt_sk(sk
)->src
, src
);
1419 dst_match
= !bacmp(&bt_sk(sk
)->dst
, dst
);
1420 if (src_match
&& dst_match
) {
1421 read_unlock(&chan_list_lock
);
1426 src_any
= !bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
);
1427 dst_any
= !bacmp(&bt_sk(sk
)->dst
, BDADDR_ANY
);
1428 if ((src_match
&& dst_any
) || (src_any
&& dst_match
) ||
1429 (src_any
&& dst_any
))
1434 read_unlock(&chan_list_lock
);
1439 int l2cap_chan_connect(struct l2cap_chan
*chan
, __le16 psm
, u16 cid
,
1440 bdaddr_t
*dst
, u8 dst_type
)
1442 struct sock
*sk
= chan
->sk
;
1443 bdaddr_t
*src
= &bt_sk(sk
)->src
;
1444 struct l2cap_conn
*conn
;
1445 struct hci_conn
*hcon
;
1446 struct hci_dev
*hdev
;
1450 BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src
), batostr(dst
),
1451 dst_type
, __le16_to_cpu(chan
->psm
));
1453 hdev
= hci_get_route(dst
, src
);
1455 return -EHOSTUNREACH
;
1459 l2cap_chan_lock(chan
);
1461 /* PSM must be odd and lsb of upper byte must be 0 */
1462 if ((__le16_to_cpu(psm
) & 0x0101) != 0x0001 && !cid
&&
1463 chan
->chan_type
!= L2CAP_CHAN_RAW
) {
1468 if (chan
->chan_type
== L2CAP_CHAN_CONN_ORIENTED
&& !(psm
|| cid
)) {
1473 switch (chan
->mode
) {
1474 case L2CAP_MODE_BASIC
:
1476 case L2CAP_MODE_ERTM
:
1477 case L2CAP_MODE_STREAMING
:
1486 switch (chan
->state
) {
1490 /* Already connecting */
1495 /* Already connected */
1509 /* Set destination address and psm */
1511 bacpy(&bt_sk(sk
)->dst
, dst
);
1517 auth_type
= l2cap_get_auth_type(chan
);
1519 if (chan
->dcid
== L2CAP_CID_LE_DATA
)
1520 hcon
= hci_connect(hdev
, LE_LINK
, dst
, dst_type
,
1521 chan
->sec_level
, auth_type
);
1523 hcon
= hci_connect(hdev
, ACL_LINK
, dst
, dst_type
,
1524 chan
->sec_level
, auth_type
);
1527 err
= PTR_ERR(hcon
);
1531 conn
= l2cap_conn_add(hcon
, 0);
1538 if (hcon
->type
== LE_LINK
) {
1541 if (!list_empty(&conn
->chan_l
)) {
1550 /* Update source addr of the socket */
1551 bacpy(src
, conn
->src
);
1553 l2cap_chan_unlock(chan
);
1554 l2cap_chan_add(conn
, chan
);
1555 l2cap_chan_lock(chan
);
1557 l2cap_state_change(chan
, BT_CONNECT
);
1558 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
1560 if (hcon
->state
== BT_CONNECTED
) {
1561 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
) {
1562 __clear_chan_timer(chan
);
1563 if (l2cap_chan_check_security(chan
))
1564 l2cap_state_change(chan
, BT_CONNECTED
);
1566 l2cap_do_start(chan
);
1572 l2cap_chan_unlock(chan
);
1573 hci_dev_unlock(hdev
);
1578 int __l2cap_wait_ack(struct sock
*sk
)
1580 struct l2cap_chan
*chan
= l2cap_pi(sk
)->chan
;
1581 DECLARE_WAITQUEUE(wait
, current
);
1585 add_wait_queue(sk_sleep(sk
), &wait
);
1586 set_current_state(TASK_INTERRUPTIBLE
);
1587 while (chan
->unacked_frames
> 0 && chan
->conn
) {
1591 if (signal_pending(current
)) {
1592 err
= sock_intr_errno(timeo
);
1597 timeo
= schedule_timeout(timeo
);
1599 set_current_state(TASK_INTERRUPTIBLE
);
1601 err
= sock_error(sk
);
1605 set_current_state(TASK_RUNNING
);
1606 remove_wait_queue(sk_sleep(sk
), &wait
);
1610 static void l2cap_monitor_timeout(struct work_struct
*work
)
1612 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
1613 monitor_timer
.work
);
1615 BT_DBG("chan %p", chan
);
1617 l2cap_chan_lock(chan
);
1620 l2cap_chan_unlock(chan
);
1621 l2cap_chan_put(chan
);
1625 l2cap_tx(chan
, NULL
, NULL
, L2CAP_EV_MONITOR_TO
);
1627 l2cap_chan_unlock(chan
);
1628 l2cap_chan_put(chan
);
1631 static void l2cap_retrans_timeout(struct work_struct
*work
)
1633 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
1634 retrans_timer
.work
);
1636 BT_DBG("chan %p", chan
);
1638 l2cap_chan_lock(chan
);
1641 l2cap_chan_unlock(chan
);
1642 l2cap_chan_put(chan
);
1646 l2cap_tx(chan
, NULL
, NULL
, L2CAP_EV_RETRANS_TO
);
1647 l2cap_chan_unlock(chan
);
1648 l2cap_chan_put(chan
);
1651 static void l2cap_streaming_send(struct l2cap_chan
*chan
,
1652 struct sk_buff_head
*skbs
)
1654 struct sk_buff
*skb
;
1655 struct l2cap_ctrl
*control
;
1657 BT_DBG("chan %p, skbs %p", chan
, skbs
);
1659 skb_queue_splice_tail_init(skbs
, &chan
->tx_q
);
1661 while (!skb_queue_empty(&chan
->tx_q
)) {
1663 skb
= skb_dequeue(&chan
->tx_q
);
1665 bt_cb(skb
)->control
.retries
= 1;
1666 control
= &bt_cb(skb
)->control
;
1668 control
->reqseq
= 0;
1669 control
->txseq
= chan
->next_tx_seq
;
1671 __pack_control(chan
, control
, skb
);
1673 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1674 u16 fcs
= crc16(0, (u8
*) skb
->data
, skb
->len
);
1675 put_unaligned_le16(fcs
, skb_put(skb
, L2CAP_FCS_SIZE
));
1678 l2cap_do_send(chan
, skb
);
1680 BT_DBG("Sent txseq %u", control
->txseq
);
1682 chan
->next_tx_seq
= __next_seq(chan
, chan
->next_tx_seq
);
1683 chan
->frames_sent
++;
1687 static int l2cap_ertm_send(struct l2cap_chan
*chan
)
1689 struct sk_buff
*skb
, *tx_skb
;
1690 struct l2cap_ctrl
*control
;
1693 BT_DBG("chan %p", chan
);
1695 if (chan
->state
!= BT_CONNECTED
)
1698 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
))
1701 while (chan
->tx_send_head
&&
1702 chan
->unacked_frames
< chan
->remote_tx_win
&&
1703 chan
->tx_state
== L2CAP_TX_STATE_XMIT
) {
1705 skb
= chan
->tx_send_head
;
1707 bt_cb(skb
)->control
.retries
= 1;
1708 control
= &bt_cb(skb
)->control
;
1710 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
))
1713 control
->reqseq
= chan
->buffer_seq
;
1714 chan
->last_acked_seq
= chan
->buffer_seq
;
1715 control
->txseq
= chan
->next_tx_seq
;
1717 __pack_control(chan
, control
, skb
);
1719 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1720 u16 fcs
= crc16(0, (u8
*) skb
->data
, skb
->len
);
1721 put_unaligned_le16(fcs
, skb_put(skb
, L2CAP_FCS_SIZE
));
1724 /* Clone after data has been modified. Data is assumed to be
1725 read-only (for locking purposes) on cloned sk_buffs.
1727 tx_skb
= skb_clone(skb
, GFP_KERNEL
);
1732 __set_retrans_timer(chan
);
1734 chan
->next_tx_seq
= __next_seq(chan
, chan
->next_tx_seq
);
1735 chan
->unacked_frames
++;
1736 chan
->frames_sent
++;
1739 if (skb_queue_is_last(&chan
->tx_q
, skb
))
1740 chan
->tx_send_head
= NULL
;
1742 chan
->tx_send_head
= skb_queue_next(&chan
->tx_q
, skb
);
1744 l2cap_do_send(chan
, tx_skb
);
1745 BT_DBG("Sent txseq %u", control
->txseq
);
1748 BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent
,
1749 chan
->unacked_frames
, skb_queue_len(&chan
->tx_q
));
1754 static void l2cap_ertm_resend(struct l2cap_chan
*chan
)
1756 struct l2cap_ctrl control
;
1757 struct sk_buff
*skb
;
1758 struct sk_buff
*tx_skb
;
1761 BT_DBG("chan %p", chan
);
1763 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
))
1766 while (chan
->retrans_list
.head
!= L2CAP_SEQ_LIST_CLEAR
) {
1767 seq
= l2cap_seq_list_pop(&chan
->retrans_list
);
1769 skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, seq
);
1771 BT_DBG("Error: Can't retransmit seq %d, frame missing",
1776 bt_cb(skb
)->control
.retries
++;
1777 control
= bt_cb(skb
)->control
;
1779 if (chan
->max_tx
!= 0 &&
1780 bt_cb(skb
)->control
.retries
> chan
->max_tx
) {
1781 BT_DBG("Retry limit exceeded (%d)", chan
->max_tx
);
1782 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
1783 l2cap_seq_list_clear(&chan
->retrans_list
);
1787 control
.reqseq
= chan
->buffer_seq
;
1788 if (test_and_clear_bit(CONN_SEND_FBIT
, &chan
->conn_state
))
1793 if (skb_cloned(skb
)) {
1794 /* Cloned sk_buffs are read-only, so we need a
1797 tx_skb
= skb_copy(skb
, GFP_ATOMIC
);
1799 tx_skb
= skb_clone(skb
, GFP_ATOMIC
);
1803 l2cap_seq_list_clear(&chan
->retrans_list
);
1807 /* Update skb contents */
1808 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
)) {
1809 put_unaligned_le32(__pack_extended_control(&control
),
1810 tx_skb
->data
+ L2CAP_HDR_SIZE
);
1812 put_unaligned_le16(__pack_enhanced_control(&control
),
1813 tx_skb
->data
+ L2CAP_HDR_SIZE
);
1816 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
1817 u16 fcs
= crc16(0, (u8
*) tx_skb
->data
, tx_skb
->len
);
1818 put_unaligned_le16(fcs
, skb_put(tx_skb
,
1822 l2cap_do_send(chan
, tx_skb
);
1824 BT_DBG("Resent txseq %d", control
.txseq
);
1826 chan
->last_acked_seq
= chan
->buffer_seq
;
1830 static void l2cap_retransmit(struct l2cap_chan
*chan
,
1831 struct l2cap_ctrl
*control
)
1833 BT_DBG("chan %p, control %p", chan
, control
);
1835 l2cap_seq_list_append(&chan
->retrans_list
, control
->reqseq
);
1836 l2cap_ertm_resend(chan
);
1839 static void l2cap_retransmit_all(struct l2cap_chan
*chan
,
1840 struct l2cap_ctrl
*control
)
1842 struct sk_buff
*skb
;
1844 BT_DBG("chan %p, control %p", chan
, control
);
1847 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
1849 l2cap_seq_list_clear(&chan
->retrans_list
);
1851 if (test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
))
1854 if (chan
->unacked_frames
) {
1855 skb_queue_walk(&chan
->tx_q
, skb
) {
1856 if (bt_cb(skb
)->control
.txseq
== control
->reqseq
||
1857 skb
== chan
->tx_send_head
)
1861 skb_queue_walk_from(&chan
->tx_q
, skb
) {
1862 if (skb
== chan
->tx_send_head
)
1865 l2cap_seq_list_append(&chan
->retrans_list
,
1866 bt_cb(skb
)->control
.txseq
);
1869 l2cap_ertm_resend(chan
);
1873 static void l2cap_send_ack(struct l2cap_chan
*chan
)
1875 struct l2cap_ctrl control
;
1876 u16 frames_to_ack
= __seq_offset(chan
, chan
->buffer_seq
,
1877 chan
->last_acked_seq
);
1880 BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
1881 chan
, chan
->last_acked_seq
, chan
->buffer_seq
);
1883 memset(&control
, 0, sizeof(control
));
1886 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
) &&
1887 chan
->rx_state
== L2CAP_RX_STATE_RECV
) {
1888 __clear_ack_timer(chan
);
1889 control
.super
= L2CAP_SUPER_RNR
;
1890 control
.reqseq
= chan
->buffer_seq
;
1891 l2cap_send_sframe(chan
, &control
);
1893 if (!test_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
)) {
1894 l2cap_ertm_send(chan
);
1895 /* If any i-frames were sent, they included an ack */
1896 if (chan
->buffer_seq
== chan
->last_acked_seq
)
1900 /* Ack now if the window is 3/4ths full.
1901 * Calculate without mul or div
1903 threshold
= chan
->ack_win
;
1904 threshold
+= threshold
<< 1;
1907 BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack
,
1910 if (frames_to_ack
>= threshold
) {
1911 __clear_ack_timer(chan
);
1912 control
.super
= L2CAP_SUPER_RR
;
1913 control
.reqseq
= chan
->buffer_seq
;
1914 l2cap_send_sframe(chan
, &control
);
1919 __set_ack_timer(chan
);
1923 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan
*chan
,
1924 struct msghdr
*msg
, int len
,
1925 int count
, struct sk_buff
*skb
)
1927 struct l2cap_conn
*conn
= chan
->conn
;
1928 struct sk_buff
**frag
;
1931 if (memcpy_fromiovec(skb_put(skb
, count
), msg
->msg_iov
, count
))
1937 /* Continuation fragments (no L2CAP header) */
1938 frag
= &skb_shinfo(skb
)->frag_list
;
1940 struct sk_buff
*tmp
;
1942 count
= min_t(unsigned int, conn
->mtu
, len
);
1944 tmp
= chan
->ops
->alloc_skb(chan
, count
,
1945 msg
->msg_flags
& MSG_DONTWAIT
);
1947 return PTR_ERR(tmp
);
1951 if (memcpy_fromiovec(skb_put(*frag
, count
), msg
->msg_iov
, count
))
1954 (*frag
)->priority
= skb
->priority
;
1959 skb
->len
+= (*frag
)->len
;
1960 skb
->data_len
+= (*frag
)->len
;
1962 frag
= &(*frag
)->next
;
1968 static struct sk_buff
*l2cap_create_connless_pdu(struct l2cap_chan
*chan
,
1969 struct msghdr
*msg
, size_t len
,
1972 struct l2cap_conn
*conn
= chan
->conn
;
1973 struct sk_buff
*skb
;
1974 int err
, count
, hlen
= L2CAP_HDR_SIZE
+ L2CAP_PSMLEN_SIZE
;
1975 struct l2cap_hdr
*lh
;
1977 BT_DBG("chan %p len %zu priority %u", chan
, len
, priority
);
1979 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1981 skb
= chan
->ops
->alloc_skb(chan
, count
+ hlen
,
1982 msg
->msg_flags
& MSG_DONTWAIT
);
1986 skb
->priority
= priority
;
1988 /* Create L2CAP header */
1989 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1990 lh
->cid
= cpu_to_le16(chan
->dcid
);
1991 lh
->len
= cpu_to_le16(len
+ L2CAP_PSMLEN_SIZE
);
1992 put_unaligned(chan
->psm
, skb_put(skb
, L2CAP_PSMLEN_SIZE
));
1994 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
1995 if (unlikely(err
< 0)) {
1997 return ERR_PTR(err
);
2002 static struct sk_buff
*l2cap_create_basic_pdu(struct l2cap_chan
*chan
,
2003 struct msghdr
*msg
, size_t len
,
2006 struct l2cap_conn
*conn
= chan
->conn
;
2007 struct sk_buff
*skb
;
2009 struct l2cap_hdr
*lh
;
2011 BT_DBG("chan %p len %zu", chan
, len
);
2013 count
= min_t(unsigned int, (conn
->mtu
- L2CAP_HDR_SIZE
), len
);
2015 skb
= chan
->ops
->alloc_skb(chan
, count
+ L2CAP_HDR_SIZE
,
2016 msg
->msg_flags
& MSG_DONTWAIT
);
2020 skb
->priority
= priority
;
2022 /* Create L2CAP header */
2023 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
2024 lh
->cid
= cpu_to_le16(chan
->dcid
);
2025 lh
->len
= cpu_to_le16(len
);
2027 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
2028 if (unlikely(err
< 0)) {
2030 return ERR_PTR(err
);
2035 static struct sk_buff
*l2cap_create_iframe_pdu(struct l2cap_chan
*chan
,
2036 struct msghdr
*msg
, size_t len
,
2039 struct l2cap_conn
*conn
= chan
->conn
;
2040 struct sk_buff
*skb
;
2041 int err
, count
, hlen
;
2042 struct l2cap_hdr
*lh
;
2044 BT_DBG("chan %p len %zu", chan
, len
);
2047 return ERR_PTR(-ENOTCONN
);
2049 hlen
= __ertm_hdr_size(chan
);
2052 hlen
+= L2CAP_SDULEN_SIZE
;
2054 if (chan
->fcs
== L2CAP_FCS_CRC16
)
2055 hlen
+= L2CAP_FCS_SIZE
;
2057 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
2059 skb
= chan
->ops
->alloc_skb(chan
, count
+ hlen
,
2060 msg
->msg_flags
& MSG_DONTWAIT
);
2064 /* Create L2CAP header */
2065 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
2066 lh
->cid
= cpu_to_le16(chan
->dcid
);
2067 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
2069 /* Control header is populated later */
2070 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
2071 put_unaligned_le32(0, skb_put(skb
, L2CAP_EXT_CTRL_SIZE
));
2073 put_unaligned_le16(0, skb_put(skb
, L2CAP_ENH_CTRL_SIZE
));
2076 put_unaligned_le16(sdulen
, skb_put(skb
, L2CAP_SDULEN_SIZE
));
2078 err
= l2cap_skbuff_fromiovec(chan
, msg
, len
, count
, skb
);
2079 if (unlikely(err
< 0)) {
2081 return ERR_PTR(err
);
2084 bt_cb(skb
)->control
.fcs
= chan
->fcs
;
2085 bt_cb(skb
)->control
.retries
= 0;
2089 static int l2cap_segment_sdu(struct l2cap_chan
*chan
,
2090 struct sk_buff_head
*seg_queue
,
2091 struct msghdr
*msg
, size_t len
)
2093 struct sk_buff
*skb
;
2098 BT_DBG("chan %p, msg %p, len %zu", chan
, msg
, len
);
2100 /* It is critical that ERTM PDUs fit in a single HCI fragment,
2101 * so fragmented skbs are not used. The HCI layer's handling
2102 * of fragmented skbs is not compatible with ERTM's queueing.
2105 /* PDU size is derived from the HCI MTU */
2106 pdu_len
= chan
->conn
->mtu
;
2108 pdu_len
= min_t(size_t, pdu_len
, L2CAP_BREDR_MAX_PAYLOAD
);
2110 /* Adjust for largest possible L2CAP overhead. */
2112 pdu_len
-= L2CAP_FCS_SIZE
;
2114 pdu_len
-= __ertm_hdr_size(chan
);
2116 /* Remote device may have requested smaller PDUs */
2117 pdu_len
= min_t(size_t, pdu_len
, chan
->remote_mps
);
2119 if (len
<= pdu_len
) {
2120 sar
= L2CAP_SAR_UNSEGMENTED
;
2124 sar
= L2CAP_SAR_START
;
2126 pdu_len
-= L2CAP_SDULEN_SIZE
;
2130 skb
= l2cap_create_iframe_pdu(chan
, msg
, pdu_len
, sdu_len
);
2133 __skb_queue_purge(seg_queue
);
2134 return PTR_ERR(skb
);
2137 bt_cb(skb
)->control
.sar
= sar
;
2138 __skb_queue_tail(seg_queue
, skb
);
2143 pdu_len
+= L2CAP_SDULEN_SIZE
;
2146 if (len
<= pdu_len
) {
2147 sar
= L2CAP_SAR_END
;
2150 sar
= L2CAP_SAR_CONTINUE
;
2157 int l2cap_chan_send(struct l2cap_chan
*chan
, struct msghdr
*msg
, size_t len
,
2160 struct sk_buff
*skb
;
2162 struct sk_buff_head seg_queue
;
2164 /* Connectionless channel */
2165 if (chan
->chan_type
== L2CAP_CHAN_CONN_LESS
) {
2166 skb
= l2cap_create_connless_pdu(chan
, msg
, len
, priority
);
2168 return PTR_ERR(skb
);
2170 l2cap_do_send(chan
, skb
);
2174 switch (chan
->mode
) {
2175 case L2CAP_MODE_BASIC
:
2176 /* Check outgoing MTU */
2177 if (len
> chan
->omtu
)
2180 /* Create a basic PDU */
2181 skb
= l2cap_create_basic_pdu(chan
, msg
, len
, priority
);
2183 return PTR_ERR(skb
);
2185 l2cap_do_send(chan
, skb
);
2189 case L2CAP_MODE_ERTM
:
2190 case L2CAP_MODE_STREAMING
:
2191 /* Check outgoing MTU */
2192 if (len
> chan
->omtu
) {
2197 __skb_queue_head_init(&seg_queue
);
2199 /* Do segmentation before calling in to the state machine,
2200 * since it's possible to block while waiting for memory
2203 err
= l2cap_segment_sdu(chan
, &seg_queue
, msg
, len
);
2205 /* The channel could have been closed while segmenting,
2206 * check that it is still connected.
2208 if (chan
->state
!= BT_CONNECTED
) {
2209 __skb_queue_purge(&seg_queue
);
2216 if (chan
->mode
== L2CAP_MODE_ERTM
)
2217 l2cap_tx(chan
, NULL
, &seg_queue
, L2CAP_EV_DATA_REQUEST
);
2219 l2cap_streaming_send(chan
, &seg_queue
);
2223 /* If the skbs were not queued for sending, they'll still be in
2224 * seg_queue and need to be purged.
2226 __skb_queue_purge(&seg_queue
);
2230 BT_DBG("bad state %1.1x", chan
->mode
);
2237 static void l2cap_send_srej(struct l2cap_chan
*chan
, u16 txseq
)
2239 struct l2cap_ctrl control
;
2242 BT_DBG("chan %p, txseq %u", chan
, txseq
);
2244 memset(&control
, 0, sizeof(control
));
2246 control
.super
= L2CAP_SUPER_SREJ
;
2248 for (seq
= chan
->expected_tx_seq
; seq
!= txseq
;
2249 seq
= __next_seq(chan
, seq
)) {
2250 if (!l2cap_ertm_seq_in_queue(&chan
->srej_q
, seq
)) {
2251 control
.reqseq
= seq
;
2252 l2cap_send_sframe(chan
, &control
);
2253 l2cap_seq_list_append(&chan
->srej_list
, seq
);
2257 chan
->expected_tx_seq
= __next_seq(chan
, txseq
);
2260 static void l2cap_send_srej_tail(struct l2cap_chan
*chan
)
2262 struct l2cap_ctrl control
;
2264 BT_DBG("chan %p", chan
);
2266 if (chan
->srej_list
.tail
== L2CAP_SEQ_LIST_CLEAR
)
2269 memset(&control
, 0, sizeof(control
));
2271 control
.super
= L2CAP_SUPER_SREJ
;
2272 control
.reqseq
= chan
->srej_list
.tail
;
2273 l2cap_send_sframe(chan
, &control
);
2276 static void l2cap_send_srej_list(struct l2cap_chan
*chan
, u16 txseq
)
2278 struct l2cap_ctrl control
;
2282 BT_DBG("chan %p, txseq %u", chan
, txseq
);
2284 memset(&control
, 0, sizeof(control
));
2286 control
.super
= L2CAP_SUPER_SREJ
;
2288 /* Capture initial list head to allow only one pass through the list. */
2289 initial_head
= chan
->srej_list
.head
;
2292 seq
= l2cap_seq_list_pop(&chan
->srej_list
);
2293 if (seq
== txseq
|| seq
== L2CAP_SEQ_LIST_CLEAR
)
2296 control
.reqseq
= seq
;
2297 l2cap_send_sframe(chan
, &control
);
2298 l2cap_seq_list_append(&chan
->srej_list
, seq
);
2299 } while (chan
->srej_list
.head
!= initial_head
);
2302 static void l2cap_process_reqseq(struct l2cap_chan
*chan
, u16 reqseq
)
2304 struct sk_buff
*acked_skb
;
2307 BT_DBG("chan %p, reqseq %u", chan
, reqseq
);
2309 if (chan
->unacked_frames
== 0 || reqseq
== chan
->expected_ack_seq
)
2312 BT_DBG("expected_ack_seq %u, unacked_frames %u",
2313 chan
->expected_ack_seq
, chan
->unacked_frames
);
2315 for (ackseq
= chan
->expected_ack_seq
; ackseq
!= reqseq
;
2316 ackseq
= __next_seq(chan
, ackseq
)) {
2318 acked_skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, ackseq
);
2320 skb_unlink(acked_skb
, &chan
->tx_q
);
2321 kfree_skb(acked_skb
);
2322 chan
->unacked_frames
--;
2326 chan
->expected_ack_seq
= reqseq
;
2328 if (chan
->unacked_frames
== 0)
2329 __clear_retrans_timer(chan
);
2331 BT_DBG("unacked_frames %u", chan
->unacked_frames
);
2334 static void l2cap_abort_rx_srej_sent(struct l2cap_chan
*chan
)
2336 BT_DBG("chan %p", chan
);
2338 chan
->expected_tx_seq
= chan
->buffer_seq
;
2339 l2cap_seq_list_clear(&chan
->srej_list
);
2340 skb_queue_purge(&chan
->srej_q
);
2341 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
2344 static void l2cap_tx_state_xmit(struct l2cap_chan
*chan
,
2345 struct l2cap_ctrl
*control
,
2346 struct sk_buff_head
*skbs
, u8 event
)
2348 BT_DBG("chan %p, control %p, skbs %p, event %d", chan
, control
, skbs
,
2352 case L2CAP_EV_DATA_REQUEST
:
2353 if (chan
->tx_send_head
== NULL
)
2354 chan
->tx_send_head
= skb_peek(skbs
);
2356 skb_queue_splice_tail_init(skbs
, &chan
->tx_q
);
2357 l2cap_ertm_send(chan
);
2359 case L2CAP_EV_LOCAL_BUSY_DETECTED
:
2360 BT_DBG("Enter LOCAL_BUSY");
2361 set_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2363 if (chan
->rx_state
== L2CAP_RX_STATE_SREJ_SENT
) {
2364 /* The SREJ_SENT state must be aborted if we are to
2365 * enter the LOCAL_BUSY state.
2367 l2cap_abort_rx_srej_sent(chan
);
2370 l2cap_send_ack(chan
);
2373 case L2CAP_EV_LOCAL_BUSY_CLEAR
:
2374 BT_DBG("Exit LOCAL_BUSY");
2375 clear_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2377 if (test_bit(CONN_RNR_SENT
, &chan
->conn_state
)) {
2378 struct l2cap_ctrl local_control
;
2380 memset(&local_control
, 0, sizeof(local_control
));
2381 local_control
.sframe
= 1;
2382 local_control
.super
= L2CAP_SUPER_RR
;
2383 local_control
.poll
= 1;
2384 local_control
.reqseq
= chan
->buffer_seq
;
2385 l2cap_send_sframe(chan
, &local_control
);
2387 chan
->retry_count
= 1;
2388 __set_monitor_timer(chan
);
2389 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2392 case L2CAP_EV_RECV_REQSEQ_AND_FBIT
:
2393 l2cap_process_reqseq(chan
, control
->reqseq
);
2395 case L2CAP_EV_EXPLICIT_POLL
:
2396 l2cap_send_rr_or_rnr(chan
, 1);
2397 chan
->retry_count
= 1;
2398 __set_monitor_timer(chan
);
2399 __clear_ack_timer(chan
);
2400 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2402 case L2CAP_EV_RETRANS_TO
:
2403 l2cap_send_rr_or_rnr(chan
, 1);
2404 chan
->retry_count
= 1;
2405 __set_monitor_timer(chan
);
2406 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2408 case L2CAP_EV_RECV_FBIT
:
2409 /* Nothing to process */
2416 static void l2cap_tx_state_wait_f(struct l2cap_chan
*chan
,
2417 struct l2cap_ctrl
*control
,
2418 struct sk_buff_head
*skbs
, u8 event
)
2420 BT_DBG("chan %p, control %p, skbs %p, event %d", chan
, control
, skbs
,
2424 case L2CAP_EV_DATA_REQUEST
:
2425 if (chan
->tx_send_head
== NULL
)
2426 chan
->tx_send_head
= skb_peek(skbs
);
2427 /* Queue data, but don't send. */
2428 skb_queue_splice_tail_init(skbs
, &chan
->tx_q
);
2430 case L2CAP_EV_LOCAL_BUSY_DETECTED
:
2431 BT_DBG("Enter LOCAL_BUSY");
2432 set_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2434 if (chan
->rx_state
== L2CAP_RX_STATE_SREJ_SENT
) {
2435 /* The SREJ_SENT state must be aborted if we are to
2436 * enter the LOCAL_BUSY state.
2438 l2cap_abort_rx_srej_sent(chan
);
2441 l2cap_send_ack(chan
);
2444 case L2CAP_EV_LOCAL_BUSY_CLEAR
:
2445 BT_DBG("Exit LOCAL_BUSY");
2446 clear_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
);
2448 if (test_bit(CONN_RNR_SENT
, &chan
->conn_state
)) {
2449 struct l2cap_ctrl local_control
;
2450 memset(&local_control
, 0, sizeof(local_control
));
2451 local_control
.sframe
= 1;
2452 local_control
.super
= L2CAP_SUPER_RR
;
2453 local_control
.poll
= 1;
2454 local_control
.reqseq
= chan
->buffer_seq
;
2455 l2cap_send_sframe(chan
, &local_control
);
2457 chan
->retry_count
= 1;
2458 __set_monitor_timer(chan
);
2459 chan
->tx_state
= L2CAP_TX_STATE_WAIT_F
;
2462 case L2CAP_EV_RECV_REQSEQ_AND_FBIT
:
2463 l2cap_process_reqseq(chan
, control
->reqseq
);
2467 case L2CAP_EV_RECV_FBIT
:
2468 if (control
&& control
->final
) {
2469 __clear_monitor_timer(chan
);
2470 if (chan
->unacked_frames
> 0)
2471 __set_retrans_timer(chan
);
2472 chan
->retry_count
= 0;
2473 chan
->tx_state
= L2CAP_TX_STATE_XMIT
;
2474 BT_DBG("recv fbit tx_state 0x2.2%x", chan
->tx_state
);
2477 case L2CAP_EV_EXPLICIT_POLL
:
2480 case L2CAP_EV_MONITOR_TO
:
2481 if (chan
->max_tx
== 0 || chan
->retry_count
< chan
->max_tx
) {
2482 l2cap_send_rr_or_rnr(chan
, 1);
2483 __set_monitor_timer(chan
);
2484 chan
->retry_count
++;
2486 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNABORTED
);
2494 static void l2cap_tx(struct l2cap_chan
*chan
, struct l2cap_ctrl
*control
,
2495 struct sk_buff_head
*skbs
, u8 event
)
2497 BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
2498 chan
, control
, skbs
, event
, chan
->tx_state
);
2500 switch (chan
->tx_state
) {
2501 case L2CAP_TX_STATE_XMIT
:
2502 l2cap_tx_state_xmit(chan
, control
, skbs
, event
);
2504 case L2CAP_TX_STATE_WAIT_F
:
2505 l2cap_tx_state_wait_f(chan
, control
, skbs
, event
);
2513 static void l2cap_pass_to_tx(struct l2cap_chan
*chan
,
2514 struct l2cap_ctrl
*control
)
2516 BT_DBG("chan %p, control %p", chan
, control
);
2517 l2cap_tx(chan
, control
, NULL
, L2CAP_EV_RECV_REQSEQ_AND_FBIT
);
2520 static void l2cap_pass_to_tx_fbit(struct l2cap_chan
*chan
,
2521 struct l2cap_ctrl
*control
)
2523 BT_DBG("chan %p, control %p", chan
, control
);
2524 l2cap_tx(chan
, control
, NULL
, L2CAP_EV_RECV_FBIT
);
2527 /* Copy frame to all raw sockets on that connection */
2528 static void l2cap_raw_recv(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2530 struct sk_buff
*nskb
;
2531 struct l2cap_chan
*chan
;
2533 BT_DBG("conn %p", conn
);
2535 mutex_lock(&conn
->chan_lock
);
2537 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
2538 struct sock
*sk
= chan
->sk
;
2539 if (chan
->chan_type
!= L2CAP_CHAN_RAW
)
2542 /* Don't send frame to the socket it came from */
2545 nskb
= skb_clone(skb
, GFP_ATOMIC
);
2549 if (chan
->ops
->recv(chan
, nskb
))
2553 mutex_unlock(&conn
->chan_lock
);
2556 /* ---- L2CAP signalling commands ---- */
2557 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
, u8 code
,
2558 u8 ident
, u16 dlen
, void *data
)
2560 struct sk_buff
*skb
, **frag
;
2561 struct l2cap_cmd_hdr
*cmd
;
2562 struct l2cap_hdr
*lh
;
2565 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
2566 conn
, code
, ident
, dlen
);
2568 len
= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
+ dlen
;
2569 count
= min_t(unsigned int, conn
->mtu
, len
);
2571 skb
= bt_skb_alloc(count
, GFP_ATOMIC
);
2575 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
2576 lh
->len
= cpu_to_le16(L2CAP_CMD_HDR_SIZE
+ dlen
);
2578 if (conn
->hcon
->type
== LE_LINK
)
2579 lh
->cid
= __constant_cpu_to_le16(L2CAP_CID_LE_SIGNALING
);
2581 lh
->cid
= __constant_cpu_to_le16(L2CAP_CID_SIGNALING
);
2583 cmd
= (struct l2cap_cmd_hdr
*) skb_put(skb
, L2CAP_CMD_HDR_SIZE
);
2586 cmd
->len
= cpu_to_le16(dlen
);
2589 count
-= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
;
2590 memcpy(skb_put(skb
, count
), data
, count
);
2596 /* Continuation fragments (no L2CAP header) */
2597 frag
= &skb_shinfo(skb
)->frag_list
;
2599 count
= min_t(unsigned int, conn
->mtu
, len
);
2601 *frag
= bt_skb_alloc(count
, GFP_ATOMIC
);
2605 memcpy(skb_put(*frag
, count
), data
, count
);
2610 frag
= &(*frag
)->next
;
2620 static inline int l2cap_get_conf_opt(void **ptr
, int *type
, int *olen
, unsigned long *val
)
2622 struct l2cap_conf_opt
*opt
= *ptr
;
2625 len
= L2CAP_CONF_OPT_SIZE
+ opt
->len
;
2633 *val
= *((u8
*) opt
->val
);
2637 *val
= get_unaligned_le16(opt
->val
);
2641 *val
= get_unaligned_le32(opt
->val
);
2645 *val
= (unsigned long) opt
->val
;
2649 BT_DBG("type 0x%2.2x len %u val 0x%lx", *type
, opt
->len
, *val
);
2653 static void l2cap_add_conf_opt(void **ptr
, u8 type
, u8 len
, unsigned long val
)
2655 struct l2cap_conf_opt
*opt
= *ptr
;
2657 BT_DBG("type 0x%2.2x len %u val 0x%lx", type
, len
, val
);
2664 *((u8
*) opt
->val
) = val
;
2668 put_unaligned_le16(val
, opt
->val
);
2672 put_unaligned_le32(val
, opt
->val
);
2676 memcpy(opt
->val
, (void *) val
, len
);
2680 *ptr
+= L2CAP_CONF_OPT_SIZE
+ len
;
2683 static void l2cap_add_opt_efs(void **ptr
, struct l2cap_chan
*chan
)
2685 struct l2cap_conf_efs efs
;
2687 switch (chan
->mode
) {
2688 case L2CAP_MODE_ERTM
:
2689 efs
.id
= chan
->local_id
;
2690 efs
.stype
= chan
->local_stype
;
2691 efs
.msdu
= cpu_to_le16(chan
->local_msdu
);
2692 efs
.sdu_itime
= cpu_to_le32(chan
->local_sdu_itime
);
2693 efs
.acc_lat
= __constant_cpu_to_le32(L2CAP_DEFAULT_ACC_LAT
);
2694 efs
.flush_to
= __constant_cpu_to_le32(L2CAP_DEFAULT_FLUSH_TO
);
2697 case L2CAP_MODE_STREAMING
:
2699 efs
.stype
= L2CAP_SERV_BESTEFFORT
;
2700 efs
.msdu
= cpu_to_le16(chan
->local_msdu
);
2701 efs
.sdu_itime
= cpu_to_le32(chan
->local_sdu_itime
);
2710 l2cap_add_conf_opt(ptr
, L2CAP_CONF_EFS
, sizeof(efs
),
2711 (unsigned long) &efs
);
2714 static void l2cap_ack_timeout(struct work_struct
*work
)
2716 struct l2cap_chan
*chan
= container_of(work
, struct l2cap_chan
,
2720 BT_DBG("chan %p", chan
);
2722 l2cap_chan_lock(chan
);
2724 frames_to_ack
= __seq_offset(chan
, chan
->buffer_seq
,
2725 chan
->last_acked_seq
);
2728 l2cap_send_rr_or_rnr(chan
, 0);
2730 l2cap_chan_unlock(chan
);
2731 l2cap_chan_put(chan
);
2734 int l2cap_ertm_init(struct l2cap_chan
*chan
)
2738 chan
->next_tx_seq
= 0;
2739 chan
->expected_tx_seq
= 0;
2740 chan
->expected_ack_seq
= 0;
2741 chan
->unacked_frames
= 0;
2742 chan
->buffer_seq
= 0;
2743 chan
->frames_sent
= 0;
2744 chan
->last_acked_seq
= 0;
2746 chan
->sdu_last_frag
= NULL
;
2749 skb_queue_head_init(&chan
->tx_q
);
2751 if (chan
->mode
!= L2CAP_MODE_ERTM
)
2754 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
2755 chan
->tx_state
= L2CAP_TX_STATE_XMIT
;
2757 INIT_DELAYED_WORK(&chan
->retrans_timer
, l2cap_retrans_timeout
);
2758 INIT_DELAYED_WORK(&chan
->monitor_timer
, l2cap_monitor_timeout
);
2759 INIT_DELAYED_WORK(&chan
->ack_timer
, l2cap_ack_timeout
);
2761 skb_queue_head_init(&chan
->srej_q
);
2763 err
= l2cap_seq_list_init(&chan
->srej_list
, chan
->tx_win
);
2767 err
= l2cap_seq_list_init(&chan
->retrans_list
, chan
->remote_tx_win
);
2769 l2cap_seq_list_free(&chan
->srej_list
);
2774 static inline __u8
l2cap_select_mode(__u8 mode
, __u16 remote_feat_mask
)
2777 case L2CAP_MODE_STREAMING
:
2778 case L2CAP_MODE_ERTM
:
2779 if (l2cap_mode_supported(mode
, remote_feat_mask
))
2783 return L2CAP_MODE_BASIC
;
2787 static inline bool __l2cap_ews_supported(struct l2cap_chan
*chan
)
2789 return enable_hs
&& chan
->conn
->feat_mask
& L2CAP_FEAT_EXT_WINDOW
;
2792 static inline bool __l2cap_efs_supported(struct l2cap_chan
*chan
)
2794 return enable_hs
&& chan
->conn
->feat_mask
& L2CAP_FEAT_EXT_FLOW
;
2797 static inline void l2cap_txwin_setup(struct l2cap_chan
*chan
)
2799 if (chan
->tx_win
> L2CAP_DEFAULT_TX_WINDOW
&&
2800 __l2cap_ews_supported(chan
)) {
2801 /* use extended control field */
2802 set_bit(FLAG_EXT_CTRL
, &chan
->flags
);
2803 chan
->tx_win_max
= L2CAP_DEFAULT_EXT_WINDOW
;
2805 chan
->tx_win
= min_t(u16
, chan
->tx_win
,
2806 L2CAP_DEFAULT_TX_WINDOW
);
2807 chan
->tx_win_max
= L2CAP_DEFAULT_TX_WINDOW
;
2809 chan
->ack_win
= chan
->tx_win
;
2812 static int l2cap_build_conf_req(struct l2cap_chan
*chan
, void *data
)
2814 struct l2cap_conf_req
*req
= data
;
2815 struct l2cap_conf_rfc rfc
= { .mode
= chan
->mode
};
2816 void *ptr
= req
->data
;
2819 BT_DBG("chan %p", chan
);
2821 if (chan
->num_conf_req
|| chan
->num_conf_rsp
)
2824 switch (chan
->mode
) {
2825 case L2CAP_MODE_STREAMING
:
2826 case L2CAP_MODE_ERTM
:
2827 if (test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
))
2830 if (__l2cap_efs_supported(chan
))
2831 set_bit(FLAG_EFS_ENABLE
, &chan
->flags
);
2835 chan
->mode
= l2cap_select_mode(rfc
.mode
, chan
->conn
->feat_mask
);
2840 if (chan
->imtu
!= L2CAP_DEFAULT_MTU
)
2841 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
2843 switch (chan
->mode
) {
2844 case L2CAP_MODE_BASIC
:
2845 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_ERTM
) &&
2846 !(chan
->conn
->feat_mask
& L2CAP_FEAT_STREAMING
))
2849 rfc
.mode
= L2CAP_MODE_BASIC
;
2851 rfc
.max_transmit
= 0;
2852 rfc
.retrans_timeout
= 0;
2853 rfc
.monitor_timeout
= 0;
2854 rfc
.max_pdu_size
= 0;
2856 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
2857 (unsigned long) &rfc
);
2860 case L2CAP_MODE_ERTM
:
2861 rfc
.mode
= L2CAP_MODE_ERTM
;
2862 rfc
.max_transmit
= chan
->max_tx
;
2863 rfc
.retrans_timeout
= 0;
2864 rfc
.monitor_timeout
= 0;
2866 size
= min_t(u16
, L2CAP_DEFAULT_MAX_PDU_SIZE
, chan
->conn
->mtu
-
2867 L2CAP_EXT_HDR_SIZE
-
2870 rfc
.max_pdu_size
= cpu_to_le16(size
);
2872 l2cap_txwin_setup(chan
);
2874 rfc
.txwin_size
= min_t(u16
, chan
->tx_win
,
2875 L2CAP_DEFAULT_TX_WINDOW
);
2877 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
2878 (unsigned long) &rfc
);
2880 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
))
2881 l2cap_add_opt_efs(&ptr
, chan
);
2883 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
2886 if (chan
->fcs
== L2CAP_FCS_NONE
||
2887 test_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
)) {
2888 chan
->fcs
= L2CAP_FCS_NONE
;
2889 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, chan
->fcs
);
2892 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
2893 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EWS
, 2,
2897 case L2CAP_MODE_STREAMING
:
2898 l2cap_txwin_setup(chan
);
2899 rfc
.mode
= L2CAP_MODE_STREAMING
;
2901 rfc
.max_transmit
= 0;
2902 rfc
.retrans_timeout
= 0;
2903 rfc
.monitor_timeout
= 0;
2905 size
= min_t(u16
, L2CAP_DEFAULT_MAX_PDU_SIZE
, chan
->conn
->mtu
-
2906 L2CAP_EXT_HDR_SIZE
-
2909 rfc
.max_pdu_size
= cpu_to_le16(size
);
2911 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
2912 (unsigned long) &rfc
);
2914 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
))
2915 l2cap_add_opt_efs(&ptr
, chan
);
2917 if (!(chan
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
2920 if (chan
->fcs
== L2CAP_FCS_NONE
||
2921 test_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
)) {
2922 chan
->fcs
= L2CAP_FCS_NONE
;
2923 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, chan
->fcs
);
2928 req
->dcid
= cpu_to_le16(chan
->dcid
);
2929 req
->flags
= __constant_cpu_to_le16(0);
2934 static int l2cap_parse_conf_req(struct l2cap_chan
*chan
, void *data
)
2936 struct l2cap_conf_rsp
*rsp
= data
;
2937 void *ptr
= rsp
->data
;
2938 void *req
= chan
->conf_req
;
2939 int len
= chan
->conf_len
;
2940 int type
, hint
, olen
;
2942 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
2943 struct l2cap_conf_efs efs
;
2945 u16 mtu
= L2CAP_DEFAULT_MTU
;
2946 u16 result
= L2CAP_CONF_SUCCESS
;
2949 BT_DBG("chan %p", chan
);
2951 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2952 len
-= l2cap_get_conf_opt(&req
, &type
, &olen
, &val
);
2954 hint
= type
& L2CAP_CONF_HINT
;
2955 type
&= L2CAP_CONF_MASK
;
2958 case L2CAP_CONF_MTU
:
2962 case L2CAP_CONF_FLUSH_TO
:
2963 chan
->flush_to
= val
;
2966 case L2CAP_CONF_QOS
:
2969 case L2CAP_CONF_RFC
:
2970 if (olen
== sizeof(rfc
))
2971 memcpy(&rfc
, (void *) val
, olen
);
2974 case L2CAP_CONF_FCS
:
2975 if (val
== L2CAP_FCS_NONE
)
2976 set_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
);
2979 case L2CAP_CONF_EFS
:
2981 if (olen
== sizeof(efs
))
2982 memcpy(&efs
, (void *) val
, olen
);
2985 case L2CAP_CONF_EWS
:
2987 return -ECONNREFUSED
;
2989 set_bit(FLAG_EXT_CTRL
, &chan
->flags
);
2990 set_bit(CONF_EWS_RECV
, &chan
->conf_state
);
2991 chan
->tx_win_max
= L2CAP_DEFAULT_EXT_WINDOW
;
2992 chan
->remote_tx_win
= val
;
2999 result
= L2CAP_CONF_UNKNOWN
;
3000 *((u8
*) ptr
++) = type
;
3005 if (chan
->num_conf_rsp
|| chan
->num_conf_req
> 1)
3008 switch (chan
->mode
) {
3009 case L2CAP_MODE_STREAMING
:
3010 case L2CAP_MODE_ERTM
:
3011 if (!test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
)) {
3012 chan
->mode
= l2cap_select_mode(rfc
.mode
,
3013 chan
->conn
->feat_mask
);
3018 if (__l2cap_efs_supported(chan
))
3019 set_bit(FLAG_EFS_ENABLE
, &chan
->flags
);
3021 return -ECONNREFUSED
;
3024 if (chan
->mode
!= rfc
.mode
)
3025 return -ECONNREFUSED
;
3031 if (chan
->mode
!= rfc
.mode
) {
3032 result
= L2CAP_CONF_UNACCEPT
;
3033 rfc
.mode
= chan
->mode
;
3035 if (chan
->num_conf_rsp
== 1)
3036 return -ECONNREFUSED
;
3038 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
3039 sizeof(rfc
), (unsigned long) &rfc
);
3042 if (result
== L2CAP_CONF_SUCCESS
) {
3043 /* Configure output options and let the other side know
3044 * which ones we don't like. */
3046 if (mtu
< L2CAP_DEFAULT_MIN_MTU
)
3047 result
= L2CAP_CONF_UNACCEPT
;
3050 set_bit(CONF_MTU_DONE
, &chan
->conf_state
);
3052 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->omtu
);
3055 if (chan
->local_stype
!= L2CAP_SERV_NOTRAFIC
&&
3056 efs
.stype
!= L2CAP_SERV_NOTRAFIC
&&
3057 efs
.stype
!= chan
->local_stype
) {
3059 result
= L2CAP_CONF_UNACCEPT
;
3061 if (chan
->num_conf_req
>= 1)
3062 return -ECONNREFUSED
;
3064 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
3066 (unsigned long) &efs
);
3068 /* Send PENDING Conf Rsp */
3069 result
= L2CAP_CONF_PENDING
;
3070 set_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
3075 case L2CAP_MODE_BASIC
:
3076 chan
->fcs
= L2CAP_FCS_NONE
;
3077 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
3080 case L2CAP_MODE_ERTM
:
3081 if (!test_bit(CONF_EWS_RECV
, &chan
->conf_state
))
3082 chan
->remote_tx_win
= rfc
.txwin_size
;
3084 rfc
.txwin_size
= L2CAP_DEFAULT_TX_WINDOW
;
3086 chan
->remote_max_tx
= rfc
.max_transmit
;
3088 size
= min_t(u16
, le16_to_cpu(rfc
.max_pdu_size
),
3090 L2CAP_EXT_HDR_SIZE
-
3093 rfc
.max_pdu_size
= cpu_to_le16(size
);
3094 chan
->remote_mps
= size
;
3096 rfc
.retrans_timeout
=
3097 __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO
);
3098 rfc
.monitor_timeout
=
3099 __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO
);
3101 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
3103 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
3104 sizeof(rfc
), (unsigned long) &rfc
);
3106 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
)) {
3107 chan
->remote_id
= efs
.id
;
3108 chan
->remote_stype
= efs
.stype
;
3109 chan
->remote_msdu
= le16_to_cpu(efs
.msdu
);
3110 chan
->remote_flush_to
=
3111 le32_to_cpu(efs
.flush_to
);
3112 chan
->remote_acc_lat
=
3113 le32_to_cpu(efs
.acc_lat
);
3114 chan
->remote_sdu_itime
=
3115 le32_to_cpu(efs
.sdu_itime
);
3116 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
3117 sizeof(efs
), (unsigned long) &efs
);
3121 case L2CAP_MODE_STREAMING
:
3122 size
= min_t(u16
, le16_to_cpu(rfc
.max_pdu_size
),
3124 L2CAP_EXT_HDR_SIZE
-
3127 rfc
.max_pdu_size
= cpu_to_le16(size
);
3128 chan
->remote_mps
= size
;
3130 set_bit(CONF_MODE_DONE
, &chan
->conf_state
);
3132 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
3133 sizeof(rfc
), (unsigned long) &rfc
);
3138 result
= L2CAP_CONF_UNACCEPT
;
3140 memset(&rfc
, 0, sizeof(rfc
));
3141 rfc
.mode
= chan
->mode
;
3144 if (result
== L2CAP_CONF_SUCCESS
)
3145 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
3147 rsp
->scid
= cpu_to_le16(chan
->dcid
);
3148 rsp
->result
= cpu_to_le16(result
);
3149 rsp
->flags
= __constant_cpu_to_le16(0);
3154 static int l2cap_parse_conf_rsp(struct l2cap_chan
*chan
, void *rsp
, int len
, void *data
, u16
*result
)
3156 struct l2cap_conf_req
*req
= data
;
3157 void *ptr
= req
->data
;
3160 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
3161 struct l2cap_conf_efs efs
;
3163 BT_DBG("chan %p, rsp %p, len %d, req %p", chan
, rsp
, len
, data
);
3165 while (len
>= L2CAP_CONF_OPT_SIZE
) {
3166 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
3169 case L2CAP_CONF_MTU
:
3170 if (val
< L2CAP_DEFAULT_MIN_MTU
) {
3171 *result
= L2CAP_CONF_UNACCEPT
;
3172 chan
->imtu
= L2CAP_DEFAULT_MIN_MTU
;
3175 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, chan
->imtu
);
3178 case L2CAP_CONF_FLUSH_TO
:
3179 chan
->flush_to
= val
;
3180 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FLUSH_TO
,
3184 case L2CAP_CONF_RFC
:
3185 if (olen
== sizeof(rfc
))
3186 memcpy(&rfc
, (void *)val
, olen
);
3188 if (test_bit(CONF_STATE2_DEVICE
, &chan
->conf_state
) &&
3189 rfc
.mode
!= chan
->mode
)
3190 return -ECONNREFUSED
;
3194 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
3195 sizeof(rfc
), (unsigned long) &rfc
);
3198 case L2CAP_CONF_EWS
:
3199 chan
->ack_win
= min_t(u16
, val
, chan
->ack_win
);
3200 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EWS
, 2,
3204 case L2CAP_CONF_EFS
:
3205 if (olen
== sizeof(efs
))
3206 memcpy(&efs
, (void *)val
, olen
);
3208 if (chan
->local_stype
!= L2CAP_SERV_NOTRAFIC
&&
3209 efs
.stype
!= L2CAP_SERV_NOTRAFIC
&&
3210 efs
.stype
!= chan
->local_stype
)
3211 return -ECONNREFUSED
;
3213 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_EFS
,
3214 sizeof(efs
), (unsigned long) &efs
);
3219 if (chan
->mode
== L2CAP_MODE_BASIC
&& chan
->mode
!= rfc
.mode
)
3220 return -ECONNREFUSED
;
3222 chan
->mode
= rfc
.mode
;
3224 if (*result
== L2CAP_CONF_SUCCESS
|| *result
== L2CAP_CONF_PENDING
) {
3226 case L2CAP_MODE_ERTM
:
3227 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
3228 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
3229 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3230 if (!test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
3231 chan
->ack_win
= min_t(u16
, chan
->ack_win
,
3234 if (test_bit(FLAG_EFS_ENABLE
, &chan
->flags
)) {
3235 chan
->local_msdu
= le16_to_cpu(efs
.msdu
);
3236 chan
->local_sdu_itime
=
3237 le32_to_cpu(efs
.sdu_itime
);
3238 chan
->local_acc_lat
= le32_to_cpu(efs
.acc_lat
);
3239 chan
->local_flush_to
=
3240 le32_to_cpu(efs
.flush_to
);
3244 case L2CAP_MODE_STREAMING
:
3245 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3249 req
->dcid
= cpu_to_le16(chan
->dcid
);
3250 req
->flags
= __constant_cpu_to_le16(0);
3255 static int l2cap_build_conf_rsp(struct l2cap_chan
*chan
, void *data
, u16 result
, u16 flags
)
3257 struct l2cap_conf_rsp
*rsp
= data
;
3258 void *ptr
= rsp
->data
;
3260 BT_DBG("chan %p", chan
);
3262 rsp
->scid
= cpu_to_le16(chan
->dcid
);
3263 rsp
->result
= cpu_to_le16(result
);
3264 rsp
->flags
= cpu_to_le16(flags
);
3269 void __l2cap_connect_rsp_defer(struct l2cap_chan
*chan
)
3271 struct l2cap_conn_rsp rsp
;
3272 struct l2cap_conn
*conn
= chan
->conn
;
3275 rsp
.scid
= cpu_to_le16(chan
->dcid
);
3276 rsp
.dcid
= cpu_to_le16(chan
->scid
);
3277 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_SUCCESS
);
3278 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
3279 l2cap_send_cmd(conn
, chan
->ident
,
3280 L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
3282 if (test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
))
3285 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
3286 l2cap_build_conf_req(chan
, buf
), buf
);
3287 chan
->num_conf_req
++;
3290 static void l2cap_conf_rfc_get(struct l2cap_chan
*chan
, void *rsp
, int len
)
3294 /* Use sane default values in case a misbehaving remote device
3295 * did not send an RFC or extended window size option.
3297 u16 txwin_ext
= chan
->ack_win
;
3298 struct l2cap_conf_rfc rfc
= {
3300 .retrans_timeout
= __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO
),
3301 .monitor_timeout
= __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO
),
3302 .max_pdu_size
= cpu_to_le16(chan
->imtu
),
3303 .txwin_size
= min_t(u16
, chan
->ack_win
, L2CAP_DEFAULT_TX_WINDOW
),
3306 BT_DBG("chan %p, rsp %p, len %d", chan
, rsp
, len
);
3308 if ((chan
->mode
!= L2CAP_MODE_ERTM
) && (chan
->mode
!= L2CAP_MODE_STREAMING
))
3311 while (len
>= L2CAP_CONF_OPT_SIZE
) {
3312 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
3315 case L2CAP_CONF_RFC
:
3316 if (olen
== sizeof(rfc
))
3317 memcpy(&rfc
, (void *)val
, olen
);
3319 case L2CAP_CONF_EWS
:
3326 case L2CAP_MODE_ERTM
:
3327 chan
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
3328 chan
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
3329 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3330 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
3331 chan
->ack_win
= min_t(u16
, chan
->ack_win
, txwin_ext
);
3333 chan
->ack_win
= min_t(u16
, chan
->ack_win
,
3336 case L2CAP_MODE_STREAMING
:
3337 chan
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
3341 static inline int l2cap_command_rej(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3343 struct l2cap_cmd_rej_unk
*rej
= (struct l2cap_cmd_rej_unk
*) data
;
3345 if (rej
->reason
!= L2CAP_REJ_NOT_UNDERSTOOD
)
3348 if ((conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) &&
3349 cmd
->ident
== conn
->info_ident
) {
3350 cancel_delayed_work(&conn
->info_timer
);
3352 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3353 conn
->info_ident
= 0;
3355 l2cap_conn_start(conn
);
3361 static inline int l2cap_connect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3363 struct l2cap_conn_req
*req
= (struct l2cap_conn_req
*) data
;
3364 struct l2cap_conn_rsp rsp
;
3365 struct l2cap_chan
*chan
= NULL
, *pchan
;
3366 struct sock
*parent
, *sk
= NULL
;
3367 int result
, status
= L2CAP_CS_NO_INFO
;
3369 u16 dcid
= 0, scid
= __le16_to_cpu(req
->scid
);
3370 __le16 psm
= req
->psm
;
3372 BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm
), scid
);
3374 /* Check if we have socket listening on psm */
3375 pchan
= l2cap_global_chan_by_psm(BT_LISTEN
, psm
, conn
->src
, conn
->dst
);
3377 result
= L2CAP_CR_BAD_PSM
;
3383 mutex_lock(&conn
->chan_lock
);
3386 /* Check if the ACL is secure enough (if not SDP) */
3387 if (psm
!= __constant_cpu_to_le16(L2CAP_PSM_SDP
) &&
3388 !hci_conn_check_link_mode(conn
->hcon
)) {
3389 conn
->disc_reason
= HCI_ERROR_AUTH_FAILURE
;
3390 result
= L2CAP_CR_SEC_BLOCK
;
3394 result
= L2CAP_CR_NO_MEM
;
3396 /* Check if we already have channel with that dcid */
3397 if (__l2cap_get_chan_by_dcid(conn
, scid
))
3400 chan
= pchan
->ops
->new_connection(pchan
);
3406 hci_conn_hold(conn
->hcon
);
3408 bacpy(&bt_sk(sk
)->src
, conn
->src
);
3409 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
3413 bt_accept_enqueue(parent
, sk
);
3415 __l2cap_chan_add(conn
, chan
);
3419 __set_chan_timer(chan
, sk
->sk_sndtimeo
);
3421 chan
->ident
= cmd
->ident
;
3423 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
) {
3424 if (l2cap_chan_check_security(chan
)) {
3425 if (test_bit(BT_SK_DEFER_SETUP
, &bt_sk(sk
)->flags
)) {
3426 __l2cap_state_change(chan
, BT_CONNECT2
);
3427 result
= L2CAP_CR_PEND
;
3428 status
= L2CAP_CS_AUTHOR_PEND
;
3429 parent
->sk_data_ready(parent
, 0);
3431 __l2cap_state_change(chan
, BT_CONFIG
);
3432 result
= L2CAP_CR_SUCCESS
;
3433 status
= L2CAP_CS_NO_INFO
;
3436 __l2cap_state_change(chan
, BT_CONNECT2
);
3437 result
= L2CAP_CR_PEND
;
3438 status
= L2CAP_CS_AUTHEN_PEND
;
3441 __l2cap_state_change(chan
, BT_CONNECT2
);
3442 result
= L2CAP_CR_PEND
;
3443 status
= L2CAP_CS_NO_INFO
;
3447 release_sock(parent
);
3448 mutex_unlock(&conn
->chan_lock
);
3451 rsp
.scid
= cpu_to_le16(scid
);
3452 rsp
.dcid
= cpu_to_le16(dcid
);
3453 rsp
.result
= cpu_to_le16(result
);
3454 rsp
.status
= cpu_to_le16(status
);
3455 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
3457 if (result
== L2CAP_CR_PEND
&& status
== L2CAP_CS_NO_INFO
) {
3458 struct l2cap_info_req info
;
3459 info
.type
= __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK
);
3461 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
3462 conn
->info_ident
= l2cap_get_ident(conn
);
3464 schedule_delayed_work(&conn
->info_timer
, L2CAP_INFO_TIMEOUT
);
3466 l2cap_send_cmd(conn
, conn
->info_ident
,
3467 L2CAP_INFO_REQ
, sizeof(info
), &info
);
3470 if (chan
&& !test_bit(CONF_REQ_SENT
, &chan
->conf_state
) &&
3471 result
== L2CAP_CR_SUCCESS
) {
3473 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
3474 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
3475 l2cap_build_conf_req(chan
, buf
), buf
);
3476 chan
->num_conf_req
++;
3482 static inline int l2cap_connect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3484 struct l2cap_conn_rsp
*rsp
= (struct l2cap_conn_rsp
*) data
;
3485 u16 scid
, dcid
, result
, status
;
3486 struct l2cap_chan
*chan
;
3490 scid
= __le16_to_cpu(rsp
->scid
);
3491 dcid
= __le16_to_cpu(rsp
->dcid
);
3492 result
= __le16_to_cpu(rsp
->result
);
3493 status
= __le16_to_cpu(rsp
->status
);
3495 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
3496 dcid
, scid
, result
, status
);
3498 mutex_lock(&conn
->chan_lock
);
3501 chan
= __l2cap_get_chan_by_scid(conn
, scid
);
3507 chan
= __l2cap_get_chan_by_ident(conn
, cmd
->ident
);
3516 l2cap_chan_lock(chan
);
3519 case L2CAP_CR_SUCCESS
:
3520 l2cap_state_change(chan
, BT_CONFIG
);
3523 clear_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
3525 if (test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
))
3528 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
3529 l2cap_build_conf_req(chan
, req
), req
);
3530 chan
->num_conf_req
++;
3534 set_bit(CONF_CONNECT_PEND
, &chan
->conf_state
);
3538 l2cap_chan_del(chan
, ECONNREFUSED
);
3542 l2cap_chan_unlock(chan
);
3545 mutex_unlock(&conn
->chan_lock
);
3550 static inline void set_default_fcs(struct l2cap_chan
*chan
)
3552 /* FCS is enabled only in ERTM or streaming mode, if one or both
3555 if (chan
->mode
!= L2CAP_MODE_ERTM
&& chan
->mode
!= L2CAP_MODE_STREAMING
)
3556 chan
->fcs
= L2CAP_FCS_NONE
;
3557 else if (!test_bit(CONF_NO_FCS_RECV
, &chan
->conf_state
))
3558 chan
->fcs
= L2CAP_FCS_CRC16
;
3561 static inline int l2cap_config_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
3563 struct l2cap_conf_req
*req
= (struct l2cap_conf_req
*) data
;
3566 struct l2cap_chan
*chan
;
3569 dcid
= __le16_to_cpu(req
->dcid
);
3570 flags
= __le16_to_cpu(req
->flags
);
3572 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid
, flags
);
3574 chan
= l2cap_get_chan_by_scid(conn
, dcid
);
3578 if (chan
->state
!= BT_CONFIG
&& chan
->state
!= BT_CONNECT2
) {
3579 struct l2cap_cmd_rej_cid rej
;
3581 rej
.reason
= __constant_cpu_to_le16(L2CAP_REJ_INVALID_CID
);
3582 rej
.scid
= cpu_to_le16(chan
->scid
);
3583 rej
.dcid
= cpu_to_le16(chan
->dcid
);
3585 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_COMMAND_REJ
,
3590 /* Reject if config buffer is too small. */
3591 len
= cmd_len
- sizeof(*req
);
3592 if (len
< 0 || chan
->conf_len
+ len
> sizeof(chan
->conf_req
)) {
3593 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
3594 l2cap_build_conf_rsp(chan
, rsp
,
3595 L2CAP_CONF_REJECT
, flags
), rsp
);
3600 memcpy(chan
->conf_req
+ chan
->conf_len
, req
->data
, len
);
3601 chan
->conf_len
+= len
;
3603 if (flags
& L2CAP_CONF_FLAG_CONTINUATION
) {
3604 /* Incomplete config. Send empty response. */
3605 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
3606 l2cap_build_conf_rsp(chan
, rsp
,
3607 L2CAP_CONF_SUCCESS
, flags
), rsp
);
3611 /* Complete config. */
3612 len
= l2cap_parse_conf_req(chan
, rsp
);
3614 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3618 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
, len
, rsp
);
3619 chan
->num_conf_rsp
++;
3621 /* Reset config buffer. */
3624 if (!test_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
))
3627 if (test_bit(CONF_INPUT_DONE
, &chan
->conf_state
)) {
3628 set_default_fcs(chan
);
3630 if (chan
->mode
== L2CAP_MODE_ERTM
||
3631 chan
->mode
== L2CAP_MODE_STREAMING
)
3632 err
= l2cap_ertm_init(chan
);
3635 l2cap_send_disconn_req(chan
->conn
, chan
, -err
);
3637 l2cap_chan_ready(chan
);
3642 if (!test_and_set_bit(CONF_REQ_SENT
, &chan
->conf_state
)) {
3644 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
3645 l2cap_build_conf_req(chan
, buf
), buf
);
3646 chan
->num_conf_req
++;
3649 /* Got Conf Rsp PENDING from remote side and asume we sent
3650 Conf Rsp PENDING in the code above */
3651 if (test_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
) &&
3652 test_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
)) {
3654 /* check compatibility */
3656 clear_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
3657 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
3659 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
3660 l2cap_build_conf_rsp(chan
, rsp
,
3661 L2CAP_CONF_SUCCESS
, flags
), rsp
);
3665 l2cap_chan_unlock(chan
);
3669 static inline int l2cap_config_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3671 struct l2cap_conf_rsp
*rsp
= (struct l2cap_conf_rsp
*)data
;
3672 u16 scid
, flags
, result
;
3673 struct l2cap_chan
*chan
;
3674 int len
= le16_to_cpu(cmd
->len
) - sizeof(*rsp
);
3677 scid
= __le16_to_cpu(rsp
->scid
);
3678 flags
= __le16_to_cpu(rsp
->flags
);
3679 result
= __le16_to_cpu(rsp
->result
);
3681 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid
, flags
,
3684 chan
= l2cap_get_chan_by_scid(conn
, scid
);
3689 case L2CAP_CONF_SUCCESS
:
3690 l2cap_conf_rfc_get(chan
, rsp
->data
, len
);
3691 clear_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
);
3694 case L2CAP_CONF_PENDING
:
3695 set_bit(CONF_REM_CONF_PEND
, &chan
->conf_state
);
3697 if (test_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
)) {
3700 len
= l2cap_parse_conf_rsp(chan
, rsp
->data
, len
,
3703 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3707 /* check compatibility */
3709 clear_bit(CONF_LOC_CONF_PEND
, &chan
->conf_state
);
3710 set_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
);
3712 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
3713 l2cap_build_conf_rsp(chan
, buf
,
3714 L2CAP_CONF_SUCCESS
, 0x0000), buf
);
3718 case L2CAP_CONF_UNACCEPT
:
3719 if (chan
->num_conf_rsp
<= L2CAP_CONF_MAX_CONF_RSP
) {
3722 if (len
> sizeof(req
) - sizeof(struct l2cap_conf_req
)) {
3723 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3727 /* throw out any old stored conf requests */
3728 result
= L2CAP_CONF_SUCCESS
;
3729 len
= l2cap_parse_conf_rsp(chan
, rsp
->data
, len
,
3732 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3736 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
3737 L2CAP_CONF_REQ
, len
, req
);
3738 chan
->num_conf_req
++;
3739 if (result
!= L2CAP_CONF_SUCCESS
)
3745 l2cap_chan_set_err(chan
, ECONNRESET
);
3747 __set_chan_timer(chan
, L2CAP_DISC_REJ_TIMEOUT
);
3748 l2cap_send_disconn_req(conn
, chan
, ECONNRESET
);
3752 if (flags
& L2CAP_CONF_FLAG_CONTINUATION
)
3755 set_bit(CONF_INPUT_DONE
, &chan
->conf_state
);
3757 if (test_bit(CONF_OUTPUT_DONE
, &chan
->conf_state
)) {
3758 set_default_fcs(chan
);
3760 if (chan
->mode
== L2CAP_MODE_ERTM
||
3761 chan
->mode
== L2CAP_MODE_STREAMING
)
3762 err
= l2cap_ertm_init(chan
);
3765 l2cap_send_disconn_req(chan
->conn
, chan
, -err
);
3767 l2cap_chan_ready(chan
);
3771 l2cap_chan_unlock(chan
);
3775 static inline int l2cap_disconnect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3777 struct l2cap_disconn_req
*req
= (struct l2cap_disconn_req
*) data
;
3778 struct l2cap_disconn_rsp rsp
;
3780 struct l2cap_chan
*chan
;
3783 scid
= __le16_to_cpu(req
->scid
);
3784 dcid
= __le16_to_cpu(req
->dcid
);
3786 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid
, dcid
);
3788 mutex_lock(&conn
->chan_lock
);
3790 chan
= __l2cap_get_chan_by_scid(conn
, dcid
);
3792 mutex_unlock(&conn
->chan_lock
);
3796 l2cap_chan_lock(chan
);
3800 rsp
.dcid
= cpu_to_le16(chan
->scid
);
3801 rsp
.scid
= cpu_to_le16(chan
->dcid
);
3802 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_DISCONN_RSP
, sizeof(rsp
), &rsp
);
3805 sk
->sk_shutdown
= SHUTDOWN_MASK
;
3808 l2cap_chan_hold(chan
);
3809 l2cap_chan_del(chan
, ECONNRESET
);
3811 l2cap_chan_unlock(chan
);
3813 chan
->ops
->close(chan
);
3814 l2cap_chan_put(chan
);
3816 mutex_unlock(&conn
->chan_lock
);
3821 static inline int l2cap_disconnect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3823 struct l2cap_disconn_rsp
*rsp
= (struct l2cap_disconn_rsp
*) data
;
3825 struct l2cap_chan
*chan
;
3827 scid
= __le16_to_cpu(rsp
->scid
);
3828 dcid
= __le16_to_cpu(rsp
->dcid
);
3830 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid
, scid
);
3832 mutex_lock(&conn
->chan_lock
);
3834 chan
= __l2cap_get_chan_by_scid(conn
, scid
);
3836 mutex_unlock(&conn
->chan_lock
);
3840 l2cap_chan_lock(chan
);
3842 l2cap_chan_hold(chan
);
3843 l2cap_chan_del(chan
, 0);
3845 l2cap_chan_unlock(chan
);
3847 chan
->ops
->close(chan
);
3848 l2cap_chan_put(chan
);
3850 mutex_unlock(&conn
->chan_lock
);
3855 static inline int l2cap_information_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3857 struct l2cap_info_req
*req
= (struct l2cap_info_req
*) data
;
3860 type
= __le16_to_cpu(req
->type
);
3862 BT_DBG("type 0x%4.4x", type
);
3864 if (type
== L2CAP_IT_FEAT_MASK
) {
3866 u32 feat_mask
= l2cap_feat_mask
;
3867 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
3868 rsp
->type
= __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK
);
3869 rsp
->result
= __constant_cpu_to_le16(L2CAP_IR_SUCCESS
);
3871 feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
3874 feat_mask
|= L2CAP_FEAT_EXT_FLOW
3875 | L2CAP_FEAT_EXT_WINDOW
;
3877 put_unaligned_le32(feat_mask
, rsp
->data
);
3878 l2cap_send_cmd(conn
, cmd
->ident
,
3879 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
3880 } else if (type
== L2CAP_IT_FIXED_CHAN
) {
3882 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
3885 l2cap_fixed_chan
[0] |= L2CAP_FC_A2MP
;
3887 l2cap_fixed_chan
[0] &= ~L2CAP_FC_A2MP
;
3889 rsp
->type
= __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
3890 rsp
->result
= __constant_cpu_to_le16(L2CAP_IR_SUCCESS
);
3891 memcpy(rsp
->data
, l2cap_fixed_chan
, sizeof(l2cap_fixed_chan
));
3892 l2cap_send_cmd(conn
, cmd
->ident
,
3893 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
3895 struct l2cap_info_rsp rsp
;
3896 rsp
.type
= cpu_to_le16(type
);
3897 rsp
.result
= __constant_cpu_to_le16(L2CAP_IR_NOTSUPP
);
3898 l2cap_send_cmd(conn
, cmd
->ident
,
3899 L2CAP_INFO_RSP
, sizeof(rsp
), &rsp
);
3905 static inline int l2cap_information_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
3907 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) data
;
3910 type
= __le16_to_cpu(rsp
->type
);
3911 result
= __le16_to_cpu(rsp
->result
);
3913 BT_DBG("type 0x%4.4x result 0x%2.2x", type
, result
);
3915 /* L2CAP Info req/rsp are unbound to channels, add extra checks */
3916 if (cmd
->ident
!= conn
->info_ident
||
3917 conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
)
3920 cancel_delayed_work(&conn
->info_timer
);
3922 if (result
!= L2CAP_IR_SUCCESS
) {
3923 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3924 conn
->info_ident
= 0;
3926 l2cap_conn_start(conn
);
3932 case L2CAP_IT_FEAT_MASK
:
3933 conn
->feat_mask
= get_unaligned_le32(rsp
->data
);
3935 if (conn
->feat_mask
& L2CAP_FEAT_FIXED_CHAN
) {
3936 struct l2cap_info_req req
;
3937 req
.type
= __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
3939 conn
->info_ident
= l2cap_get_ident(conn
);
3941 l2cap_send_cmd(conn
, conn
->info_ident
,
3942 L2CAP_INFO_REQ
, sizeof(req
), &req
);
3944 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3945 conn
->info_ident
= 0;
3947 l2cap_conn_start(conn
);
3951 case L2CAP_IT_FIXED_CHAN
:
3952 conn
->fixed_chan_mask
= rsp
->data
[0];
3953 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
3954 conn
->info_ident
= 0;
3956 l2cap_conn_start(conn
);
3963 static inline int l2cap_create_channel_req(struct l2cap_conn
*conn
,
3964 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
,
3967 struct l2cap_create_chan_req
*req
= data
;
3968 struct l2cap_create_chan_rsp rsp
;
3971 if (cmd_len
!= sizeof(*req
))
3977 psm
= le16_to_cpu(req
->psm
);
3978 scid
= le16_to_cpu(req
->scid
);
3980 BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm
, scid
, req
->amp_id
);
3982 /* Placeholder: Always reject */
3984 rsp
.scid
= cpu_to_le16(scid
);
3985 rsp
.result
= __constant_cpu_to_le16(L2CAP_CR_NO_MEM
);
3986 rsp
.status
= __constant_cpu_to_le16(L2CAP_CS_NO_INFO
);
3988 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CREATE_CHAN_RSP
,
3994 static inline int l2cap_create_channel_rsp(struct l2cap_conn
*conn
,
3995 struct l2cap_cmd_hdr
*cmd
, void *data
)
3997 BT_DBG("conn %p", conn
);
3999 return l2cap_connect_rsp(conn
, cmd
, data
);
4002 static void l2cap_send_move_chan_rsp(struct l2cap_conn
*conn
, u8 ident
,
4003 u16 icid
, u16 result
)
4005 struct l2cap_move_chan_rsp rsp
;
4007 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid
, result
);
4009 rsp
.icid
= cpu_to_le16(icid
);
4010 rsp
.result
= cpu_to_le16(result
);
4012 l2cap_send_cmd(conn
, ident
, L2CAP_MOVE_CHAN_RSP
, sizeof(rsp
), &rsp
);
4015 static void l2cap_send_move_chan_cfm(struct l2cap_conn
*conn
,
4016 struct l2cap_chan
*chan
,
4017 u16 icid
, u16 result
)
4019 struct l2cap_move_chan_cfm cfm
;
4022 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid
, result
);
4024 ident
= l2cap_get_ident(conn
);
4026 chan
->ident
= ident
;
4028 cfm
.icid
= cpu_to_le16(icid
);
4029 cfm
.result
= cpu_to_le16(result
);
4031 l2cap_send_cmd(conn
, ident
, L2CAP_MOVE_CHAN_CFM
, sizeof(cfm
), &cfm
);
4034 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn
*conn
, u8 ident
,
4037 struct l2cap_move_chan_cfm_rsp rsp
;
4039 BT_DBG("icid 0x%4.4x", icid
);
4041 rsp
.icid
= cpu_to_le16(icid
);
4042 l2cap_send_cmd(conn
, ident
, L2CAP_MOVE_CHAN_CFM_RSP
, sizeof(rsp
), &rsp
);
4045 static inline int l2cap_move_channel_req(struct l2cap_conn
*conn
,
4046 struct l2cap_cmd_hdr
*cmd
,
4047 u16 cmd_len
, void *data
)
4049 struct l2cap_move_chan_req
*req
= data
;
4051 u16 result
= L2CAP_MR_NOT_ALLOWED
;
4053 if (cmd_len
!= sizeof(*req
))
4056 icid
= le16_to_cpu(req
->icid
);
4058 BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid
, req
->dest_amp_id
);
4063 /* Placeholder: Always refuse */
4064 l2cap_send_move_chan_rsp(conn
, cmd
->ident
, icid
, result
);
4069 static inline int l2cap_move_channel_rsp(struct l2cap_conn
*conn
,
4070 struct l2cap_cmd_hdr
*cmd
,
4071 u16 cmd_len
, void *data
)
4073 struct l2cap_move_chan_rsp
*rsp
= data
;
4076 if (cmd_len
!= sizeof(*rsp
))
4079 icid
= le16_to_cpu(rsp
->icid
);
4080 result
= le16_to_cpu(rsp
->result
);
4082 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid
, result
);
4084 /* Placeholder: Always unconfirmed */
4085 l2cap_send_move_chan_cfm(conn
, NULL
, icid
, L2CAP_MC_UNCONFIRMED
);
4090 static inline int l2cap_move_channel_confirm(struct l2cap_conn
*conn
,
4091 struct l2cap_cmd_hdr
*cmd
,
4092 u16 cmd_len
, void *data
)
4094 struct l2cap_move_chan_cfm
*cfm
= data
;
4097 if (cmd_len
!= sizeof(*cfm
))
4100 icid
= le16_to_cpu(cfm
->icid
);
4101 result
= le16_to_cpu(cfm
->result
);
4103 BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid
, result
);
4105 l2cap_send_move_chan_cfm_rsp(conn
, cmd
->ident
, icid
);
4110 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn
*conn
,
4111 struct l2cap_cmd_hdr
*cmd
,
4112 u16 cmd_len
, void *data
)
4114 struct l2cap_move_chan_cfm_rsp
*rsp
= data
;
4117 if (cmd_len
!= sizeof(*rsp
))
4120 icid
= le16_to_cpu(rsp
->icid
);
4122 BT_DBG("icid 0x%4.4x", icid
);
4127 static inline int l2cap_check_conn_param(u16 min
, u16 max
, u16 latency
,
4132 if (min
> max
|| min
< 6 || max
> 3200)
4135 if (to_multiplier
< 10 || to_multiplier
> 3200)
4138 if (max
>= to_multiplier
* 8)
4141 max_latency
= (to_multiplier
* 8 / max
) - 1;
4142 if (latency
> 499 || latency
> max_latency
)
4148 static inline int l2cap_conn_param_update_req(struct l2cap_conn
*conn
,
4149 struct l2cap_cmd_hdr
*cmd
, u8
*data
)
4151 struct hci_conn
*hcon
= conn
->hcon
;
4152 struct l2cap_conn_param_update_req
*req
;
4153 struct l2cap_conn_param_update_rsp rsp
;
4154 u16 min
, max
, latency
, to_multiplier
, cmd_len
;
4157 if (!(hcon
->link_mode
& HCI_LM_MASTER
))
4160 cmd_len
= __le16_to_cpu(cmd
->len
);
4161 if (cmd_len
!= sizeof(struct l2cap_conn_param_update_req
))
4164 req
= (struct l2cap_conn_param_update_req
*) data
;
4165 min
= __le16_to_cpu(req
->min
);
4166 max
= __le16_to_cpu(req
->max
);
4167 latency
= __le16_to_cpu(req
->latency
);
4168 to_multiplier
= __le16_to_cpu(req
->to_multiplier
);
4170 BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
4171 min
, max
, latency
, to_multiplier
);
4173 memset(&rsp
, 0, sizeof(rsp
));
4175 err
= l2cap_check_conn_param(min
, max
, latency
, to_multiplier
);
4177 rsp
.result
= __constant_cpu_to_le16(L2CAP_CONN_PARAM_REJECTED
);
4179 rsp
.result
= __constant_cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED
);
4181 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_PARAM_UPDATE_RSP
,
4185 hci_le_conn_update(hcon
, min
, max
, latency
, to_multiplier
);
4190 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn
*conn
,
4191 struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
4195 switch (cmd
->code
) {
4196 case L2CAP_COMMAND_REJ
:
4197 l2cap_command_rej(conn
, cmd
, data
);
4200 case L2CAP_CONN_REQ
:
4201 err
= l2cap_connect_req(conn
, cmd
, data
);
4204 case L2CAP_CONN_RSP
:
4205 err
= l2cap_connect_rsp(conn
, cmd
, data
);
4208 case L2CAP_CONF_REQ
:
4209 err
= l2cap_config_req(conn
, cmd
, cmd_len
, data
);
4212 case L2CAP_CONF_RSP
:
4213 err
= l2cap_config_rsp(conn
, cmd
, data
);
4216 case L2CAP_DISCONN_REQ
:
4217 err
= l2cap_disconnect_req(conn
, cmd
, data
);
4220 case L2CAP_DISCONN_RSP
:
4221 err
= l2cap_disconnect_rsp(conn
, cmd
, data
);
4224 case L2CAP_ECHO_REQ
:
4225 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_ECHO_RSP
, cmd_len
, data
);
4228 case L2CAP_ECHO_RSP
:
4231 case L2CAP_INFO_REQ
:
4232 err
= l2cap_information_req(conn
, cmd
, data
);
4235 case L2CAP_INFO_RSP
:
4236 err
= l2cap_information_rsp(conn
, cmd
, data
);
4239 case L2CAP_CREATE_CHAN_REQ
:
4240 err
= l2cap_create_channel_req(conn
, cmd
, cmd_len
, data
);
4243 case L2CAP_CREATE_CHAN_RSP
:
4244 err
= l2cap_create_channel_rsp(conn
, cmd
, data
);
4247 case L2CAP_MOVE_CHAN_REQ
:
4248 err
= l2cap_move_channel_req(conn
, cmd
, cmd_len
, data
);
4251 case L2CAP_MOVE_CHAN_RSP
:
4252 err
= l2cap_move_channel_rsp(conn
, cmd
, cmd_len
, data
);
4255 case L2CAP_MOVE_CHAN_CFM
:
4256 err
= l2cap_move_channel_confirm(conn
, cmd
, cmd_len
, data
);
4259 case L2CAP_MOVE_CHAN_CFM_RSP
:
4260 err
= l2cap_move_channel_confirm_rsp(conn
, cmd
, cmd_len
, data
);
4264 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd
->code
);
4272 static inline int l2cap_le_sig_cmd(struct l2cap_conn
*conn
,
4273 struct l2cap_cmd_hdr
*cmd
, u8
*data
)
4275 switch (cmd
->code
) {
4276 case L2CAP_COMMAND_REJ
:
4279 case L2CAP_CONN_PARAM_UPDATE_REQ
:
4280 return l2cap_conn_param_update_req(conn
, cmd
, data
);
4282 case L2CAP_CONN_PARAM_UPDATE_RSP
:
4286 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd
->code
);
4291 static inline void l2cap_sig_channel(struct l2cap_conn
*conn
,
4292 struct sk_buff
*skb
)
4294 u8
*data
= skb
->data
;
4296 struct l2cap_cmd_hdr cmd
;
4299 l2cap_raw_recv(conn
, skb
);
4301 while (len
>= L2CAP_CMD_HDR_SIZE
) {
4303 memcpy(&cmd
, data
, L2CAP_CMD_HDR_SIZE
);
4304 data
+= L2CAP_CMD_HDR_SIZE
;
4305 len
-= L2CAP_CMD_HDR_SIZE
;
4307 cmd_len
= le16_to_cpu(cmd
.len
);
4309 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd
.code
, cmd_len
, cmd
.ident
);
4311 if (cmd_len
> len
|| !cmd
.ident
) {
4312 BT_DBG("corrupted command");
4316 if (conn
->hcon
->type
== LE_LINK
)
4317 err
= l2cap_le_sig_cmd(conn
, &cmd
, data
);
4319 err
= l2cap_bredr_sig_cmd(conn
, &cmd
, cmd_len
, data
);
4322 struct l2cap_cmd_rej_unk rej
;
4324 BT_ERR("Wrong link type (%d)", err
);
4326 /* FIXME: Map err to a valid reason */
4327 rej
.reason
= __constant_cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD
);
4328 l2cap_send_cmd(conn
, cmd
.ident
, L2CAP_COMMAND_REJ
, sizeof(rej
), &rej
);
4338 static int l2cap_check_fcs(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
4340 u16 our_fcs
, rcv_fcs
;
4343 if (test_bit(FLAG_EXT_CTRL
, &chan
->flags
))
4344 hdr_size
= L2CAP_EXT_HDR_SIZE
;
4346 hdr_size
= L2CAP_ENH_HDR_SIZE
;
4348 if (chan
->fcs
== L2CAP_FCS_CRC16
) {
4349 skb_trim(skb
, skb
->len
- L2CAP_FCS_SIZE
);
4350 rcv_fcs
= get_unaligned_le16(skb
->data
+ skb
->len
);
4351 our_fcs
= crc16(0, skb
->data
- hdr_size
, skb
->len
+ hdr_size
);
4353 if (our_fcs
!= rcv_fcs
)
4359 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan
*chan
)
4361 struct l2cap_ctrl control
;
4363 BT_DBG("chan %p", chan
);
4365 memset(&control
, 0, sizeof(control
));
4368 control
.reqseq
= chan
->buffer_seq
;
4369 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
4371 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
4372 control
.super
= L2CAP_SUPER_RNR
;
4373 l2cap_send_sframe(chan
, &control
);
4376 if (test_and_clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
) &&
4377 chan
->unacked_frames
> 0)
4378 __set_retrans_timer(chan
);
4380 /* Send pending iframes */
4381 l2cap_ertm_send(chan
);
4383 if (!test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
) &&
4384 test_bit(CONN_SEND_FBIT
, &chan
->conn_state
)) {
4385 /* F-bit wasn't sent in an s-frame or i-frame yet, so
4388 control
.super
= L2CAP_SUPER_RR
;
4389 l2cap_send_sframe(chan
, &control
);
4393 static void append_skb_frag(struct sk_buff
*skb
,
4394 struct sk_buff
*new_frag
, struct sk_buff
**last_frag
)
4396 /* skb->len reflects data in skb as well as all fragments
4397 * skb->data_len reflects only data in fragments
4399 if (!skb_has_frag_list(skb
))
4400 skb_shinfo(skb
)->frag_list
= new_frag
;
4402 new_frag
->next
= NULL
;
4404 (*last_frag
)->next
= new_frag
;
4405 *last_frag
= new_frag
;
4407 skb
->len
+= new_frag
->len
;
4408 skb
->data_len
+= new_frag
->len
;
4409 skb
->truesize
+= new_frag
->truesize
;
4412 static int l2cap_reassemble_sdu(struct l2cap_chan
*chan
, struct sk_buff
*skb
,
4413 struct l2cap_ctrl
*control
)
4417 switch (control
->sar
) {
4418 case L2CAP_SAR_UNSEGMENTED
:
4422 err
= chan
->ops
->recv(chan
, skb
);
4425 case L2CAP_SAR_START
:
4429 chan
->sdu_len
= get_unaligned_le16(skb
->data
);
4430 skb_pull(skb
, L2CAP_SDULEN_SIZE
);
4432 if (chan
->sdu_len
> chan
->imtu
) {
4437 if (skb
->len
>= chan
->sdu_len
)
4441 chan
->sdu_last_frag
= skb
;
4447 case L2CAP_SAR_CONTINUE
:
4451 append_skb_frag(chan
->sdu
, skb
,
4452 &chan
->sdu_last_frag
);
4455 if (chan
->sdu
->len
>= chan
->sdu_len
)
4465 append_skb_frag(chan
->sdu
, skb
,
4466 &chan
->sdu_last_frag
);
4469 if (chan
->sdu
->len
!= chan
->sdu_len
)
4472 err
= chan
->ops
->recv(chan
, chan
->sdu
);
4475 /* Reassembly complete */
4477 chan
->sdu_last_frag
= NULL
;
4485 kfree_skb(chan
->sdu
);
4487 chan
->sdu_last_frag
= NULL
;
4494 void l2cap_chan_busy(struct l2cap_chan
*chan
, int busy
)
4498 if (chan
->mode
!= L2CAP_MODE_ERTM
)
4501 event
= busy
? L2CAP_EV_LOCAL_BUSY_DETECTED
: L2CAP_EV_LOCAL_BUSY_CLEAR
;
4502 l2cap_tx(chan
, NULL
, NULL
, event
);
4505 static int l2cap_rx_queued_iframes(struct l2cap_chan
*chan
)
4508 /* Pass sequential frames to l2cap_reassemble_sdu()
4509 * until a gap is encountered.
4512 BT_DBG("chan %p", chan
);
4514 while (!test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
4515 struct sk_buff
*skb
;
4516 BT_DBG("Searching for skb with txseq %d (queue len %d)",
4517 chan
->buffer_seq
, skb_queue_len(&chan
->srej_q
));
4519 skb
= l2cap_ertm_seq_in_queue(&chan
->srej_q
, chan
->buffer_seq
);
4524 skb_unlink(skb
, &chan
->srej_q
);
4525 chan
->buffer_seq
= __next_seq(chan
, chan
->buffer_seq
);
4526 err
= l2cap_reassemble_sdu(chan
, skb
, &bt_cb(skb
)->control
);
4531 if (skb_queue_empty(&chan
->srej_q
)) {
4532 chan
->rx_state
= L2CAP_RX_STATE_RECV
;
4533 l2cap_send_ack(chan
);
4539 static void l2cap_handle_srej(struct l2cap_chan
*chan
,
4540 struct l2cap_ctrl
*control
)
4542 struct sk_buff
*skb
;
4544 BT_DBG("chan %p, control %p", chan
, control
);
4546 if (control
->reqseq
== chan
->next_tx_seq
) {
4547 BT_DBG("Invalid reqseq %d, disconnecting", control
->reqseq
);
4548 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4552 skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, control
->reqseq
);
4555 BT_DBG("Seq %d not available for retransmission",
4560 if (chan
->max_tx
!= 0 && bt_cb(skb
)->control
.retries
>= chan
->max_tx
) {
4561 BT_DBG("Retry limit exceeded (%d)", chan
->max_tx
);
4562 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4566 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4568 if (control
->poll
) {
4569 l2cap_pass_to_tx(chan
, control
);
4571 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
4572 l2cap_retransmit(chan
, control
);
4573 l2cap_ertm_send(chan
);
4575 if (chan
->tx_state
== L2CAP_TX_STATE_WAIT_F
) {
4576 set_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
4577 chan
->srej_save_reqseq
= control
->reqseq
;
4580 l2cap_pass_to_tx_fbit(chan
, control
);
4582 if (control
->final
) {
4583 if (chan
->srej_save_reqseq
!= control
->reqseq
||
4584 !test_and_clear_bit(CONN_SREJ_ACT
,
4586 l2cap_retransmit(chan
, control
);
4588 l2cap_retransmit(chan
, control
);
4589 if (chan
->tx_state
== L2CAP_TX_STATE_WAIT_F
) {
4590 set_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
4591 chan
->srej_save_reqseq
= control
->reqseq
;
4597 static void l2cap_handle_rej(struct l2cap_chan
*chan
,
4598 struct l2cap_ctrl
*control
)
4600 struct sk_buff
*skb
;
4602 BT_DBG("chan %p, control %p", chan
, control
);
4604 if (control
->reqseq
== chan
->next_tx_seq
) {
4605 BT_DBG("Invalid reqseq %d, disconnecting", control
->reqseq
);
4606 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4610 skb
= l2cap_ertm_seq_in_queue(&chan
->tx_q
, control
->reqseq
);
4612 if (chan
->max_tx
&& skb
&&
4613 bt_cb(skb
)->control
.retries
>= chan
->max_tx
) {
4614 BT_DBG("Retry limit exceeded (%d)", chan
->max_tx
);
4615 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
4619 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4621 l2cap_pass_to_tx(chan
, control
);
4623 if (control
->final
) {
4624 if (!test_and_clear_bit(CONN_REJ_ACT
, &chan
->conn_state
))
4625 l2cap_retransmit_all(chan
, control
);
4627 l2cap_retransmit_all(chan
, control
);
4628 l2cap_ertm_send(chan
);
4629 if (chan
->tx_state
== L2CAP_TX_STATE_WAIT_F
)
4630 set_bit(CONN_REJ_ACT
, &chan
->conn_state
);
4634 static u8
l2cap_classify_txseq(struct l2cap_chan
*chan
, u16 txseq
)
4636 BT_DBG("chan %p, txseq %d", chan
, txseq
);
4638 BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan
->last_acked_seq
,
4639 chan
->expected_tx_seq
);
4641 if (chan
->rx_state
== L2CAP_RX_STATE_SREJ_SENT
) {
4642 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) >=
4644 /* See notes below regarding "double poll" and
4647 if (chan
->tx_win
<= ((chan
->tx_win_max
+ 1) >> 1)) {
4648 BT_DBG("Invalid/Ignore - after SREJ");
4649 return L2CAP_TXSEQ_INVALID_IGNORE
;
4651 BT_DBG("Invalid - in window after SREJ sent");
4652 return L2CAP_TXSEQ_INVALID
;
4656 if (chan
->srej_list
.head
== txseq
) {
4657 BT_DBG("Expected SREJ");
4658 return L2CAP_TXSEQ_EXPECTED_SREJ
;
4661 if (l2cap_ertm_seq_in_queue(&chan
->srej_q
, txseq
)) {
4662 BT_DBG("Duplicate SREJ - txseq already stored");
4663 return L2CAP_TXSEQ_DUPLICATE_SREJ
;
4666 if (l2cap_seq_list_contains(&chan
->srej_list
, txseq
)) {
4667 BT_DBG("Unexpected SREJ - not requested");
4668 return L2CAP_TXSEQ_UNEXPECTED_SREJ
;
4672 if (chan
->expected_tx_seq
== txseq
) {
4673 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) >=
4675 BT_DBG("Invalid - txseq outside tx window");
4676 return L2CAP_TXSEQ_INVALID
;
4679 return L2CAP_TXSEQ_EXPECTED
;
4683 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) <
4684 __seq_offset(chan
, chan
->expected_tx_seq
,
4685 chan
->last_acked_seq
)){
4686 BT_DBG("Duplicate - expected_tx_seq later than txseq");
4687 return L2CAP_TXSEQ_DUPLICATE
;
4690 if (__seq_offset(chan
, txseq
, chan
->last_acked_seq
) >= chan
->tx_win
) {
4691 /* A source of invalid packets is a "double poll" condition,
4692 * where delays cause us to send multiple poll packets. If
4693 * the remote stack receives and processes both polls,
4694 * sequence numbers can wrap around in such a way that a
4695 * resent frame has a sequence number that looks like new data
4696 * with a sequence gap. This would trigger an erroneous SREJ
4699 * Fortunately, this is impossible with a tx window that's
4700 * less than half of the maximum sequence number, which allows
4701 * invalid frames to be safely ignored.
4703 * With tx window sizes greater than half of the tx window
4704 * maximum, the frame is invalid and cannot be ignored. This
4705 * causes a disconnect.
4708 if (chan
->tx_win
<= ((chan
->tx_win_max
+ 1) >> 1)) {
4709 BT_DBG("Invalid/Ignore - txseq outside tx window");
4710 return L2CAP_TXSEQ_INVALID_IGNORE
;
4712 BT_DBG("Invalid - txseq outside tx window");
4713 return L2CAP_TXSEQ_INVALID
;
4716 BT_DBG("Unexpected - txseq indicates missing frames");
4717 return L2CAP_TXSEQ_UNEXPECTED
;
4721 static int l2cap_rx_state_recv(struct l2cap_chan
*chan
,
4722 struct l2cap_ctrl
*control
,
4723 struct sk_buff
*skb
, u8 event
)
4726 bool skb_in_use
= 0;
4728 BT_DBG("chan %p, control %p, skb %p, event %d", chan
, control
, skb
,
4732 case L2CAP_EV_RECV_IFRAME
:
4733 switch (l2cap_classify_txseq(chan
, control
->txseq
)) {
4734 case L2CAP_TXSEQ_EXPECTED
:
4735 l2cap_pass_to_tx(chan
, control
);
4737 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
4738 BT_DBG("Busy, discarding expected seq %d",
4743 chan
->expected_tx_seq
= __next_seq(chan
,
4746 chan
->buffer_seq
= chan
->expected_tx_seq
;
4749 err
= l2cap_reassemble_sdu(chan
, skb
, control
);
4753 if (control
->final
) {
4754 if (!test_and_clear_bit(CONN_REJ_ACT
,
4755 &chan
->conn_state
)) {
4757 l2cap_retransmit_all(chan
, control
);
4758 l2cap_ertm_send(chan
);
4762 if (!test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
))
4763 l2cap_send_ack(chan
);
4765 case L2CAP_TXSEQ_UNEXPECTED
:
4766 l2cap_pass_to_tx(chan
, control
);
4768 /* Can't issue SREJ frames in the local busy state.
4769 * Drop this frame, it will be seen as missing
4770 * when local busy is exited.
4772 if (test_bit(CONN_LOCAL_BUSY
, &chan
->conn_state
)) {
4773 BT_DBG("Busy, discarding unexpected seq %d",
4778 /* There was a gap in the sequence, so an SREJ
4779 * must be sent for each missing frame. The
4780 * current frame is stored for later use.
4782 skb_queue_tail(&chan
->srej_q
, skb
);
4784 BT_DBG("Queued %p (queue len %d)", skb
,
4785 skb_queue_len(&chan
->srej_q
));
4787 clear_bit(CONN_SREJ_ACT
, &chan
->conn_state
);
4788 l2cap_seq_list_clear(&chan
->srej_list
);
4789 l2cap_send_srej(chan
, control
->txseq
);
4791 chan
->rx_state
= L2CAP_RX_STATE_SREJ_SENT
;
4793 case L2CAP_TXSEQ_DUPLICATE
:
4794 l2cap_pass_to_tx(chan
, control
);
4796 case L2CAP_TXSEQ_INVALID_IGNORE
:
4798 case L2CAP_TXSEQ_INVALID
:
4800 l2cap_send_disconn_req(chan
->conn
, chan
,
4805 case L2CAP_EV_RECV_RR
:
4806 l2cap_pass_to_tx(chan
, control
);
4807 if (control
->final
) {
4808 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4810 if (!test_and_clear_bit(CONN_REJ_ACT
,
4811 &chan
->conn_state
)) {
4813 l2cap_retransmit_all(chan
, control
);
4816 l2cap_ertm_send(chan
);
4817 } else if (control
->poll
) {
4818 l2cap_send_i_or_rr_or_rnr(chan
);
4820 if (test_and_clear_bit(CONN_REMOTE_BUSY
,
4821 &chan
->conn_state
) &&
4822 chan
->unacked_frames
)
4823 __set_retrans_timer(chan
);
4825 l2cap_ertm_send(chan
);
4828 case L2CAP_EV_RECV_RNR
:
4829 set_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4830 l2cap_pass_to_tx(chan
, control
);
4831 if (control
&& control
->poll
) {
4832 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
4833 l2cap_send_rr_or_rnr(chan
, 0);
4835 __clear_retrans_timer(chan
);
4836 l2cap_seq_list_clear(&chan
->retrans_list
);
4838 case L2CAP_EV_RECV_REJ
:
4839 l2cap_handle_rej(chan
, control
);
4841 case L2CAP_EV_RECV_SREJ
:
4842 l2cap_handle_srej(chan
, control
);
4848 if (skb
&& !skb_in_use
) {
4849 BT_DBG("Freeing %p", skb
);
4856 static int l2cap_rx_state_srej_sent(struct l2cap_chan
*chan
,
4857 struct l2cap_ctrl
*control
,
4858 struct sk_buff
*skb
, u8 event
)
4861 u16 txseq
= control
->txseq
;
4862 bool skb_in_use
= 0;
4864 BT_DBG("chan %p, control %p, skb %p, event %d", chan
, control
, skb
,
4868 case L2CAP_EV_RECV_IFRAME
:
4869 switch (l2cap_classify_txseq(chan
, txseq
)) {
4870 case L2CAP_TXSEQ_EXPECTED
:
4871 /* Keep frame for reassembly later */
4872 l2cap_pass_to_tx(chan
, control
);
4873 skb_queue_tail(&chan
->srej_q
, skb
);
4875 BT_DBG("Queued %p (queue len %d)", skb
,
4876 skb_queue_len(&chan
->srej_q
));
4878 chan
->expected_tx_seq
= __next_seq(chan
, txseq
);
4880 case L2CAP_TXSEQ_EXPECTED_SREJ
:
4881 l2cap_seq_list_pop(&chan
->srej_list
);
4883 l2cap_pass_to_tx(chan
, control
);
4884 skb_queue_tail(&chan
->srej_q
, skb
);
4886 BT_DBG("Queued %p (queue len %d)", skb
,
4887 skb_queue_len(&chan
->srej_q
));
4889 err
= l2cap_rx_queued_iframes(chan
);
4894 case L2CAP_TXSEQ_UNEXPECTED
:
4895 /* Got a frame that can't be reassembled yet.
4896 * Save it for later, and send SREJs to cover
4897 * the missing frames.
4899 skb_queue_tail(&chan
->srej_q
, skb
);
4901 BT_DBG("Queued %p (queue len %d)", skb
,
4902 skb_queue_len(&chan
->srej_q
));
4904 l2cap_pass_to_tx(chan
, control
);
4905 l2cap_send_srej(chan
, control
->txseq
);
4907 case L2CAP_TXSEQ_UNEXPECTED_SREJ
:
4908 /* This frame was requested with an SREJ, but
4909 * some expected retransmitted frames are
4910 * missing. Request retransmission of missing
4913 skb_queue_tail(&chan
->srej_q
, skb
);
4915 BT_DBG("Queued %p (queue len %d)", skb
,
4916 skb_queue_len(&chan
->srej_q
));
4918 l2cap_pass_to_tx(chan
, control
);
4919 l2cap_send_srej_list(chan
, control
->txseq
);
4921 case L2CAP_TXSEQ_DUPLICATE_SREJ
:
4922 /* We've already queued this frame. Drop this copy. */
4923 l2cap_pass_to_tx(chan
, control
);
4925 case L2CAP_TXSEQ_DUPLICATE
:
4926 /* Expecting a later sequence number, so this frame
4927 * was already received. Ignore it completely.
4930 case L2CAP_TXSEQ_INVALID_IGNORE
:
4932 case L2CAP_TXSEQ_INVALID
:
4934 l2cap_send_disconn_req(chan
->conn
, chan
,
4939 case L2CAP_EV_RECV_RR
:
4940 l2cap_pass_to_tx(chan
, control
);
4941 if (control
->final
) {
4942 clear_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4944 if (!test_and_clear_bit(CONN_REJ_ACT
,
4945 &chan
->conn_state
)) {
4947 l2cap_retransmit_all(chan
, control
);
4950 l2cap_ertm_send(chan
);
4951 } else if (control
->poll
) {
4952 if (test_and_clear_bit(CONN_REMOTE_BUSY
,
4953 &chan
->conn_state
) &&
4954 chan
->unacked_frames
) {
4955 __set_retrans_timer(chan
);
4958 set_bit(CONN_SEND_FBIT
, &chan
->conn_state
);
4959 l2cap_send_srej_tail(chan
);
4961 if (test_and_clear_bit(CONN_REMOTE_BUSY
,
4962 &chan
->conn_state
) &&
4963 chan
->unacked_frames
)
4964 __set_retrans_timer(chan
);
4966 l2cap_send_ack(chan
);
4969 case L2CAP_EV_RECV_RNR
:
4970 set_bit(CONN_REMOTE_BUSY
, &chan
->conn_state
);
4971 l2cap_pass_to_tx(chan
, control
);
4972 if (control
->poll
) {
4973 l2cap_send_srej_tail(chan
);
4975 struct l2cap_ctrl rr_control
;
4976 memset(&rr_control
, 0, sizeof(rr_control
));
4977 rr_control
.sframe
= 1;
4978 rr_control
.super
= L2CAP_SUPER_RR
;
4979 rr_control
.reqseq
= chan
->buffer_seq
;
4980 l2cap_send_sframe(chan
, &rr_control
);
4984 case L2CAP_EV_RECV_REJ
:
4985 l2cap_handle_rej(chan
, control
);
4987 case L2CAP_EV_RECV_SREJ
:
4988 l2cap_handle_srej(chan
, control
);
4992 if (skb
&& !skb_in_use
) {
4993 BT_DBG("Freeing %p", skb
);
5000 static bool __valid_reqseq(struct l2cap_chan
*chan
, u16 reqseq
)
5002 /* Make sure reqseq is for a packet that has been sent but not acked */
5005 unacked
= __seq_offset(chan
, chan
->next_tx_seq
, chan
->expected_ack_seq
);
5006 return __seq_offset(chan
, chan
->next_tx_seq
, reqseq
) <= unacked
;
5009 static int l2cap_rx(struct l2cap_chan
*chan
, struct l2cap_ctrl
*control
,
5010 struct sk_buff
*skb
, u8 event
)
5014 BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan
,
5015 control
, skb
, event
, chan
->rx_state
);
5017 if (__valid_reqseq(chan
, control
->reqseq
)) {
5018 switch (chan
->rx_state
) {
5019 case L2CAP_RX_STATE_RECV
:
5020 err
= l2cap_rx_state_recv(chan
, control
, skb
, event
);
5022 case L2CAP_RX_STATE_SREJ_SENT
:
5023 err
= l2cap_rx_state_srej_sent(chan
, control
, skb
,
5031 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
5032 control
->reqseq
, chan
->next_tx_seq
,
5033 chan
->expected_ack_seq
);
5034 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
5040 static int l2cap_stream_rx(struct l2cap_chan
*chan
, struct l2cap_ctrl
*control
,
5041 struct sk_buff
*skb
)
5045 BT_DBG("chan %p, control %p, skb %p, state %d", chan
, control
, skb
,
5048 if (l2cap_classify_txseq(chan
, control
->txseq
) ==
5049 L2CAP_TXSEQ_EXPECTED
) {
5050 l2cap_pass_to_tx(chan
, control
);
5052 BT_DBG("buffer_seq %d->%d", chan
->buffer_seq
,
5053 __next_seq(chan
, chan
->buffer_seq
));
5055 chan
->buffer_seq
= __next_seq(chan
, chan
->buffer_seq
);
5057 l2cap_reassemble_sdu(chan
, skb
, control
);
5060 kfree_skb(chan
->sdu
);
5063 chan
->sdu_last_frag
= NULL
;
5067 BT_DBG("Freeing %p", skb
);
5072 chan
->last_acked_seq
= control
->txseq
;
5073 chan
->expected_tx_seq
= __next_seq(chan
, control
->txseq
);
5078 static int l2cap_data_rcv(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
5080 struct l2cap_ctrl
*control
= &bt_cb(skb
)->control
;
5084 __unpack_control(chan
, skb
);
5089 * We can just drop the corrupted I-frame here.
5090 * Receiver will miss it and start proper recovery
5091 * procedures and ask for retransmission.
5093 if (l2cap_check_fcs(chan
, skb
))
5096 if (!control
->sframe
&& control
->sar
== L2CAP_SAR_START
)
5097 len
-= L2CAP_SDULEN_SIZE
;
5099 if (chan
->fcs
== L2CAP_FCS_CRC16
)
5100 len
-= L2CAP_FCS_SIZE
;
5102 if (len
> chan
->mps
) {
5103 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
5107 if (!control
->sframe
) {
5110 BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
5111 control
->sar
, control
->reqseq
, control
->final
,
5114 /* Validate F-bit - F=0 always valid, F=1 only
5115 * valid in TX WAIT_F
5117 if (control
->final
&& chan
->tx_state
!= L2CAP_TX_STATE_WAIT_F
)
5120 if (chan
->mode
!= L2CAP_MODE_STREAMING
) {
5121 event
= L2CAP_EV_RECV_IFRAME
;
5122 err
= l2cap_rx(chan
, control
, skb
, event
);
5124 err
= l2cap_stream_rx(chan
, control
, skb
);
5128 l2cap_send_disconn_req(chan
->conn
, chan
,
5131 const u8 rx_func_to_event
[4] = {
5132 L2CAP_EV_RECV_RR
, L2CAP_EV_RECV_REJ
,
5133 L2CAP_EV_RECV_RNR
, L2CAP_EV_RECV_SREJ
5136 /* Only I-frames are expected in streaming mode */
5137 if (chan
->mode
== L2CAP_MODE_STREAMING
)
5140 BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
5141 control
->reqseq
, control
->final
, control
->poll
,
5146 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
5150 /* Validate F and P bits */
5151 if (control
->final
&& (control
->poll
||
5152 chan
->tx_state
!= L2CAP_TX_STATE_WAIT_F
))
5155 event
= rx_func_to_event
[control
->super
];
5156 if (l2cap_rx(chan
, control
, skb
, event
))
5157 l2cap_send_disconn_req(chan
->conn
, chan
, ECONNRESET
);
5167 static void l2cap_data_channel(struct l2cap_conn
*conn
, u16 cid
,
5168 struct sk_buff
*skb
)
5170 struct l2cap_chan
*chan
;
5172 chan
= l2cap_get_chan_by_scid(conn
, cid
);
5174 if (cid
== L2CAP_CID_A2MP
) {
5175 chan
= a2mp_channel_create(conn
, skb
);
5181 l2cap_chan_lock(chan
);
5183 BT_DBG("unknown cid 0x%4.4x", cid
);
5184 /* Drop packet and return */
5190 BT_DBG("chan %p, len %d", chan
, skb
->len
);
5192 if (chan
->state
!= BT_CONNECTED
)
5195 switch (chan
->mode
) {
5196 case L2CAP_MODE_BASIC
:
5197 /* If socket recv buffers overflows we drop data here
5198 * which is *bad* because L2CAP has to be reliable.
5199 * But we don't have any other choice. L2CAP doesn't
5200 * provide flow control mechanism. */
5202 if (chan
->imtu
< skb
->len
)
5205 if (!chan
->ops
->recv(chan
, skb
))
5209 case L2CAP_MODE_ERTM
:
5210 case L2CAP_MODE_STREAMING
:
5211 l2cap_data_rcv(chan
, skb
);
5215 BT_DBG("chan %p: bad mode 0x%2.2x", chan
, chan
->mode
);
5223 l2cap_chan_unlock(chan
);
5226 static void l2cap_conless_channel(struct l2cap_conn
*conn
, __le16 psm
,
5227 struct sk_buff
*skb
)
5229 struct l2cap_chan
*chan
;
5231 chan
= l2cap_global_chan_by_psm(0, psm
, conn
->src
, conn
->dst
);
5235 BT_DBG("chan %p, len %d", chan
, skb
->len
);
5237 if (chan
->state
!= BT_BOUND
&& chan
->state
!= BT_CONNECTED
)
5240 if (chan
->imtu
< skb
->len
)
5243 if (!chan
->ops
->recv(chan
, skb
))
5250 static void l2cap_att_channel(struct l2cap_conn
*conn
, u16 cid
,
5251 struct sk_buff
*skb
)
5253 struct l2cap_chan
*chan
;
5255 chan
= l2cap_global_chan_by_scid(0, cid
, conn
->src
, conn
->dst
);
5259 BT_DBG("chan %p, len %d", chan
, skb
->len
);
5261 if (chan
->state
!= BT_BOUND
&& chan
->state
!= BT_CONNECTED
)
5264 if (chan
->imtu
< skb
->len
)
5267 if (!chan
->ops
->recv(chan
, skb
))
5274 static void l2cap_recv_frame(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
5276 struct l2cap_hdr
*lh
= (void *) skb
->data
;
5280 skb_pull(skb
, L2CAP_HDR_SIZE
);
5281 cid
= __le16_to_cpu(lh
->cid
);
5282 len
= __le16_to_cpu(lh
->len
);
5284 if (len
!= skb
->len
) {
5289 BT_DBG("len %d, cid 0x%4.4x", len
, cid
);
5292 case L2CAP_CID_LE_SIGNALING
:
5293 case L2CAP_CID_SIGNALING
:
5294 l2cap_sig_channel(conn
, skb
);
5297 case L2CAP_CID_CONN_LESS
:
5298 psm
= get_unaligned((__le16
*) skb
->data
);
5299 skb_pull(skb
, L2CAP_PSMLEN_SIZE
);
5300 l2cap_conless_channel(conn
, psm
, skb
);
5303 case L2CAP_CID_LE_DATA
:
5304 l2cap_att_channel(conn
, cid
, skb
);
5308 if (smp_sig_channel(conn
, skb
))
5309 l2cap_conn_del(conn
->hcon
, EACCES
);
5313 l2cap_data_channel(conn
, cid
, skb
);
5318 /* ---- L2CAP interface with lower layer (HCI) ---- */
5320 int l2cap_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
5322 int exact
= 0, lm1
= 0, lm2
= 0;
5323 struct l2cap_chan
*c
;
5325 BT_DBG("hdev %s, bdaddr %s", hdev
->name
, batostr(bdaddr
));
5327 /* Find listening sockets and check their link_mode */
5328 read_lock(&chan_list_lock
);
5329 list_for_each_entry(c
, &chan_list
, global_l
) {
5330 struct sock
*sk
= c
->sk
;
5332 if (c
->state
!= BT_LISTEN
)
5335 if (!bacmp(&bt_sk(sk
)->src
, &hdev
->bdaddr
)) {
5336 lm1
|= HCI_LM_ACCEPT
;
5337 if (test_bit(FLAG_ROLE_SWITCH
, &c
->flags
))
5338 lm1
|= HCI_LM_MASTER
;
5340 } else if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
)) {
5341 lm2
|= HCI_LM_ACCEPT
;
5342 if (test_bit(FLAG_ROLE_SWITCH
, &c
->flags
))
5343 lm2
|= HCI_LM_MASTER
;
5346 read_unlock(&chan_list_lock
);
5348 return exact
? lm1
: lm2
;
5351 void l2cap_connect_cfm(struct hci_conn
*hcon
, u8 status
)
5353 struct l2cap_conn
*conn
;
5355 BT_DBG("hcon %p bdaddr %s status %d", hcon
, batostr(&hcon
->dst
), status
);
5358 conn
= l2cap_conn_add(hcon
, status
);
5360 l2cap_conn_ready(conn
);
5362 l2cap_conn_del(hcon
, bt_to_errno(status
));
5366 int l2cap_disconn_ind(struct hci_conn
*hcon
)
5368 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
5370 BT_DBG("hcon %p", hcon
);
5373 return HCI_ERROR_REMOTE_USER_TERM
;
5374 return conn
->disc_reason
;
5377 void l2cap_disconn_cfm(struct hci_conn
*hcon
, u8 reason
)
5379 BT_DBG("hcon %p reason %d", hcon
, reason
);
5381 l2cap_conn_del(hcon
, bt_to_errno(reason
));
5384 static inline void l2cap_check_encryption(struct l2cap_chan
*chan
, u8 encrypt
)
5386 if (chan
->chan_type
!= L2CAP_CHAN_CONN_ORIENTED
)
5389 if (encrypt
== 0x00) {
5390 if (chan
->sec_level
== BT_SECURITY_MEDIUM
) {
5391 __set_chan_timer(chan
, L2CAP_ENC_TIMEOUT
);
5392 } else if (chan
->sec_level
== BT_SECURITY_HIGH
)
5393 l2cap_chan_close(chan
, ECONNREFUSED
);
5395 if (chan
->sec_level
== BT_SECURITY_MEDIUM
)
5396 __clear_chan_timer(chan
);
5400 int l2cap_security_cfm(struct hci_conn
*hcon
, u8 status
, u8 encrypt
)
5402 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
5403 struct l2cap_chan
*chan
;
5408 BT_DBG("conn %p status 0x%2.2x encrypt %u", conn
, status
, encrypt
);
5410 if (hcon
->type
== LE_LINK
) {
5411 if (!status
&& encrypt
)
5412 smp_distribute_keys(conn
, 0);
5413 cancel_delayed_work(&conn
->security_timer
);
5416 mutex_lock(&conn
->chan_lock
);
5418 list_for_each_entry(chan
, &conn
->chan_l
, list
) {
5419 l2cap_chan_lock(chan
);
5421 BT_DBG("chan %p scid 0x%4.4x state %s", chan
, chan
->scid
,
5422 state_to_string(chan
->state
));
5424 if (chan
->chan_type
== L2CAP_CHAN_CONN_FIX_A2MP
) {
5425 l2cap_chan_unlock(chan
);
5429 if (chan
->scid
== L2CAP_CID_LE_DATA
) {
5430 if (!status
&& encrypt
) {
5431 chan
->sec_level
= hcon
->sec_level
;
5432 l2cap_chan_ready(chan
);
5435 l2cap_chan_unlock(chan
);
5439 if (test_bit(CONF_CONNECT_PEND
, &chan
->conf_state
)) {
5440 l2cap_chan_unlock(chan
);
5444 if (!status
&& (chan
->state
== BT_CONNECTED
||
5445 chan
->state
== BT_CONFIG
)) {
5446 struct sock
*sk
= chan
->sk
;
5448 clear_bit(BT_SK_SUSPEND
, &bt_sk(sk
)->flags
);
5449 sk
->sk_state_change(sk
);
5451 l2cap_check_encryption(chan
, encrypt
);
5452 l2cap_chan_unlock(chan
);
5456 if (chan
->state
== BT_CONNECT
) {
5458 l2cap_send_conn_req(chan
);
5460 __set_chan_timer(chan
, L2CAP_DISC_TIMEOUT
);
5462 } else if (chan
->state
== BT_CONNECT2
) {
5463 struct sock
*sk
= chan
->sk
;
5464 struct l2cap_conn_rsp rsp
;
5470 if (test_bit(BT_SK_DEFER_SETUP
,
5471 &bt_sk(sk
)->flags
)) {
5472 struct sock
*parent
= bt_sk(sk
)->parent
;
5473 res
= L2CAP_CR_PEND
;
5474 stat
= L2CAP_CS_AUTHOR_PEND
;
5476 parent
->sk_data_ready(parent
, 0);
5478 __l2cap_state_change(chan
, BT_CONFIG
);
5479 res
= L2CAP_CR_SUCCESS
;
5480 stat
= L2CAP_CS_NO_INFO
;
5483 __l2cap_state_change(chan
, BT_DISCONN
);
5484 __set_chan_timer(chan
, L2CAP_DISC_TIMEOUT
);
5485 res
= L2CAP_CR_SEC_BLOCK
;
5486 stat
= L2CAP_CS_NO_INFO
;
5491 rsp
.scid
= cpu_to_le16(chan
->dcid
);
5492 rsp
.dcid
= cpu_to_le16(chan
->scid
);
5493 rsp
.result
= cpu_to_le16(res
);
5494 rsp
.status
= cpu_to_le16(stat
);
5495 l2cap_send_cmd(conn
, chan
->ident
, L2CAP_CONN_RSP
,
5498 if (!test_bit(CONF_REQ_SENT
, &chan
->conf_state
) &&
5499 res
== L2CAP_CR_SUCCESS
) {
5501 set_bit(CONF_REQ_SENT
, &chan
->conf_state
);
5502 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
5504 l2cap_build_conf_req(chan
, buf
),
5506 chan
->num_conf_req
++;
5510 l2cap_chan_unlock(chan
);
5513 mutex_unlock(&conn
->chan_lock
);
5518 int l2cap_recv_acldata(struct hci_conn
*hcon
, struct sk_buff
*skb
, u16 flags
)
5520 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
5523 conn
= l2cap_conn_add(hcon
, 0);
5528 BT_DBG("conn %p len %d flags 0x%x", conn
, skb
->len
, flags
);
5530 if (!(flags
& ACL_CONT
)) {
5531 struct l2cap_hdr
*hdr
;
5535 BT_ERR("Unexpected start frame (len %d)", skb
->len
);
5536 kfree_skb(conn
->rx_skb
);
5537 conn
->rx_skb
= NULL
;
5539 l2cap_conn_unreliable(conn
, ECOMM
);
5542 /* Start fragment always begin with Basic L2CAP header */
5543 if (skb
->len
< L2CAP_HDR_SIZE
) {
5544 BT_ERR("Frame is too short (len %d)", skb
->len
);
5545 l2cap_conn_unreliable(conn
, ECOMM
);
5549 hdr
= (struct l2cap_hdr
*) skb
->data
;
5550 len
= __le16_to_cpu(hdr
->len
) + L2CAP_HDR_SIZE
;
5552 if (len
== skb
->len
) {
5553 /* Complete frame received */
5554 l2cap_recv_frame(conn
, skb
);
5558 BT_DBG("Start: total len %d, frag len %d", len
, skb
->len
);
5560 if (skb
->len
> len
) {
5561 BT_ERR("Frame is too long (len %d, expected len %d)",
5563 l2cap_conn_unreliable(conn
, ECOMM
);
5567 /* Allocate skb for the complete frame (with header) */
5568 conn
->rx_skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
5572 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
5574 conn
->rx_len
= len
- skb
->len
;
5576 BT_DBG("Cont: frag len %d (expecting %d)", skb
->len
, conn
->rx_len
);
5578 if (!conn
->rx_len
) {
5579 BT_ERR("Unexpected continuation frame (len %d)", skb
->len
);
5580 l2cap_conn_unreliable(conn
, ECOMM
);
5584 if (skb
->len
> conn
->rx_len
) {
5585 BT_ERR("Fragment is too long (len %d, expected %d)",
5586 skb
->len
, conn
->rx_len
);
5587 kfree_skb(conn
->rx_skb
);
5588 conn
->rx_skb
= NULL
;
5590 l2cap_conn_unreliable(conn
, ECOMM
);
5594 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
5596 conn
->rx_len
-= skb
->len
;
5598 if (!conn
->rx_len
) {
5599 /* Complete frame received */
5600 l2cap_recv_frame(conn
, conn
->rx_skb
);
5601 conn
->rx_skb
= NULL
;
5610 static int l2cap_debugfs_show(struct seq_file
*f
, void *p
)
5612 struct l2cap_chan
*c
;
5614 read_lock(&chan_list_lock
);
5616 list_for_each_entry(c
, &chan_list
, global_l
) {
5617 struct sock
*sk
= c
->sk
;
5619 seq_printf(f
, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
5620 batostr(&bt_sk(sk
)->src
),
5621 batostr(&bt_sk(sk
)->dst
),
5622 c
->state
, __le16_to_cpu(c
->psm
),
5623 c
->scid
, c
->dcid
, c
->imtu
, c
->omtu
,
5624 c
->sec_level
, c
->mode
);
5627 read_unlock(&chan_list_lock
);
5632 static int l2cap_debugfs_open(struct inode
*inode
, struct file
*file
)
5634 return single_open(file
, l2cap_debugfs_show
, inode
->i_private
);
5637 static const struct file_operations l2cap_debugfs_fops
= {
5638 .open
= l2cap_debugfs_open
,
5640 .llseek
= seq_lseek
,
5641 .release
= single_release
,
5644 static struct dentry
*l2cap_debugfs
;
5646 int __init
l2cap_init(void)
5650 err
= l2cap_init_sockets();
5655 l2cap_debugfs
= debugfs_create_file("l2cap", 0444,
5656 bt_debugfs
, NULL
, &l2cap_debugfs_fops
);
5658 BT_ERR("Failed to create L2CAP debug file");
5664 void l2cap_exit(void)
5666 debugfs_remove(l2cap_debugfs
);
5667 l2cap_cleanup_sockets();
5670 module_param(disable_ertm
, bool, 0644);
5671 MODULE_PARM_DESC(disable_ertm
, "Disable enhanced retransmission mode");