xref: /openbmc/linux/net/bluetooth/rfcomm/core.c (revision 64c70b1c)
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  * $Id: core.c,v 1.42 2002/10/01 23:26:25 maxk Exp $
28  */
29 
30 #include <linux/module.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/sched.h>
34 #include <linux/signal.h>
35 #include <linux/init.h>
36 #include <linux/wait.h>
37 #include <linux/device.h>
38 #include <linux/net.h>
39 #include <linux/mutex.h>
40 
41 #include <net/sock.h>
42 #include <asm/uaccess.h>
43 #include <asm/unaligned.h>
44 
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
47 #include <net/bluetooth/l2cap.h>
48 #include <net/bluetooth/rfcomm.h>
49 
50 #ifndef CONFIG_BT_RFCOMM_DEBUG
51 #undef  BT_DBG
52 #define BT_DBG(D...)
53 #endif
54 
55 #define VERSION "1.8"
56 
57 static int disable_cfc = 0;
58 static int channel_mtu = -1;
59 static unsigned int l2cap_mtu = RFCOMM_MAX_L2CAP_MTU;
60 
61 static struct task_struct *rfcomm_thread;
62 
63 static DEFINE_MUTEX(rfcomm_mutex);
64 #define rfcomm_lock()	mutex_lock(&rfcomm_mutex)
65 #define rfcomm_unlock()	mutex_unlock(&rfcomm_mutex)
66 
67 static unsigned long rfcomm_event;
68 
69 static LIST_HEAD(session_list);
70 static atomic_t terminate, running;
71 
72 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
73 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
74 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
75 static int rfcomm_queue_disc(struct rfcomm_dlc *d);
76 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
77 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
78 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
79 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
80 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
81 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
82 
83 static void rfcomm_process_connect(struct rfcomm_session *s);
84 
85 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, 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(uint event)
120 {
121 	if (!rfcomm_thread)
122 		return;
123 	//set_bit(event, &rfcomm_event);
124 	set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
125 	wake_up_process(rfcomm_thread);
126 }
127 
128 static inline void rfcomm_session_put(struct rfcomm_session *s)
129 {
130 	if (atomic_dec_and_test(&s->refcnt))
131 		rfcomm_session_del(s);
132 }
133 
134 /* ---- RFCOMM FCS computation ---- */
135 
136 /* reversed, 8-bit, poly=0x07 */
137 static unsigned char rfcomm_crc_table[256] = {
138 	0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
139 	0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
140 	0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
141 	0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
142 
143 	0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
144 	0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
145 	0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
146 	0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
147 
148 	0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
149 	0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
150 	0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
151 	0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
152 
153 	0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
154 	0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
155 	0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
156 	0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
157 
158 	0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
159 	0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
160 	0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
161 	0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
162 
163 	0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
164 	0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
165 	0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
166 	0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
167 
168 	0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
169 	0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
170 	0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
171 	0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
172 
173 	0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
174 	0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
175 	0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
176 	0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
177 };
178 
179 /* CRC on 2 bytes */
180 #define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
181 
182 /* FCS on 2 bytes */
183 static inline u8 __fcs(u8 *data)
184 {
185 	return (0xff - __crc(data));
186 }
187 
188 /* FCS on 3 bytes */
189 static inline u8 __fcs2(u8 *data)
190 {
191 	return (0xff - rfcomm_crc_table[__crc(data) ^ data[2]]);
192 }
193 
194 /* Check FCS */
195 static inline int __check_fcs(u8 *data, int type, u8 fcs)
196 {
197 	u8 f = __crc(data);
198 
199 	if (type != RFCOMM_UIH)
200 		f = rfcomm_crc_table[f ^ data[2]];
201 
202 	return rfcomm_crc_table[f ^ fcs] != 0xcf;
203 }
204 
205 /* ---- L2CAP callbacks ---- */
206 static void rfcomm_l2state_change(struct sock *sk)
207 {
208 	BT_DBG("%p state %d", sk, sk->sk_state);
209 	rfcomm_schedule(RFCOMM_SCHED_STATE);
210 }
211 
212 static void rfcomm_l2data_ready(struct sock *sk, int bytes)
213 {
214 	BT_DBG("%p bytes %d", sk, bytes);
215 	rfcomm_schedule(RFCOMM_SCHED_RX);
216 }
217 
218 static int rfcomm_l2sock_create(struct socket **sock)
219 {
220 	int err;
221 
222 	BT_DBG("");
223 
224 	err = sock_create_kern(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
225 	if (!err) {
226 		struct sock *sk = (*sock)->sk;
227 		sk->sk_data_ready   = rfcomm_l2data_ready;
228 		sk->sk_state_change = rfcomm_l2state_change;
229 	}
230 	return err;
231 }
232 
233 /* ---- RFCOMM DLCs ---- */
234 static void rfcomm_dlc_timeout(unsigned long arg)
235 {
236 	struct rfcomm_dlc *d = (void *) arg;
237 
238 	BT_DBG("dlc %p state %ld", d, d->state);
239 
240 	set_bit(RFCOMM_TIMED_OUT, &d->flags);
241 	rfcomm_dlc_put(d);
242 	rfcomm_schedule(RFCOMM_SCHED_TIMEO);
243 }
244 
245 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
246 {
247 	BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
248 
249 	if (!mod_timer(&d->timer, jiffies + timeout))
250 		rfcomm_dlc_hold(d);
251 }
252 
253 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
254 {
255 	BT_DBG("dlc %p state %ld", d, d->state);
256 
257 	if (timer_pending(&d->timer) && del_timer(&d->timer))
258 		rfcomm_dlc_put(d);
259 }
260 
261 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
262 {
263 	BT_DBG("%p", d);
264 
265 	d->state      = BT_OPEN;
266 	d->flags      = 0;
267 	d->mscex      = 0;
268 	d->mtu        = RFCOMM_DEFAULT_MTU;
269 	d->v24_sig    = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
270 
271 	d->cfc        = RFCOMM_CFC_DISABLED;
272 	d->rx_credits = RFCOMM_DEFAULT_CREDITS;
273 }
274 
275 struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio)
276 {
277 	struct rfcomm_dlc *d = kzalloc(sizeof(*d), prio);
278 
279 	if (!d)
280 		return NULL;
281 
282 	init_timer(&d->timer);
283 	d->timer.function = rfcomm_dlc_timeout;
284 	d->timer.data = (unsigned long) d;
285 
286 	skb_queue_head_init(&d->tx_queue);
287 	spin_lock_init(&d->lock);
288 	atomic_set(&d->refcnt, 1);
289 
290 	rfcomm_dlc_clear_state(d);
291 
292 	BT_DBG("%p", d);
293 
294 	return d;
295 }
296 
297 void rfcomm_dlc_free(struct rfcomm_dlc *d)
298 {
299 	BT_DBG("%p", d);
300 
301 	skb_queue_purge(&d->tx_queue);
302 	kfree(d);
303 }
304 
305 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
306 {
307 	BT_DBG("dlc %p session %p", d, s);
308 
309 	rfcomm_session_hold(s);
310 
311 	rfcomm_dlc_hold(d);
312 	list_add(&d->list, &s->dlcs);
313 	d->session = s;
314 }
315 
316 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
317 {
318 	struct rfcomm_session *s = d->session;
319 
320 	BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
321 
322 	list_del(&d->list);
323 	d->session = NULL;
324 	rfcomm_dlc_put(d);
325 
326 	rfcomm_session_put(s);
327 }
328 
329 static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
330 {
331 	struct rfcomm_dlc *d;
332 	struct list_head *p;
333 
334 	list_for_each(p, &s->dlcs) {
335 		d = list_entry(p, struct rfcomm_dlc, list);
336 		if (d->dlci == dlci)
337 			return d;
338 	}
339 	return NULL;
340 }
341 
342 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
343 {
344 	struct rfcomm_session *s;
345 	int err = 0;
346 	u8 dlci;
347 
348 	BT_DBG("dlc %p state %ld %s %s channel %d",
349 			d, d->state, batostr(src), batostr(dst), channel);
350 
351 	if (channel < 1 || channel > 30)
352 		return -EINVAL;
353 
354 	if (d->state != BT_OPEN && d->state != BT_CLOSED)
355 		return 0;
356 
357 	s = rfcomm_session_get(src, dst);
358 	if (!s) {
359 		s = rfcomm_session_create(src, dst, &err);
360 		if (!s)
361 			return err;
362 	}
363 
364 	dlci = __dlci(!s->initiator, channel);
365 
366 	/* Check if DLCI already exists */
367 	if (rfcomm_dlc_get(s, dlci))
368 		return -EBUSY;
369 
370 	rfcomm_dlc_clear_state(d);
371 
372 	d->dlci     = dlci;
373 	d->addr     = __addr(s->initiator, dlci);
374 	d->priority = 7;
375 
376 	d->state    = BT_CONFIG;
377 	rfcomm_dlc_link(s, d);
378 
379 	d->mtu = s->mtu;
380 	d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
381 
382 	if (s->state == BT_CONNECTED)
383 		rfcomm_send_pn(s, 1, d);
384 	rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
385 	return 0;
386 }
387 
388 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
389 {
390 	int r;
391 
392 	rfcomm_lock();
393 
394 	r = __rfcomm_dlc_open(d, src, dst, channel);
395 
396 	rfcomm_unlock();
397 	return r;
398 }
399 
400 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
401 {
402 	struct rfcomm_session *s = d->session;
403 	if (!s)
404 		return 0;
405 
406 	BT_DBG("dlc %p state %ld dlci %d err %d session %p",
407 			d, d->state, d->dlci, err, s);
408 
409 	switch (d->state) {
410 	case BT_CONNECTED:
411 	case BT_CONFIG:
412 	case BT_CONNECT:
413 		d->state = BT_DISCONN;
414 		if (skb_queue_empty(&d->tx_queue)) {
415 			rfcomm_send_disc(s, d->dlci);
416 			rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
417 		} else {
418 			rfcomm_queue_disc(d);
419 			rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
420 		}
421 		break;
422 
423 	default:
424 		rfcomm_dlc_clear_timer(d);
425 
426 		rfcomm_dlc_lock(d);
427 		d->state = BT_CLOSED;
428 		d->state_change(d, err);
429 		rfcomm_dlc_unlock(d);
430 
431 		skb_queue_purge(&d->tx_queue);
432 		rfcomm_dlc_unlink(d);
433 	}
434 
435 	return 0;
436 }
437 
438 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
439 {
440 	int r;
441 
442 	rfcomm_lock();
443 
444 	r = __rfcomm_dlc_close(d, err);
445 
446 	rfcomm_unlock();
447 	return r;
448 }
449 
450 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
451 {
452 	int len = skb->len;
453 
454 	if (d->state != BT_CONNECTED)
455 		return -ENOTCONN;
456 
457 	BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
458 
459 	if (len > d->mtu)
460 		return -EINVAL;
461 
462 	rfcomm_make_uih(skb, d->addr);
463 	skb_queue_tail(&d->tx_queue, skb);
464 
465 	if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
466 		rfcomm_schedule(RFCOMM_SCHED_TX);
467 	return len;
468 }
469 
470 void fastcall __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
471 {
472 	BT_DBG("dlc %p state %ld", d, d->state);
473 
474 	if (!d->cfc) {
475 		d->v24_sig |= RFCOMM_V24_FC;
476 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
477 	}
478 	rfcomm_schedule(RFCOMM_SCHED_TX);
479 }
480 
481 void fastcall __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
482 {
483 	BT_DBG("dlc %p state %ld", d, d->state);
484 
485 	if (!d->cfc) {
486 		d->v24_sig &= ~RFCOMM_V24_FC;
487 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
488 	}
489 	rfcomm_schedule(RFCOMM_SCHED_TX);
490 }
491 
492 /*
493    Set/get modem status functions use _local_ status i.e. what we report
494    to the other side.
495    Remote status is provided by dlc->modem_status() callback.
496  */
497 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
498 {
499 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
500 			d, d->state, v24_sig);
501 
502 	if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
503 		v24_sig |= RFCOMM_V24_FC;
504 	else
505 		v24_sig &= ~RFCOMM_V24_FC;
506 
507 	d->v24_sig = v24_sig;
508 
509 	if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
510 		rfcomm_schedule(RFCOMM_SCHED_TX);
511 
512 	return 0;
513 }
514 
515 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
516 {
517 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
518 			d, d->state, d->v24_sig);
519 
520 	*v24_sig = d->v24_sig;
521 	return 0;
522 }
523 
524 /* ---- RFCOMM sessions ---- */
525 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
526 {
527 	struct rfcomm_session *s = kzalloc(sizeof(*s), GFP_KERNEL);
528 
529 	if (!s)
530 		return NULL;
531 
532 	BT_DBG("session %p sock %p", s, sock);
533 
534 	INIT_LIST_HEAD(&s->dlcs);
535 	s->state = state;
536 	s->sock  = sock;
537 
538 	s->mtu = RFCOMM_DEFAULT_MTU;
539 	s->cfc = disable_cfc ? RFCOMM_CFC_DISABLED : RFCOMM_CFC_UNKNOWN;
540 
541 	/* Do not increment module usage count for listening sessions.
542 	 * Otherwise we won't be able to unload the module. */
543 	if (state != BT_LISTEN)
544 		if (!try_module_get(THIS_MODULE)) {
545 			kfree(s);
546 			return NULL;
547 		}
548 
549 	list_add(&s->list, &session_list);
550 
551 	return s;
552 }
553 
554 static void rfcomm_session_del(struct rfcomm_session *s)
555 {
556 	int state = s->state;
557 
558 	BT_DBG("session %p state %ld", s, s->state);
559 
560 	list_del(&s->list);
561 
562 	if (state == BT_CONNECTED)
563 		rfcomm_send_disc(s, 0);
564 
565 	sock_release(s->sock);
566 	kfree(s);
567 
568 	if (state != BT_LISTEN)
569 		module_put(THIS_MODULE);
570 }
571 
572 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
573 {
574 	struct rfcomm_session *s;
575 	struct list_head *p, *n;
576 	struct bt_sock *sk;
577 	list_for_each_safe(p, n, &session_list) {
578 		s = list_entry(p, struct rfcomm_session, list);
579 		sk = bt_sk(s->sock->sk);
580 
581 		if ((!bacmp(src, BDADDR_ANY) || !bacmp(&sk->src, src)) &&
582 				!bacmp(&sk->dst, dst))
583 			return s;
584 	}
585 	return NULL;
586 }
587 
588 static void rfcomm_session_close(struct rfcomm_session *s, int err)
589 {
590 	struct rfcomm_dlc *d;
591 	struct list_head *p, *n;
592 
593 	BT_DBG("session %p state %ld err %d", s, s->state, err);
594 
595 	rfcomm_session_hold(s);
596 
597 	s->state = BT_CLOSED;
598 
599 	/* Close all dlcs */
600 	list_for_each_safe(p, n, &s->dlcs) {
601 		d = list_entry(p, struct rfcomm_dlc, list);
602 		d->state = BT_CLOSED;
603 		__rfcomm_dlc_close(d, err);
604 	}
605 
606 	rfcomm_session_put(s);
607 }
608 
609 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
610 {
611 	struct rfcomm_session *s = NULL;
612 	struct sockaddr_l2 addr;
613 	struct socket *sock;
614 	struct sock *sk;
615 
616 	BT_DBG("%s %s", batostr(src), batostr(dst));
617 
618 	*err = rfcomm_l2sock_create(&sock);
619 	if (*err < 0)
620 		return NULL;
621 
622 	bacpy(&addr.l2_bdaddr, src);
623 	addr.l2_family = AF_BLUETOOTH;
624 	addr.l2_psm    = 0;
625 	*err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
626 	if (*err < 0)
627 		goto failed;
628 
629 	/* Set L2CAP options */
630 	sk = sock->sk;
631 	lock_sock(sk);
632 	l2cap_pi(sk)->imtu = l2cap_mtu;
633 	release_sock(sk);
634 
635 	s = rfcomm_session_add(sock, BT_BOUND);
636 	if (!s) {
637 		*err = -ENOMEM;
638 		goto failed;
639 	}
640 
641 	s->initiator = 1;
642 
643 	bacpy(&addr.l2_bdaddr, dst);
644 	addr.l2_family = AF_BLUETOOTH;
645 	addr.l2_psm    = htobs(RFCOMM_PSM);
646 	*err = kernel_connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
647 	if (*err == 0 || *err == -EINPROGRESS)
648 		return s;
649 
650 	rfcomm_session_del(s);
651 	return NULL;
652 
653 failed:
654 	sock_release(sock);
655 	return NULL;
656 }
657 
658 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
659 {
660 	struct sock *sk = s->sock->sk;
661 	if (src)
662 		bacpy(src, &bt_sk(sk)->src);
663 	if (dst)
664 		bacpy(dst, &bt_sk(sk)->dst);
665 }
666 
667 /* ---- RFCOMM frame sending ---- */
668 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
669 {
670 	struct socket *sock = s->sock;
671 	struct kvec iv = { data, len };
672 	struct msghdr msg;
673 
674 	BT_DBG("session %p len %d", s, len);
675 
676 	memset(&msg, 0, sizeof(msg));
677 
678 	return kernel_sendmsg(sock, &msg, &iv, 1, len);
679 }
680 
681 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
682 {
683 	struct rfcomm_cmd cmd;
684 
685 	BT_DBG("%p dlci %d", s, dlci);
686 
687 	cmd.addr = __addr(s->initiator, dlci);
688 	cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
689 	cmd.len  = __len8(0);
690 	cmd.fcs  = __fcs2((u8 *) &cmd);
691 
692 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
693 }
694 
695 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
696 {
697 	struct rfcomm_cmd cmd;
698 
699 	BT_DBG("%p dlci %d", s, dlci);
700 
701 	cmd.addr = __addr(!s->initiator, dlci);
702 	cmd.ctrl = __ctrl(RFCOMM_UA, 1);
703 	cmd.len  = __len8(0);
704 	cmd.fcs  = __fcs2((u8 *) &cmd);
705 
706 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
707 }
708 
709 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
710 {
711 	struct rfcomm_cmd cmd;
712 
713 	BT_DBG("%p dlci %d", s, dlci);
714 
715 	cmd.addr = __addr(s->initiator, dlci);
716 	cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
717 	cmd.len  = __len8(0);
718 	cmd.fcs  = __fcs2((u8 *) &cmd);
719 
720 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
721 }
722 
723 static int rfcomm_queue_disc(struct rfcomm_dlc *d)
724 {
725 	struct rfcomm_cmd *cmd;
726 	struct sk_buff *skb;
727 
728 	BT_DBG("dlc %p dlci %d", d, d->dlci);
729 
730 	skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
731 	if (!skb)
732 		return -ENOMEM;
733 
734 	cmd = (void *) __skb_put(skb, sizeof(*cmd));
735 	cmd->addr = d->addr;
736 	cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
737 	cmd->len  = __len8(0);
738 	cmd->fcs  = __fcs2((u8 *) cmd);
739 
740 	skb_queue_tail(&d->tx_queue, skb);
741 	rfcomm_schedule(RFCOMM_SCHED_TX);
742 	return 0;
743 }
744 
745 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
746 {
747 	struct rfcomm_cmd cmd;
748 
749 	BT_DBG("%p dlci %d", s, dlci);
750 
751 	cmd.addr = __addr(!s->initiator, dlci);
752 	cmd.ctrl = __ctrl(RFCOMM_DM, 1);
753 	cmd.len  = __len8(0);
754 	cmd.fcs  = __fcs2((u8 *) &cmd);
755 
756 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
757 }
758 
759 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
760 {
761 	struct rfcomm_hdr *hdr;
762 	struct rfcomm_mcc *mcc;
763 	u8 buf[16], *ptr = buf;
764 
765 	BT_DBG("%p cr %d type %d", s, cr, type);
766 
767 	hdr = (void *) ptr; ptr += sizeof(*hdr);
768 	hdr->addr = __addr(s->initiator, 0);
769 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
770 	hdr->len  = __len8(sizeof(*mcc) + 1);
771 
772 	mcc = (void *) ptr; ptr += sizeof(*mcc);
773 	mcc->type = __mcc_type(cr, RFCOMM_NSC);
774 	mcc->len  = __len8(1);
775 
776 	/* Type that we didn't like */
777 	*ptr = __mcc_type(cr, type); ptr++;
778 
779 	*ptr = __fcs(buf); ptr++;
780 
781 	return rfcomm_send_frame(s, buf, ptr - buf);
782 }
783 
784 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
785 {
786 	struct rfcomm_hdr *hdr;
787 	struct rfcomm_mcc *mcc;
788 	struct rfcomm_pn  *pn;
789 	u8 buf[16], *ptr = buf;
790 
791 	BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
792 
793 	hdr = (void *) ptr; ptr += sizeof(*hdr);
794 	hdr->addr = __addr(s->initiator, 0);
795 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
796 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*pn));
797 
798 	mcc = (void *) ptr; ptr += sizeof(*mcc);
799 	mcc->type = __mcc_type(cr, RFCOMM_PN);
800 	mcc->len  = __len8(sizeof(*pn));
801 
802 	pn = (void *) ptr; ptr += sizeof(*pn);
803 	pn->dlci        = d->dlci;
804 	pn->priority    = d->priority;
805 	pn->ack_timer   = 0;
806 	pn->max_retrans = 0;
807 
808 	if (s->cfc) {
809 		pn->flow_ctrl = cr ? 0xf0 : 0xe0;
810 		pn->credits = RFCOMM_DEFAULT_CREDITS;
811 	} else {
812 		pn->flow_ctrl = 0;
813 		pn->credits   = 0;
814 	}
815 
816 	if (cr && channel_mtu >= 0)
817 		pn->mtu = htobs(channel_mtu);
818 	else
819 		pn->mtu = htobs(d->mtu);
820 
821 	*ptr = __fcs(buf); ptr++;
822 
823 	return rfcomm_send_frame(s, buf, ptr - buf);
824 }
825 
826 int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
827 			u8 bit_rate, u8 data_bits, u8 stop_bits,
828 			u8 parity, u8 flow_ctrl_settings,
829 			u8 xon_char, u8 xoff_char, u16 param_mask)
830 {
831 	struct rfcomm_hdr *hdr;
832 	struct rfcomm_mcc *mcc;
833 	struct rfcomm_rpn *rpn;
834 	u8 buf[16], *ptr = buf;
835 
836 	BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
837 			" flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
838 		s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
839 		flow_ctrl_settings, xon_char, xoff_char, param_mask);
840 
841 	hdr = (void *) ptr; ptr += sizeof(*hdr);
842 	hdr->addr = __addr(s->initiator, 0);
843 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
844 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*rpn));
845 
846 	mcc = (void *) ptr; ptr += sizeof(*mcc);
847 	mcc->type = __mcc_type(cr, RFCOMM_RPN);
848 	mcc->len  = __len8(sizeof(*rpn));
849 
850 	rpn = (void *) ptr; ptr += sizeof(*rpn);
851 	rpn->dlci          = __addr(1, dlci);
852 	rpn->bit_rate      = bit_rate;
853 	rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
854 	rpn->flow_ctrl     = flow_ctrl_settings;
855 	rpn->xon_char      = xon_char;
856 	rpn->xoff_char     = xoff_char;
857 	rpn->param_mask    = cpu_to_le16(param_mask);
858 
859 	*ptr = __fcs(buf); ptr++;
860 
861 	return rfcomm_send_frame(s, buf, ptr - buf);
862 }
863 
864 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
865 {
866 	struct rfcomm_hdr *hdr;
867 	struct rfcomm_mcc *mcc;
868 	struct rfcomm_rls *rls;
869 	u8 buf[16], *ptr = buf;
870 
871 	BT_DBG("%p cr %d status 0x%x", s, cr, status);
872 
873 	hdr = (void *) ptr; ptr += sizeof(*hdr);
874 	hdr->addr = __addr(s->initiator, 0);
875 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
876 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*rls));
877 
878 	mcc = (void *) ptr; ptr += sizeof(*mcc);
879 	mcc->type = __mcc_type(cr, RFCOMM_RLS);
880 	mcc->len  = __len8(sizeof(*rls));
881 
882 	rls = (void *) ptr; ptr += sizeof(*rls);
883 	rls->dlci   = __addr(1, dlci);
884 	rls->status = status;
885 
886 	*ptr = __fcs(buf); ptr++;
887 
888 	return rfcomm_send_frame(s, buf, ptr - buf);
889 }
890 
891 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
892 {
893 	struct rfcomm_hdr *hdr;
894 	struct rfcomm_mcc *mcc;
895 	struct rfcomm_msc *msc;
896 	u8 buf[16], *ptr = buf;
897 
898 	BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
899 
900 	hdr = (void *) ptr; ptr += sizeof(*hdr);
901 	hdr->addr = __addr(s->initiator, 0);
902 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
903 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*msc));
904 
905 	mcc = (void *) ptr; ptr += sizeof(*mcc);
906 	mcc->type = __mcc_type(cr, RFCOMM_MSC);
907 	mcc->len  = __len8(sizeof(*msc));
908 
909 	msc = (void *) ptr; ptr += sizeof(*msc);
910 	msc->dlci    = __addr(1, dlci);
911 	msc->v24_sig = v24_sig | 0x01;
912 
913 	*ptr = __fcs(buf); ptr++;
914 
915 	return rfcomm_send_frame(s, buf, ptr - buf);
916 }
917 
918 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
919 {
920 	struct rfcomm_hdr *hdr;
921 	struct rfcomm_mcc *mcc;
922 	u8 buf[16], *ptr = buf;
923 
924 	BT_DBG("%p cr %d", s, cr);
925 
926 	hdr = (void *) ptr; ptr += sizeof(*hdr);
927 	hdr->addr = __addr(s->initiator, 0);
928 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
929 	hdr->len  = __len8(sizeof(*mcc));
930 
931 	mcc = (void *) ptr; ptr += sizeof(*mcc);
932 	mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
933 	mcc->len  = __len8(0);
934 
935 	*ptr = __fcs(buf); ptr++;
936 
937 	return rfcomm_send_frame(s, buf, ptr - buf);
938 }
939 
940 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
941 {
942 	struct rfcomm_hdr *hdr;
943 	struct rfcomm_mcc *mcc;
944 	u8 buf[16], *ptr = buf;
945 
946 	BT_DBG("%p cr %d", s, cr);
947 
948 	hdr = (void *) ptr; ptr += sizeof(*hdr);
949 	hdr->addr = __addr(s->initiator, 0);
950 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
951 	hdr->len  = __len8(sizeof(*mcc));
952 
953 	mcc = (void *) ptr; ptr += sizeof(*mcc);
954 	mcc->type = __mcc_type(cr, RFCOMM_FCON);
955 	mcc->len  = __len8(0);
956 
957 	*ptr = __fcs(buf); ptr++;
958 
959 	return rfcomm_send_frame(s, buf, ptr - buf);
960 }
961 
962 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
963 {
964 	struct socket *sock = s->sock;
965 	struct kvec iv[3];
966 	struct msghdr msg;
967 	unsigned char hdr[5], crc[1];
968 
969 	if (len > 125)
970 		return -EINVAL;
971 
972 	BT_DBG("%p cr %d", s, cr);
973 
974 	hdr[0] = __addr(s->initiator, 0);
975 	hdr[1] = __ctrl(RFCOMM_UIH, 0);
976 	hdr[2] = 0x01 | ((len + 2) << 1);
977 	hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
978 	hdr[4] = 0x01 | (len << 1);
979 
980 	crc[0] = __fcs(hdr);
981 
982 	iv[0].iov_base = hdr;
983 	iv[0].iov_len  = 5;
984 	iv[1].iov_base = pattern;
985 	iv[1].iov_len  = len;
986 	iv[2].iov_base = crc;
987 	iv[2].iov_len  = 1;
988 
989 	memset(&msg, 0, sizeof(msg));
990 
991 	return kernel_sendmsg(sock, &msg, iv, 3, 6 + len);
992 }
993 
994 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
995 {
996 	struct rfcomm_hdr *hdr;
997 	u8 buf[16], *ptr = buf;
998 
999 	BT_DBG("%p addr %d credits %d", s, addr, credits);
1000 
1001 	hdr = (void *) ptr; ptr += sizeof(*hdr);
1002 	hdr->addr = addr;
1003 	hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
1004 	hdr->len  = __len8(0);
1005 
1006 	*ptr = credits; ptr++;
1007 
1008 	*ptr = __fcs(buf); ptr++;
1009 
1010 	return rfcomm_send_frame(s, buf, ptr - buf);
1011 }
1012 
1013 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
1014 {
1015 	struct rfcomm_hdr *hdr;
1016 	int len = skb->len;
1017 	u8 *crc;
1018 
1019 	if (len > 127) {
1020 		hdr = (void *) skb_push(skb, 4);
1021 		put_unaligned(htobs(__len16(len)), (__le16 *) &hdr->len);
1022 	} else {
1023 		hdr = (void *) skb_push(skb, 3);
1024 		hdr->len = __len8(len);
1025 	}
1026 	hdr->addr = addr;
1027 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1028 
1029 	crc = skb_put(skb, 1);
1030 	*crc = __fcs((void *) hdr);
1031 }
1032 
1033 /* ---- RFCOMM frame reception ---- */
1034 static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
1035 {
1036 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1037 
1038 	if (dlci) {
1039 		/* Data channel */
1040 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1041 		if (!d) {
1042 			rfcomm_send_dm(s, dlci);
1043 			return 0;
1044 		}
1045 
1046 		switch (d->state) {
1047 		case BT_CONNECT:
1048 			rfcomm_dlc_clear_timer(d);
1049 
1050 			rfcomm_dlc_lock(d);
1051 			d->state = BT_CONNECTED;
1052 			d->state_change(d, 0);
1053 			rfcomm_dlc_unlock(d);
1054 
1055 			rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1056 			break;
1057 
1058 		case BT_DISCONN:
1059 			d->state = BT_CLOSED;
1060 			__rfcomm_dlc_close(d, 0);
1061 
1062 			if (list_empty(&s->dlcs)) {
1063 				s->state = BT_DISCONN;
1064 				rfcomm_send_disc(s, 0);
1065 			}
1066 
1067 			break;
1068 		}
1069 	} else {
1070 		/* Control channel */
1071 		switch (s->state) {
1072 		case BT_CONNECT:
1073 			s->state = BT_CONNECTED;
1074 			rfcomm_process_connect(s);
1075 			break;
1076 
1077 		case BT_DISCONN:
1078 			rfcomm_session_put(s);
1079 			break;
1080 		}
1081 	}
1082 	return 0;
1083 }
1084 
1085 static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1086 {
1087 	int err = 0;
1088 
1089 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1090 
1091 	if (dlci) {
1092 		/* Data DLC */
1093 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1094 		if (d) {
1095 			if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1096 				err = ECONNREFUSED;
1097 			else
1098 				err = ECONNRESET;
1099 
1100 			d->state = BT_CLOSED;
1101 			__rfcomm_dlc_close(d, err);
1102 		}
1103 	} else {
1104 		if (s->state == BT_CONNECT)
1105 			err = ECONNREFUSED;
1106 		else
1107 			err = ECONNRESET;
1108 
1109 		s->state = BT_CLOSED;
1110 		rfcomm_session_close(s, err);
1111 	}
1112 	return 0;
1113 }
1114 
1115 static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
1116 {
1117 	int err = 0;
1118 
1119 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1120 
1121 	if (dlci) {
1122 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1123 		if (d) {
1124 			rfcomm_send_ua(s, dlci);
1125 
1126 			if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1127 				err = ECONNREFUSED;
1128 			else
1129 				err = ECONNRESET;
1130 
1131 			d->state = BT_CLOSED;
1132 			__rfcomm_dlc_close(d, err);
1133 		} else
1134 			rfcomm_send_dm(s, dlci);
1135 
1136 	} else {
1137 		rfcomm_send_ua(s, 0);
1138 
1139 		if (s->state == BT_CONNECT)
1140 			err = ECONNREFUSED;
1141 		else
1142 			err = ECONNRESET;
1143 
1144 		s->state = BT_CLOSED;
1145 		rfcomm_session_close(s, err);
1146 	}
1147 
1148 	return 0;
1149 }
1150 
1151 static inline int rfcomm_check_link_mode(struct rfcomm_dlc *d)
1152 {
1153 	struct sock *sk = d->session->sock->sk;
1154 
1155 	if (d->link_mode & (RFCOMM_LM_ENCRYPT | RFCOMM_LM_SECURE)) {
1156 		if (!hci_conn_encrypt(l2cap_pi(sk)->conn->hcon))
1157 			return 1;
1158 	} else if (d->link_mode & RFCOMM_LM_AUTH) {
1159 		if (!hci_conn_auth(l2cap_pi(sk)->conn->hcon))
1160 			return 1;
1161 	}
1162 
1163 	return 0;
1164 }
1165 
1166 static void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1167 {
1168 	struct sock *sk = d->session->sock->sk;
1169 
1170 	BT_DBG("dlc %p", d);
1171 
1172 	rfcomm_send_ua(d->session, d->dlci);
1173 
1174 	rfcomm_dlc_lock(d);
1175 	d->state = BT_CONNECTED;
1176 	d->state_change(d, 0);
1177 	rfcomm_dlc_unlock(d);
1178 
1179 	if (d->link_mode & RFCOMM_LM_MASTER)
1180 		hci_conn_switch_role(l2cap_pi(sk)->conn->hcon, 0x00);
1181 
1182 	rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1183 }
1184 
1185 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1186 {
1187 	struct rfcomm_dlc *d;
1188 	u8 channel;
1189 
1190 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1191 
1192 	if (!dlci) {
1193 		rfcomm_send_ua(s, 0);
1194 
1195 		if (s->state == BT_OPEN) {
1196 			s->state = BT_CONNECTED;
1197 			rfcomm_process_connect(s);
1198 		}
1199 		return 0;
1200 	}
1201 
1202 	/* Check if DLC exists */
1203 	d = rfcomm_dlc_get(s, dlci);
1204 	if (d) {
1205 		if (d->state == BT_OPEN) {
1206 			/* DLC was previously opened by PN request */
1207 			if (rfcomm_check_link_mode(d)) {
1208 				set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1209 				rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1210 				return 0;
1211 			}
1212 
1213 			rfcomm_dlc_accept(d);
1214 		}
1215 		return 0;
1216 	}
1217 
1218 	/* Notify socket layer about incoming connection */
1219 	channel = __srv_channel(dlci);
1220 	if (rfcomm_connect_ind(s, channel, &d)) {
1221 		d->dlci = dlci;
1222 		d->addr = __addr(s->initiator, dlci);
1223 		rfcomm_dlc_link(s, d);
1224 
1225 		if (rfcomm_check_link_mode(d)) {
1226 			set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1227 			rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1228 			return 0;
1229 		}
1230 
1231 		rfcomm_dlc_accept(d);
1232 	} else {
1233 		rfcomm_send_dm(s, dlci);
1234 	}
1235 
1236 	return 0;
1237 }
1238 
1239 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1240 {
1241 	struct rfcomm_session *s = d->session;
1242 
1243 	BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1244 			d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1245 
1246 	if ((pn->flow_ctrl == 0xf0 && s->cfc != RFCOMM_CFC_DISABLED) ||
1247 						pn->flow_ctrl == 0xe0) {
1248 		d->cfc = RFCOMM_CFC_ENABLED;
1249 		d->tx_credits = pn->credits;
1250 	} else {
1251 		d->cfc = RFCOMM_CFC_DISABLED;
1252 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1253 	}
1254 
1255 	if (s->cfc == RFCOMM_CFC_UNKNOWN)
1256 		s->cfc = d->cfc;
1257 
1258 	d->priority = pn->priority;
1259 
1260 	d->mtu = btohs(pn->mtu);
1261 
1262 	if (cr && d->mtu > s->mtu)
1263 		d->mtu = s->mtu;
1264 
1265 	return 0;
1266 }
1267 
1268 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1269 {
1270 	struct rfcomm_pn *pn = (void *) skb->data;
1271 	struct rfcomm_dlc *d;
1272 	u8 dlci = pn->dlci;
1273 
1274 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1275 
1276 	if (!dlci)
1277 		return 0;
1278 
1279 	d = rfcomm_dlc_get(s, dlci);
1280 	if (d) {
1281 		if (cr) {
1282 			/* PN request */
1283 			rfcomm_apply_pn(d, cr, pn);
1284 			rfcomm_send_pn(s, 0, d);
1285 		} else {
1286 			/* PN response */
1287 			switch (d->state) {
1288 			case BT_CONFIG:
1289 				rfcomm_apply_pn(d, cr, pn);
1290 
1291 				d->state = BT_CONNECT;
1292 				rfcomm_send_sabm(s, d->dlci);
1293 				break;
1294 			}
1295 		}
1296 	} else {
1297 		u8 channel = __srv_channel(dlci);
1298 
1299 		if (!cr)
1300 			return 0;
1301 
1302 		/* PN request for non existing DLC.
1303 		 * Assume incoming connection. */
1304 		if (rfcomm_connect_ind(s, channel, &d)) {
1305 			d->dlci = dlci;
1306 			d->addr = __addr(s->initiator, dlci);
1307 			rfcomm_dlc_link(s, d);
1308 
1309 			rfcomm_apply_pn(d, cr, pn);
1310 
1311 			d->state = BT_OPEN;
1312 			rfcomm_send_pn(s, 0, d);
1313 		} else {
1314 			rfcomm_send_dm(s, dlci);
1315 		}
1316 	}
1317 	return 0;
1318 }
1319 
1320 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1321 {
1322 	struct rfcomm_rpn *rpn = (void *) skb->data;
1323 	u8 dlci = __get_dlci(rpn->dlci);
1324 
1325 	u8 bit_rate  = 0;
1326 	u8 data_bits = 0;
1327 	u8 stop_bits = 0;
1328 	u8 parity    = 0;
1329 	u8 flow_ctrl = 0;
1330 	u8 xon_char  = 0;
1331 	u8 xoff_char = 0;
1332 	u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1333 
1334 	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",
1335 		dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1336 		rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1337 
1338 	if (!cr)
1339 		return 0;
1340 
1341 	if (len == 1) {
1342 		/* This is a request, return default settings */
1343 		bit_rate  = RFCOMM_RPN_BR_115200;
1344 		data_bits = RFCOMM_RPN_DATA_8;
1345 		stop_bits = RFCOMM_RPN_STOP_1;
1346 		parity    = RFCOMM_RPN_PARITY_NONE;
1347 		flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1348 		xon_char  = RFCOMM_RPN_XON_CHAR;
1349 		xoff_char = RFCOMM_RPN_XOFF_CHAR;
1350 		goto rpn_out;
1351 	}
1352 
1353 	/* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1354 	 * no parity, no flow control lines, normal XON/XOFF chars */
1355 
1356 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_BITRATE)) {
1357 		bit_rate = rpn->bit_rate;
1358 		if (bit_rate != RFCOMM_RPN_BR_115200) {
1359 			BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1360 			bit_rate = RFCOMM_RPN_BR_115200;
1361 			rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1362 		}
1363 	}
1364 
1365 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_DATA)) {
1366 		data_bits = __get_rpn_data_bits(rpn->line_settings);
1367 		if (data_bits != RFCOMM_RPN_DATA_8) {
1368 			BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1369 			data_bits = RFCOMM_RPN_DATA_8;
1370 			rpn_mask ^= RFCOMM_RPN_PM_DATA;
1371 		}
1372 	}
1373 
1374 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_STOP)) {
1375 		stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1376 		if (stop_bits != RFCOMM_RPN_STOP_1) {
1377 			BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1378 			stop_bits = RFCOMM_RPN_STOP_1;
1379 			rpn_mask ^= RFCOMM_RPN_PM_STOP;
1380 		}
1381 	}
1382 
1383 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_PARITY)) {
1384 		parity = __get_rpn_parity(rpn->line_settings);
1385 		if (parity != RFCOMM_RPN_PARITY_NONE) {
1386 			BT_DBG("RPN parity mismatch 0x%x", parity);
1387 			parity = RFCOMM_RPN_PARITY_NONE;
1388 			rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1389 		}
1390 	}
1391 
1392 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_FLOW)) {
1393 		flow_ctrl = rpn->flow_ctrl;
1394 		if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1395 			BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1396 			flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1397 			rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1398 		}
1399 	}
1400 
1401 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XON)) {
1402 		xon_char = rpn->xon_char;
1403 		if (xon_char != RFCOMM_RPN_XON_CHAR) {
1404 			BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1405 			xon_char = RFCOMM_RPN_XON_CHAR;
1406 			rpn_mask ^= RFCOMM_RPN_PM_XON;
1407 		}
1408 	}
1409 
1410 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XOFF)) {
1411 		xoff_char = rpn->xoff_char;
1412 		if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1413 			BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1414 			xoff_char = RFCOMM_RPN_XOFF_CHAR;
1415 			rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1416 		}
1417 	}
1418 
1419 rpn_out:
1420 	rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits,
1421 			parity, flow_ctrl, xon_char, xoff_char, rpn_mask);
1422 
1423 	return 0;
1424 }
1425 
1426 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1427 {
1428 	struct rfcomm_rls *rls = (void *) skb->data;
1429 	u8 dlci = __get_dlci(rls->dlci);
1430 
1431 	BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1432 
1433 	if (!cr)
1434 		return 0;
1435 
1436 	/* We should probably do something with this information here. But
1437 	 * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1438 	 * mandatory to recognise and respond to RLS */
1439 
1440 	rfcomm_send_rls(s, 0, dlci, rls->status);
1441 
1442 	return 0;
1443 }
1444 
1445 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1446 {
1447 	struct rfcomm_msc *msc = (void *) skb->data;
1448 	struct rfcomm_dlc *d;
1449 	u8 dlci = __get_dlci(msc->dlci);
1450 
1451 	BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1452 
1453 	d = rfcomm_dlc_get(s, dlci);
1454 	if (!d)
1455 		return 0;
1456 
1457 	if (cr) {
1458 		if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1459 			set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1460 		else
1461 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1462 
1463 		rfcomm_dlc_lock(d);
1464 		if (d->modem_status)
1465 			d->modem_status(d, msc->v24_sig);
1466 		rfcomm_dlc_unlock(d);
1467 
1468 		rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1469 
1470 		d->mscex |= RFCOMM_MSCEX_RX;
1471 	} else
1472 		d->mscex |= RFCOMM_MSCEX_TX;
1473 
1474 	return 0;
1475 }
1476 
1477 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1478 {
1479 	struct rfcomm_mcc *mcc = (void *) skb->data;
1480 	u8 type, cr, len;
1481 
1482 	cr   = __test_cr(mcc->type);
1483 	type = __get_mcc_type(mcc->type);
1484 	len  = __get_mcc_len(mcc->len);
1485 
1486 	BT_DBG("%p type 0x%x cr %d", s, type, cr);
1487 
1488 	skb_pull(skb, 2);
1489 
1490 	switch (type) {
1491 	case RFCOMM_PN:
1492 		rfcomm_recv_pn(s, cr, skb);
1493 		break;
1494 
1495 	case RFCOMM_RPN:
1496 		rfcomm_recv_rpn(s, cr, len, skb);
1497 		break;
1498 
1499 	case RFCOMM_RLS:
1500 		rfcomm_recv_rls(s, cr, skb);
1501 		break;
1502 
1503 	case RFCOMM_MSC:
1504 		rfcomm_recv_msc(s, cr, skb);
1505 		break;
1506 
1507 	case RFCOMM_FCOFF:
1508 		if (cr) {
1509 			set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1510 			rfcomm_send_fcoff(s, 0);
1511 		}
1512 		break;
1513 
1514 	case RFCOMM_FCON:
1515 		if (cr) {
1516 			clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1517 			rfcomm_send_fcon(s, 0);
1518 		}
1519 		break;
1520 
1521 	case RFCOMM_TEST:
1522 		if (cr)
1523 			rfcomm_send_test(s, 0, skb->data, skb->len);
1524 		break;
1525 
1526 	case RFCOMM_NSC:
1527 		break;
1528 
1529 	default:
1530 		BT_ERR("Unknown control type 0x%02x", type);
1531 		rfcomm_send_nsc(s, cr, type);
1532 		break;
1533 	}
1534 	return 0;
1535 }
1536 
1537 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1538 {
1539 	struct rfcomm_dlc *d;
1540 
1541 	BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1542 
1543 	d = rfcomm_dlc_get(s, dlci);
1544 	if (!d) {
1545 		rfcomm_send_dm(s, dlci);
1546 		goto drop;
1547 	}
1548 
1549 	if (pf && d->cfc) {
1550 		u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1551 
1552 		d->tx_credits += credits;
1553 		if (d->tx_credits)
1554 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1555 	}
1556 
1557 	if (skb->len && d->state == BT_CONNECTED) {
1558 		rfcomm_dlc_lock(d);
1559 		d->rx_credits--;
1560 		d->data_ready(d, skb);
1561 		rfcomm_dlc_unlock(d);
1562 		return 0;
1563 	}
1564 
1565 drop:
1566 	kfree_skb(skb);
1567 	return 0;
1568 }
1569 
1570 static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
1571 {
1572 	struct rfcomm_hdr *hdr = (void *) skb->data;
1573 	u8 type, dlci, fcs;
1574 
1575 	dlci = __get_dlci(hdr->addr);
1576 	type = __get_type(hdr->ctrl);
1577 
1578 	/* Trim FCS */
1579 	skb->len--; skb->tail--;
1580 	fcs = *(u8 *)skb_tail_pointer(skb);
1581 
1582 	if (__check_fcs(skb->data, type, fcs)) {
1583 		BT_ERR("bad checksum in packet");
1584 		kfree_skb(skb);
1585 		return -EILSEQ;
1586 	}
1587 
1588 	if (__test_ea(hdr->len))
1589 		skb_pull(skb, 3);
1590 	else
1591 		skb_pull(skb, 4);
1592 
1593 	switch (type) {
1594 	case RFCOMM_SABM:
1595 		if (__test_pf(hdr->ctrl))
1596 			rfcomm_recv_sabm(s, dlci);
1597 		break;
1598 
1599 	case RFCOMM_DISC:
1600 		if (__test_pf(hdr->ctrl))
1601 			rfcomm_recv_disc(s, dlci);
1602 		break;
1603 
1604 	case RFCOMM_UA:
1605 		if (__test_pf(hdr->ctrl))
1606 			rfcomm_recv_ua(s, dlci);
1607 		break;
1608 
1609 	case RFCOMM_DM:
1610 		rfcomm_recv_dm(s, dlci);
1611 		break;
1612 
1613 	case RFCOMM_UIH:
1614 		if (dlci)
1615 			return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1616 
1617 		rfcomm_recv_mcc(s, skb);
1618 		break;
1619 
1620 	default:
1621 		BT_ERR("Unknown packet type 0x%02x\n", type);
1622 		break;
1623 	}
1624 	kfree_skb(skb);
1625 	return 0;
1626 }
1627 
1628 /* ---- Connection and data processing ---- */
1629 
1630 static void rfcomm_process_connect(struct rfcomm_session *s)
1631 {
1632 	struct rfcomm_dlc *d;
1633 	struct list_head *p, *n;
1634 
1635 	BT_DBG("session %p state %ld", s, s->state);
1636 
1637 	list_for_each_safe(p, n, &s->dlcs) {
1638 		d = list_entry(p, struct rfcomm_dlc, list);
1639 		if (d->state == BT_CONFIG) {
1640 			d->mtu = s->mtu;
1641 			rfcomm_send_pn(s, 1, d);
1642 		}
1643 	}
1644 }
1645 
1646 /* Send data queued for the DLC.
1647  * Return number of frames left in the queue.
1648  */
1649 static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
1650 {
1651 	struct sk_buff *skb;
1652 	int err;
1653 
1654 	BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1655 			d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1656 
1657 	/* Send pending MSC */
1658 	if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1659 		rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1660 
1661 	if (d->cfc) {
1662 		/* CFC enabled.
1663 		 * Give them some credits */
1664 		if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1665 				d->rx_credits <= (d->cfc >> 2)) {
1666 			rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1667 			d->rx_credits = d->cfc;
1668 		}
1669 	} else {
1670 		/* CFC disabled.
1671 		 * Give ourselves some credits */
1672 		d->tx_credits = 5;
1673 	}
1674 
1675 	if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1676 		return skb_queue_len(&d->tx_queue);
1677 
1678 	while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1679 		err = rfcomm_send_frame(d->session, skb->data, skb->len);
1680 		if (err < 0) {
1681 			skb_queue_head(&d->tx_queue, skb);
1682 			break;
1683 		}
1684 		kfree_skb(skb);
1685 		d->tx_credits--;
1686 	}
1687 
1688 	if (d->cfc && !d->tx_credits) {
1689 		/* We're out of TX credits.
1690 		 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1691 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1692 	}
1693 
1694 	return skb_queue_len(&d->tx_queue);
1695 }
1696 
1697 static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
1698 {
1699 	struct rfcomm_dlc *d;
1700 	struct list_head *p, *n;
1701 
1702 	BT_DBG("session %p state %ld", s, s->state);
1703 
1704 	list_for_each_safe(p, n, &s->dlcs) {
1705 		d = list_entry(p, struct rfcomm_dlc, list);
1706 
1707 		if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1708 			__rfcomm_dlc_close(d, ETIMEDOUT);
1709 			continue;
1710 		}
1711 
1712 		if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) {
1713 			rfcomm_dlc_clear_timer(d);
1714 			rfcomm_dlc_accept(d);
1715 			if (d->link_mode & RFCOMM_LM_SECURE) {
1716 				struct sock *sk = s->sock->sk;
1717 				hci_conn_change_link_key(l2cap_pi(sk)->conn->hcon);
1718 			}
1719 			continue;
1720 		} else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) {
1721 			rfcomm_dlc_clear_timer(d);
1722 			rfcomm_send_dm(s, d->dlci);
1723 			__rfcomm_dlc_close(d, ECONNREFUSED);
1724 			continue;
1725 		}
1726 
1727 		if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1728 			continue;
1729 
1730 		if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1731 				d->mscex == RFCOMM_MSCEX_OK)
1732 			rfcomm_process_tx(d);
1733 	}
1734 }
1735 
1736 static inline void rfcomm_process_rx(struct rfcomm_session *s)
1737 {
1738 	struct socket *sock = s->sock;
1739 	struct sock *sk = sock->sk;
1740 	struct sk_buff *skb;
1741 
1742 	BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
1743 
1744 	/* Get data directly from socket receive queue without copying it. */
1745 	while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
1746 		skb_orphan(skb);
1747 		rfcomm_recv_frame(s, skb);
1748 	}
1749 
1750 	if (sk->sk_state == BT_CLOSED) {
1751 		if (!s->initiator)
1752 			rfcomm_session_put(s);
1753 
1754 		rfcomm_session_close(s, sk->sk_err);
1755 	}
1756 }
1757 
1758 static inline void rfcomm_accept_connection(struct rfcomm_session *s)
1759 {
1760 	struct socket *sock = s->sock, *nsock;
1761 	int err;
1762 
1763 	/* Fast check for a new connection.
1764 	 * Avoids unnesesary socket allocations. */
1765 	if (list_empty(&bt_sk(sock->sk)->accept_q))
1766 		return;
1767 
1768 	BT_DBG("session %p", s);
1769 
1770 	err = kernel_accept(sock, &nsock, O_NONBLOCK);
1771 	if (err < 0)
1772 		return;
1773 
1774 	__module_get(nsock->ops->owner);
1775 
1776 	/* Set our callbacks */
1777 	nsock->sk->sk_data_ready   = rfcomm_l2data_ready;
1778 	nsock->sk->sk_state_change = rfcomm_l2state_change;
1779 
1780 	s = rfcomm_session_add(nsock, BT_OPEN);
1781 	if (s) {
1782 		rfcomm_session_hold(s);
1783 
1784 		/* We should adjust MTU on incoming sessions.
1785 		 * L2CAP MTU minus UIH header and FCS. */
1786 		s->mtu = min(l2cap_pi(nsock->sk)->omtu, l2cap_pi(nsock->sk)->imtu) - 5;
1787 
1788 		rfcomm_schedule(RFCOMM_SCHED_RX);
1789 	} else
1790 		sock_release(nsock);
1791 }
1792 
1793 static inline void rfcomm_check_connection(struct rfcomm_session *s)
1794 {
1795 	struct sock *sk = s->sock->sk;
1796 
1797 	BT_DBG("%p state %ld", s, s->state);
1798 
1799 	switch(sk->sk_state) {
1800 	case BT_CONNECTED:
1801 		s->state = BT_CONNECT;
1802 
1803 		/* We can adjust MTU on outgoing sessions.
1804 		 * L2CAP MTU minus UIH header and FCS. */
1805 		s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
1806 
1807 		rfcomm_send_sabm(s, 0);
1808 		break;
1809 
1810 	case BT_CLOSED:
1811 		s->state = BT_CLOSED;
1812 		rfcomm_session_close(s, sk->sk_err);
1813 		break;
1814 	}
1815 }
1816 
1817 static inline void rfcomm_process_sessions(void)
1818 {
1819 	struct list_head *p, *n;
1820 
1821 	rfcomm_lock();
1822 
1823 	list_for_each_safe(p, n, &session_list) {
1824 		struct rfcomm_session *s;
1825 		s = list_entry(p, struct rfcomm_session, list);
1826 
1827 		if (s->state == BT_LISTEN) {
1828 			rfcomm_accept_connection(s);
1829 			continue;
1830 		}
1831 
1832 		rfcomm_session_hold(s);
1833 
1834 		switch (s->state) {
1835 		case BT_BOUND:
1836 			rfcomm_check_connection(s);
1837 			break;
1838 
1839 		default:
1840 			rfcomm_process_rx(s);
1841 			break;
1842 		}
1843 
1844 		rfcomm_process_dlcs(s);
1845 
1846 		rfcomm_session_put(s);
1847 	}
1848 
1849 	rfcomm_unlock();
1850 }
1851 
1852 static void rfcomm_worker(void)
1853 {
1854 	BT_DBG("");
1855 
1856 	while (!atomic_read(&terminate)) {
1857 		set_current_state(TASK_INTERRUPTIBLE);
1858 		if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
1859 			/* No pending events. Let's sleep.
1860 			 * Incoming connections and data will wake us up. */
1861 			schedule();
1862 		}
1863 		set_current_state(TASK_RUNNING);
1864 
1865 		/* Process stuff */
1866 		clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
1867 		rfcomm_process_sessions();
1868 	}
1869 	return;
1870 }
1871 
1872 static int rfcomm_add_listener(bdaddr_t *ba)
1873 {
1874 	struct sockaddr_l2 addr;
1875 	struct socket *sock;
1876 	struct sock *sk;
1877 	struct rfcomm_session *s;
1878 	int    err = 0;
1879 
1880 	/* Create socket */
1881 	err = rfcomm_l2sock_create(&sock);
1882 	if (err < 0) {
1883 		BT_ERR("Create socket failed %d", err);
1884 		return err;
1885 	}
1886 
1887 	/* Bind socket */
1888 	bacpy(&addr.l2_bdaddr, ba);
1889 	addr.l2_family = AF_BLUETOOTH;
1890 	addr.l2_psm    = htobs(RFCOMM_PSM);
1891 	err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
1892 	if (err < 0) {
1893 		BT_ERR("Bind failed %d", err);
1894 		goto failed;
1895 	}
1896 
1897 	/* Set L2CAP options */
1898 	sk = sock->sk;
1899 	lock_sock(sk);
1900 	l2cap_pi(sk)->imtu = l2cap_mtu;
1901 	release_sock(sk);
1902 
1903 	/* Start listening on the socket */
1904 	err = kernel_listen(sock, 10);
1905 	if (err) {
1906 		BT_ERR("Listen failed %d", err);
1907 		goto failed;
1908 	}
1909 
1910 	/* Add listening session */
1911 	s = rfcomm_session_add(sock, BT_LISTEN);
1912 	if (!s)
1913 		goto failed;
1914 
1915 	rfcomm_session_hold(s);
1916 	return 0;
1917 failed:
1918 	sock_release(sock);
1919 	return err;
1920 }
1921 
1922 static void rfcomm_kill_listener(void)
1923 {
1924 	struct rfcomm_session *s;
1925 	struct list_head *p, *n;
1926 
1927 	BT_DBG("");
1928 
1929 	list_for_each_safe(p, n, &session_list) {
1930 		s = list_entry(p, struct rfcomm_session, list);
1931 		rfcomm_session_del(s);
1932 	}
1933 }
1934 
1935 static int rfcomm_run(void *unused)
1936 {
1937 	rfcomm_thread = current;
1938 
1939 	atomic_inc(&running);
1940 
1941 	daemonize("krfcommd");
1942 	set_user_nice(current, -10);
1943 	current->flags |= PF_NOFREEZE;
1944 
1945 	BT_DBG("");
1946 
1947 	rfcomm_add_listener(BDADDR_ANY);
1948 
1949 	rfcomm_worker();
1950 
1951 	rfcomm_kill_listener();
1952 
1953 	atomic_dec(&running);
1954 	return 0;
1955 }
1956 
1957 static void rfcomm_auth_cfm(struct hci_conn *conn, u8 status)
1958 {
1959 	struct rfcomm_session *s;
1960 	struct rfcomm_dlc *d;
1961 	struct list_head *p, *n;
1962 
1963 	BT_DBG("conn %p status 0x%02x", conn, status);
1964 
1965 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
1966 	if (!s)
1967 		return;
1968 
1969 	rfcomm_session_hold(s);
1970 
1971 	list_for_each_safe(p, n, &s->dlcs) {
1972 		d = list_entry(p, struct rfcomm_dlc, list);
1973 
1974 		if (d->link_mode & (RFCOMM_LM_ENCRYPT | RFCOMM_LM_SECURE))
1975 			continue;
1976 
1977 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
1978 			continue;
1979 
1980 		if (!status)
1981 			set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
1982 		else
1983 			set_bit(RFCOMM_AUTH_REJECT, &d->flags);
1984 	}
1985 
1986 	rfcomm_session_put(s);
1987 
1988 	rfcomm_schedule(RFCOMM_SCHED_AUTH);
1989 }
1990 
1991 static void rfcomm_encrypt_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
1992 {
1993 	struct rfcomm_session *s;
1994 	struct rfcomm_dlc *d;
1995 	struct list_head *p, *n;
1996 
1997 	BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
1998 
1999 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
2000 	if (!s)
2001 		return;
2002 
2003 	rfcomm_session_hold(s);
2004 
2005 	list_for_each_safe(p, n, &s->dlcs) {
2006 		d = list_entry(p, struct rfcomm_dlc, list);
2007 
2008 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
2009 			continue;
2010 
2011 		if (!status && encrypt)
2012 			set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
2013 		else
2014 			set_bit(RFCOMM_AUTH_REJECT, &d->flags);
2015 	}
2016 
2017 	rfcomm_session_put(s);
2018 
2019 	rfcomm_schedule(RFCOMM_SCHED_AUTH);
2020 }
2021 
2022 static struct hci_cb rfcomm_cb = {
2023 	.name		= "RFCOMM",
2024 	.auth_cfm	= rfcomm_auth_cfm,
2025 	.encrypt_cfm	= rfcomm_encrypt_cfm
2026 };
2027 
2028 static ssize_t rfcomm_dlc_sysfs_show(struct class *dev, char *buf)
2029 {
2030 	struct rfcomm_session *s;
2031 	struct list_head *pp, *p;
2032 	char *str = buf;
2033 
2034 	rfcomm_lock();
2035 
2036 	list_for_each(p, &session_list) {
2037 		s = list_entry(p, struct rfcomm_session, list);
2038 		list_for_each(pp, &s->dlcs) {
2039 			struct sock *sk = s->sock->sk;
2040 			struct rfcomm_dlc *d = list_entry(pp, struct rfcomm_dlc, list);
2041 
2042 			str += sprintf(str, "%s %s %ld %d %d %d %d\n",
2043 					batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
2044 					d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
2045 		}
2046 	}
2047 
2048 	rfcomm_unlock();
2049 
2050 	return (str - buf);
2051 }
2052 
2053 static CLASS_ATTR(rfcomm_dlc, S_IRUGO, rfcomm_dlc_sysfs_show, NULL);
2054 
2055 /* ---- Initialization ---- */
2056 static int __init rfcomm_init(void)
2057 {
2058 	l2cap_load();
2059 
2060 	hci_register_cb(&rfcomm_cb);
2061 
2062 	kernel_thread(rfcomm_run, NULL, CLONE_KERNEL);
2063 
2064 	if (class_create_file(bt_class, &class_attr_rfcomm_dlc) < 0)
2065 		BT_ERR("Failed to create RFCOMM info file");
2066 
2067 	rfcomm_init_sockets();
2068 
2069 #ifdef CONFIG_BT_RFCOMM_TTY
2070 	rfcomm_init_ttys();
2071 #endif
2072 
2073 	BT_INFO("RFCOMM ver %s", VERSION);
2074 
2075 	return 0;
2076 }
2077 
2078 static void __exit rfcomm_exit(void)
2079 {
2080 	class_remove_file(bt_class, &class_attr_rfcomm_dlc);
2081 
2082 	hci_unregister_cb(&rfcomm_cb);
2083 
2084 	/* Terminate working thread.
2085 	 * ie. Set terminate flag and wake it up */
2086 	atomic_inc(&terminate);
2087 	rfcomm_schedule(RFCOMM_SCHED_STATE);
2088 
2089 	/* Wait until thread is running */
2090 	while (atomic_read(&running))
2091 		schedule();
2092 
2093 #ifdef CONFIG_BT_RFCOMM_TTY
2094 	rfcomm_cleanup_ttys();
2095 #endif
2096 
2097 	rfcomm_cleanup_sockets();
2098 }
2099 
2100 module_init(rfcomm_init);
2101 module_exit(rfcomm_exit);
2102 
2103 module_param(disable_cfc, bool, 0644);
2104 MODULE_PARM_DESC(disable_cfc, "Disable credit based flow control");
2105 
2106 module_param(channel_mtu, int, 0644);
2107 MODULE_PARM_DESC(channel_mtu, "Default MTU for the RFCOMM channel");
2108 
2109 module_param(l2cap_mtu, uint, 0644);
2110 MODULE_PARM_DESC(l2cap_mtu, "Default MTU for the L2CAP connection");
2111 
2112 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
2113 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION);
2114 MODULE_VERSION(VERSION);
2115 MODULE_LICENSE("GPL");
2116 MODULE_ALIAS("bt-proto-3");
2117