xref: /linux/net/bluetooth/rfcomm/core.c (revision 858259cf7d1c443c836a2022b78cb281f0a9b95e)
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/config.h>
31 #include <linux/module.h>
32 #include <linux/errno.h>
33 #include <linux/kernel.h>
34 #include <linux/sched.h>
35 #include <linux/signal.h>
36 #include <linux/init.h>
37 #include <linux/wait.h>
38 #include <linux/net.h>
39 #include <linux/proc_fs.h>
40 #include <linux/seq_file.h>
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 #define VERSION "1.5"
51 
52 #ifndef CONFIG_BT_RFCOMM_DEBUG
53 #undef  BT_DBG
54 #define BT_DBG(D...)
55 #endif
56 
57 #ifdef CONFIG_PROC_FS
58 struct proc_dir_entry *proc_bt_rfcomm;
59 #endif
60 
61 static struct task_struct *rfcomm_thread;
62 
63 static DECLARE_MUTEX(rfcomm_sem);
64 #define rfcomm_lock()	down(&rfcomm_sem);
65 #define rfcomm_unlock()	up(&rfcomm_sem);
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 = kmalloc(sizeof(*d), prio);
278 	if (!d)
279 		return NULL;
280 	memset(d, 0, sizeof(*d));
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 	return d;
294 }
295 
296 void rfcomm_dlc_free(struct rfcomm_dlc *d)
297 {
298 	BT_DBG("%p", d);
299 
300 	skb_queue_purge(&d->tx_queue);
301 	kfree(d);
302 }
303 
304 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
305 {
306 	BT_DBG("dlc %p session %p", d, s);
307 
308 	rfcomm_session_hold(s);
309 
310 	rfcomm_dlc_hold(d);
311 	list_add(&d->list, &s->dlcs);
312 	d->session = s;
313 }
314 
315 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
316 {
317 	struct rfcomm_session *s = d->session;
318 
319 	BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
320 
321 	list_del(&d->list);
322 	d->session = NULL;
323 	rfcomm_dlc_put(d);
324 
325 	rfcomm_session_put(s);
326 }
327 
328 static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
329 {
330 	struct rfcomm_dlc *d;
331 	struct list_head *p;
332 
333 	list_for_each(p, &s->dlcs) {
334 		d = list_entry(p, struct rfcomm_dlc, list);
335 		if (d->dlci == dlci)
336 			return d;
337 	}
338 	return NULL;
339 }
340 
341 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
342 {
343 	struct rfcomm_session *s;
344 	int err = 0;
345 	u8 dlci;
346 
347 	BT_DBG("dlc %p state %ld %s %s channel %d",
348 			d, d->state, batostr(src), batostr(dst), channel);
349 
350 	if (channel < 1 || channel > 30)
351 		return -EINVAL;
352 
353 	if (d->state != BT_OPEN && d->state != BT_CLOSED)
354 		return 0;
355 
356 	s = rfcomm_session_get(src, dst);
357 	if (!s) {
358 		s = rfcomm_session_create(src, dst, &err);
359 		if (!s)
360 			return err;
361 	}
362 
363 	dlci = __dlci(!s->initiator, channel);
364 
365 	/* Check if DLCI already exists */
366 	if (rfcomm_dlc_get(s, dlci))
367 		return -EBUSY;
368 
369 	rfcomm_dlc_clear_state(d);
370 
371 	d->dlci     = dlci;
372 	d->addr     = __addr(s->initiator, dlci);
373 	d->priority = 7;
374 
375 	d->state    = BT_CONFIG;
376 	rfcomm_dlc_link(s, d);
377 
378 	d->mtu = s->mtu;
379 	d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
380 
381 	if (s->state == BT_CONNECTED)
382 		rfcomm_send_pn(s, 1, d);
383 	rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
384 	return 0;
385 }
386 
387 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
388 {
389 	int r;
390 
391 	rfcomm_lock();
392 
393 	r = __rfcomm_dlc_open(d, src, dst, channel);
394 
395 	rfcomm_unlock();
396 	return r;
397 }
398 
399 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
400 {
401 	struct rfcomm_session *s = d->session;
402 	if (!s)
403 		return 0;
404 
405 	BT_DBG("dlc %p state %ld dlci %d err %d session %p",
406 			d, d->state, d->dlci, err, s);
407 
408 	switch (d->state) {
409 	case BT_CONNECTED:
410 	case BT_CONFIG:
411 	case BT_CONNECT:
412 		d->state = BT_DISCONN;
413 		if (skb_queue_empty(&d->tx_queue)) {
414 			rfcomm_send_disc(s, d->dlci);
415 			rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
416 		} else {
417 			rfcomm_queue_disc(d);
418 			rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
419 		}
420 		break;
421 
422 	default:
423 		rfcomm_dlc_clear_timer(d);
424 
425 		rfcomm_dlc_lock(d);
426 		d->state = BT_CLOSED;
427 		d->state_change(d, err);
428 		rfcomm_dlc_unlock(d);
429 
430 		skb_queue_purge(&d->tx_queue);
431 		rfcomm_dlc_unlink(d);
432 	}
433 
434 	return 0;
435 }
436 
437 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
438 {
439 	int r;
440 
441 	rfcomm_lock();
442 
443 	r = __rfcomm_dlc_close(d, err);
444 
445 	rfcomm_unlock();
446 	return r;
447 }
448 
449 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
450 {
451 	int len = skb->len;
452 
453 	if (d->state != BT_CONNECTED)
454 		return -ENOTCONN;
455 
456 	BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
457 
458 	if (len > d->mtu)
459 		return -EINVAL;
460 
461 	rfcomm_make_uih(skb, d->addr);
462 	skb_queue_tail(&d->tx_queue, skb);
463 
464 	if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
465 		rfcomm_schedule(RFCOMM_SCHED_TX);
466 	return len;
467 }
468 
469 void fastcall __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
470 {
471 	BT_DBG("dlc %p state %ld", d, d->state);
472 
473 	if (!d->cfc) {
474 		d->v24_sig |= RFCOMM_V24_FC;
475 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
476 	}
477 	rfcomm_schedule(RFCOMM_SCHED_TX);
478 }
479 
480 void fastcall __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
481 {
482 	BT_DBG("dlc %p state %ld", d, d->state);
483 
484 	if (!d->cfc) {
485 		d->v24_sig &= ~RFCOMM_V24_FC;
486 		set_bit(RFCOMM_MSC_PENDING, &d->flags);
487 	}
488 	rfcomm_schedule(RFCOMM_SCHED_TX);
489 }
490 
491 /*
492    Set/get modem status functions use _local_ status i.e. what we report
493    to the other side.
494    Remote status is provided by dlc->modem_status() callback.
495  */
496 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
497 {
498 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
499 			d, d->state, v24_sig);
500 
501 	if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
502 		v24_sig |= RFCOMM_V24_FC;
503 	else
504 		v24_sig &= ~RFCOMM_V24_FC;
505 
506 	d->v24_sig = v24_sig;
507 
508 	if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
509 		rfcomm_schedule(RFCOMM_SCHED_TX);
510 
511 	return 0;
512 }
513 
514 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
515 {
516 	BT_DBG("dlc %p state %ld v24_sig 0x%x",
517 			d, d->state, d->v24_sig);
518 
519 	*v24_sig = d->v24_sig;
520 	return 0;
521 }
522 
523 /* ---- RFCOMM sessions ---- */
524 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
525 {
526 	struct rfcomm_session *s = kmalloc(sizeof(*s), GFP_KERNEL);
527 	if (!s)
528 		return NULL;
529 	memset(s, 0, sizeof(*s));
530 
531 	BT_DBG("session %p sock %p", s, sock);
532 
533 	INIT_LIST_HEAD(&s->dlcs);
534 	s->state = state;
535 	s->sock  = sock;
536 
537 	s->mtu = RFCOMM_DEFAULT_MTU;
538 	s->cfc = RFCOMM_CFC_UNKNOWN;
539 
540 	/* Do not increment module usage count for listening sessions.
541 	 * Otherwise we won't be able to unload the module. */
542 	if (state != BT_LISTEN)
543 		if (!try_module_get(THIS_MODULE)) {
544 			kfree(s);
545 			return NULL;
546 		}
547 
548 	list_add(&s->list, &session_list);
549 
550 	return s;
551 }
552 
553 static void rfcomm_session_del(struct rfcomm_session *s)
554 {
555 	int state = s->state;
556 
557 	BT_DBG("session %p state %ld", s, s->state);
558 
559 	list_del(&s->list);
560 
561 	if (state == BT_CONNECTED)
562 		rfcomm_send_disc(s, 0);
563 
564 	sock_release(s->sock);
565 	kfree(s);
566 
567 	if (state != BT_LISTEN)
568 		module_put(THIS_MODULE);
569 }
570 
571 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
572 {
573 	struct rfcomm_session *s;
574 	struct list_head *p, *n;
575 	struct bt_sock *sk;
576 	list_for_each_safe(p, n, &session_list) {
577 		s = list_entry(p, struct rfcomm_session, list);
578 		sk = bt_sk(s->sock->sk);
579 
580 		if ((!bacmp(src, BDADDR_ANY) || !bacmp(&sk->src, src)) &&
581 				!bacmp(&sk->dst, dst))
582 			return s;
583 	}
584 	return NULL;
585 }
586 
587 static void rfcomm_session_close(struct rfcomm_session *s, int err)
588 {
589 	struct rfcomm_dlc *d;
590 	struct list_head *p, *n;
591 
592 	BT_DBG("session %p state %ld err %d", s, s->state, err);
593 
594 	rfcomm_session_hold(s);
595 
596 	s->state = BT_CLOSED;
597 
598 	/* Close all dlcs */
599 	list_for_each_safe(p, n, &s->dlcs) {
600 		d = list_entry(p, struct rfcomm_dlc, list);
601 		d->state = BT_CLOSED;
602 		__rfcomm_dlc_close(d, err);
603 	}
604 
605 	rfcomm_session_put(s);
606 }
607 
608 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
609 {
610 	struct rfcomm_session *s = NULL;
611 	struct sockaddr_l2 addr;
612 	struct socket *sock;
613 	struct sock *sk;
614 
615 	BT_DBG("%s %s", batostr(src), batostr(dst));
616 
617 	*err = rfcomm_l2sock_create(&sock);
618 	if (*err < 0)
619 		return NULL;
620 
621 	bacpy(&addr.l2_bdaddr, src);
622 	addr.l2_family = AF_BLUETOOTH;
623 	addr.l2_psm    = 0;
624 	*err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
625 	if (*err < 0)
626 		goto failed;
627 
628 	/* Set L2CAP options */
629 	sk = sock->sk;
630 	lock_sock(sk);
631 	l2cap_pi(sk)->imtu = RFCOMM_MAX_L2CAP_MTU;
632 	release_sock(sk);
633 
634 	s = rfcomm_session_add(sock, BT_BOUND);
635 	if (!s) {
636 		*err = -ENOMEM;
637 		goto failed;
638 	}
639 
640 	s->initiator = 1;
641 
642 	bacpy(&addr.l2_bdaddr, dst);
643 	addr.l2_family = AF_BLUETOOTH;
644 	addr.l2_psm    = htobs(RFCOMM_PSM);
645 	*err = sock->ops->connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
646 	if (*err == 0 || *err == -EAGAIN)
647 		return s;
648 
649 	rfcomm_session_del(s);
650 	return NULL;
651 
652 failed:
653 	sock_release(sock);
654 	return NULL;
655 }
656 
657 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
658 {
659 	struct sock *sk = s->sock->sk;
660 	if (src)
661 		bacpy(src, &bt_sk(sk)->src);
662 	if (dst)
663 		bacpy(dst, &bt_sk(sk)->dst);
664 }
665 
666 /* ---- RFCOMM frame sending ---- */
667 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
668 {
669 	struct socket *sock = s->sock;
670 	struct kvec iv = { data, len };
671 	struct msghdr msg;
672 
673 	BT_DBG("session %p len %d", s, len);
674 
675 	memset(&msg, 0, sizeof(msg));
676 
677 	return kernel_sendmsg(sock, &msg, &iv, 1, len);
678 }
679 
680 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
681 {
682 	struct rfcomm_cmd cmd;
683 
684 	BT_DBG("%p dlci %d", s, dlci);
685 
686 	cmd.addr = __addr(s->initiator, dlci);
687 	cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
688 	cmd.len  = __len8(0);
689 	cmd.fcs  = __fcs2((u8 *) &cmd);
690 
691 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
692 }
693 
694 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
695 {
696 	struct rfcomm_cmd cmd;
697 
698 	BT_DBG("%p dlci %d", s, dlci);
699 
700 	cmd.addr = __addr(!s->initiator, dlci);
701 	cmd.ctrl = __ctrl(RFCOMM_UA, 1);
702 	cmd.len  = __len8(0);
703 	cmd.fcs  = __fcs2((u8 *) &cmd);
704 
705 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
706 }
707 
708 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
709 {
710 	struct rfcomm_cmd cmd;
711 
712 	BT_DBG("%p dlci %d", s, dlci);
713 
714 	cmd.addr = __addr(s->initiator, dlci);
715 	cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
716 	cmd.len  = __len8(0);
717 	cmd.fcs  = __fcs2((u8 *) &cmd);
718 
719 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
720 }
721 
722 static int rfcomm_queue_disc(struct rfcomm_dlc *d)
723 {
724 	struct rfcomm_cmd *cmd;
725 	struct sk_buff *skb;
726 
727 	BT_DBG("dlc %p dlci %d", d, d->dlci);
728 
729 	skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
730 	if (!skb)
731 		return -ENOMEM;
732 
733 	cmd = (void *) __skb_put(skb, sizeof(*cmd));
734 	cmd->addr = d->addr;
735 	cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
736 	cmd->len  = __len8(0);
737 	cmd->fcs  = __fcs2((u8 *) cmd);
738 
739 	skb_queue_tail(&d->tx_queue, skb);
740 	rfcomm_schedule(RFCOMM_SCHED_TX);
741 	return 0;
742 }
743 
744 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
745 {
746 	struct rfcomm_cmd cmd;
747 
748 	BT_DBG("%p dlci %d", s, dlci);
749 
750 	cmd.addr = __addr(!s->initiator, dlci);
751 	cmd.ctrl = __ctrl(RFCOMM_DM, 1);
752 	cmd.len  = __len8(0);
753 	cmd.fcs  = __fcs2((u8 *) &cmd);
754 
755 	return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
756 }
757 
758 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
759 {
760 	struct rfcomm_hdr *hdr;
761 	struct rfcomm_mcc *mcc;
762 	u8 buf[16], *ptr = buf;
763 
764 	BT_DBG("%p cr %d type %d", s, cr, type);
765 
766 	hdr = (void *) ptr; ptr += sizeof(*hdr);
767 	hdr->addr = __addr(s->initiator, 0);
768 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
769 	hdr->len  = __len8(sizeof(*mcc) + 1);
770 
771 	mcc = (void *) ptr; ptr += sizeof(*mcc);
772 	mcc->type = __mcc_type(cr, RFCOMM_NSC);
773 	mcc->len  = __len8(1);
774 
775 	/* Type that we didn't like */
776 	*ptr = __mcc_type(cr, type); ptr++;
777 
778 	*ptr = __fcs(buf); ptr++;
779 
780 	return rfcomm_send_frame(s, buf, ptr - buf);
781 }
782 
783 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
784 {
785 	struct rfcomm_hdr *hdr;
786 	struct rfcomm_mcc *mcc;
787 	struct rfcomm_pn  *pn;
788 	u8 buf[16], *ptr = buf;
789 
790 	BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
791 
792 	hdr = (void *) ptr; ptr += sizeof(*hdr);
793 	hdr->addr = __addr(s->initiator, 0);
794 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
795 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*pn));
796 
797 	mcc = (void *) ptr; ptr += sizeof(*mcc);
798 	mcc->type = __mcc_type(cr, RFCOMM_PN);
799 	mcc->len  = __len8(sizeof(*pn));
800 
801 	pn = (void *) ptr; ptr += sizeof(*pn);
802 	pn->dlci        = d->dlci;
803 	pn->priority    = d->priority;
804 	pn->ack_timer   = 0;
805 	pn->max_retrans = 0;
806 
807 	if (s->cfc) {
808 		pn->flow_ctrl = cr ? 0xf0 : 0xe0;
809 		pn->credits = RFCOMM_DEFAULT_CREDITS;
810 	} else {
811 		pn->flow_ctrl = 0;
812 		pn->credits   = 0;
813 	}
814 
815 	pn->mtu = htobs(d->mtu);
816 
817 	*ptr = __fcs(buf); ptr++;
818 
819 	return rfcomm_send_frame(s, buf, ptr - buf);
820 }
821 
822 int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
823 			u8 bit_rate, u8 data_bits, u8 stop_bits,
824 			u8 parity, u8 flow_ctrl_settings,
825 			u8 xon_char, u8 xoff_char, u16 param_mask)
826 {
827 	struct rfcomm_hdr *hdr;
828 	struct rfcomm_mcc *mcc;
829 	struct rfcomm_rpn *rpn;
830 	u8 buf[16], *ptr = buf;
831 
832 	BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
833 			" flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
834 		s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
835 		flow_ctrl_settings, xon_char, xoff_char, param_mask);
836 
837 	hdr = (void *) ptr; ptr += sizeof(*hdr);
838 	hdr->addr = __addr(s->initiator, 0);
839 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
840 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*rpn));
841 
842 	mcc = (void *) ptr; ptr += sizeof(*mcc);
843 	mcc->type = __mcc_type(cr, RFCOMM_RPN);
844 	mcc->len  = __len8(sizeof(*rpn));
845 
846 	rpn = (void *) ptr; ptr += sizeof(*rpn);
847 	rpn->dlci          = __addr(1, dlci);
848 	rpn->bit_rate      = bit_rate;
849 	rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
850 	rpn->flow_ctrl     = flow_ctrl_settings;
851 	rpn->xon_char      = xon_char;
852 	rpn->xoff_char     = xoff_char;
853 	rpn->param_mask    = param_mask;
854 
855 	*ptr = __fcs(buf); ptr++;
856 
857 	return rfcomm_send_frame(s, buf, ptr - buf);
858 }
859 
860 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
861 {
862 	struct rfcomm_hdr *hdr;
863 	struct rfcomm_mcc *mcc;
864 	struct rfcomm_rls *rls;
865 	u8 buf[16], *ptr = buf;
866 
867 	BT_DBG("%p cr %d status 0x%x", s, cr, status);
868 
869 	hdr = (void *) ptr; ptr += sizeof(*hdr);
870 	hdr->addr = __addr(s->initiator, 0);
871 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
872 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*rls));
873 
874 	mcc = (void *) ptr; ptr += sizeof(*mcc);
875 	mcc->type = __mcc_type(cr, RFCOMM_RLS);
876 	mcc->len  = __len8(sizeof(*rls));
877 
878 	rls = (void *) ptr; ptr += sizeof(*rls);
879 	rls->dlci   = __addr(1, dlci);
880 	rls->status = status;
881 
882 	*ptr = __fcs(buf); ptr++;
883 
884 	return rfcomm_send_frame(s, buf, ptr - buf);
885 }
886 
887 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
888 {
889 	struct rfcomm_hdr *hdr;
890 	struct rfcomm_mcc *mcc;
891 	struct rfcomm_msc *msc;
892 	u8 buf[16], *ptr = buf;
893 
894 	BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
895 
896 	hdr = (void *) ptr; ptr += sizeof(*hdr);
897 	hdr->addr = __addr(s->initiator, 0);
898 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
899 	hdr->len  = __len8(sizeof(*mcc) + sizeof(*msc));
900 
901 	mcc = (void *) ptr; ptr += sizeof(*mcc);
902 	mcc->type = __mcc_type(cr, RFCOMM_MSC);
903 	mcc->len  = __len8(sizeof(*msc));
904 
905 	msc = (void *) ptr; ptr += sizeof(*msc);
906 	msc->dlci    = __addr(1, dlci);
907 	msc->v24_sig = v24_sig | 0x01;
908 
909 	*ptr = __fcs(buf); ptr++;
910 
911 	return rfcomm_send_frame(s, buf, ptr - buf);
912 }
913 
914 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
915 {
916 	struct rfcomm_hdr *hdr;
917 	struct rfcomm_mcc *mcc;
918 	u8 buf[16], *ptr = buf;
919 
920 	BT_DBG("%p cr %d", s, cr);
921 
922 	hdr = (void *) ptr; ptr += sizeof(*hdr);
923 	hdr->addr = __addr(s->initiator, 0);
924 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
925 	hdr->len  = __len8(sizeof(*mcc));
926 
927 	mcc = (void *) ptr; ptr += sizeof(*mcc);
928 	mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
929 	mcc->len  = __len8(0);
930 
931 	*ptr = __fcs(buf); ptr++;
932 
933 	return rfcomm_send_frame(s, buf, ptr - buf);
934 }
935 
936 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
937 {
938 	struct rfcomm_hdr *hdr;
939 	struct rfcomm_mcc *mcc;
940 	u8 buf[16], *ptr = buf;
941 
942 	BT_DBG("%p cr %d", s, cr);
943 
944 	hdr = (void *) ptr; ptr += sizeof(*hdr);
945 	hdr->addr = __addr(s->initiator, 0);
946 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
947 	hdr->len  = __len8(sizeof(*mcc));
948 
949 	mcc = (void *) ptr; ptr += sizeof(*mcc);
950 	mcc->type = __mcc_type(cr, RFCOMM_FCON);
951 	mcc->len  = __len8(0);
952 
953 	*ptr = __fcs(buf); ptr++;
954 
955 	return rfcomm_send_frame(s, buf, ptr - buf);
956 }
957 
958 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
959 {
960 	struct socket *sock = s->sock;
961 	struct kvec iv[3];
962 	struct msghdr msg;
963 	unsigned char hdr[5], crc[1];
964 
965 	if (len > 125)
966 		return -EINVAL;
967 
968 	BT_DBG("%p cr %d", s, cr);
969 
970 	hdr[0] = __addr(s->initiator, 0);
971 	hdr[1] = __ctrl(RFCOMM_UIH, 0);
972 	hdr[2] = 0x01 | ((len + 2) << 1);
973 	hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
974 	hdr[4] = 0x01 | (len << 1);
975 
976 	crc[0] = __fcs(hdr);
977 
978 	iv[0].iov_base = hdr;
979 	iv[0].iov_len  = 5;
980 	iv[1].iov_base = pattern;
981 	iv[1].iov_len  = len;
982 	iv[2].iov_base = crc;
983 	iv[2].iov_len  = 1;
984 
985 	memset(&msg, 0, sizeof(msg));
986 
987 	return kernel_sendmsg(sock, &msg, iv, 3, 6 + len);
988 }
989 
990 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
991 {
992 	struct rfcomm_hdr *hdr;
993 	u8 buf[16], *ptr = buf;
994 
995 	BT_DBG("%p addr %d credits %d", s, addr, credits);
996 
997 	hdr = (void *) ptr; ptr += sizeof(*hdr);
998 	hdr->addr = addr;
999 	hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
1000 	hdr->len  = __len8(0);
1001 
1002 	*ptr = credits; ptr++;
1003 
1004 	*ptr = __fcs(buf); ptr++;
1005 
1006 	return rfcomm_send_frame(s, buf, ptr - buf);
1007 }
1008 
1009 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
1010 {
1011 	struct rfcomm_hdr *hdr;
1012 	int len = skb->len;
1013 	u8 *crc;
1014 
1015 	if (len > 127) {
1016 		hdr = (void *) skb_push(skb, 4);
1017 		put_unaligned(htobs(__len16(len)), (u16 *) &hdr->len);
1018 	} else {
1019 		hdr = (void *) skb_push(skb, 3);
1020 		hdr->len = __len8(len);
1021 	}
1022 	hdr->addr = addr;
1023 	hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1024 
1025 	crc = skb_put(skb, 1);
1026 	*crc = __fcs((void *) hdr);
1027 }
1028 
1029 /* ---- RFCOMM frame reception ---- */
1030 static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
1031 {
1032 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1033 
1034 	if (dlci) {
1035 		/* Data channel */
1036 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1037 		if (!d) {
1038 			rfcomm_send_dm(s, dlci);
1039 			return 0;
1040 		}
1041 
1042 		switch (d->state) {
1043 		case BT_CONNECT:
1044 			rfcomm_dlc_clear_timer(d);
1045 
1046 			rfcomm_dlc_lock(d);
1047 			d->state = BT_CONNECTED;
1048 			d->state_change(d, 0);
1049 			rfcomm_dlc_unlock(d);
1050 
1051 			rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1052 			break;
1053 
1054 		case BT_DISCONN:
1055 			d->state = BT_CLOSED;
1056 			__rfcomm_dlc_close(d, 0);
1057 			break;
1058 		}
1059 	} else {
1060 		/* Control channel */
1061 		switch (s->state) {
1062 		case BT_CONNECT:
1063 			s->state = BT_CONNECTED;
1064 			rfcomm_process_connect(s);
1065 			break;
1066 		}
1067 	}
1068 	return 0;
1069 }
1070 
1071 static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1072 {
1073 	int err = 0;
1074 
1075 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1076 
1077 	if (dlci) {
1078 		/* Data DLC */
1079 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1080 		if (d) {
1081 			if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1082 				err = ECONNREFUSED;
1083 			else
1084 				err = ECONNRESET;
1085 
1086 			d->state = BT_CLOSED;
1087 			__rfcomm_dlc_close(d, err);
1088 		}
1089 	} else {
1090 		if (s->state == BT_CONNECT)
1091 			err = ECONNREFUSED;
1092 		else
1093 			err = ECONNRESET;
1094 
1095 		s->state = BT_CLOSED;
1096 		rfcomm_session_close(s, err);
1097 	}
1098 	return 0;
1099 }
1100 
1101 static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
1102 {
1103 	int err = 0;
1104 
1105 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1106 
1107 	if (dlci) {
1108 		struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1109 		if (d) {
1110 			rfcomm_send_ua(s, dlci);
1111 
1112 			if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1113 				err = ECONNREFUSED;
1114 			else
1115 				err = ECONNRESET;
1116 
1117 			d->state = BT_CLOSED;
1118 			__rfcomm_dlc_close(d, err);
1119 		} else
1120 			rfcomm_send_dm(s, dlci);
1121 
1122 	} else {
1123 		rfcomm_send_ua(s, 0);
1124 
1125 		if (s->state == BT_CONNECT)
1126 			err = ECONNREFUSED;
1127 		else
1128 			err = ECONNRESET;
1129 
1130 		s->state = BT_CLOSED;
1131 		rfcomm_session_close(s, err);
1132 	}
1133 
1134 	return 0;
1135 }
1136 
1137 static inline int rfcomm_check_link_mode(struct rfcomm_dlc *d)
1138 {
1139 	struct sock *sk = d->session->sock->sk;
1140 
1141 	if (d->link_mode & (RFCOMM_LM_ENCRYPT | RFCOMM_LM_SECURE)) {
1142 		if (!hci_conn_encrypt(l2cap_pi(sk)->conn->hcon))
1143 			return 1;
1144 	} else if (d->link_mode & RFCOMM_LM_AUTH) {
1145 		if (!hci_conn_auth(l2cap_pi(sk)->conn->hcon))
1146 			return 1;
1147 	}
1148 
1149 	return 0;
1150 }
1151 
1152 static void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1153 {
1154 	BT_DBG("dlc %p", d);
1155 
1156 	rfcomm_send_ua(d->session, d->dlci);
1157 
1158 	rfcomm_dlc_lock(d);
1159 	d->state = BT_CONNECTED;
1160 	d->state_change(d, 0);
1161 	rfcomm_dlc_unlock(d);
1162 
1163 	rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1164 }
1165 
1166 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1167 {
1168 	struct rfcomm_dlc *d;
1169 	u8 channel;
1170 
1171 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1172 
1173 	if (!dlci) {
1174 		rfcomm_send_ua(s, 0);
1175 
1176 		if (s->state == BT_OPEN) {
1177 			s->state = BT_CONNECTED;
1178 			rfcomm_process_connect(s);
1179 		}
1180 		return 0;
1181 	}
1182 
1183 	/* Check if DLC exists */
1184 	d = rfcomm_dlc_get(s, dlci);
1185 	if (d) {
1186 		if (d->state == BT_OPEN) {
1187 			/* DLC was previously opened by PN request */
1188 			if (rfcomm_check_link_mode(d)) {
1189 				set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1190 				rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1191 				return 0;
1192 			}
1193 
1194 			rfcomm_dlc_accept(d);
1195 		}
1196 		return 0;
1197 	}
1198 
1199 	/* Notify socket layer about incoming connection */
1200 	channel = __srv_channel(dlci);
1201 	if (rfcomm_connect_ind(s, channel, &d)) {
1202 		d->dlci = dlci;
1203 		d->addr = __addr(s->initiator, dlci);
1204 		rfcomm_dlc_link(s, d);
1205 
1206 		if (rfcomm_check_link_mode(d)) {
1207 			set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1208 			rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1209 			return 0;
1210 		}
1211 
1212 		rfcomm_dlc_accept(d);
1213 	} else {
1214 		rfcomm_send_dm(s, dlci);
1215 	}
1216 
1217 	return 0;
1218 }
1219 
1220 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1221 {
1222 	struct rfcomm_session *s = d->session;
1223 
1224 	BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1225 			d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1226 
1227 	if (pn->flow_ctrl == 0xf0 || pn->flow_ctrl == 0xe0) {
1228 		d->cfc = s->cfc = RFCOMM_CFC_ENABLED;
1229 		d->tx_credits = pn->credits;
1230 	} else {
1231 		d->cfc = s->cfc = RFCOMM_CFC_DISABLED;
1232 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1233 	}
1234 
1235 	d->priority = pn->priority;
1236 
1237 	d->mtu = s->mtu = btohs(pn->mtu);
1238 
1239 	return 0;
1240 }
1241 
1242 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1243 {
1244 	struct rfcomm_pn *pn = (void *) skb->data;
1245 	struct rfcomm_dlc *d;
1246 	u8 dlci = pn->dlci;
1247 
1248 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1249 
1250 	if (!dlci)
1251 		return 0;
1252 
1253 	d = rfcomm_dlc_get(s, dlci);
1254 	if (d) {
1255 		if (cr) {
1256 			/* PN request */
1257 			rfcomm_apply_pn(d, cr, pn);
1258 			rfcomm_send_pn(s, 0, d);
1259 		} else {
1260 			/* PN response */
1261 			switch (d->state) {
1262 			case BT_CONFIG:
1263 				rfcomm_apply_pn(d, cr, pn);
1264 
1265 				d->state = BT_CONNECT;
1266 				rfcomm_send_sabm(s, d->dlci);
1267 				break;
1268 			}
1269 		}
1270 	} else {
1271 		u8 channel = __srv_channel(dlci);
1272 
1273 		if (!cr)
1274 			return 0;
1275 
1276 		/* PN request for non existing DLC.
1277 		 * Assume incoming connection. */
1278 		if (rfcomm_connect_ind(s, channel, &d)) {
1279 			d->dlci = dlci;
1280 			d->addr = __addr(s->initiator, dlci);
1281 			rfcomm_dlc_link(s, d);
1282 
1283 			rfcomm_apply_pn(d, cr, pn);
1284 
1285 			d->state = BT_OPEN;
1286 			rfcomm_send_pn(s, 0, d);
1287 		} else {
1288 			rfcomm_send_dm(s, dlci);
1289 		}
1290 	}
1291 	return 0;
1292 }
1293 
1294 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1295 {
1296 	struct rfcomm_rpn *rpn = (void *) skb->data;
1297 	u8 dlci = __get_dlci(rpn->dlci);
1298 
1299 	u8 bit_rate  = 0;
1300 	u8 data_bits = 0;
1301 	u8 stop_bits = 0;
1302 	u8 parity    = 0;
1303 	u8 flow_ctrl = 0;
1304 	u8 xon_char  = 0;
1305 	u8 xoff_char = 0;
1306 	u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1307 
1308 	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",
1309 		dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1310 		rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1311 
1312 	if (!cr)
1313 		return 0;
1314 
1315 	if (len == 1) {
1316 		/* This is a request, return default settings */
1317 		bit_rate  = RFCOMM_RPN_BR_115200;
1318 		data_bits = RFCOMM_RPN_DATA_8;
1319 		stop_bits = RFCOMM_RPN_STOP_1;
1320 		parity    = RFCOMM_RPN_PARITY_NONE;
1321 		flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1322 		xon_char  = RFCOMM_RPN_XON_CHAR;
1323 		xoff_char = RFCOMM_RPN_XOFF_CHAR;
1324 		goto rpn_out;
1325 	}
1326 
1327 	/* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1328 	 * no parity, no flow control lines, normal XON/XOFF chars */
1329 
1330 	if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) {
1331 		bit_rate = rpn->bit_rate;
1332 		if (bit_rate != RFCOMM_RPN_BR_115200) {
1333 			BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1334 			bit_rate = RFCOMM_RPN_BR_115200;
1335 			rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1336 		}
1337 	}
1338 
1339 	if (rpn->param_mask & RFCOMM_RPN_PM_DATA) {
1340 		data_bits = __get_rpn_data_bits(rpn->line_settings);
1341 		if (data_bits != RFCOMM_RPN_DATA_8) {
1342 			BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1343 			data_bits = RFCOMM_RPN_DATA_8;
1344 			rpn_mask ^= RFCOMM_RPN_PM_DATA;
1345 		}
1346 	}
1347 
1348 	if (rpn->param_mask & RFCOMM_RPN_PM_STOP) {
1349 		stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1350 		if (stop_bits != RFCOMM_RPN_STOP_1) {
1351 			BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1352 			stop_bits = RFCOMM_RPN_STOP_1;
1353 			rpn_mask ^= RFCOMM_RPN_PM_STOP;
1354 		}
1355 	}
1356 
1357 	if (rpn->param_mask & RFCOMM_RPN_PM_PARITY) {
1358 		parity = __get_rpn_parity(rpn->line_settings);
1359 		if (parity != RFCOMM_RPN_PARITY_NONE) {
1360 			BT_DBG("RPN parity mismatch 0x%x", parity);
1361 			parity = RFCOMM_RPN_PARITY_NONE;
1362 			rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1363 		}
1364 	}
1365 
1366 	if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) {
1367 		flow_ctrl = rpn->flow_ctrl;
1368 		if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1369 			BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1370 			flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1371 			rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1372 		}
1373 	}
1374 
1375 	if (rpn->param_mask & RFCOMM_RPN_PM_XON) {
1376 		xon_char = rpn->xon_char;
1377 		if (xon_char != RFCOMM_RPN_XON_CHAR) {
1378 			BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1379 			xon_char = RFCOMM_RPN_XON_CHAR;
1380 			rpn_mask ^= RFCOMM_RPN_PM_XON;
1381 		}
1382 	}
1383 
1384 	if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) {
1385 		xoff_char = rpn->xoff_char;
1386 		if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1387 			BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1388 			xoff_char = RFCOMM_RPN_XOFF_CHAR;
1389 			rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1390 		}
1391 	}
1392 
1393 rpn_out:
1394 	rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits,
1395 			parity, flow_ctrl, xon_char, xoff_char, rpn_mask);
1396 
1397 	return 0;
1398 }
1399 
1400 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1401 {
1402 	struct rfcomm_rls *rls = (void *) skb->data;
1403 	u8 dlci = __get_dlci(rls->dlci);
1404 
1405 	BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1406 
1407 	if (!cr)
1408 		return 0;
1409 
1410 	/* We should probably do something with this information here. But
1411 	 * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1412 	 * mandatory to recognise and respond to RLS */
1413 
1414 	rfcomm_send_rls(s, 0, dlci, rls->status);
1415 
1416 	return 0;
1417 }
1418 
1419 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1420 {
1421 	struct rfcomm_msc *msc = (void *) skb->data;
1422 	struct rfcomm_dlc *d;
1423 	u8 dlci = __get_dlci(msc->dlci);
1424 
1425 	BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1426 
1427 	d = rfcomm_dlc_get(s, dlci);
1428 	if (!d)
1429 		return 0;
1430 
1431 	if (cr) {
1432 		if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1433 			set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1434 		else
1435 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1436 
1437 		rfcomm_dlc_lock(d);
1438 		if (d->modem_status)
1439 			d->modem_status(d, msc->v24_sig);
1440 		rfcomm_dlc_unlock(d);
1441 
1442 		rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1443 
1444 		d->mscex |= RFCOMM_MSCEX_RX;
1445 	} else
1446 		d->mscex |= RFCOMM_MSCEX_TX;
1447 
1448 	return 0;
1449 }
1450 
1451 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1452 {
1453 	struct rfcomm_mcc *mcc = (void *) skb->data;
1454 	u8 type, cr, len;
1455 
1456 	cr   = __test_cr(mcc->type);
1457 	type = __get_mcc_type(mcc->type);
1458 	len  = __get_mcc_len(mcc->len);
1459 
1460 	BT_DBG("%p type 0x%x cr %d", s, type, cr);
1461 
1462 	skb_pull(skb, 2);
1463 
1464 	switch (type) {
1465 	case RFCOMM_PN:
1466 		rfcomm_recv_pn(s, cr, skb);
1467 		break;
1468 
1469 	case RFCOMM_RPN:
1470 		rfcomm_recv_rpn(s, cr, len, skb);
1471 		break;
1472 
1473 	case RFCOMM_RLS:
1474 		rfcomm_recv_rls(s, cr, skb);
1475 		break;
1476 
1477 	case RFCOMM_MSC:
1478 		rfcomm_recv_msc(s, cr, skb);
1479 		break;
1480 
1481 	case RFCOMM_FCOFF:
1482 		if (cr) {
1483 			set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1484 			rfcomm_send_fcoff(s, 0);
1485 		}
1486 		break;
1487 
1488 	case RFCOMM_FCON:
1489 		if (cr) {
1490 			clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1491 			rfcomm_send_fcon(s, 0);
1492 		}
1493 		break;
1494 
1495 	case RFCOMM_TEST:
1496 		if (cr)
1497 			rfcomm_send_test(s, 0, skb->data, skb->len);
1498 		break;
1499 
1500 	case RFCOMM_NSC:
1501 		break;
1502 
1503 	default:
1504 		BT_ERR("Unknown control type 0x%02x", type);
1505 		rfcomm_send_nsc(s, cr, type);
1506 		break;
1507 	}
1508 	return 0;
1509 }
1510 
1511 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1512 {
1513 	struct rfcomm_dlc *d;
1514 
1515 	BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1516 
1517 	d = rfcomm_dlc_get(s, dlci);
1518 	if (!d) {
1519 		rfcomm_send_dm(s, dlci);
1520 		goto drop;
1521 	}
1522 
1523 	if (pf && d->cfc) {
1524 		u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1525 
1526 		d->tx_credits += credits;
1527 		if (d->tx_credits)
1528 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1529 	}
1530 
1531 	if (skb->len && d->state == BT_CONNECTED) {
1532 		rfcomm_dlc_lock(d);
1533 		d->rx_credits--;
1534 		d->data_ready(d, skb);
1535 		rfcomm_dlc_unlock(d);
1536 		return 0;
1537 	}
1538 
1539 drop:
1540 	kfree_skb(skb);
1541 	return 0;
1542 }
1543 
1544 static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
1545 {
1546 	struct rfcomm_hdr *hdr = (void *) skb->data;
1547 	u8 type, dlci, fcs;
1548 
1549 	dlci = __get_dlci(hdr->addr);
1550 	type = __get_type(hdr->ctrl);
1551 
1552 	/* Trim FCS */
1553 	skb->len--; skb->tail--;
1554 	fcs = *(u8 *) skb->tail;
1555 
1556 	if (__check_fcs(skb->data, type, fcs)) {
1557 		BT_ERR("bad checksum in packet");
1558 		kfree_skb(skb);
1559 		return -EILSEQ;
1560 	}
1561 
1562 	if (__test_ea(hdr->len))
1563 		skb_pull(skb, 3);
1564 	else
1565 		skb_pull(skb, 4);
1566 
1567 	switch (type) {
1568 	case RFCOMM_SABM:
1569 		if (__test_pf(hdr->ctrl))
1570 			rfcomm_recv_sabm(s, dlci);
1571 		break;
1572 
1573 	case RFCOMM_DISC:
1574 		if (__test_pf(hdr->ctrl))
1575 			rfcomm_recv_disc(s, dlci);
1576 		break;
1577 
1578 	case RFCOMM_UA:
1579 		if (__test_pf(hdr->ctrl))
1580 			rfcomm_recv_ua(s, dlci);
1581 		break;
1582 
1583 	case RFCOMM_DM:
1584 		rfcomm_recv_dm(s, dlci);
1585 		break;
1586 
1587 	case RFCOMM_UIH:
1588 		if (dlci)
1589 			return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1590 
1591 		rfcomm_recv_mcc(s, skb);
1592 		break;
1593 
1594 	default:
1595 		BT_ERR("Unknown packet type 0x%02x\n", type);
1596 		break;
1597 	}
1598 	kfree_skb(skb);
1599 	return 0;
1600 }
1601 
1602 /* ---- Connection and data processing ---- */
1603 
1604 static void rfcomm_process_connect(struct rfcomm_session *s)
1605 {
1606 	struct rfcomm_dlc *d;
1607 	struct list_head *p, *n;
1608 
1609 	BT_DBG("session %p state %ld", s, s->state);
1610 
1611 	list_for_each_safe(p, n, &s->dlcs) {
1612 		d = list_entry(p, struct rfcomm_dlc, list);
1613 		if (d->state == BT_CONFIG) {
1614 			d->mtu = s->mtu;
1615 			rfcomm_send_pn(s, 1, d);
1616 		}
1617 	}
1618 }
1619 
1620 /* Send data queued for the DLC.
1621  * Return number of frames left in the queue.
1622  */
1623 static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
1624 {
1625 	struct sk_buff *skb;
1626 	int err;
1627 
1628 	BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1629 			d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1630 
1631 	/* Send pending MSC */
1632 	if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1633 		rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1634 
1635 	if (d->cfc) {
1636 		/* CFC enabled.
1637 		 * Give them some credits */
1638 		if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1639 			       	d->rx_credits <= (d->cfc >> 2)) {
1640 			rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1641 			d->rx_credits = d->cfc;
1642 		}
1643 	} else {
1644 		/* CFC disabled.
1645 		 * Give ourselves some credits */
1646 		d->tx_credits = 5;
1647 	}
1648 
1649 	if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1650 		return skb_queue_len(&d->tx_queue);
1651 
1652 	while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1653 		err = rfcomm_send_frame(d->session, skb->data, skb->len);
1654 		if (err < 0) {
1655 			skb_queue_head(&d->tx_queue, skb);
1656 			break;
1657 		}
1658 		kfree_skb(skb);
1659 		d->tx_credits--;
1660 	}
1661 
1662 	if (d->cfc && !d->tx_credits) {
1663 		/* We're out of TX credits.
1664 		 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1665 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1666 	}
1667 
1668 	return skb_queue_len(&d->tx_queue);
1669 }
1670 
1671 static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
1672 {
1673 	struct rfcomm_dlc *d;
1674 	struct list_head *p, *n;
1675 
1676 	BT_DBG("session %p state %ld", s, s->state);
1677 
1678 	list_for_each_safe(p, n, &s->dlcs) {
1679 		d = list_entry(p, struct rfcomm_dlc, list);
1680 
1681 		if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1682 			__rfcomm_dlc_close(d, ETIMEDOUT);
1683 			continue;
1684 		}
1685 
1686 		if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) {
1687 			rfcomm_dlc_clear_timer(d);
1688 			rfcomm_dlc_accept(d);
1689 			if (d->link_mode & RFCOMM_LM_SECURE) {
1690 				struct sock *sk = s->sock->sk;
1691 				hci_conn_change_link_key(l2cap_pi(sk)->conn->hcon);
1692 			}
1693 			continue;
1694 		} else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) {
1695 			rfcomm_dlc_clear_timer(d);
1696 			rfcomm_send_dm(s, d->dlci);
1697 			__rfcomm_dlc_close(d, ECONNREFUSED);
1698 			continue;
1699 		}
1700 
1701 		if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1702 			continue;
1703 
1704 		if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1705 				d->mscex == RFCOMM_MSCEX_OK)
1706 			rfcomm_process_tx(d);
1707 	}
1708 }
1709 
1710 static inline void rfcomm_process_rx(struct rfcomm_session *s)
1711 {
1712 	struct socket *sock = s->sock;
1713 	struct sock *sk = sock->sk;
1714 	struct sk_buff *skb;
1715 
1716 	BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
1717 
1718 	/* Get data directly from socket receive queue without copying it. */
1719 	while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
1720 		skb_orphan(skb);
1721 		rfcomm_recv_frame(s, skb);
1722 	}
1723 
1724 	if (sk->sk_state == BT_CLOSED) {
1725 		if (!s->initiator)
1726 			rfcomm_session_put(s);
1727 
1728 		rfcomm_session_close(s, sk->sk_err);
1729 	}
1730 }
1731 
1732 static inline void rfcomm_accept_connection(struct rfcomm_session *s)
1733 {
1734 	struct socket *sock = s->sock, *nsock;
1735 	int err;
1736 
1737 	/* Fast check for a new connection.
1738 	 * Avoids unnesesary socket allocations. */
1739 	if (list_empty(&bt_sk(sock->sk)->accept_q))
1740 		return;
1741 
1742 	BT_DBG("session %p", s);
1743 
1744 	if (sock_create_lite(PF_BLUETOOTH, sock->type, BTPROTO_L2CAP, &nsock))
1745 		return;
1746 
1747 	nsock->ops  = sock->ops;
1748 
1749 	__module_get(nsock->ops->owner);
1750 
1751 	err = sock->ops->accept(sock, nsock, O_NONBLOCK);
1752 	if (err < 0) {
1753 		sock_release(nsock);
1754 		return;
1755 	}
1756 
1757 	/* Set our callbacks */
1758 	nsock->sk->sk_data_ready   = rfcomm_l2data_ready;
1759 	nsock->sk->sk_state_change = rfcomm_l2state_change;
1760 
1761 	s = rfcomm_session_add(nsock, BT_OPEN);
1762 	if (s) {
1763 		rfcomm_session_hold(s);
1764 		rfcomm_schedule(RFCOMM_SCHED_RX);
1765 	} else
1766 		sock_release(nsock);
1767 }
1768 
1769 static inline void rfcomm_check_connection(struct rfcomm_session *s)
1770 {
1771 	struct sock *sk = s->sock->sk;
1772 
1773 	BT_DBG("%p state %ld", s, s->state);
1774 
1775 	switch(sk->sk_state) {
1776 	case BT_CONNECTED:
1777 		s->state = BT_CONNECT;
1778 
1779 		/* We can adjust MTU on outgoing sessions.
1780 		 * L2CAP MTU minus UIH header and FCS. */
1781 		s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
1782 
1783 		rfcomm_send_sabm(s, 0);
1784 		break;
1785 
1786 	case BT_CLOSED:
1787 		s->state = BT_CLOSED;
1788 		rfcomm_session_close(s, sk->sk_err);
1789 		break;
1790 	}
1791 }
1792 
1793 static inline void rfcomm_process_sessions(void)
1794 {
1795 	struct list_head *p, *n;
1796 
1797 	rfcomm_lock();
1798 
1799 	list_for_each_safe(p, n, &session_list) {
1800 		struct rfcomm_session *s;
1801 		s = list_entry(p, struct rfcomm_session, list);
1802 
1803 		if (s->state == BT_LISTEN) {
1804 			rfcomm_accept_connection(s);
1805 			continue;
1806 		}
1807 
1808 		rfcomm_session_hold(s);
1809 
1810 		switch (s->state) {
1811 		case BT_BOUND:
1812 			rfcomm_check_connection(s);
1813 			break;
1814 
1815 		default:
1816 			rfcomm_process_rx(s);
1817 			break;
1818 		}
1819 
1820 		rfcomm_process_dlcs(s);
1821 
1822 		rfcomm_session_put(s);
1823 	}
1824 
1825 	rfcomm_unlock();
1826 }
1827 
1828 static void rfcomm_worker(void)
1829 {
1830 	BT_DBG("");
1831 
1832 	while (!atomic_read(&terminate)) {
1833 		if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
1834 			/* No pending events. Let's sleep.
1835 			 * Incoming connections and data will wake us up. */
1836 			set_current_state(TASK_INTERRUPTIBLE);
1837 			schedule();
1838 		}
1839 
1840 		/* Process stuff */
1841 		clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
1842 		rfcomm_process_sessions();
1843 	}
1844 	set_current_state(TASK_RUNNING);
1845 	return;
1846 }
1847 
1848 static int rfcomm_add_listener(bdaddr_t *ba)
1849 {
1850 	struct sockaddr_l2 addr;
1851 	struct socket *sock;
1852 	struct sock *sk;
1853 	struct rfcomm_session *s;
1854 	int    err = 0;
1855 
1856 	/* Create socket */
1857 	err = rfcomm_l2sock_create(&sock);
1858 	if (err < 0) {
1859 		BT_ERR("Create socket failed %d", err);
1860 		return err;
1861 	}
1862 
1863 	/* Bind socket */
1864 	bacpy(&addr.l2_bdaddr, ba);
1865 	addr.l2_family = AF_BLUETOOTH;
1866 	addr.l2_psm    = htobs(RFCOMM_PSM);
1867 	err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
1868 	if (err < 0) {
1869 		BT_ERR("Bind failed %d", err);
1870 		goto failed;
1871 	}
1872 
1873 	/* Set L2CAP options */
1874 	sk = sock->sk;
1875 	lock_sock(sk);
1876 	l2cap_pi(sk)->imtu = RFCOMM_MAX_L2CAP_MTU;
1877 	release_sock(sk);
1878 
1879 	/* Start listening on the socket */
1880 	err = sock->ops->listen(sock, 10);
1881 	if (err) {
1882 		BT_ERR("Listen failed %d", err);
1883 		goto failed;
1884 	}
1885 
1886 	/* Add listening session */
1887 	s = rfcomm_session_add(sock, BT_LISTEN);
1888 	if (!s)
1889 		goto failed;
1890 
1891 	rfcomm_session_hold(s);
1892 	return 0;
1893 failed:
1894 	sock_release(sock);
1895 	return err;
1896 }
1897 
1898 static void rfcomm_kill_listener(void)
1899 {
1900 	struct rfcomm_session *s;
1901 	struct list_head *p, *n;
1902 
1903 	BT_DBG("");
1904 
1905 	list_for_each_safe(p, n, &session_list) {
1906 		s = list_entry(p, struct rfcomm_session, list);
1907 		rfcomm_session_del(s);
1908 	}
1909 }
1910 
1911 static int rfcomm_run(void *unused)
1912 {
1913 	rfcomm_thread = current;
1914 
1915 	atomic_inc(&running);
1916 
1917 	daemonize("krfcommd");
1918 	set_user_nice(current, -10);
1919 	current->flags |= PF_NOFREEZE;
1920 
1921 	BT_DBG("");
1922 
1923 	rfcomm_add_listener(BDADDR_ANY);
1924 
1925 	rfcomm_worker();
1926 
1927 	rfcomm_kill_listener();
1928 
1929 	atomic_dec(&running);
1930 	return 0;
1931 }
1932 
1933 static void rfcomm_auth_cfm(struct hci_conn *conn, u8 status)
1934 {
1935 	struct rfcomm_session *s;
1936 	struct rfcomm_dlc *d;
1937 	struct list_head *p, *n;
1938 
1939 	BT_DBG("conn %p status 0x%02x", conn, status);
1940 
1941 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
1942 	if (!s)
1943 		return;
1944 
1945 	rfcomm_session_hold(s);
1946 
1947 	list_for_each_safe(p, n, &s->dlcs) {
1948 		d = list_entry(p, struct rfcomm_dlc, list);
1949 
1950 		if (d->link_mode & (RFCOMM_LM_ENCRYPT | RFCOMM_LM_SECURE))
1951 			continue;
1952 
1953 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
1954 			continue;
1955 
1956 		if (!status)
1957 			set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
1958 		else
1959 			set_bit(RFCOMM_AUTH_REJECT, &d->flags);
1960 	}
1961 
1962 	rfcomm_session_put(s);
1963 
1964 	rfcomm_schedule(RFCOMM_SCHED_AUTH);
1965 }
1966 
1967 static void rfcomm_encrypt_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
1968 {
1969 	struct rfcomm_session *s;
1970 	struct rfcomm_dlc *d;
1971 	struct list_head *p, *n;
1972 
1973 	BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
1974 
1975 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
1976 	if (!s)
1977 		return;
1978 
1979 	rfcomm_session_hold(s);
1980 
1981 	list_for_each_safe(p, n, &s->dlcs) {
1982 		d = list_entry(p, struct rfcomm_dlc, list);
1983 
1984 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
1985 			continue;
1986 
1987 		if (!status && encrypt)
1988 			set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
1989 		else
1990 			set_bit(RFCOMM_AUTH_REJECT, &d->flags);
1991 	}
1992 
1993 	rfcomm_session_put(s);
1994 
1995 	rfcomm_schedule(RFCOMM_SCHED_AUTH);
1996 }
1997 
1998 static struct hci_cb rfcomm_cb = {
1999 	.name		= "RFCOMM",
2000 	.auth_cfm	= rfcomm_auth_cfm,
2001 	.encrypt_cfm	= rfcomm_encrypt_cfm
2002 };
2003 
2004 /* ---- Proc fs support ---- */
2005 #ifdef CONFIG_PROC_FS
2006 static void *rfcomm_seq_start(struct seq_file *seq, loff_t *pos)
2007 {
2008 	struct rfcomm_session *s;
2009 	struct list_head *pp, *p;
2010 	loff_t l = *pos;
2011 
2012 	rfcomm_lock();
2013 
2014 	list_for_each(p, &session_list) {
2015 		s = list_entry(p, struct rfcomm_session, list);
2016 		list_for_each(pp, &s->dlcs)
2017 			if (!l--) {
2018 				seq->private = s;
2019 				return pp;
2020 			}
2021 	}
2022 	return NULL;
2023 }
2024 
2025 static void *rfcomm_seq_next(struct seq_file *seq, void *e, loff_t *pos)
2026 {
2027 	struct rfcomm_session *s = seq->private;
2028 	struct list_head *pp, *p = e;
2029 	(*pos)++;
2030 
2031 	if (p->next != &s->dlcs)
2032 		return p->next;
2033 
2034 	list_for_each(p, &session_list) {
2035 		s = list_entry(p, struct rfcomm_session, list);
2036 		__list_for_each(pp, &s->dlcs) {
2037 			seq->private = s;
2038 			return pp;
2039 		}
2040 	}
2041 	return NULL;
2042 }
2043 
2044 static void rfcomm_seq_stop(struct seq_file *seq, void *e)
2045 {
2046 	rfcomm_unlock();
2047 }
2048 
2049 static int  rfcomm_seq_show(struct seq_file *seq, void *e)
2050 {
2051 	struct rfcomm_session *s = seq->private;
2052 	struct sock *sk = s->sock->sk;
2053 	struct rfcomm_dlc *d = list_entry(e, struct rfcomm_dlc, list);
2054 
2055 	seq_printf(seq, "%s %s %ld %d %d %d %d\n",
2056 			batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
2057 			d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
2058 	return 0;
2059 }
2060 
2061 static struct seq_operations rfcomm_seq_ops = {
2062 	.start  = rfcomm_seq_start,
2063 	.next   = rfcomm_seq_next,
2064 	.stop   = rfcomm_seq_stop,
2065 	.show   = rfcomm_seq_show
2066 };
2067 
2068 static int rfcomm_seq_open(struct inode *inode, struct file *file)
2069 {
2070 	return seq_open(file, &rfcomm_seq_ops);
2071 }
2072 
2073 static struct file_operations rfcomm_seq_fops = {
2074 	.owner	 = THIS_MODULE,
2075 	.open    = rfcomm_seq_open,
2076 	.read    = seq_read,
2077 	.llseek  = seq_lseek,
2078 	.release = seq_release,
2079 };
2080 
2081 static int  __init rfcomm_proc_init(void)
2082 {
2083         struct proc_dir_entry *p;
2084 
2085 	proc_bt_rfcomm = proc_mkdir("rfcomm", proc_bt);
2086 	if (proc_bt_rfcomm) {
2087 		proc_bt_rfcomm->owner = THIS_MODULE;
2088 
2089         	p = create_proc_entry("dlc", S_IRUGO, proc_bt_rfcomm);
2090 		if (p)
2091         		p->proc_fops = &rfcomm_seq_fops;
2092 	}
2093         return 0;
2094 }
2095 
2096 static void __exit rfcomm_proc_cleanup(void)
2097 {
2098         remove_proc_entry("dlc", proc_bt_rfcomm);
2099 
2100 	remove_proc_entry("rfcomm", proc_bt);
2101 }
2102 
2103 #else /* CONFIG_PROC_FS */
2104 
2105 static int  __init rfcomm_proc_init(void)
2106 {
2107         return 0;
2108 }
2109 
2110 static void __exit rfcomm_proc_cleanup(void)
2111 {
2112         return;
2113 }
2114 #endif /* CONFIG_PROC_FS */
2115 
2116 /* ---- Initialization ---- */
2117 static int __init rfcomm_init(void)
2118 {
2119 	l2cap_load();
2120 
2121 	hci_register_cb(&rfcomm_cb);
2122 
2123 	kernel_thread(rfcomm_run, NULL, CLONE_KERNEL);
2124 
2125 	BT_INFO("RFCOMM ver %s", VERSION);
2126 
2127 	rfcomm_proc_init();
2128 
2129 	rfcomm_init_sockets();
2130 
2131 #ifdef CONFIG_BT_RFCOMM_TTY
2132 	rfcomm_init_ttys();
2133 #endif
2134 
2135 	return 0;
2136 }
2137 
2138 static void __exit rfcomm_exit(void)
2139 {
2140 	hci_unregister_cb(&rfcomm_cb);
2141 
2142 	/* Terminate working thread.
2143 	 * ie. Set terminate flag and wake it up */
2144 	atomic_inc(&terminate);
2145 	rfcomm_schedule(RFCOMM_SCHED_STATE);
2146 
2147 	/* Wait until thread is running */
2148 	while (atomic_read(&running))
2149 		schedule();
2150 
2151 #ifdef CONFIG_BT_RFCOMM_TTY
2152 	rfcomm_cleanup_ttys();
2153 #endif
2154 
2155 	rfcomm_cleanup_sockets();
2156 
2157 	rfcomm_proc_cleanup();
2158 }
2159 
2160 module_init(rfcomm_init);
2161 module_exit(rfcomm_exit);
2162 
2163 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
2164 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION);
2165 MODULE_VERSION(VERSION);
2166 MODULE_LICENSE("GPL");
2167 MODULE_ALIAS("bt-proto-3");
2168