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>
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;
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.
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.
25 RPN support - Dirk Husemann <hud@zurich.ibm.com>
31 * $Id: core.c,v 1.46 2002/10/18 20:12:12 maxk Exp $
34 #define __KERNEL_SYSCALLS__
36 #include <linux/config.h>
37 #include <linux/module.h>
38 #include <linux/errno.h>
39 #include <linux/kernel.h>
40 #include <linux/sched.h>
41 #include <linux/signal.h>
42 #include <linux/init.h>
43 #include <linux/wait.h>
44 #include <linux/net.h>
45 #include <linux/proc_fs.h>
47 #include <asm/uaccess.h>
48 #include <asm/unaligned.h>
50 #include <net/bluetooth/bluetooth.h>
51 #include <net/bluetooth/l2cap.h>
52 #include <net/bluetooth/rfcomm.h>
56 #ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
61 struct task_struct *rfcomm_thread;
62 DECLARE_MUTEX(rfcomm_sem);
63 unsigned long rfcomm_event;
65 static LIST_HEAD(session_list);
66 static atomic_t terminate, running;
68 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
69 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
70 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
71 static int rfcomm_queue_disc(struct rfcomm_dlc *d);
72 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
73 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
74 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
75 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
76 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
77 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
79 static void rfcomm_process_connect(struct rfcomm_session *s);
81 /* ---- RFCOMM frame parsing macros ---- */
82 #define __get_dlci(b) ((b & 0xfc) >> 2)
83 #define __get_channel(b) ((b & 0xf8) >> 3)
84 #define __get_dir(b) ((b & 0x04) >> 2)
85 #define __get_type(b) ((b & 0xef))
87 #define __test_ea(b) ((b & 0x01))
88 #define __test_cr(b) ((b & 0x02))
89 #define __test_pf(b) ((b & 0x10))
91 #define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
92 #define __ctrl(type, pf) (((type & 0xef) | (pf << 4)))
93 #define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir)
94 #define __srv_channel(dlci) (dlci >> 1)
95 #define __dir(dlci) (dlci & 0x01)
97 #define __len8(len) (((len) << 1) | 1)
98 #define __len16(len) ((len) << 1)
101 #define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01))
102 #define __get_mcc_type(b) ((b & 0xfc) >> 2)
103 #define __get_mcc_len(b) ((b & 0xfe) >> 1)
106 #define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x3) << 3))
107 #define __get_rpn_data_bits(line) ((line) & 0x3)
108 #define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
109 #define __get_rpn_parity(line) (((line) >> 3) & 0x3)
111 /* ---- RFCOMM FCS computation ---- */
114 #define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
117 static inline u8 __fcs(u8 *data)
119 return (0xff - __crc(data));
123 static inline u8 __fcs2(u8 *data)
125 return (0xff - rfcomm_crc_table[__crc(data) ^ data[2]]);
129 static inline int __check_fcs(u8 *data, int type, u8 fcs)
133 if (type != RFCOMM_UIH)
134 f = rfcomm_crc_table[f ^ data[2]];
136 return rfcomm_crc_table[f ^ fcs] != 0xcf;
139 /* ---- L2CAP callbacks ---- */
140 static void rfcomm_l2state_change(struct sock *sk)
142 BT_DBG("%p state %d", sk, sk->state);
143 rfcomm_schedule(RFCOMM_SCHED_STATE);
146 static void rfcomm_l2data_ready(struct sock *sk, int bytes)
148 BT_DBG("%p bytes %d", sk, bytes);
149 rfcomm_schedule(RFCOMM_SCHED_RX);
152 static int rfcomm_l2sock_create(struct socket **sock)
158 err = sock_create(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
160 struct sock *sk = (*sock)->sk;
161 sk->data_ready = rfcomm_l2data_ready;
162 sk->state_change = rfcomm_l2state_change;
167 /* ---- RFCOMM DLCs ---- */
168 static void rfcomm_dlc_timeout(unsigned long arg)
170 struct rfcomm_dlc *d = (void *) arg;
172 BT_DBG("dlc %p state %ld", d, d->state);
174 set_bit(RFCOMM_TIMED_OUT, &d->flags);
176 rfcomm_schedule(RFCOMM_SCHED_TIMEO);
179 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
181 BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
183 if (!mod_timer(&d->timer, jiffies + timeout))
187 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
189 BT_DBG("dlc %p state %ld", d, d->state);
191 if (timer_pending(&d->timer) && del_timer(&d->timer))
195 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
202 d->mtu = RFCOMM_DEFAULT_MTU;
203 d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
205 d->cfc = RFCOMM_CFC_DISABLED;
206 d->rx_credits = RFCOMM_DEFAULT_CREDITS;
209 struct rfcomm_dlc *rfcomm_dlc_alloc(int prio)
211 struct rfcomm_dlc *d = kmalloc(sizeof(*d), prio);
214 memset(d, 0, sizeof(*d));
216 init_timer(&d->timer);
217 d->timer.function = rfcomm_dlc_timeout;
218 d->timer.data = (unsigned long) d;
220 skb_queue_head_init(&d->tx_queue);
221 spin_lock_init(&d->lock);
222 atomic_set(&d->refcnt, 1);
224 rfcomm_dlc_clear_state(d);
230 void rfcomm_dlc_free(struct rfcomm_dlc *d)
234 skb_queue_purge(&d->tx_queue);
238 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
240 BT_DBG("dlc %p session %p", d, s);
242 rfcomm_session_hold(s);
245 list_add(&d->list, &s->dlcs);
249 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
251 struct rfcomm_session *s = d->session;
253 BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
259 rfcomm_session_put(s);
262 static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
264 struct rfcomm_dlc *d;
267 list_for_each(p, &s->dlcs) {
268 d = list_entry(p, struct rfcomm_dlc, list);
275 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
277 struct rfcomm_session *s;
281 BT_DBG("dlc %p state %ld %s %s channel %d",
282 d, d->state, batostr(src), batostr(dst), channel);
284 if (channel < 1 || channel > 30)
287 if (d->state != BT_OPEN && d->state != BT_CLOSED)
290 s = rfcomm_session_get(src, dst);
292 s = rfcomm_session_create(src, dst, &err);
297 dlci = __dlci(!s->initiator, channel);
299 /* Check if DLCI already exists */
300 if (rfcomm_dlc_get(s, dlci))
303 rfcomm_dlc_clear_state(d);
306 d->addr = __addr(s->initiator, dlci);
309 d->state = BT_CONFIG;
310 rfcomm_dlc_link(s, d);
313 d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
315 if (s->state == BT_CONNECTED)
316 rfcomm_send_pn(s, 1, d);
317 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
321 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
328 fs = get_fs(); set_fs(KERNEL_DS);
329 r = __rfcomm_dlc_open(d, src, dst, channel);
336 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
338 struct rfcomm_session *s = d->session;
342 BT_DBG("dlc %p state %ld dlci %d err %d session %p",
343 d, d->state, d->dlci, err, s);
349 d->state = BT_DISCONN;
350 if (skb_queue_empty(&d->tx_queue)) {
351 rfcomm_send_disc(s, d->dlci);
352 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
354 rfcomm_queue_disc(d);
355 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
360 rfcomm_dlc_clear_timer(d);
363 d->state = BT_CLOSED;
364 d->state_change(d, err);
365 rfcomm_dlc_unlock(d);
367 skb_queue_purge(&d->tx_queue);
368 rfcomm_dlc_unlink(d);
374 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
381 fs = get_fs(); set_fs(KERNEL_DS);
382 r = __rfcomm_dlc_close(d, err);
389 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
393 if (d->state != BT_CONNECTED)
396 BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
401 rfcomm_make_uih(skb, d->addr);
402 skb_queue_tail(&d->tx_queue, skb);
404 if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
405 rfcomm_schedule(RFCOMM_SCHED_TX);
409 void fastcall __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
411 BT_DBG("dlc %p state %ld", d, d->state);
414 d->v24_sig |= RFCOMM_V24_FC;
415 set_bit(RFCOMM_MSC_PENDING, &d->flags);
417 rfcomm_schedule(RFCOMM_SCHED_TX);
420 void fastcall __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
422 BT_DBG("dlc %p state %ld", d, d->state);
425 d->v24_sig &= ~RFCOMM_V24_FC;
426 set_bit(RFCOMM_MSC_PENDING, &d->flags);
428 rfcomm_schedule(RFCOMM_SCHED_TX);
432 Set/get modem status functions use _local_ status i.e. what we report
434 Remote status is provided by dlc->modem_status() callback.
436 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
438 BT_DBG("dlc %p state %ld v24_sig 0x%x",
439 d, d->state, v24_sig);
441 if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
442 v24_sig |= RFCOMM_V24_FC;
444 v24_sig &= ~RFCOMM_V24_FC;
446 d->v24_sig = v24_sig;
448 if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
449 rfcomm_schedule(RFCOMM_SCHED_TX);
454 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
456 BT_DBG("dlc %p state %ld v24_sig 0x%x",
457 d, d->state, d->v24_sig);
459 *v24_sig = d->v24_sig;
463 /* ---- RFCOMM sessions ---- */
464 struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
466 struct rfcomm_session *s = kmalloc(sizeof(*s), GFP_KERNEL);
469 memset(s, 0, sizeof(*s));
471 BT_DBG("session %p sock %p", s, sock);
473 INIT_LIST_HEAD(&s->dlcs);
477 s->mtu = RFCOMM_DEFAULT_MTU;
478 s->cfc = RFCOMM_CFC_UNKNOWN;
480 list_add(&s->list, &session_list);
482 /* Do not increment module usage count for listeting sessions.
483 * Otherwise we won't be able to unload the module. */
484 if (state != BT_LISTEN)
489 void rfcomm_session_del(struct rfcomm_session *s)
491 int state = s->state;
493 BT_DBG("session %p state %ld", s, s->state);
497 if (state == BT_CONNECTED)
498 rfcomm_send_disc(s, 0);
500 sock_release(s->sock);
503 if (state != BT_LISTEN)
507 struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
509 struct rfcomm_session *s;
510 struct list_head *p, *n;
511 struct bluez_pinfo *pi;
512 list_for_each_safe(p, n, &session_list) {
513 s = list_entry(p, struct rfcomm_session, list);
514 pi = bluez_pi(s->sock->sk);
516 if ((!bacmp(src, BDADDR_ANY) || !bacmp(&pi->src, src)) &&
517 !bacmp(&pi->dst, dst))
523 void rfcomm_session_close(struct rfcomm_session *s, int err)
525 struct rfcomm_dlc *d;
526 struct list_head *p, *n;
528 BT_DBG("session %p state %ld err %d", s, s->state, err);
530 rfcomm_session_hold(s);
532 s->state = BT_CLOSED;
535 list_for_each_safe(p, n, &s->dlcs) {
536 d = list_entry(p, struct rfcomm_dlc, list);
537 d->state = BT_CLOSED;
538 __rfcomm_dlc_close(d, err);
541 rfcomm_session_put(s);
544 struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
546 struct rfcomm_session *s = NULL;
547 struct sockaddr_l2 addr;
548 struct l2cap_options opts;
552 BT_DBG("%s %s", batostr(src), batostr(dst));
554 *err = rfcomm_l2sock_create(&sock);
558 bacpy(&addr.l2_bdaddr, src);
559 addr.l2_family = AF_BLUETOOTH;
561 *err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
565 /* Set L2CAP options */
567 sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
569 opts.imtu = RFCOMM_MAX_L2CAP_MTU;
570 sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
572 s = rfcomm_session_add(sock, BT_BOUND);
580 bacpy(&addr.l2_bdaddr, dst);
581 addr.l2_family = AF_BLUETOOTH;
582 addr.l2_psm = htobs(RFCOMM_PSM);
583 *err = sock->ops->connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
584 if (*err == 0 || *err == -EAGAIN)
587 rfcomm_session_del(s);
595 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
597 struct sock *sk = s->sock->sk;
599 bacpy(src, &bluez_pi(sk)->src);
601 bacpy(dst, &bluez_pi(sk)->dst);
604 /* ---- RFCOMM frame sending ---- */
605 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
607 struct socket *sock = s->sock;
608 struct iovec iv = { data, len };
612 BT_DBG("session %p len %d", s, len);
614 memset(&msg, 0, sizeof(msg));
618 err = sock->ops->sendmsg(sock, &msg, len, 0);
622 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
624 struct rfcomm_cmd cmd;
626 BT_DBG("%p dlci %d", s, dlci);
628 cmd.addr = __addr(s->initiator, dlci);
629 cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
631 cmd.fcs = __fcs2((u8 *) &cmd);
633 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
636 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
638 struct rfcomm_cmd cmd;
640 BT_DBG("%p dlci %d", s, dlci);
642 cmd.addr = __addr(!s->initiator, dlci);
643 cmd.ctrl = __ctrl(RFCOMM_UA, 1);
645 cmd.fcs = __fcs2((u8 *) &cmd);
647 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
650 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
652 struct rfcomm_cmd cmd;
654 BT_DBG("%p dlci %d", s, dlci);
656 cmd.addr = __addr(s->initiator, dlci);
657 cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
659 cmd.fcs = __fcs2((u8 *) &cmd);
661 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
664 static int rfcomm_queue_disc(struct rfcomm_dlc *d)
666 struct rfcomm_cmd *cmd;
669 BT_DBG("dlc %p dlci %d", d, d->dlci);
671 skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
675 cmd = (void *) __skb_put(skb, sizeof(*cmd));
677 cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
678 cmd->len = __len8(0);
679 cmd->fcs = __fcs2((u8 *) cmd);
681 skb_queue_tail(&d->tx_queue, skb);
682 rfcomm_schedule(RFCOMM_SCHED_TX);
686 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
688 struct rfcomm_cmd cmd;
690 BT_DBG("%p dlci %d", s, dlci);
692 cmd.addr = __addr(!s->initiator, dlci);
693 cmd.ctrl = __ctrl(RFCOMM_DM, 1);
695 cmd.fcs = __fcs2((u8 *) &cmd);
697 return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
700 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
702 struct rfcomm_hdr *hdr;
703 struct rfcomm_mcc *mcc;
704 u8 buf[16], *ptr = buf;
706 BT_DBG("%p cr %d type %d", s, cr, type);
708 hdr = (void *) ptr; ptr += sizeof(*hdr);
709 hdr->addr = __addr(s->initiator, 0);
710 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
711 hdr->len = __len8(sizeof(*mcc) + 1);
713 mcc = (void *) ptr; ptr += sizeof(*mcc);
714 mcc->type = __mcc_type(cr, RFCOMM_NSC);
715 mcc->len = __len8(1);
717 /* Type that we didn't like */
718 *ptr = __mcc_type(cr, type); ptr++;
720 *ptr = __fcs(buf); ptr++;
722 return rfcomm_send_frame(s, buf, ptr - buf);
725 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
727 struct rfcomm_hdr *hdr;
728 struct rfcomm_mcc *mcc;
729 struct rfcomm_pn *pn;
730 u8 buf[16], *ptr = buf;
732 BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
734 hdr = (void *) ptr; ptr += sizeof(*hdr);
735 hdr->addr = __addr(s->initiator, 0);
736 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
737 hdr->len = __len8(sizeof(*mcc) + sizeof(*pn));
739 mcc = (void *) ptr; ptr += sizeof(*mcc);
740 mcc->type = __mcc_type(cr, RFCOMM_PN);
741 mcc->len = __len8(sizeof(*pn));
743 pn = (void *) ptr; ptr += sizeof(*pn);
745 pn->priority = d->priority;
750 pn->flow_ctrl = cr ? 0xf0 : 0xe0;
751 pn->credits = RFCOMM_DEFAULT_CREDITS;
757 pn->mtu = htobs(d->mtu);
759 *ptr = __fcs(buf); ptr++;
761 return rfcomm_send_frame(s, buf, ptr - buf);
764 static int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
765 u8 bit_rate, u8 data_bits, u8 stop_bits,
766 u8 parity, u8 flow_ctrl_settings,
767 u8 xon_char, u8 xoff_char, u16 param_mask)
769 struct rfcomm_hdr *hdr;
770 struct rfcomm_mcc *mcc;
771 struct rfcomm_rpn *rpn;
772 u8 buf[16], *ptr = buf;
774 BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
775 "flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
776 s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
777 flow_ctrl_settings, xon_char, xoff_char, param_mask);
779 hdr = (void *) ptr; ptr += sizeof(*hdr);
780 hdr->addr = __addr(s->initiator, 0);
781 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
782 hdr->len = __len8(sizeof(*mcc) + sizeof(*rpn));
784 mcc = (void *) ptr; ptr += sizeof(*mcc);
785 mcc->type = __mcc_type(cr, RFCOMM_RPN);
786 mcc->len = __len8(sizeof(*rpn));
788 rpn = (void *) ptr; ptr += sizeof(*rpn);
789 rpn->dlci = __addr(1, dlci);
790 rpn->bit_rate = bit_rate;
791 rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
792 rpn->flow_ctrl = flow_ctrl_settings;
793 rpn->xon_char = xon_char;
794 rpn->xoff_char = xoff_char;
795 rpn->param_mask = param_mask;
797 *ptr = __fcs(buf); ptr++;
799 return rfcomm_send_frame(s, buf, ptr - buf);
802 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
804 struct rfcomm_hdr *hdr;
805 struct rfcomm_mcc *mcc;
806 struct rfcomm_rls *rls;
807 u8 buf[16], *ptr = buf;
809 BT_DBG("%p cr %d status 0x%x", s, cr, status);
811 hdr = (void *) ptr; ptr += sizeof(*hdr);
812 hdr->addr = __addr(s->initiator, 0);
813 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
814 hdr->len = __len8(sizeof(*mcc) + sizeof(*rls));
816 mcc = (void *) ptr; ptr += sizeof(*mcc);
817 mcc->type = __mcc_type(cr, RFCOMM_RLS);
818 mcc->len = __len8(sizeof(*rls));
820 rls = (void *) ptr; ptr += sizeof(*rls);
821 rls->dlci = __addr(1, dlci);
822 rls->status = status;
824 *ptr = __fcs(buf); ptr++;
826 return rfcomm_send_frame(s, buf, ptr - buf);
829 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
831 struct rfcomm_hdr *hdr;
832 struct rfcomm_mcc *mcc;
833 struct rfcomm_msc *msc;
834 u8 buf[16], *ptr = buf;
836 BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
838 hdr = (void *) ptr; ptr += sizeof(*hdr);
839 hdr->addr = __addr(s->initiator, 0);
840 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
841 hdr->len = __len8(sizeof(*mcc) + sizeof(*msc));
843 mcc = (void *) ptr; ptr += sizeof(*mcc);
844 mcc->type = __mcc_type(cr, RFCOMM_MSC);
845 mcc->len = __len8(sizeof(*msc));
847 msc = (void *) ptr; ptr += sizeof(*msc);
848 msc->dlci = __addr(1, dlci);
849 msc->v24_sig = v24_sig | 0x01;
851 *ptr = __fcs(buf); ptr++;
853 return rfcomm_send_frame(s, buf, ptr - buf);
856 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
858 struct rfcomm_hdr *hdr;
859 struct rfcomm_mcc *mcc;
860 u8 buf[16], *ptr = buf;
862 BT_DBG("%p cr %d", s, cr);
864 hdr = (void *) ptr; ptr += sizeof(*hdr);
865 hdr->addr = __addr(s->initiator, 0);
866 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
867 hdr->len = __len8(sizeof(*mcc));
869 mcc = (void *) ptr; ptr += sizeof(*mcc);
870 mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
871 mcc->len = __len8(0);
873 *ptr = __fcs(buf); ptr++;
875 return rfcomm_send_frame(s, buf, ptr - buf);
878 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
880 struct rfcomm_hdr *hdr;
881 struct rfcomm_mcc *mcc;
882 u8 buf[16], *ptr = buf;
884 BT_DBG("%p cr %d", s, cr);
886 hdr = (void *) ptr; ptr += sizeof(*hdr);
887 hdr->addr = __addr(s->initiator, 0);
888 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
889 hdr->len = __len8(sizeof(*mcc));
891 mcc = (void *) ptr; ptr += sizeof(*mcc);
892 mcc->type = __mcc_type(cr, RFCOMM_FCON);
893 mcc->len = __len8(0);
895 *ptr = __fcs(buf); ptr++;
897 return rfcomm_send_frame(s, buf, ptr - buf);
900 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
902 struct socket *sock = s->sock;
905 unsigned char hdr[5], crc[1];
910 BT_DBG("%p cr %d", s, cr);
912 hdr[0] = __addr(s->initiator, 0);
913 hdr[1] = __ctrl(RFCOMM_UIH, 0);
914 hdr[2] = 0x01 | ((len + 2) << 1);
915 hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
916 hdr[4] = 0x01 | (len << 1);
920 iv[0].iov_base = hdr;
922 iv[1].iov_base = pattern;
924 iv[2].iov_base = crc;
927 memset(&msg, 0, sizeof(msg));
930 return sock->ops->sendmsg(sock, &msg, 6 + len, 0);
933 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
935 struct rfcomm_hdr *hdr;
936 u8 buf[16], *ptr = buf;
938 BT_DBG("%p addr %d credits %d", s, addr, credits);
940 hdr = (void *) ptr; ptr += sizeof(*hdr);
942 hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
943 hdr->len = __len8(0);
945 *ptr = credits; ptr++;
947 *ptr = __fcs(buf); ptr++;
949 return rfcomm_send_frame(s, buf, ptr - buf);
952 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
954 struct rfcomm_hdr *hdr;
959 hdr = (void *) skb_push(skb, 4);
960 put_unaligned(htobs(__len16(len)), (u16 *) &hdr->len);
962 hdr = (void *) skb_push(skb, 3);
963 hdr->len = __len8(len);
966 hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
968 crc = skb_put(skb, 1);
969 *crc = __fcs((void *) hdr);
972 /* ---- RFCOMM frame reception ---- */
973 static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
975 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
979 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
981 rfcomm_send_dm(s, dlci);
987 rfcomm_dlc_clear_timer(d);
990 d->state = BT_CONNECTED;
991 d->state_change(d, 0);
992 rfcomm_dlc_unlock(d);
994 rfcomm_send_msc(s, 1, dlci, d->v24_sig);
998 d->state = BT_CLOSED;
999 __rfcomm_dlc_close(d, 0);
1003 /* Control channel */
1006 s->state = BT_CONNECTED;
1007 rfcomm_process_connect(s);
1014 static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1018 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1022 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1024 if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1029 d->state = BT_CLOSED;
1030 __rfcomm_dlc_close(d, err);
1033 if (s->state == BT_CONNECT)
1038 s->state = BT_CLOSED;
1039 rfcomm_session_close(s, err);
1044 static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
1048 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1051 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1053 rfcomm_send_ua(s, dlci);
1055 if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1060 d->state = BT_CLOSED;
1061 __rfcomm_dlc_close(d, err);
1063 rfcomm_send_dm(s, dlci);
1066 rfcomm_send_ua(s, 0);
1068 if (s->state == BT_CONNECT)
1073 s->state = BT_CLOSED;
1074 rfcomm_session_close(s, err);
1080 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1082 struct rfcomm_dlc *d;
1085 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1088 rfcomm_send_ua(s, 0);
1090 if (s->state == BT_OPEN) {
1091 s->state = BT_CONNECTED;
1092 rfcomm_process_connect(s);
1097 /* Check if DLC exists */
1098 d = rfcomm_dlc_get(s, dlci);
1100 if (d->state == BT_OPEN) {
1101 /* DLC was previously opened by PN request */
1102 rfcomm_send_ua(s, dlci);
1105 d->state = BT_CONNECTED;
1106 d->state_change(d, 0);
1107 rfcomm_dlc_unlock(d);
1109 rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1114 /* Notify socket layer about incomming connection */
1115 channel = __srv_channel(dlci);
1116 if (rfcomm_connect_ind(s, channel, &d)) {
1118 d->addr = __addr(s->initiator, dlci);
1119 rfcomm_dlc_link(s, d);
1121 rfcomm_send_ua(s, dlci);
1124 d->state = BT_CONNECTED;
1125 d->state_change(d, 0);
1126 rfcomm_dlc_unlock(d);
1128 rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1130 rfcomm_send_dm(s, dlci);
1136 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1138 struct rfcomm_session *s = d->session;
1140 BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1141 d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1143 if (pn->flow_ctrl == 0xf0 || pn->flow_ctrl == 0xe0) {
1144 d->cfc = s->cfc = RFCOMM_CFC_ENABLED;
1145 d->tx_credits = pn->credits;
1147 d->cfc = s->cfc = RFCOMM_CFC_DISABLED;
1148 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1151 d->priority = pn->priority;
1153 d->mtu = s->mtu = btohs(pn->mtu);
1158 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1160 struct rfcomm_pn *pn = (void *) skb->data;
1161 struct rfcomm_dlc *d;
1164 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1169 d = rfcomm_dlc_get(s, dlci);
1173 rfcomm_apply_pn(d, cr, pn);
1174 rfcomm_send_pn(s, 0, d);
1179 rfcomm_apply_pn(d, cr, pn);
1181 d->state = BT_CONNECT;
1182 rfcomm_send_sabm(s, d->dlci);
1187 u8 channel = __srv_channel(dlci);
1192 /* PN request for non existing DLC.
1193 * Assume incomming connection. */
1194 if (rfcomm_connect_ind(s, channel, &d)) {
1196 d->addr = __addr(s->initiator, dlci);
1197 rfcomm_dlc_link(s, d);
1199 rfcomm_apply_pn(d, cr, pn);
1202 rfcomm_send_pn(s, 0, d);
1204 rfcomm_send_dm(s, dlci);
1210 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1212 struct rfcomm_rpn *rpn = (void *) skb->data;
1213 u8 dlci = __get_dlci(rpn->dlci);
1222 u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1224 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",
1225 dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1226 rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1232 /* request: return default setting */
1233 bit_rate = RFCOMM_RPN_BR_115200;
1234 data_bits = RFCOMM_RPN_DATA_8;
1235 stop_bits = RFCOMM_RPN_STOP_1;
1236 parity = RFCOMM_RPN_PARITY_NONE;
1237 flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1238 xon_char = RFCOMM_RPN_XON_CHAR;
1239 xoff_char = RFCOMM_RPN_XOFF_CHAR;
1243 /* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity,
1244 no flow control lines, normal XON/XOFF chars */
1245 if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) {
1246 bit_rate = rpn->bit_rate;
1247 if (bit_rate != RFCOMM_RPN_BR_115200) {
1248 BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1249 bit_rate = RFCOMM_RPN_BR_115200;
1250 rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1253 if (rpn->param_mask & RFCOMM_RPN_PM_DATA) {
1254 data_bits = __get_rpn_data_bits(rpn->line_settings);
1255 if (data_bits != RFCOMM_RPN_DATA_8) {
1256 BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1257 data_bits = RFCOMM_RPN_DATA_8;
1258 rpn_mask ^= RFCOMM_RPN_PM_DATA;
1261 if (rpn->param_mask & RFCOMM_RPN_PM_STOP) {
1262 stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1263 if (stop_bits != RFCOMM_RPN_STOP_1) {
1264 BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1265 stop_bits = RFCOMM_RPN_STOP_1;
1266 rpn_mask ^= RFCOMM_RPN_PM_STOP;
1269 if (rpn->param_mask & RFCOMM_RPN_PM_PARITY) {
1270 parity = __get_rpn_parity(rpn->line_settings);
1271 if (parity != RFCOMM_RPN_PARITY_NONE) {
1272 BT_DBG("RPN parity mismatch 0x%x", parity);
1273 parity = RFCOMM_RPN_PARITY_NONE;
1274 rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1277 if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) {
1278 flow_ctrl = rpn->flow_ctrl;
1279 if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1280 BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1281 flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1282 rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1285 if (rpn->param_mask & RFCOMM_RPN_PM_XON) {
1286 xon_char = rpn->xon_char;
1287 if (xon_char != RFCOMM_RPN_XON_CHAR) {
1288 BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1289 xon_char = RFCOMM_RPN_XON_CHAR;
1290 rpn_mask ^= RFCOMM_RPN_PM_XON;
1293 if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) {
1294 xoff_char = rpn->xoff_char;
1295 if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1296 BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1297 xoff_char = RFCOMM_RPN_XOFF_CHAR;
1298 rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1303 rfcomm_send_rpn(s, 0, dlci,
1304 bit_rate, data_bits, stop_bits, parity, flow_ctrl,
1305 xon_char, xoff_char, rpn_mask);
1310 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1312 struct rfcomm_rls *rls = (void *) skb->data;
1313 u8 dlci = __get_dlci(rls->dlci);
1315 BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1320 /* FIXME: We should probably do something with this
1321 information here. But for now it's sufficient just
1322 to reply -- Bluetooth 1.1 says it's mandatory to
1323 recognise and respond to RLS */
1325 rfcomm_send_rls(s, 0, dlci, rls->status);
1330 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1332 struct rfcomm_msc *msc = (void *) skb->data;
1333 struct rfcomm_dlc *d;
1334 u8 dlci = __get_dlci(msc->dlci);
1336 BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1338 d = rfcomm_dlc_get(s, dlci);
1343 if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1344 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1346 clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1349 if (d->modem_status)
1350 d->modem_status(d, msc->v24_sig);
1351 rfcomm_dlc_unlock(d);
1353 rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1355 d->mscex |= RFCOMM_MSCEX_RX;
1357 d->mscex |= RFCOMM_MSCEX_TX;
1362 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1364 struct rfcomm_mcc *mcc = (void *) skb->data;
1367 cr = __test_cr(mcc->type);
1368 type = __get_mcc_type(mcc->type);
1369 len = __get_mcc_len(mcc->len);
1371 BT_DBG("%p type 0x%x cr %d", s, type, cr);
1377 rfcomm_recv_pn(s, cr, skb);
1381 rfcomm_recv_rpn(s, cr, len, skb);
1385 rfcomm_recv_rls(s, cr, skb);
1389 rfcomm_recv_msc(s, cr, skb);
1394 set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1395 rfcomm_send_fcoff(s, 0);
1401 clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1402 rfcomm_send_fcon(s, 0);
1408 rfcomm_send_test(s, 0, skb->data, skb->len);
1415 BT_ERR("Unknown control type 0x%02x", type);
1416 rfcomm_send_nsc(s, cr, type);
1422 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1424 struct rfcomm_dlc *d;
1426 BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1428 d = rfcomm_dlc_get(s, dlci);
1430 rfcomm_send_dm(s, dlci);
1435 u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1437 d->tx_credits += credits;
1439 clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1442 if (skb->len && d->state == BT_CONNECTED) {
1445 d->data_ready(d, skb);
1446 rfcomm_dlc_unlock(d);
1455 static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
1457 struct rfcomm_hdr *hdr = (void *) skb->data;
1460 dlci = __get_dlci(hdr->addr);
1461 type = __get_type(hdr->ctrl);
1464 skb->len--; skb->tail--;
1465 fcs = *(u8 *) skb->tail;
1467 if (__check_fcs(skb->data, type, fcs)) {
1468 BT_ERR("bad checksum in packet");
1473 if (__test_ea(hdr->len))
1480 if (__test_pf(hdr->ctrl))
1481 rfcomm_recv_sabm(s, dlci);
1485 if (__test_pf(hdr->ctrl))
1486 rfcomm_recv_disc(s, dlci);
1490 if (__test_pf(hdr->ctrl))
1491 rfcomm_recv_ua(s, dlci);
1495 rfcomm_recv_dm(s, dlci);
1500 return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1502 rfcomm_recv_mcc(s, skb);
1506 BT_ERR("Unknown packet type 0x%02x\n", type);
1513 /* ---- Connection and data processing ---- */
1515 static void rfcomm_process_connect(struct rfcomm_session *s)
1517 struct rfcomm_dlc *d;
1518 struct list_head *p, *n;
1520 BT_DBG("session %p state %ld", s, s->state);
1522 list_for_each_safe(p, n, &s->dlcs) {
1523 d = list_entry(p, struct rfcomm_dlc, list);
1524 if (d->state == BT_CONFIG) {
1526 rfcomm_send_pn(s, 1, d);
1531 /* Send data queued for the DLC.
1532 * Return number of frames left in the queue.
1534 static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
1536 struct sk_buff *skb;
1539 BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1540 d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1542 /* Send pending MSC */
1543 if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1544 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1548 * Give them some credits */
1549 if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1550 d->rx_credits <= (d->cfc >> 2)) {
1551 rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1552 d->rx_credits = d->cfc;
1556 * Give ourselves some credits */
1560 if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1561 return skb_queue_len(&d->tx_queue);
1563 while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1564 err = rfcomm_send_frame(d->session, skb->data, skb->len);
1566 skb_queue_head(&d->tx_queue, skb);
1573 if (d->cfc && !d->tx_credits) {
1574 /* We're out of TX credits.
1575 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1576 set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1579 return skb_queue_len(&d->tx_queue);
1582 static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
1584 struct rfcomm_dlc *d;
1585 struct list_head *p, *n;
1587 BT_DBG("session %p state %ld", s, s->state);
1589 list_for_each_safe(p, n, &s->dlcs) {
1590 d = list_entry(p, struct rfcomm_dlc, list);
1591 if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1592 __rfcomm_dlc_close(d, ETIMEDOUT);
1596 if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1599 if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1600 d->mscex == RFCOMM_MSCEX_OK)
1601 rfcomm_process_tx(d);
1605 static inline void rfcomm_process_rx(struct rfcomm_session *s)
1607 struct socket *sock = s->sock;
1608 struct sock *sk = sock->sk;
1609 struct sk_buff *skb;
1611 BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->receive_queue));
1613 /* Get data directly from socket receive queue without copying it. */
1614 while ((skb = skb_dequeue(&sk->receive_queue))) {
1616 rfcomm_recv_frame(s, skb);
1619 if (sk->state == BT_CLOSED) {
1621 rfcomm_session_put(s);
1623 rfcomm_session_close(s, sk->err);
1627 static inline void rfcomm_accept_connection(struct rfcomm_session *s)
1629 struct socket *sock = s->sock, *nsock;
1632 /* Fast check for a new connection.
1633 * Avoids unnesesary socket allocations. */
1634 if (list_empty(&bluez_pi(sock->sk)->accept_q))
1637 BT_DBG("session %p", s);
1639 nsock = sock_alloc();
1643 nsock->type = sock->type;
1644 nsock->ops = sock->ops;
1646 err = sock->ops->accept(sock, nsock, O_NONBLOCK);
1648 sock_release(nsock);
1652 /* Set our callbacks */
1653 nsock->sk->data_ready = rfcomm_l2data_ready;
1654 nsock->sk->state_change = rfcomm_l2state_change;
1656 s = rfcomm_session_add(nsock, BT_OPEN);
1658 rfcomm_session_hold(s);
1659 rfcomm_schedule(RFCOMM_SCHED_RX);
1661 sock_release(nsock);
1664 static inline void rfcomm_check_connection(struct rfcomm_session *s)
1666 struct sock *sk = s->sock->sk;
1668 BT_DBG("%p state %ld", s, s->state);
1672 s->state = BT_CONNECT;
1674 /* We can adjust MTU on outgoing sessions.
1675 * L2CAP MTU minus UIH header and FCS. */
1676 s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
1678 rfcomm_send_sabm(s, 0);
1682 s->state = BT_CLOSED;
1683 rfcomm_session_close(s, sk->err);
1688 static inline void rfcomm_process_sessions(void)
1690 struct list_head *p, *n;
1694 list_for_each_safe(p, n, &session_list) {
1695 struct rfcomm_session *s;
1696 s = list_entry(p, struct rfcomm_session, list);
1698 if (s->state == BT_LISTEN) {
1699 rfcomm_accept_connection(s);
1703 rfcomm_session_hold(s);
1707 rfcomm_check_connection(s);
1711 rfcomm_process_rx(s);
1715 rfcomm_process_dlcs(s);
1717 rfcomm_session_put(s);
1723 static void rfcomm_worker(void)
1727 daemonize(); reparent_to_init();
1730 while (!atomic_read(&terminate)) {
1731 BT_DBG("worker loop event 0x%lx", rfcomm_event);
1733 if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
1734 /* No pending events. Let's sleep.
1735 * Incomming connections and data will wake us up. */
1736 set_current_state(TASK_INTERRUPTIBLE);
1741 clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
1742 rfcomm_process_sessions();
1744 set_current_state(TASK_RUNNING);
1748 static int rfcomm_add_listener(bdaddr_t *ba)
1750 struct sockaddr_l2 addr;
1751 struct l2cap_options opts;
1752 struct socket *sock;
1753 struct rfcomm_session *s;
1757 err = rfcomm_l2sock_create(&sock);
1759 BT_ERR("Create socket failed %d", err);
1764 bacpy(&addr.l2_bdaddr, ba);
1765 addr.l2_family = AF_BLUETOOTH;
1766 addr.l2_psm = htobs(RFCOMM_PSM);
1767 err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
1769 BT_ERR("Bind failed %d", err);
1773 /* Set L2CAP options */
1774 size = sizeof(opts);
1775 sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
1777 opts.imtu = RFCOMM_MAX_L2CAP_MTU;
1778 sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
1780 /* Start listening on the socket */
1781 err = sock->ops->listen(sock, 10);
1783 BT_ERR("Listen failed %d", err);
1787 /* Add listening session */
1788 s = rfcomm_session_add(sock, BT_LISTEN);
1792 rfcomm_session_hold(s);
1799 static void rfcomm_kill_listener(void)
1801 struct rfcomm_session *s;
1802 struct list_head *p, *n;
1806 list_for_each_safe(p, n, &session_list) {
1807 s = list_entry(p, struct rfcomm_session, list);
1808 rfcomm_session_del(s);
1812 static int rfcomm_run(void *unused)
1814 rfcomm_thread = current;
1816 atomic_inc(&running);
1818 daemonize(); reparent_to_init();
1820 sigfillset(¤t->blocked);
1823 sprintf(current->comm, "krfcommd");
1827 rfcomm_add_listener(BDADDR_ANY);
1831 rfcomm_kill_listener();
1833 atomic_dec(&running);
1837 /* ---- Proc fs support ---- */
1838 static int rfcomm_dlc_dump(char *buf)
1840 struct rfcomm_session *s;
1842 struct list_head *p, *pp;
1847 list_for_each(p, &session_list) {
1848 s = list_entry(p, struct rfcomm_session, list);
1851 list_for_each(pp, &s->dlcs) {
1852 struct rfcomm_dlc *d;
1853 d = list_entry(pp, struct rfcomm_dlc, list);
1855 ptr += sprintf(ptr, "dlc %s %s %ld %d %d %d %d\n",
1856 batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
1857 d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
1866 extern int rfcomm_sock_dump(char *buf);
1868 static int rfcomm_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
1873 BT_DBG("count %d, offset %ld", count, offset);
1875 ptr += rfcomm_dlc_dump(ptr);
1876 ptr += rfcomm_sock_dump(ptr);
1879 if (len <= count + offset)
1882 *start = buf + offset;
1893 /* ---- Initialization ---- */
1894 int __init rfcomm_init(void)
1898 kernel_thread(rfcomm_run, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
1900 rfcomm_init_sockets();
1902 #ifdef CONFIG_BLUEZ_RFCOMM_TTY
1906 create_proc_read_entry("bluetooth/rfcomm", 0, 0, rfcomm_read_proc, NULL);
1908 BT_INFO("BlueZ RFCOMM ver %s", VERSION);
1909 BT_INFO("Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>");
1910 BT_INFO("Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>");
1914 void rfcomm_cleanup(void)
1916 /* Terminate working thread.
1917 * ie. Set terminate flag and wake it up */
1918 atomic_inc(&terminate);
1919 rfcomm_schedule(RFCOMM_SCHED_STATE);
1921 /* Wait until thread is running */
1922 while (atomic_read(&running))
1925 remove_proc_entry("bluetooth/rfcomm", NULL);
1927 #ifdef CONFIG_BLUEZ_RFCOMM_TTY
1928 rfcomm_cleanup_ttys();
1931 rfcomm_cleanup_sockets();
1935 module_init(rfcomm_init);
1936 module_exit(rfcomm_cleanup);
1938 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1939 MODULE_DESCRIPTION("BlueZ RFCOMM ver " VERSION);
1940 MODULE_LICENSE("GPL");