2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc.
7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License version 2 as
11 published by the Free Software Foundation;
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24 SOFTWARE IS DISCLAIMED.
27 /* Bluetooth L2CAP core. */
29 #include <linux/module.h>
31 #include <linux/types.h>
32 #include <linux/capability.h>
33 #include <linux/errno.h>
34 #include <linux/kernel.h>
35 #include <linux/sched.h>
36 #include <linux/slab.h>
37 #include <linux/poll.h>
38 #include <linux/fcntl.h>
39 #include <linux/init.h>
40 #include <linux/interrupt.h>
41 #include <linux/socket.h>
42 #include <linux/skbuff.h>
43 #include <linux/list.h>
44 #include <linux/device.h>
45 #include <linux/debugfs.h>
46 #include <linux/seq_file.h>
47 #include <linux/uaccess.h>
48 #include <linux/crc16.h>
51 #include <asm/system.h>
52 #include <asm/unaligned.h>
54 #include <net/bluetooth/bluetooth.h>
55 #include <net/bluetooth/hci_core.h>
56 #include <net/bluetooth/l2cap.h>
58 #define VERSION "2.15"
62 static u32 l2cap_feat_mask
= L2CAP_FEAT_FIXED_CHAN
;
63 static u8 l2cap_fixed_chan
[8] = { 0x02, };
65 static struct workqueue_struct
*_busy_wq
;
67 struct bt_sock_list l2cap_sk_list
= {
68 .lock
= __RW_LOCK_UNLOCKED(l2cap_sk_list
.lock
)
71 static void l2cap_busy_work(struct work_struct
*work
);
73 static void l2cap_sock_close(struct sock
*sk
);
75 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
76 u8 code
, u8 ident
, u16 dlen
, void *data
);
78 static int l2cap_ertm_data_rcv(struct sock
*sk
, struct sk_buff
*skb
);
80 /* ---- L2CAP timers ---- */
81 void l2cap_sock_set_timer(struct sock
*sk
, long timeout
)
83 BT_DBG("sk %p state %d timeout %ld", sk
, sk
->sk_state
, timeout
);
84 sk_reset_timer(sk
, &sk
->sk_timer
, jiffies
+ timeout
);
87 static void l2cap_sock_clear_timer(struct sock
*sk
)
89 BT_DBG("sock %p state %d", sk
, sk
->sk_state
);
90 sk_stop_timer(sk
, &sk
->sk_timer
);
93 /* ---- L2CAP channels ---- */
94 static struct sock
*__l2cap_get_chan_by_dcid(struct l2cap_chan_list
*l
, u16 cid
)
97 for (s
= l
->head
; s
; s
= l2cap_pi(s
)->next_c
) {
98 if (l2cap_pi(s
)->dcid
== cid
)
104 static struct sock
*__l2cap_get_chan_by_scid(struct l2cap_chan_list
*l
, u16 cid
)
107 for (s
= l
->head
; s
; s
= l2cap_pi(s
)->next_c
) {
108 if (l2cap_pi(s
)->scid
== cid
)
114 /* Find channel with given SCID.
115 * Returns locked socket */
116 static inline struct sock
*l2cap_get_chan_by_scid(struct l2cap_chan_list
*l
, u16 cid
)
120 s
= __l2cap_get_chan_by_scid(l
, cid
);
123 read_unlock(&l
->lock
);
127 static struct sock
*__l2cap_get_chan_by_ident(struct l2cap_chan_list
*l
, u8 ident
)
130 for (s
= l
->head
; s
; s
= l2cap_pi(s
)->next_c
) {
131 if (l2cap_pi(s
)->ident
== ident
)
137 static inline struct sock
*l2cap_get_chan_by_ident(struct l2cap_chan_list
*l
, u8 ident
)
141 s
= __l2cap_get_chan_by_ident(l
, ident
);
144 read_unlock(&l
->lock
);
148 static u16
l2cap_alloc_cid(struct l2cap_chan_list
*l
)
150 u16 cid
= L2CAP_CID_DYN_START
;
152 for (; cid
< L2CAP_CID_DYN_END
; cid
++) {
153 if (!__l2cap_get_chan_by_scid(l
, cid
))
160 static inline void __l2cap_chan_link(struct l2cap_chan_list
*l
, struct sock
*sk
)
165 l2cap_pi(l
->head
)->prev_c
= sk
;
167 l2cap_pi(sk
)->next_c
= l
->head
;
168 l2cap_pi(sk
)->prev_c
= NULL
;
172 static inline void l2cap_chan_unlink(struct l2cap_chan_list
*l
, struct sock
*sk
)
174 struct sock
*next
= l2cap_pi(sk
)->next_c
, *prev
= l2cap_pi(sk
)->prev_c
;
176 write_lock_bh(&l
->lock
);
181 l2cap_pi(next
)->prev_c
= prev
;
183 l2cap_pi(prev
)->next_c
= next
;
184 write_unlock_bh(&l
->lock
);
189 static void __l2cap_chan_add(struct l2cap_conn
*conn
, struct sock
*sk
, struct sock
*parent
)
191 struct l2cap_chan_list
*l
= &conn
->chan_list
;
193 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn
,
194 l2cap_pi(sk
)->psm
, l2cap_pi(sk
)->dcid
);
196 conn
->disc_reason
= 0x13;
198 l2cap_pi(sk
)->conn
= conn
;
200 if (sk
->sk_type
== SOCK_SEQPACKET
|| sk
->sk_type
== SOCK_STREAM
) {
201 /* Alloc CID for connection-oriented socket */
202 l2cap_pi(sk
)->scid
= l2cap_alloc_cid(l
);
203 } else if (sk
->sk_type
== SOCK_DGRAM
) {
204 /* Connectionless socket */
205 l2cap_pi(sk
)->scid
= L2CAP_CID_CONN_LESS
;
206 l2cap_pi(sk
)->dcid
= L2CAP_CID_CONN_LESS
;
207 l2cap_pi(sk
)->omtu
= L2CAP_DEFAULT_MTU
;
209 /* Raw socket can send/recv signalling messages only */
210 l2cap_pi(sk
)->scid
= L2CAP_CID_SIGNALING
;
211 l2cap_pi(sk
)->dcid
= L2CAP_CID_SIGNALING
;
212 l2cap_pi(sk
)->omtu
= L2CAP_DEFAULT_MTU
;
215 __l2cap_chan_link(l
, sk
);
218 bt_accept_enqueue(parent
, sk
);
222 * Must be called on the locked socket. */
223 static void l2cap_chan_del(struct sock
*sk
, int err
)
225 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
226 struct sock
*parent
= bt_sk(sk
)->parent
;
228 l2cap_sock_clear_timer(sk
);
230 BT_DBG("sk %p, conn %p, err %d", sk
, conn
, err
);
233 /* Unlink from channel list */
234 l2cap_chan_unlink(&conn
->chan_list
, sk
);
235 l2cap_pi(sk
)->conn
= NULL
;
236 hci_conn_put(conn
->hcon
);
239 sk
->sk_state
= BT_CLOSED
;
240 sock_set_flag(sk
, SOCK_ZAPPED
);
246 bt_accept_unlink(sk
);
247 parent
->sk_data_ready(parent
, 0);
249 sk
->sk_state_change(sk
);
251 skb_queue_purge(TX_QUEUE(sk
));
253 if (l2cap_pi(sk
)->mode
== L2CAP_MODE_ERTM
) {
254 struct srej_list
*l
, *tmp
;
256 del_timer(&l2cap_pi(sk
)->retrans_timer
);
257 del_timer(&l2cap_pi(sk
)->monitor_timer
);
258 del_timer(&l2cap_pi(sk
)->ack_timer
);
260 skb_queue_purge(SREJ_QUEUE(sk
));
261 skb_queue_purge(BUSY_QUEUE(sk
));
263 list_for_each_entry_safe(l
, tmp
, SREJ_LIST(sk
), list
) {
270 static inline u8
l2cap_get_auth_type(struct sock
*sk
)
272 if (sk
->sk_type
== SOCK_RAW
) {
273 switch (l2cap_pi(sk
)->sec_level
) {
274 case BT_SECURITY_HIGH
:
275 return HCI_AT_DEDICATED_BONDING_MITM
;
276 case BT_SECURITY_MEDIUM
:
277 return HCI_AT_DEDICATED_BONDING
;
279 return HCI_AT_NO_BONDING
;
281 } else if (l2cap_pi(sk
)->psm
== cpu_to_le16(0x0001)) {
282 if (l2cap_pi(sk
)->sec_level
== BT_SECURITY_LOW
)
283 l2cap_pi(sk
)->sec_level
= BT_SECURITY_SDP
;
285 if (l2cap_pi(sk
)->sec_level
== BT_SECURITY_HIGH
)
286 return HCI_AT_NO_BONDING_MITM
;
288 return HCI_AT_NO_BONDING
;
290 switch (l2cap_pi(sk
)->sec_level
) {
291 case BT_SECURITY_HIGH
:
292 return HCI_AT_GENERAL_BONDING_MITM
;
293 case BT_SECURITY_MEDIUM
:
294 return HCI_AT_GENERAL_BONDING
;
296 return HCI_AT_NO_BONDING
;
301 /* Service level security */
302 static inline int l2cap_check_security(struct sock
*sk
)
304 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
307 auth_type
= l2cap_get_auth_type(sk
);
309 return hci_conn_security(conn
->hcon
, l2cap_pi(sk
)->sec_level
,
313 u8
l2cap_get_ident(struct l2cap_conn
*conn
)
317 /* Get next available identificator.
318 * 1 - 128 are used by kernel.
319 * 129 - 199 are reserved.
320 * 200 - 254 are used by utilities like l2ping, etc.
323 spin_lock_bh(&conn
->lock
);
325 if (++conn
->tx_ident
> 128)
330 spin_unlock_bh(&conn
->lock
);
335 void l2cap_send_cmd(struct l2cap_conn
*conn
, u8 ident
, u8 code
, u16 len
, void *data
)
337 struct sk_buff
*skb
= l2cap_build_cmd(conn
, code
, ident
, len
, data
);
340 BT_DBG("code 0x%2.2x", code
);
345 if (lmp_no_flush_capable(conn
->hcon
->hdev
))
346 flags
= ACL_START_NO_FLUSH
;
350 hci_send_acl(conn
->hcon
, skb
, flags
);
353 static inline void l2cap_send_sframe(struct l2cap_pinfo
*pi
, u16 control
)
356 struct l2cap_hdr
*lh
;
357 struct l2cap_conn
*conn
= pi
->conn
;
358 struct sock
*sk
= (struct sock
*)pi
;
359 int count
, hlen
= L2CAP_HDR_SIZE
+ 2;
362 if (sk
->sk_state
!= BT_CONNECTED
)
365 if (pi
->fcs
== L2CAP_FCS_CRC16
)
368 BT_DBG("pi %p, control 0x%2.2x", pi
, control
);
370 count
= min_t(unsigned int, conn
->mtu
, hlen
);
371 control
|= L2CAP_CTRL_FRAME_TYPE
;
373 if (pi
->conn_state
& L2CAP_CONN_SEND_FBIT
) {
374 control
|= L2CAP_CTRL_FINAL
;
375 pi
->conn_state
&= ~L2CAP_CONN_SEND_FBIT
;
378 if (pi
->conn_state
& L2CAP_CONN_SEND_PBIT
) {
379 control
|= L2CAP_CTRL_POLL
;
380 pi
->conn_state
&= ~L2CAP_CONN_SEND_PBIT
;
383 skb
= bt_skb_alloc(count
, GFP_ATOMIC
);
387 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
388 lh
->len
= cpu_to_le16(hlen
- L2CAP_HDR_SIZE
);
389 lh
->cid
= cpu_to_le16(pi
->dcid
);
390 put_unaligned_le16(control
, skb_put(skb
, 2));
392 if (pi
->fcs
== L2CAP_FCS_CRC16
) {
393 u16 fcs
= crc16(0, (u8
*)lh
, count
- 2);
394 put_unaligned_le16(fcs
, skb_put(skb
, 2));
397 if (lmp_no_flush_capable(conn
->hcon
->hdev
))
398 flags
= ACL_START_NO_FLUSH
;
402 hci_send_acl(pi
->conn
->hcon
, skb
, flags
);
405 static inline void l2cap_send_rr_or_rnr(struct l2cap_pinfo
*pi
, u16 control
)
407 if (pi
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
408 control
|= L2CAP_SUPER_RCV_NOT_READY
;
409 pi
->conn_state
|= L2CAP_CONN_RNR_SENT
;
411 control
|= L2CAP_SUPER_RCV_READY
;
413 control
|= pi
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
415 l2cap_send_sframe(pi
, control
);
418 static inline int __l2cap_no_conn_pending(struct sock
*sk
)
420 return !(l2cap_pi(sk
)->conf_state
& L2CAP_CONF_CONNECT_PEND
);
423 static void l2cap_do_start(struct sock
*sk
)
425 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
427 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) {
428 if (!(conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
))
431 if (l2cap_check_security(sk
) && __l2cap_no_conn_pending(sk
)) {
432 struct l2cap_conn_req req
;
433 req
.scid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
434 req
.psm
= l2cap_pi(sk
)->psm
;
436 l2cap_pi(sk
)->ident
= l2cap_get_ident(conn
);
437 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
439 l2cap_send_cmd(conn
, l2cap_pi(sk
)->ident
,
440 L2CAP_CONN_REQ
, sizeof(req
), &req
);
443 struct l2cap_info_req req
;
444 req
.type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
446 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
447 conn
->info_ident
= l2cap_get_ident(conn
);
449 mod_timer(&conn
->info_timer
, jiffies
+
450 msecs_to_jiffies(L2CAP_INFO_TIMEOUT
));
452 l2cap_send_cmd(conn
, conn
->info_ident
,
453 L2CAP_INFO_REQ
, sizeof(req
), &req
);
457 static inline int l2cap_mode_supported(__u8 mode
, __u32 feat_mask
)
459 u32 local_feat_mask
= l2cap_feat_mask
;
461 local_feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
;
464 case L2CAP_MODE_ERTM
:
465 return L2CAP_FEAT_ERTM
& feat_mask
& local_feat_mask
;
466 case L2CAP_MODE_STREAMING
:
467 return L2CAP_FEAT_STREAMING
& feat_mask
& local_feat_mask
;
473 static void l2cap_send_disconn_req(struct l2cap_conn
*conn
, struct sock
*sk
, int err
)
475 struct l2cap_disconn_req req
;
480 skb_queue_purge(TX_QUEUE(sk
));
482 if (l2cap_pi(sk
)->mode
== L2CAP_MODE_ERTM
) {
483 del_timer(&l2cap_pi(sk
)->retrans_timer
);
484 del_timer(&l2cap_pi(sk
)->monitor_timer
);
485 del_timer(&l2cap_pi(sk
)->ack_timer
);
488 req
.dcid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
489 req
.scid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
490 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
491 L2CAP_DISCONN_REQ
, sizeof(req
), &req
);
493 sk
->sk_state
= BT_DISCONN
;
497 /* ---- L2CAP connections ---- */
498 static void l2cap_conn_start(struct l2cap_conn
*conn
)
500 struct l2cap_chan_list
*l
= &conn
->chan_list
;
501 struct sock_del_list del
, *tmp1
, *tmp2
;
504 BT_DBG("conn %p", conn
);
506 INIT_LIST_HEAD(&del
.list
);
510 for (sk
= l
->head
; sk
; sk
= l2cap_pi(sk
)->next_c
) {
513 if (sk
->sk_type
!= SOCK_SEQPACKET
&&
514 sk
->sk_type
!= SOCK_STREAM
) {
519 if (sk
->sk_state
== BT_CONNECT
) {
520 struct l2cap_conn_req req
;
522 if (!l2cap_check_security(sk
) ||
523 !__l2cap_no_conn_pending(sk
)) {
528 if (!l2cap_mode_supported(l2cap_pi(sk
)->mode
,
530 && l2cap_pi(sk
)->conf_state
&
531 L2CAP_CONF_STATE2_DEVICE
) {
532 tmp1
= kzalloc(sizeof(struct sock_del_list
),
535 list_add_tail(&tmp1
->list
, &del
.list
);
540 req
.scid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
541 req
.psm
= l2cap_pi(sk
)->psm
;
543 l2cap_pi(sk
)->ident
= l2cap_get_ident(conn
);
544 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
546 l2cap_send_cmd(conn
, l2cap_pi(sk
)->ident
,
547 L2CAP_CONN_REQ
, sizeof(req
), &req
);
549 } else if (sk
->sk_state
== BT_CONNECT2
) {
550 struct l2cap_conn_rsp rsp
;
552 rsp
.scid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
553 rsp
.dcid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
555 if (l2cap_check_security(sk
)) {
556 if (bt_sk(sk
)->defer_setup
) {
557 struct sock
*parent
= bt_sk(sk
)->parent
;
558 rsp
.result
= cpu_to_le16(L2CAP_CR_PEND
);
559 rsp
.status
= cpu_to_le16(L2CAP_CS_AUTHOR_PEND
);
560 parent
->sk_data_ready(parent
, 0);
563 sk
->sk_state
= BT_CONFIG
;
564 rsp
.result
= cpu_to_le16(L2CAP_CR_SUCCESS
);
565 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
568 rsp
.result
= cpu_to_le16(L2CAP_CR_PEND
);
569 rsp
.status
= cpu_to_le16(L2CAP_CS_AUTHEN_PEND
);
572 l2cap_send_cmd(conn
, l2cap_pi(sk
)->ident
,
573 L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
575 if (l2cap_pi(sk
)->conf_state
& L2CAP_CONF_REQ_SENT
||
576 rsp
.result
!= L2CAP_CR_SUCCESS
) {
581 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_REQ_SENT
;
582 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
583 l2cap_build_conf_req(sk
, buf
), buf
);
584 l2cap_pi(sk
)->num_conf_req
++;
590 read_unlock(&l
->lock
);
592 list_for_each_entry_safe(tmp1
, tmp2
, &del
.list
, list
) {
593 bh_lock_sock(tmp1
->sk
);
594 __l2cap_sock_close(tmp1
->sk
, ECONNRESET
);
595 bh_unlock_sock(tmp1
->sk
);
596 list_del(&tmp1
->list
);
601 static void l2cap_conn_ready(struct l2cap_conn
*conn
)
603 struct l2cap_chan_list
*l
= &conn
->chan_list
;
606 BT_DBG("conn %p", conn
);
610 for (sk
= l
->head
; sk
; sk
= l2cap_pi(sk
)->next_c
) {
613 if (sk
->sk_type
!= SOCK_SEQPACKET
&&
614 sk
->sk_type
!= SOCK_STREAM
) {
615 l2cap_sock_clear_timer(sk
);
616 sk
->sk_state
= BT_CONNECTED
;
617 sk
->sk_state_change(sk
);
618 } else if (sk
->sk_state
== BT_CONNECT
)
624 read_unlock(&l
->lock
);
627 /* Notify sockets that we cannot guaranty reliability anymore */
628 static void l2cap_conn_unreliable(struct l2cap_conn
*conn
, int err
)
630 struct l2cap_chan_list
*l
= &conn
->chan_list
;
633 BT_DBG("conn %p", conn
);
637 for (sk
= l
->head
; sk
; sk
= l2cap_pi(sk
)->next_c
) {
638 if (l2cap_pi(sk
)->force_reliable
)
642 read_unlock(&l
->lock
);
645 static void l2cap_info_timeout(unsigned long arg
)
647 struct l2cap_conn
*conn
= (void *) arg
;
649 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
650 conn
->info_ident
= 0;
652 l2cap_conn_start(conn
);
655 static struct l2cap_conn
*l2cap_conn_add(struct hci_conn
*hcon
, u8 status
)
657 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
662 conn
= kzalloc(sizeof(struct l2cap_conn
), GFP_ATOMIC
);
666 hcon
->l2cap_data
= conn
;
669 BT_DBG("hcon %p conn %p", hcon
, conn
);
671 conn
->mtu
= hcon
->hdev
->acl_mtu
;
672 conn
->src
= &hcon
->hdev
->bdaddr
;
673 conn
->dst
= &hcon
->dst
;
677 spin_lock_init(&conn
->lock
);
678 rwlock_init(&conn
->chan_list
.lock
);
680 setup_timer(&conn
->info_timer
, l2cap_info_timeout
,
681 (unsigned long) conn
);
683 conn
->disc_reason
= 0x13;
688 static void l2cap_conn_del(struct hci_conn
*hcon
, int err
)
690 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
696 BT_DBG("hcon %p conn %p, err %d", hcon
, conn
, err
);
698 kfree_skb(conn
->rx_skb
);
701 while ((sk
= conn
->chan_list
.head
)) {
703 l2cap_chan_del(sk
, err
);
708 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
)
709 del_timer_sync(&conn
->info_timer
);
711 hcon
->l2cap_data
= NULL
;
715 static inline void l2cap_chan_add(struct l2cap_conn
*conn
, struct sock
*sk
, struct sock
*parent
)
717 struct l2cap_chan_list
*l
= &conn
->chan_list
;
718 write_lock_bh(&l
->lock
);
719 __l2cap_chan_add(conn
, sk
, parent
);
720 write_unlock_bh(&l
->lock
);
723 /* ---- Socket interface ---- */
725 /* Find socket with psm and source bdaddr.
726 * Returns closest match.
728 static struct sock
*l2cap_get_sock_by_psm(int state
, __le16 psm
, bdaddr_t
*src
)
730 struct sock
*sk
= NULL
, *sk1
= NULL
;
731 struct hlist_node
*node
;
733 read_lock(&l2cap_sk_list
.lock
);
735 sk_for_each(sk
, node
, &l2cap_sk_list
.head
) {
736 if (state
&& sk
->sk_state
!= state
)
739 if (l2cap_pi(sk
)->psm
== psm
) {
741 if (!bacmp(&bt_sk(sk
)->src
, src
))
745 if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
))
750 read_unlock(&l2cap_sk_list
.lock
);
752 return node
? sk
: sk1
;
755 static void l2cap_sock_cleanup_listen(struct sock
*parent
)
759 BT_DBG("parent %p", parent
);
761 /* Close not yet accepted channels */
762 while ((sk
= bt_accept_dequeue(parent
, NULL
)))
763 l2cap_sock_close(sk
);
765 parent
->sk_state
= BT_CLOSED
;
766 sock_set_flag(parent
, SOCK_ZAPPED
);
769 /* Kill socket (only if zapped and orphan)
770 * Must be called on unlocked socket.
772 void l2cap_sock_kill(struct sock
*sk
)
774 if (!sock_flag(sk
, SOCK_ZAPPED
) || sk
->sk_socket
)
777 BT_DBG("sk %p state %d", sk
, sk
->sk_state
);
779 /* Kill poor orphan */
780 bt_sock_unlink(&l2cap_sk_list
, sk
);
781 sock_set_flag(sk
, SOCK_DEAD
);
785 void __l2cap_sock_close(struct sock
*sk
, int reason
)
787 BT_DBG("sk %p state %d socket %p", sk
, sk
->sk_state
, sk
->sk_socket
);
789 switch (sk
->sk_state
) {
791 l2cap_sock_cleanup_listen(sk
);
796 if (sk
->sk_type
== SOCK_SEQPACKET
||
797 sk
->sk_type
== SOCK_STREAM
) {
798 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
800 l2cap_sock_set_timer(sk
, sk
->sk_sndtimeo
);
801 l2cap_send_disconn_req(conn
, sk
, reason
);
803 l2cap_chan_del(sk
, reason
);
807 if (sk
->sk_type
== SOCK_SEQPACKET
||
808 sk
->sk_type
== SOCK_STREAM
) {
809 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
810 struct l2cap_conn_rsp rsp
;
813 if (bt_sk(sk
)->defer_setup
)
814 result
= L2CAP_CR_SEC_BLOCK
;
816 result
= L2CAP_CR_BAD_PSM
;
817 sk
->sk_state
= BT_DISCONN
;
819 rsp
.scid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
820 rsp
.dcid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
821 rsp
.result
= cpu_to_le16(result
);
822 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
823 l2cap_send_cmd(conn
, l2cap_pi(sk
)->ident
,
824 L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
826 l2cap_chan_del(sk
, reason
);
831 l2cap_chan_del(sk
, reason
);
835 sock_set_flag(sk
, SOCK_ZAPPED
);
840 /* Must be called on unlocked socket. */
841 static void l2cap_sock_close(struct sock
*sk
)
843 l2cap_sock_clear_timer(sk
);
845 __l2cap_sock_close(sk
, ECONNRESET
);
850 int l2cap_do_connect(struct sock
*sk
)
852 bdaddr_t
*src
= &bt_sk(sk
)->src
;
853 bdaddr_t
*dst
= &bt_sk(sk
)->dst
;
854 struct l2cap_conn
*conn
;
855 struct hci_conn
*hcon
;
856 struct hci_dev
*hdev
;
860 BT_DBG("%s -> %s psm 0x%2.2x", batostr(src
), batostr(dst
),
863 hdev
= hci_get_route(dst
, src
);
865 return -EHOSTUNREACH
;
867 hci_dev_lock_bh(hdev
);
871 auth_type
= l2cap_get_auth_type(sk
);
873 hcon
= hci_connect(hdev
, ACL_LINK
, dst
,
874 l2cap_pi(sk
)->sec_level
, auth_type
);
878 conn
= l2cap_conn_add(hcon
, 0);
886 /* Update source addr of the socket */
887 bacpy(src
, conn
->src
);
889 l2cap_chan_add(conn
, sk
, NULL
);
891 sk
->sk_state
= BT_CONNECT
;
892 l2cap_sock_set_timer(sk
, sk
->sk_sndtimeo
);
894 if (hcon
->state
== BT_CONNECTED
) {
895 if (sk
->sk_type
!= SOCK_SEQPACKET
&&
896 sk
->sk_type
!= SOCK_STREAM
) {
897 l2cap_sock_clear_timer(sk
);
898 if (l2cap_check_security(sk
))
899 sk
->sk_state
= BT_CONNECTED
;
905 hci_dev_unlock_bh(hdev
);
910 static int __l2cap_wait_ack(struct sock
*sk
)
912 DECLARE_WAITQUEUE(wait
, current
);
916 add_wait_queue(sk_sleep(sk
), &wait
);
917 while ((l2cap_pi(sk
)->unacked_frames
> 0 && l2cap_pi(sk
)->conn
)) {
918 set_current_state(TASK_INTERRUPTIBLE
);
923 if (signal_pending(current
)) {
924 err
= sock_intr_errno(timeo
);
929 timeo
= schedule_timeout(timeo
);
932 err
= sock_error(sk
);
936 set_current_state(TASK_RUNNING
);
937 remove_wait_queue(sk_sleep(sk
), &wait
);
941 static void l2cap_monitor_timeout(unsigned long arg
)
943 struct sock
*sk
= (void *) arg
;
948 if (l2cap_pi(sk
)->retry_count
>= l2cap_pi(sk
)->remote_max_tx
) {
949 l2cap_send_disconn_req(l2cap_pi(sk
)->conn
, sk
, ECONNABORTED
);
954 l2cap_pi(sk
)->retry_count
++;
955 __mod_monitor_timer();
957 l2cap_send_rr_or_rnr(l2cap_pi(sk
), L2CAP_CTRL_POLL
);
961 static void l2cap_retrans_timeout(unsigned long arg
)
963 struct sock
*sk
= (void *) arg
;
968 l2cap_pi(sk
)->retry_count
= 1;
969 __mod_monitor_timer();
971 l2cap_pi(sk
)->conn_state
|= L2CAP_CONN_WAIT_F
;
973 l2cap_send_rr_or_rnr(l2cap_pi(sk
), L2CAP_CTRL_POLL
);
977 static void l2cap_drop_acked_frames(struct sock
*sk
)
981 while ((skb
= skb_peek(TX_QUEUE(sk
))) &&
982 l2cap_pi(sk
)->unacked_frames
) {
983 if (bt_cb(skb
)->tx_seq
== l2cap_pi(sk
)->expected_ack_seq
)
986 skb
= skb_dequeue(TX_QUEUE(sk
));
989 l2cap_pi(sk
)->unacked_frames
--;
992 if (!l2cap_pi(sk
)->unacked_frames
)
993 del_timer(&l2cap_pi(sk
)->retrans_timer
);
996 static inline void l2cap_do_send(struct sock
*sk
, struct sk_buff
*skb
)
998 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
999 struct hci_conn
*hcon
= pi
->conn
->hcon
;
1002 BT_DBG("sk %p, skb %p len %d", sk
, skb
, skb
->len
);
1004 if (!pi
->flushable
&& lmp_no_flush_capable(hcon
->hdev
))
1005 flags
= ACL_START_NO_FLUSH
;
1009 hci_send_acl(hcon
, skb
, flags
);
1012 static void l2cap_streaming_send(struct sock
*sk
)
1014 struct sk_buff
*skb
;
1015 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1018 while ((skb
= skb_dequeue(TX_QUEUE(sk
)))) {
1019 control
= get_unaligned_le16(skb
->data
+ L2CAP_HDR_SIZE
);
1020 control
|= pi
->next_tx_seq
<< L2CAP_CTRL_TXSEQ_SHIFT
;
1021 put_unaligned_le16(control
, skb
->data
+ L2CAP_HDR_SIZE
);
1023 if (pi
->fcs
== L2CAP_FCS_CRC16
) {
1024 fcs
= crc16(0, (u8
*)skb
->data
, skb
->len
- 2);
1025 put_unaligned_le16(fcs
, skb
->data
+ skb
->len
- 2);
1028 l2cap_do_send(sk
, skb
);
1030 pi
->next_tx_seq
= (pi
->next_tx_seq
+ 1) % 64;
1034 static void l2cap_retransmit_one_frame(struct sock
*sk
, u8 tx_seq
)
1036 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1037 struct sk_buff
*skb
, *tx_skb
;
1040 skb
= skb_peek(TX_QUEUE(sk
));
1045 if (bt_cb(skb
)->tx_seq
== tx_seq
)
1048 if (skb_queue_is_last(TX_QUEUE(sk
), skb
))
1051 } while ((skb
= skb_queue_next(TX_QUEUE(sk
), skb
)));
1053 if (pi
->remote_max_tx
&&
1054 bt_cb(skb
)->retries
== pi
->remote_max_tx
) {
1055 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNABORTED
);
1059 tx_skb
= skb_clone(skb
, GFP_ATOMIC
);
1060 bt_cb(skb
)->retries
++;
1061 control
= get_unaligned_le16(tx_skb
->data
+ L2CAP_HDR_SIZE
);
1063 if (pi
->conn_state
& L2CAP_CONN_SEND_FBIT
) {
1064 control
|= L2CAP_CTRL_FINAL
;
1065 pi
->conn_state
&= ~L2CAP_CONN_SEND_FBIT
;
1068 control
|= (pi
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
)
1069 | (tx_seq
<< L2CAP_CTRL_TXSEQ_SHIFT
);
1071 put_unaligned_le16(control
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1073 if (pi
->fcs
== L2CAP_FCS_CRC16
) {
1074 fcs
= crc16(0, (u8
*)tx_skb
->data
, tx_skb
->len
- 2);
1075 put_unaligned_le16(fcs
, tx_skb
->data
+ tx_skb
->len
- 2);
1078 l2cap_do_send(sk
, tx_skb
);
1081 static int l2cap_ertm_send(struct sock
*sk
)
1083 struct sk_buff
*skb
, *tx_skb
;
1084 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1088 if (sk
->sk_state
!= BT_CONNECTED
)
1091 while ((skb
= sk
->sk_send_head
) && (!l2cap_tx_window_full(sk
))) {
1093 if (pi
->remote_max_tx
&&
1094 bt_cb(skb
)->retries
== pi
->remote_max_tx
) {
1095 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNABORTED
);
1099 tx_skb
= skb_clone(skb
, GFP_ATOMIC
);
1101 bt_cb(skb
)->retries
++;
1103 control
= get_unaligned_le16(tx_skb
->data
+ L2CAP_HDR_SIZE
);
1104 control
&= L2CAP_CTRL_SAR
;
1106 if (pi
->conn_state
& L2CAP_CONN_SEND_FBIT
) {
1107 control
|= L2CAP_CTRL_FINAL
;
1108 pi
->conn_state
&= ~L2CAP_CONN_SEND_FBIT
;
1110 control
|= (pi
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
)
1111 | (pi
->next_tx_seq
<< L2CAP_CTRL_TXSEQ_SHIFT
);
1112 put_unaligned_le16(control
, tx_skb
->data
+ L2CAP_HDR_SIZE
);
1115 if (pi
->fcs
== L2CAP_FCS_CRC16
) {
1116 fcs
= crc16(0, (u8
*)skb
->data
, tx_skb
->len
- 2);
1117 put_unaligned_le16(fcs
, skb
->data
+ tx_skb
->len
- 2);
1120 l2cap_do_send(sk
, tx_skb
);
1122 __mod_retrans_timer();
1124 bt_cb(skb
)->tx_seq
= pi
->next_tx_seq
;
1125 pi
->next_tx_seq
= (pi
->next_tx_seq
+ 1) % 64;
1127 pi
->unacked_frames
++;
1130 if (skb_queue_is_last(TX_QUEUE(sk
), skb
))
1131 sk
->sk_send_head
= NULL
;
1133 sk
->sk_send_head
= skb_queue_next(TX_QUEUE(sk
), skb
);
1141 static int l2cap_retransmit_frames(struct sock
*sk
)
1143 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1146 if (!skb_queue_empty(TX_QUEUE(sk
)))
1147 sk
->sk_send_head
= TX_QUEUE(sk
)->next
;
1149 pi
->next_tx_seq
= pi
->expected_ack_seq
;
1150 ret
= l2cap_ertm_send(sk
);
1154 static void l2cap_send_ack(struct l2cap_pinfo
*pi
)
1156 struct sock
*sk
= (struct sock
*)pi
;
1159 control
|= pi
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
1161 if (pi
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
1162 control
|= L2CAP_SUPER_RCV_NOT_READY
;
1163 pi
->conn_state
|= L2CAP_CONN_RNR_SENT
;
1164 l2cap_send_sframe(pi
, control
);
1168 if (l2cap_ertm_send(sk
) > 0)
1171 control
|= L2CAP_SUPER_RCV_READY
;
1172 l2cap_send_sframe(pi
, control
);
1175 static void l2cap_send_srejtail(struct sock
*sk
)
1177 struct srej_list
*tail
;
1180 control
= L2CAP_SUPER_SELECT_REJECT
;
1181 control
|= L2CAP_CTRL_FINAL
;
1183 tail
= list_entry(SREJ_LIST(sk
)->prev
, struct srej_list
, list
);
1184 control
|= tail
->tx_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
1186 l2cap_send_sframe(l2cap_pi(sk
), control
);
1189 static inline int l2cap_skbuff_fromiovec(struct sock
*sk
, struct msghdr
*msg
, int len
, int count
, struct sk_buff
*skb
)
1191 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
1192 struct sk_buff
**frag
;
1195 if (memcpy_fromiovec(skb_put(skb
, count
), msg
->msg_iov
, count
))
1201 /* Continuation fragments (no L2CAP header) */
1202 frag
= &skb_shinfo(skb
)->frag_list
;
1204 count
= min_t(unsigned int, conn
->mtu
, len
);
1206 *frag
= bt_skb_send_alloc(sk
, count
, msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1209 if (memcpy_fromiovec(skb_put(*frag
, count
), msg
->msg_iov
, count
))
1215 frag
= &(*frag
)->next
;
1221 static struct sk_buff
*l2cap_create_connless_pdu(struct sock
*sk
, struct msghdr
*msg
, size_t len
)
1223 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
1224 struct sk_buff
*skb
;
1225 int err
, count
, hlen
= L2CAP_HDR_SIZE
+ 2;
1226 struct l2cap_hdr
*lh
;
1228 BT_DBG("sk %p len %d", sk
, (int)len
);
1230 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1231 skb
= bt_skb_send_alloc(sk
, count
+ hlen
,
1232 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1234 return ERR_PTR(err
);
1236 /* Create L2CAP header */
1237 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1238 lh
->cid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
1239 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1240 put_unaligned_le16(l2cap_pi(sk
)->psm
, skb_put(skb
, 2));
1242 err
= l2cap_skbuff_fromiovec(sk
, msg
, len
, count
, skb
);
1243 if (unlikely(err
< 0)) {
1245 return ERR_PTR(err
);
1250 static struct sk_buff
*l2cap_create_basic_pdu(struct sock
*sk
, struct msghdr
*msg
, size_t len
)
1252 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
1253 struct sk_buff
*skb
;
1254 int err
, count
, hlen
= L2CAP_HDR_SIZE
;
1255 struct l2cap_hdr
*lh
;
1257 BT_DBG("sk %p len %d", sk
, (int)len
);
1259 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1260 skb
= bt_skb_send_alloc(sk
, count
+ hlen
,
1261 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1263 return ERR_PTR(err
);
1265 /* Create L2CAP header */
1266 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1267 lh
->cid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
1268 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1270 err
= l2cap_skbuff_fromiovec(sk
, msg
, len
, count
, skb
);
1271 if (unlikely(err
< 0)) {
1273 return ERR_PTR(err
);
1278 static struct sk_buff
*l2cap_create_iframe_pdu(struct sock
*sk
, struct msghdr
*msg
, size_t len
, u16 control
, u16 sdulen
)
1280 struct l2cap_conn
*conn
= l2cap_pi(sk
)->conn
;
1281 struct sk_buff
*skb
;
1282 int err
, count
, hlen
= L2CAP_HDR_SIZE
+ 2;
1283 struct l2cap_hdr
*lh
;
1285 BT_DBG("sk %p len %d", sk
, (int)len
);
1288 return ERR_PTR(-ENOTCONN
);
1293 if (l2cap_pi(sk
)->fcs
== L2CAP_FCS_CRC16
)
1296 count
= min_t(unsigned int, (conn
->mtu
- hlen
), len
);
1297 skb
= bt_skb_send_alloc(sk
, count
+ hlen
,
1298 msg
->msg_flags
& MSG_DONTWAIT
, &err
);
1300 return ERR_PTR(err
);
1302 /* Create L2CAP header */
1303 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1304 lh
->cid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
1305 lh
->len
= cpu_to_le16(len
+ (hlen
- L2CAP_HDR_SIZE
));
1306 put_unaligned_le16(control
, skb_put(skb
, 2));
1308 put_unaligned_le16(sdulen
, skb_put(skb
, 2));
1310 err
= l2cap_skbuff_fromiovec(sk
, msg
, len
, count
, skb
);
1311 if (unlikely(err
< 0)) {
1313 return ERR_PTR(err
);
1316 if (l2cap_pi(sk
)->fcs
== L2CAP_FCS_CRC16
)
1317 put_unaligned_le16(0, skb_put(skb
, 2));
1319 bt_cb(skb
)->retries
= 0;
1323 static inline int l2cap_sar_segment_sdu(struct sock
*sk
, struct msghdr
*msg
, size_t len
)
1325 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1326 struct sk_buff
*skb
;
1327 struct sk_buff_head sar_queue
;
1331 skb_queue_head_init(&sar_queue
);
1332 control
= L2CAP_SDU_START
;
1333 skb
= l2cap_create_iframe_pdu(sk
, msg
, pi
->remote_mps
, control
, len
);
1335 return PTR_ERR(skb
);
1337 __skb_queue_tail(&sar_queue
, skb
);
1338 len
-= pi
->remote_mps
;
1339 size
+= pi
->remote_mps
;
1344 if (len
> pi
->remote_mps
) {
1345 control
= L2CAP_SDU_CONTINUE
;
1346 buflen
= pi
->remote_mps
;
1348 control
= L2CAP_SDU_END
;
1352 skb
= l2cap_create_iframe_pdu(sk
, msg
, buflen
, control
, 0);
1354 skb_queue_purge(&sar_queue
);
1355 return PTR_ERR(skb
);
1358 __skb_queue_tail(&sar_queue
, skb
);
1362 skb_queue_splice_tail(&sar_queue
, TX_QUEUE(sk
));
1363 if (sk
->sk_send_head
== NULL
)
1364 sk
->sk_send_head
= sar_queue
.next
;
1369 int l2cap_sock_sendmsg(struct kiocb
*iocb
, struct socket
*sock
, struct msghdr
*msg
, size_t len
)
1371 struct sock
*sk
= sock
->sk
;
1372 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1373 struct sk_buff
*skb
;
1377 BT_DBG("sock %p, sk %p", sock
, sk
);
1379 err
= sock_error(sk
);
1383 if (msg
->msg_flags
& MSG_OOB
)
1388 if (sk
->sk_state
!= BT_CONNECTED
) {
1393 /* Connectionless channel */
1394 if (sk
->sk_type
== SOCK_DGRAM
) {
1395 skb
= l2cap_create_connless_pdu(sk
, msg
, len
);
1399 l2cap_do_send(sk
, skb
);
1406 case L2CAP_MODE_BASIC
:
1407 /* Check outgoing MTU */
1408 if (len
> pi
->omtu
) {
1413 /* Create a basic PDU */
1414 skb
= l2cap_create_basic_pdu(sk
, msg
, len
);
1420 l2cap_do_send(sk
, skb
);
1424 case L2CAP_MODE_ERTM
:
1425 case L2CAP_MODE_STREAMING
:
1426 /* Entire SDU fits into one PDU */
1427 if (len
<= pi
->remote_mps
) {
1428 control
= L2CAP_SDU_UNSEGMENTED
;
1429 skb
= l2cap_create_iframe_pdu(sk
, msg
, len
, control
, 0);
1434 __skb_queue_tail(TX_QUEUE(sk
), skb
);
1436 if (sk
->sk_send_head
== NULL
)
1437 sk
->sk_send_head
= skb
;
1440 /* Segment SDU into multiples PDUs */
1441 err
= l2cap_sar_segment_sdu(sk
, msg
, len
);
1446 if (pi
->mode
== L2CAP_MODE_STREAMING
) {
1447 l2cap_streaming_send(sk
);
1449 if ((pi
->conn_state
& L2CAP_CONN_REMOTE_BUSY
) &&
1450 (pi
->conn_state
& L2CAP_CONN_WAIT_F
)) {
1454 err
= l2cap_ertm_send(sk
);
1462 BT_DBG("bad state %1.1x", pi
->mode
);
1471 int l2cap_sock_shutdown(struct socket
*sock
, int how
)
1473 struct sock
*sk
= sock
->sk
;
1476 BT_DBG("sock %p, sk %p", sock
, sk
);
1482 if (!sk
->sk_shutdown
) {
1483 if (l2cap_pi(sk
)->mode
== L2CAP_MODE_ERTM
)
1484 err
= __l2cap_wait_ack(sk
);
1486 sk
->sk_shutdown
= SHUTDOWN_MASK
;
1487 l2cap_sock_clear_timer(sk
);
1488 __l2cap_sock_close(sk
, 0);
1490 if (sock_flag(sk
, SOCK_LINGER
) && sk
->sk_lingertime
)
1491 err
= bt_sock_wait_state(sk
, BT_CLOSED
,
1495 if (!err
&& sk
->sk_err
)
1502 static void l2cap_chan_ready(struct sock
*sk
)
1504 struct sock
*parent
= bt_sk(sk
)->parent
;
1506 BT_DBG("sk %p, parent %p", sk
, parent
);
1508 l2cap_pi(sk
)->conf_state
= 0;
1509 l2cap_sock_clear_timer(sk
);
1512 /* Outgoing channel.
1513 * Wake up socket sleeping on connect.
1515 sk
->sk_state
= BT_CONNECTED
;
1516 sk
->sk_state_change(sk
);
1518 /* Incoming channel.
1519 * Wake up socket sleeping on accept.
1521 parent
->sk_data_ready(parent
, 0);
1525 /* Copy frame to all raw sockets on that connection */
1526 static void l2cap_raw_recv(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
1528 struct l2cap_chan_list
*l
= &conn
->chan_list
;
1529 struct sk_buff
*nskb
;
1532 BT_DBG("conn %p", conn
);
1534 read_lock(&l
->lock
);
1535 for (sk
= l
->head
; sk
; sk
= l2cap_pi(sk
)->next_c
) {
1536 if (sk
->sk_type
!= SOCK_RAW
)
1539 /* Don't send frame to the socket it came from */
1542 nskb
= skb_clone(skb
, GFP_ATOMIC
);
1546 if (sock_queue_rcv_skb(sk
, nskb
))
1549 read_unlock(&l
->lock
);
1552 /* ---- L2CAP signalling commands ---- */
1553 static struct sk_buff
*l2cap_build_cmd(struct l2cap_conn
*conn
,
1554 u8 code
, u8 ident
, u16 dlen
, void *data
)
1556 struct sk_buff
*skb
, **frag
;
1557 struct l2cap_cmd_hdr
*cmd
;
1558 struct l2cap_hdr
*lh
;
1561 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
1562 conn
, code
, ident
, dlen
);
1564 len
= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
+ dlen
;
1565 count
= min_t(unsigned int, conn
->mtu
, len
);
1567 skb
= bt_skb_alloc(count
, GFP_ATOMIC
);
1571 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
1572 lh
->len
= cpu_to_le16(L2CAP_CMD_HDR_SIZE
+ dlen
);
1573 lh
->cid
= cpu_to_le16(L2CAP_CID_SIGNALING
);
1575 cmd
= (struct l2cap_cmd_hdr
*) skb_put(skb
, L2CAP_CMD_HDR_SIZE
);
1578 cmd
->len
= cpu_to_le16(dlen
);
1581 count
-= L2CAP_HDR_SIZE
+ L2CAP_CMD_HDR_SIZE
;
1582 memcpy(skb_put(skb
, count
), data
, count
);
1588 /* Continuation fragments (no L2CAP header) */
1589 frag
= &skb_shinfo(skb
)->frag_list
;
1591 count
= min_t(unsigned int, conn
->mtu
, len
);
1593 *frag
= bt_skb_alloc(count
, GFP_ATOMIC
);
1597 memcpy(skb_put(*frag
, count
), data
, count
);
1602 frag
= &(*frag
)->next
;
1612 static inline int l2cap_get_conf_opt(void **ptr
, int *type
, int *olen
, unsigned long *val
)
1614 struct l2cap_conf_opt
*opt
= *ptr
;
1617 len
= L2CAP_CONF_OPT_SIZE
+ opt
->len
;
1625 *val
= *((u8
*) opt
->val
);
1629 *val
= get_unaligned_le16(opt
->val
);
1633 *val
= get_unaligned_le32(opt
->val
);
1637 *val
= (unsigned long) opt
->val
;
1641 BT_DBG("type 0x%2.2x len %d val 0x%lx", *type
, opt
->len
, *val
);
1645 static void l2cap_add_conf_opt(void **ptr
, u8 type
, u8 len
, unsigned long val
)
1647 struct l2cap_conf_opt
*opt
= *ptr
;
1649 BT_DBG("type 0x%2.2x len %d val 0x%lx", type
, len
, val
);
1656 *((u8
*) opt
->val
) = val
;
1660 put_unaligned_le16(val
, opt
->val
);
1664 put_unaligned_le32(val
, opt
->val
);
1668 memcpy(opt
->val
, (void *) val
, len
);
1672 *ptr
+= L2CAP_CONF_OPT_SIZE
+ len
;
1675 static void l2cap_ack_timeout(unsigned long arg
)
1677 struct sock
*sk
= (void *) arg
;
1680 l2cap_send_ack(l2cap_pi(sk
));
1684 static inline void l2cap_ertm_init(struct sock
*sk
)
1686 l2cap_pi(sk
)->expected_ack_seq
= 0;
1687 l2cap_pi(sk
)->unacked_frames
= 0;
1688 l2cap_pi(sk
)->buffer_seq
= 0;
1689 l2cap_pi(sk
)->num_acked
= 0;
1690 l2cap_pi(sk
)->frames_sent
= 0;
1692 setup_timer(&l2cap_pi(sk
)->retrans_timer
,
1693 l2cap_retrans_timeout
, (unsigned long) sk
);
1694 setup_timer(&l2cap_pi(sk
)->monitor_timer
,
1695 l2cap_monitor_timeout
, (unsigned long) sk
);
1696 setup_timer(&l2cap_pi(sk
)->ack_timer
,
1697 l2cap_ack_timeout
, (unsigned long) sk
);
1699 __skb_queue_head_init(SREJ_QUEUE(sk
));
1700 __skb_queue_head_init(BUSY_QUEUE(sk
));
1702 INIT_WORK(&l2cap_pi(sk
)->busy_work
, l2cap_busy_work
);
1704 sk
->sk_backlog_rcv
= l2cap_ertm_data_rcv
;
1707 static inline __u8
l2cap_select_mode(__u8 mode
, __u16 remote_feat_mask
)
1710 case L2CAP_MODE_STREAMING
:
1711 case L2CAP_MODE_ERTM
:
1712 if (l2cap_mode_supported(mode
, remote_feat_mask
))
1716 return L2CAP_MODE_BASIC
;
1720 int l2cap_build_conf_req(struct sock
*sk
, void *data
)
1722 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1723 struct l2cap_conf_req
*req
= data
;
1724 struct l2cap_conf_rfc rfc
= { .mode
= pi
->mode
};
1725 void *ptr
= req
->data
;
1727 BT_DBG("sk %p", sk
);
1729 if (pi
->num_conf_req
|| pi
->num_conf_rsp
)
1733 case L2CAP_MODE_STREAMING
:
1734 case L2CAP_MODE_ERTM
:
1735 if (pi
->conf_state
& L2CAP_CONF_STATE2_DEVICE
)
1740 pi
->mode
= l2cap_select_mode(rfc
.mode
, pi
->conn
->feat_mask
);
1745 if (pi
->imtu
!= L2CAP_DEFAULT_MTU
)
1746 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, pi
->imtu
);
1749 case L2CAP_MODE_BASIC
:
1750 if (!(pi
->conn
->feat_mask
& L2CAP_FEAT_ERTM
) &&
1751 !(pi
->conn
->feat_mask
& L2CAP_FEAT_STREAMING
))
1754 rfc
.mode
= L2CAP_MODE_BASIC
;
1756 rfc
.max_transmit
= 0;
1757 rfc
.retrans_timeout
= 0;
1758 rfc
.monitor_timeout
= 0;
1759 rfc
.max_pdu_size
= 0;
1761 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
1762 (unsigned long) &rfc
);
1765 case L2CAP_MODE_ERTM
:
1766 rfc
.mode
= L2CAP_MODE_ERTM
;
1767 rfc
.txwin_size
= pi
->tx_win
;
1768 rfc
.max_transmit
= pi
->max_tx
;
1769 rfc
.retrans_timeout
= 0;
1770 rfc
.monitor_timeout
= 0;
1771 rfc
.max_pdu_size
= cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE
);
1772 if (L2CAP_DEFAULT_MAX_PDU_SIZE
> pi
->conn
->mtu
- 10)
1773 rfc
.max_pdu_size
= cpu_to_le16(pi
->conn
->mtu
- 10);
1775 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
1776 (unsigned long) &rfc
);
1778 if (!(pi
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
1781 if (pi
->fcs
== L2CAP_FCS_NONE
||
1782 pi
->conf_state
& L2CAP_CONF_NO_FCS_RECV
) {
1783 pi
->fcs
= L2CAP_FCS_NONE
;
1784 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, pi
->fcs
);
1788 case L2CAP_MODE_STREAMING
:
1789 rfc
.mode
= L2CAP_MODE_STREAMING
;
1791 rfc
.max_transmit
= 0;
1792 rfc
.retrans_timeout
= 0;
1793 rfc
.monitor_timeout
= 0;
1794 rfc
.max_pdu_size
= cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE
);
1795 if (L2CAP_DEFAULT_MAX_PDU_SIZE
> pi
->conn
->mtu
- 10)
1796 rfc
.max_pdu_size
= cpu_to_le16(pi
->conn
->mtu
- 10);
1798 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
, sizeof(rfc
),
1799 (unsigned long) &rfc
);
1801 if (!(pi
->conn
->feat_mask
& L2CAP_FEAT_FCS
))
1804 if (pi
->fcs
== L2CAP_FCS_NONE
||
1805 pi
->conf_state
& L2CAP_CONF_NO_FCS_RECV
) {
1806 pi
->fcs
= L2CAP_FCS_NONE
;
1807 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FCS
, 1, pi
->fcs
);
1812 /* FIXME: Need actual value of the flush timeout */
1813 //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
1814 // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
1816 req
->dcid
= cpu_to_le16(pi
->dcid
);
1817 req
->flags
= cpu_to_le16(0);
1822 static int l2cap_parse_conf_req(struct sock
*sk
, void *data
)
1824 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1825 struct l2cap_conf_rsp
*rsp
= data
;
1826 void *ptr
= rsp
->data
;
1827 void *req
= pi
->conf_req
;
1828 int len
= pi
->conf_len
;
1829 int type
, hint
, olen
;
1831 struct l2cap_conf_rfc rfc
= { .mode
= L2CAP_MODE_BASIC
};
1832 u16 mtu
= L2CAP_DEFAULT_MTU
;
1833 u16 result
= L2CAP_CONF_SUCCESS
;
1835 BT_DBG("sk %p", sk
);
1837 while (len
>= L2CAP_CONF_OPT_SIZE
) {
1838 len
-= l2cap_get_conf_opt(&req
, &type
, &olen
, &val
);
1840 hint
= type
& L2CAP_CONF_HINT
;
1841 type
&= L2CAP_CONF_MASK
;
1844 case L2CAP_CONF_MTU
:
1848 case L2CAP_CONF_FLUSH_TO
:
1852 case L2CAP_CONF_QOS
:
1855 case L2CAP_CONF_RFC
:
1856 if (olen
== sizeof(rfc
))
1857 memcpy(&rfc
, (void *) val
, olen
);
1860 case L2CAP_CONF_FCS
:
1861 if (val
== L2CAP_FCS_NONE
)
1862 pi
->conf_state
|= L2CAP_CONF_NO_FCS_RECV
;
1870 result
= L2CAP_CONF_UNKNOWN
;
1871 *((u8
*) ptr
++) = type
;
1876 if (pi
->num_conf_rsp
|| pi
->num_conf_req
> 1)
1880 case L2CAP_MODE_STREAMING
:
1881 case L2CAP_MODE_ERTM
:
1882 if (!(pi
->conf_state
& L2CAP_CONF_STATE2_DEVICE
)) {
1883 pi
->mode
= l2cap_select_mode(rfc
.mode
,
1884 pi
->conn
->feat_mask
);
1888 if (pi
->mode
!= rfc
.mode
)
1889 return -ECONNREFUSED
;
1895 if (pi
->mode
!= rfc
.mode
) {
1896 result
= L2CAP_CONF_UNACCEPT
;
1897 rfc
.mode
= pi
->mode
;
1899 if (pi
->num_conf_rsp
== 1)
1900 return -ECONNREFUSED
;
1902 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
1903 sizeof(rfc
), (unsigned long) &rfc
);
1907 if (result
== L2CAP_CONF_SUCCESS
) {
1908 /* Configure output options and let the other side know
1909 * which ones we don't like. */
1911 if (mtu
< L2CAP_DEFAULT_MIN_MTU
)
1912 result
= L2CAP_CONF_UNACCEPT
;
1915 pi
->conf_state
|= L2CAP_CONF_MTU_DONE
;
1917 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, pi
->omtu
);
1920 case L2CAP_MODE_BASIC
:
1921 pi
->fcs
= L2CAP_FCS_NONE
;
1922 pi
->conf_state
|= L2CAP_CONF_MODE_DONE
;
1925 case L2CAP_MODE_ERTM
:
1926 pi
->remote_tx_win
= rfc
.txwin_size
;
1927 pi
->remote_max_tx
= rfc
.max_transmit
;
1929 if (le16_to_cpu(rfc
.max_pdu_size
) > pi
->conn
->mtu
- 10)
1930 rfc
.max_pdu_size
= cpu_to_le16(pi
->conn
->mtu
- 10);
1932 pi
->remote_mps
= le16_to_cpu(rfc
.max_pdu_size
);
1934 rfc
.retrans_timeout
=
1935 le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO
);
1936 rfc
.monitor_timeout
=
1937 le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO
);
1939 pi
->conf_state
|= L2CAP_CONF_MODE_DONE
;
1941 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
1942 sizeof(rfc
), (unsigned long) &rfc
);
1946 case L2CAP_MODE_STREAMING
:
1947 if (le16_to_cpu(rfc
.max_pdu_size
) > pi
->conn
->mtu
- 10)
1948 rfc
.max_pdu_size
= cpu_to_le16(pi
->conn
->mtu
- 10);
1950 pi
->remote_mps
= le16_to_cpu(rfc
.max_pdu_size
);
1952 pi
->conf_state
|= L2CAP_CONF_MODE_DONE
;
1954 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
1955 sizeof(rfc
), (unsigned long) &rfc
);
1960 result
= L2CAP_CONF_UNACCEPT
;
1962 memset(&rfc
, 0, sizeof(rfc
));
1963 rfc
.mode
= pi
->mode
;
1966 if (result
== L2CAP_CONF_SUCCESS
)
1967 pi
->conf_state
|= L2CAP_CONF_OUTPUT_DONE
;
1969 rsp
->scid
= cpu_to_le16(pi
->dcid
);
1970 rsp
->result
= cpu_to_le16(result
);
1971 rsp
->flags
= cpu_to_le16(0x0000);
1976 static int l2cap_parse_conf_rsp(struct sock
*sk
, void *rsp
, int len
, void *data
, u16
*result
)
1978 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
1979 struct l2cap_conf_req
*req
= data
;
1980 void *ptr
= req
->data
;
1983 struct l2cap_conf_rfc rfc
;
1985 BT_DBG("sk %p, rsp %p, len %d, req %p", sk
, rsp
, len
, data
);
1987 while (len
>= L2CAP_CONF_OPT_SIZE
) {
1988 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
1991 case L2CAP_CONF_MTU
:
1992 if (val
< L2CAP_DEFAULT_MIN_MTU
) {
1993 *result
= L2CAP_CONF_UNACCEPT
;
1994 pi
->imtu
= L2CAP_DEFAULT_MIN_MTU
;
1997 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_MTU
, 2, pi
->imtu
);
2000 case L2CAP_CONF_FLUSH_TO
:
2002 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_FLUSH_TO
,
2006 case L2CAP_CONF_RFC
:
2007 if (olen
== sizeof(rfc
))
2008 memcpy(&rfc
, (void *)val
, olen
);
2010 if ((pi
->conf_state
& L2CAP_CONF_STATE2_DEVICE
) &&
2011 rfc
.mode
!= pi
->mode
)
2012 return -ECONNREFUSED
;
2016 l2cap_add_conf_opt(&ptr
, L2CAP_CONF_RFC
,
2017 sizeof(rfc
), (unsigned long) &rfc
);
2022 if (pi
->mode
== L2CAP_MODE_BASIC
&& pi
->mode
!= rfc
.mode
)
2023 return -ECONNREFUSED
;
2025 pi
->mode
= rfc
.mode
;
2027 if (*result
== L2CAP_CONF_SUCCESS
) {
2029 case L2CAP_MODE_ERTM
:
2030 pi
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
2031 pi
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
2032 pi
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2034 case L2CAP_MODE_STREAMING
:
2035 pi
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2039 req
->dcid
= cpu_to_le16(pi
->dcid
);
2040 req
->flags
= cpu_to_le16(0x0000);
2045 static int l2cap_build_conf_rsp(struct sock
*sk
, void *data
, u16 result
, u16 flags
)
2047 struct l2cap_conf_rsp
*rsp
= data
;
2048 void *ptr
= rsp
->data
;
2050 BT_DBG("sk %p", sk
);
2052 rsp
->scid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
2053 rsp
->result
= cpu_to_le16(result
);
2054 rsp
->flags
= cpu_to_le16(flags
);
2059 static void l2cap_conf_rfc_get(struct sock
*sk
, void *rsp
, int len
)
2061 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
2064 struct l2cap_conf_rfc rfc
;
2066 BT_DBG("sk %p, rsp %p, len %d", sk
, rsp
, len
);
2068 if ((pi
->mode
!= L2CAP_MODE_ERTM
) && (pi
->mode
!= L2CAP_MODE_STREAMING
))
2071 while (len
>= L2CAP_CONF_OPT_SIZE
) {
2072 len
-= l2cap_get_conf_opt(&rsp
, &type
, &olen
, &val
);
2075 case L2CAP_CONF_RFC
:
2076 if (olen
== sizeof(rfc
))
2077 memcpy(&rfc
, (void *)val
, olen
);
2084 case L2CAP_MODE_ERTM
:
2085 pi
->retrans_timeout
= le16_to_cpu(rfc
.retrans_timeout
);
2086 pi
->monitor_timeout
= le16_to_cpu(rfc
.monitor_timeout
);
2087 pi
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2089 case L2CAP_MODE_STREAMING
:
2090 pi
->mps
= le16_to_cpu(rfc
.max_pdu_size
);
2094 static inline int l2cap_command_rej(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2096 struct l2cap_cmd_rej
*rej
= (struct l2cap_cmd_rej
*) data
;
2098 if (rej
->reason
!= 0x0000)
2101 if ((conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_SENT
) &&
2102 cmd
->ident
== conn
->info_ident
) {
2103 del_timer(&conn
->info_timer
);
2105 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2106 conn
->info_ident
= 0;
2108 l2cap_conn_start(conn
);
2114 static inline int l2cap_connect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2116 struct l2cap_chan_list
*list
= &conn
->chan_list
;
2117 struct l2cap_conn_req
*req
= (struct l2cap_conn_req
*) data
;
2118 struct l2cap_conn_rsp rsp
;
2119 struct sock
*parent
, *sk
= NULL
;
2120 int result
, status
= L2CAP_CS_NO_INFO
;
2122 u16 dcid
= 0, scid
= __le16_to_cpu(req
->scid
);
2123 __le16 psm
= req
->psm
;
2125 BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm
, scid
);
2127 /* Check if we have socket listening on psm */
2128 parent
= l2cap_get_sock_by_psm(BT_LISTEN
, psm
, conn
->src
);
2130 result
= L2CAP_CR_BAD_PSM
;
2134 bh_lock_sock(parent
);
2136 /* Check if the ACL is secure enough (if not SDP) */
2137 if (psm
!= cpu_to_le16(0x0001) &&
2138 !hci_conn_check_link_mode(conn
->hcon
)) {
2139 conn
->disc_reason
= 0x05;
2140 result
= L2CAP_CR_SEC_BLOCK
;
2144 result
= L2CAP_CR_NO_MEM
;
2146 /* Check for backlog size */
2147 if (sk_acceptq_is_full(parent
)) {
2148 BT_DBG("backlog full %d", parent
->sk_ack_backlog
);
2152 sk
= l2cap_sock_alloc(sock_net(parent
), NULL
, BTPROTO_L2CAP
, GFP_ATOMIC
);
2156 write_lock_bh(&list
->lock
);
2158 /* Check if we already have channel with that dcid */
2159 if (__l2cap_get_chan_by_dcid(list
, scid
)) {
2160 write_unlock_bh(&list
->lock
);
2161 sock_set_flag(sk
, SOCK_ZAPPED
);
2162 l2cap_sock_kill(sk
);
2166 hci_conn_hold(conn
->hcon
);
2168 l2cap_sock_init(sk
, parent
);
2169 bacpy(&bt_sk(sk
)->src
, conn
->src
);
2170 bacpy(&bt_sk(sk
)->dst
, conn
->dst
);
2171 l2cap_pi(sk
)->psm
= psm
;
2172 l2cap_pi(sk
)->dcid
= scid
;
2174 __l2cap_chan_add(conn
, sk
, parent
);
2175 dcid
= l2cap_pi(sk
)->scid
;
2177 l2cap_sock_set_timer(sk
, sk
->sk_sndtimeo
);
2179 l2cap_pi(sk
)->ident
= cmd
->ident
;
2181 if (conn
->info_state
& L2CAP_INFO_FEAT_MASK_REQ_DONE
) {
2182 if (l2cap_check_security(sk
)) {
2183 if (bt_sk(sk
)->defer_setup
) {
2184 sk
->sk_state
= BT_CONNECT2
;
2185 result
= L2CAP_CR_PEND
;
2186 status
= L2CAP_CS_AUTHOR_PEND
;
2187 parent
->sk_data_ready(parent
, 0);
2189 sk
->sk_state
= BT_CONFIG
;
2190 result
= L2CAP_CR_SUCCESS
;
2191 status
= L2CAP_CS_NO_INFO
;
2194 sk
->sk_state
= BT_CONNECT2
;
2195 result
= L2CAP_CR_PEND
;
2196 status
= L2CAP_CS_AUTHEN_PEND
;
2199 sk
->sk_state
= BT_CONNECT2
;
2200 result
= L2CAP_CR_PEND
;
2201 status
= L2CAP_CS_NO_INFO
;
2204 write_unlock_bh(&list
->lock
);
2207 bh_unlock_sock(parent
);
2210 rsp
.scid
= cpu_to_le16(scid
);
2211 rsp
.dcid
= cpu_to_le16(dcid
);
2212 rsp
.result
= cpu_to_le16(result
);
2213 rsp
.status
= cpu_to_le16(status
);
2214 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
2216 if (result
== L2CAP_CR_PEND
&& status
== L2CAP_CS_NO_INFO
) {
2217 struct l2cap_info_req info
;
2218 info
.type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
2220 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_SENT
;
2221 conn
->info_ident
= l2cap_get_ident(conn
);
2223 mod_timer(&conn
->info_timer
, jiffies
+
2224 msecs_to_jiffies(L2CAP_INFO_TIMEOUT
));
2226 l2cap_send_cmd(conn
, conn
->info_ident
,
2227 L2CAP_INFO_REQ
, sizeof(info
), &info
);
2230 if (sk
&& !(l2cap_pi(sk
)->conf_state
& L2CAP_CONF_REQ_SENT
) &&
2231 result
== L2CAP_CR_SUCCESS
) {
2233 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_REQ_SENT
;
2234 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2235 l2cap_build_conf_req(sk
, buf
), buf
);
2236 l2cap_pi(sk
)->num_conf_req
++;
2242 static inline int l2cap_connect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2244 struct l2cap_conn_rsp
*rsp
= (struct l2cap_conn_rsp
*) data
;
2245 u16 scid
, dcid
, result
, status
;
2249 scid
= __le16_to_cpu(rsp
->scid
);
2250 dcid
= __le16_to_cpu(rsp
->dcid
);
2251 result
= __le16_to_cpu(rsp
->result
);
2252 status
= __le16_to_cpu(rsp
->status
);
2254 BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid
, scid
, result
, status
);
2257 sk
= l2cap_get_chan_by_scid(&conn
->chan_list
, scid
);
2261 sk
= l2cap_get_chan_by_ident(&conn
->chan_list
, cmd
->ident
);
2267 case L2CAP_CR_SUCCESS
:
2268 sk
->sk_state
= BT_CONFIG
;
2269 l2cap_pi(sk
)->ident
= 0;
2270 l2cap_pi(sk
)->dcid
= dcid
;
2271 l2cap_pi(sk
)->conf_state
&= ~L2CAP_CONF_CONNECT_PEND
;
2273 if (l2cap_pi(sk
)->conf_state
& L2CAP_CONF_REQ_SENT
)
2276 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_REQ_SENT
;
2278 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2279 l2cap_build_conf_req(sk
, req
), req
);
2280 l2cap_pi(sk
)->num_conf_req
++;
2284 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
2288 /* don't delete l2cap channel if sk is owned by user */
2289 if (sock_owned_by_user(sk
)) {
2290 sk
->sk_state
= BT_DISCONN
;
2291 l2cap_sock_clear_timer(sk
);
2292 l2cap_sock_set_timer(sk
, HZ
/ 5);
2296 l2cap_chan_del(sk
, ECONNREFUSED
);
2304 static inline void set_default_fcs(struct l2cap_pinfo
*pi
)
2306 /* FCS is enabled only in ERTM or streaming mode, if one or both
2309 if (pi
->mode
!= L2CAP_MODE_ERTM
&& pi
->mode
!= L2CAP_MODE_STREAMING
)
2310 pi
->fcs
= L2CAP_FCS_NONE
;
2311 else if (!(pi
->conf_state
& L2CAP_CONF_NO_FCS_RECV
))
2312 pi
->fcs
= L2CAP_FCS_CRC16
;
2315 static inline int l2cap_config_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u16 cmd_len
, u8
*data
)
2317 struct l2cap_conf_req
*req
= (struct l2cap_conf_req
*) data
;
2323 dcid
= __le16_to_cpu(req
->dcid
);
2324 flags
= __le16_to_cpu(req
->flags
);
2326 BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid
, flags
);
2328 sk
= l2cap_get_chan_by_scid(&conn
->chan_list
, dcid
);
2332 if (sk
->sk_state
!= BT_CONFIG
) {
2333 struct l2cap_cmd_rej rej
;
2335 rej
.reason
= cpu_to_le16(0x0002);
2336 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_COMMAND_REJ
,
2341 /* Reject if config buffer is too small. */
2342 len
= cmd_len
- sizeof(*req
);
2343 if (l2cap_pi(sk
)->conf_len
+ len
> sizeof(l2cap_pi(sk
)->conf_req
)) {
2344 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2345 l2cap_build_conf_rsp(sk
, rsp
,
2346 L2CAP_CONF_REJECT
, flags
), rsp
);
2351 memcpy(l2cap_pi(sk
)->conf_req
+ l2cap_pi(sk
)->conf_len
, req
->data
, len
);
2352 l2cap_pi(sk
)->conf_len
+= len
;
2354 if (flags
& 0x0001) {
2355 /* Incomplete config. Send empty response. */
2356 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
,
2357 l2cap_build_conf_rsp(sk
, rsp
,
2358 L2CAP_CONF_SUCCESS
, 0x0001), rsp
);
2362 /* Complete config. */
2363 len
= l2cap_parse_conf_req(sk
, rsp
);
2365 l2cap_send_disconn_req(conn
, sk
, ECONNRESET
);
2369 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_CONF_RSP
, len
, rsp
);
2370 l2cap_pi(sk
)->num_conf_rsp
++;
2372 /* Reset config buffer. */
2373 l2cap_pi(sk
)->conf_len
= 0;
2375 if (!(l2cap_pi(sk
)->conf_state
& L2CAP_CONF_OUTPUT_DONE
))
2378 if (l2cap_pi(sk
)->conf_state
& L2CAP_CONF_INPUT_DONE
) {
2379 set_default_fcs(l2cap_pi(sk
));
2381 sk
->sk_state
= BT_CONNECTED
;
2383 l2cap_pi(sk
)->next_tx_seq
= 0;
2384 l2cap_pi(sk
)->expected_tx_seq
= 0;
2385 __skb_queue_head_init(TX_QUEUE(sk
));
2386 if (l2cap_pi(sk
)->mode
== L2CAP_MODE_ERTM
)
2387 l2cap_ertm_init(sk
);
2389 l2cap_chan_ready(sk
);
2393 if (!(l2cap_pi(sk
)->conf_state
& L2CAP_CONF_REQ_SENT
)) {
2395 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_REQ_SENT
;
2396 l2cap_send_cmd(conn
, l2cap_get_ident(conn
), L2CAP_CONF_REQ
,
2397 l2cap_build_conf_req(sk
, buf
), buf
);
2398 l2cap_pi(sk
)->num_conf_req
++;
2406 static inline int l2cap_config_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2408 struct l2cap_conf_rsp
*rsp
= (struct l2cap_conf_rsp
*)data
;
2409 u16 scid
, flags
, result
;
2411 int len
= cmd
->len
- sizeof(*rsp
);
2413 scid
= __le16_to_cpu(rsp
->scid
);
2414 flags
= __le16_to_cpu(rsp
->flags
);
2415 result
= __le16_to_cpu(rsp
->result
);
2417 BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
2418 scid
, flags
, result
);
2420 sk
= l2cap_get_chan_by_scid(&conn
->chan_list
, scid
);
2425 case L2CAP_CONF_SUCCESS
:
2426 l2cap_conf_rfc_get(sk
, rsp
->data
, len
);
2429 case L2CAP_CONF_UNACCEPT
:
2430 if (l2cap_pi(sk
)->num_conf_rsp
<= L2CAP_CONF_MAX_CONF_RSP
) {
2433 if (len
> sizeof(req
) - sizeof(struct l2cap_conf_req
)) {
2434 l2cap_send_disconn_req(conn
, sk
, ECONNRESET
);
2438 /* throw out any old stored conf requests */
2439 result
= L2CAP_CONF_SUCCESS
;
2440 len
= l2cap_parse_conf_rsp(sk
, rsp
->data
,
2443 l2cap_send_disconn_req(conn
, sk
, ECONNRESET
);
2447 l2cap_send_cmd(conn
, l2cap_get_ident(conn
),
2448 L2CAP_CONF_REQ
, len
, req
);
2449 l2cap_pi(sk
)->num_conf_req
++;
2450 if (result
!= L2CAP_CONF_SUCCESS
)
2456 sk
->sk_err
= ECONNRESET
;
2457 l2cap_sock_set_timer(sk
, HZ
* 5);
2458 l2cap_send_disconn_req(conn
, sk
, ECONNRESET
);
2465 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_INPUT_DONE
;
2467 if (l2cap_pi(sk
)->conf_state
& L2CAP_CONF_OUTPUT_DONE
) {
2468 set_default_fcs(l2cap_pi(sk
));
2470 sk
->sk_state
= BT_CONNECTED
;
2471 l2cap_pi(sk
)->next_tx_seq
= 0;
2472 l2cap_pi(sk
)->expected_tx_seq
= 0;
2473 __skb_queue_head_init(TX_QUEUE(sk
));
2474 if (l2cap_pi(sk
)->mode
== L2CAP_MODE_ERTM
)
2475 l2cap_ertm_init(sk
);
2477 l2cap_chan_ready(sk
);
2485 static inline int l2cap_disconnect_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2487 struct l2cap_disconn_req
*req
= (struct l2cap_disconn_req
*) data
;
2488 struct l2cap_disconn_rsp rsp
;
2492 scid
= __le16_to_cpu(req
->scid
);
2493 dcid
= __le16_to_cpu(req
->dcid
);
2495 BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid
, dcid
);
2497 sk
= l2cap_get_chan_by_scid(&conn
->chan_list
, dcid
);
2501 rsp
.dcid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
2502 rsp
.scid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
2503 l2cap_send_cmd(conn
, cmd
->ident
, L2CAP_DISCONN_RSP
, sizeof(rsp
), &rsp
);
2505 sk
->sk_shutdown
= SHUTDOWN_MASK
;
2507 /* don't delete l2cap channel if sk is owned by user */
2508 if (sock_owned_by_user(sk
)) {
2509 sk
->sk_state
= BT_DISCONN
;
2510 l2cap_sock_clear_timer(sk
);
2511 l2cap_sock_set_timer(sk
, HZ
/ 5);
2516 l2cap_chan_del(sk
, ECONNRESET
);
2519 l2cap_sock_kill(sk
);
2523 static inline int l2cap_disconnect_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2525 struct l2cap_disconn_rsp
*rsp
= (struct l2cap_disconn_rsp
*) data
;
2529 scid
= __le16_to_cpu(rsp
->scid
);
2530 dcid
= __le16_to_cpu(rsp
->dcid
);
2532 BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid
, scid
);
2534 sk
= l2cap_get_chan_by_scid(&conn
->chan_list
, scid
);
2538 /* don't delete l2cap channel if sk is owned by user */
2539 if (sock_owned_by_user(sk
)) {
2540 sk
->sk_state
= BT_DISCONN
;
2541 l2cap_sock_clear_timer(sk
);
2542 l2cap_sock_set_timer(sk
, HZ
/ 5);
2547 l2cap_chan_del(sk
, 0);
2550 l2cap_sock_kill(sk
);
2554 static inline int l2cap_information_req(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2556 struct l2cap_info_req
*req
= (struct l2cap_info_req
*) data
;
2559 type
= __le16_to_cpu(req
->type
);
2561 BT_DBG("type 0x%4.4x", type
);
2563 if (type
== L2CAP_IT_FEAT_MASK
) {
2565 u32 feat_mask
= l2cap_feat_mask
;
2566 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
2567 rsp
->type
= cpu_to_le16(L2CAP_IT_FEAT_MASK
);
2568 rsp
->result
= cpu_to_le16(L2CAP_IR_SUCCESS
);
2570 feat_mask
|= L2CAP_FEAT_ERTM
| L2CAP_FEAT_STREAMING
2572 put_unaligned_le32(feat_mask
, rsp
->data
);
2573 l2cap_send_cmd(conn
, cmd
->ident
,
2574 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
2575 } else if (type
== L2CAP_IT_FIXED_CHAN
) {
2577 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) buf
;
2578 rsp
->type
= cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
2579 rsp
->result
= cpu_to_le16(L2CAP_IR_SUCCESS
);
2580 memcpy(buf
+ 4, l2cap_fixed_chan
, 8);
2581 l2cap_send_cmd(conn
, cmd
->ident
,
2582 L2CAP_INFO_RSP
, sizeof(buf
), buf
);
2584 struct l2cap_info_rsp rsp
;
2585 rsp
.type
= cpu_to_le16(type
);
2586 rsp
.result
= cpu_to_le16(L2CAP_IR_NOTSUPP
);
2587 l2cap_send_cmd(conn
, cmd
->ident
,
2588 L2CAP_INFO_RSP
, sizeof(rsp
), &rsp
);
2594 static inline int l2cap_information_rsp(struct l2cap_conn
*conn
, struct l2cap_cmd_hdr
*cmd
, u8
*data
)
2596 struct l2cap_info_rsp
*rsp
= (struct l2cap_info_rsp
*) data
;
2599 type
= __le16_to_cpu(rsp
->type
);
2600 result
= __le16_to_cpu(rsp
->result
);
2602 BT_DBG("type 0x%4.4x result 0x%2.2x", type
, result
);
2604 del_timer(&conn
->info_timer
);
2606 if (result
!= L2CAP_IR_SUCCESS
) {
2607 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2608 conn
->info_ident
= 0;
2610 l2cap_conn_start(conn
);
2615 if (type
== L2CAP_IT_FEAT_MASK
) {
2616 conn
->feat_mask
= get_unaligned_le32(rsp
->data
);
2618 if (conn
->feat_mask
& L2CAP_FEAT_FIXED_CHAN
) {
2619 struct l2cap_info_req req
;
2620 req
.type
= cpu_to_le16(L2CAP_IT_FIXED_CHAN
);
2622 conn
->info_ident
= l2cap_get_ident(conn
);
2624 l2cap_send_cmd(conn
, conn
->info_ident
,
2625 L2CAP_INFO_REQ
, sizeof(req
), &req
);
2627 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2628 conn
->info_ident
= 0;
2630 l2cap_conn_start(conn
);
2632 } else if (type
== L2CAP_IT_FIXED_CHAN
) {
2633 conn
->info_state
|= L2CAP_INFO_FEAT_MASK_REQ_DONE
;
2634 conn
->info_ident
= 0;
2636 l2cap_conn_start(conn
);
2642 static inline void l2cap_sig_channel(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2644 u8
*data
= skb
->data
;
2646 struct l2cap_cmd_hdr cmd
;
2649 l2cap_raw_recv(conn
, skb
);
2651 while (len
>= L2CAP_CMD_HDR_SIZE
) {
2653 memcpy(&cmd
, data
, L2CAP_CMD_HDR_SIZE
);
2654 data
+= L2CAP_CMD_HDR_SIZE
;
2655 len
-= L2CAP_CMD_HDR_SIZE
;
2657 cmd_len
= le16_to_cpu(cmd
.len
);
2659 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd
.code
, cmd_len
, cmd
.ident
);
2661 if (cmd_len
> len
|| !cmd
.ident
) {
2662 BT_DBG("corrupted command");
2667 case L2CAP_COMMAND_REJ
:
2668 l2cap_command_rej(conn
, &cmd
, data
);
2671 case L2CAP_CONN_REQ
:
2672 err
= l2cap_connect_req(conn
, &cmd
, data
);
2675 case L2CAP_CONN_RSP
:
2676 err
= l2cap_connect_rsp(conn
, &cmd
, data
);
2679 case L2CAP_CONF_REQ
:
2680 err
= l2cap_config_req(conn
, &cmd
, cmd_len
, data
);
2683 case L2CAP_CONF_RSP
:
2684 err
= l2cap_config_rsp(conn
, &cmd
, data
);
2687 case L2CAP_DISCONN_REQ
:
2688 err
= l2cap_disconnect_req(conn
, &cmd
, data
);
2691 case L2CAP_DISCONN_RSP
:
2692 err
= l2cap_disconnect_rsp(conn
, &cmd
, data
);
2695 case L2CAP_ECHO_REQ
:
2696 l2cap_send_cmd(conn
, cmd
.ident
, L2CAP_ECHO_RSP
, cmd_len
, data
);
2699 case L2CAP_ECHO_RSP
:
2702 case L2CAP_INFO_REQ
:
2703 err
= l2cap_information_req(conn
, &cmd
, data
);
2706 case L2CAP_INFO_RSP
:
2707 err
= l2cap_information_rsp(conn
, &cmd
, data
);
2711 BT_ERR("Unknown signaling command 0x%2.2x", cmd
.code
);
2717 struct l2cap_cmd_rej rej
;
2718 BT_DBG("error %d", err
);
2720 /* FIXME: Map err to a valid reason */
2721 rej
.reason
= cpu_to_le16(0);
2722 l2cap_send_cmd(conn
, cmd
.ident
, L2CAP_COMMAND_REJ
, sizeof(rej
), &rej
);
2732 static int l2cap_check_fcs(struct l2cap_pinfo
*pi
, struct sk_buff
*skb
)
2734 u16 our_fcs
, rcv_fcs
;
2735 int hdr_size
= L2CAP_HDR_SIZE
+ 2;
2737 if (pi
->fcs
== L2CAP_FCS_CRC16
) {
2738 skb_trim(skb
, skb
->len
- 2);
2739 rcv_fcs
= get_unaligned_le16(skb
->data
+ skb
->len
);
2740 our_fcs
= crc16(0, skb
->data
- hdr_size
, skb
->len
+ hdr_size
);
2742 if (our_fcs
!= rcv_fcs
)
2748 static inline void l2cap_send_i_or_rr_or_rnr(struct sock
*sk
)
2750 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
2753 pi
->frames_sent
= 0;
2755 control
|= pi
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
2757 if (pi
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
2758 control
|= L2CAP_SUPER_RCV_NOT_READY
;
2759 l2cap_send_sframe(pi
, control
);
2760 pi
->conn_state
|= L2CAP_CONN_RNR_SENT
;
2763 if (pi
->conn_state
& L2CAP_CONN_REMOTE_BUSY
)
2764 l2cap_retransmit_frames(sk
);
2766 l2cap_ertm_send(sk
);
2768 if (!(pi
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) &&
2769 pi
->frames_sent
== 0) {
2770 control
|= L2CAP_SUPER_RCV_READY
;
2771 l2cap_send_sframe(pi
, control
);
2775 static int l2cap_add_to_srej_queue(struct sock
*sk
, struct sk_buff
*skb
, u8 tx_seq
, u8 sar
)
2777 struct sk_buff
*next_skb
;
2778 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
2779 int tx_seq_offset
, next_tx_seq_offset
;
2781 bt_cb(skb
)->tx_seq
= tx_seq
;
2782 bt_cb(skb
)->sar
= sar
;
2784 next_skb
= skb_peek(SREJ_QUEUE(sk
));
2786 __skb_queue_tail(SREJ_QUEUE(sk
), skb
);
2790 tx_seq_offset
= (tx_seq
- pi
->buffer_seq
) % 64;
2791 if (tx_seq_offset
< 0)
2792 tx_seq_offset
+= 64;
2795 if (bt_cb(next_skb
)->tx_seq
== tx_seq
)
2798 next_tx_seq_offset
= (bt_cb(next_skb
)->tx_seq
-
2799 pi
->buffer_seq
) % 64;
2800 if (next_tx_seq_offset
< 0)
2801 next_tx_seq_offset
+= 64;
2803 if (next_tx_seq_offset
> tx_seq_offset
) {
2804 __skb_queue_before(SREJ_QUEUE(sk
), next_skb
, skb
);
2808 if (skb_queue_is_last(SREJ_QUEUE(sk
), next_skb
))
2811 } while ((next_skb
= skb_queue_next(SREJ_QUEUE(sk
), next_skb
)));
2813 __skb_queue_tail(SREJ_QUEUE(sk
), skb
);
2818 static int l2cap_ertm_reassembly_sdu(struct sock
*sk
, struct sk_buff
*skb
, u16 control
)
2820 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
2821 struct sk_buff
*_skb
;
2824 switch (control
& L2CAP_CTRL_SAR
) {
2825 case L2CAP_SDU_UNSEGMENTED
:
2826 if (pi
->conn_state
& L2CAP_CONN_SAR_SDU
)
2829 err
= sock_queue_rcv_skb(sk
, skb
);
2835 case L2CAP_SDU_START
:
2836 if (pi
->conn_state
& L2CAP_CONN_SAR_SDU
)
2839 pi
->sdu_len
= get_unaligned_le16(skb
->data
);
2841 if (pi
->sdu_len
> pi
->imtu
)
2844 pi
->sdu
= bt_skb_alloc(pi
->sdu_len
, GFP_ATOMIC
);
2848 /* pull sdu_len bytes only after alloc, because of Local Busy
2849 * condition we have to be sure that this will be executed
2850 * only once, i.e., when alloc does not fail */
2853 memcpy(skb_put(pi
->sdu
, skb
->len
), skb
->data
, skb
->len
);
2855 pi
->conn_state
|= L2CAP_CONN_SAR_SDU
;
2856 pi
->partial_sdu_len
= skb
->len
;
2859 case L2CAP_SDU_CONTINUE
:
2860 if (!(pi
->conn_state
& L2CAP_CONN_SAR_SDU
))
2866 pi
->partial_sdu_len
+= skb
->len
;
2867 if (pi
->partial_sdu_len
> pi
->sdu_len
)
2870 memcpy(skb_put(pi
->sdu
, skb
->len
), skb
->data
, skb
->len
);
2875 if (!(pi
->conn_state
& L2CAP_CONN_SAR_SDU
))
2881 if (!(pi
->conn_state
& L2CAP_CONN_SAR_RETRY
)) {
2882 pi
->partial_sdu_len
+= skb
->len
;
2884 if (pi
->partial_sdu_len
> pi
->imtu
)
2887 if (pi
->partial_sdu_len
!= pi
->sdu_len
)
2890 memcpy(skb_put(pi
->sdu
, skb
->len
), skb
->data
, skb
->len
);
2893 _skb
= skb_clone(pi
->sdu
, GFP_ATOMIC
);
2895 pi
->conn_state
|= L2CAP_CONN_SAR_RETRY
;
2899 err
= sock_queue_rcv_skb(sk
, _skb
);
2902 pi
->conn_state
|= L2CAP_CONN_SAR_RETRY
;
2906 pi
->conn_state
&= ~L2CAP_CONN_SAR_RETRY
;
2907 pi
->conn_state
&= ~L2CAP_CONN_SAR_SDU
;
2921 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNRESET
);
2926 static int l2cap_try_push_rx_skb(struct sock
*sk
)
2928 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
2929 struct sk_buff
*skb
;
2933 while ((skb
= skb_dequeue(BUSY_QUEUE(sk
)))) {
2934 control
= bt_cb(skb
)->sar
<< L2CAP_CTRL_SAR_SHIFT
;
2935 err
= l2cap_ertm_reassembly_sdu(sk
, skb
, control
);
2937 skb_queue_head(BUSY_QUEUE(sk
), skb
);
2941 pi
->buffer_seq
= (pi
->buffer_seq
+ 1) % 64;
2944 if (!(pi
->conn_state
& L2CAP_CONN_RNR_SENT
))
2947 control
= pi
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
2948 control
|= L2CAP_SUPER_RCV_READY
| L2CAP_CTRL_POLL
;
2949 l2cap_send_sframe(pi
, control
);
2950 l2cap_pi(sk
)->retry_count
= 1;
2952 del_timer(&pi
->retrans_timer
);
2953 __mod_monitor_timer();
2955 l2cap_pi(sk
)->conn_state
|= L2CAP_CONN_WAIT_F
;
2958 pi
->conn_state
&= ~L2CAP_CONN_LOCAL_BUSY
;
2959 pi
->conn_state
&= ~L2CAP_CONN_RNR_SENT
;
2961 BT_DBG("sk %p, Exit local busy", sk
);
2966 static void l2cap_busy_work(struct work_struct
*work
)
2968 DECLARE_WAITQUEUE(wait
, current
);
2969 struct l2cap_pinfo
*pi
=
2970 container_of(work
, struct l2cap_pinfo
, busy_work
);
2971 struct sock
*sk
= (struct sock
*)pi
;
2972 int n_tries
= 0, timeo
= HZ
/5, err
;
2973 struct sk_buff
*skb
;
2977 add_wait_queue(sk_sleep(sk
), &wait
);
2978 while ((skb
= skb_peek(BUSY_QUEUE(sk
)))) {
2979 set_current_state(TASK_INTERRUPTIBLE
);
2981 if (n_tries
++ > L2CAP_LOCAL_BUSY_TRIES
) {
2983 l2cap_send_disconn_req(pi
->conn
, sk
, EBUSY
);
2990 if (signal_pending(current
)) {
2991 err
= sock_intr_errno(timeo
);
2996 timeo
= schedule_timeout(timeo
);
2999 err
= sock_error(sk
);
3003 if (l2cap_try_push_rx_skb(sk
) == 0)
3007 set_current_state(TASK_RUNNING
);
3008 remove_wait_queue(sk_sleep(sk
), &wait
);
3013 static int l2cap_push_rx_skb(struct sock
*sk
, struct sk_buff
*skb
, u16 control
)
3015 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3018 if (pi
->conn_state
& L2CAP_CONN_LOCAL_BUSY
) {
3019 bt_cb(skb
)->sar
= control
>> L2CAP_CTRL_SAR_SHIFT
;
3020 __skb_queue_tail(BUSY_QUEUE(sk
), skb
);
3021 return l2cap_try_push_rx_skb(sk
);
3026 err
= l2cap_ertm_reassembly_sdu(sk
, skb
, control
);
3028 pi
->buffer_seq
= (pi
->buffer_seq
+ 1) % 64;
3032 /* Busy Condition */
3033 BT_DBG("sk %p, Enter local busy", sk
);
3035 pi
->conn_state
|= L2CAP_CONN_LOCAL_BUSY
;
3036 bt_cb(skb
)->sar
= control
>> L2CAP_CTRL_SAR_SHIFT
;
3037 __skb_queue_tail(BUSY_QUEUE(sk
), skb
);
3039 sctrl
= pi
->buffer_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3040 sctrl
|= L2CAP_SUPER_RCV_NOT_READY
;
3041 l2cap_send_sframe(pi
, sctrl
);
3043 pi
->conn_state
|= L2CAP_CONN_RNR_SENT
;
3045 del_timer(&pi
->ack_timer
);
3047 queue_work(_busy_wq
, &pi
->busy_work
);
3052 static int l2cap_streaming_reassembly_sdu(struct sock
*sk
, struct sk_buff
*skb
, u16 control
)
3054 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3055 struct sk_buff
*_skb
;
3059 * TODO: We have to notify the userland if some data is lost with the
3063 switch (control
& L2CAP_CTRL_SAR
) {
3064 case L2CAP_SDU_UNSEGMENTED
:
3065 if (pi
->conn_state
& L2CAP_CONN_SAR_SDU
) {
3070 err
= sock_queue_rcv_skb(sk
, skb
);
3076 case L2CAP_SDU_START
:
3077 if (pi
->conn_state
& L2CAP_CONN_SAR_SDU
) {
3082 pi
->sdu_len
= get_unaligned_le16(skb
->data
);
3085 if (pi
->sdu_len
> pi
->imtu
) {
3090 pi
->sdu
= bt_skb_alloc(pi
->sdu_len
, GFP_ATOMIC
);
3096 memcpy(skb_put(pi
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3098 pi
->conn_state
|= L2CAP_CONN_SAR_SDU
;
3099 pi
->partial_sdu_len
= skb
->len
;
3103 case L2CAP_SDU_CONTINUE
:
3104 if (!(pi
->conn_state
& L2CAP_CONN_SAR_SDU
))
3107 memcpy(skb_put(pi
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3109 pi
->partial_sdu_len
+= skb
->len
;
3110 if (pi
->partial_sdu_len
> pi
->sdu_len
)
3118 if (!(pi
->conn_state
& L2CAP_CONN_SAR_SDU
))
3121 memcpy(skb_put(pi
->sdu
, skb
->len
), skb
->data
, skb
->len
);
3123 pi
->conn_state
&= ~L2CAP_CONN_SAR_SDU
;
3124 pi
->partial_sdu_len
+= skb
->len
;
3126 if (pi
->partial_sdu_len
> pi
->imtu
)
3129 if (pi
->partial_sdu_len
== pi
->sdu_len
) {
3130 _skb
= skb_clone(pi
->sdu
, GFP_ATOMIC
);
3131 err
= sock_queue_rcv_skb(sk
, _skb
);
3146 static void l2cap_check_srej_gap(struct sock
*sk
, u8 tx_seq
)
3148 struct sk_buff
*skb
;
3151 while ((skb
= skb_peek(SREJ_QUEUE(sk
)))) {
3152 if (bt_cb(skb
)->tx_seq
!= tx_seq
)
3155 skb
= skb_dequeue(SREJ_QUEUE(sk
));
3156 control
= bt_cb(skb
)->sar
<< L2CAP_CTRL_SAR_SHIFT
;
3157 l2cap_ertm_reassembly_sdu(sk
, skb
, control
);
3158 l2cap_pi(sk
)->buffer_seq_srej
=
3159 (l2cap_pi(sk
)->buffer_seq_srej
+ 1) % 64;
3160 tx_seq
= (tx_seq
+ 1) % 64;
3164 static void l2cap_resend_srejframe(struct sock
*sk
, u8 tx_seq
)
3166 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3167 struct srej_list
*l
, *tmp
;
3170 list_for_each_entry_safe(l
, tmp
, SREJ_LIST(sk
), list
) {
3171 if (l
->tx_seq
== tx_seq
) {
3176 control
= L2CAP_SUPER_SELECT_REJECT
;
3177 control
|= l
->tx_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3178 l2cap_send_sframe(pi
, control
);
3180 list_add_tail(&l
->list
, SREJ_LIST(sk
));
3184 static void l2cap_send_srejframe(struct sock
*sk
, u8 tx_seq
)
3186 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3187 struct srej_list
*new;
3190 while (tx_seq
!= pi
->expected_tx_seq
) {
3191 control
= L2CAP_SUPER_SELECT_REJECT
;
3192 control
|= pi
->expected_tx_seq
<< L2CAP_CTRL_REQSEQ_SHIFT
;
3193 l2cap_send_sframe(pi
, control
);
3195 new = kzalloc(sizeof(struct srej_list
), GFP_ATOMIC
);
3196 new->tx_seq
= pi
->expected_tx_seq
;
3197 pi
->expected_tx_seq
= (pi
->expected_tx_seq
+ 1) % 64;
3198 list_add_tail(&new->list
, SREJ_LIST(sk
));
3200 pi
->expected_tx_seq
= (pi
->expected_tx_seq
+ 1) % 64;
3203 static inline int l2cap_data_channel_iframe(struct sock
*sk
, u16 rx_control
, struct sk_buff
*skb
)
3205 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3206 u8 tx_seq
= __get_txseq(rx_control
);
3207 u8 req_seq
= __get_reqseq(rx_control
);
3208 u8 sar
= rx_control
>> L2CAP_CTRL_SAR_SHIFT
;
3209 int tx_seq_offset
, expected_tx_seq_offset
;
3210 int num_to_ack
= (pi
->tx_win
/6) + 1;
3213 BT_DBG("sk %p len %d tx_seq %d rx_control 0x%4.4x", sk
, skb
->len
, tx_seq
,
3216 if (L2CAP_CTRL_FINAL
& rx_control
&&
3217 l2cap_pi(sk
)->conn_state
& L2CAP_CONN_WAIT_F
) {
3218 del_timer(&pi
->monitor_timer
);
3219 if (pi
->unacked_frames
> 0)
3220 __mod_retrans_timer();
3221 pi
->conn_state
&= ~L2CAP_CONN_WAIT_F
;
3224 pi
->expected_ack_seq
= req_seq
;
3225 l2cap_drop_acked_frames(sk
);
3227 if (tx_seq
== pi
->expected_tx_seq
)
3230 tx_seq_offset
= (tx_seq
- pi
->buffer_seq
) % 64;
3231 if (tx_seq_offset
< 0)
3232 tx_seq_offset
+= 64;
3234 /* invalid tx_seq */
3235 if (tx_seq_offset
>= pi
->tx_win
) {
3236 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNRESET
);
3240 if (pi
->conn_state
== L2CAP_CONN_LOCAL_BUSY
)
3243 if (pi
->conn_state
& L2CAP_CONN_SREJ_SENT
) {
3244 struct srej_list
*first
;
3246 first
= list_first_entry(SREJ_LIST(sk
),
3247 struct srej_list
, list
);
3248 if (tx_seq
== first
->tx_seq
) {
3249 l2cap_add_to_srej_queue(sk
, skb
, tx_seq
, sar
);
3250 l2cap_check_srej_gap(sk
, tx_seq
);
3252 list_del(&first
->list
);
3255 if (list_empty(SREJ_LIST(sk
))) {
3256 pi
->buffer_seq
= pi
->buffer_seq_srej
;
3257 pi
->conn_state
&= ~L2CAP_CONN_SREJ_SENT
;
3259 BT_DBG("sk %p, Exit SREJ_SENT", sk
);
3262 struct srej_list
*l
;
3264 /* duplicated tx_seq */
3265 if (l2cap_add_to_srej_queue(sk
, skb
, tx_seq
, sar
) < 0)
3268 list_for_each_entry(l
, SREJ_LIST(sk
), list
) {
3269 if (l
->tx_seq
== tx_seq
) {
3270 l2cap_resend_srejframe(sk
, tx_seq
);
3274 l2cap_send_srejframe(sk
, tx_seq
);
3277 expected_tx_seq_offset
=
3278 (pi
->expected_tx_seq
- pi
->buffer_seq
) % 64;
3279 if (expected_tx_seq_offset
< 0)
3280 expected_tx_seq_offset
+= 64;
3282 /* duplicated tx_seq */
3283 if (tx_seq_offset
< expected_tx_seq_offset
)
3286 pi
->conn_state
|= L2CAP_CONN_SREJ_SENT
;
3288 BT_DBG("sk %p, Enter SREJ", sk
);
3290 INIT_LIST_HEAD(SREJ_LIST(sk
));
3291 pi
->buffer_seq_srej
= pi
->buffer_seq
;
3293 __skb_queue_head_init(SREJ_QUEUE(sk
));
3294 __skb_queue_head_init(BUSY_QUEUE(sk
));
3295 l2cap_add_to_srej_queue(sk
, skb
, tx_seq
, sar
);
3297 pi
->conn_state
|= L2CAP_CONN_SEND_PBIT
;
3299 l2cap_send_srejframe(sk
, tx_seq
);
3301 del_timer(&pi
->ack_timer
);
3306 pi
->expected_tx_seq
= (pi
->expected_tx_seq
+ 1) % 64;
3308 if (pi
->conn_state
& L2CAP_CONN_SREJ_SENT
) {
3309 bt_cb(skb
)->tx_seq
= tx_seq
;
3310 bt_cb(skb
)->sar
= sar
;
3311 __skb_queue_tail(SREJ_QUEUE(sk
), skb
);
3315 err
= l2cap_push_rx_skb(sk
, skb
, rx_control
);
3319 if (rx_control
& L2CAP_CTRL_FINAL
) {
3320 if (pi
->conn_state
& L2CAP_CONN_REJ_ACT
)
3321 pi
->conn_state
&= ~L2CAP_CONN_REJ_ACT
;
3323 l2cap_retransmit_frames(sk
);
3328 pi
->num_acked
= (pi
->num_acked
+ 1) % num_to_ack
;
3329 if (pi
->num_acked
== num_to_ack
- 1)
3339 static inline void l2cap_data_channel_rrframe(struct sock
*sk
, u16 rx_control
)
3341 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3343 BT_DBG("sk %p, req_seq %d ctrl 0x%4.4x", sk
, __get_reqseq(rx_control
),
3346 pi
->expected_ack_seq
= __get_reqseq(rx_control
);
3347 l2cap_drop_acked_frames(sk
);
3349 if (rx_control
& L2CAP_CTRL_POLL
) {
3350 pi
->conn_state
|= L2CAP_CONN_SEND_FBIT
;
3351 if (pi
->conn_state
& L2CAP_CONN_SREJ_SENT
) {
3352 if ((pi
->conn_state
& L2CAP_CONN_REMOTE_BUSY
) &&
3353 (pi
->unacked_frames
> 0))
3354 __mod_retrans_timer();
3356 pi
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3357 l2cap_send_srejtail(sk
);
3359 l2cap_send_i_or_rr_or_rnr(sk
);
3362 } else if (rx_control
& L2CAP_CTRL_FINAL
) {
3363 pi
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3365 if (pi
->conn_state
& L2CAP_CONN_REJ_ACT
)
3366 pi
->conn_state
&= ~L2CAP_CONN_REJ_ACT
;
3368 l2cap_retransmit_frames(sk
);
3371 if ((pi
->conn_state
& L2CAP_CONN_REMOTE_BUSY
) &&
3372 (pi
->unacked_frames
> 0))
3373 __mod_retrans_timer();
3375 pi
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3376 if (pi
->conn_state
& L2CAP_CONN_SREJ_SENT
)
3379 l2cap_ertm_send(sk
);
3383 static inline void l2cap_data_channel_rejframe(struct sock
*sk
, u16 rx_control
)
3385 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3386 u8 tx_seq
= __get_reqseq(rx_control
);
3388 BT_DBG("sk %p, req_seq %d ctrl 0x%4.4x", sk
, tx_seq
, rx_control
);
3390 pi
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3392 pi
->expected_ack_seq
= tx_seq
;
3393 l2cap_drop_acked_frames(sk
);
3395 if (rx_control
& L2CAP_CTRL_FINAL
) {
3396 if (pi
->conn_state
& L2CAP_CONN_REJ_ACT
)
3397 pi
->conn_state
&= ~L2CAP_CONN_REJ_ACT
;
3399 l2cap_retransmit_frames(sk
);
3401 l2cap_retransmit_frames(sk
);
3403 if (pi
->conn_state
& L2CAP_CONN_WAIT_F
)
3404 pi
->conn_state
|= L2CAP_CONN_REJ_ACT
;
3407 static inline void l2cap_data_channel_srejframe(struct sock
*sk
, u16 rx_control
)
3409 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3410 u8 tx_seq
= __get_reqseq(rx_control
);
3412 BT_DBG("sk %p, req_seq %d ctrl 0x%4.4x", sk
, tx_seq
, rx_control
);
3414 pi
->conn_state
&= ~L2CAP_CONN_REMOTE_BUSY
;
3416 if (rx_control
& L2CAP_CTRL_POLL
) {
3417 pi
->expected_ack_seq
= tx_seq
;
3418 l2cap_drop_acked_frames(sk
);
3420 pi
->conn_state
|= L2CAP_CONN_SEND_FBIT
;
3421 l2cap_retransmit_one_frame(sk
, tx_seq
);
3423 l2cap_ertm_send(sk
);
3425 if (pi
->conn_state
& L2CAP_CONN_WAIT_F
) {
3426 pi
->srej_save_reqseq
= tx_seq
;
3427 pi
->conn_state
|= L2CAP_CONN_SREJ_ACT
;
3429 } else if (rx_control
& L2CAP_CTRL_FINAL
) {
3430 if ((pi
->conn_state
& L2CAP_CONN_SREJ_ACT
) &&
3431 pi
->srej_save_reqseq
== tx_seq
)
3432 pi
->conn_state
&= ~L2CAP_CONN_SREJ_ACT
;
3434 l2cap_retransmit_one_frame(sk
, tx_seq
);
3436 l2cap_retransmit_one_frame(sk
, tx_seq
);
3437 if (pi
->conn_state
& L2CAP_CONN_WAIT_F
) {
3438 pi
->srej_save_reqseq
= tx_seq
;
3439 pi
->conn_state
|= L2CAP_CONN_SREJ_ACT
;
3444 static inline void l2cap_data_channel_rnrframe(struct sock
*sk
, u16 rx_control
)
3446 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3447 u8 tx_seq
= __get_reqseq(rx_control
);
3449 BT_DBG("sk %p, req_seq %d ctrl 0x%4.4x", sk
, tx_seq
, rx_control
);
3451 pi
->conn_state
|= L2CAP_CONN_REMOTE_BUSY
;
3452 pi
->expected_ack_seq
= tx_seq
;
3453 l2cap_drop_acked_frames(sk
);
3455 if (rx_control
& L2CAP_CTRL_POLL
)
3456 pi
->conn_state
|= L2CAP_CONN_SEND_FBIT
;
3458 if (!(pi
->conn_state
& L2CAP_CONN_SREJ_SENT
)) {
3459 del_timer(&pi
->retrans_timer
);
3460 if (rx_control
& L2CAP_CTRL_POLL
)
3461 l2cap_send_rr_or_rnr(pi
, L2CAP_CTRL_FINAL
);
3465 if (rx_control
& L2CAP_CTRL_POLL
)
3466 l2cap_send_srejtail(sk
);
3468 l2cap_send_sframe(pi
, L2CAP_SUPER_RCV_READY
);
3471 static inline int l2cap_data_channel_sframe(struct sock
*sk
, u16 rx_control
, struct sk_buff
*skb
)
3473 BT_DBG("sk %p rx_control 0x%4.4x len %d", sk
, rx_control
, skb
->len
);
3475 if (L2CAP_CTRL_FINAL
& rx_control
&&
3476 l2cap_pi(sk
)->conn_state
& L2CAP_CONN_WAIT_F
) {
3477 del_timer(&l2cap_pi(sk
)->monitor_timer
);
3478 if (l2cap_pi(sk
)->unacked_frames
> 0)
3479 __mod_retrans_timer();
3480 l2cap_pi(sk
)->conn_state
&= ~L2CAP_CONN_WAIT_F
;
3483 switch (rx_control
& L2CAP_CTRL_SUPERVISE
) {
3484 case L2CAP_SUPER_RCV_READY
:
3485 l2cap_data_channel_rrframe(sk
, rx_control
);
3488 case L2CAP_SUPER_REJECT
:
3489 l2cap_data_channel_rejframe(sk
, rx_control
);
3492 case L2CAP_SUPER_SELECT_REJECT
:
3493 l2cap_data_channel_srejframe(sk
, rx_control
);
3496 case L2CAP_SUPER_RCV_NOT_READY
:
3497 l2cap_data_channel_rnrframe(sk
, rx_control
);
3505 static int l2cap_ertm_data_rcv(struct sock
*sk
, struct sk_buff
*skb
)
3507 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
3510 int len
, next_tx_seq_offset
, req_seq_offset
;
3512 control
= get_unaligned_le16(skb
->data
);
3517 * We can just drop the corrupted I-frame here.
3518 * Receiver will miss it and start proper recovery
3519 * procedures and ask retransmission.
3521 if (l2cap_check_fcs(pi
, skb
))
3524 if (__is_sar_start(control
) && __is_iframe(control
))
3527 if (pi
->fcs
== L2CAP_FCS_CRC16
)
3530 if (len
> pi
->mps
) {
3531 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNRESET
);
3535 req_seq
= __get_reqseq(control
);
3536 req_seq_offset
= (req_seq
- pi
->expected_ack_seq
) % 64;
3537 if (req_seq_offset
< 0)
3538 req_seq_offset
+= 64;
3540 next_tx_seq_offset
=
3541 (pi
->next_tx_seq
- pi
->expected_ack_seq
) % 64;
3542 if (next_tx_seq_offset
< 0)
3543 next_tx_seq_offset
+= 64;
3545 /* check for invalid req-seq */
3546 if (req_seq_offset
> next_tx_seq_offset
) {
3547 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNRESET
);
3551 if (__is_iframe(control
)) {
3553 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNRESET
);
3557 l2cap_data_channel_iframe(sk
, control
, skb
);
3561 l2cap_send_disconn_req(pi
->conn
, sk
, ECONNRESET
);
3565 l2cap_data_channel_sframe(sk
, control
, skb
);
3575 static inline int l2cap_data_channel(struct l2cap_conn
*conn
, u16 cid
, struct sk_buff
*skb
)
3578 struct l2cap_pinfo
*pi
;
3583 sk
= l2cap_get_chan_by_scid(&conn
->chan_list
, cid
);
3585 BT_DBG("unknown cid 0x%4.4x", cid
);
3591 BT_DBG("sk %p, len %d", sk
, skb
->len
);
3593 if (sk
->sk_state
!= BT_CONNECTED
)
3597 case L2CAP_MODE_BASIC
:
3598 /* If socket recv buffers overflows we drop data here
3599 * which is *bad* because L2CAP has to be reliable.
3600 * But we don't have any other choice. L2CAP doesn't
3601 * provide flow control mechanism. */
3603 if (pi
->imtu
< skb
->len
)
3606 if (!sock_queue_rcv_skb(sk
, skb
))
3610 case L2CAP_MODE_ERTM
:
3611 if (!sock_owned_by_user(sk
)) {
3612 l2cap_ertm_data_rcv(sk
, skb
);
3614 if (sk_add_backlog(sk
, skb
))
3620 case L2CAP_MODE_STREAMING
:
3621 control
= get_unaligned_le16(skb
->data
);
3625 if (l2cap_check_fcs(pi
, skb
))
3628 if (__is_sar_start(control
))
3631 if (pi
->fcs
== L2CAP_FCS_CRC16
)
3634 if (len
> pi
->mps
|| len
< 0 || __is_sframe(control
))
3637 tx_seq
= __get_txseq(control
);
3639 if (pi
->expected_tx_seq
== tx_seq
)
3640 pi
->expected_tx_seq
= (pi
->expected_tx_seq
+ 1) % 64;
3642 pi
->expected_tx_seq
= (tx_seq
+ 1) % 64;
3644 l2cap_streaming_reassembly_sdu(sk
, skb
, control
);
3649 BT_DBG("sk %p: bad mode 0x%2.2x", sk
, pi
->mode
);
3663 static inline int l2cap_conless_channel(struct l2cap_conn
*conn
, __le16 psm
, struct sk_buff
*skb
)
3667 sk
= l2cap_get_sock_by_psm(0, psm
, conn
->src
);
3673 BT_DBG("sk %p, len %d", sk
, skb
->len
);
3675 if (sk
->sk_state
!= BT_BOUND
&& sk
->sk_state
!= BT_CONNECTED
)
3678 if (l2cap_pi(sk
)->imtu
< skb
->len
)
3681 if (!sock_queue_rcv_skb(sk
, skb
))
3693 static void l2cap_recv_frame(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
3695 struct l2cap_hdr
*lh
= (void *) skb
->data
;
3699 skb_pull(skb
, L2CAP_HDR_SIZE
);
3700 cid
= __le16_to_cpu(lh
->cid
);
3701 len
= __le16_to_cpu(lh
->len
);
3703 if (len
!= skb
->len
) {
3708 BT_DBG("len %d, cid 0x%4.4x", len
, cid
);
3711 case L2CAP_CID_SIGNALING
:
3712 l2cap_sig_channel(conn
, skb
);
3715 case L2CAP_CID_CONN_LESS
:
3716 psm
= get_unaligned_le16(skb
->data
);
3718 l2cap_conless_channel(conn
, psm
, skb
);
3722 l2cap_data_channel(conn
, cid
, skb
);
3727 /* ---- L2CAP interface with lower layer (HCI) ---- */
3729 static int l2cap_connect_ind(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
3731 int exact
= 0, lm1
= 0, lm2
= 0;
3732 register struct sock
*sk
;
3733 struct hlist_node
*node
;
3735 if (type
!= ACL_LINK
)
3738 BT_DBG("hdev %s, bdaddr %s", hdev
->name
, batostr(bdaddr
));
3740 /* Find listening sockets and check their link_mode */
3741 read_lock(&l2cap_sk_list
.lock
);
3742 sk_for_each(sk
, node
, &l2cap_sk_list
.head
) {
3743 if (sk
->sk_state
!= BT_LISTEN
)
3746 if (!bacmp(&bt_sk(sk
)->src
, &hdev
->bdaddr
)) {
3747 lm1
|= HCI_LM_ACCEPT
;
3748 if (l2cap_pi(sk
)->role_switch
)
3749 lm1
|= HCI_LM_MASTER
;
3751 } else if (!bacmp(&bt_sk(sk
)->src
, BDADDR_ANY
)) {
3752 lm2
|= HCI_LM_ACCEPT
;
3753 if (l2cap_pi(sk
)->role_switch
)
3754 lm2
|= HCI_LM_MASTER
;
3757 read_unlock(&l2cap_sk_list
.lock
);
3759 return exact
? lm1
: lm2
;
3762 static int l2cap_connect_cfm(struct hci_conn
*hcon
, u8 status
)
3764 struct l2cap_conn
*conn
;
3766 BT_DBG("hcon %p bdaddr %s status %d", hcon
, batostr(&hcon
->dst
), status
);
3768 if (hcon
->type
!= ACL_LINK
)
3772 conn
= l2cap_conn_add(hcon
, status
);
3774 l2cap_conn_ready(conn
);
3776 l2cap_conn_del(hcon
, bt_err(status
));
3781 static int l2cap_disconn_ind(struct hci_conn
*hcon
)
3783 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
3785 BT_DBG("hcon %p", hcon
);
3787 if (hcon
->type
!= ACL_LINK
|| !conn
)
3790 return conn
->disc_reason
;
3793 static int l2cap_disconn_cfm(struct hci_conn
*hcon
, u8 reason
)
3795 BT_DBG("hcon %p reason %d", hcon
, reason
);
3797 if (hcon
->type
!= ACL_LINK
)
3800 l2cap_conn_del(hcon
, bt_err(reason
));
3805 static inline void l2cap_check_encryption(struct sock
*sk
, u8 encrypt
)
3807 if (sk
->sk_type
!= SOCK_SEQPACKET
&& sk
->sk_type
!= SOCK_STREAM
)
3810 if (encrypt
== 0x00) {
3811 if (l2cap_pi(sk
)->sec_level
== BT_SECURITY_MEDIUM
) {
3812 l2cap_sock_clear_timer(sk
);
3813 l2cap_sock_set_timer(sk
, HZ
* 5);
3814 } else if (l2cap_pi(sk
)->sec_level
== BT_SECURITY_HIGH
)
3815 __l2cap_sock_close(sk
, ECONNREFUSED
);
3817 if (l2cap_pi(sk
)->sec_level
== BT_SECURITY_MEDIUM
)
3818 l2cap_sock_clear_timer(sk
);
3822 static int l2cap_security_cfm(struct hci_conn
*hcon
, u8 status
, u8 encrypt
)
3824 struct l2cap_chan_list
*l
;
3825 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
3831 l
= &conn
->chan_list
;
3833 BT_DBG("conn %p", conn
);
3835 read_lock(&l
->lock
);
3837 for (sk
= l
->head
; sk
; sk
= l2cap_pi(sk
)->next_c
) {
3840 if (l2cap_pi(sk
)->conf_state
& L2CAP_CONF_CONNECT_PEND
) {
3845 if (!status
&& (sk
->sk_state
== BT_CONNECTED
||
3846 sk
->sk_state
== BT_CONFIG
)) {
3847 l2cap_check_encryption(sk
, encrypt
);
3852 if (sk
->sk_state
== BT_CONNECT
) {
3854 struct l2cap_conn_req req
;
3855 req
.scid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
3856 req
.psm
= l2cap_pi(sk
)->psm
;
3858 l2cap_pi(sk
)->ident
= l2cap_get_ident(conn
);
3859 l2cap_pi(sk
)->conf_state
|= L2CAP_CONF_CONNECT_PEND
;
3861 l2cap_send_cmd(conn
, l2cap_pi(sk
)->ident
,
3862 L2CAP_CONN_REQ
, sizeof(req
), &req
);
3864 l2cap_sock_clear_timer(sk
);
3865 l2cap_sock_set_timer(sk
, HZ
/ 10);
3867 } else if (sk
->sk_state
== BT_CONNECT2
) {
3868 struct l2cap_conn_rsp rsp
;
3872 sk
->sk_state
= BT_CONFIG
;
3873 result
= L2CAP_CR_SUCCESS
;
3875 sk
->sk_state
= BT_DISCONN
;
3876 l2cap_sock_set_timer(sk
, HZ
/ 10);
3877 result
= L2CAP_CR_SEC_BLOCK
;
3880 rsp
.scid
= cpu_to_le16(l2cap_pi(sk
)->dcid
);
3881 rsp
.dcid
= cpu_to_le16(l2cap_pi(sk
)->scid
);
3882 rsp
.result
= cpu_to_le16(result
);
3883 rsp
.status
= cpu_to_le16(L2CAP_CS_NO_INFO
);
3884 l2cap_send_cmd(conn
, l2cap_pi(sk
)->ident
,
3885 L2CAP_CONN_RSP
, sizeof(rsp
), &rsp
);
3891 read_unlock(&l
->lock
);
3896 static int l2cap_recv_acldata(struct hci_conn
*hcon
, struct sk_buff
*skb
, u16 flags
)
3898 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
3901 conn
= l2cap_conn_add(hcon
, 0);
3906 BT_DBG("conn %p len %d flags 0x%x", conn
, skb
->len
, flags
);
3908 if (!(flags
& ACL_CONT
)) {
3909 struct l2cap_hdr
*hdr
;
3915 BT_ERR("Unexpected start frame (len %d)", skb
->len
);
3916 kfree_skb(conn
->rx_skb
);
3917 conn
->rx_skb
= NULL
;
3919 l2cap_conn_unreliable(conn
, ECOMM
);
3922 /* Start fragment always begin with Basic L2CAP header */
3923 if (skb
->len
< L2CAP_HDR_SIZE
) {
3924 BT_ERR("Frame is too short (len %d)", skb
->len
);
3925 l2cap_conn_unreliable(conn
, ECOMM
);
3929 hdr
= (struct l2cap_hdr
*) skb
->data
;
3930 len
= __le16_to_cpu(hdr
->len
) + L2CAP_HDR_SIZE
;
3931 cid
= __le16_to_cpu(hdr
->cid
);
3933 if (len
== skb
->len
) {
3934 /* Complete frame received */
3935 l2cap_recv_frame(conn
, skb
);
3939 BT_DBG("Start: total len %d, frag len %d", len
, skb
->len
);
3941 if (skb
->len
> len
) {
3942 BT_ERR("Frame is too long (len %d, expected len %d)",
3944 l2cap_conn_unreliable(conn
, ECOMM
);
3948 sk
= l2cap_get_chan_by_scid(&conn
->chan_list
, cid
);
3950 if (sk
&& l2cap_pi(sk
)->imtu
< len
- L2CAP_HDR_SIZE
) {
3951 BT_ERR("Frame exceeding recv MTU (len %d, MTU %d)",
3952 len
, l2cap_pi(sk
)->imtu
);
3954 l2cap_conn_unreliable(conn
, ECOMM
);
3961 /* Allocate skb for the complete frame (with header) */
3962 conn
->rx_skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
3966 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
3968 conn
->rx_len
= len
- skb
->len
;
3970 BT_DBG("Cont: frag len %d (expecting %d)", skb
->len
, conn
->rx_len
);
3972 if (!conn
->rx_len
) {
3973 BT_ERR("Unexpected continuation frame (len %d)", skb
->len
);
3974 l2cap_conn_unreliable(conn
, ECOMM
);
3978 if (skb
->len
> conn
->rx_len
) {
3979 BT_ERR("Fragment is too long (len %d, expected %d)",
3980 skb
->len
, conn
->rx_len
);
3981 kfree_skb(conn
->rx_skb
);
3982 conn
->rx_skb
= NULL
;
3984 l2cap_conn_unreliable(conn
, ECOMM
);
3988 skb_copy_from_linear_data(skb
, skb_put(conn
->rx_skb
, skb
->len
),
3990 conn
->rx_len
-= skb
->len
;
3992 if (!conn
->rx_len
) {
3993 /* Complete frame received */
3994 l2cap_recv_frame(conn
, conn
->rx_skb
);
3995 conn
->rx_skb
= NULL
;
4004 static int l2cap_debugfs_show(struct seq_file
*f
, void *p
)
4007 struct hlist_node
*node
;
4009 read_lock_bh(&l2cap_sk_list
.lock
);
4011 sk_for_each(sk
, node
, &l2cap_sk_list
.head
) {
4012 struct l2cap_pinfo
*pi
= l2cap_pi(sk
);
4014 seq_printf(f
, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d\n",
4015 batostr(&bt_sk(sk
)->src
),
4016 batostr(&bt_sk(sk
)->dst
),
4017 sk
->sk_state
, __le16_to_cpu(pi
->psm
),
4019 pi
->imtu
, pi
->omtu
, pi
->sec_level
);
4022 read_unlock_bh(&l2cap_sk_list
.lock
);
4027 static int l2cap_debugfs_open(struct inode
*inode
, struct file
*file
)
4029 return single_open(file
, l2cap_debugfs_show
, inode
->i_private
);
4032 static const struct file_operations l2cap_debugfs_fops
= {
4033 .open
= l2cap_debugfs_open
,
4035 .llseek
= seq_lseek
,
4036 .release
= single_release
,
4039 static struct dentry
*l2cap_debugfs
;
4041 static struct hci_proto l2cap_hci_proto
= {
4043 .id
= HCI_PROTO_L2CAP
,
4044 .connect_ind
= l2cap_connect_ind
,
4045 .connect_cfm
= l2cap_connect_cfm
,
4046 .disconn_ind
= l2cap_disconn_ind
,
4047 .disconn_cfm
= l2cap_disconn_cfm
,
4048 .security_cfm
= l2cap_security_cfm
,
4049 .recv_acldata
= l2cap_recv_acldata
4052 static int __init
l2cap_init(void)
4056 err
= l2cap_init_sockets();
4060 _busy_wq
= create_singlethread_workqueue("l2cap");
4066 err
= hci_register_proto(&l2cap_hci_proto
);
4068 BT_ERR("L2CAP protocol registration failed");
4069 bt_sock_unregister(BTPROTO_L2CAP
);
4074 l2cap_debugfs
= debugfs_create_file("l2cap", 0444,
4075 bt_debugfs
, NULL
, &l2cap_debugfs_fops
);
4077 BT_ERR("Failed to create L2CAP debug file");
4080 BT_INFO("L2CAP ver %s", VERSION
);
4081 BT_INFO("L2CAP socket layer initialized");
4086 destroy_workqueue(_busy_wq
);
4087 l2cap_cleanup_sockets();
4091 static void __exit
l2cap_exit(void)
4093 debugfs_remove(l2cap_debugfs
);
4095 flush_workqueue(_busy_wq
);
4096 destroy_workqueue(_busy_wq
);
4098 if (hci_unregister_proto(&l2cap_hci_proto
) < 0)
4099 BT_ERR("L2CAP protocol unregistration failed");
4101 l2cap_cleanup_sockets();
4104 void l2cap_load(void)
4106 /* Dummy function to trigger automatic L2CAP module loading by
4107 * other modules that use L2CAP sockets but don't use any other
4108 * symbols from it. */
4110 EXPORT_SYMBOL(l2cap_load
);
4112 module_init(l2cap_init
);
4113 module_exit(l2cap_exit
);
4115 module_param(disable_ertm
, bool, 0644);
4116 MODULE_PARM_DESC(disable_ertm
, "Disable enhanced retransmission mode");
4118 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
4119 MODULE_DESCRIPTION("Bluetooth L2CAP ver " VERSION
);
4120 MODULE_VERSION(VERSION
);
4121 MODULE_LICENSE("GPL");
4122 MODULE_ALIAS("bt-proto-0");