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