Merge branch 'sched/urgent'
[linux-2.6/x86.git] / net / bluetooth / rfcomm / core.c
blob5759bb7054f7f4aca8822271b7de4da8997af915
1 /*
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/errno.h>
30 #include <linux/kernel.h>
31 #include <linux/sched.h>
32 #include <linux/signal.h>
33 #include <linux/init.h>
34 #include <linux/wait.h>
35 #include <linux/device.h>
36 #include <linux/debugfs.h>
37 #include <linux/seq_file.h>
38 #include <linux/net.h>
39 #include <linux/mutex.h>
40 #include <linux/kthread.h>
41 #include <linux/slab.h>
43 #include <net/sock.h>
44 #include <linux/uaccess.h>
45 #include <asm/unaligned.h>
47 #include <net/bluetooth/bluetooth.h>
48 #include <net/bluetooth/hci_core.h>
49 #include <net/bluetooth/l2cap.h>
50 #include <net/bluetooth/rfcomm.h>
52 #define VERSION "1.11"
54 static int disable_cfc;
55 static int l2cap_ertm;
56 static int channel_mtu = -1;
57 static unsigned int l2cap_mtu = RFCOMM_MAX_L2CAP_MTU;
59 static struct task_struct *rfcomm_thread;
61 static DEFINE_MUTEX(rfcomm_mutex);
62 #define rfcomm_lock() mutex_lock(&rfcomm_mutex)
63 #define rfcomm_unlock() mutex_unlock(&rfcomm_mutex)
65 static unsigned long rfcomm_event;
67 static LIST_HEAD(session_list);
69 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
70 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
71 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
72 static int rfcomm_queue_disc(struct rfcomm_dlc *d);
73 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
74 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
75 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
76 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
77 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
78 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
80 static void rfcomm_process_connect(struct rfcomm_session *s);
82 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
83 bdaddr_t *dst,
84 u8 sec_level,
85 int *err);
86 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
87 static void rfcomm_session_del(struct rfcomm_session *s);
89 /* ---- RFCOMM frame parsing macros ---- */
90 #define __get_dlci(b) ((b & 0xfc) >> 2)
91 #define __get_channel(b) ((b & 0xf8) >> 3)
92 #define __get_dir(b) ((b & 0x04) >> 2)
93 #define __get_type(b) ((b & 0xef))
95 #define __test_ea(b) ((b & 0x01))
96 #define __test_cr(b) ((b & 0x02))
97 #define __test_pf(b) ((b & 0x10))
99 #define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
100 #define __ctrl(type, pf) (((type & 0xef) | (pf << 4)))
101 #define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir)
102 #define __srv_channel(dlci) (dlci >> 1)
103 #define __dir(dlci) (dlci & 0x01)
105 #define __len8(len) (((len) << 1) | 1)
106 #define __len16(len) ((len) << 1)
108 /* MCC macros */
109 #define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01))
110 #define __get_mcc_type(b) ((b & 0xfc) >> 2)
111 #define __get_mcc_len(b) ((b & 0xfe) >> 1)
113 /* RPN macros */
114 #define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x7) << 3))
115 #define __get_rpn_data_bits(line) ((line) & 0x3)
116 #define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
117 #define __get_rpn_parity(line) (((line) >> 3) & 0x7)
119 static inline void rfcomm_schedule(void)
121 if (!rfcomm_thread)
122 return;
123 set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
124 wake_up_process(rfcomm_thread);
127 static inline void rfcomm_session_put(struct rfcomm_session *s)
129 if (atomic_dec_and_test(&s->refcnt))
130 rfcomm_session_del(s);
133 /* ---- RFCOMM FCS computation ---- */
135 /* reversed, 8-bit, poly=0x07 */
136 static unsigned char rfcomm_crc_table[256] = {
137 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
138 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
139 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
140 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
142 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
143 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
144 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
145 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
147 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
148 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
149 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
150 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
152 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
153 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
154 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
155 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
157 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
158 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
159 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
160 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
162 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
163 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
164 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
165 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
167 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
168 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
169 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
170 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
172 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
173 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
174 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
175 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
178 /* CRC on 2 bytes */
179 #define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
181 /* FCS on 2 bytes */
182 static inline u8 __fcs(u8 *data)
184 return 0xff - __crc(data);
187 /* FCS on 3 bytes */
188 static inline u8 __fcs2(u8 *data)
190 return 0xff - rfcomm_crc_table[__crc(data) ^ data[2]];
193 /* Check FCS */
194 static inline int __check_fcs(u8 *data, int type, u8 fcs)
196 u8 f = __crc(data);
198 if (type != RFCOMM_UIH)
199 f = rfcomm_crc_table[f ^ data[2]];
201 return rfcomm_crc_table[f ^ fcs] != 0xcf;
204 /* ---- L2CAP callbacks ---- */
205 static void rfcomm_l2state_change(struct sock *sk)
207 BT_DBG("%p state %d", sk, sk->sk_state);
208 rfcomm_schedule();
211 static void rfcomm_l2data_ready(struct sock *sk, int bytes)
213 BT_DBG("%p bytes %d", sk, bytes);
214 rfcomm_schedule();
217 static int rfcomm_l2sock_create(struct socket **sock)
219 int err;
221 BT_DBG("");
223 err = sock_create_kern(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
224 if (!err) {
225 struct sock *sk = (*sock)->sk;
226 sk->sk_data_ready = rfcomm_l2data_ready;
227 sk->sk_state_change = rfcomm_l2state_change;
229 return err;
232 static inline int rfcomm_check_security(struct rfcomm_dlc *d)
234 struct sock *sk = d->session->sock->sk;
235 struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
237 __u8 auth_type;
239 switch (d->sec_level) {
240 case BT_SECURITY_HIGH:
241 auth_type = HCI_AT_GENERAL_BONDING_MITM;
242 break;
243 case BT_SECURITY_MEDIUM:
244 auth_type = HCI_AT_GENERAL_BONDING;
245 break;
246 default:
247 auth_type = HCI_AT_NO_BONDING;
248 break;
251 return hci_conn_security(conn->hcon, d->sec_level, auth_type);
254 static void rfcomm_session_timeout(unsigned long arg)
256 struct rfcomm_session *s = (void *) arg;
258 BT_DBG("session %p state %ld", s, s->state);
260 set_bit(RFCOMM_TIMED_OUT, &s->flags);
261 rfcomm_schedule();
264 static void rfcomm_session_set_timer(struct rfcomm_session *s, long timeout)
266 BT_DBG("session %p state %ld timeout %ld", s, s->state, timeout);
268 if (!mod_timer(&s->timer, jiffies + timeout))
269 rfcomm_session_hold(s);
272 static void rfcomm_session_clear_timer(struct rfcomm_session *s)
274 BT_DBG("session %p state %ld", s, s->state);
276 if (timer_pending(&s->timer) && del_timer(&s->timer))
277 rfcomm_session_put(s);
280 /* ---- RFCOMM DLCs ---- */
281 static void rfcomm_dlc_timeout(unsigned long arg)
283 struct rfcomm_dlc *d = (void *) arg;
285 BT_DBG("dlc %p state %ld", d, d->state);
287 set_bit(RFCOMM_TIMED_OUT, &d->flags);
288 rfcomm_dlc_put(d);
289 rfcomm_schedule();
292 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
294 BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
296 if (!mod_timer(&d->timer, jiffies + timeout))
297 rfcomm_dlc_hold(d);
300 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
302 BT_DBG("dlc %p state %ld", d, d->state);
304 if (timer_pending(&d->timer) && del_timer(&d->timer))
305 rfcomm_dlc_put(d);
308 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
310 BT_DBG("%p", d);
312 d->state = BT_OPEN;
313 d->flags = 0;
314 d->mscex = 0;
315 d->sec_level = BT_SECURITY_LOW;
316 d->mtu = RFCOMM_DEFAULT_MTU;
317 d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
319 d->cfc = RFCOMM_CFC_DISABLED;
320 d->rx_credits = RFCOMM_DEFAULT_CREDITS;
323 struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio)
325 struct rfcomm_dlc *d = kzalloc(sizeof(*d), prio);
327 if (!d)
328 return NULL;
330 setup_timer(&d->timer, rfcomm_dlc_timeout, (unsigned long)d);
332 skb_queue_head_init(&d->tx_queue);
333 spin_lock_init(&d->lock);
334 atomic_set(&d->refcnt, 1);
336 rfcomm_dlc_clear_state(d);
338 BT_DBG("%p", d);
340 return d;
343 void rfcomm_dlc_free(struct rfcomm_dlc *d)
345 BT_DBG("%p", d);
347 skb_queue_purge(&d->tx_queue);
348 kfree(d);
351 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
353 BT_DBG("dlc %p session %p", d, s);
355 rfcomm_session_hold(s);
357 rfcomm_session_clear_timer(s);
358 rfcomm_dlc_hold(d);
359 list_add(&d->list, &s->dlcs);
360 d->session = s;
363 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
365 struct rfcomm_session *s = d->session;
367 BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
369 list_del(&d->list);
370 d->session = NULL;
371 rfcomm_dlc_put(d);
373 if (list_empty(&s->dlcs))
374 rfcomm_session_set_timer(s, RFCOMM_IDLE_TIMEOUT);
376 rfcomm_session_put(s);
379 static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
381 struct rfcomm_dlc *d;
382 struct list_head *p;
384 list_for_each(p, &s->dlcs) {
385 d = list_entry(p, struct rfcomm_dlc, list);
386 if (d->dlci == dlci)
387 return d;
389 return NULL;
392 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
394 struct rfcomm_session *s;
395 int err = 0;
396 u8 dlci;
398 BT_DBG("dlc %p state %ld %s %s channel %d",
399 d, d->state, batostr(src), batostr(dst), channel);
401 if (channel < 1 || channel > 30)
402 return -EINVAL;
404 if (d->state != BT_OPEN && d->state != BT_CLOSED)
405 return 0;
407 s = rfcomm_session_get(src, dst);
408 if (!s) {
409 s = rfcomm_session_create(src, dst, d->sec_level, &err);
410 if (!s)
411 return err;
414 dlci = __dlci(!s->initiator, channel);
416 /* Check if DLCI already exists */
417 if (rfcomm_dlc_get(s, dlci))
418 return -EBUSY;
420 rfcomm_dlc_clear_state(d);
422 d->dlci = dlci;
423 d->addr = __addr(s->initiator, dlci);
424 d->priority = 7;
426 d->state = BT_CONFIG;
427 rfcomm_dlc_link(s, d);
429 d->out = 1;
431 d->mtu = s->mtu;
432 d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
434 if (s->state == BT_CONNECTED) {
435 if (rfcomm_check_security(d))
436 rfcomm_send_pn(s, 1, d);
437 else
438 set_bit(RFCOMM_AUTH_PENDING, &d->flags);
441 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
443 return 0;
446 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
448 int r;
450 rfcomm_lock();
452 r = __rfcomm_dlc_open(d, src, dst, channel);
454 rfcomm_unlock();
455 return r;
458 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
460 struct rfcomm_session *s = d->session;
461 if (!s)
462 return 0;
464 BT_DBG("dlc %p state %ld dlci %d err %d session %p",
465 d, d->state, d->dlci, err, s);
467 switch (d->state) {
468 case BT_CONNECT:
469 case BT_CONFIG:
470 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
471 set_bit(RFCOMM_AUTH_REJECT, &d->flags);
472 rfcomm_schedule();
473 break;
475 /* Fall through */
477 case BT_CONNECTED:
478 d->state = BT_DISCONN;
479 if (skb_queue_empty(&d->tx_queue)) {
480 rfcomm_send_disc(s, d->dlci);
481 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
482 } else {
483 rfcomm_queue_disc(d);
484 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
486 break;
488 case BT_OPEN:
489 case BT_CONNECT2:
490 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
491 set_bit(RFCOMM_AUTH_REJECT, &d->flags);
492 rfcomm_schedule();
493 break;
495 /* Fall through */
497 default:
498 rfcomm_dlc_clear_timer(d);
500 rfcomm_dlc_lock(d);
501 d->state = BT_CLOSED;
502 d->state_change(d, err);
503 rfcomm_dlc_unlock(d);
505 skb_queue_purge(&d->tx_queue);
506 rfcomm_dlc_unlink(d);
509 return 0;
512 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
514 int r;
516 rfcomm_lock();
518 r = __rfcomm_dlc_close(d, err);
520 rfcomm_unlock();
521 return r;
524 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
526 int len = skb->len;
528 if (d->state != BT_CONNECTED)
529 return -ENOTCONN;
531 BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
533 if (len > d->mtu)
534 return -EINVAL;
536 rfcomm_make_uih(skb, d->addr);
537 skb_queue_tail(&d->tx_queue, skb);
539 if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
540 rfcomm_schedule();
541 return len;
544 void __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
546 BT_DBG("dlc %p state %ld", d, d->state);
548 if (!d->cfc) {
549 d->v24_sig |= RFCOMM_V24_FC;
550 set_bit(RFCOMM_MSC_PENDING, &d->flags);
552 rfcomm_schedule();
555 void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
557 BT_DBG("dlc %p state %ld", d, d->state);
559 if (!d->cfc) {
560 d->v24_sig &= ~RFCOMM_V24_FC;
561 set_bit(RFCOMM_MSC_PENDING, &d->flags);
563 rfcomm_schedule();
567 Set/get modem status functions use _local_ status i.e. what we report
568 to the other side.
569 Remote status is provided by dlc->modem_status() callback.
571 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
573 BT_DBG("dlc %p state %ld v24_sig 0x%x",
574 d, d->state, v24_sig);
576 if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
577 v24_sig |= RFCOMM_V24_FC;
578 else
579 v24_sig &= ~RFCOMM_V24_FC;
581 d->v24_sig = v24_sig;
583 if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
584 rfcomm_schedule();
586 return 0;
589 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
591 BT_DBG("dlc %p state %ld v24_sig 0x%x",
592 d, d->state, d->v24_sig);
594 *v24_sig = d->v24_sig;
595 return 0;
598 /* ---- RFCOMM sessions ---- */
599 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
601 struct rfcomm_session *s = kzalloc(sizeof(*s), GFP_KERNEL);
603 if (!s)
604 return NULL;
606 BT_DBG("session %p sock %p", s, sock);
608 setup_timer(&s->timer, rfcomm_session_timeout, (unsigned long) s);
610 INIT_LIST_HEAD(&s->dlcs);
611 s->state = state;
612 s->sock = sock;
614 s->mtu = RFCOMM_DEFAULT_MTU;
615 s->cfc = disable_cfc ? RFCOMM_CFC_DISABLED : RFCOMM_CFC_UNKNOWN;
617 /* Do not increment module usage count for listening sessions.
618 * Otherwise we won't be able to unload the module. */
619 if (state != BT_LISTEN)
620 if (!try_module_get(THIS_MODULE)) {
621 kfree(s);
622 return NULL;
625 list_add(&s->list, &session_list);
627 return s;
630 static void rfcomm_session_del(struct rfcomm_session *s)
632 int state = s->state;
634 BT_DBG("session %p state %ld", s, s->state);
636 list_del(&s->list);
638 if (state == BT_CONNECTED)
639 rfcomm_send_disc(s, 0);
641 rfcomm_session_clear_timer(s);
642 sock_release(s->sock);
643 kfree(s);
645 if (state != BT_LISTEN)
646 module_put(THIS_MODULE);
649 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
651 struct rfcomm_session *s;
652 struct list_head *p, *n;
653 struct bt_sock *sk;
654 list_for_each_safe(p, n, &session_list) {
655 s = list_entry(p, struct rfcomm_session, list);
656 sk = bt_sk(s->sock->sk);
658 if ((!bacmp(src, BDADDR_ANY) || !bacmp(&sk->src, src)) &&
659 !bacmp(&sk->dst, dst))
660 return s;
662 return NULL;
665 static void rfcomm_session_close(struct rfcomm_session *s, int err)
667 struct rfcomm_dlc *d;
668 struct list_head *p, *n;
670 BT_DBG("session %p state %ld err %d", s, s->state, err);
672 rfcomm_session_hold(s);
674 s->state = BT_CLOSED;
676 /* Close all dlcs */
677 list_for_each_safe(p, n, &s->dlcs) {
678 d = list_entry(p, struct rfcomm_dlc, list);
679 d->state = BT_CLOSED;
680 __rfcomm_dlc_close(d, err);
683 rfcomm_session_clear_timer(s);
684 rfcomm_session_put(s);
687 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
688 bdaddr_t *dst,
689 u8 sec_level,
690 int *err)
692 struct rfcomm_session *s = NULL;
693 struct sockaddr_l2 addr;
694 struct socket *sock;
695 struct sock *sk;
697 BT_DBG("%s %s", batostr(src), batostr(dst));
699 *err = rfcomm_l2sock_create(&sock);
700 if (*err < 0)
701 return NULL;
703 bacpy(&addr.l2_bdaddr, src);
704 addr.l2_family = AF_BLUETOOTH;
705 addr.l2_psm = 0;
706 addr.l2_cid = 0;
707 *err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
708 if (*err < 0)
709 goto failed;
711 /* Set L2CAP options */
712 sk = sock->sk;
713 lock_sock(sk);
714 l2cap_pi(sk)->chan->imtu = l2cap_mtu;
715 l2cap_pi(sk)->chan->sec_level = sec_level;
716 if (l2cap_ertm)
717 l2cap_pi(sk)->chan->mode = L2CAP_MODE_ERTM;
718 release_sock(sk);
720 s = rfcomm_session_add(sock, BT_BOUND);
721 if (!s) {
722 *err = -ENOMEM;
723 goto failed;
726 s->initiator = 1;
728 bacpy(&addr.l2_bdaddr, dst);
729 addr.l2_family = AF_BLUETOOTH;
730 addr.l2_psm = cpu_to_le16(RFCOMM_PSM);
731 addr.l2_cid = 0;
732 *err = kernel_connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
733 if (*err == 0 || *err == -EINPROGRESS)
734 return s;
736 rfcomm_session_del(s);
737 return NULL;
739 failed:
740 sock_release(sock);
741 return NULL;
744 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
746 struct sock *sk = s->sock->sk;
747 if (src)
748 bacpy(src, &bt_sk(sk)->src);
749 if (dst)
750 bacpy(dst, &bt_sk(sk)->dst);
753 /* ---- RFCOMM frame sending ---- */
754 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
756 struct socket *sock = s->sock;
757 struct kvec iv = { data, len };
758 struct msghdr msg;
760 BT_DBG("session %p len %d", s, len);
762 memset(&msg, 0, sizeof(msg));
764 return kernel_sendmsg(sock, &msg, &iv, 1, len);
767 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
769 struct rfcomm_cmd cmd;
771 BT_DBG("%p dlci %d", s, dlci);
773 cmd.addr = __addr(s->initiator, dlci);
774 cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
775 cmd.len = __len8(0);
776 cmd.fcs = __fcs2((u8 *) &cmd);
778 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
781 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
783 struct rfcomm_cmd cmd;
785 BT_DBG("%p dlci %d", s, dlci);
787 cmd.addr = __addr(!s->initiator, dlci);
788 cmd.ctrl = __ctrl(RFCOMM_UA, 1);
789 cmd.len = __len8(0);
790 cmd.fcs = __fcs2((u8 *) &cmd);
792 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
795 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
797 struct rfcomm_cmd cmd;
799 BT_DBG("%p dlci %d", s, dlci);
801 cmd.addr = __addr(s->initiator, dlci);
802 cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
803 cmd.len = __len8(0);
804 cmd.fcs = __fcs2((u8 *) &cmd);
806 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
809 static int rfcomm_queue_disc(struct rfcomm_dlc *d)
811 struct rfcomm_cmd *cmd;
812 struct sk_buff *skb;
814 BT_DBG("dlc %p dlci %d", d, d->dlci);
816 skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
817 if (!skb)
818 return -ENOMEM;
820 cmd = (void *) __skb_put(skb, sizeof(*cmd));
821 cmd->addr = d->addr;
822 cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
823 cmd->len = __len8(0);
824 cmd->fcs = __fcs2((u8 *) cmd);
826 skb_queue_tail(&d->tx_queue, skb);
827 rfcomm_schedule();
828 return 0;
831 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
833 struct rfcomm_cmd cmd;
835 BT_DBG("%p dlci %d", s, dlci);
837 cmd.addr = __addr(!s->initiator, dlci);
838 cmd.ctrl = __ctrl(RFCOMM_DM, 1);
839 cmd.len = __len8(0);
840 cmd.fcs = __fcs2((u8 *) &cmd);
842 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
845 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
847 struct rfcomm_hdr *hdr;
848 struct rfcomm_mcc *mcc;
849 u8 buf[16], *ptr = buf;
851 BT_DBG("%p cr %d type %d", s, cr, type);
853 hdr = (void *) ptr; ptr += sizeof(*hdr);
854 hdr->addr = __addr(s->initiator, 0);
855 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
856 hdr->len = __len8(sizeof(*mcc) + 1);
858 mcc = (void *) ptr; ptr += sizeof(*mcc);
859 mcc->type = __mcc_type(cr, RFCOMM_NSC);
860 mcc->len = __len8(1);
862 /* Type that we didn't like */
863 *ptr = __mcc_type(cr, type); ptr++;
865 *ptr = __fcs(buf); ptr++;
867 return rfcomm_send_frame(s, buf, ptr - buf);
870 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
872 struct rfcomm_hdr *hdr;
873 struct rfcomm_mcc *mcc;
874 struct rfcomm_pn *pn;
875 u8 buf[16], *ptr = buf;
877 BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
879 hdr = (void *) ptr; ptr += sizeof(*hdr);
880 hdr->addr = __addr(s->initiator, 0);
881 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
882 hdr->len = __len8(sizeof(*mcc) + sizeof(*pn));
884 mcc = (void *) ptr; ptr += sizeof(*mcc);
885 mcc->type = __mcc_type(cr, RFCOMM_PN);
886 mcc->len = __len8(sizeof(*pn));
888 pn = (void *) ptr; ptr += sizeof(*pn);
889 pn->dlci = d->dlci;
890 pn->priority = d->priority;
891 pn->ack_timer = 0;
892 pn->max_retrans = 0;
894 if (s->cfc) {
895 pn->flow_ctrl = cr ? 0xf0 : 0xe0;
896 pn->credits = RFCOMM_DEFAULT_CREDITS;
897 } else {
898 pn->flow_ctrl = 0;
899 pn->credits = 0;
902 if (cr && channel_mtu >= 0)
903 pn->mtu = cpu_to_le16(channel_mtu);
904 else
905 pn->mtu = cpu_to_le16(d->mtu);
907 *ptr = __fcs(buf); ptr++;
909 return rfcomm_send_frame(s, buf, ptr - buf);
912 int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
913 u8 bit_rate, u8 data_bits, u8 stop_bits,
914 u8 parity, u8 flow_ctrl_settings,
915 u8 xon_char, u8 xoff_char, u16 param_mask)
917 struct rfcomm_hdr *hdr;
918 struct rfcomm_mcc *mcc;
919 struct rfcomm_rpn *rpn;
920 u8 buf[16], *ptr = buf;
922 BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
923 " flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
924 s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
925 flow_ctrl_settings, xon_char, xoff_char, param_mask);
927 hdr = (void *) ptr; ptr += sizeof(*hdr);
928 hdr->addr = __addr(s->initiator, 0);
929 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
930 hdr->len = __len8(sizeof(*mcc) + sizeof(*rpn));
932 mcc = (void *) ptr; ptr += sizeof(*mcc);
933 mcc->type = __mcc_type(cr, RFCOMM_RPN);
934 mcc->len = __len8(sizeof(*rpn));
936 rpn = (void *) ptr; ptr += sizeof(*rpn);
937 rpn->dlci = __addr(1, dlci);
938 rpn->bit_rate = bit_rate;
939 rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
940 rpn->flow_ctrl = flow_ctrl_settings;
941 rpn->xon_char = xon_char;
942 rpn->xoff_char = xoff_char;
943 rpn->param_mask = cpu_to_le16(param_mask);
945 *ptr = __fcs(buf); ptr++;
947 return rfcomm_send_frame(s, buf, ptr - buf);
950 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
952 struct rfcomm_hdr *hdr;
953 struct rfcomm_mcc *mcc;
954 struct rfcomm_rls *rls;
955 u8 buf[16], *ptr = buf;
957 BT_DBG("%p cr %d status 0x%x", s, cr, status);
959 hdr = (void *) ptr; ptr += sizeof(*hdr);
960 hdr->addr = __addr(s->initiator, 0);
961 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
962 hdr->len = __len8(sizeof(*mcc) + sizeof(*rls));
964 mcc = (void *) ptr; ptr += sizeof(*mcc);
965 mcc->type = __mcc_type(cr, RFCOMM_RLS);
966 mcc->len = __len8(sizeof(*rls));
968 rls = (void *) ptr; ptr += sizeof(*rls);
969 rls->dlci = __addr(1, dlci);
970 rls->status = status;
972 *ptr = __fcs(buf); ptr++;
974 return rfcomm_send_frame(s, buf, ptr - buf);
977 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
979 struct rfcomm_hdr *hdr;
980 struct rfcomm_mcc *mcc;
981 struct rfcomm_msc *msc;
982 u8 buf[16], *ptr = buf;
984 BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
986 hdr = (void *) ptr; ptr += sizeof(*hdr);
987 hdr->addr = __addr(s->initiator, 0);
988 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
989 hdr->len = __len8(sizeof(*mcc) + sizeof(*msc));
991 mcc = (void *) ptr; ptr += sizeof(*mcc);
992 mcc->type = __mcc_type(cr, RFCOMM_MSC);
993 mcc->len = __len8(sizeof(*msc));
995 msc = (void *) ptr; ptr += sizeof(*msc);
996 msc->dlci = __addr(1, dlci);
997 msc->v24_sig = v24_sig | 0x01;
999 *ptr = __fcs(buf); ptr++;
1001 return rfcomm_send_frame(s, buf, ptr - buf);
1004 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
1006 struct rfcomm_hdr *hdr;
1007 struct rfcomm_mcc *mcc;
1008 u8 buf[16], *ptr = buf;
1010 BT_DBG("%p cr %d", s, cr);
1012 hdr = (void *) ptr; ptr += sizeof(*hdr);
1013 hdr->addr = __addr(s->initiator, 0);
1014 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1015 hdr->len = __len8(sizeof(*mcc));
1017 mcc = (void *) ptr; ptr += sizeof(*mcc);
1018 mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
1019 mcc->len = __len8(0);
1021 *ptr = __fcs(buf); ptr++;
1023 return rfcomm_send_frame(s, buf, ptr - buf);
1026 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
1028 struct rfcomm_hdr *hdr;
1029 struct rfcomm_mcc *mcc;
1030 u8 buf[16], *ptr = buf;
1032 BT_DBG("%p cr %d", s, cr);
1034 hdr = (void *) ptr; ptr += sizeof(*hdr);
1035 hdr->addr = __addr(s->initiator, 0);
1036 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1037 hdr->len = __len8(sizeof(*mcc));
1039 mcc = (void *) ptr; ptr += sizeof(*mcc);
1040 mcc->type = __mcc_type(cr, RFCOMM_FCON);
1041 mcc->len = __len8(0);
1043 *ptr = __fcs(buf); ptr++;
1045 return rfcomm_send_frame(s, buf, ptr - buf);
1048 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
1050 struct socket *sock = s->sock;
1051 struct kvec iv[3];
1052 struct msghdr msg;
1053 unsigned char hdr[5], crc[1];
1055 if (len > 125)
1056 return -EINVAL;
1058 BT_DBG("%p cr %d", s, cr);
1060 hdr[0] = __addr(s->initiator, 0);
1061 hdr[1] = __ctrl(RFCOMM_UIH, 0);
1062 hdr[2] = 0x01 | ((len + 2) << 1);
1063 hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
1064 hdr[4] = 0x01 | (len << 1);
1066 crc[0] = __fcs(hdr);
1068 iv[0].iov_base = hdr;
1069 iv[0].iov_len = 5;
1070 iv[1].iov_base = pattern;
1071 iv[1].iov_len = len;
1072 iv[2].iov_base = crc;
1073 iv[2].iov_len = 1;
1075 memset(&msg, 0, sizeof(msg));
1077 return kernel_sendmsg(sock, &msg, iv, 3, 6 + len);
1080 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
1082 struct rfcomm_hdr *hdr;
1083 u8 buf[16], *ptr = buf;
1085 BT_DBG("%p addr %d credits %d", s, addr, credits);
1087 hdr = (void *) ptr; ptr += sizeof(*hdr);
1088 hdr->addr = addr;
1089 hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
1090 hdr->len = __len8(0);
1092 *ptr = credits; ptr++;
1094 *ptr = __fcs(buf); ptr++;
1096 return rfcomm_send_frame(s, buf, ptr - buf);
1099 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
1101 struct rfcomm_hdr *hdr;
1102 int len = skb->len;
1103 u8 *crc;
1105 if (len > 127) {
1106 hdr = (void *) skb_push(skb, 4);
1107 put_unaligned(cpu_to_le16(__len16(len)), (__le16 *) &hdr->len);
1108 } else {
1109 hdr = (void *) skb_push(skb, 3);
1110 hdr->len = __len8(len);
1112 hdr->addr = addr;
1113 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1115 crc = skb_put(skb, 1);
1116 *crc = __fcs((void *) hdr);
1119 /* ---- RFCOMM frame reception ---- */
1120 static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
1122 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1124 if (dlci) {
1125 /* Data channel */
1126 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1127 if (!d) {
1128 rfcomm_send_dm(s, dlci);
1129 return 0;
1132 switch (d->state) {
1133 case BT_CONNECT:
1134 rfcomm_dlc_clear_timer(d);
1136 rfcomm_dlc_lock(d);
1137 d->state = BT_CONNECTED;
1138 d->state_change(d, 0);
1139 rfcomm_dlc_unlock(d);
1141 rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1142 break;
1144 case BT_DISCONN:
1145 d->state = BT_CLOSED;
1146 __rfcomm_dlc_close(d, 0);
1148 if (list_empty(&s->dlcs)) {
1149 s->state = BT_DISCONN;
1150 rfcomm_send_disc(s, 0);
1153 break;
1155 } else {
1156 /* Control channel */
1157 switch (s->state) {
1158 case BT_CONNECT:
1159 s->state = BT_CONNECTED;
1160 rfcomm_process_connect(s);
1161 break;
1163 case BT_DISCONN:
1164 /* When socket is closed and we are not RFCOMM
1165 * initiator rfcomm_process_rx already calls
1166 * rfcomm_session_put() */
1167 if (s->sock->sk->sk_state != BT_CLOSED)
1168 if (list_empty(&s->dlcs))
1169 rfcomm_session_put(s);
1170 break;
1173 return 0;
1176 static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1178 int err = 0;
1180 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1182 if (dlci) {
1183 /* Data DLC */
1184 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1185 if (d) {
1186 if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1187 err = ECONNREFUSED;
1188 else
1189 err = ECONNRESET;
1191 d->state = BT_CLOSED;
1192 __rfcomm_dlc_close(d, err);
1194 } else {
1195 if (s->state == BT_CONNECT)
1196 err = ECONNREFUSED;
1197 else
1198 err = ECONNRESET;
1200 s->state = BT_CLOSED;
1201 rfcomm_session_close(s, err);
1203 return 0;
1206 static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
1208 int err = 0;
1210 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1212 if (dlci) {
1213 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1214 if (d) {
1215 rfcomm_send_ua(s, dlci);
1217 if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1218 err = ECONNREFUSED;
1219 else
1220 err = ECONNRESET;
1222 d->state = BT_CLOSED;
1223 __rfcomm_dlc_close(d, err);
1224 } else
1225 rfcomm_send_dm(s, dlci);
1227 } else {
1228 rfcomm_send_ua(s, 0);
1230 if (s->state == BT_CONNECT)
1231 err = ECONNREFUSED;
1232 else
1233 err = ECONNRESET;
1235 s->state = BT_CLOSED;
1236 rfcomm_session_close(s, err);
1239 return 0;
1242 void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1244 struct sock *sk = d->session->sock->sk;
1245 struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1247 BT_DBG("dlc %p", d);
1249 rfcomm_send_ua(d->session, d->dlci);
1251 rfcomm_dlc_clear_timer(d);
1253 rfcomm_dlc_lock(d);
1254 d->state = BT_CONNECTED;
1255 d->state_change(d, 0);
1256 rfcomm_dlc_unlock(d);
1258 if (d->role_switch)
1259 hci_conn_switch_role(conn->hcon, 0x00);
1261 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1264 static void rfcomm_check_accept(struct rfcomm_dlc *d)
1266 if (rfcomm_check_security(d)) {
1267 if (d->defer_setup) {
1268 set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1269 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1271 rfcomm_dlc_lock(d);
1272 d->state = BT_CONNECT2;
1273 d->state_change(d, 0);
1274 rfcomm_dlc_unlock(d);
1275 } else
1276 rfcomm_dlc_accept(d);
1277 } else {
1278 set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1279 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1283 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1285 struct rfcomm_dlc *d;
1286 u8 channel;
1288 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1290 if (!dlci) {
1291 rfcomm_send_ua(s, 0);
1293 if (s->state == BT_OPEN) {
1294 s->state = BT_CONNECTED;
1295 rfcomm_process_connect(s);
1297 return 0;
1300 /* Check if DLC exists */
1301 d = rfcomm_dlc_get(s, dlci);
1302 if (d) {
1303 if (d->state == BT_OPEN) {
1304 /* DLC was previously opened by PN request */
1305 rfcomm_check_accept(d);
1307 return 0;
1310 /* Notify socket layer about incoming connection */
1311 channel = __srv_channel(dlci);
1312 if (rfcomm_connect_ind(s, channel, &d)) {
1313 d->dlci = dlci;
1314 d->addr = __addr(s->initiator, dlci);
1315 rfcomm_dlc_link(s, d);
1317 rfcomm_check_accept(d);
1318 } else {
1319 rfcomm_send_dm(s, dlci);
1322 return 0;
1325 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1327 struct rfcomm_session *s = d->session;
1329 BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1330 d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1332 if ((pn->flow_ctrl == 0xf0 && s->cfc != RFCOMM_CFC_DISABLED) ||
1333 pn->flow_ctrl == 0xe0) {
1334 d->cfc = RFCOMM_CFC_ENABLED;
1335 d->tx_credits = pn->credits;
1336 } else {
1337 d->cfc = RFCOMM_CFC_DISABLED;
1338 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1341 if (s->cfc == RFCOMM_CFC_UNKNOWN)
1342 s->cfc = d->cfc;
1344 d->priority = pn->priority;
1346 d->mtu = __le16_to_cpu(pn->mtu);
1348 if (cr && d->mtu > s->mtu)
1349 d->mtu = s->mtu;
1351 return 0;
1354 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1356 struct rfcomm_pn *pn = (void *) skb->data;
1357 struct rfcomm_dlc *d;
1358 u8 dlci = pn->dlci;
1360 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1362 if (!dlci)
1363 return 0;
1365 d = rfcomm_dlc_get(s, dlci);
1366 if (d) {
1367 if (cr) {
1368 /* PN request */
1369 rfcomm_apply_pn(d, cr, pn);
1370 rfcomm_send_pn(s, 0, d);
1371 } else {
1372 /* PN response */
1373 switch (d->state) {
1374 case BT_CONFIG:
1375 rfcomm_apply_pn(d, cr, pn);
1377 d->state = BT_CONNECT;
1378 rfcomm_send_sabm(s, d->dlci);
1379 break;
1382 } else {
1383 u8 channel = __srv_channel(dlci);
1385 if (!cr)
1386 return 0;
1388 /* PN request for non existing DLC.
1389 * Assume incoming connection. */
1390 if (rfcomm_connect_ind(s, channel, &d)) {
1391 d->dlci = dlci;
1392 d->addr = __addr(s->initiator, dlci);
1393 rfcomm_dlc_link(s, d);
1395 rfcomm_apply_pn(d, cr, pn);
1397 d->state = BT_OPEN;
1398 rfcomm_send_pn(s, 0, d);
1399 } else {
1400 rfcomm_send_dm(s, dlci);
1403 return 0;
1406 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1408 struct rfcomm_rpn *rpn = (void *) skb->data;
1409 u8 dlci = __get_dlci(rpn->dlci);
1411 u8 bit_rate = 0;
1412 u8 data_bits = 0;
1413 u8 stop_bits = 0;
1414 u8 parity = 0;
1415 u8 flow_ctrl = 0;
1416 u8 xon_char = 0;
1417 u8 xoff_char = 0;
1418 u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1420 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",
1421 dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1422 rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1424 if (!cr)
1425 return 0;
1427 if (len == 1) {
1428 /* This is a request, return default (according to ETSI TS 07.10) settings */
1429 bit_rate = RFCOMM_RPN_BR_9600;
1430 data_bits = RFCOMM_RPN_DATA_8;
1431 stop_bits = RFCOMM_RPN_STOP_1;
1432 parity = RFCOMM_RPN_PARITY_NONE;
1433 flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1434 xon_char = RFCOMM_RPN_XON_CHAR;
1435 xoff_char = RFCOMM_RPN_XOFF_CHAR;
1436 goto rpn_out;
1439 /* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1440 * no parity, no flow control lines, normal XON/XOFF chars */
1442 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_BITRATE)) {
1443 bit_rate = rpn->bit_rate;
1444 if (bit_rate > RFCOMM_RPN_BR_230400) {
1445 BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1446 bit_rate = RFCOMM_RPN_BR_9600;
1447 rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1451 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_DATA)) {
1452 data_bits = __get_rpn_data_bits(rpn->line_settings);
1453 if (data_bits != RFCOMM_RPN_DATA_8) {
1454 BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1455 data_bits = RFCOMM_RPN_DATA_8;
1456 rpn_mask ^= RFCOMM_RPN_PM_DATA;
1460 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_STOP)) {
1461 stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1462 if (stop_bits != RFCOMM_RPN_STOP_1) {
1463 BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1464 stop_bits = RFCOMM_RPN_STOP_1;
1465 rpn_mask ^= RFCOMM_RPN_PM_STOP;
1469 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_PARITY)) {
1470 parity = __get_rpn_parity(rpn->line_settings);
1471 if (parity != RFCOMM_RPN_PARITY_NONE) {
1472 BT_DBG("RPN parity mismatch 0x%x", parity);
1473 parity = RFCOMM_RPN_PARITY_NONE;
1474 rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1478 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_FLOW)) {
1479 flow_ctrl = rpn->flow_ctrl;
1480 if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1481 BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1482 flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1483 rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1487 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XON)) {
1488 xon_char = rpn->xon_char;
1489 if (xon_char != RFCOMM_RPN_XON_CHAR) {
1490 BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1491 xon_char = RFCOMM_RPN_XON_CHAR;
1492 rpn_mask ^= RFCOMM_RPN_PM_XON;
1496 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XOFF)) {
1497 xoff_char = rpn->xoff_char;
1498 if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1499 BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1500 xoff_char = RFCOMM_RPN_XOFF_CHAR;
1501 rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1505 rpn_out:
1506 rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits,
1507 parity, flow_ctrl, xon_char, xoff_char, rpn_mask);
1509 return 0;
1512 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1514 struct rfcomm_rls *rls = (void *) skb->data;
1515 u8 dlci = __get_dlci(rls->dlci);
1517 BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1519 if (!cr)
1520 return 0;
1522 /* We should probably do something with this information here. But
1523 * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1524 * mandatory to recognise and respond to RLS */
1526 rfcomm_send_rls(s, 0, dlci, rls->status);
1528 return 0;
1531 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1533 struct rfcomm_msc *msc = (void *) skb->data;
1534 struct rfcomm_dlc *d;
1535 u8 dlci = __get_dlci(msc->dlci);
1537 BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1539 d = rfcomm_dlc_get(s, dlci);
1540 if (!d)
1541 return 0;
1543 if (cr) {
1544 if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1545 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1546 else
1547 clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1549 rfcomm_dlc_lock(d);
1551 d->remote_v24_sig = msc->v24_sig;
1553 if (d->modem_status)
1554 d->modem_status(d, msc->v24_sig);
1556 rfcomm_dlc_unlock(d);
1558 rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1560 d->mscex |= RFCOMM_MSCEX_RX;
1561 } else
1562 d->mscex |= RFCOMM_MSCEX_TX;
1564 return 0;
1567 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1569 struct rfcomm_mcc *mcc = (void *) skb->data;
1570 u8 type, cr, len;
1572 cr = __test_cr(mcc->type);
1573 type = __get_mcc_type(mcc->type);
1574 len = __get_mcc_len(mcc->len);
1576 BT_DBG("%p type 0x%x cr %d", s, type, cr);
1578 skb_pull(skb, 2);
1580 switch (type) {
1581 case RFCOMM_PN:
1582 rfcomm_recv_pn(s, cr, skb);
1583 break;
1585 case RFCOMM_RPN:
1586 rfcomm_recv_rpn(s, cr, len, skb);
1587 break;
1589 case RFCOMM_RLS:
1590 rfcomm_recv_rls(s, cr, skb);
1591 break;
1593 case RFCOMM_MSC:
1594 rfcomm_recv_msc(s, cr, skb);
1595 break;
1597 case RFCOMM_FCOFF:
1598 if (cr) {
1599 set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1600 rfcomm_send_fcoff(s, 0);
1602 break;
1604 case RFCOMM_FCON:
1605 if (cr) {
1606 clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1607 rfcomm_send_fcon(s, 0);
1609 break;
1611 case RFCOMM_TEST:
1612 if (cr)
1613 rfcomm_send_test(s, 0, skb->data, skb->len);
1614 break;
1616 case RFCOMM_NSC:
1617 break;
1619 default:
1620 BT_ERR("Unknown control type 0x%02x", type);
1621 rfcomm_send_nsc(s, cr, type);
1622 break;
1624 return 0;
1627 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1629 struct rfcomm_dlc *d;
1631 BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1633 d = rfcomm_dlc_get(s, dlci);
1634 if (!d) {
1635 rfcomm_send_dm(s, dlci);
1636 goto drop;
1639 if (pf && d->cfc) {
1640 u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1642 d->tx_credits += credits;
1643 if (d->tx_credits)
1644 clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1647 if (skb->len && d->state == BT_CONNECTED) {
1648 rfcomm_dlc_lock(d);
1649 d->rx_credits--;
1650 d->data_ready(d, skb);
1651 rfcomm_dlc_unlock(d);
1652 return 0;
1655 drop:
1656 kfree_skb(skb);
1657 return 0;
1660 static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
1662 struct rfcomm_hdr *hdr = (void *) skb->data;
1663 u8 type, dlci, fcs;
1665 dlci = __get_dlci(hdr->addr);
1666 type = __get_type(hdr->ctrl);
1668 /* Trim FCS */
1669 skb->len--; skb->tail--;
1670 fcs = *(u8 *)skb_tail_pointer(skb);
1672 if (__check_fcs(skb->data, type, fcs)) {
1673 BT_ERR("bad checksum in packet");
1674 kfree_skb(skb);
1675 return -EILSEQ;
1678 if (__test_ea(hdr->len))
1679 skb_pull(skb, 3);
1680 else
1681 skb_pull(skb, 4);
1683 switch (type) {
1684 case RFCOMM_SABM:
1685 if (__test_pf(hdr->ctrl))
1686 rfcomm_recv_sabm(s, dlci);
1687 break;
1689 case RFCOMM_DISC:
1690 if (__test_pf(hdr->ctrl))
1691 rfcomm_recv_disc(s, dlci);
1692 break;
1694 case RFCOMM_UA:
1695 if (__test_pf(hdr->ctrl))
1696 rfcomm_recv_ua(s, dlci);
1697 break;
1699 case RFCOMM_DM:
1700 rfcomm_recv_dm(s, dlci);
1701 break;
1703 case RFCOMM_UIH:
1704 if (dlci)
1705 return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1707 rfcomm_recv_mcc(s, skb);
1708 break;
1710 default:
1711 BT_ERR("Unknown packet type 0x%02x", type);
1712 break;
1714 kfree_skb(skb);
1715 return 0;
1718 /* ---- Connection and data processing ---- */
1720 static void rfcomm_process_connect(struct rfcomm_session *s)
1722 struct rfcomm_dlc *d;
1723 struct list_head *p, *n;
1725 BT_DBG("session %p state %ld", s, s->state);
1727 list_for_each_safe(p, n, &s->dlcs) {
1728 d = list_entry(p, struct rfcomm_dlc, list);
1729 if (d->state == BT_CONFIG) {
1730 d->mtu = s->mtu;
1731 if (rfcomm_check_security(d)) {
1732 rfcomm_send_pn(s, 1, d);
1733 } else {
1734 set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1735 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1741 /* Send data queued for the DLC.
1742 * Return number of frames left in the queue.
1744 static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
1746 struct sk_buff *skb;
1747 int err;
1749 BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1750 d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1752 /* Send pending MSC */
1753 if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1754 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1756 if (d->cfc) {
1757 /* CFC enabled.
1758 * Give them some credits */
1759 if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1760 d->rx_credits <= (d->cfc >> 2)) {
1761 rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1762 d->rx_credits = d->cfc;
1764 } else {
1765 /* CFC disabled.
1766 * Give ourselves some credits */
1767 d->tx_credits = 5;
1770 if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1771 return skb_queue_len(&d->tx_queue);
1773 while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1774 err = rfcomm_send_frame(d->session, skb->data, skb->len);
1775 if (err < 0) {
1776 skb_queue_head(&d->tx_queue, skb);
1777 break;
1779 kfree_skb(skb);
1780 d->tx_credits--;
1783 if (d->cfc && !d->tx_credits) {
1784 /* We're out of TX credits.
1785 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1786 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1789 return skb_queue_len(&d->tx_queue);
1792 static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
1794 struct rfcomm_dlc *d;
1795 struct list_head *p, *n;
1797 BT_DBG("session %p state %ld", s, s->state);
1799 list_for_each_safe(p, n, &s->dlcs) {
1800 d = list_entry(p, struct rfcomm_dlc, list);
1802 if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1803 __rfcomm_dlc_close(d, ETIMEDOUT);
1804 continue;
1807 if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) {
1808 rfcomm_dlc_clear_timer(d);
1809 if (d->out) {
1810 rfcomm_send_pn(s, 1, d);
1811 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
1812 } else {
1813 if (d->defer_setup) {
1814 set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1815 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1817 rfcomm_dlc_lock(d);
1818 d->state = BT_CONNECT2;
1819 d->state_change(d, 0);
1820 rfcomm_dlc_unlock(d);
1821 } else
1822 rfcomm_dlc_accept(d);
1824 continue;
1825 } else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) {
1826 rfcomm_dlc_clear_timer(d);
1827 if (!d->out)
1828 rfcomm_send_dm(s, d->dlci);
1829 else
1830 d->state = BT_CLOSED;
1831 __rfcomm_dlc_close(d, ECONNREFUSED);
1832 continue;
1835 if (test_bit(RFCOMM_SEC_PENDING, &d->flags))
1836 continue;
1838 if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1839 continue;
1841 if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1842 d->mscex == RFCOMM_MSCEX_OK)
1843 rfcomm_process_tx(d);
1847 static inline void rfcomm_process_rx(struct rfcomm_session *s)
1849 struct socket *sock = s->sock;
1850 struct sock *sk = sock->sk;
1851 struct sk_buff *skb;
1853 BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
1855 /* Get data directly from socket receive queue without copying it. */
1856 while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
1857 skb_orphan(skb);
1858 rfcomm_recv_frame(s, skb);
1861 if (sk->sk_state == BT_CLOSED) {
1862 if (!s->initiator)
1863 rfcomm_session_put(s);
1865 rfcomm_session_close(s, sk->sk_err);
1869 static inline void rfcomm_accept_connection(struct rfcomm_session *s)
1871 struct socket *sock = s->sock, *nsock;
1872 int err;
1874 /* Fast check for a new connection.
1875 * Avoids unnesesary socket allocations. */
1876 if (list_empty(&bt_sk(sock->sk)->accept_q))
1877 return;
1879 BT_DBG("session %p", s);
1881 err = kernel_accept(sock, &nsock, O_NONBLOCK);
1882 if (err < 0)
1883 return;
1885 /* Set our callbacks */
1886 nsock->sk->sk_data_ready = rfcomm_l2data_ready;
1887 nsock->sk->sk_state_change = rfcomm_l2state_change;
1889 s = rfcomm_session_add(nsock, BT_OPEN);
1890 if (s) {
1891 rfcomm_session_hold(s);
1893 /* We should adjust MTU on incoming sessions.
1894 * L2CAP MTU minus UIH header and FCS. */
1895 s->mtu = min(l2cap_pi(nsock->sk)->chan->omtu,
1896 l2cap_pi(nsock->sk)->chan->imtu) - 5;
1898 rfcomm_schedule();
1899 } else
1900 sock_release(nsock);
1903 static inline void rfcomm_check_connection(struct rfcomm_session *s)
1905 struct sock *sk = s->sock->sk;
1907 BT_DBG("%p state %ld", s, s->state);
1909 switch (sk->sk_state) {
1910 case BT_CONNECTED:
1911 s->state = BT_CONNECT;
1913 /* We can adjust MTU on outgoing sessions.
1914 * L2CAP MTU minus UIH header and FCS. */
1915 s->mtu = min(l2cap_pi(sk)->chan->omtu, l2cap_pi(sk)->chan->imtu) - 5;
1917 rfcomm_send_sabm(s, 0);
1918 break;
1920 case BT_CLOSED:
1921 s->state = BT_CLOSED;
1922 rfcomm_session_close(s, sk->sk_err);
1923 break;
1927 static inline void rfcomm_process_sessions(void)
1929 struct list_head *p, *n;
1931 rfcomm_lock();
1933 list_for_each_safe(p, n, &session_list) {
1934 struct rfcomm_session *s;
1935 s = list_entry(p, struct rfcomm_session, list);
1937 if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) {
1938 s->state = BT_DISCONN;
1939 rfcomm_send_disc(s, 0);
1940 rfcomm_session_put(s);
1941 continue;
1944 if (s->state == BT_LISTEN) {
1945 rfcomm_accept_connection(s);
1946 continue;
1949 rfcomm_session_hold(s);
1951 switch (s->state) {
1952 case BT_BOUND:
1953 rfcomm_check_connection(s);
1954 break;
1956 default:
1957 rfcomm_process_rx(s);
1958 break;
1961 rfcomm_process_dlcs(s);
1963 rfcomm_session_put(s);
1966 rfcomm_unlock();
1969 static int rfcomm_add_listener(bdaddr_t *ba)
1971 struct sockaddr_l2 addr;
1972 struct socket *sock;
1973 struct sock *sk;
1974 struct rfcomm_session *s;
1975 int err = 0;
1977 /* Create socket */
1978 err = rfcomm_l2sock_create(&sock);
1979 if (err < 0) {
1980 BT_ERR("Create socket failed %d", err);
1981 return err;
1984 /* Bind socket */
1985 bacpy(&addr.l2_bdaddr, ba);
1986 addr.l2_family = AF_BLUETOOTH;
1987 addr.l2_psm = cpu_to_le16(RFCOMM_PSM);
1988 addr.l2_cid = 0;
1989 err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
1990 if (err < 0) {
1991 BT_ERR("Bind failed %d", err);
1992 goto failed;
1995 /* Set L2CAP options */
1996 sk = sock->sk;
1997 lock_sock(sk);
1998 l2cap_pi(sk)->chan->imtu = l2cap_mtu;
1999 release_sock(sk);
2001 /* Start listening on the socket */
2002 err = kernel_listen(sock, 10);
2003 if (err) {
2004 BT_ERR("Listen failed %d", err);
2005 goto failed;
2008 /* Add listening session */
2009 s = rfcomm_session_add(sock, BT_LISTEN);
2010 if (!s)
2011 goto failed;
2013 rfcomm_session_hold(s);
2014 return 0;
2015 failed:
2016 sock_release(sock);
2017 return err;
2020 static void rfcomm_kill_listener(void)
2022 struct rfcomm_session *s;
2023 struct list_head *p, *n;
2025 BT_DBG("");
2027 list_for_each_safe(p, n, &session_list) {
2028 s = list_entry(p, struct rfcomm_session, list);
2029 rfcomm_session_del(s);
2033 static int rfcomm_run(void *unused)
2035 BT_DBG("");
2037 set_user_nice(current, -10);
2039 rfcomm_add_listener(BDADDR_ANY);
2041 while (!kthread_should_stop()) {
2042 set_current_state(TASK_INTERRUPTIBLE);
2043 if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
2044 /* No pending events. Let's sleep.
2045 * Incoming connections and data will wake us up. */
2046 schedule();
2048 set_current_state(TASK_RUNNING);
2050 /* Process stuff */
2051 clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
2052 rfcomm_process_sessions();
2055 rfcomm_kill_listener();
2057 return 0;
2060 static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
2062 struct rfcomm_session *s;
2063 struct rfcomm_dlc *d;
2064 struct list_head *p, *n;
2066 BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
2068 s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
2069 if (!s)
2070 return;
2072 rfcomm_session_hold(s);
2074 list_for_each_safe(p, n, &s->dlcs) {
2075 d = list_entry(p, struct rfcomm_dlc, list);
2077 if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) {
2078 rfcomm_dlc_clear_timer(d);
2079 if (status || encrypt == 0x00) {
2080 __rfcomm_dlc_close(d, ECONNREFUSED);
2081 continue;
2085 if (d->state == BT_CONNECTED && !status && encrypt == 0x00) {
2086 if (d->sec_level == BT_SECURITY_MEDIUM) {
2087 set_bit(RFCOMM_SEC_PENDING, &d->flags);
2088 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
2089 continue;
2090 } else if (d->sec_level == BT_SECURITY_HIGH) {
2091 __rfcomm_dlc_close(d, ECONNREFUSED);
2092 continue;
2096 if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
2097 continue;
2099 if (!status && hci_conn_check_secure(conn, d->sec_level))
2100 set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
2101 else
2102 set_bit(RFCOMM_AUTH_REJECT, &d->flags);
2105 rfcomm_session_put(s);
2107 rfcomm_schedule();
2110 static struct hci_cb rfcomm_cb = {
2111 .name = "RFCOMM",
2112 .security_cfm = rfcomm_security_cfm
2115 static int rfcomm_dlc_debugfs_show(struct seq_file *f, void *x)
2117 struct rfcomm_session *s;
2118 struct list_head *pp, *p;
2120 rfcomm_lock();
2122 list_for_each(p, &session_list) {
2123 s = list_entry(p, struct rfcomm_session, list);
2124 list_for_each(pp, &s->dlcs) {
2125 struct sock *sk = s->sock->sk;
2126 struct rfcomm_dlc *d = list_entry(pp, struct rfcomm_dlc, list);
2128 seq_printf(f, "%s %s %ld %d %d %d %d\n",
2129 batostr(&bt_sk(sk)->src),
2130 batostr(&bt_sk(sk)->dst),
2131 d->state, d->dlci, d->mtu,
2132 d->rx_credits, d->tx_credits);
2136 rfcomm_unlock();
2138 return 0;
2141 static int rfcomm_dlc_debugfs_open(struct inode *inode, struct file *file)
2143 return single_open(file, rfcomm_dlc_debugfs_show, inode->i_private);
2146 static const struct file_operations rfcomm_dlc_debugfs_fops = {
2147 .open = rfcomm_dlc_debugfs_open,
2148 .read = seq_read,
2149 .llseek = seq_lseek,
2150 .release = single_release,
2153 static struct dentry *rfcomm_dlc_debugfs;
2155 /* ---- Initialization ---- */
2156 static int __init rfcomm_init(void)
2158 int err;
2160 hci_register_cb(&rfcomm_cb);
2162 rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd");
2163 if (IS_ERR(rfcomm_thread)) {
2164 err = PTR_ERR(rfcomm_thread);
2165 goto unregister;
2168 if (bt_debugfs) {
2169 rfcomm_dlc_debugfs = debugfs_create_file("rfcomm_dlc", 0444,
2170 bt_debugfs, NULL, &rfcomm_dlc_debugfs_fops);
2171 if (!rfcomm_dlc_debugfs)
2172 BT_ERR("Failed to create RFCOMM debug file");
2175 err = rfcomm_init_ttys();
2176 if (err < 0)
2177 goto stop;
2179 err = rfcomm_init_sockets();
2180 if (err < 0)
2181 goto cleanup;
2183 BT_INFO("RFCOMM ver %s", VERSION);
2185 return 0;
2187 cleanup:
2188 rfcomm_cleanup_ttys();
2190 stop:
2191 kthread_stop(rfcomm_thread);
2193 unregister:
2194 hci_unregister_cb(&rfcomm_cb);
2196 return err;
2199 static void __exit rfcomm_exit(void)
2201 debugfs_remove(rfcomm_dlc_debugfs);
2203 hci_unregister_cb(&rfcomm_cb);
2205 kthread_stop(rfcomm_thread);
2207 rfcomm_cleanup_ttys();
2209 rfcomm_cleanup_sockets();
2212 module_init(rfcomm_init);
2213 module_exit(rfcomm_exit);
2215 module_param(disable_cfc, bool, 0644);
2216 MODULE_PARM_DESC(disable_cfc, "Disable credit based flow control");
2218 module_param(channel_mtu, int, 0644);
2219 MODULE_PARM_DESC(channel_mtu, "Default MTU for the RFCOMM channel");
2221 module_param(l2cap_mtu, uint, 0644);
2222 MODULE_PARM_DESC(l2cap_mtu, "Default MTU for the L2CAP connection");
2224 module_param(l2cap_ertm, bool, 0644);
2225 MODULE_PARM_DESC(l2cap_ertm, "Use L2CAP ERTM mode for connection");
2227 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
2228 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION);
2229 MODULE_VERSION(VERSION);
2230 MODULE_LICENSE("GPL");
2231 MODULE_ALIAS("bt-proto-3");