xref: /linux/net/bluetooth/rfcomm/core.c (revision 12871a0bd67dd4db4418e1daafcd46e9d329ef10)
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>
5 
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;
9 
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.
18 
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.
22 */
23 
24 /*
25  * Bluetooth RFCOMM core.
26  */
27 
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>
42 
43 #include <net/sock.h>
44 #include <linux/uaccess.h>
45 #include <asm/unaligned.h>
46 
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>
51 
52 #define VERSION "1.11"
53 
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;
58 
59 static struct task_struct *rfcomm_thread;
60 
61 static DEFINE_MUTEX(rfcomm_mutex);
62 #define rfcomm_lock()	mutex_lock(&rfcomm_mutex)
63 #define rfcomm_unlock()	mutex_unlock(&rfcomm_mutex)
64 
65 static unsigned long rfcomm_event;
66 
67 static LIST_HEAD(session_list);
68 
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);
79 
80 static void rfcomm_process_connect(struct rfcomm_session *s);
81 
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);
88 
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))
94 
95 #define __test_ea(b)      ((b & 0x01))
96 #define __test_cr(b)      ((b & 0x02))
97 #define __test_pf(b)      ((b & 0x10))
98 
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)
104 
105 #define __len8(len)       (((len) << 1) | 1)
106 #define __len16(len)      ((len) << 1)
107 
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)
112 
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)
118 
119 static inline void rfcomm_schedule(void)
120 {
121 	if (!rfcomm_thread)
122 		return;
123 	set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
124 	wake_up_process(rfcomm_thread);
125 }
126 
127 static inline void rfcomm_session_put(struct rfcomm_session *s)
128 {
129 	if (atomic_dec_and_test(&s->refcnt))
130 		rfcomm_session_del(s);
131 }
132 
133 /* ---- RFCOMM FCS computation ---- */
134 
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,
141 
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,
146 
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,
151 
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,
156 
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,
161 
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,
166 
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,
171 
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
176 };
177 
178 /* CRC on 2 bytes */
179 #define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
180 
181 /* FCS on 2 bytes */
182 static inline u8 __fcs(u8 *data)
183 {
184 	return 0xff - __crc(data);
185 }
186 
187 /* FCS on 3 bytes */
188 static inline u8 __fcs2(u8 *data)
189 {
190 	return 0xff - rfcomm_crc_table[__crc(data) ^ data[2]];
191 }
192 
193 /* Check FCS */
194 static inline int __check_fcs(u8 *data, int type, u8 fcs)
195 {
196 	u8 f = __crc(data);
197 
198 	if (type != RFCOMM_UIH)
199 		f = rfcomm_crc_table[f ^ data[2]];
200 
201 	return rfcomm_crc_table[f ^ fcs] != 0xcf;
202 }
203 
204 /* ---- L2CAP callbacks ---- */
205 static void rfcomm_l2state_change(struct sock *sk)
206 {
207 	BT_DBG("%p state %d", sk, sk->sk_state);
208 	rfcomm_schedule();
209 }
210 
211 static void rfcomm_l2data_ready(struct sock *sk, int bytes)
212 {
213 	BT_DBG("%p bytes %d", sk, bytes);
214 	rfcomm_schedule();
215 }
216 
217 static int rfcomm_l2sock_create(struct socket **sock)
218 {
219 	int err;
220 
221 	BT_DBG("");
222 
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;
228 	}
229 	return err;
230 }
231 
232 static inline int rfcomm_check_security(struct rfcomm_dlc *d)
233 {
234 	struct sock *sk = d->session->sock->sk;
235 	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
236 
237 	__u8 auth_type;
238 
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;
249 	}
250 
251 	return hci_conn_security(conn->hcon, d->sec_level, auth_type);
252 }
253 
254 static void rfcomm_session_timeout(unsigned long arg)
255 {
256 	struct rfcomm_session *s = (void *) arg;
257 
258 	BT_DBG("session %p state %ld", s, s->state);
259 
260 	set_bit(RFCOMM_TIMED_OUT, &s->flags);
261 	rfcomm_schedule();
262 }
263 
264 static void rfcomm_session_set_timer(struct rfcomm_session *s, long timeout)
265 {
266 	BT_DBG("session %p state %ld timeout %ld", s, s->state, timeout);
267 
268 	if (!mod_timer(&s->timer, jiffies + timeout))
269 		rfcomm_session_hold(s);
270 }
271 
272 static void rfcomm_session_clear_timer(struct rfcomm_session *s)
273 {
274 	BT_DBG("session %p state %ld", s, s->state);
275 
276 	if (timer_pending(&s->timer) && del_timer(&s->timer))
277 		rfcomm_session_put(s);
278 }
279 
280 /* ---- RFCOMM DLCs ---- */
281 static void rfcomm_dlc_timeout(unsigned long arg)
282 {
283 	struct rfcomm_dlc *d = (void *) arg;
284 
285 	BT_DBG("dlc %p state %ld", d, d->state);
286 
287 	set_bit(RFCOMM_TIMED_OUT, &d->flags);
288 	rfcomm_dlc_put(d);
289 	rfcomm_schedule();
290 }
291 
292 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
293 {
294 	BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
295 
296 	if (!mod_timer(&d->timer, jiffies + timeout))
297 		rfcomm_dlc_hold(d);
298 }
299 
300 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
301 {
302 	BT_DBG("dlc %p state %ld", d, d->state);
303 
304 	if (timer_pending(&d->timer) && del_timer(&d->timer))
305 		rfcomm_dlc_put(d);
306 }
307 
308 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
309 {
310 	BT_DBG("%p", d);
311 
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;
318 
319 	d->cfc        = RFCOMM_CFC_DISABLED;
320 	d->rx_credits = RFCOMM_DEFAULT_CREDITS;
321 }
322 
323 struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio)
324 {
325 	struct rfcomm_dlc *d = kzalloc(sizeof(*d), prio);
326 
327 	if (!d)
328 		return NULL;
329 
330 	setup_timer(&d->timer, rfcomm_dlc_timeout, (unsigned long)d);
331 
332 	skb_queue_head_init(&d->tx_queue);
333 	spin_lock_init(&d->lock);
334 	atomic_set(&d->refcnt, 1);
335 
336 	rfcomm_dlc_clear_state(d);
337 
338 	BT_DBG("%p", d);
339 
340 	return d;
341 }
342 
343 void rfcomm_dlc_free(struct rfcomm_dlc *d)
344 {
345 	BT_DBG("%p", d);
346 
347 	skb_queue_purge(&d->tx_queue);
348 	kfree(d);
349 }
350 
351 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
352 {
353 	BT_DBG("dlc %p session %p", d, s);
354 
355 	rfcomm_session_hold(s);
356 
357 	rfcomm_session_clear_timer(s);
358 	rfcomm_dlc_hold(d);
359 	list_add(&d->list, &s->dlcs);
360 	d->session = s;
361 }
362 
363 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
364 {
365 	struct rfcomm_session *s = d->session;
366 
367 	BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
368 
369 	list_del(&d->list);
370 	d->session = NULL;
371 	rfcomm_dlc_put(d);
372 
373 	if (list_empty(&s->dlcs))
374 		rfcomm_session_set_timer(s, RFCOMM_IDLE_TIMEOUT);
375 
376 	rfcomm_session_put(s);
377 }
378 
379 static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
380 {
381 	struct rfcomm_dlc *d;
382 	struct list_head *p;
383 
384 	list_for_each(p, &s->dlcs) {
385 		d = list_entry(p, struct rfcomm_dlc, list);
386 		if (d->dlci == dlci)
387 			return d;
388 	}
389 	return NULL;
390 }
391 
392 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
393 {
394 	struct rfcomm_session *s;
395 	int err = 0;
396 	u8 dlci;
397 
398 	BT_DBG("dlc %p state %ld %s %s channel %d",
399 			d, d->state, batostr(src), batostr(dst), channel);
400 
401 	if (channel < 1 || channel > 30)
402 		return -EINVAL;
403 
404 	if (d->state != BT_OPEN && d->state != BT_CLOSED)
405 		return 0;
406 
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;
412 	}
413 
414 	dlci = __dlci(!s->initiator, channel);
415 
416 	/* Check if DLCI already exists */
417 	if (rfcomm_dlc_get(s, dlci))
418 		return -EBUSY;
419 
420 	rfcomm_dlc_clear_state(d);
421 
422 	d->dlci     = dlci;
423 	d->addr     = __addr(s->initiator, dlci);
424 	d->priority = 7;
425 
426 	d->state = BT_CONFIG;
427 	rfcomm_dlc_link(s, d);
428 
429 	d->out = 1;
430 
431 	d->mtu = s->mtu;
432 	d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
433 
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);
439 	}
440 
441 	rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
442 
443 	return 0;
444 }
445 
446 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
447 {
448 	int r;
449 
450 	rfcomm_lock();
451 
452 	r = __rfcomm_dlc_open(d, src, dst, channel);
453 
454 	rfcomm_unlock();
455 	return r;
456 }
457 
458 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
459 {
460 	struct rfcomm_session *s = d->session;
461 	if (!s)
462 		return 0;
463 
464 	BT_DBG("dlc %p state %ld dlci %d err %d session %p",
465 			d, d->state, d->dlci, err, s);
466 
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;
474 		}
475 		/* Fall through */
476 
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);
485 		}
486 		break;
487 
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;
494 		}
495 		/* Fall through */
496 
497 	default:
498 		rfcomm_dlc_clear_timer(d);
499 
500 		rfcomm_dlc_lock(d);
501 		d->state = BT_CLOSED;
502 		d->state_change(d, err);
503 		rfcomm_dlc_unlock(d);
504 
505 		skb_queue_purge(&d->tx_queue);
506 		rfcomm_dlc_unlink(d);
507 	}
508 
509 	return 0;
510 }
511 
512 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
513 {
514 	int r;
515 
516 	rfcomm_lock();
517 
518 	r = __rfcomm_dlc_close(d, err);
519 
520 	rfcomm_unlock();
521 	return r;
522 }
523 
524 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
525 {
526 	int len = skb->len;
527 
528 	if (d->state != BT_CONNECTED)
529 		return -ENOTCONN;
530 
531 	BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
532 
533 	if (len > d->mtu)
534 		return -EINVAL;
535 
536 	rfcomm_make_uih(skb, d->addr);
537 	skb_queue_tail(&d->tx_queue, skb);
538 
539 	if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
540 		rfcomm_schedule();
541 	return len;
542 }
543 
544 void __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
545 {
546 	BT_DBG("dlc %p state %ld", d, d->state);
547 
548 	if (!d->cfc) {
549 		d->v24_sig |= RFCOMM_V24_FC;
550 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
551 	}
552 	rfcomm_schedule();
553 }
554 
555 void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
556 {
557 	BT_DBG("dlc %p state %ld", d, d->state);
558 
559 	if (!d->cfc) {
560 		d->v24_sig &= ~RFCOMM_V24_FC;
561 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
562 	}
563 	rfcomm_schedule();
564 }
565 
566 /*
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.
570  */
571 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
572 {
573 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
574 			d, d->state, v24_sig);
575 
576 	if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
577 		v24_sig |= RFCOMM_V24_FC;
578 	else
579 		v24_sig &= ~RFCOMM_V24_FC;
580 
581 	d->v24_sig = v24_sig;
582 
583 	if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
584 		rfcomm_schedule();
585 
586 	return 0;
587 }
588 
589 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
590 {
591 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
592 			d, d->state, d->v24_sig);
593 
594 	*v24_sig = d->v24_sig;
595 	return 0;
596 }
597 
598 /* ---- RFCOMM sessions ---- */
599 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
600 {
601 	struct rfcomm_session *s = kzalloc(sizeof(*s), GFP_KERNEL);
602 
603 	if (!s)
604 		return NULL;
605 
606 	BT_DBG("session %p sock %p", s, sock);
607 
608 	setup_timer(&s->timer, rfcomm_session_timeout, (unsigned long) s);
609 
610 	INIT_LIST_HEAD(&s->dlcs);
611 	s->state = state;
612 	s->sock  = sock;
613 
614 	s->mtu = RFCOMM_DEFAULT_MTU;
615 	s->cfc = disable_cfc ? RFCOMM_CFC_DISABLED : RFCOMM_CFC_UNKNOWN;
616 
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;
623 		}
624 
625 	list_add(&s->list, &session_list);
626 
627 	return s;
628 }
629 
630 static void rfcomm_session_del(struct rfcomm_session *s)
631 {
632 	int state = s->state;
633 
634 	BT_DBG("session %p state %ld", s, s->state);
635 
636 	list_del(&s->list);
637 
638 	if (state == BT_CONNECTED)
639 		rfcomm_send_disc(s, 0);
640 
641 	rfcomm_session_clear_timer(s);
642 	sock_release(s->sock);
643 	kfree(s);
644 
645 	if (state != BT_LISTEN)
646 		module_put(THIS_MODULE);
647 }
648 
649 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
650 {
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);
657 
658 		if ((!bacmp(src, BDADDR_ANY) || !bacmp(&sk->src, src)) &&
659 				!bacmp(&sk->dst, dst))
660 			return s;
661 	}
662 	return NULL;
663 }
664 
665 static void rfcomm_session_close(struct rfcomm_session *s, int err)
666 {
667 	struct rfcomm_dlc *d;
668 	struct list_head *p, *n;
669 
670 	BT_DBG("session %p state %ld err %d", s, s->state, err);
671 
672 	rfcomm_session_hold(s);
673 
674 	s->state = BT_CLOSED;
675 
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);
681 	}
682 
683 	rfcomm_session_clear_timer(s);
684 	rfcomm_session_put(s);
685 }
686 
687 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
688 							bdaddr_t *dst,
689 							u8 sec_level,
690 							int *err)
691 {
692 	struct rfcomm_session *s = NULL;
693 	struct sockaddr_l2 addr;
694 	struct socket *sock;
695 	struct sock *sk;
696 
697 	BT_DBG("%s %s", batostr(src), batostr(dst));
698 
699 	*err = rfcomm_l2sock_create(&sock);
700 	if (*err < 0)
701 		return NULL;
702 
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;
710 
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);
719 
720 	s = rfcomm_session_add(sock, BT_BOUND);
721 	if (!s) {
722 		*err = -ENOMEM;
723 		goto failed;
724 	}
725 
726 	s->initiator = 1;
727 
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;
735 
736 	rfcomm_session_del(s);
737 	return NULL;
738 
739 failed:
740 	sock_release(sock);
741 	return NULL;
742 }
743 
744 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
745 {
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);
751 }
752 
753 /* ---- RFCOMM frame sending ---- */
754 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
755 {
756 	struct socket *sock = s->sock;
757 	struct kvec iv = { data, len };
758 	struct msghdr msg;
759 
760 	BT_DBG("session %p len %d", s, len);
761 
762 	memset(&msg, 0, sizeof(msg));
763 
764 	return kernel_sendmsg(sock, &msg, &iv, 1, len);
765 }
766 
767 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
768 {
769 	struct rfcomm_cmd cmd;
770 
771 	BT_DBG("%p dlci %d", s, dlci);
772 
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);
777 
778 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
779 }
780 
781 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
782 {
783 	struct rfcomm_cmd cmd;
784 
785 	BT_DBG("%p dlci %d", s, dlci);
786 
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);
791 
792 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
793 }
794 
795 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
796 {
797 	struct rfcomm_cmd cmd;
798 
799 	BT_DBG("%p dlci %d", s, dlci);
800 
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);
805 
806 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
807 }
808 
809 static int rfcomm_queue_disc(struct rfcomm_dlc *d)
810 {
811 	struct rfcomm_cmd *cmd;
812 	struct sk_buff *skb;
813 
814 	BT_DBG("dlc %p dlci %d", d, d->dlci);
815 
816 	skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
817 	if (!skb)
818 		return -ENOMEM;
819 
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);
825 
826 	skb_queue_tail(&d->tx_queue, skb);
827 	rfcomm_schedule();
828 	return 0;
829 }
830 
831 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
832 {
833 	struct rfcomm_cmd cmd;
834 
835 	BT_DBG("%p dlci %d", s, dlci);
836 
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);
841 
842 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
843 }
844 
845 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
846 {
847 	struct rfcomm_hdr *hdr;
848 	struct rfcomm_mcc *mcc;
849 	u8 buf[16], *ptr = buf;
850 
851 	BT_DBG("%p cr %d type %d", s, cr, type);
852 
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);
857 
858 	mcc = (void *) ptr; ptr += sizeof(*mcc);
859 	mcc->type = __mcc_type(cr, RFCOMM_NSC);
860 	mcc->len  = __len8(1);
861 
862 	/* Type that we didn't like */
863 	*ptr = __mcc_type(cr, type); ptr++;
864 
865 	*ptr = __fcs(buf); ptr++;
866 
867 	return rfcomm_send_frame(s, buf, ptr - buf);
868 }
869 
870 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
871 {
872 	struct rfcomm_hdr *hdr;
873 	struct rfcomm_mcc *mcc;
874 	struct rfcomm_pn  *pn;
875 	u8 buf[16], *ptr = buf;
876 
877 	BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
878 
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));
883 
884 	mcc = (void *) ptr; ptr += sizeof(*mcc);
885 	mcc->type = __mcc_type(cr, RFCOMM_PN);
886 	mcc->len  = __len8(sizeof(*pn));
887 
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;
893 
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;
900 	}
901 
902 	if (cr && channel_mtu >= 0)
903 		pn->mtu = cpu_to_le16(channel_mtu);
904 	else
905 		pn->mtu = cpu_to_le16(d->mtu);
906 
907 	*ptr = __fcs(buf); ptr++;
908 
909 	return rfcomm_send_frame(s, buf, ptr - buf);
910 }
911 
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)
916 {
917 	struct rfcomm_hdr *hdr;
918 	struct rfcomm_mcc *mcc;
919 	struct rfcomm_rpn *rpn;
920 	u8 buf[16], *ptr = buf;
921 
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);
926 
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));
931 
932 	mcc = (void *) ptr; ptr += sizeof(*mcc);
933 	mcc->type = __mcc_type(cr, RFCOMM_RPN);
934 	mcc->len  = __len8(sizeof(*rpn));
935 
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);
944 
945 	*ptr = __fcs(buf); ptr++;
946 
947 	return rfcomm_send_frame(s, buf, ptr - buf);
948 }
949 
950 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
951 {
952 	struct rfcomm_hdr *hdr;
953 	struct rfcomm_mcc *mcc;
954 	struct rfcomm_rls *rls;
955 	u8 buf[16], *ptr = buf;
956 
957 	BT_DBG("%p cr %d status 0x%x", s, cr, status);
958 
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));
963 
964 	mcc = (void *) ptr; ptr += sizeof(*mcc);
965 	mcc->type = __mcc_type(cr, RFCOMM_RLS);
966 	mcc->len  = __len8(sizeof(*rls));
967 
968 	rls = (void *) ptr; ptr += sizeof(*rls);
969 	rls->dlci   = __addr(1, dlci);
970 	rls->status = status;
971 
972 	*ptr = __fcs(buf); ptr++;
973 
974 	return rfcomm_send_frame(s, buf, ptr - buf);
975 }
976 
977 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
978 {
979 	struct rfcomm_hdr *hdr;
980 	struct rfcomm_mcc *mcc;
981 	struct rfcomm_msc *msc;
982 	u8 buf[16], *ptr = buf;
983 
984 	BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
985 
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));
990 
991 	mcc = (void *) ptr; ptr += sizeof(*mcc);
992 	mcc->type = __mcc_type(cr, RFCOMM_MSC);
993 	mcc->len  = __len8(sizeof(*msc));
994 
995 	msc = (void *) ptr; ptr += sizeof(*msc);
996 	msc->dlci    = __addr(1, dlci);
997 	msc->v24_sig = v24_sig | 0x01;
998 
999 	*ptr = __fcs(buf); ptr++;
1000 
1001 	return rfcomm_send_frame(s, buf, ptr - buf);
1002 }
1003 
1004 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
1005 {
1006 	struct rfcomm_hdr *hdr;
1007 	struct rfcomm_mcc *mcc;
1008 	u8 buf[16], *ptr = buf;
1009 
1010 	BT_DBG("%p cr %d", s, cr);
1011 
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));
1016 
1017 	mcc = (void *) ptr; ptr += sizeof(*mcc);
1018 	mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
1019 	mcc->len  = __len8(0);
1020 
1021 	*ptr = __fcs(buf); ptr++;
1022 
1023 	return rfcomm_send_frame(s, buf, ptr - buf);
1024 }
1025 
1026 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
1027 {
1028 	struct rfcomm_hdr *hdr;
1029 	struct rfcomm_mcc *mcc;
1030 	u8 buf[16], *ptr = buf;
1031 
1032 	BT_DBG("%p cr %d", s, cr);
1033 
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));
1038 
1039 	mcc = (void *) ptr; ptr += sizeof(*mcc);
1040 	mcc->type = __mcc_type(cr, RFCOMM_FCON);
1041 	mcc->len  = __len8(0);
1042 
1043 	*ptr = __fcs(buf); ptr++;
1044 
1045 	return rfcomm_send_frame(s, buf, ptr - buf);
1046 }
1047 
1048 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
1049 {
1050 	struct socket *sock = s->sock;
1051 	struct kvec iv[3];
1052 	struct msghdr msg;
1053 	unsigned char hdr[5], crc[1];
1054 
1055 	if (len > 125)
1056 		return -EINVAL;
1057 
1058 	BT_DBG("%p cr %d", s, cr);
1059 
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);
1065 
1066 	crc[0] = __fcs(hdr);
1067 
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;
1074 
1075 	memset(&msg, 0, sizeof(msg));
1076 
1077 	return kernel_sendmsg(sock, &msg, iv, 3, 6 + len);
1078 }
1079 
1080 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
1081 {
1082 	struct rfcomm_hdr *hdr;
1083 	u8 buf[16], *ptr = buf;
1084 
1085 	BT_DBG("%p addr %d credits %d", s, addr, credits);
1086 
1087 	hdr = (void *) ptr; ptr += sizeof(*hdr);
1088 	hdr->addr = addr;
1089 	hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
1090 	hdr->len  = __len8(0);
1091 
1092 	*ptr = credits; ptr++;
1093 
1094 	*ptr = __fcs(buf); ptr++;
1095 
1096 	return rfcomm_send_frame(s, buf, ptr - buf);
1097 }
1098 
1099 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
1100 {
1101 	struct rfcomm_hdr *hdr;
1102 	int len = skb->len;
1103 	u8 *crc;
1104 
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);
1111 	}
1112 	hdr->addr = addr;
1113 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1114 
1115 	crc = skb_put(skb, 1);
1116 	*crc = __fcs((void *) hdr);
1117 }
1118 
1119 /* ---- RFCOMM frame reception ---- */
1120 static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
1121 {
1122 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1123 
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;
1130 		}
1131 
1132 		switch (d->state) {
1133 		case BT_CONNECT:
1134 			rfcomm_dlc_clear_timer(d);
1135 
1136 			rfcomm_dlc_lock(d);
1137 			d->state = BT_CONNECTED;
1138 			d->state_change(d, 0);
1139 			rfcomm_dlc_unlock(d);
1140 
1141 			rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1142 			break;
1143 
1144 		case BT_DISCONN:
1145 			d->state = BT_CLOSED;
1146 			__rfcomm_dlc_close(d, 0);
1147 
1148 			if (list_empty(&s->dlcs)) {
1149 				s->state = BT_DISCONN;
1150 				rfcomm_send_disc(s, 0);
1151 			}
1152 
1153 			break;
1154 		}
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;
1162 
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;
1171 		}
1172 	}
1173 	return 0;
1174 }
1175 
1176 static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1177 {
1178 	int err = 0;
1179 
1180 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1181 
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;
1190 
1191 			d->state = BT_CLOSED;
1192 			__rfcomm_dlc_close(d, err);
1193 		}
1194 	} else {
1195 		if (s->state == BT_CONNECT)
1196 			err = ECONNREFUSED;
1197 		else
1198 			err = ECONNRESET;
1199 
1200 		s->state = BT_CLOSED;
1201 		rfcomm_session_close(s, err);
1202 	}
1203 	return 0;
1204 }
1205 
1206 static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
1207 {
1208 	int err = 0;
1209 
1210 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1211 
1212 	if (dlci) {
1213 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1214 		if (d) {
1215 			rfcomm_send_ua(s, dlci);
1216 
1217 			if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1218 				err = ECONNREFUSED;
1219 			else
1220 				err = ECONNRESET;
1221 
1222 			d->state = BT_CLOSED;
1223 			__rfcomm_dlc_close(d, err);
1224 		} else
1225 			rfcomm_send_dm(s, dlci);
1226 
1227 	} else {
1228 		rfcomm_send_ua(s, 0);
1229 
1230 		if (s->state == BT_CONNECT)
1231 			err = ECONNREFUSED;
1232 		else
1233 			err = ECONNRESET;
1234 
1235 		s->state = BT_CLOSED;
1236 		rfcomm_session_close(s, err);
1237 	}
1238 
1239 	return 0;
1240 }
1241 
1242 void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1243 {
1244 	struct sock *sk = d->session->sock->sk;
1245 	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1246 
1247 	BT_DBG("dlc %p", d);
1248 
1249 	rfcomm_send_ua(d->session, d->dlci);
1250 
1251 	rfcomm_dlc_clear_timer(d);
1252 
1253 	rfcomm_dlc_lock(d);
1254 	d->state = BT_CONNECTED;
1255 	d->state_change(d, 0);
1256 	rfcomm_dlc_unlock(d);
1257 
1258 	if (d->role_switch)
1259 		hci_conn_switch_role(conn->hcon, 0x00);
1260 
1261 	rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1262 }
1263 
1264 static void rfcomm_check_accept(struct rfcomm_dlc *d)
1265 {
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);
1270 
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);
1280 	}
1281 }
1282 
1283 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1284 {
1285 	struct rfcomm_dlc *d;
1286 	u8 channel;
1287 
1288 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1289 
1290 	if (!dlci) {
1291 		rfcomm_send_ua(s, 0);
1292 
1293 		if (s->state == BT_OPEN) {
1294 			s->state = BT_CONNECTED;
1295 			rfcomm_process_connect(s);
1296 		}
1297 		return 0;
1298 	}
1299 
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);
1306 		}
1307 		return 0;
1308 	}
1309 
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);
1316 
1317 		rfcomm_check_accept(d);
1318 	} else {
1319 		rfcomm_send_dm(s, dlci);
1320 	}
1321 
1322 	return 0;
1323 }
1324 
1325 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1326 {
1327 	struct rfcomm_session *s = d->session;
1328 
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);
1331 
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);
1339 	}
1340 
1341 	if (s->cfc == RFCOMM_CFC_UNKNOWN)
1342 		s->cfc = d->cfc;
1343 
1344 	d->priority = pn->priority;
1345 
1346 	d->mtu = __le16_to_cpu(pn->mtu);
1347 
1348 	if (cr && d->mtu > s->mtu)
1349 		d->mtu = s->mtu;
1350 
1351 	return 0;
1352 }
1353 
1354 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1355 {
1356 	struct rfcomm_pn *pn = (void *) skb->data;
1357 	struct rfcomm_dlc *d;
1358 	u8 dlci = pn->dlci;
1359 
1360 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1361 
1362 	if (!dlci)
1363 		return 0;
1364 
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);
1376 
1377 				d->state = BT_CONNECT;
1378 				rfcomm_send_sabm(s, d->dlci);
1379 				break;
1380 			}
1381 		}
1382 	} else {
1383 		u8 channel = __srv_channel(dlci);
1384 
1385 		if (!cr)
1386 			return 0;
1387 
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);
1394 
1395 			rfcomm_apply_pn(d, cr, pn);
1396 
1397 			d->state = BT_OPEN;
1398 			rfcomm_send_pn(s, 0, d);
1399 		} else {
1400 			rfcomm_send_dm(s, dlci);
1401 		}
1402 	}
1403 	return 0;
1404 }
1405 
1406 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1407 {
1408 	struct rfcomm_rpn *rpn = (void *) skb->data;
1409 	u8 dlci = __get_dlci(rpn->dlci);
1410 
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;
1419 
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);
1423 
1424 	if (!cr)
1425 		return 0;
1426 
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;
1437 	}
1438 
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 */
1441 
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;
1448 		}
1449 	}
1450 
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;
1457 		}
1458 	}
1459 
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;
1466 		}
1467 	}
1468 
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;
1475 		}
1476 	}
1477 
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;
1484 		}
1485 	}
1486 
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;
1493 		}
1494 	}
1495 
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;
1502 		}
1503 	}
1504 
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);
1508 
1509 	return 0;
1510 }
1511 
1512 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1513 {
1514 	struct rfcomm_rls *rls = (void *) skb->data;
1515 	u8 dlci = __get_dlci(rls->dlci);
1516 
1517 	BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1518 
1519 	if (!cr)
1520 		return 0;
1521 
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 */
1525 
1526 	rfcomm_send_rls(s, 0, dlci, rls->status);
1527 
1528 	return 0;
1529 }
1530 
1531 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1532 {
1533 	struct rfcomm_msc *msc = (void *) skb->data;
1534 	struct rfcomm_dlc *d;
1535 	u8 dlci = __get_dlci(msc->dlci);
1536 
1537 	BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1538 
1539 	d = rfcomm_dlc_get(s, dlci);
1540 	if (!d)
1541 		return 0;
1542 
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);
1548 
1549 		rfcomm_dlc_lock(d);
1550 
1551 		d->remote_v24_sig = msc->v24_sig;
1552 
1553 		if (d->modem_status)
1554 			d->modem_status(d, msc->v24_sig);
1555 
1556 		rfcomm_dlc_unlock(d);
1557 
1558 		rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1559 
1560 		d->mscex |= RFCOMM_MSCEX_RX;
1561 	} else
1562 		d->mscex |= RFCOMM_MSCEX_TX;
1563 
1564 	return 0;
1565 }
1566 
1567 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1568 {
1569 	struct rfcomm_mcc *mcc = (void *) skb->data;
1570 	u8 type, cr, len;
1571 
1572 	cr   = __test_cr(mcc->type);
1573 	type = __get_mcc_type(mcc->type);
1574 	len  = __get_mcc_len(mcc->len);
1575 
1576 	BT_DBG("%p type 0x%x cr %d", s, type, cr);
1577 
1578 	skb_pull(skb, 2);
1579 
1580 	switch (type) {
1581 	case RFCOMM_PN:
1582 		rfcomm_recv_pn(s, cr, skb);
1583 		break;
1584 
1585 	case RFCOMM_RPN:
1586 		rfcomm_recv_rpn(s, cr, len, skb);
1587 		break;
1588 
1589 	case RFCOMM_RLS:
1590 		rfcomm_recv_rls(s, cr, skb);
1591 		break;
1592 
1593 	case RFCOMM_MSC:
1594 		rfcomm_recv_msc(s, cr, skb);
1595 		break;
1596 
1597 	case RFCOMM_FCOFF:
1598 		if (cr) {
1599 			set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1600 			rfcomm_send_fcoff(s, 0);
1601 		}
1602 		break;
1603 
1604 	case RFCOMM_FCON:
1605 		if (cr) {
1606 			clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1607 			rfcomm_send_fcon(s, 0);
1608 		}
1609 		break;
1610 
1611 	case RFCOMM_TEST:
1612 		if (cr)
1613 			rfcomm_send_test(s, 0, skb->data, skb->len);
1614 		break;
1615 
1616 	case RFCOMM_NSC:
1617 		break;
1618 
1619 	default:
1620 		BT_ERR("Unknown control type 0x%02x", type);
1621 		rfcomm_send_nsc(s, cr, type);
1622 		break;
1623 	}
1624 	return 0;
1625 }
1626 
1627 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1628 {
1629 	struct rfcomm_dlc *d;
1630 
1631 	BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1632 
1633 	d = rfcomm_dlc_get(s, dlci);
1634 	if (!d) {
1635 		rfcomm_send_dm(s, dlci);
1636 		goto drop;
1637 	}
1638 
1639 	if (pf && d->cfc) {
1640 		u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1641 
1642 		d->tx_credits += credits;
1643 		if (d->tx_credits)
1644 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1645 	}
1646 
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;
1653 	}
1654 
1655 drop:
1656 	kfree_skb(skb);
1657 	return 0;
1658 }
1659 
1660 static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
1661 {
1662 	struct rfcomm_hdr *hdr = (void *) skb->data;
1663 	u8 type, dlci, fcs;
1664 
1665 	dlci = __get_dlci(hdr->addr);
1666 	type = __get_type(hdr->ctrl);
1667 
1668 	/* Trim FCS */
1669 	skb->len--; skb->tail--;
1670 	fcs = *(u8 *)skb_tail_pointer(skb);
1671 
1672 	if (__check_fcs(skb->data, type, fcs)) {
1673 		BT_ERR("bad checksum in packet");
1674 		kfree_skb(skb);
1675 		return -EILSEQ;
1676 	}
1677 
1678 	if (__test_ea(hdr->len))
1679 		skb_pull(skb, 3);
1680 	else
1681 		skb_pull(skb, 4);
1682 
1683 	switch (type) {
1684 	case RFCOMM_SABM:
1685 		if (__test_pf(hdr->ctrl))
1686 			rfcomm_recv_sabm(s, dlci);
1687 		break;
1688 
1689 	case RFCOMM_DISC:
1690 		if (__test_pf(hdr->ctrl))
1691 			rfcomm_recv_disc(s, dlci);
1692 		break;
1693 
1694 	case RFCOMM_UA:
1695 		if (__test_pf(hdr->ctrl))
1696 			rfcomm_recv_ua(s, dlci);
1697 		break;
1698 
1699 	case RFCOMM_DM:
1700 		rfcomm_recv_dm(s, dlci);
1701 		break;
1702 
1703 	case RFCOMM_UIH:
1704 		if (dlci)
1705 			return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1706 
1707 		rfcomm_recv_mcc(s, skb);
1708 		break;
1709 
1710 	default:
1711 		BT_ERR("Unknown packet type 0x%02x", type);
1712 		break;
1713 	}
1714 	kfree_skb(skb);
1715 	return 0;
1716 }
1717 
1718 /* ---- Connection and data processing ---- */
1719 
1720 static void rfcomm_process_connect(struct rfcomm_session *s)
1721 {
1722 	struct rfcomm_dlc *d;
1723 	struct list_head *p, *n;
1724 
1725 	BT_DBG("session %p state %ld", s, s->state);
1726 
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);
1736 			}
1737 		}
1738 	}
1739 }
1740 
1741 /* Send data queued for the DLC.
1742  * Return number of frames left in the queue.
1743  */
1744 static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
1745 {
1746 	struct sk_buff *skb;
1747 	int err;
1748 
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);
1751 
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);
1755 
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;
1763 		}
1764 	} else {
1765 		/* CFC disabled.
1766 		 * Give ourselves some credits */
1767 		d->tx_credits = 5;
1768 	}
1769 
1770 	if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1771 		return skb_queue_len(&d->tx_queue);
1772 
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;
1778 		}
1779 		kfree_skb(skb);
1780 		d->tx_credits--;
1781 	}
1782 
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);
1787 	}
1788 
1789 	return skb_queue_len(&d->tx_queue);
1790 }
1791 
1792 static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
1793 {
1794 	struct rfcomm_dlc *d;
1795 	struct list_head *p, *n;
1796 
1797 	BT_DBG("session %p state %ld", s, s->state);
1798 
1799 	list_for_each_safe(p, n, &s->dlcs) {
1800 		d = list_entry(p, struct rfcomm_dlc, list);
1801 
1802 		if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1803 			__rfcomm_dlc_close(d, ETIMEDOUT);
1804 			continue;
1805 		}
1806 
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);
1816 
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);
1823 			}
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;
1833 		}
1834 
1835 		if (test_bit(RFCOMM_SEC_PENDING, &d->flags))
1836 			continue;
1837 
1838 		if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1839 			continue;
1840 
1841 		if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1842 						d->mscex == RFCOMM_MSCEX_OK)
1843 			rfcomm_process_tx(d);
1844 	}
1845 }
1846 
1847 static inline void rfcomm_process_rx(struct rfcomm_session *s)
1848 {
1849 	struct socket *sock = s->sock;
1850 	struct sock *sk = sock->sk;
1851 	struct sk_buff *skb;
1852 
1853 	BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
1854 
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);
1859 	}
1860 
1861 	if (sk->sk_state == BT_CLOSED) {
1862 		if (!s->initiator)
1863 			rfcomm_session_put(s);
1864 
1865 		rfcomm_session_close(s, sk->sk_err);
1866 	}
1867 }
1868 
1869 static inline void rfcomm_accept_connection(struct rfcomm_session *s)
1870 {
1871 	struct socket *sock = s->sock, *nsock;
1872 	int err;
1873 
1874 	/* Fast check for a new connection.
1875 	 * Avoids unnesesary socket allocations. */
1876 	if (list_empty(&bt_sk(sock->sk)->accept_q))
1877 		return;
1878 
1879 	BT_DBG("session %p", s);
1880 
1881 	err = kernel_accept(sock, &nsock, O_NONBLOCK);
1882 	if (err < 0)
1883 		return;
1884 
1885 	/* Set our callbacks */
1886 	nsock->sk->sk_data_ready   = rfcomm_l2data_ready;
1887 	nsock->sk->sk_state_change = rfcomm_l2state_change;
1888 
1889 	s = rfcomm_session_add(nsock, BT_OPEN);
1890 	if (s) {
1891 		rfcomm_session_hold(s);
1892 
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;
1897 
1898 		rfcomm_schedule();
1899 	} else
1900 		sock_release(nsock);
1901 }
1902 
1903 static inline void rfcomm_check_connection(struct rfcomm_session *s)
1904 {
1905 	struct sock *sk = s->sock->sk;
1906 
1907 	BT_DBG("%p state %ld", s, s->state);
1908 
1909 	switch (sk->sk_state) {
1910 	case BT_CONNECTED:
1911 		s->state = BT_CONNECT;
1912 
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;
1916 
1917 		rfcomm_send_sabm(s, 0);
1918 		break;
1919 
1920 	case BT_CLOSED:
1921 		s->state = BT_CLOSED;
1922 		rfcomm_session_close(s, sk->sk_err);
1923 		break;
1924 	}
1925 }
1926 
1927 static inline void rfcomm_process_sessions(void)
1928 {
1929 	struct list_head *p, *n;
1930 
1931 	rfcomm_lock();
1932 
1933 	list_for_each_safe(p, n, &session_list) {
1934 		struct rfcomm_session *s;
1935 		s = list_entry(p, struct rfcomm_session, list);
1936 
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;
1942 		}
1943 
1944 		if (s->state == BT_LISTEN) {
1945 			rfcomm_accept_connection(s);
1946 			continue;
1947 		}
1948 
1949 		rfcomm_session_hold(s);
1950 
1951 		switch (s->state) {
1952 		case BT_BOUND:
1953 			rfcomm_check_connection(s);
1954 			break;
1955 
1956 		default:
1957 			rfcomm_process_rx(s);
1958 			break;
1959 		}
1960 
1961 		rfcomm_process_dlcs(s);
1962 
1963 		rfcomm_session_put(s);
1964 	}
1965 
1966 	rfcomm_unlock();
1967 }
1968 
1969 static int rfcomm_add_listener(bdaddr_t *ba)
1970 {
1971 	struct sockaddr_l2 addr;
1972 	struct socket *sock;
1973 	struct sock *sk;
1974 	struct rfcomm_session *s;
1975 	int    err = 0;
1976 
1977 	/* Create socket */
1978 	err = rfcomm_l2sock_create(&sock);
1979 	if (err < 0) {
1980 		BT_ERR("Create socket failed %d", err);
1981 		return err;
1982 	}
1983 
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;
1993 	}
1994 
1995 	/* Set L2CAP options */
1996 	sk = sock->sk;
1997 	lock_sock(sk);
1998 	l2cap_pi(sk)->chan->imtu = l2cap_mtu;
1999 	release_sock(sk);
2000 
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;
2006 	}
2007 
2008 	/* Add listening session */
2009 	s = rfcomm_session_add(sock, BT_LISTEN);
2010 	if (!s)
2011 		goto failed;
2012 
2013 	rfcomm_session_hold(s);
2014 	return 0;
2015 failed:
2016 	sock_release(sock);
2017 	return err;
2018 }
2019 
2020 static void rfcomm_kill_listener(void)
2021 {
2022 	struct rfcomm_session *s;
2023 	struct list_head *p, *n;
2024 
2025 	BT_DBG("");
2026 
2027 	list_for_each_safe(p, n, &session_list) {
2028 		s = list_entry(p, struct rfcomm_session, list);
2029 		rfcomm_session_del(s);
2030 	}
2031 }
2032 
2033 static int rfcomm_run(void *unused)
2034 {
2035 	BT_DBG("");
2036 
2037 	set_user_nice(current, -10);
2038 
2039 	rfcomm_add_listener(BDADDR_ANY);
2040 
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();
2047 		}
2048 		set_current_state(TASK_RUNNING);
2049 
2050 		/* Process stuff */
2051 		clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
2052 		rfcomm_process_sessions();
2053 	}
2054 
2055 	rfcomm_kill_listener();
2056 
2057 	return 0;
2058 }
2059 
2060 static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
2061 {
2062 	struct rfcomm_session *s;
2063 	struct rfcomm_dlc *d;
2064 	struct list_head *p, *n;
2065 
2066 	BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
2067 
2068 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
2069 	if (!s)
2070 		return;
2071 
2072 	rfcomm_session_hold(s);
2073 
2074 	list_for_each_safe(p, n, &s->dlcs) {
2075 		d = list_entry(p, struct rfcomm_dlc, list);
2076 
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;
2082 			}
2083 		}
2084 
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;
2093 			}
2094 		}
2095 
2096 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
2097 			continue;
2098 
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);
2103 	}
2104 
2105 	rfcomm_session_put(s);
2106 
2107 	rfcomm_schedule();
2108 }
2109 
2110 static struct hci_cb rfcomm_cb = {
2111 	.name		= "RFCOMM",
2112 	.security_cfm	= rfcomm_security_cfm
2113 };
2114 
2115 static int rfcomm_dlc_debugfs_show(struct seq_file *f, void *x)
2116 {
2117 	struct rfcomm_session *s;
2118 	struct list_head *pp, *p;
2119 
2120 	rfcomm_lock();
2121 
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);
2127 
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);
2133 		}
2134 	}
2135 
2136 	rfcomm_unlock();
2137 
2138 	return 0;
2139 }
2140 
2141 static int rfcomm_dlc_debugfs_open(struct inode *inode, struct file *file)
2142 {
2143 	return single_open(file, rfcomm_dlc_debugfs_show, inode->i_private);
2144 }
2145 
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,
2151 };
2152 
2153 static struct dentry *rfcomm_dlc_debugfs;
2154 
2155 /* ---- Initialization ---- */
2156 static int __init rfcomm_init(void)
2157 {
2158 	int err;
2159 
2160 	hci_register_cb(&rfcomm_cb);
2161 
2162 	rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd");
2163 	if (IS_ERR(rfcomm_thread)) {
2164 		err = PTR_ERR(rfcomm_thread);
2165 		goto unregister;
2166 	}
2167 
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");
2173 	}
2174 
2175 	err = rfcomm_init_ttys();
2176 	if (err < 0)
2177 		goto stop;
2178 
2179 	err = rfcomm_init_sockets();
2180 	if (err < 0)
2181 		goto cleanup;
2182 
2183 	BT_INFO("RFCOMM ver %s", VERSION);
2184 
2185 	return 0;
2186 
2187 cleanup:
2188 	rfcomm_cleanup_ttys();
2189 
2190 stop:
2191 	kthread_stop(rfcomm_thread);
2192 
2193 unregister:
2194 	hci_unregister_cb(&rfcomm_cb);
2195 
2196 	return err;
2197 }
2198 
2199 static void __exit rfcomm_exit(void)
2200 {
2201 	debugfs_remove(rfcomm_dlc_debugfs);
2202 
2203 	hci_unregister_cb(&rfcomm_cb);
2204 
2205 	kthread_stop(rfcomm_thread);
2206 
2207 	rfcomm_cleanup_ttys();
2208 
2209 	rfcomm_cleanup_sockets();
2210 }
2211 
2212 module_init(rfcomm_init);
2213 module_exit(rfcomm_exit);
2214 
2215 module_param(disable_cfc, bool, 0644);
2216 MODULE_PARM_DESC(disable_cfc, "Disable credit based flow control");
2217 
2218 module_param(channel_mtu, int, 0644);
2219 MODULE_PARM_DESC(channel_mtu, "Default MTU for the RFCOMM channel");
2220 
2221 module_param(l2cap_mtu, uint, 0644);
2222 MODULE_PARM_DESC(l2cap_mtu, "Default MTU for the L2CAP connection");
2223 
2224 module_param(l2cap_ertm, bool, 0644);
2225 MODULE_PARM_DESC(l2cap_ertm, "Use L2CAP ERTM mode for connection");
2226 
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");
2232