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