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