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