2 RFCOMM implementation for Linux Bluetooth stack (BlueZ).
3 Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
4 Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation;
10 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21 SOFTWARE IS DISCLAIMED.
25 * Bluetooth RFCOMM core.
28 #include <linux/module.h>
29 #include <linux/debugfs.h>
30 #include <linux/kthread.h>
31 #include <asm/unaligned.h>
33 #include <net/bluetooth/bluetooth.h>
34 #include <net/bluetooth/hci_core.h>
35 #include <net/bluetooth/l2cap.h>
36 #include <net/bluetooth/rfcomm.h>
38 #define VERSION "1.11"
40 static bool disable_cfc
;
41 static bool l2cap_ertm
;
42 static int channel_mtu
= -1;
43 static unsigned int l2cap_mtu
= RFCOMM_MAX_L2CAP_MTU
;
45 static struct task_struct
*rfcomm_thread
;
47 static DEFINE_MUTEX(rfcomm_mutex
);
48 #define rfcomm_lock() mutex_lock(&rfcomm_mutex)
49 #define rfcomm_unlock() mutex_unlock(&rfcomm_mutex)
52 static LIST_HEAD(session_list
);
54 static int rfcomm_send_frame(struct rfcomm_session
*s
, u8
*data
, int len
);
55 static int rfcomm_send_sabm(struct rfcomm_session
*s
, u8 dlci
);
56 static int rfcomm_send_disc(struct rfcomm_session
*s
, u8 dlci
);
57 static int rfcomm_queue_disc(struct rfcomm_dlc
*d
);
58 static int rfcomm_send_nsc(struct rfcomm_session
*s
, int cr
, u8 type
);
59 static int rfcomm_send_pn(struct rfcomm_session
*s
, int cr
, struct rfcomm_dlc
*d
);
60 static int rfcomm_send_msc(struct rfcomm_session
*s
, int cr
, u8 dlci
, u8 v24_sig
);
61 static int rfcomm_send_test(struct rfcomm_session
*s
, int cr
, u8
*pattern
, int len
);
62 static int rfcomm_send_credits(struct rfcomm_session
*s
, u8 addr
, u8 credits
);
63 static void rfcomm_make_uih(struct sk_buff
*skb
, u8 addr
);
65 static void rfcomm_process_connect(struct rfcomm_session
*s
);
67 static struct rfcomm_session
*rfcomm_session_create(bdaddr_t
*src
,
71 static struct rfcomm_session
*rfcomm_session_get(bdaddr_t
*src
, bdaddr_t
*dst
);
72 static struct rfcomm_session
*rfcomm_session_del(struct rfcomm_session
*s
);
74 /* ---- RFCOMM frame parsing macros ---- */
75 #define __get_dlci(b) ((b & 0xfc) >> 2)
76 #define __get_channel(b) ((b & 0xf8) >> 3)
77 #define __get_dir(b) ((b & 0x04) >> 2)
78 #define __get_type(b) ((b & 0xef))
80 #define __test_ea(b) ((b & 0x01))
81 #define __test_cr(b) ((b & 0x02))
82 #define __test_pf(b) ((b & 0x10))
84 #define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
85 #define __ctrl(type, pf) (((type & 0xef) | (pf << 4)))
86 #define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir)
87 #define __srv_channel(dlci) (dlci >> 1)
88 #define __dir(dlci) (dlci & 0x01)
90 #define __len8(len) (((len) << 1) | 1)
91 #define __len16(len) ((len) << 1)
94 #define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01))
95 #define __get_mcc_type(b) ((b & 0xfc) >> 2)
96 #define __get_mcc_len(b) ((b & 0xfe) >> 1)
99 #define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x7) << 3))
100 #define __get_rpn_data_bits(line) ((line) & 0x3)
101 #define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
102 #define __get_rpn_parity(line) (((line) >> 3) & 0x7)
104 static void rfcomm_schedule(void)
108 wake_up_process(rfcomm_thread
);
111 /* ---- RFCOMM FCS computation ---- */
113 /* reversed, 8-bit, poly=0x07 */
114 static unsigned char rfcomm_crc_table
[256] = {
115 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
116 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
117 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
118 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
120 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
121 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
122 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
123 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
125 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
126 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
127 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
128 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
130 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
131 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
132 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
133 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
135 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
136 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
137 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
138 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
140 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
141 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
142 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
143 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
145 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
146 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
147 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
148 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
150 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
151 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
152 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
153 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
157 #define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
160 static inline u8
__fcs(u8
*data
)
162 return 0xff - __crc(data
);
166 static inline u8
__fcs2(u8
*data
)
168 return 0xff - rfcomm_crc_table
[__crc(data
) ^ data
[2]];
172 static inline int __check_fcs(u8
*data
, int type
, u8 fcs
)
176 if (type
!= RFCOMM_UIH
)
177 f
= rfcomm_crc_table
[f
^ data
[2]];
179 return rfcomm_crc_table
[f
^ fcs
] != 0xcf;
182 /* ---- L2CAP callbacks ---- */
183 static void rfcomm_l2state_change(struct sock
*sk
)
185 BT_DBG("%p state %d", sk
, sk
->sk_state
);
189 static void rfcomm_l2data_ready(struct sock
*sk
, int bytes
)
191 BT_DBG("%p bytes %d", sk
, bytes
);
195 static int rfcomm_l2sock_create(struct socket
**sock
)
201 err
= sock_create_kern(PF_BLUETOOTH
, SOCK_SEQPACKET
, BTPROTO_L2CAP
, sock
);
203 struct sock
*sk
= (*sock
)->sk
;
204 sk
->sk_data_ready
= rfcomm_l2data_ready
;
205 sk
->sk_state_change
= rfcomm_l2state_change
;
210 static int rfcomm_check_security(struct rfcomm_dlc
*d
)
212 struct sock
*sk
= d
->session
->sock
->sk
;
213 struct l2cap_conn
*conn
= l2cap_pi(sk
)->chan
->conn
;
217 switch (d
->sec_level
) {
218 case BT_SECURITY_HIGH
:
219 case BT_SECURITY_FIPS
:
220 auth_type
= HCI_AT_GENERAL_BONDING_MITM
;
222 case BT_SECURITY_MEDIUM
:
223 auth_type
= HCI_AT_GENERAL_BONDING
;
226 auth_type
= HCI_AT_NO_BONDING
;
230 return hci_conn_security(conn
->hcon
, d
->sec_level
, auth_type
);
233 static void rfcomm_session_timeout(unsigned long arg
)
235 struct rfcomm_session
*s
= (void *) arg
;
237 BT_DBG("session %p state %ld", s
, s
->state
);
239 set_bit(RFCOMM_TIMED_OUT
, &s
->flags
);
243 static void rfcomm_session_set_timer(struct rfcomm_session
*s
, long timeout
)
245 BT_DBG("session %p state %ld timeout %ld", s
, s
->state
, timeout
);
247 mod_timer(&s
->timer
, jiffies
+ timeout
);
250 static void rfcomm_session_clear_timer(struct rfcomm_session
*s
)
252 BT_DBG("session %p state %ld", s
, s
->state
);
254 del_timer_sync(&s
->timer
);
257 /* ---- RFCOMM DLCs ---- */
258 static void rfcomm_dlc_timeout(unsigned long arg
)
260 struct rfcomm_dlc
*d
= (void *) arg
;
262 BT_DBG("dlc %p state %ld", d
, d
->state
);
264 set_bit(RFCOMM_TIMED_OUT
, &d
->flags
);
269 static void rfcomm_dlc_set_timer(struct rfcomm_dlc
*d
, long timeout
)
271 BT_DBG("dlc %p state %ld timeout %ld", d
, d
->state
, timeout
);
273 if (!mod_timer(&d
->timer
, jiffies
+ timeout
))
277 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc
*d
)
279 BT_DBG("dlc %p state %ld", d
, d
->state
);
281 if (del_timer(&d
->timer
))
285 static void rfcomm_dlc_clear_state(struct rfcomm_dlc
*d
)
292 d
->sec_level
= BT_SECURITY_LOW
;
293 d
->mtu
= RFCOMM_DEFAULT_MTU
;
294 d
->v24_sig
= RFCOMM_V24_RTC
| RFCOMM_V24_RTR
| RFCOMM_V24_DV
;
296 d
->cfc
= RFCOMM_CFC_DISABLED
;
297 d
->rx_credits
= RFCOMM_DEFAULT_CREDITS
;
300 struct rfcomm_dlc
*rfcomm_dlc_alloc(gfp_t prio
)
302 struct rfcomm_dlc
*d
= kzalloc(sizeof(*d
), prio
);
307 setup_timer(&d
->timer
, rfcomm_dlc_timeout
, (unsigned long)d
);
309 skb_queue_head_init(&d
->tx_queue
);
310 spin_lock_init(&d
->lock
);
311 atomic_set(&d
->refcnt
, 1);
313 rfcomm_dlc_clear_state(d
);
320 void rfcomm_dlc_free(struct rfcomm_dlc
*d
)
324 skb_queue_purge(&d
->tx_queue
);
328 static void rfcomm_dlc_link(struct rfcomm_session
*s
, struct rfcomm_dlc
*d
)
330 BT_DBG("dlc %p session %p", d
, s
);
332 rfcomm_session_clear_timer(s
);
334 list_add(&d
->list
, &s
->dlcs
);
338 static void rfcomm_dlc_unlink(struct rfcomm_dlc
*d
)
340 struct rfcomm_session
*s
= d
->session
;
342 BT_DBG("dlc %p refcnt %d session %p", d
, atomic_read(&d
->refcnt
), s
);
348 if (list_empty(&s
->dlcs
))
349 rfcomm_session_set_timer(s
, RFCOMM_IDLE_TIMEOUT
);
352 static struct rfcomm_dlc
*rfcomm_dlc_get(struct rfcomm_session
*s
, u8 dlci
)
354 struct rfcomm_dlc
*d
;
356 list_for_each_entry(d
, &s
->dlcs
, list
)
363 static int rfcomm_check_channel(u8 channel
)
365 return channel
< 1 || channel
> 30;
368 static int __rfcomm_dlc_open(struct rfcomm_dlc
*d
, bdaddr_t
*src
, bdaddr_t
*dst
, u8 channel
)
370 struct rfcomm_session
*s
;
374 BT_DBG("dlc %p state %ld %pMR -> %pMR channel %d",
375 d
, d
->state
, src
, dst
, channel
);
377 if (rfcomm_check_channel(channel
))
380 if (d
->state
!= BT_OPEN
&& d
->state
!= BT_CLOSED
)
383 s
= rfcomm_session_get(src
, dst
);
385 s
= rfcomm_session_create(src
, dst
, d
->sec_level
, &err
);
390 dlci
= __dlci(!s
->initiator
, channel
);
392 /* Check if DLCI already exists */
393 if (rfcomm_dlc_get(s
, dlci
))
396 rfcomm_dlc_clear_state(d
);
399 d
->addr
= __addr(s
->initiator
, dlci
);
402 d
->state
= BT_CONFIG
;
403 rfcomm_dlc_link(s
, d
);
408 d
->cfc
= (s
->cfc
== RFCOMM_CFC_UNKNOWN
) ? 0 : s
->cfc
;
410 if (s
->state
== BT_CONNECTED
) {
411 if (rfcomm_check_security(d
))
412 rfcomm_send_pn(s
, 1, d
);
414 set_bit(RFCOMM_AUTH_PENDING
, &d
->flags
);
417 rfcomm_dlc_set_timer(d
, RFCOMM_CONN_TIMEOUT
);
422 int rfcomm_dlc_open(struct rfcomm_dlc
*d
, bdaddr_t
*src
, bdaddr_t
*dst
, u8 channel
)
428 r
= __rfcomm_dlc_open(d
, src
, dst
, channel
);
434 static int __rfcomm_dlc_close(struct rfcomm_dlc
*d
, int err
)
436 struct rfcomm_session
*s
= d
->session
;
440 BT_DBG("dlc %p state %ld dlci %d err %d session %p",
441 d
, d
->state
, d
->dlci
, err
, s
);
448 if (test_and_clear_bit(RFCOMM_DEFER_SETUP
, &d
->flags
)) {
449 set_bit(RFCOMM_AUTH_REJECT
, &d
->flags
);
461 d
->state
= BT_DISCONN
;
462 if (skb_queue_empty(&d
->tx_queue
)) {
463 rfcomm_send_disc(s
, d
->dlci
);
464 rfcomm_dlc_set_timer(d
, RFCOMM_DISC_TIMEOUT
);
466 rfcomm_queue_disc(d
);
467 rfcomm_dlc_set_timer(d
, RFCOMM_DISC_TIMEOUT
* 2);
472 rfcomm_dlc_clear_timer(d
);
475 d
->state
= BT_CLOSED
;
476 d
->state_change(d
, err
);
477 rfcomm_dlc_unlock(d
);
479 skb_queue_purge(&d
->tx_queue
);
480 rfcomm_dlc_unlink(d
);
486 int rfcomm_dlc_close(struct rfcomm_dlc
*d
, int err
)
489 struct rfcomm_dlc
*d_list
;
490 struct rfcomm_session
*s
, *s_list
;
492 BT_DBG("dlc %p state %ld dlci %d err %d", d
, d
->state
, d
->dlci
, err
);
500 /* after waiting on the mutex check the session still exists
501 * then check the dlc still exists
503 list_for_each_entry(s_list
, &session_list
, list
) {
505 list_for_each_entry(d_list
, &s
->dlcs
, list
) {
507 r
= __rfcomm_dlc_close(d
, err
);
520 struct rfcomm_dlc
*rfcomm_dlc_exists(bdaddr_t
*src
, bdaddr_t
*dst
, u8 channel
)
522 struct rfcomm_session
*s
;
523 struct rfcomm_dlc
*dlc
= NULL
;
526 if (rfcomm_check_channel(channel
))
527 return ERR_PTR(-EINVAL
);
530 s
= rfcomm_session_get(src
, dst
);
532 dlci
= __dlci(!s
->initiator
, channel
);
533 dlc
= rfcomm_dlc_get(s
, dlci
);
539 int rfcomm_dlc_send(struct rfcomm_dlc
*d
, struct sk_buff
*skb
)
543 if (d
->state
!= BT_CONNECTED
)
546 BT_DBG("dlc %p mtu %d len %d", d
, d
->mtu
, len
);
551 rfcomm_make_uih(skb
, d
->addr
);
552 skb_queue_tail(&d
->tx_queue
, skb
);
554 if (!test_bit(RFCOMM_TX_THROTTLED
, &d
->flags
))
559 void __rfcomm_dlc_throttle(struct rfcomm_dlc
*d
)
561 BT_DBG("dlc %p state %ld", d
, d
->state
);
564 d
->v24_sig
|= RFCOMM_V24_FC
;
565 set_bit(RFCOMM_MSC_PENDING
, &d
->flags
);
570 void __rfcomm_dlc_unthrottle(struct rfcomm_dlc
*d
)
572 BT_DBG("dlc %p state %ld", d
, d
->state
);
575 d
->v24_sig
&= ~RFCOMM_V24_FC
;
576 set_bit(RFCOMM_MSC_PENDING
, &d
->flags
);
582 Set/get modem status functions use _local_ status i.e. what we report
584 Remote status is provided by dlc->modem_status() callback.
586 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc
*d
, u8 v24_sig
)
588 BT_DBG("dlc %p state %ld v24_sig 0x%x",
589 d
, d
->state
, v24_sig
);
591 if (test_bit(RFCOMM_RX_THROTTLED
, &d
->flags
))
592 v24_sig
|= RFCOMM_V24_FC
;
594 v24_sig
&= ~RFCOMM_V24_FC
;
596 d
->v24_sig
= v24_sig
;
598 if (!test_and_set_bit(RFCOMM_MSC_PENDING
, &d
->flags
))
604 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc
*d
, u8
*v24_sig
)
606 BT_DBG("dlc %p state %ld v24_sig 0x%x",
607 d
, d
->state
, d
->v24_sig
);
609 *v24_sig
= d
->v24_sig
;
613 /* ---- RFCOMM sessions ---- */
614 static struct rfcomm_session
*rfcomm_session_add(struct socket
*sock
, int state
)
616 struct rfcomm_session
*s
= kzalloc(sizeof(*s
), GFP_KERNEL
);
621 BT_DBG("session %p sock %p", s
, sock
);
623 setup_timer(&s
->timer
, rfcomm_session_timeout
, (unsigned long) s
);
625 INIT_LIST_HEAD(&s
->dlcs
);
629 s
->mtu
= RFCOMM_DEFAULT_MTU
;
630 s
->cfc
= disable_cfc
? RFCOMM_CFC_DISABLED
: RFCOMM_CFC_UNKNOWN
;
632 /* Do not increment module usage count for listening sessions.
633 * Otherwise we won't be able to unload the module. */
634 if (state
!= BT_LISTEN
)
635 if (!try_module_get(THIS_MODULE
)) {
640 list_add(&s
->list
, &session_list
);
645 static struct rfcomm_session
*rfcomm_session_del(struct rfcomm_session
*s
)
647 int state
= s
->state
;
649 BT_DBG("session %p state %ld", s
, s
->state
);
653 rfcomm_session_clear_timer(s
);
654 sock_release(s
->sock
);
657 if (state
!= BT_LISTEN
)
658 module_put(THIS_MODULE
);
663 static struct rfcomm_session
*rfcomm_session_get(bdaddr_t
*src
, bdaddr_t
*dst
)
665 struct rfcomm_session
*s
;
666 struct list_head
*p
, *n
;
667 struct l2cap_chan
*chan
;
668 list_for_each_safe(p
, n
, &session_list
) {
669 s
= list_entry(p
, struct rfcomm_session
, list
);
670 chan
= l2cap_pi(s
->sock
->sk
)->chan
;
672 if ((!bacmp(src
, BDADDR_ANY
) || !bacmp(&chan
->src
, src
)) &&
673 !bacmp(&chan
->dst
, dst
))
679 static struct rfcomm_session
*rfcomm_session_close(struct rfcomm_session
*s
,
682 struct rfcomm_dlc
*d
;
683 struct list_head
*p
, *n
;
685 s
->state
= BT_CLOSED
;
687 BT_DBG("session %p state %ld err %d", s
, s
->state
, err
);
690 list_for_each_safe(p
, n
, &s
->dlcs
) {
691 d
= list_entry(p
, struct rfcomm_dlc
, list
);
692 d
->state
= BT_CLOSED
;
693 __rfcomm_dlc_close(d
, err
);
696 rfcomm_session_clear_timer(s
);
697 return rfcomm_session_del(s
);
700 static struct rfcomm_session
*rfcomm_session_create(bdaddr_t
*src
,
705 struct rfcomm_session
*s
= NULL
;
706 struct sockaddr_l2 addr
;
710 BT_DBG("%pMR -> %pMR", src
, dst
);
712 *err
= rfcomm_l2sock_create(&sock
);
716 bacpy(&addr
.l2_bdaddr
, src
);
717 addr
.l2_family
= AF_BLUETOOTH
;
720 addr
.l2_bdaddr_type
= BDADDR_BREDR
;
721 *err
= kernel_bind(sock
, (struct sockaddr
*) &addr
, sizeof(addr
));
725 /* Set L2CAP options */
728 l2cap_pi(sk
)->chan
->imtu
= l2cap_mtu
;
729 l2cap_pi(sk
)->chan
->sec_level
= sec_level
;
731 l2cap_pi(sk
)->chan
->mode
= L2CAP_MODE_ERTM
;
734 s
= rfcomm_session_add(sock
, BT_BOUND
);
742 bacpy(&addr
.l2_bdaddr
, dst
);
743 addr
.l2_family
= AF_BLUETOOTH
;
744 addr
.l2_psm
= __constant_cpu_to_le16(RFCOMM_PSM
);
746 addr
.l2_bdaddr_type
= BDADDR_BREDR
;
747 *err
= kernel_connect(sock
, (struct sockaddr
*) &addr
, sizeof(addr
), O_NONBLOCK
);
748 if (*err
== 0 || *err
== -EINPROGRESS
)
751 return rfcomm_session_del(s
);
758 void rfcomm_session_getaddr(struct rfcomm_session
*s
, bdaddr_t
*src
, bdaddr_t
*dst
)
760 struct l2cap_chan
*chan
= l2cap_pi(s
->sock
->sk
)->chan
;
762 bacpy(src
, &chan
->src
);
764 bacpy(dst
, &chan
->dst
);
767 /* ---- RFCOMM frame sending ---- */
768 static int rfcomm_send_frame(struct rfcomm_session
*s
, u8
*data
, int len
)
770 struct kvec iv
= { data
, len
};
773 BT_DBG("session %p len %d", s
, len
);
775 memset(&msg
, 0, sizeof(msg
));
777 return kernel_sendmsg(s
->sock
, &msg
, &iv
, 1, len
);
780 static int rfcomm_send_cmd(struct rfcomm_session
*s
, struct rfcomm_cmd
*cmd
)
782 BT_DBG("%p cmd %u", s
, cmd
->ctrl
);
784 return rfcomm_send_frame(s
, (void *) cmd
, sizeof(*cmd
));
787 static int rfcomm_send_sabm(struct rfcomm_session
*s
, u8 dlci
)
789 struct rfcomm_cmd cmd
;
791 BT_DBG("%p dlci %d", s
, dlci
);
793 cmd
.addr
= __addr(s
->initiator
, dlci
);
794 cmd
.ctrl
= __ctrl(RFCOMM_SABM
, 1);
796 cmd
.fcs
= __fcs2((u8
*) &cmd
);
798 return rfcomm_send_cmd(s
, &cmd
);
801 static int rfcomm_send_ua(struct rfcomm_session
*s
, u8 dlci
)
803 struct rfcomm_cmd cmd
;
805 BT_DBG("%p dlci %d", s
, dlci
);
807 cmd
.addr
= __addr(!s
->initiator
, dlci
);
808 cmd
.ctrl
= __ctrl(RFCOMM_UA
, 1);
810 cmd
.fcs
= __fcs2((u8
*) &cmd
);
812 return rfcomm_send_cmd(s
, &cmd
);
815 static int rfcomm_send_disc(struct rfcomm_session
*s
, u8 dlci
)
817 struct rfcomm_cmd cmd
;
819 BT_DBG("%p dlci %d", s
, dlci
);
821 cmd
.addr
= __addr(s
->initiator
, dlci
);
822 cmd
.ctrl
= __ctrl(RFCOMM_DISC
, 1);
824 cmd
.fcs
= __fcs2((u8
*) &cmd
);
826 return rfcomm_send_cmd(s
, &cmd
);
829 static int rfcomm_queue_disc(struct rfcomm_dlc
*d
)
831 struct rfcomm_cmd
*cmd
;
834 BT_DBG("dlc %p dlci %d", d
, d
->dlci
);
836 skb
= alloc_skb(sizeof(*cmd
), GFP_KERNEL
);
840 cmd
= (void *) __skb_put(skb
, sizeof(*cmd
));
842 cmd
->ctrl
= __ctrl(RFCOMM_DISC
, 1);
843 cmd
->len
= __len8(0);
844 cmd
->fcs
= __fcs2((u8
*) cmd
);
846 skb_queue_tail(&d
->tx_queue
, skb
);
851 static int rfcomm_send_dm(struct rfcomm_session
*s
, u8 dlci
)
853 struct rfcomm_cmd cmd
;
855 BT_DBG("%p dlci %d", s
, dlci
);
857 cmd
.addr
= __addr(!s
->initiator
, dlci
);
858 cmd
.ctrl
= __ctrl(RFCOMM_DM
, 1);
860 cmd
.fcs
= __fcs2((u8
*) &cmd
);
862 return rfcomm_send_cmd(s
, &cmd
);
865 static int rfcomm_send_nsc(struct rfcomm_session
*s
, int cr
, u8 type
)
867 struct rfcomm_hdr
*hdr
;
868 struct rfcomm_mcc
*mcc
;
869 u8 buf
[16], *ptr
= buf
;
871 BT_DBG("%p cr %d type %d", s
, cr
, type
);
873 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
874 hdr
->addr
= __addr(s
->initiator
, 0);
875 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
876 hdr
->len
= __len8(sizeof(*mcc
) + 1);
878 mcc
= (void *) ptr
; ptr
+= sizeof(*mcc
);
879 mcc
->type
= __mcc_type(cr
, RFCOMM_NSC
);
880 mcc
->len
= __len8(1);
882 /* Type that we didn't like */
883 *ptr
= __mcc_type(cr
, type
); ptr
++;
885 *ptr
= __fcs(buf
); ptr
++;
887 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
890 static int rfcomm_send_pn(struct rfcomm_session
*s
, int cr
, struct rfcomm_dlc
*d
)
892 struct rfcomm_hdr
*hdr
;
893 struct rfcomm_mcc
*mcc
;
894 struct rfcomm_pn
*pn
;
895 u8 buf
[16], *ptr
= buf
;
897 BT_DBG("%p cr %d dlci %d mtu %d", s
, cr
, d
->dlci
, d
->mtu
);
899 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
900 hdr
->addr
= __addr(s
->initiator
, 0);
901 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
902 hdr
->len
= __len8(sizeof(*mcc
) + sizeof(*pn
));
904 mcc
= (void *) ptr
; ptr
+= sizeof(*mcc
);
905 mcc
->type
= __mcc_type(cr
, RFCOMM_PN
);
906 mcc
->len
= __len8(sizeof(*pn
));
908 pn
= (void *) ptr
; ptr
+= sizeof(*pn
);
910 pn
->priority
= d
->priority
;
915 pn
->flow_ctrl
= cr
? 0xf0 : 0xe0;
916 pn
->credits
= RFCOMM_DEFAULT_CREDITS
;
922 if (cr
&& channel_mtu
>= 0)
923 pn
->mtu
= cpu_to_le16(channel_mtu
);
925 pn
->mtu
= cpu_to_le16(d
->mtu
);
927 *ptr
= __fcs(buf
); ptr
++;
929 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
932 int rfcomm_send_rpn(struct rfcomm_session
*s
, int cr
, u8 dlci
,
933 u8 bit_rate
, u8 data_bits
, u8 stop_bits
,
934 u8 parity
, u8 flow_ctrl_settings
,
935 u8 xon_char
, u8 xoff_char
, u16 param_mask
)
937 struct rfcomm_hdr
*hdr
;
938 struct rfcomm_mcc
*mcc
;
939 struct rfcomm_rpn
*rpn
;
940 u8 buf
[16], *ptr
= buf
;
942 BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
943 " flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
944 s
, cr
, dlci
, bit_rate
, data_bits
, stop_bits
, parity
,
945 flow_ctrl_settings
, xon_char
, xoff_char
, param_mask
);
947 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
948 hdr
->addr
= __addr(s
->initiator
, 0);
949 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
950 hdr
->len
= __len8(sizeof(*mcc
) + sizeof(*rpn
));
952 mcc
= (void *) ptr
; ptr
+= sizeof(*mcc
);
953 mcc
->type
= __mcc_type(cr
, RFCOMM_RPN
);
954 mcc
->len
= __len8(sizeof(*rpn
));
956 rpn
= (void *) ptr
; ptr
+= sizeof(*rpn
);
957 rpn
->dlci
= __addr(1, dlci
);
958 rpn
->bit_rate
= bit_rate
;
959 rpn
->line_settings
= __rpn_line_settings(data_bits
, stop_bits
, parity
);
960 rpn
->flow_ctrl
= flow_ctrl_settings
;
961 rpn
->xon_char
= xon_char
;
962 rpn
->xoff_char
= xoff_char
;
963 rpn
->param_mask
= cpu_to_le16(param_mask
);
965 *ptr
= __fcs(buf
); ptr
++;
967 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
970 static int rfcomm_send_rls(struct rfcomm_session
*s
, int cr
, u8 dlci
, u8 status
)
972 struct rfcomm_hdr
*hdr
;
973 struct rfcomm_mcc
*mcc
;
974 struct rfcomm_rls
*rls
;
975 u8 buf
[16], *ptr
= buf
;
977 BT_DBG("%p cr %d status 0x%x", s
, cr
, status
);
979 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
980 hdr
->addr
= __addr(s
->initiator
, 0);
981 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
982 hdr
->len
= __len8(sizeof(*mcc
) + sizeof(*rls
));
984 mcc
= (void *) ptr
; ptr
+= sizeof(*mcc
);
985 mcc
->type
= __mcc_type(cr
, RFCOMM_RLS
);
986 mcc
->len
= __len8(sizeof(*rls
));
988 rls
= (void *) ptr
; ptr
+= sizeof(*rls
);
989 rls
->dlci
= __addr(1, dlci
);
990 rls
->status
= status
;
992 *ptr
= __fcs(buf
); ptr
++;
994 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
997 static int rfcomm_send_msc(struct rfcomm_session
*s
, int cr
, u8 dlci
, u8 v24_sig
)
999 struct rfcomm_hdr
*hdr
;
1000 struct rfcomm_mcc
*mcc
;
1001 struct rfcomm_msc
*msc
;
1002 u8 buf
[16], *ptr
= buf
;
1004 BT_DBG("%p cr %d v24 0x%x", s
, cr
, v24_sig
);
1006 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
1007 hdr
->addr
= __addr(s
->initiator
, 0);
1008 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
1009 hdr
->len
= __len8(sizeof(*mcc
) + sizeof(*msc
));
1011 mcc
= (void *) ptr
; ptr
+= sizeof(*mcc
);
1012 mcc
->type
= __mcc_type(cr
, RFCOMM_MSC
);
1013 mcc
->len
= __len8(sizeof(*msc
));
1015 msc
= (void *) ptr
; ptr
+= sizeof(*msc
);
1016 msc
->dlci
= __addr(1, dlci
);
1017 msc
->v24_sig
= v24_sig
| 0x01;
1019 *ptr
= __fcs(buf
); ptr
++;
1021 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
1024 static int rfcomm_send_fcoff(struct rfcomm_session
*s
, int cr
)
1026 struct rfcomm_hdr
*hdr
;
1027 struct rfcomm_mcc
*mcc
;
1028 u8 buf
[16], *ptr
= buf
;
1030 BT_DBG("%p cr %d", s
, cr
);
1032 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
1033 hdr
->addr
= __addr(s
->initiator
, 0);
1034 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
1035 hdr
->len
= __len8(sizeof(*mcc
));
1037 mcc
= (void *) ptr
; ptr
+= sizeof(*mcc
);
1038 mcc
->type
= __mcc_type(cr
, RFCOMM_FCOFF
);
1039 mcc
->len
= __len8(0);
1041 *ptr
= __fcs(buf
); ptr
++;
1043 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
1046 static int rfcomm_send_fcon(struct rfcomm_session
*s
, int cr
)
1048 struct rfcomm_hdr
*hdr
;
1049 struct rfcomm_mcc
*mcc
;
1050 u8 buf
[16], *ptr
= buf
;
1052 BT_DBG("%p cr %d", s
, cr
);
1054 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
1055 hdr
->addr
= __addr(s
->initiator
, 0);
1056 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
1057 hdr
->len
= __len8(sizeof(*mcc
));
1059 mcc
= (void *) ptr
; ptr
+= sizeof(*mcc
);
1060 mcc
->type
= __mcc_type(cr
, RFCOMM_FCON
);
1061 mcc
->len
= __len8(0);
1063 *ptr
= __fcs(buf
); ptr
++;
1065 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
1068 static int rfcomm_send_test(struct rfcomm_session
*s
, int cr
, u8
*pattern
, int len
)
1070 struct socket
*sock
= s
->sock
;
1073 unsigned char hdr
[5], crc
[1];
1078 BT_DBG("%p cr %d", s
, cr
);
1080 hdr
[0] = __addr(s
->initiator
, 0);
1081 hdr
[1] = __ctrl(RFCOMM_UIH
, 0);
1082 hdr
[2] = 0x01 | ((len
+ 2) << 1);
1083 hdr
[3] = 0x01 | ((cr
& 0x01) << 1) | (RFCOMM_TEST
<< 2);
1084 hdr
[4] = 0x01 | (len
<< 1);
1086 crc
[0] = __fcs(hdr
);
1088 iv
[0].iov_base
= hdr
;
1090 iv
[1].iov_base
= pattern
;
1091 iv
[1].iov_len
= len
;
1092 iv
[2].iov_base
= crc
;
1095 memset(&msg
, 0, sizeof(msg
));
1097 return kernel_sendmsg(sock
, &msg
, iv
, 3, 6 + len
);
1100 static int rfcomm_send_credits(struct rfcomm_session
*s
, u8 addr
, u8 credits
)
1102 struct rfcomm_hdr
*hdr
;
1103 u8 buf
[16], *ptr
= buf
;
1105 BT_DBG("%p addr %d credits %d", s
, addr
, credits
);
1107 hdr
= (void *) ptr
; ptr
+= sizeof(*hdr
);
1109 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 1);
1110 hdr
->len
= __len8(0);
1112 *ptr
= credits
; ptr
++;
1114 *ptr
= __fcs(buf
); ptr
++;
1116 return rfcomm_send_frame(s
, buf
, ptr
- buf
);
1119 static void rfcomm_make_uih(struct sk_buff
*skb
, u8 addr
)
1121 struct rfcomm_hdr
*hdr
;
1126 hdr
= (void *) skb_push(skb
, 4);
1127 put_unaligned(cpu_to_le16(__len16(len
)), (__le16
*) &hdr
->len
);
1129 hdr
= (void *) skb_push(skb
, 3);
1130 hdr
->len
= __len8(len
);
1133 hdr
->ctrl
= __ctrl(RFCOMM_UIH
, 0);
1135 crc
= skb_put(skb
, 1);
1136 *crc
= __fcs((void *) hdr
);
1139 /* ---- RFCOMM frame reception ---- */
1140 static struct rfcomm_session
*rfcomm_recv_ua(struct rfcomm_session
*s
, u8 dlci
)
1142 BT_DBG("session %p state %ld dlci %d", s
, s
->state
, dlci
);
1146 struct rfcomm_dlc
*d
= rfcomm_dlc_get(s
, dlci
);
1148 rfcomm_send_dm(s
, dlci
);
1154 rfcomm_dlc_clear_timer(d
);
1157 d
->state
= BT_CONNECTED
;
1158 d
->state_change(d
, 0);
1159 rfcomm_dlc_unlock(d
);
1161 rfcomm_send_msc(s
, 1, dlci
, d
->v24_sig
);
1165 d
->state
= BT_CLOSED
;
1166 __rfcomm_dlc_close(d
, 0);
1168 if (list_empty(&s
->dlcs
)) {
1169 s
->state
= BT_DISCONN
;
1170 rfcomm_send_disc(s
, 0);
1171 rfcomm_session_clear_timer(s
);
1177 /* Control channel */
1180 s
->state
= BT_CONNECTED
;
1181 rfcomm_process_connect(s
);
1185 s
= rfcomm_session_close(s
, ECONNRESET
);
1192 static struct rfcomm_session
*rfcomm_recv_dm(struct rfcomm_session
*s
, u8 dlci
)
1196 BT_DBG("session %p state %ld dlci %d", s
, s
->state
, dlci
);
1200 struct rfcomm_dlc
*d
= rfcomm_dlc_get(s
, dlci
);
1202 if (d
->state
== BT_CONNECT
|| d
->state
== BT_CONFIG
)
1207 d
->state
= BT_CLOSED
;
1208 __rfcomm_dlc_close(d
, err
);
1211 if (s
->state
== BT_CONNECT
)
1216 s
= rfcomm_session_close(s
, err
);
1221 static struct rfcomm_session
*rfcomm_recv_disc(struct rfcomm_session
*s
,
1226 BT_DBG("session %p state %ld dlci %d", s
, s
->state
, dlci
);
1229 struct rfcomm_dlc
*d
= rfcomm_dlc_get(s
, dlci
);
1231 rfcomm_send_ua(s
, dlci
);
1233 if (d
->state
== BT_CONNECT
|| d
->state
== BT_CONFIG
)
1238 d
->state
= BT_CLOSED
;
1239 __rfcomm_dlc_close(d
, err
);
1241 rfcomm_send_dm(s
, dlci
);
1244 rfcomm_send_ua(s
, 0);
1246 if (s
->state
== BT_CONNECT
)
1251 s
= rfcomm_session_close(s
, err
);
1256 void rfcomm_dlc_accept(struct rfcomm_dlc
*d
)
1258 struct sock
*sk
= d
->session
->sock
->sk
;
1259 struct l2cap_conn
*conn
= l2cap_pi(sk
)->chan
->conn
;
1261 BT_DBG("dlc %p", d
);
1263 rfcomm_send_ua(d
->session
, d
->dlci
);
1265 rfcomm_dlc_clear_timer(d
);
1268 d
->state
= BT_CONNECTED
;
1269 d
->state_change(d
, 0);
1270 rfcomm_dlc_unlock(d
);
1273 hci_conn_switch_role(conn
->hcon
, 0x00);
1275 rfcomm_send_msc(d
->session
, 1, d
->dlci
, d
->v24_sig
);
1278 static void rfcomm_check_accept(struct rfcomm_dlc
*d
)
1280 if (rfcomm_check_security(d
)) {
1281 if (d
->defer_setup
) {
1282 set_bit(RFCOMM_DEFER_SETUP
, &d
->flags
);
1283 rfcomm_dlc_set_timer(d
, RFCOMM_AUTH_TIMEOUT
);
1286 d
->state
= BT_CONNECT2
;
1287 d
->state_change(d
, 0);
1288 rfcomm_dlc_unlock(d
);
1290 rfcomm_dlc_accept(d
);
1292 set_bit(RFCOMM_AUTH_PENDING
, &d
->flags
);
1293 rfcomm_dlc_set_timer(d
, RFCOMM_AUTH_TIMEOUT
);
1297 static int rfcomm_recv_sabm(struct rfcomm_session
*s
, u8 dlci
)
1299 struct rfcomm_dlc
*d
;
1302 BT_DBG("session %p state %ld dlci %d", s
, s
->state
, dlci
);
1305 rfcomm_send_ua(s
, 0);
1307 if (s
->state
== BT_OPEN
) {
1308 s
->state
= BT_CONNECTED
;
1309 rfcomm_process_connect(s
);
1314 /* Check if DLC exists */
1315 d
= rfcomm_dlc_get(s
, dlci
);
1317 if (d
->state
== BT_OPEN
) {
1318 /* DLC was previously opened by PN request */
1319 rfcomm_check_accept(d
);
1324 /* Notify socket layer about incoming connection */
1325 channel
= __srv_channel(dlci
);
1326 if (rfcomm_connect_ind(s
, channel
, &d
)) {
1328 d
->addr
= __addr(s
->initiator
, dlci
);
1329 rfcomm_dlc_link(s
, d
);
1331 rfcomm_check_accept(d
);
1333 rfcomm_send_dm(s
, dlci
);
1339 static int rfcomm_apply_pn(struct rfcomm_dlc
*d
, int cr
, struct rfcomm_pn
*pn
)
1341 struct rfcomm_session
*s
= d
->session
;
1343 BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1344 d
, d
->state
, d
->dlci
, pn
->mtu
, pn
->flow_ctrl
, pn
->credits
);
1346 if ((pn
->flow_ctrl
== 0xf0 && s
->cfc
!= RFCOMM_CFC_DISABLED
) ||
1347 pn
->flow_ctrl
== 0xe0) {
1348 d
->cfc
= RFCOMM_CFC_ENABLED
;
1349 d
->tx_credits
= pn
->credits
;
1351 d
->cfc
= RFCOMM_CFC_DISABLED
;
1352 set_bit(RFCOMM_TX_THROTTLED
, &d
->flags
);
1355 if (s
->cfc
== RFCOMM_CFC_UNKNOWN
)
1358 d
->priority
= pn
->priority
;
1360 d
->mtu
= __le16_to_cpu(pn
->mtu
);
1362 if (cr
&& d
->mtu
> s
->mtu
)
1368 static int rfcomm_recv_pn(struct rfcomm_session
*s
, int cr
, struct sk_buff
*skb
)
1370 struct rfcomm_pn
*pn
= (void *) skb
->data
;
1371 struct rfcomm_dlc
*d
;
1374 BT_DBG("session %p state %ld dlci %d", s
, s
->state
, dlci
);
1379 d
= rfcomm_dlc_get(s
, dlci
);
1383 rfcomm_apply_pn(d
, cr
, pn
);
1384 rfcomm_send_pn(s
, 0, d
);
1389 rfcomm_apply_pn(d
, cr
, pn
);
1391 d
->state
= BT_CONNECT
;
1392 rfcomm_send_sabm(s
, d
->dlci
);
1397 u8 channel
= __srv_channel(dlci
);
1402 /* PN request for non existing DLC.
1403 * Assume incoming connection. */
1404 if (rfcomm_connect_ind(s
, channel
, &d
)) {
1406 d
->addr
= __addr(s
->initiator
, dlci
);
1407 rfcomm_dlc_link(s
, d
);
1409 rfcomm_apply_pn(d
, cr
, pn
);
1412 rfcomm_send_pn(s
, 0, d
);
1414 rfcomm_send_dm(s
, dlci
);
1420 static int rfcomm_recv_rpn(struct rfcomm_session
*s
, int cr
, int len
, struct sk_buff
*skb
)
1422 struct rfcomm_rpn
*rpn
= (void *) skb
->data
;
1423 u8 dlci
= __get_dlci(rpn
->dlci
);
1432 u16 rpn_mask
= RFCOMM_RPN_PM_ALL
;
1434 BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x",
1435 dlci
, cr
, len
, rpn
->bit_rate
, rpn
->line_settings
, rpn
->flow_ctrl
,
1436 rpn
->xon_char
, rpn
->xoff_char
, rpn
->param_mask
);
1442 /* This is a request, return default (according to ETSI TS 07.10) settings */
1443 bit_rate
= RFCOMM_RPN_BR_9600
;
1444 data_bits
= RFCOMM_RPN_DATA_8
;
1445 stop_bits
= RFCOMM_RPN_STOP_1
;
1446 parity
= RFCOMM_RPN_PARITY_NONE
;
1447 flow_ctrl
= RFCOMM_RPN_FLOW_NONE
;
1448 xon_char
= RFCOMM_RPN_XON_CHAR
;
1449 xoff_char
= RFCOMM_RPN_XOFF_CHAR
;
1453 /* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1454 * no parity, no flow control lines, normal XON/XOFF chars */
1456 if (rpn
->param_mask
& cpu_to_le16(RFCOMM_RPN_PM_BITRATE
)) {
1457 bit_rate
= rpn
->bit_rate
;
1458 if (bit_rate
> RFCOMM_RPN_BR_230400
) {
1459 BT_DBG("RPN bit rate mismatch 0x%x", bit_rate
);
1460 bit_rate
= RFCOMM_RPN_BR_9600
;
1461 rpn_mask
^= RFCOMM_RPN_PM_BITRATE
;
1465 if (rpn
->param_mask
& cpu_to_le16(RFCOMM_RPN_PM_DATA
)) {
1466 data_bits
= __get_rpn_data_bits(rpn
->line_settings
);
1467 if (data_bits
!= RFCOMM_RPN_DATA_8
) {
1468 BT_DBG("RPN data bits mismatch 0x%x", data_bits
);
1469 data_bits
= RFCOMM_RPN_DATA_8
;
1470 rpn_mask
^= RFCOMM_RPN_PM_DATA
;
1474 if (rpn
->param_mask
& cpu_to_le16(RFCOMM_RPN_PM_STOP
)) {
1475 stop_bits
= __get_rpn_stop_bits(rpn
->line_settings
);
1476 if (stop_bits
!= RFCOMM_RPN_STOP_1
) {
1477 BT_DBG("RPN stop bits mismatch 0x%x", stop_bits
);
1478 stop_bits
= RFCOMM_RPN_STOP_1
;
1479 rpn_mask
^= RFCOMM_RPN_PM_STOP
;
1483 if (rpn
->param_mask
& cpu_to_le16(RFCOMM_RPN_PM_PARITY
)) {
1484 parity
= __get_rpn_parity(rpn
->line_settings
);
1485 if (parity
!= RFCOMM_RPN_PARITY_NONE
) {
1486 BT_DBG("RPN parity mismatch 0x%x", parity
);
1487 parity
= RFCOMM_RPN_PARITY_NONE
;
1488 rpn_mask
^= RFCOMM_RPN_PM_PARITY
;
1492 if (rpn
->param_mask
& cpu_to_le16(RFCOMM_RPN_PM_FLOW
)) {
1493 flow_ctrl
= rpn
->flow_ctrl
;
1494 if (flow_ctrl
!= RFCOMM_RPN_FLOW_NONE
) {
1495 BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl
);
1496 flow_ctrl
= RFCOMM_RPN_FLOW_NONE
;
1497 rpn_mask
^= RFCOMM_RPN_PM_FLOW
;
1501 if (rpn
->param_mask
& cpu_to_le16(RFCOMM_RPN_PM_XON
)) {
1502 xon_char
= rpn
->xon_char
;
1503 if (xon_char
!= RFCOMM_RPN_XON_CHAR
) {
1504 BT_DBG("RPN XON char mismatch 0x%x", xon_char
);
1505 xon_char
= RFCOMM_RPN_XON_CHAR
;
1506 rpn_mask
^= RFCOMM_RPN_PM_XON
;
1510 if (rpn
->param_mask
& cpu_to_le16(RFCOMM_RPN_PM_XOFF
)) {
1511 xoff_char
= rpn
->xoff_char
;
1512 if (xoff_char
!= RFCOMM_RPN_XOFF_CHAR
) {
1513 BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char
);
1514 xoff_char
= RFCOMM_RPN_XOFF_CHAR
;
1515 rpn_mask
^= RFCOMM_RPN_PM_XOFF
;
1520 rfcomm_send_rpn(s
, 0, dlci
, bit_rate
, data_bits
, stop_bits
,
1521 parity
, flow_ctrl
, xon_char
, xoff_char
, rpn_mask
);
1526 static int rfcomm_recv_rls(struct rfcomm_session
*s
, int cr
, struct sk_buff
*skb
)
1528 struct rfcomm_rls
*rls
= (void *) skb
->data
;
1529 u8 dlci
= __get_dlci(rls
->dlci
);
1531 BT_DBG("dlci %d cr %d status 0x%x", dlci
, cr
, rls
->status
);
1536 /* We should probably do something with this information here. But
1537 * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1538 * mandatory to recognise and respond to RLS */
1540 rfcomm_send_rls(s
, 0, dlci
, rls
->status
);
1545 static int rfcomm_recv_msc(struct rfcomm_session
*s
, int cr
, struct sk_buff
*skb
)
1547 struct rfcomm_msc
*msc
= (void *) skb
->data
;
1548 struct rfcomm_dlc
*d
;
1549 u8 dlci
= __get_dlci(msc
->dlci
);
1551 BT_DBG("dlci %d cr %d v24 0x%x", dlci
, cr
, msc
->v24_sig
);
1553 d
= rfcomm_dlc_get(s
, dlci
);
1558 if (msc
->v24_sig
& RFCOMM_V24_FC
&& !d
->cfc
)
1559 set_bit(RFCOMM_TX_THROTTLED
, &d
->flags
);
1561 clear_bit(RFCOMM_TX_THROTTLED
, &d
->flags
);
1565 d
->remote_v24_sig
= msc
->v24_sig
;
1567 if (d
->modem_status
)
1568 d
->modem_status(d
, msc
->v24_sig
);
1570 rfcomm_dlc_unlock(d
);
1572 rfcomm_send_msc(s
, 0, dlci
, msc
->v24_sig
);
1574 d
->mscex
|= RFCOMM_MSCEX_RX
;
1576 d
->mscex
|= RFCOMM_MSCEX_TX
;
1581 static int rfcomm_recv_mcc(struct rfcomm_session
*s
, struct sk_buff
*skb
)
1583 struct rfcomm_mcc
*mcc
= (void *) skb
->data
;
1586 cr
= __test_cr(mcc
->type
);
1587 type
= __get_mcc_type(mcc
->type
);
1588 len
= __get_mcc_len(mcc
->len
);
1590 BT_DBG("%p type 0x%x cr %d", s
, type
, cr
);
1596 rfcomm_recv_pn(s
, cr
, skb
);
1600 rfcomm_recv_rpn(s
, cr
, len
, skb
);
1604 rfcomm_recv_rls(s
, cr
, skb
);
1608 rfcomm_recv_msc(s
, cr
, skb
);
1613 set_bit(RFCOMM_TX_THROTTLED
, &s
->flags
);
1614 rfcomm_send_fcoff(s
, 0);
1620 clear_bit(RFCOMM_TX_THROTTLED
, &s
->flags
);
1621 rfcomm_send_fcon(s
, 0);
1627 rfcomm_send_test(s
, 0, skb
->data
, skb
->len
);
1634 BT_ERR("Unknown control type 0x%02x", type
);
1635 rfcomm_send_nsc(s
, cr
, type
);
1641 static int rfcomm_recv_data(struct rfcomm_session
*s
, u8 dlci
, int pf
, struct sk_buff
*skb
)
1643 struct rfcomm_dlc
*d
;
1645 BT_DBG("session %p state %ld dlci %d pf %d", s
, s
->state
, dlci
, pf
);
1647 d
= rfcomm_dlc_get(s
, dlci
);
1649 rfcomm_send_dm(s
, dlci
);
1654 u8 credits
= *(u8
*) skb
->data
; skb_pull(skb
, 1);
1656 d
->tx_credits
+= credits
;
1658 clear_bit(RFCOMM_TX_THROTTLED
, &d
->flags
);
1661 if (skb
->len
&& d
->state
== BT_CONNECTED
) {
1664 d
->data_ready(d
, skb
);
1665 rfcomm_dlc_unlock(d
);
1674 static struct rfcomm_session
*rfcomm_recv_frame(struct rfcomm_session
*s
,
1675 struct sk_buff
*skb
)
1677 struct rfcomm_hdr
*hdr
= (void *) skb
->data
;
1681 /* no session, so free socket data */
1686 dlci
= __get_dlci(hdr
->addr
);
1687 type
= __get_type(hdr
->ctrl
);
1690 skb
->len
--; skb
->tail
--;
1691 fcs
= *(u8
*)skb_tail_pointer(skb
);
1693 if (__check_fcs(skb
->data
, type
, fcs
)) {
1694 BT_ERR("bad checksum in packet");
1699 if (__test_ea(hdr
->len
))
1706 if (__test_pf(hdr
->ctrl
))
1707 rfcomm_recv_sabm(s
, dlci
);
1711 if (__test_pf(hdr
->ctrl
))
1712 s
= rfcomm_recv_disc(s
, dlci
);
1716 if (__test_pf(hdr
->ctrl
))
1717 s
= rfcomm_recv_ua(s
, dlci
);
1721 s
= rfcomm_recv_dm(s
, dlci
);
1726 rfcomm_recv_data(s
, dlci
, __test_pf(hdr
->ctrl
), skb
);
1729 rfcomm_recv_mcc(s
, skb
);
1733 BT_ERR("Unknown packet type 0x%02x", type
);
1740 /* ---- Connection and data processing ---- */
1742 static void rfcomm_process_connect(struct rfcomm_session
*s
)
1744 struct rfcomm_dlc
*d
;
1745 struct list_head
*p
, *n
;
1747 BT_DBG("session %p state %ld", s
, s
->state
);
1749 list_for_each_safe(p
, n
, &s
->dlcs
) {
1750 d
= list_entry(p
, struct rfcomm_dlc
, list
);
1751 if (d
->state
== BT_CONFIG
) {
1753 if (rfcomm_check_security(d
)) {
1754 rfcomm_send_pn(s
, 1, d
);
1756 set_bit(RFCOMM_AUTH_PENDING
, &d
->flags
);
1757 rfcomm_dlc_set_timer(d
, RFCOMM_AUTH_TIMEOUT
);
1763 /* Send data queued for the DLC.
1764 * Return number of frames left in the queue.
1766 static int rfcomm_process_tx(struct rfcomm_dlc
*d
)
1768 struct sk_buff
*skb
;
1771 BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1772 d
, d
->state
, d
->cfc
, d
->rx_credits
, d
->tx_credits
);
1774 /* Send pending MSC */
1775 if (test_and_clear_bit(RFCOMM_MSC_PENDING
, &d
->flags
))
1776 rfcomm_send_msc(d
->session
, 1, d
->dlci
, d
->v24_sig
);
1780 * Give them some credits */
1781 if (!test_bit(RFCOMM_RX_THROTTLED
, &d
->flags
) &&
1782 d
->rx_credits
<= (d
->cfc
>> 2)) {
1783 rfcomm_send_credits(d
->session
, d
->addr
, d
->cfc
- d
->rx_credits
);
1784 d
->rx_credits
= d
->cfc
;
1788 * Give ourselves some credits */
1792 if (test_bit(RFCOMM_TX_THROTTLED
, &d
->flags
))
1793 return skb_queue_len(&d
->tx_queue
);
1795 while (d
->tx_credits
&& (skb
= skb_dequeue(&d
->tx_queue
))) {
1796 err
= rfcomm_send_frame(d
->session
, skb
->data
, skb
->len
);
1798 skb_queue_head(&d
->tx_queue
, skb
);
1805 if (d
->cfc
&& !d
->tx_credits
) {
1806 /* We're out of TX credits.
1807 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1808 set_bit(RFCOMM_TX_THROTTLED
, &d
->flags
);
1811 return skb_queue_len(&d
->tx_queue
);
1814 static void rfcomm_process_dlcs(struct rfcomm_session
*s
)
1816 struct rfcomm_dlc
*d
;
1817 struct list_head
*p
, *n
;
1819 BT_DBG("session %p state %ld", s
, s
->state
);
1821 list_for_each_safe(p
, n
, &s
->dlcs
) {
1822 d
= list_entry(p
, struct rfcomm_dlc
, list
);
1824 if (test_bit(RFCOMM_TIMED_OUT
, &d
->flags
)) {
1825 __rfcomm_dlc_close(d
, ETIMEDOUT
);
1829 if (test_bit(RFCOMM_ENC_DROP
, &d
->flags
)) {
1830 __rfcomm_dlc_close(d
, ECONNREFUSED
);
1834 if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT
, &d
->flags
)) {
1835 rfcomm_dlc_clear_timer(d
);
1837 rfcomm_send_pn(s
, 1, d
);
1838 rfcomm_dlc_set_timer(d
, RFCOMM_CONN_TIMEOUT
);
1840 if (d
->defer_setup
) {
1841 set_bit(RFCOMM_DEFER_SETUP
, &d
->flags
);
1842 rfcomm_dlc_set_timer(d
, RFCOMM_AUTH_TIMEOUT
);
1845 d
->state
= BT_CONNECT2
;
1846 d
->state_change(d
, 0);
1847 rfcomm_dlc_unlock(d
);
1849 rfcomm_dlc_accept(d
);
1852 } else if (test_and_clear_bit(RFCOMM_AUTH_REJECT
, &d
->flags
)) {
1853 rfcomm_dlc_clear_timer(d
);
1855 rfcomm_send_dm(s
, d
->dlci
);
1857 d
->state
= BT_CLOSED
;
1858 __rfcomm_dlc_close(d
, ECONNREFUSED
);
1862 if (test_bit(RFCOMM_SEC_PENDING
, &d
->flags
))
1865 if (test_bit(RFCOMM_TX_THROTTLED
, &s
->flags
))
1868 if ((d
->state
== BT_CONNECTED
|| d
->state
== BT_DISCONN
) &&
1869 d
->mscex
== RFCOMM_MSCEX_OK
)
1870 rfcomm_process_tx(d
);
1874 static struct rfcomm_session
*rfcomm_process_rx(struct rfcomm_session
*s
)
1876 struct socket
*sock
= s
->sock
;
1877 struct sock
*sk
= sock
->sk
;
1878 struct sk_buff
*skb
;
1880 BT_DBG("session %p state %ld qlen %d", s
, s
->state
, skb_queue_len(&sk
->sk_receive_queue
));
1882 /* Get data directly from socket receive queue without copying it. */
1883 while ((skb
= skb_dequeue(&sk
->sk_receive_queue
))) {
1885 if (!skb_linearize(skb
))
1886 s
= rfcomm_recv_frame(s
, skb
);
1891 if (s
&& (sk
->sk_state
== BT_CLOSED
))
1892 s
= rfcomm_session_close(s
, sk
->sk_err
);
1897 static void rfcomm_accept_connection(struct rfcomm_session
*s
)
1899 struct socket
*sock
= s
->sock
, *nsock
;
1902 /* Fast check for a new connection.
1903 * Avoids unnesesary socket allocations. */
1904 if (list_empty(&bt_sk(sock
->sk
)->accept_q
))
1907 BT_DBG("session %p", s
);
1909 err
= kernel_accept(sock
, &nsock
, O_NONBLOCK
);
1913 /* Set our callbacks */
1914 nsock
->sk
->sk_data_ready
= rfcomm_l2data_ready
;
1915 nsock
->sk
->sk_state_change
= rfcomm_l2state_change
;
1917 s
= rfcomm_session_add(nsock
, BT_OPEN
);
1919 /* We should adjust MTU on incoming sessions.
1920 * L2CAP MTU minus UIH header and FCS. */
1921 s
->mtu
= min(l2cap_pi(nsock
->sk
)->chan
->omtu
,
1922 l2cap_pi(nsock
->sk
)->chan
->imtu
) - 5;
1926 sock_release(nsock
);
1929 static struct rfcomm_session
*rfcomm_check_connection(struct rfcomm_session
*s
)
1931 struct sock
*sk
= s
->sock
->sk
;
1933 BT_DBG("%p state %ld", s
, s
->state
);
1935 switch (sk
->sk_state
) {
1937 s
->state
= BT_CONNECT
;
1939 /* We can adjust MTU on outgoing sessions.
1940 * L2CAP MTU minus UIH header and FCS. */
1941 s
->mtu
= min(l2cap_pi(sk
)->chan
->omtu
, l2cap_pi(sk
)->chan
->imtu
) - 5;
1943 rfcomm_send_sabm(s
, 0);
1947 s
= rfcomm_session_close(s
, sk
->sk_err
);
1953 static void rfcomm_process_sessions(void)
1955 struct list_head
*p
, *n
;
1959 list_for_each_safe(p
, n
, &session_list
) {
1960 struct rfcomm_session
*s
;
1961 s
= list_entry(p
, struct rfcomm_session
, list
);
1963 if (test_and_clear_bit(RFCOMM_TIMED_OUT
, &s
->flags
)) {
1964 s
->state
= BT_DISCONN
;
1965 rfcomm_send_disc(s
, 0);
1971 rfcomm_accept_connection(s
);
1975 s
= rfcomm_check_connection(s
);
1979 s
= rfcomm_process_rx(s
);
1984 rfcomm_process_dlcs(s
);
1990 static int rfcomm_add_listener(bdaddr_t
*ba
)
1992 struct sockaddr_l2 addr
;
1993 struct socket
*sock
;
1995 struct rfcomm_session
*s
;
1999 err
= rfcomm_l2sock_create(&sock
);
2001 BT_ERR("Create socket failed %d", err
);
2006 bacpy(&addr
.l2_bdaddr
, ba
);
2007 addr
.l2_family
= AF_BLUETOOTH
;
2008 addr
.l2_psm
= __constant_cpu_to_le16(RFCOMM_PSM
);
2010 addr
.l2_bdaddr_type
= BDADDR_BREDR
;
2011 err
= kernel_bind(sock
, (struct sockaddr
*) &addr
, sizeof(addr
));
2013 BT_ERR("Bind failed %d", err
);
2017 /* Set L2CAP options */
2020 l2cap_pi(sk
)->chan
->imtu
= l2cap_mtu
;
2023 /* Start listening on the socket */
2024 err
= kernel_listen(sock
, 10);
2026 BT_ERR("Listen failed %d", err
);
2030 /* Add listening session */
2031 s
= rfcomm_session_add(sock
, BT_LISTEN
);
2043 static void rfcomm_kill_listener(void)
2045 struct rfcomm_session
*s
;
2046 struct list_head
*p
, *n
;
2050 list_for_each_safe(p
, n
, &session_list
) {
2051 s
= list_entry(p
, struct rfcomm_session
, list
);
2052 rfcomm_session_del(s
);
2056 static int rfcomm_run(void *unused
)
2060 set_user_nice(current
, -10);
2062 rfcomm_add_listener(BDADDR_ANY
);
2065 set_current_state(TASK_INTERRUPTIBLE
);
2067 if (kthread_should_stop())
2071 rfcomm_process_sessions();
2075 __set_current_state(TASK_RUNNING
);
2077 rfcomm_kill_listener();
2082 static void rfcomm_security_cfm(struct hci_conn
*conn
, u8 status
, u8 encrypt
)
2084 struct rfcomm_session
*s
;
2085 struct rfcomm_dlc
*d
;
2086 struct list_head
*p
, *n
;
2088 BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn
, status
, encrypt
);
2090 s
= rfcomm_session_get(&conn
->hdev
->bdaddr
, &conn
->dst
);
2094 list_for_each_safe(p
, n
, &s
->dlcs
) {
2095 d
= list_entry(p
, struct rfcomm_dlc
, list
);
2097 if (test_and_clear_bit(RFCOMM_SEC_PENDING
, &d
->flags
)) {
2098 rfcomm_dlc_clear_timer(d
);
2099 if (status
|| encrypt
== 0x00) {
2100 set_bit(RFCOMM_ENC_DROP
, &d
->flags
);
2105 if (d
->state
== BT_CONNECTED
&& !status
&& encrypt
== 0x00) {
2106 if (d
->sec_level
== BT_SECURITY_MEDIUM
) {
2107 set_bit(RFCOMM_SEC_PENDING
, &d
->flags
);
2108 rfcomm_dlc_set_timer(d
, RFCOMM_AUTH_TIMEOUT
);
2110 } else if (d
->sec_level
== BT_SECURITY_HIGH
||
2111 d
->sec_level
== BT_SECURITY_FIPS
) {
2112 set_bit(RFCOMM_ENC_DROP
, &d
->flags
);
2117 if (!test_and_clear_bit(RFCOMM_AUTH_PENDING
, &d
->flags
))
2120 if (!status
&& hci_conn_check_secure(conn
, d
->sec_level
))
2121 set_bit(RFCOMM_AUTH_ACCEPT
, &d
->flags
);
2123 set_bit(RFCOMM_AUTH_REJECT
, &d
->flags
);
2129 static struct hci_cb rfcomm_cb
= {
2131 .security_cfm
= rfcomm_security_cfm
2134 static int rfcomm_dlc_debugfs_show(struct seq_file
*f
, void *x
)
2136 struct rfcomm_session
*s
;
2140 list_for_each_entry(s
, &session_list
, list
) {
2141 struct l2cap_chan
*chan
= l2cap_pi(s
->sock
->sk
)->chan
;
2142 struct rfcomm_dlc
*d
;
2143 list_for_each_entry(d
, &s
->dlcs
, list
) {
2144 seq_printf(f
, "%pMR %pMR %ld %d %d %d %d\n",
2145 &chan
->src
, &chan
->dst
,
2146 d
->state
, d
->dlci
, d
->mtu
,
2147 d
->rx_credits
, d
->tx_credits
);
2156 static int rfcomm_dlc_debugfs_open(struct inode
*inode
, struct file
*file
)
2158 return single_open(file
, rfcomm_dlc_debugfs_show
, inode
->i_private
);
2161 static const struct file_operations rfcomm_dlc_debugfs_fops
= {
2162 .open
= rfcomm_dlc_debugfs_open
,
2164 .llseek
= seq_lseek
,
2165 .release
= single_release
,
2168 static struct dentry
*rfcomm_dlc_debugfs
;
2170 /* ---- Initialization ---- */
2171 static int __init
rfcomm_init(void)
2175 hci_register_cb(&rfcomm_cb
);
2177 rfcomm_thread
= kthread_run(rfcomm_run
, NULL
, "krfcommd");
2178 if (IS_ERR(rfcomm_thread
)) {
2179 err
= PTR_ERR(rfcomm_thread
);
2183 err
= rfcomm_init_ttys();
2187 err
= rfcomm_init_sockets();
2191 BT_INFO("RFCOMM ver %s", VERSION
);
2193 if (IS_ERR_OR_NULL(bt_debugfs
))
2196 rfcomm_dlc_debugfs
= debugfs_create_file("rfcomm_dlc", 0444,
2198 &rfcomm_dlc_debugfs_fops
);
2203 rfcomm_cleanup_ttys();
2206 kthread_stop(rfcomm_thread
);
2209 hci_unregister_cb(&rfcomm_cb
);
2214 static void __exit
rfcomm_exit(void)
2216 debugfs_remove(rfcomm_dlc_debugfs
);
2218 hci_unregister_cb(&rfcomm_cb
);
2220 kthread_stop(rfcomm_thread
);
2222 rfcomm_cleanup_ttys();
2224 rfcomm_cleanup_sockets();
2227 module_init(rfcomm_init
);
2228 module_exit(rfcomm_exit
);
2230 module_param(disable_cfc
, bool, 0644);
2231 MODULE_PARM_DESC(disable_cfc
, "Disable credit based flow control");
2233 module_param(channel_mtu
, int, 0644);
2234 MODULE_PARM_DESC(channel_mtu
, "Default MTU for the RFCOMM channel");
2236 module_param(l2cap_mtu
, uint
, 0644);
2237 MODULE_PARM_DESC(l2cap_mtu
, "Default MTU for the L2CAP connection");
2239 module_param(l2cap_ertm
, bool, 0644);
2240 MODULE_PARM_DESC(l2cap_ertm
, "Use L2CAP ERTM mode for connection");
2242 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
2243 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION
);
2244 MODULE_VERSION(VERSION
);
2245 MODULE_LICENSE("GPL");
2246 MODULE_ALIAS("bt-proto-3");