linux/net/bluetooth/rfcomm/core.c
<<
>>
Prefs
   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
  40static bool disable_cfc;
  41static bool l2cap_ertm;
  42static int channel_mtu = -1;
  43static unsigned int l2cap_mtu = RFCOMM_MAX_L2CAP_MTU;
  44
  45static struct task_struct *rfcomm_thread;
  46
  47static DEFINE_MUTEX(rfcomm_mutex);
  48#define rfcomm_lock()   mutex_lock(&rfcomm_mutex)
  49#define rfcomm_unlock() mutex_unlock(&rfcomm_mutex)
  50
  51
  52static LIST_HEAD(session_list);
  53
  54static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
  55static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
  56static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
  57static int rfcomm_queue_disc(struct rfcomm_dlc *d);
  58static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
  59static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
  60static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
  61static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
  62static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
  63static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
  64
  65static void rfcomm_process_connect(struct rfcomm_session *s);
  66
  67static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
  68                                                        bdaddr_t *dst,
  69                                                        u8 sec_level,
  70                                                        int *err);
  71static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
  72static 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
 104static 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 */
 114static 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 */
 160static inline u8 __fcs(u8 *data)
 161{
 162        return 0xff - __crc(data);
 163}
 164
 165/* FCS on 3 bytes */
 166static inline u8 __fcs2(u8 *data)
 167{
 168        return 0xff - rfcomm_crc_table[__crc(data) ^ data[2]];
 169}
 170
 171/* Check FCS */
 172static 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 ---- */
 183static void rfcomm_l2state_change(struct sock *sk)
 184{
 185        BT_DBG("%p state %d", sk, sk->sk_state);
 186        rfcomm_schedule();
 187}
 188
 189static void rfcomm_l2data_ready(struct sock *sk, int bytes)
 190{
 191        BT_DBG("%p bytes %d", sk, bytes);
 192        rfcomm_schedule();
 193}
 194
 195static 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
 210static 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
 232static 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
 242static 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
 249static 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 ---- */
 257static 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
 268static 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
 276static 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
 284static 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
 299struct 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
 319void 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
 327static 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
 337static 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
 351static 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
 362static 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
 416int 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
 428static 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
 482int 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
 511no_session:
 512        rfcomm_unlock();
 513        return r;
 514}
 515
 516int 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
 536void __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
 547void __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 */
 563int 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
 581int 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 ---- */
 591static 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
 622static 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
 640static 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 bt_sock *sk;
 645        list_for_each_safe(p, n, &session_list) {
 646                s = list_entry(p, struct rfcomm_session, list);
 647                sk = bt_sk(s->sock->sk);
 648
 649                if ((!bacmp(src, BDADDR_ANY) || !bacmp(&sk->src, src)) &&
 650                                !bacmp(&sk->dst, dst))
 651                        return s;
 652        }
 653        return NULL;
 654}
 655
 656static 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
 677static 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        *err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
 698        if (*err < 0)
 699                goto failed;
 700
 701        /* Set L2CAP options */
 702        sk = sock->sk;
 703        lock_sock(sk);
 704        l2cap_pi(sk)->chan->imtu = l2cap_mtu;
 705        l2cap_pi(sk)->chan->sec_level = sec_level;
 706        if (l2cap_ertm)
 707                l2cap_pi(sk)->chan->mode = L2CAP_MODE_ERTM;
 708        release_sock(sk);
 709
 710        s = rfcomm_session_add(sock, BT_BOUND);
 711        if (!s) {
 712                *err = -ENOMEM;
 713                goto failed;
 714        }
 715
 716        s->initiator = 1;
 717
 718        bacpy(&addr.l2_bdaddr, dst);
 719        addr.l2_family = AF_BLUETOOTH;
 720        addr.l2_psm    = __constant_cpu_to_le16(RFCOMM_PSM);
 721        addr.l2_cid    = 0;
 722        *err = kernel_connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
 723        if (*err == 0 || *err == -EINPROGRESS)
 724                return s;
 725
 726        return rfcomm_session_del(s);
 727
 728failed:
 729        sock_release(sock);
 730        return NULL;
 731}
 732
 733void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
 734{
 735        struct sock *sk = s->sock->sk;
 736        if (src)
 737                bacpy(src, &bt_sk(sk)->src);
 738        if (dst)
 739                bacpy(dst, &bt_sk(sk)->dst);
 740}
 741
 742/* ---- RFCOMM frame sending ---- */
 743static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
 744{
 745        struct kvec iv = { data, len };
 746        struct msghdr msg;
 747
 748        BT_DBG("session %p len %d", s, len);
 749
 750        memset(&msg, 0, sizeof(msg));
 751
 752        return kernel_sendmsg(s->sock, &msg, &iv, 1, len);
 753}
 754
 755static int rfcomm_send_cmd(struct rfcomm_session *s, struct rfcomm_cmd *cmd)
 756{
 757        BT_DBG("%p cmd %u", s, cmd->ctrl);
 758
 759        return rfcomm_send_frame(s, (void *) cmd, sizeof(*cmd));
 760}
 761
 762static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
 763{
 764        struct rfcomm_cmd cmd;
 765
 766        BT_DBG("%p dlci %d", s, dlci);
 767
 768        cmd.addr = __addr(s->initiator, dlci);
 769        cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
 770        cmd.len  = __len8(0);
 771        cmd.fcs  = __fcs2((u8 *) &cmd);
 772
 773        return rfcomm_send_cmd(s, &cmd);
 774}
 775
 776static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
 777{
 778        struct rfcomm_cmd cmd;
 779
 780        BT_DBG("%p dlci %d", s, dlci);
 781
 782        cmd.addr = __addr(!s->initiator, dlci);
 783        cmd.ctrl = __ctrl(RFCOMM_UA, 1);
 784        cmd.len  = __len8(0);
 785        cmd.fcs  = __fcs2((u8 *) &cmd);
 786
 787        return rfcomm_send_cmd(s, &cmd);
 788}
 789
 790static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
 791{
 792        struct rfcomm_cmd cmd;
 793
 794        BT_DBG("%p dlci %d", s, dlci);
 795
 796        cmd.addr = __addr(s->initiator, dlci);
 797        cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
 798        cmd.len  = __len8(0);
 799        cmd.fcs  = __fcs2((u8 *) &cmd);
 800
 801        return rfcomm_send_cmd(s, &cmd);
 802}
 803
 804static int rfcomm_queue_disc(struct rfcomm_dlc *d)
 805{
 806        struct rfcomm_cmd *cmd;
 807        struct sk_buff *skb;
 808
 809        BT_DBG("dlc %p dlci %d", d, d->dlci);
 810
 811        skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
 812        if (!skb)
 813                return -ENOMEM;
 814
 815        cmd = (void *) __skb_put(skb, sizeof(*cmd));
 816        cmd->addr = d->addr;
 817        cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
 818        cmd->len  = __len8(0);
 819        cmd->fcs  = __fcs2((u8 *) cmd);
 820
 821        skb_queue_tail(&d->tx_queue, skb);
 822        rfcomm_schedule();
 823        return 0;
 824}
 825
 826static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
 827{
 828        struct rfcomm_cmd cmd;
 829
 830        BT_DBG("%p dlci %d", s, dlci);
 831
 832        cmd.addr = __addr(!s->initiator, dlci);
 833        cmd.ctrl = __ctrl(RFCOMM_DM, 1);
 834        cmd.len  = __len8(0);
 835        cmd.fcs  = __fcs2((u8 *) &cmd);
 836
 837        return rfcomm_send_cmd(s, &cmd);
 838}
 839
 840static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
 841{
 842        struct rfcomm_hdr *hdr;
 843        struct rfcomm_mcc *mcc;
 844        u8 buf[16], *ptr = buf;
 845
 846        BT_DBG("%p cr %d type %d", s, cr, type);
 847
 848        hdr = (void *) ptr; ptr += sizeof(*hdr);
 849        hdr->addr = __addr(s->initiator, 0);
 850        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
 851        hdr->len  = __len8(sizeof(*mcc) + 1);
 852
 853        mcc = (void *) ptr; ptr += sizeof(*mcc);
 854        mcc->type = __mcc_type(cr, RFCOMM_NSC);
 855        mcc->len  = __len8(1);
 856
 857        /* Type that we didn't like */
 858        *ptr = __mcc_type(cr, type); ptr++;
 859
 860        *ptr = __fcs(buf); ptr++;
 861
 862        return rfcomm_send_frame(s, buf, ptr - buf);
 863}
 864
 865static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
 866{
 867        struct rfcomm_hdr *hdr;
 868        struct rfcomm_mcc *mcc;
 869        struct rfcomm_pn  *pn;
 870        u8 buf[16], *ptr = buf;
 871
 872        BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
 873
 874        hdr = (void *) ptr; ptr += sizeof(*hdr);
 875        hdr->addr = __addr(s->initiator, 0);
 876        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
 877        hdr->len  = __len8(sizeof(*mcc) + sizeof(*pn));
 878
 879        mcc = (void *) ptr; ptr += sizeof(*mcc);
 880        mcc->type = __mcc_type(cr, RFCOMM_PN);
 881        mcc->len  = __len8(sizeof(*pn));
 882
 883        pn = (void *) ptr; ptr += sizeof(*pn);
 884        pn->dlci        = d->dlci;
 885        pn->priority    = d->priority;
 886        pn->ack_timer   = 0;
 887        pn->max_retrans = 0;
 888
 889        if (s->cfc) {
 890                pn->flow_ctrl = cr ? 0xf0 : 0xe0;
 891                pn->credits = RFCOMM_DEFAULT_CREDITS;
 892        } else {
 893                pn->flow_ctrl = 0;
 894                pn->credits   = 0;
 895        }
 896
 897        if (cr && channel_mtu >= 0)
 898                pn->mtu = cpu_to_le16(channel_mtu);
 899        else
 900                pn->mtu = cpu_to_le16(d->mtu);
 901
 902        *ptr = __fcs(buf); ptr++;
 903
 904        return rfcomm_send_frame(s, buf, ptr - buf);
 905}
 906
 907int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
 908                        u8 bit_rate, u8 data_bits, u8 stop_bits,
 909                        u8 parity, u8 flow_ctrl_settings,
 910                        u8 xon_char, u8 xoff_char, u16 param_mask)
 911{
 912        struct rfcomm_hdr *hdr;
 913        struct rfcomm_mcc *mcc;
 914        struct rfcomm_rpn *rpn;
 915        u8 buf[16], *ptr = buf;
 916
 917        BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
 918                        " flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
 919                s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
 920                flow_ctrl_settings, xon_char, xoff_char, param_mask);
 921
 922        hdr = (void *) ptr; ptr += sizeof(*hdr);
 923        hdr->addr = __addr(s->initiator, 0);
 924        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
 925        hdr->len  = __len8(sizeof(*mcc) + sizeof(*rpn));
 926
 927        mcc = (void *) ptr; ptr += sizeof(*mcc);
 928        mcc->type = __mcc_type(cr, RFCOMM_RPN);
 929        mcc->len  = __len8(sizeof(*rpn));
 930
 931        rpn = (void *) ptr; ptr += sizeof(*rpn);
 932        rpn->dlci          = __addr(1, dlci);
 933        rpn->bit_rate      = bit_rate;
 934        rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
 935        rpn->flow_ctrl     = flow_ctrl_settings;
 936        rpn->xon_char      = xon_char;
 937        rpn->xoff_char     = xoff_char;
 938        rpn->param_mask    = cpu_to_le16(param_mask);
 939
 940        *ptr = __fcs(buf); ptr++;
 941
 942        return rfcomm_send_frame(s, buf, ptr - buf);
 943}
 944
 945static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
 946{
 947        struct rfcomm_hdr *hdr;
 948        struct rfcomm_mcc *mcc;
 949        struct rfcomm_rls *rls;
 950        u8 buf[16], *ptr = buf;
 951
 952        BT_DBG("%p cr %d status 0x%x", s, cr, status);
 953
 954        hdr = (void *) ptr; ptr += sizeof(*hdr);
 955        hdr->addr = __addr(s->initiator, 0);
 956        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
 957        hdr->len  = __len8(sizeof(*mcc) + sizeof(*rls));
 958
 959        mcc = (void *) ptr; ptr += sizeof(*mcc);
 960        mcc->type = __mcc_type(cr, RFCOMM_RLS);
 961        mcc->len  = __len8(sizeof(*rls));
 962
 963        rls = (void *) ptr; ptr += sizeof(*rls);
 964        rls->dlci   = __addr(1, dlci);
 965        rls->status = status;
 966
 967        *ptr = __fcs(buf); ptr++;
 968
 969        return rfcomm_send_frame(s, buf, ptr - buf);
 970}
 971
 972static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
 973{
 974        struct rfcomm_hdr *hdr;
 975        struct rfcomm_mcc *mcc;
 976        struct rfcomm_msc *msc;
 977        u8 buf[16], *ptr = buf;
 978
 979        BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
 980
 981        hdr = (void *) ptr; ptr += sizeof(*hdr);
 982        hdr->addr = __addr(s->initiator, 0);
 983        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
 984        hdr->len  = __len8(sizeof(*mcc) + sizeof(*msc));
 985
 986        mcc = (void *) ptr; ptr += sizeof(*mcc);
 987        mcc->type = __mcc_type(cr, RFCOMM_MSC);
 988        mcc->len  = __len8(sizeof(*msc));
 989
 990        msc = (void *) ptr; ptr += sizeof(*msc);
 991        msc->dlci    = __addr(1, dlci);
 992        msc->v24_sig = v24_sig | 0x01;
 993
 994        *ptr = __fcs(buf); ptr++;
 995
 996        return rfcomm_send_frame(s, buf, ptr - buf);
 997}
 998
 999static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
1000{
1001        struct rfcomm_hdr *hdr;
1002        struct rfcomm_mcc *mcc;
1003        u8 buf[16], *ptr = buf;
1004
1005        BT_DBG("%p cr %d", s, cr);
1006
1007        hdr = (void *) ptr; ptr += sizeof(*hdr);
1008        hdr->addr = __addr(s->initiator, 0);
1009        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1010        hdr->len  = __len8(sizeof(*mcc));
1011
1012        mcc = (void *) ptr; ptr += sizeof(*mcc);
1013        mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
1014        mcc->len  = __len8(0);
1015
1016        *ptr = __fcs(buf); ptr++;
1017
1018        return rfcomm_send_frame(s, buf, ptr - buf);
1019}
1020
1021static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
1022{
1023        struct rfcomm_hdr *hdr;
1024        struct rfcomm_mcc *mcc;
1025        u8 buf[16], *ptr = buf;
1026
1027        BT_DBG("%p cr %d", s, cr);
1028
1029        hdr = (void *) ptr; ptr += sizeof(*hdr);
1030        hdr->addr = __addr(s->initiator, 0);
1031        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1032        hdr->len  = __len8(sizeof(*mcc));
1033
1034        mcc = (void *) ptr; ptr += sizeof(*mcc);
1035        mcc->type = __mcc_type(cr, RFCOMM_FCON);
1036        mcc->len  = __len8(0);
1037
1038        *ptr = __fcs(buf); ptr++;
1039
1040        return rfcomm_send_frame(s, buf, ptr - buf);
1041}
1042
1043static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
1044{
1045        struct socket *sock = s->sock;
1046        struct kvec iv[3];
1047        struct msghdr msg;
1048        unsigned char hdr[5], crc[1];
1049
1050        if (len > 125)
1051                return -EINVAL;
1052
1053        BT_DBG("%p cr %d", s, cr);
1054
1055        hdr[0] = __addr(s->initiator, 0);
1056        hdr[1] = __ctrl(RFCOMM_UIH, 0);
1057        hdr[2] = 0x01 | ((len + 2) << 1);
1058        hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
1059        hdr[4] = 0x01 | (len << 1);
1060
1061        crc[0] = __fcs(hdr);
1062
1063        iv[0].iov_base = hdr;
1064        iv[0].iov_len  = 5;
1065        iv[1].iov_base = pattern;
1066        iv[1].iov_len  = len;
1067        iv[2].iov_base = crc;
1068        iv[2].iov_len  = 1;
1069
1070        memset(&msg, 0, sizeof(msg));
1071
1072        return kernel_sendmsg(sock, &msg, iv, 3, 6 + len);
1073}
1074
1075static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
1076{
1077        struct rfcomm_hdr *hdr;
1078        u8 buf[16], *ptr = buf;
1079
1080        BT_DBG("%p addr %d credits %d", s, addr, credits);
1081
1082        hdr = (void *) ptr; ptr += sizeof(*hdr);
1083        hdr->addr = addr;
1084        hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
1085        hdr->len  = __len8(0);
1086
1087        *ptr = credits; ptr++;
1088
1089        *ptr = __fcs(buf); ptr++;
1090
1091        return rfcomm_send_frame(s, buf, ptr - buf);
1092}
1093
1094static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
1095{
1096        struct rfcomm_hdr *hdr;
1097        int len = skb->len;
1098        u8 *crc;
1099
1100        if (len > 127) {
1101                hdr = (void *) skb_push(skb, 4);
1102                put_unaligned(cpu_to_le16(__len16(len)), (__le16 *) &hdr->len);
1103        } else {
1104                hdr = (void *) skb_push(skb, 3);
1105                hdr->len = __len8(len);
1106        }
1107        hdr->addr = addr;
1108        hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
1109
1110        crc = skb_put(skb, 1);
1111        *crc = __fcs((void *) hdr);
1112}
1113
1114/* ---- RFCOMM frame reception ---- */
1115static struct rfcomm_session *rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
1116{
1117        BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1118
1119        if (dlci) {
1120                /* Data channel */
1121                struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1122                if (!d) {
1123                        rfcomm_send_dm(s, dlci);
1124                        return s;
1125                }
1126
1127                switch (d->state) {
1128                case BT_CONNECT:
1129                        rfcomm_dlc_clear_timer(d);
1130
1131                        rfcomm_dlc_lock(d);
1132                        d->state = BT_CONNECTED;
1133                        d->state_change(d, 0);
1134                        rfcomm_dlc_unlock(d);
1135
1136                        rfcomm_send_msc(s, 1, dlci, d->v24_sig);
1137                        break;
1138
1139                case BT_DISCONN:
1140                        d->state = BT_CLOSED;
1141                        __rfcomm_dlc_close(d, 0);
1142
1143                        if (list_empty(&s->dlcs)) {
1144                                s->state = BT_DISCONN;
1145                                rfcomm_send_disc(s, 0);
1146                                rfcomm_session_clear_timer(s);
1147                        }
1148
1149                        break;
1150                }
1151        } else {
1152                /* Control channel */
1153                switch (s->state) {
1154                case BT_CONNECT:
1155                        s->state = BT_CONNECTED;
1156                        rfcomm_process_connect(s);
1157                        break;
1158
1159                case BT_DISCONN:
1160                        s = rfcomm_session_close(s, ECONNRESET);
1161                        break;
1162                }
1163        }
1164        return s;
1165}
1166
1167static struct rfcomm_session *rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
1168{
1169        int err = 0;
1170
1171        BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1172
1173        if (dlci) {
1174                /* Data DLC */
1175                struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1176                if (d) {
1177                        if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1178                                err = ECONNREFUSED;
1179                        else
1180                                err = ECONNRESET;
1181
1182                        d->state = BT_CLOSED;
1183                        __rfcomm_dlc_close(d, err);
1184                }
1185        } else {
1186                if (s->state == BT_CONNECT)
1187                        err = ECONNREFUSED;
1188                else
1189                        err = ECONNRESET;
1190
1191                s = rfcomm_session_close(s, err);
1192        }
1193        return s;
1194}
1195
1196static struct rfcomm_session *rfcomm_recv_disc(struct rfcomm_session *s,
1197                                               u8 dlci)
1198{
1199        int err = 0;
1200
1201        BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1202
1203        if (dlci) {
1204                struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
1205                if (d) {
1206                        rfcomm_send_ua(s, dlci);
1207
1208                        if (d->state == BT_CONNECT || d->state == BT_CONFIG)
1209                                err = ECONNREFUSED;
1210                        else
1211                                err = ECONNRESET;
1212
1213                        d->state = BT_CLOSED;
1214                        __rfcomm_dlc_close(d, err);
1215                } else
1216                        rfcomm_send_dm(s, dlci);
1217
1218        } else {
1219                rfcomm_send_ua(s, 0);
1220
1221                if (s->state == BT_CONNECT)
1222                        err = ECONNREFUSED;
1223                else
1224                        err = ECONNRESET;
1225
1226                s = rfcomm_session_close(s, err);
1227        }
1228        return s;
1229}
1230
1231void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1232{
1233        struct sock *sk = d->session->sock->sk;
1234        struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1235
1236        BT_DBG("dlc %p", d);
1237
1238        rfcomm_send_ua(d->session, d->dlci);
1239
1240        rfcomm_dlc_clear_timer(d);
1241
1242        rfcomm_dlc_lock(d);
1243        d->state = BT_CONNECTED;
1244        d->state_change(d, 0);
1245        rfcomm_dlc_unlock(d);
1246
1247        if (d->role_switch)
1248                hci_conn_switch_role(conn->hcon, 0x00);
1249
1250        rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1251}
1252
1253static void rfcomm_check_accept(struct rfcomm_dlc *d)
1254{
1255        if (rfcomm_check_security(d)) {
1256                if (d->defer_setup) {
1257                        set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1258                        rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1259
1260                        rfcomm_dlc_lock(d);
1261                        d->state = BT_CONNECT2;
1262                        d->state_change(d, 0);
1263                        rfcomm_dlc_unlock(d);
1264                } else
1265                        rfcomm_dlc_accept(d);
1266        } else {
1267                set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1268                rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1269        }
1270}
1271
1272static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1273{
1274        struct rfcomm_dlc *d;
1275        u8 channel;
1276
1277        BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1278
1279        if (!dlci) {
1280                rfcomm_send_ua(s, 0);
1281
1282                if (s->state == BT_OPEN) {
1283                        s->state = BT_CONNECTED;
1284                        rfcomm_process_connect(s);
1285                }
1286                return 0;
1287        }
1288
1289        /* Check if DLC exists */
1290        d = rfcomm_dlc_get(s, dlci);
1291        if (d) {
1292                if (d->state == BT_OPEN) {
1293                        /* DLC was previously opened by PN request */
1294                        rfcomm_check_accept(d);
1295                }
1296                return 0;
1297        }
1298
1299        /* Notify socket layer about incoming connection */
1300        channel = __srv_channel(dlci);
1301        if (rfcomm_connect_ind(s, channel, &d)) {
1302                d->dlci = dlci;
1303                d->addr = __addr(s->initiator, dlci);
1304                rfcomm_dlc_link(s, d);
1305
1306                rfcomm_check_accept(d);
1307        } else {
1308                rfcomm_send_dm(s, dlci);
1309        }
1310
1311        return 0;
1312}
1313
1314static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1315{
1316        struct rfcomm_session *s = d->session;
1317
1318        BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1319                        d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1320
1321        if ((pn->flow_ctrl == 0xf0 && s->cfc != RFCOMM_CFC_DISABLED) ||
1322                                                pn->flow_ctrl == 0xe0) {
1323                d->cfc = RFCOMM_CFC_ENABLED;
1324                d->tx_credits = pn->credits;
1325        } else {
1326                d->cfc = RFCOMM_CFC_DISABLED;
1327                set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1328        }
1329
1330        if (s->cfc == RFCOMM_CFC_UNKNOWN)
1331                s->cfc = d->cfc;
1332
1333        d->priority = pn->priority;
1334
1335        d->mtu = __le16_to_cpu(pn->mtu);
1336
1337        if (cr && d->mtu > s->mtu)
1338                d->mtu = s->mtu;
1339
1340        return 0;
1341}
1342
1343static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1344{
1345        struct rfcomm_pn *pn = (void *) skb->data;
1346        struct rfcomm_dlc *d;
1347        u8 dlci = pn->dlci;
1348
1349        BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1350
1351        if (!dlci)
1352                return 0;
1353
1354        d = rfcomm_dlc_get(s, dlci);
1355        if (d) {
1356                if (cr) {
1357                        /* PN request */
1358                        rfcomm_apply_pn(d, cr, pn);
1359                        rfcomm_send_pn(s, 0, d);
1360                } else {
1361                        /* PN response */
1362                        switch (d->state) {
1363                        case BT_CONFIG:
1364                                rfcomm_apply_pn(d, cr, pn);
1365
1366                                d->state = BT_CONNECT;
1367                                rfcomm_send_sabm(s, d->dlci);
1368                                break;
1369                        }
1370                }
1371        } else {
1372                u8 channel = __srv_channel(dlci);
1373
1374                if (!cr)
1375                        return 0;
1376
1377                /* PN request for non existing DLC.
1378                 * Assume incoming connection. */
1379                if (rfcomm_connect_ind(s, channel, &d)) {
1380                        d->dlci = dlci;
1381                        d->addr = __addr(s->initiator, dlci);
1382                        rfcomm_dlc_link(s, d);
1383
1384                        rfcomm_apply_pn(d, cr, pn);
1385
1386                        d->state = BT_OPEN;
1387                        rfcomm_send_pn(s, 0, d);
1388                } else {
1389                        rfcomm_send_dm(s, dlci);
1390                }
1391        }
1392        return 0;
1393}
1394
1395static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1396{
1397        struct rfcomm_rpn *rpn = (void *) skb->data;
1398        u8 dlci = __get_dlci(rpn->dlci);
1399
1400        u8 bit_rate  = 0;
1401        u8 data_bits = 0;
1402        u8 stop_bits = 0;
1403        u8 parity    = 0;
1404        u8 flow_ctrl = 0;
1405        u8 xon_char  = 0;
1406        u8 xoff_char = 0;
1407        u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1408
1409        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",
1410                dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1411                rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1412
1413        if (!cr)
1414                return 0;
1415
1416        if (len == 1) {
1417                /* This is a request, return default (according to ETSI TS 07.10) settings */
1418                bit_rate  = RFCOMM_RPN_BR_9600;
1419                data_bits = RFCOMM_RPN_DATA_8;
1420                stop_bits = RFCOMM_RPN_STOP_1;
1421                parity    = RFCOMM_RPN_PARITY_NONE;
1422                flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1423                xon_char  = RFCOMM_RPN_XON_CHAR;
1424                xoff_char = RFCOMM_RPN_XOFF_CHAR;
1425                goto rpn_out;
1426        }
1427
1428        /* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1429         * no parity, no flow control lines, normal XON/XOFF chars */
1430
1431        if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_BITRATE)) {
1432                bit_rate = rpn->bit_rate;
1433                if (bit_rate > RFCOMM_RPN_BR_230400) {
1434                        BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1435                        bit_rate = RFCOMM_RPN_BR_9600;
1436                        rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1437                }
1438        }
1439
1440        if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_DATA)) {
1441                data_bits = __get_rpn_data_bits(rpn->line_settings);
1442                if (data_bits != RFCOMM_RPN_DATA_8) {
1443                        BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1444                        data_bits = RFCOMM_RPN_DATA_8;
1445                        rpn_mask ^= RFCOMM_RPN_PM_DATA;
1446                }
1447        }
1448
1449        if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_STOP)) {
1450                stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1451                if (stop_bits != RFCOMM_RPN_STOP_1) {
1452                        BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1453                        stop_bits = RFCOMM_RPN_STOP_1;
1454                        rpn_mask ^= RFCOMM_RPN_PM_STOP;
1455                }
1456        }
1457
1458        if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_PARITY)) {
1459                parity = __get_rpn_parity(rpn->line_settings);
1460                if (parity != RFCOMM_RPN_PARITY_NONE) {
1461                        BT_DBG("RPN parity mismatch 0x%x", parity);
1462                        parity = RFCOMM_RPN_PARITY_NONE;
1463                        rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1464                }
1465        }
1466
1467        if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_FLOW)) {
1468                flow_ctrl = rpn->flow_ctrl;
1469                if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1470                        BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1471                        flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1472                        rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1473                }
1474        }
1475
1476        if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XON)) {
1477                xon_char = rpn->xon_char;
1478                if (xon_char != RFCOMM_RPN_XON_CHAR) {
1479                        BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1480                        xon_char = RFCOMM_RPN_XON_CHAR;
1481                        rpn_mask ^= RFCOMM_RPN_PM_XON;
1482                }
1483        }
1484
1485        if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XOFF)) {
1486                xoff_char = rpn->xoff_char;
1487                if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1488                        BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1489                        xoff_char = RFCOMM_RPN_XOFF_CHAR;
1490                        rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1491                }
1492        }
1493
1494rpn_out:
1495        rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits,
1496                        parity, flow_ctrl, xon_char, xoff_char, rpn_mask);
1497
1498        return 0;
1499}
1500
1501static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1502{
1503        struct rfcomm_rls *rls = (void *) skb->data;
1504        u8 dlci = __get_dlci(rls->dlci);
1505
1506        BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1507
1508        if (!cr)
1509                return 0;
1510
1511        /* We should probably do something with this information here. But
1512         * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1513         * mandatory to recognise and respond to RLS */
1514
1515        rfcomm_send_rls(s, 0, dlci, rls->status);
1516
1517        return 0;
1518}
1519
1520static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1521{
1522        struct rfcomm_msc *msc = (void *) skb->data;
1523        struct rfcomm_dlc *d;
1524        u8 dlci = __get_dlci(msc->dlci);
1525
1526        BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1527
1528        d = rfcomm_dlc_get(s, dlci);
1529        if (!d)
1530                return 0;
1531
1532        if (cr) {
1533                if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1534                        set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1535                else
1536                        clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1537
1538                rfcomm_dlc_lock(d);
1539
1540                d->remote_v24_sig = msc->v24_sig;
1541
1542                if (d->modem_status)
1543                        d->modem_status(d, msc->v24_sig);
1544
1545                rfcomm_dlc_unlock(d);
1546
1547                rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1548
1549                d->mscex |= RFCOMM_MSCEX_RX;
1550        } else
1551                d->mscex |= RFCOMM_MSCEX_TX;
1552
1553        return 0;
1554}
1555
1556static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1557{
1558        struct rfcomm_mcc *mcc = (void *) skb->data;
1559        u8 type, cr, len;
1560
1561        cr   = __test_cr(mcc->type);
1562        type = __get_mcc_type(mcc->type);
1563        len  = __get_mcc_len(mcc->len);
1564
1565        BT_DBG("%p type 0x%x cr %d", s, type, cr);
1566
1567        skb_pull(skb, 2);
1568
1569        switch (type) {
1570        case RFCOMM_PN:
1571                rfcomm_recv_pn(s, cr, skb);
1572                break;
1573
1574        case RFCOMM_RPN:
1575                rfcomm_recv_rpn(s, cr, len, skb);
1576                break;
1577
1578        case RFCOMM_RLS:
1579                rfcomm_recv_rls(s, cr, skb);
1580                break;
1581
1582        case RFCOMM_MSC:
1583                rfcomm_recv_msc(s, cr, skb);
1584                break;
1585
1586        case RFCOMM_FCOFF:
1587                if (cr) {
1588                        set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1589                        rfcomm_send_fcoff(s, 0);
1590                }
1591                break;
1592
1593        case RFCOMM_FCON:
1594                if (cr) {
1595                        clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1596                        rfcomm_send_fcon(s, 0);
1597                }
1598                break;
1599
1600        case RFCOMM_TEST:
1601                if (cr)
1602                        rfcomm_send_test(s, 0, skb->data, skb->len);
1603                break;
1604
1605        case RFCOMM_NSC:
1606                break;
1607
1608        default:
1609                BT_ERR("Unknown control type 0x%02x", type);
1610                rfcomm_send_nsc(s, cr, type);
1611                break;
1612        }
1613        return 0;
1614}
1615
1616static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1617{
1618        struct rfcomm_dlc *d;
1619
1620        BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1621
1622        d = rfcomm_dlc_get(s, dlci);
1623        if (!d) {
1624                rfcomm_send_dm(s, dlci);
1625                goto drop;
1626        }
1627
1628        if (pf && d->cfc) {
1629                u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
1630
1631                d->tx_credits += credits;
1632                if (d->tx_credits)
1633                        clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1634        }
1635
1636        if (skb->len && d->state == BT_CONNECTED) {
1637                rfcomm_dlc_lock(d);
1638                d->rx_credits--;
1639                d->data_ready(d, skb);
1640                rfcomm_dlc_unlock(d);
1641                return 0;
1642        }
1643
1644drop:
1645        kfree_skb(skb);
1646        return 0;
1647}
1648
1649static struct rfcomm_session *rfcomm_recv_frame(struct rfcomm_session *s,
1650                                                struct sk_buff *skb)
1651{
1652        struct rfcomm_hdr *hdr = (void *) skb->data;
1653        u8 type, dlci, fcs;
1654
1655        if (!s) {
1656                /* no session, so free socket data */
1657                kfree_skb(skb);
1658                return s;
1659        }
1660
1661        dlci = __get_dlci(hdr->addr);
1662        type = __get_type(hdr->ctrl);
1663
1664        /* Trim FCS */
1665        skb->len--; skb->tail--;
1666        fcs = *(u8 *)skb_tail_pointer(skb);
1667
1668        if (__check_fcs(skb->data, type, fcs)) {
1669                BT_ERR("bad checksum in packet");
1670                kfree_skb(skb);
1671                return s;
1672        }
1673
1674        if (__test_ea(hdr->len))
1675                skb_pull(skb, 3);
1676        else
1677                skb_pull(skb, 4);
1678
1679        switch (type) {
1680        case RFCOMM_SABM:
1681                if (__test_pf(hdr->ctrl))
1682                        rfcomm_recv_sabm(s, dlci);
1683                break;
1684
1685        case RFCOMM_DISC:
1686                if (__test_pf(hdr->ctrl))
1687                        s = rfcomm_recv_disc(s, dlci);
1688                break;
1689
1690        case RFCOMM_UA:
1691                if (__test_pf(hdr->ctrl))
1692                        s = rfcomm_recv_ua(s, dlci);
1693                break;
1694
1695        case RFCOMM_DM:
1696                s = rfcomm_recv_dm(s, dlci);
1697                break;
1698
1699        case RFCOMM_UIH:
1700                if (dlci) {
1701                        rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1702                        return s;
1703                }
1704                rfcomm_recv_mcc(s, skb);
1705                break;
1706
1707        default:
1708                BT_ERR("Unknown packet type 0x%02x", type);
1709                break;
1710        }
1711        kfree_skb(skb);
1712        return s;
1713}
1714
1715/* ---- Connection and data processing ---- */
1716
1717static void rfcomm_process_connect(struct rfcomm_session *s)
1718{
1719        struct rfcomm_dlc *d;
1720        struct list_head *p, *n;
1721
1722        BT_DBG("session %p state %ld", s, s->state);
1723
1724        list_for_each_safe(p, n, &s->dlcs) {
1725                d = list_entry(p, struct rfcomm_dlc, list);
1726                if (d->state == BT_CONFIG) {
1727                        d->mtu = s->mtu;
1728                        if (rfcomm_check_security(d)) {
1729                                rfcomm_send_pn(s, 1, d);
1730                        } else {
1731                                set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1732                                rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1733                        }
1734                }
1735        }
1736}
1737
1738/* Send data queued for the DLC.
1739 * Return number of frames left in the queue.
1740 */
1741static int rfcomm_process_tx(struct rfcomm_dlc *d)
1742{
1743        struct sk_buff *skb;
1744        int err;
1745
1746        BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1747                        d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1748
1749        /* Send pending MSC */
1750        if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1751                rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1752
1753        if (d->cfc) {
1754                /* CFC enabled.
1755                 * Give them some credits */
1756                if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1757                                d->rx_credits <= (d->cfc >> 2)) {
1758                        rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1759                        d->rx_credits = d->cfc;
1760                }
1761        } else {
1762                /* CFC disabled.
1763                 * Give ourselves some credits */
1764                d->tx_credits = 5;
1765        }
1766
1767        if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1768                return skb_queue_len(&d->tx_queue);
1769
1770        while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1771                err = rfcomm_send_frame(d->session, skb->data, skb->len);
1772                if (err < 0) {
1773                        skb_queue_head(&d->tx_queue, skb);
1774                        break;
1775                }
1776                kfree_skb(skb);
1777                d->tx_credits--;
1778        }
1779
1780        if (d->cfc && !d->tx_credits) {
1781                /* We're out of TX credits.
1782                 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1783                set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1784        }
1785
1786        return skb_queue_len(&d->tx_queue);
1787}
1788
1789static void rfcomm_process_dlcs(struct rfcomm_session *s)
1790{
1791        struct rfcomm_dlc *d;
1792        struct list_head *p, *n;
1793
1794        BT_DBG("session %p state %ld", s, s->state);
1795
1796        list_for_each_safe(p, n, &s->dlcs) {
1797                d = list_entry(p, struct rfcomm_dlc, list);
1798
1799                if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1800                        __rfcomm_dlc_close(d, ETIMEDOUT);
1801                        continue;
1802                }
1803
1804                if (test_bit(RFCOMM_ENC_DROP, &d->flags)) {
1805                        __rfcomm_dlc_close(d, ECONNREFUSED);
1806                        continue;
1807                }
1808
1809                if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) {
1810                        rfcomm_dlc_clear_timer(d);
1811                        if (d->out) {
1812                                rfcomm_send_pn(s, 1, d);
1813                                rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
1814                        } else {
1815                                if (d->defer_setup) {
1816                                        set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1817                                        rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1818
1819                                        rfcomm_dlc_lock(d);
1820                                        d->state = BT_CONNECT2;
1821                                        d->state_change(d, 0);
1822                                        rfcomm_dlc_unlock(d);
1823                                } else
1824                                        rfcomm_dlc_accept(d);
1825                        }
1826                        continue;
1827                } else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) {
1828                        rfcomm_dlc_clear_timer(d);
1829                        if (!d->out)
1830                                rfcomm_send_dm(s, d->dlci);
1831                        else
1832                                d->state = BT_CLOSED;
1833                        __rfcomm_dlc_close(d, ECONNREFUSED);
1834                        continue;
1835                }
1836
1837                if (test_bit(RFCOMM_SEC_PENDING, &d->flags))
1838                        continue;
1839
1840                if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
1841                        continue;
1842
1843                if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
1844                                                d->mscex == RFCOMM_MSCEX_OK)
1845                        rfcomm_process_tx(d);
1846        }
1847}
1848
1849static struct rfcomm_session *rfcomm_process_rx(struct rfcomm_session *s)
1850{
1851        struct socket *sock = s->sock;
1852        struct sock *sk = sock->sk;
1853        struct sk_buff *skb;
1854
1855        BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
1856
1857        /* Get data directly from socket receive queue without copying it. */
1858        while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
1859                skb_orphan(skb);
1860                if (!skb_linearize(skb))
1861                        s = rfcomm_recv_frame(s, skb);
1862                else
1863                        kfree_skb(skb);
1864        }
1865
1866        if (s && (sk->sk_state == BT_CLOSED))
1867                s = rfcomm_session_close(s, sk->sk_err);
1868
1869        return s;
1870}
1871
1872static void rfcomm_accept_connection(struct rfcomm_session *s)
1873{
1874        struct socket *sock = s->sock, *nsock;
1875        int err;
1876
1877        /* Fast check for a new connection.
1878         * Avoids unnesesary socket allocations. */
1879        if (list_empty(&bt_sk(sock->sk)->accept_q))
1880                return;
1881
1882        BT_DBG("session %p", s);
1883
1884        err = kernel_accept(sock, &nsock, O_NONBLOCK);
1885        if (err < 0)
1886                return;
1887
1888        /* Set our callbacks */
1889        nsock->sk->sk_data_ready   = rfcomm_l2data_ready;
1890        nsock->sk->sk_state_change = rfcomm_l2state_change;
1891
1892        s = rfcomm_session_add(nsock, BT_OPEN);
1893        if (s) {
1894                /* We should adjust MTU on incoming sessions.
1895                 * L2CAP MTU minus UIH header and FCS. */
1896                s->mtu = min(l2cap_pi(nsock->sk)->chan->omtu,
1897                                l2cap_pi(nsock->sk)->chan->imtu) - 5;
1898
1899                rfcomm_schedule();
1900        } else
1901                sock_release(nsock);
1902}
1903
1904static struct rfcomm_session *rfcomm_check_connection(struct rfcomm_session *s)
1905{
1906        struct sock *sk = s->sock->sk;
1907
1908        BT_DBG("%p state %ld", s, s->state);
1909
1910        switch (sk->sk_state) {
1911        case BT_CONNECTED:
1912                s->state = BT_CONNECT;
1913
1914                /* We can adjust MTU on outgoing sessions.
1915                 * L2CAP MTU minus UIH header and FCS. */
1916                s->mtu = min(l2cap_pi(sk)->chan->omtu, l2cap_pi(sk)->chan->imtu) - 5;
1917
1918                rfcomm_send_sabm(s, 0);
1919                break;
1920
1921        case BT_CLOSED:
1922                s = rfcomm_session_close(s, sk->sk_err);
1923                break;
1924        }
1925        return s;
1926}
1927
1928static void rfcomm_process_sessions(void)
1929{
1930        struct list_head *p, *n;
1931
1932        rfcomm_lock();
1933
1934        list_for_each_safe(p, n, &session_list) {
1935                struct rfcomm_session *s;
1936                s = list_entry(p, struct rfcomm_session, list);
1937
1938                if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) {
1939                        s->state = BT_DISCONN;
1940                        rfcomm_send_disc(s, 0);
1941                        continue;
1942                }
1943
1944                if (s->state == BT_LISTEN) {
1945                        rfcomm_accept_connection(s);
1946                        continue;
1947                }
1948
1949                switch (s->state) {
1950                case BT_BOUND:
1951                        s = rfcomm_check_connection(s);
1952                        break;
1953
1954                default:
1955                        s = rfcomm_process_rx(s);
1956                        break;
1957                }
1958
1959                if (s)
1960                        rfcomm_process_dlcs(s);
1961        }
1962
1963        rfcomm_unlock();
1964}
1965
1966static int rfcomm_add_listener(bdaddr_t *ba)
1967{
1968        struct sockaddr_l2 addr;
1969        struct socket *sock;
1970        struct sock *sk;
1971        struct rfcomm_session *s;
1972        int    err = 0;
1973
1974        /* Create socket */
1975        err = rfcomm_l2sock_create(&sock);
1976        if (err < 0) {
1977                BT_ERR("Create socket failed %d", err);
1978                return err;
1979        }
1980
1981        /* Bind socket */
1982        bacpy(&addr.l2_bdaddr, ba);
1983        addr.l2_family = AF_BLUETOOTH;
1984        addr.l2_psm    = __constant_cpu_to_le16(RFCOMM_PSM);
1985        addr.l2_cid    = 0;
1986        err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
1987        if (err < 0) {
1988                BT_ERR("Bind failed %d", err);
1989                goto failed;
1990        }
1991
1992        /* Set L2CAP options */
1993        sk = sock->sk;
1994        lock_sock(sk);
1995        l2cap_pi(sk)->chan->imtu = l2cap_mtu;
1996        release_sock(sk);
1997
1998        /* Start listening on the socket */
1999        err = kernel_listen(sock, 10);
2000        if (err) {
2001                BT_ERR("Listen failed %d", err);
2002                goto failed;
2003        }
2004
2005        /* Add listening session */
2006        s = rfcomm_session_add(sock, BT_LISTEN);
2007        if (!s) {
2008                err = -ENOMEM;
2009                goto failed;
2010        }
2011
2012        return 0;
2013failed:
2014        sock_release(sock);
2015        return err;
2016}
2017
2018static void rfcomm_kill_listener(void)
2019{
2020        struct rfcomm_session *s;
2021        struct list_head *p, *n;
2022
2023        BT_DBG("");
2024
2025        list_for_each_safe(p, n, &session_list) {
2026                s = list_entry(p, struct rfcomm_session, list);
2027                rfcomm_session_del(s);
2028        }
2029}
2030
2031static int rfcomm_run(void *unused)
2032{
2033        BT_DBG("");
2034
2035        set_user_nice(current, -10);
2036
2037        rfcomm_add_listener(BDADDR_ANY);
2038
2039        while (1) {
2040                set_current_state(TASK_INTERRUPTIBLE);
2041
2042                if (kthread_should_stop())
2043                        break;
2044
2045                /* Process stuff */
2046                rfcomm_process_sessions();
2047
2048                schedule();
2049        }
2050        __set_current_state(TASK_RUNNING);
2051
2052        rfcomm_kill_listener();
2053
2054        return 0;
2055}
2056
2057static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
2058{
2059        struct rfcomm_session *s;
2060        struct rfcomm_dlc *d;
2061        struct list_head *p, *n;
2062
2063        BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
2064
2065        s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
2066        if (!s)
2067                return;
2068
2069        list_for_each_safe(p, n, &s->dlcs) {
2070                d = list_entry(p, struct rfcomm_dlc, list);
2071
2072                if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) {
2073                        rfcomm_dlc_clear_timer(d);
2074                        if (status || encrypt == 0x00) {
2075                                set_bit(RFCOMM_ENC_DROP, &d->flags);
2076                                continue;
2077                        }
2078                }
2079
2080                if (d->state == BT_CONNECTED && !status && encrypt == 0x00) {
2081                        if (d->sec_level == BT_SECURITY_MEDIUM) {
2082                                set_bit(RFCOMM_SEC_PENDING, &d->flags);
2083                                rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
2084                                continue;
2085                        } else if (d->sec_level == BT_SECURITY_HIGH) {
2086                                set_bit(RFCOMM_ENC_DROP, &d->flags);
2087                                continue;
2088                        }
2089                }
2090
2091                if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
2092                        continue;
2093
2094                if (!status && hci_conn_check_secure(conn, d->sec_level))
2095                        set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
2096                else
2097                        set_bit(RFCOMM_AUTH_REJECT, &d->flags);
2098        }
2099
2100        rfcomm_schedule();
2101}
2102
2103static struct hci_cb rfcomm_cb = {
2104        .name           = "RFCOMM",
2105        .security_cfm   = rfcomm_security_cfm
2106};
2107
2108static int rfcomm_dlc_debugfs_show(struct seq_file *f, void *x)
2109{
2110        struct rfcomm_session *s;
2111
2112        rfcomm_lock();
2113
2114        list_for_each_entry(s, &session_list, list) {
2115                struct rfcomm_dlc *d;
2116                list_for_each_entry(d, &s->dlcs, list) {
2117                        struct sock *sk = s->sock->sk;
2118
2119                        seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n",
2120                                   &bt_sk(sk)->src, &bt_sk(sk)->dst,
2121                                   d->state, d->dlci, d->mtu,
2122                                   d->rx_credits, d->tx_credits);
2123                }
2124        }
2125
2126        rfcomm_unlock();
2127
2128        return 0;
2129}
2130
2131static int rfcomm_dlc_debugfs_open(struct inode *inode, struct file *file)
2132{
2133        return single_open(file, rfcomm_dlc_debugfs_show, inode->i_private);
2134}
2135
2136static const struct file_operations rfcomm_dlc_debugfs_fops = {
2137        .open           = rfcomm_dlc_debugfs_open,
2138        .read           = seq_read,
2139        .llseek         = seq_lseek,
2140        .release        = single_release,
2141};
2142
2143static struct dentry *rfcomm_dlc_debugfs;
2144
2145/* ---- Initialization ---- */
2146static int __init rfcomm_init(void)
2147{
2148        int err;
2149
2150        hci_register_cb(&rfcomm_cb);
2151
2152        rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd");
2153        if (IS_ERR(rfcomm_thread)) {
2154                err = PTR_ERR(rfcomm_thread);
2155                goto unregister;
2156        }
2157
2158        if (bt_debugfs) {
2159                rfcomm_dlc_debugfs = debugfs_create_file("rfcomm_dlc", 0444,
2160                                bt_debugfs, NULL, &rfcomm_dlc_debugfs_fops);
2161                if (!rfcomm_dlc_debugfs)
2162                        BT_ERR("Failed to create RFCOMM debug file");
2163        }
2164
2165        err = rfcomm_init_ttys();
2166        if (err < 0)
2167                goto stop;
2168
2169        err = rfcomm_init_sockets();
2170        if (err < 0)
2171                goto cleanup;
2172
2173        BT_INFO("RFCOMM ver %s", VERSION);
2174
2175        return 0;
2176
2177cleanup:
2178        rfcomm_cleanup_ttys();
2179
2180stop:
2181        kthread_stop(rfcomm_thread);
2182
2183unregister:
2184        hci_unregister_cb(&rfcomm_cb);
2185
2186        return err;
2187}
2188
2189static void __exit rfcomm_exit(void)
2190{
2191        debugfs_remove(rfcomm_dlc_debugfs);
2192
2193        hci_unregister_cb(&rfcomm_cb);
2194
2195        kthread_stop(rfcomm_thread);
2196
2197        rfcomm_cleanup_ttys();
2198
2199        rfcomm_cleanup_sockets();
2200}
2201
2202module_init(rfcomm_init);
2203module_exit(rfcomm_exit);
2204
2205module_param(disable_cfc, bool, 0644);
2206MODULE_PARM_DESC(disable_cfc, "Disable credit based flow control");
2207
2208module_param(channel_mtu, int, 0644);
2209MODULE_PARM_DESC(channel_mtu, "Default MTU for the RFCOMM channel");
2210
2211module_param(l2cap_mtu, uint, 0644);
2212MODULE_PARM_DESC(l2cap_mtu, "Default MTU for the L2CAP connection");
2213
2214module_param(l2cap_ertm, bool, 0644);
2215MODULE_PARM_DESC(l2cap_ertm, "Use L2CAP ERTM mode for connection");
2216
2217MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
2218MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION);
2219MODULE_VERSION(VERSION);
2220MODULE_LICENSE("GPL");
2221MODULE_ALIAS("bt-proto-3");
2222