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