]> asedeno.scripts.mit.edu Git - linux.git/blob - net/bluetooth/rfcomm/core.c
Merge tag 'ntb-5.4' of git://github.com/jonmason/ntb
[linux.git] / net / bluetooth / rfcomm / core.c
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
40 static bool disable_cfc;
41 static bool l2cap_ertm;
42 static int channel_mtu = -1;
43 static unsigned int l2cap_mtu = RFCOMM_MAX_L2CAP_MTU;
44
45 static struct task_struct *rfcomm_thread;
46
47 static DEFINE_MUTEX(rfcomm_mutex);
48 #define rfcomm_lock()   mutex_lock(&rfcomm_mutex)
49 #define rfcomm_unlock() mutex_unlock(&rfcomm_mutex)
50
51
52 static LIST_HEAD(session_list);
53
54 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
55 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
56 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
57 static int rfcomm_queue_disc(struct rfcomm_dlc *d);
58 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
59 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
60 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
61 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
62 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
63 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
64
65 static void rfcomm_process_connect(struct rfcomm_session *s);
66
67 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
68                                                         bdaddr_t *dst,
69                                                         u8 sec_level,
70                                                         int *err);
71 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
72 static 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
106 static DECLARE_WAIT_QUEUE_HEAD(rfcomm_wq);
107
108 static void rfcomm_schedule(void)
109 {
110         wake_up_all(&rfcomm_wq);
111 }
112
113 /* ---- RFCOMM FCS computation ---- */
114
115 /* reversed, 8-bit, poly=0x07 */
116 static 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 */
162 static inline u8 __fcs(u8 *data)
163 {
164         return 0xff - __crc(data);
165 }
166
167 /* FCS on 3 bytes */
168 static inline u8 __fcs2(u8 *data)
169 {
170         return 0xff - rfcomm_crc_table[__crc(data) ^ data[2]];
171 }
172
173 /* Check FCS */
174 static 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 ---- */
185 static void rfcomm_l2state_change(struct sock *sk)
186 {
187         BT_DBG("%p state %d", sk, sk->sk_state);
188         rfcomm_schedule();
189 }
190
191 static void rfcomm_l2data_ready(struct sock *sk)
192 {
193         BT_DBG("%p", sk);
194         rfcomm_schedule();
195 }
196
197 static 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
212 static 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
236 static void rfcomm_session_timeout(struct timer_list *t)
237 {
238         struct rfcomm_session *s = from_timer(s, t, timer);
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
246 static 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
253 static 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 ---- */
261 static void rfcomm_dlc_timeout(struct timer_list *t)
262 {
263         struct rfcomm_dlc *d = from_timer(d, t, timer);
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
272 static 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
280 static 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
288 static 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
303 struct 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         timer_setup(&d->timer, rfcomm_dlc_timeout, 0);
311
312         skb_queue_head_init(&d->tx_queue);
313         mutex_init(&d->lock);
314         refcount_set(&d->refcnt, 1);
315
316         rfcomm_dlc_clear_state(d);
317
318         BT_DBG("%p", d);
319
320         return d;
321 }
322
323 void 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
331 static 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
341 static 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, refcount_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
355 static 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
366 static int rfcomm_check_channel(u8 channel)
367 {
368         return channel < 1 || channel > 30;
369 }
370
371 static 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
425 int 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
437 static 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
451 static 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                 /* fall through */
487
488         default:
489                 rfcomm_dlc_clear_timer(d);
490
491                 rfcomm_dlc_lock(d);
492                 d->state = BT_CLOSED;
493                 d->state_change(d, err);
494                 rfcomm_dlc_unlock(d);
495
496                 skb_queue_purge(&d->tx_queue);
497                 rfcomm_dlc_unlink(d);
498         }
499
500         return 0;
501 }
502
503 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
504 {
505         int r = 0;
506         struct rfcomm_dlc *d_list;
507         struct rfcomm_session *s, *s_list;
508
509         BT_DBG("dlc %p state %ld dlci %d err %d", d, d->state, d->dlci, err);
510
511         rfcomm_lock();
512
513         s = d->session;
514         if (!s)
515                 goto no_session;
516
517         /* after waiting on the mutex check the session still exists
518          * then check the dlc still exists
519          */
520         list_for_each_entry(s_list, &session_list, list) {
521                 if (s_list == s) {
522                         list_for_each_entry(d_list, &s->dlcs, list) {
523                                 if (d_list == d) {
524                                         r = __rfcomm_dlc_close(d, err);
525                                         break;
526                                 }
527                         }
528                         break;
529                 }
530         }
531
532 no_session:
533         rfcomm_unlock();
534         return r;
535 }
536
537 struct rfcomm_dlc *rfcomm_dlc_exists(bdaddr_t *src, bdaddr_t *dst, u8 channel)
538 {
539         struct rfcomm_session *s;
540         struct rfcomm_dlc *dlc = NULL;
541         u8 dlci;
542
543         if (rfcomm_check_channel(channel))
544                 return ERR_PTR(-EINVAL);
545
546         rfcomm_lock();
547         s = rfcomm_session_get(src, dst);
548         if (s) {
549                 dlci = __dlci(__session_dir(s), channel);
550                 dlc = rfcomm_dlc_get(s, dlci);
551         }
552         rfcomm_unlock();
553         return dlc;
554 }
555
556 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
557 {
558         int len = skb->len;
559
560         if (d->state != BT_CONNECTED)
561                 return -ENOTCONN;
562
563         BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
564
565         if (len > d->mtu)
566                 return -EINVAL;
567
568         rfcomm_make_uih(skb, d->addr);
569         skb_queue_tail(&d->tx_queue, skb);
570
571         if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
572                 rfcomm_schedule();
573         return len;
574 }
575
576 void rfcomm_dlc_send_noerror(struct rfcomm_dlc *d, struct sk_buff *skb)
577 {
578         int len = skb->len;
579
580         BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
581
582         rfcomm_make_uih(skb, d->addr);
583         skb_queue_tail(&d->tx_queue, skb);
584
585         if (d->state == BT_CONNECTED &&
586             !test_bit(RFCOMM_TX_THROTTLED, &d->flags))
587                 rfcomm_schedule();
588 }
589
590 void __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
591 {
592         BT_DBG("dlc %p state %ld", d, d->state);
593
594         if (!d->cfc) {
595                 d->v24_sig |= RFCOMM_V24_FC;
596                 set_bit(RFCOMM_MSC_PENDING, &d->flags);
597         }
598         rfcomm_schedule();
599 }
600
601 void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
602 {
603         BT_DBG("dlc %p state %ld", d, d->state);
604
605         if (!d->cfc) {
606                 d->v24_sig &= ~RFCOMM_V24_FC;
607                 set_bit(RFCOMM_MSC_PENDING, &d->flags);
608         }
609         rfcomm_schedule();
610 }
611
612 /*
613    Set/get modem status functions use _local_ status i.e. what we report
614    to the other side.
615    Remote status is provided by dlc->modem_status() callback.
616  */
617 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
618 {
619         BT_DBG("dlc %p state %ld v24_sig 0x%x",
620                         d, d->state, v24_sig);
621
622         if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
623                 v24_sig |= RFCOMM_V24_FC;
624         else
625                 v24_sig &= ~RFCOMM_V24_FC;
626
627         d->v24_sig = v24_sig;
628
629         if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
630                 rfcomm_schedule();
631
632         return 0;
633 }
634
635 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
636 {
637         BT_DBG("dlc %p state %ld v24_sig 0x%x",
638                         d, d->state, d->v24_sig);
639
640         *v24_sig = d->v24_sig;
641         return 0;
642 }
643
644 /* ---- RFCOMM sessions ---- */
645 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
646 {
647         struct rfcomm_session *s = kzalloc(sizeof(*s), GFP_KERNEL);
648
649         if (!s)
650                 return NULL;
651
652         BT_DBG("session %p sock %p", s, sock);
653
654         timer_setup(&s->timer, rfcomm_session_timeout, 0);
655
656         INIT_LIST_HEAD(&s->dlcs);
657         s->state = state;
658         s->sock  = sock;
659
660         s->mtu = RFCOMM_DEFAULT_MTU;
661         s->cfc = disable_cfc ? RFCOMM_CFC_DISABLED : RFCOMM_CFC_UNKNOWN;
662
663         /* Do not increment module usage count for listening sessions.
664          * Otherwise we won't be able to unload the module. */
665         if (state != BT_LISTEN)
666                 if (!try_module_get(THIS_MODULE)) {
667                         kfree(s);
668                         return NULL;
669                 }
670
671         list_add(&s->list, &session_list);
672
673         return s;
674 }
675
676 static struct rfcomm_session *rfcomm_session_del(struct rfcomm_session *s)
677 {
678         int state = s->state;
679
680         BT_DBG("session %p state %ld", s, s->state);
681
682         list_del(&s->list);
683
684         rfcomm_session_clear_timer(s);
685         sock_release(s->sock);
686         kfree(s);
687
688         if (state != BT_LISTEN)
689                 module_put(THIS_MODULE);
690
691         return NULL;
692 }
693
694 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
695 {
696         struct rfcomm_session *s, *n;
697         struct l2cap_chan *chan;
698         list_for_each_entry_safe(s, n, &session_list, list) {
699                 chan = l2cap_pi(s->sock->sk)->chan;
700
701                 if ((!bacmp(src, BDADDR_ANY) || !bacmp(&chan->src, src)) &&
702                     !bacmp(&chan->dst, dst))
703                         return s;
704         }
705         return NULL;
706 }
707
708 static struct rfcomm_session *rfcomm_session_close(struct rfcomm_session *s,
709                                                    int err)
710 {
711         struct rfcomm_dlc *d, *n;
712
713         s->state = BT_CLOSED;
714
715         BT_DBG("session %p state %ld err %d", s, s->state, err);
716
717         /* Close all dlcs */
718         list_for_each_entry_safe(d, n, &s->dlcs, list) {
719                 d->state = BT_CLOSED;
720                 __rfcomm_dlc_close(d, err);
721         }
722
723         rfcomm_session_clear_timer(s);
724         return rfcomm_session_del(s);
725 }
726
727 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
728                                                         bdaddr_t *dst,
729                                                         u8 sec_level,
730                                                         int *err)
731 {
732         struct rfcomm_session *s = NULL;
733         struct sockaddr_l2 addr;
734         struct socket *sock;
735         struct sock *sk;
736
737         BT_DBG("%pMR -> %pMR", src, dst);
738
739         *err = rfcomm_l2sock_create(&sock);
740         if (*err < 0)
741                 return NULL;
742
743         bacpy(&addr.l2_bdaddr, src);
744         addr.l2_family = AF_BLUETOOTH;
745         addr.l2_psm    = 0;
746         addr.l2_cid    = 0;
747         addr.l2_bdaddr_type = BDADDR_BREDR;
748         *err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
749         if (*err < 0)
750                 goto failed;
751
752         /* Set L2CAP options */
753         sk = sock->sk;
754         lock_sock(sk);
755         l2cap_pi(sk)->chan->imtu = l2cap_mtu;
756         l2cap_pi(sk)->chan->sec_level = sec_level;
757         if (l2cap_ertm)
758                 l2cap_pi(sk)->chan->mode = L2CAP_MODE_ERTM;
759         release_sock(sk);
760
761         s = rfcomm_session_add(sock, BT_BOUND);
762         if (!s) {
763                 *err = -ENOMEM;
764                 goto failed;
765         }
766
767         s->initiator = 1;
768
769         bacpy(&addr.l2_bdaddr, dst);
770         addr.l2_family = AF_BLUETOOTH;
771         addr.l2_psm    = cpu_to_le16(L2CAP_PSM_RFCOMM);
772         addr.l2_cid    = 0;
773         addr.l2_bdaddr_type = BDADDR_BREDR;
774         *err = kernel_connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
775         if (*err == 0 || *err == -EINPROGRESS)
776                 return s;
777
778         return rfcomm_session_del(s);
779
780 failed:
781         sock_release(sock);
782         return NULL;
783 }
784
785 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
786 {
787         struct l2cap_chan *chan = l2cap_pi(s->sock->sk)->chan;
788         if (src)
789                 bacpy(src, &chan->src);
790         if (dst)
791                 bacpy(dst, &chan->dst);
792 }
793
794 /* ---- RFCOMM frame sending ---- */
795 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
796 {
797         struct kvec iv = { data, len };
798         struct msghdr msg;
799
800         BT_DBG("session %p len %d", s, len);
801
802         memset(&msg, 0, sizeof(msg));
803
804         return kernel_sendmsg(s->sock, &msg, &iv, 1, len);
805 }
806
807 static int rfcomm_send_cmd(struct rfcomm_session *s, struct rfcomm_cmd *cmd)
808 {
809         BT_DBG("%p cmd %u", s, cmd->ctrl);
810
811         return rfcomm_send_frame(s, (void *) cmd, sizeof(*cmd));
812 }
813
814 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
815 {
816         struct rfcomm_cmd cmd;
817
818         BT_DBG("%p dlci %d", s, dlci);
819
820         cmd.addr = __addr(s->initiator, dlci);
821         cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
822         cmd.len  = __len8(0);
823         cmd.fcs  = __fcs2((u8 *) &cmd);
824
825         return rfcomm_send_cmd(s, &cmd);
826 }
827
828 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
829 {
830         struct rfcomm_cmd cmd;
831
832         BT_DBG("%p dlci %d", s, dlci);
833
834         cmd.addr = __addr(!s->initiator, dlci);
835         cmd.ctrl = __ctrl(RFCOMM_UA, 1);
836         cmd.len  = __len8(0);
837         cmd.fcs  = __fcs2((u8 *) &cmd);
838
839         return rfcomm_send_cmd(s, &cmd);
840 }
841
842 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
843 {
844         struct rfcomm_cmd cmd;
845
846         BT_DBG("%p dlci %d", s, dlci);
847
848         cmd.addr = __addr(s->initiator, dlci);
849         cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
850         cmd.len  = __len8(0);
851         cmd.fcs  = __fcs2((u8 *) &cmd);
852
853         return rfcomm_send_cmd(s, &cmd);
854 }
855
856 static int rfcomm_queue_disc(struct rfcomm_dlc *d)
857 {
858         struct rfcomm_cmd *cmd;
859         struct sk_buff *skb;
860
861         BT_DBG("dlc %p dlci %d", d, d->dlci);
862
863         skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
864         if (!skb)
865                 return -ENOMEM;
866
867         cmd = __skb_put(skb, sizeof(*cmd));
868         cmd->addr = d->addr;
869         cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
870         cmd->len  = __len8(0);
871         cmd->fcs  = __fcs2((u8 *) cmd);
872
873         skb_queue_tail(&d->tx_queue, skb);
874         rfcomm_schedule();
875         return 0;
876 }
877
878 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
879 {
880         struct rfcomm_cmd cmd;
881
882         BT_DBG("%p dlci %d", s, dlci);
883
884         cmd.addr = __addr(!s->initiator, dlci);
885         cmd.ctrl = __ctrl(RFCOMM_DM, 1);
886         cmd.len  = __len8(0);
887         cmd.fcs  = __fcs2((u8 *) &cmd);
888
889         return rfcomm_send_cmd(s, &cmd);
890 }
891
892 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
893 {
894         struct rfcomm_hdr *hdr;
895         struct rfcomm_mcc *mcc;
896         u8 buf[16], *ptr = buf;
897
898         BT_DBG("%p cr %d type %d", s, cr, type);
899
900         hdr = (void *) ptr; ptr += sizeof(*hdr);
901         hdr->addr = __addr(s->initiator, 0);
902         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
903         hdr->len  = __len8(sizeof(*mcc) + 1);
904
905         mcc = (void *) ptr; ptr += sizeof(*mcc);
906         mcc->type = __mcc_type(0, RFCOMM_NSC);
907         mcc->len  = __len8(1);
908
909         /* Type that we didn't like */
910         *ptr = __mcc_type(cr, type); ptr++;
911
912         *ptr = __fcs(buf); ptr++;
913
914         return rfcomm_send_frame(s, buf, ptr - buf);
915 }
916
917 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
918 {
919         struct rfcomm_hdr *hdr;
920         struct rfcomm_mcc *mcc;
921         struct rfcomm_pn  *pn;
922         u8 buf[16], *ptr = buf;
923
924         BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
925
926         hdr = (void *) ptr; ptr += sizeof(*hdr);
927         hdr->addr = __addr(s->initiator, 0);
928         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
929         hdr->len  = __len8(sizeof(*mcc) + sizeof(*pn));
930
931         mcc = (void *) ptr; ptr += sizeof(*mcc);
932         mcc->type = __mcc_type(cr, RFCOMM_PN);
933         mcc->len  = __len8(sizeof(*pn));
934
935         pn = (void *) ptr; ptr += sizeof(*pn);
936         pn->dlci        = d->dlci;
937         pn->priority    = d->priority;
938         pn->ack_timer   = 0;
939         pn->max_retrans = 0;
940
941         if (s->cfc) {
942                 pn->flow_ctrl = cr ? 0xf0 : 0xe0;
943                 pn->credits = RFCOMM_DEFAULT_CREDITS;
944         } else {
945                 pn->flow_ctrl = 0;
946                 pn->credits   = 0;
947         }
948
949         if (cr && channel_mtu >= 0)
950                 pn->mtu = cpu_to_le16(channel_mtu);
951         else
952                 pn->mtu = cpu_to_le16(d->mtu);
953
954         *ptr = __fcs(buf); ptr++;
955
956         return rfcomm_send_frame(s, buf, ptr - buf);
957 }
958
959 int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
960                         u8 bit_rate, u8 data_bits, u8 stop_bits,
961                         u8 parity, u8 flow_ctrl_settings,
962                         u8 xon_char, u8 xoff_char, u16 param_mask)
963 {
964         struct rfcomm_hdr *hdr;
965         struct rfcomm_mcc *mcc;
966         struct rfcomm_rpn *rpn;
967         u8 buf[16], *ptr = buf;
968
969         BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
970                         " flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
971                 s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
972                 flow_ctrl_settings, xon_char, xoff_char, param_mask);
973
974         hdr = (void *) ptr; ptr += sizeof(*hdr);
975         hdr->addr = __addr(s->initiator, 0);
976         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
977         hdr->len  = __len8(sizeof(*mcc) + sizeof(*rpn));
978
979         mcc = (void *) ptr; ptr += sizeof(*mcc);
980         mcc->type = __mcc_type(cr, RFCOMM_RPN);
981         mcc->len  = __len8(sizeof(*rpn));
982
983         rpn = (void *) ptr; ptr += sizeof(*rpn);
984         rpn->dlci          = __addr(1, dlci);
985         rpn->bit_rate      = bit_rate;
986         rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
987         rpn->flow_ctrl     = flow_ctrl_settings;
988         rpn->xon_char      = xon_char;
989         rpn->xoff_char     = xoff_char;
990         rpn->param_mask    = cpu_to_le16(param_mask);
991
992         *ptr = __fcs(buf); ptr++;
993
994         return rfcomm_send_frame(s, buf, ptr - buf);
995 }
996
997 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
998 {
999         struct rfcomm_hdr *hdr;
1000         struct rfcomm_mcc *mcc;
1001         struct rfcomm_rls *rls;
1002         u8 buf[16], *ptr = buf;
1003
1004         BT_DBG("%p cr %d status 0x%x", s, cr, status);
1005
1006         hdr = (void *) ptr; ptr += sizeof(*hdr);
1007         hdr->addr = __addr(s->initiator, 0);
1008         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1009         hdr->len  = __len8(sizeof(*mcc) + sizeof(*rls));
1010
1011         mcc = (void *) ptr; ptr += sizeof(*mcc);
1012         mcc->type = __mcc_type(cr, RFCOMM_RLS);
1013         mcc->len  = __len8(sizeof(*rls));
1014
1015         rls = (void *) ptr; ptr += sizeof(*rls);
1016         rls->dlci   = __addr(1, dlci);
1017         rls->status = status;
1018
1019         *ptr = __fcs(buf); ptr++;
1020
1021         return rfcomm_send_frame(s, buf, ptr - buf);
1022 }
1023
1024 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
1025 {
1026         struct rfcomm_hdr *hdr;
1027         struct rfcomm_mcc *mcc;
1028         struct rfcomm_msc *msc;
1029         u8 buf[16], *ptr = buf;
1030
1031         BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
1032
1033         hdr = (void *) ptr; ptr += sizeof(*hdr);
1034         hdr->addr = __addr(s->initiator, 0);
1035         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1036         hdr->len  = __len8(sizeof(*mcc) + sizeof(*msc));
1037
1038         mcc = (void *) ptr; ptr += sizeof(*mcc);
1039         mcc->type = __mcc_type(cr, RFCOMM_MSC);
1040         mcc->len  = __len8(sizeof(*msc));
1041
1042         msc = (void *) ptr; ptr += sizeof(*msc);
1043         msc->dlci    = __addr(1, dlci);
1044         msc->v24_sig = v24_sig | 0x01;
1045
1046         *ptr = __fcs(buf); ptr++;
1047
1048         return rfcomm_send_frame(s, buf, ptr - buf);
1049 }
1050
1051 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
1052 {
1053         struct rfcomm_hdr *hdr;
1054         struct rfcomm_mcc *mcc;
1055         u8 buf[16], *ptr = buf;
1056
1057         BT_DBG("%p cr %d", s, cr);
1058
1059         hdr = (void *) ptr; ptr += sizeof(*hdr);
1060         hdr->addr = __addr(s->initiator, 0);
1061         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1062         hdr->len  = __len8(sizeof(*mcc));
1063
1064         mcc = (void *) ptr; ptr += sizeof(*mcc);
1065         mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
1066         mcc->len  = __len8(0);
1067
1068         *ptr = __fcs(buf); ptr++;
1069
1070         return rfcomm_send_frame(s, buf, ptr - buf);
1071 }
1072
1073 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
1074 {
1075         struct rfcomm_hdr *hdr;
1076         struct rfcomm_mcc *mcc;
1077         u8 buf[16], *ptr = buf;
1078
1079         BT_DBG("%p cr %d", s, cr);
1080
1081         hdr = (void *) ptr; ptr += sizeof(*hdr);
1082         hdr->addr = __addr(s->initiator, 0);
1083         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1084         hdr->len  = __len8(sizeof(*mcc));
1085
1086         mcc = (void *) ptr; ptr += sizeof(*mcc);
1087         mcc->type = __mcc_type(cr, RFCOMM_FCON);
1088         mcc->len  = __len8(0);
1089
1090         *ptr = __fcs(buf); ptr++;
1091
1092         return rfcomm_send_frame(s, buf, ptr - buf);
1093 }
1094
1095 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
1096 {
1097         struct socket *sock = s->sock;
1098         struct kvec iv[3];
1099         struct msghdr msg;
1100         unsigned char hdr[5], crc[1];
1101
1102         if (len > 125)
1103                 return -EINVAL;
1104
1105         BT_DBG("%p cr %d", s, cr);
1106
1107         hdr[0] = __addr(s->initiator, 0);
1108         hdr[1] = __ctrl(RFCOMM_UIH, 0);
1109         hdr[2] = 0x01 | ((len + 2) << 1);
1110         hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
1111         hdr[4] = 0x01 | (len << 1);
1112
1113         crc[0] = __fcs(hdr);
1114
1115         iv[0].iov_base = hdr;
1116         iv[0].iov_len  = 5;
1117         iv[1].iov_base = pattern;
1118         iv[1].iov_len  = len;
1119         iv[2].iov_base = crc;
1120         iv[2].iov_len  = 1;
1121
1122         memset(&msg, 0, sizeof(msg));
1123
1124         return kernel_sendmsg(sock, &msg, iv, 3, 6 + len);
1125 }
1126
1127 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
1128 {
1129         struct rfcomm_hdr *hdr;
1130         u8 buf[16], *ptr = buf;
1131
1132         BT_DBG("%p addr %d credits %d", s, addr, credits);
1133
1134         hdr = (void *) ptr; ptr += sizeof(*hdr);
1135         hdr->addr = addr;
1136         hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
1137         hdr->len  = __len8(0);
1138
1139         *ptr = credits; ptr++;
1140
1141         *ptr = __fcs(buf); ptr++;
1142
1143         return rfcomm_send_frame(s, buf, ptr - buf);
1144 }
1145
1146 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
1147 {
1148         struct rfcomm_hdr *hdr;
1149         int len = skb->len;
1150         u8 *crc;
1151
1152         if (len > 127) {
1153                 hdr = skb_push(skb, 4);
1154                 put_unaligned(cpu_to_le16(__len16(len)), (__le16 *) &hdr->len);
1155         } else {
1156                 hdr = skb_push(skb, 3);
1157                 hdr->len = __len8(len);
1158         }
1159         hdr->addr = addr;
1160         hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1161
1162         crc = skb_put(skb, 1);
1163         *crc = __fcs((void *) hdr);
1164 }
1165
1166 /* ---- RFCOMM frame reception ---- */
1167 static struct rfcomm_session *rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
1168 {
1169         BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1170
1171         if (dlci) {
1172                 /* Data channel */
1173                 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1174                 if (!d) {
1175                         rfcomm_send_dm(s, dlci);
1176                         return s;
1177                 }
1178
1179                 switch (d->state) {
1180                 case BT_CONNECT:
1181                         rfcomm_dlc_clear_timer(d);
1182
1183                         rfcomm_dlc_lock(d);
1184                         d->state = BT_CONNECTED;
1185                         d->state_change(d, 0);
1186                         rfcomm_dlc_unlock(d);
1187
1188                         rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1189                         break;
1190
1191                 case BT_DISCONN:
1192                         d->state = BT_CLOSED;
1193                         __rfcomm_dlc_close(d, 0);
1194
1195                         if (list_empty(&s->dlcs)) {
1196                                 s->state = BT_DISCONN;
1197                                 rfcomm_send_disc(s, 0);
1198                                 rfcomm_session_clear_timer(s);
1199                         }
1200
1201                         break;
1202                 }
1203         } else {
1204                 /* Control channel */
1205                 switch (s->state) {
1206                 case BT_CONNECT:
1207                         s->state = BT_CONNECTED;
1208                         rfcomm_process_connect(s);
1209                         break;
1210
1211                 case BT_DISCONN:
1212                         s = rfcomm_session_close(s, ECONNRESET);
1213                         break;
1214                 }
1215         }
1216         return s;
1217 }
1218
1219 static struct rfcomm_session *rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1220 {
1221         int err = 0;
1222
1223         BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1224
1225         if (dlci) {
1226                 /* Data DLC */
1227                 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1228                 if (d) {
1229                         if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1230                                 err = ECONNREFUSED;
1231                         else
1232                                 err = ECONNRESET;
1233
1234                         d->state = BT_CLOSED;
1235                         __rfcomm_dlc_close(d, err);
1236                 }
1237         } else {
1238                 if (s->state == BT_CONNECT)
1239                         err = ECONNREFUSED;
1240                 else
1241                         err = ECONNRESET;
1242
1243                 s = rfcomm_session_close(s, err);
1244         }
1245         return s;
1246 }
1247
1248 static struct rfcomm_session *rfcomm_recv_disc(struct rfcomm_session *s,
1249                                                u8 dlci)
1250 {
1251         int err = 0;
1252
1253         BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1254
1255         if (dlci) {
1256                 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1257                 if (d) {
1258                         rfcomm_send_ua(s, dlci);
1259
1260                         if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1261                                 err = ECONNREFUSED;
1262                         else
1263                                 err = ECONNRESET;
1264
1265                         d->state = BT_CLOSED;
1266                         __rfcomm_dlc_close(d, err);
1267                 } else
1268                         rfcomm_send_dm(s, dlci);
1269
1270         } else {
1271                 rfcomm_send_ua(s, 0);
1272
1273                 if (s->state == BT_CONNECT)
1274                         err = ECONNREFUSED;
1275                 else
1276                         err = ECONNRESET;
1277
1278                 s = rfcomm_session_close(s, err);
1279         }
1280         return s;
1281 }
1282
1283 void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1284 {
1285         struct sock *sk = d->session->sock->sk;
1286         struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1287
1288         BT_DBG("dlc %p", d);
1289
1290         rfcomm_send_ua(d->session, d->dlci);
1291
1292         rfcomm_dlc_clear_timer(d);
1293
1294         rfcomm_dlc_lock(d);
1295         d->state = BT_CONNECTED;
1296         d->state_change(d, 0);
1297         rfcomm_dlc_unlock(d);
1298
1299         if (d->role_switch)
1300                 hci_conn_switch_role(conn->hcon, 0x00);
1301
1302         rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1303 }
1304
1305 static void rfcomm_check_accept(struct rfcomm_dlc *d)
1306 {
1307         if (rfcomm_check_security(d)) {
1308                 if (d->defer_setup) {
1309                         set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1310                         rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1311
1312                         rfcomm_dlc_lock(d);
1313                         d->state = BT_CONNECT2;
1314                         d->state_change(d, 0);
1315                         rfcomm_dlc_unlock(d);
1316                 } else
1317                         rfcomm_dlc_accept(d);
1318         } else {
1319                 set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1320                 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1321         }
1322 }
1323
1324 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1325 {
1326         struct rfcomm_dlc *d;
1327         u8 channel;
1328
1329         BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1330
1331         if (!dlci) {
1332                 rfcomm_send_ua(s, 0);
1333
1334                 if (s->state == BT_OPEN) {
1335                         s->state = BT_CONNECTED;
1336                         rfcomm_process_connect(s);
1337                 }
1338                 return 0;
1339         }
1340
1341         /* Check if DLC exists */
1342         d = rfcomm_dlc_get(s, dlci);
1343         if (d) {
1344                 if (d->state == BT_OPEN) {
1345                         /* DLC was previously opened by PN request */
1346                         rfcomm_check_accept(d);
1347                 }
1348                 return 0;
1349         }
1350
1351         /* Notify socket layer about incoming connection */
1352         channel = __srv_channel(dlci);
1353         if (rfcomm_connect_ind(s, channel, &d)) {
1354                 d->dlci = dlci;
1355                 d->addr = __addr(s->initiator, dlci);
1356                 rfcomm_dlc_link(s, d);
1357
1358                 rfcomm_check_accept(d);
1359         } else {
1360                 rfcomm_send_dm(s, dlci);
1361         }
1362
1363         return 0;
1364 }
1365
1366 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1367 {
1368         struct rfcomm_session *s = d->session;
1369
1370         BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1371                         d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1372
1373         if ((pn->flow_ctrl == 0xf0 && s->cfc != RFCOMM_CFC_DISABLED) ||
1374                                                 pn->flow_ctrl == 0xe0) {
1375                 d->cfc = RFCOMM_CFC_ENABLED;
1376                 d->tx_credits = pn->credits;
1377         } else {
1378                 d->cfc = RFCOMM_CFC_DISABLED;
1379                 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1380         }
1381
1382         if (s->cfc == RFCOMM_CFC_UNKNOWN)
1383                 s->cfc = d->cfc;
1384
1385         d->priority = pn->priority;
1386
1387         d->mtu = __le16_to_cpu(pn->mtu);
1388
1389         if (cr && d->mtu > s->mtu)
1390                 d->mtu = s->mtu;
1391
1392         return 0;
1393 }
1394
1395 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1396 {
1397         struct rfcomm_pn *pn = (void *) skb->data;
1398         struct rfcomm_dlc *d;
1399         u8 dlci = pn->dlci;
1400
1401         BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1402
1403         if (!dlci)
1404                 return 0;
1405
1406         d = rfcomm_dlc_get(s, dlci);
1407         if (d) {
1408                 if (cr) {
1409                         /* PN request */
1410                         rfcomm_apply_pn(d, cr, pn);
1411                         rfcomm_send_pn(s, 0, d);
1412                 } else {
1413                         /* PN response */
1414                         switch (d->state) {
1415                         case BT_CONFIG:
1416                                 rfcomm_apply_pn(d, cr, pn);
1417
1418                                 d->state = BT_CONNECT;
1419                                 rfcomm_send_sabm(s, d->dlci);
1420                                 break;
1421                         }
1422                 }
1423         } else {
1424                 u8 channel = __srv_channel(dlci);
1425
1426                 if (!cr)
1427                         return 0;
1428
1429                 /* PN request for non existing DLC.
1430                  * Assume incoming connection. */
1431                 if (rfcomm_connect_ind(s, channel, &d)) {
1432                         d->dlci = dlci;
1433                         d->addr = __addr(s->initiator, dlci);
1434                         rfcomm_dlc_link(s, d);
1435
1436                         rfcomm_apply_pn(d, cr, pn);
1437
1438                         d->state = BT_OPEN;
1439                         rfcomm_send_pn(s, 0, d);
1440                 } else {
1441                         rfcomm_send_dm(s, dlci);
1442                 }
1443         }
1444         return 0;
1445 }
1446
1447 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1448 {
1449         struct rfcomm_rpn *rpn = (void *) skb->data;
1450         u8 dlci = __get_dlci(rpn->dlci);
1451
1452         u8 bit_rate  = 0;
1453         u8 data_bits = 0;
1454         u8 stop_bits = 0;
1455         u8 parity    = 0;
1456         u8 flow_ctrl = 0;
1457         u8 xon_char  = 0;
1458         u8 xoff_char = 0;
1459         u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1460
1461         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",
1462                 dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1463                 rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1464
1465         if (!cr)
1466                 return 0;
1467
1468         if (len == 1) {
1469                 /* This is a request, return default (according to ETSI TS 07.10) settings */
1470                 bit_rate  = RFCOMM_RPN_BR_9600;
1471                 data_bits = RFCOMM_RPN_DATA_8;
1472                 stop_bits = RFCOMM_RPN_STOP_1;
1473                 parity    = RFCOMM_RPN_PARITY_NONE;
1474                 flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1475                 xon_char  = RFCOMM_RPN_XON_CHAR;
1476                 xoff_char = RFCOMM_RPN_XOFF_CHAR;
1477                 goto rpn_out;
1478         }
1479
1480         /* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1481          * no parity, no flow control lines, normal XON/XOFF chars */
1482
1483         if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_BITRATE)) {
1484                 bit_rate = rpn->bit_rate;
1485                 if (bit_rate > RFCOMM_RPN_BR_230400) {
1486                         BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1487                         bit_rate = RFCOMM_RPN_BR_9600;
1488                         rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1489                 }
1490         }
1491
1492         if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_DATA)) {
1493                 data_bits = __get_rpn_data_bits(rpn->line_settings);
1494                 if (data_bits != RFCOMM_RPN_DATA_8) {
1495                         BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1496                         data_bits = RFCOMM_RPN_DATA_8;
1497                         rpn_mask ^= RFCOMM_RPN_PM_DATA;
1498                 }
1499         }
1500
1501         if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_STOP)) {
1502                 stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1503                 if (stop_bits != RFCOMM_RPN_STOP_1) {
1504                         BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1505                         stop_bits = RFCOMM_RPN_STOP_1;
1506                         rpn_mask ^= RFCOMM_RPN_PM_STOP;
1507                 }
1508         }
1509
1510         if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_PARITY)) {
1511                 parity = __get_rpn_parity(rpn->line_settings);
1512                 if (parity != RFCOMM_RPN_PARITY_NONE) {
1513                         BT_DBG("RPN parity mismatch 0x%x", parity);
1514                         parity = RFCOMM_RPN_PARITY_NONE;
1515                         rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1516                 }
1517         }
1518
1519         if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_FLOW)) {
1520                 flow_ctrl = rpn->flow_ctrl;
1521                 if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1522                         BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1523                         flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1524                         rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1525                 }
1526         }
1527
1528         if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XON)) {
1529                 xon_char = rpn->xon_char;
1530                 if (xon_char != RFCOMM_RPN_XON_CHAR) {
1531                         BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1532                         xon_char = RFCOMM_RPN_XON_CHAR;
1533                         rpn_mask ^= RFCOMM_RPN_PM_XON;
1534                 }
1535         }
1536
1537         if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XOFF)) {
1538                 xoff_char = rpn->xoff_char;
1539                 if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1540                         BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1541                         xoff_char = RFCOMM_RPN_XOFF_CHAR;
1542                         rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1543                 }
1544         }
1545
1546 rpn_out:
1547         rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits,
1548                         parity, flow_ctrl, xon_char, xoff_char, rpn_mask);
1549
1550         return 0;
1551 }
1552
1553 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1554 {
1555         struct rfcomm_rls *rls = (void *) skb->data;
1556         u8 dlci = __get_dlci(rls->dlci);
1557
1558         BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1559
1560         if (!cr)
1561                 return 0;
1562
1563         /* We should probably do something with this information here. But
1564          * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1565          * mandatory to recognise and respond to RLS */
1566
1567         rfcomm_send_rls(s, 0, dlci, rls->status);
1568
1569         return 0;
1570 }
1571
1572 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1573 {
1574         struct rfcomm_msc *msc = (void *) skb->data;
1575         struct rfcomm_dlc *d;
1576         u8 dlci = __get_dlci(msc->dlci);
1577
1578         BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1579
1580         d = rfcomm_dlc_get(s, dlci);
1581         if (!d)
1582                 return 0;
1583
1584         if (cr) {
1585                 if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1586                         set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1587                 else
1588                         clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1589
1590                 rfcomm_dlc_lock(d);
1591
1592                 d->remote_v24_sig = msc->v24_sig;
1593
1594                 if (d->modem_status)
1595                         d->modem_status(d, msc->v24_sig);
1596
1597                 rfcomm_dlc_unlock(d);
1598
1599                 rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1600
1601                 d->mscex |= RFCOMM_MSCEX_RX;
1602         } else
1603                 d->mscex |= RFCOMM_MSCEX_TX;
1604
1605         return 0;
1606 }
1607
1608 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1609 {
1610         struct rfcomm_mcc *mcc = (void *) skb->data;
1611         u8 type, cr, len;
1612
1613         cr   = __test_cr(mcc->type);
1614         type = __get_mcc_type(mcc->type);
1615         len  = __get_mcc_len(mcc->len);
1616
1617         BT_DBG("%p type 0x%x cr %d", s, type, cr);
1618
1619         skb_pull(skb, 2);
1620
1621         switch (type) {
1622         case RFCOMM_PN:
1623                 rfcomm_recv_pn(s, cr, skb);
1624                 break;
1625
1626         case RFCOMM_RPN:
1627                 rfcomm_recv_rpn(s, cr, len, skb);
1628                 break;
1629
1630         case RFCOMM_RLS:
1631                 rfcomm_recv_rls(s, cr, skb);
1632                 break;
1633
1634         case RFCOMM_MSC:
1635                 rfcomm_recv_msc(s, cr, skb);
1636                 break;
1637
1638         case RFCOMM_FCOFF:
1639                 if (cr) {
1640                         set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1641                         rfcomm_send_fcoff(s, 0);
1642                 }
1643                 break;
1644
1645         case RFCOMM_FCON:
1646                 if (cr) {
1647                         clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1648                         rfcomm_send_fcon(s, 0);
1649                 }
1650                 break;
1651
1652         case RFCOMM_TEST:
1653                 if (cr)
1654                         rfcomm_send_test(s, 0, skb->data, skb->len);
1655                 break;
1656
1657         case RFCOMM_NSC:
1658                 break;
1659
1660         default:
1661                 BT_ERR("Unknown control type 0x%02x", type);
1662                 rfcomm_send_nsc(s, cr, type);
1663                 break;
1664         }
1665         return 0;
1666 }
1667
1668 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1669 {
1670         struct rfcomm_dlc *d;
1671
1672         BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1673
1674         d = rfcomm_dlc_get(s, dlci);
1675         if (!d) {
1676                 rfcomm_send_dm(s, dlci);
1677                 goto drop;
1678         }
1679
1680         if (pf && d->cfc) {
1681                 u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1682
1683                 d->tx_credits += credits;
1684                 if (d->tx_credits)
1685                         clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1686         }
1687
1688         if (skb->len && d->state == BT_CONNECTED) {
1689                 rfcomm_dlc_lock(d);
1690                 d->rx_credits--;
1691                 d->data_ready(d, skb);
1692                 rfcomm_dlc_unlock(d);
1693                 return 0;
1694         }
1695
1696 drop:
1697         kfree_skb(skb);
1698         return 0;
1699 }
1700
1701 static struct rfcomm_session *rfcomm_recv_frame(struct rfcomm_session *s,
1702                                                 struct sk_buff *skb)
1703 {
1704         struct rfcomm_hdr *hdr = (void *) skb->data;
1705         u8 type, dlci, fcs;
1706
1707         if (!s) {
1708                 /* no session, so free socket data */
1709                 kfree_skb(skb);
1710                 return s;
1711         }
1712
1713         dlci = __get_dlci(hdr->addr);
1714         type = __get_type(hdr->ctrl);
1715
1716         /* Trim FCS */
1717         skb->len--; skb->tail--;
1718         fcs = *(u8 *)skb_tail_pointer(skb);
1719
1720         if (__check_fcs(skb->data, type, fcs)) {
1721                 BT_ERR("bad checksum in packet");
1722                 kfree_skb(skb);
1723                 return s;
1724         }
1725
1726         if (__test_ea(hdr->len))
1727                 skb_pull(skb, 3);
1728         else
1729                 skb_pull(skb, 4);
1730
1731         switch (type) {
1732         case RFCOMM_SABM:
1733                 if (__test_pf(hdr->ctrl))
1734                         rfcomm_recv_sabm(s, dlci);
1735                 break;
1736
1737         case RFCOMM_DISC:
1738                 if (__test_pf(hdr->ctrl))
1739                         s = rfcomm_recv_disc(s, dlci);
1740                 break;
1741
1742         case RFCOMM_UA:
1743                 if (__test_pf(hdr->ctrl))
1744                         s = rfcomm_recv_ua(s, dlci);
1745                 break;
1746
1747         case RFCOMM_DM:
1748                 s = rfcomm_recv_dm(s, dlci);
1749                 break;
1750
1751         case RFCOMM_UIH:
1752                 if (dlci) {
1753                         rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1754                         return s;
1755                 }
1756                 rfcomm_recv_mcc(s, skb);
1757                 break;
1758
1759         default:
1760                 BT_ERR("Unknown packet type 0x%02x", type);
1761                 break;
1762         }
1763         kfree_skb(skb);
1764         return s;
1765 }
1766
1767 /* ---- Connection and data processing ---- */
1768
1769 static void rfcomm_process_connect(struct rfcomm_session *s)
1770 {
1771         struct rfcomm_dlc *d, *n;
1772
1773         BT_DBG("session %p state %ld", s, s->state);
1774
1775         list_for_each_entry_safe(d, n, &s->dlcs, list) {
1776                 if (d->state == BT_CONFIG) {
1777                         d->mtu = s->mtu;
1778                         if (rfcomm_check_security(d)) {
1779                                 rfcomm_send_pn(s, 1, d);
1780                         } else {
1781                                 set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1782                                 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1783                         }
1784                 }
1785         }
1786 }
1787
1788 /* Send data queued for the DLC.
1789  * Return number of frames left in the queue.
1790  */
1791 static int rfcomm_process_tx(struct rfcomm_dlc *d)
1792 {
1793         struct sk_buff *skb;
1794         int err;
1795
1796         BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1797                         d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1798
1799         /* Send pending MSC */
1800         if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1801                 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1802
1803         if (d->cfc) {
1804                 /* CFC enabled.
1805                  * Give them some credits */
1806                 if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1807                                 d->rx_credits <= (d->cfc >> 2)) {
1808                         rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1809                         d->rx_credits = d->cfc;
1810                 }
1811         } else {
1812                 /* CFC disabled.
1813                  * Give ourselves some credits */
1814                 d->tx_credits = 5;
1815         }
1816
1817         if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1818                 return skb_queue_len(&d->tx_queue);
1819
1820         while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1821                 err = rfcomm_send_frame(d->session, skb->data, skb->len);
1822                 if (err < 0) {
1823                         skb_queue_head(&d->tx_queue, skb);
1824                         break;
1825                 }
1826                 kfree_skb(skb);
1827                 d->tx_credits--;
1828         }
1829
1830         if (d->cfc && !d->tx_credits) {
1831                 /* We're out of TX credits.
1832                  * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1833                 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1834         }
1835
1836         return skb_queue_len(&d->tx_queue);
1837 }
1838
1839 static void rfcomm_process_dlcs(struct rfcomm_session *s)
1840 {
1841         struct rfcomm_dlc *d, *n;
1842
1843         BT_DBG("session %p state %ld", s, s->state);
1844
1845         list_for_each_entry_safe(d, n, &s->dlcs, list) {
1846                 if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1847                         __rfcomm_dlc_close(d, ETIMEDOUT);
1848                         continue;
1849                 }
1850
1851                 if (test_bit(RFCOMM_ENC_DROP, &d->flags)) {
1852                         __rfcomm_dlc_close(d, ECONNREFUSED);
1853                         continue;
1854                 }
1855
1856                 if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) {
1857                         rfcomm_dlc_clear_timer(d);
1858                         if (d->out) {
1859                                 rfcomm_send_pn(s, 1, d);
1860                                 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
1861                         } else {
1862                                 if (d->defer_setup) {
1863                                         set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1864                                         rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1865
1866                                         rfcomm_dlc_lock(d);
1867                                         d->state = BT_CONNECT2;
1868                                         d->state_change(d, 0);
1869                                         rfcomm_dlc_unlock(d);
1870                                 } else
1871                                         rfcomm_dlc_accept(d);
1872                         }
1873                         continue;
1874                 } else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) {
1875                         rfcomm_dlc_clear_timer(d);
1876                         if (!d->out)
1877                                 rfcomm_send_dm(s, d->dlci);
1878                         else
1879                                 d->state = BT_CLOSED;
1880                         __rfcomm_dlc_close(d, ECONNREFUSED);
1881                         continue;
1882                 }
1883
1884                 if (test_bit(RFCOMM_SEC_PENDING, &d->flags))
1885                         continue;
1886
1887                 if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1888                         continue;
1889
1890                 if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1891                                                 d->mscex == RFCOMM_MSCEX_OK)
1892                         rfcomm_process_tx(d);
1893         }
1894 }
1895
1896 static struct rfcomm_session *rfcomm_process_rx(struct rfcomm_session *s)
1897 {
1898         struct socket *sock = s->sock;
1899         struct sock *sk = sock->sk;
1900         struct sk_buff *skb;
1901
1902         BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
1903
1904         /* Get data directly from socket receive queue without copying it. */
1905         while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
1906                 skb_orphan(skb);
1907                 if (!skb_linearize(skb)) {
1908                         s = rfcomm_recv_frame(s, skb);
1909                         if (!s)
1910                                 break;
1911                 } else {
1912                         kfree_skb(skb);
1913                 }
1914         }
1915
1916         if (s && (sk->sk_state == BT_CLOSED))
1917                 s = rfcomm_session_close(s, sk->sk_err);
1918
1919         return s;
1920 }
1921
1922 static void rfcomm_accept_connection(struct rfcomm_session *s)
1923 {
1924         struct socket *sock = s->sock, *nsock;
1925         int err;
1926
1927         /* Fast check for a new connection.
1928          * Avoids unnesesary socket allocations. */
1929         if (list_empty(&bt_sk(sock->sk)->accept_q))
1930                 return;
1931
1932         BT_DBG("session %p", s);
1933
1934         err = kernel_accept(sock, &nsock, O_NONBLOCK);
1935         if (err < 0)
1936                 return;
1937
1938         /* Set our callbacks */
1939         nsock->sk->sk_data_ready   = rfcomm_l2data_ready;
1940         nsock->sk->sk_state_change = rfcomm_l2state_change;
1941
1942         s = rfcomm_session_add(nsock, BT_OPEN);
1943         if (s) {
1944                 /* We should adjust MTU on incoming sessions.
1945                  * L2CAP MTU minus UIH header and FCS. */
1946                 s->mtu = min(l2cap_pi(nsock->sk)->chan->omtu,
1947                                 l2cap_pi(nsock->sk)->chan->imtu) - 5;
1948
1949                 rfcomm_schedule();
1950         } else
1951                 sock_release(nsock);
1952 }
1953
1954 static struct rfcomm_session *rfcomm_check_connection(struct rfcomm_session *s)
1955 {
1956         struct sock *sk = s->sock->sk;
1957
1958         BT_DBG("%p state %ld", s, s->state);
1959
1960         switch (sk->sk_state) {
1961         case BT_CONNECTED:
1962                 s->state = BT_CONNECT;
1963
1964                 /* We can adjust MTU on outgoing sessions.
1965                  * L2CAP MTU minus UIH header and FCS. */
1966                 s->mtu = min(l2cap_pi(sk)->chan->omtu, l2cap_pi(sk)->chan->imtu) - 5;
1967
1968                 rfcomm_send_sabm(s, 0);
1969                 break;
1970
1971         case BT_CLOSED:
1972                 s = rfcomm_session_close(s, sk->sk_err);
1973                 break;
1974         }
1975         return s;
1976 }
1977
1978 static void rfcomm_process_sessions(void)
1979 {
1980         struct rfcomm_session *s, *n;
1981
1982         rfcomm_lock();
1983
1984         list_for_each_entry_safe(s, n, &session_list, list) {
1985                 if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) {
1986                         s->state = BT_DISCONN;
1987                         rfcomm_send_disc(s, 0);
1988                         continue;
1989                 }
1990
1991                 switch (s->state) {
1992                 case BT_LISTEN:
1993                         rfcomm_accept_connection(s);
1994                         continue;
1995
1996                 case BT_BOUND:
1997                         s = rfcomm_check_connection(s);
1998                         break;
1999
2000                 default:
2001                         s = rfcomm_process_rx(s);
2002                         break;
2003                 }
2004
2005                 if (s)
2006                         rfcomm_process_dlcs(s);
2007         }
2008
2009         rfcomm_unlock();
2010 }
2011
2012 static int rfcomm_add_listener(bdaddr_t *ba)
2013 {
2014         struct sockaddr_l2 addr;
2015         struct socket *sock;
2016         struct sock *sk;
2017         struct rfcomm_session *s;
2018         int    err = 0;
2019
2020         /* Create socket */
2021         err = rfcomm_l2sock_create(&sock);
2022         if (err < 0) {
2023                 BT_ERR("Create socket failed %d", err);
2024                 return err;
2025         }
2026
2027         /* Bind socket */
2028         bacpy(&addr.l2_bdaddr, ba);
2029         addr.l2_family = AF_BLUETOOTH;
2030         addr.l2_psm    = cpu_to_le16(L2CAP_PSM_RFCOMM);
2031         addr.l2_cid    = 0;
2032         addr.l2_bdaddr_type = BDADDR_BREDR;
2033         err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
2034         if (err < 0) {
2035                 BT_ERR("Bind failed %d", err);
2036                 goto failed;
2037         }
2038
2039         /* Set L2CAP options */
2040         sk = sock->sk;
2041         lock_sock(sk);
2042         l2cap_pi(sk)->chan->imtu = l2cap_mtu;
2043         release_sock(sk);
2044
2045         /* Start listening on the socket */
2046         err = kernel_listen(sock, 10);
2047         if (err) {
2048                 BT_ERR("Listen failed %d", err);
2049                 goto failed;
2050         }
2051
2052         /* Add listening session */
2053         s = rfcomm_session_add(sock, BT_LISTEN);
2054         if (!s) {
2055                 err = -ENOMEM;
2056                 goto failed;
2057         }
2058
2059         return 0;
2060 failed:
2061         sock_release(sock);
2062         return err;
2063 }
2064
2065 static void rfcomm_kill_listener(void)
2066 {
2067         struct rfcomm_session *s, *n;
2068
2069         BT_DBG("");
2070
2071         list_for_each_entry_safe(s, n, &session_list, list)
2072                 rfcomm_session_del(s);
2073 }
2074
2075 static int rfcomm_run(void *unused)
2076 {
2077         DEFINE_WAIT_FUNC(wait, woken_wake_function);
2078         BT_DBG("");
2079
2080         set_user_nice(current, -10);
2081
2082         rfcomm_add_listener(BDADDR_ANY);
2083
2084         add_wait_queue(&rfcomm_wq, &wait);
2085         while (!kthread_should_stop()) {
2086
2087                 /* Process stuff */
2088                 rfcomm_process_sessions();
2089
2090                 wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
2091         }
2092         remove_wait_queue(&rfcomm_wq, &wait);
2093
2094         rfcomm_kill_listener();
2095
2096         return 0;
2097 }
2098
2099 static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
2100 {
2101         struct rfcomm_session *s;
2102         struct rfcomm_dlc *d, *n;
2103
2104         BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
2105
2106         s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
2107         if (!s)
2108                 return;
2109
2110         list_for_each_entry_safe(d, n, &s->dlcs, list) {
2111                 if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) {
2112                         rfcomm_dlc_clear_timer(d);
2113                         if (status || encrypt == 0x00) {
2114                                 set_bit(RFCOMM_ENC_DROP, &d->flags);
2115                                 continue;
2116                         }
2117                 }
2118
2119                 if (d->state == BT_CONNECTED && !status && encrypt == 0x00) {
2120                         if (d->sec_level == BT_SECURITY_MEDIUM) {
2121                                 set_bit(RFCOMM_SEC_PENDING, &d->flags);
2122                                 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
2123                                 continue;
2124                         } else if (d->sec_level == BT_SECURITY_HIGH ||
2125                                    d->sec_level == BT_SECURITY_FIPS) {
2126                                 set_bit(RFCOMM_ENC_DROP, &d->flags);
2127                                 continue;
2128                         }
2129                 }
2130
2131                 if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
2132                         continue;
2133
2134                 if (!status && hci_conn_check_secure(conn, d->sec_level))
2135                         set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
2136                 else
2137                         set_bit(RFCOMM_AUTH_REJECT, &d->flags);
2138         }
2139
2140         rfcomm_schedule();
2141 }
2142
2143 static struct hci_cb rfcomm_cb = {
2144         .name           = "RFCOMM",
2145         .security_cfm   = rfcomm_security_cfm
2146 };
2147
2148 static int rfcomm_dlc_debugfs_show(struct seq_file *f, void *x)
2149 {
2150         struct rfcomm_session *s;
2151
2152         rfcomm_lock();
2153
2154         list_for_each_entry(s, &session_list, list) {
2155                 struct l2cap_chan *chan = l2cap_pi(s->sock->sk)->chan;
2156                 struct rfcomm_dlc *d;
2157                 list_for_each_entry(d, &s->dlcs, list) {
2158                         seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n",
2159                                    &chan->src, &chan->dst,
2160                                    d->state, d->dlci, d->mtu,
2161                                    d->rx_credits, d->tx_credits);
2162                 }
2163         }
2164
2165         rfcomm_unlock();
2166
2167         return 0;
2168 }
2169
2170 DEFINE_SHOW_ATTRIBUTE(rfcomm_dlc_debugfs);
2171
2172 static struct dentry *rfcomm_dlc_debugfs;
2173
2174 /* ---- Initialization ---- */
2175 static int __init rfcomm_init(void)
2176 {
2177         int err;
2178
2179         hci_register_cb(&rfcomm_cb);
2180
2181         rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd");
2182         if (IS_ERR(rfcomm_thread)) {
2183                 err = PTR_ERR(rfcomm_thread);
2184                 goto unregister;
2185         }
2186
2187         err = rfcomm_init_ttys();
2188         if (err < 0)
2189                 goto stop;
2190
2191         err = rfcomm_init_sockets();
2192         if (err < 0)
2193                 goto cleanup;
2194
2195         BT_INFO("RFCOMM ver %s", VERSION);
2196
2197         if (IS_ERR_OR_NULL(bt_debugfs))
2198                 return 0;
2199
2200         rfcomm_dlc_debugfs = debugfs_create_file("rfcomm_dlc", 0444,
2201                                                  bt_debugfs, NULL,
2202                                                  &rfcomm_dlc_debugfs_fops);
2203
2204         return 0;
2205
2206 cleanup:
2207         rfcomm_cleanup_ttys();
2208
2209 stop:
2210         kthread_stop(rfcomm_thread);
2211
2212 unregister:
2213         hci_unregister_cb(&rfcomm_cb);
2214
2215         return err;
2216 }
2217
2218 static void __exit rfcomm_exit(void)
2219 {
2220         debugfs_remove(rfcomm_dlc_debugfs);
2221
2222         hci_unregister_cb(&rfcomm_cb);
2223
2224         kthread_stop(rfcomm_thread);
2225
2226         rfcomm_cleanup_ttys();
2227
2228         rfcomm_cleanup_sockets();
2229 }
2230
2231 module_init(rfcomm_init);
2232 module_exit(rfcomm_exit);
2233
2234 module_param(disable_cfc, bool, 0644);
2235 MODULE_PARM_DESC(disable_cfc, "Disable credit based flow control");
2236
2237 module_param(channel_mtu, int, 0644);
2238 MODULE_PARM_DESC(channel_mtu, "Default MTU for the RFCOMM channel");
2239
2240 module_param(l2cap_mtu, uint, 0644);
2241 MODULE_PARM_DESC(l2cap_mtu, "Default MTU for the L2CAP connection");
2242
2243 module_param(l2cap_ertm, bool, 0644);
2244 MODULE_PARM_DESC(l2cap_ertm, "Use L2CAP ERTM mode for connection");
2245
2246 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
2247 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION);
2248 MODULE_VERSION(VERSION);
2249 MODULE_LICENSE("GPL");
2250 MODULE_ALIAS("bt-proto-3");