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