]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - net/bluetooth/hci_conn.c
Revert "Bluetooth: Revert: Fix L2CAP connection establishment"
[linux-2.6.git] / net / bluetooth / hci_conn.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI connection handling. */
26
27 #include <linux/module.h>
28
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/slab.h>
33 #include <linux/poll.h>
34 #include <linux/fcntl.h>
35 #include <linux/init.h>
36 #include <linux/skbuff.h>
37 #include <linux/interrupt.h>
38 #include <linux/notifier.h>
39 #include <net/sock.h>
40
41 #include <asm/system.h>
42 #include <linux/uaccess.h>
43 #include <asm/unaligned.h>
44
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
47
48 static void hci_le_connect(struct hci_conn *conn)
49 {
50         struct hci_dev *hdev = conn->hdev;
51         struct hci_cp_le_create_conn cp;
52
53         conn->state = BT_CONNECT;
54         conn->out = 1;
55         conn->link_mode |= HCI_LM_MASTER;
56         conn->sec_level = BT_SECURITY_LOW;
57
58         memset(&cp, 0, sizeof(cp));
59         cp.scan_interval = cpu_to_le16(0x0060);
60         cp.scan_window = cpu_to_le16(0x0030);
61         bacpy(&cp.peer_addr, &conn->dst);
62         cp.peer_addr_type = conn->dst_type;
63         cp.conn_interval_min = cpu_to_le16(0x0028);
64         cp.conn_interval_max = cpu_to_le16(0x0038);
65         cp.supervision_timeout = cpu_to_le16(0x002a);
66         cp.min_ce_len = cpu_to_le16(0x0000);
67         cp.max_ce_len = cpu_to_le16(0x0000);
68
69         hci_send_cmd(hdev, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
70 }
71
72 static void hci_le_connect_cancel(struct hci_conn *conn)
73 {
74         hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
75 }
76
77 void hci_acl_connect(struct hci_conn *conn)
78 {
79         struct hci_dev *hdev = conn->hdev;
80         struct inquiry_entry *ie;
81         struct hci_cp_create_conn cp;
82
83         BT_DBG("%p", conn);
84
85         conn->state = BT_CONNECT;
86         conn->out = 1;
87
88         conn->link_mode = HCI_LM_MASTER;
89
90         conn->attempt++;
91
92         conn->link_policy = hdev->link_policy;
93
94         memset(&cp, 0, sizeof(cp));
95         bacpy(&cp.bdaddr, &conn->dst);
96         cp.pscan_rep_mode = 0x02;
97
98         ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
99         if (ie) {
100                 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
101                         cp.pscan_rep_mode = ie->data.pscan_rep_mode;
102                         cp.pscan_mode     = ie->data.pscan_mode;
103                         cp.clock_offset   = ie->data.clock_offset |
104                                                         cpu_to_le16(0x8000);
105                 }
106
107                 memcpy(conn->dev_class, ie->data.dev_class, 3);
108                 conn->ssp_mode = ie->data.ssp_mode;
109         }
110
111         cp.pkt_type = cpu_to_le16(conn->pkt_type);
112         if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
113                 cp.role_switch = 0x01;
114         else
115                 cp.role_switch = 0x00;
116
117         hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
118 }
119
120 static void hci_acl_connect_cancel(struct hci_conn *conn)
121 {
122         struct hci_cp_create_conn_cancel cp;
123
124         BT_DBG("%p", conn);
125
126         if (conn->hdev->hci_ver < 2)
127                 return;
128
129         bacpy(&cp.bdaddr, &conn->dst);
130         hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
131 }
132
133 void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
134 {
135         struct hci_cp_disconnect cp;
136
137         BT_DBG("%p", conn);
138
139         conn->state = BT_DISCONN;
140
141         cp.handle = cpu_to_le16(conn->handle);
142         cp.reason = reason;
143         hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
144 }
145
146 void hci_add_sco(struct hci_conn *conn, __u16 handle)
147 {
148         struct hci_dev *hdev = conn->hdev;
149         struct hci_cp_add_sco cp;
150
151         BT_DBG("%p", conn);
152
153         conn->state = BT_CONNECT;
154         conn->out = 1;
155
156         conn->attempt++;
157
158         cp.handle   = cpu_to_le16(handle);
159         cp.pkt_type = cpu_to_le16(conn->pkt_type);
160
161         hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
162 }
163
164 void hci_setup_sync(struct hci_conn *conn, __u16 handle)
165 {
166         struct hci_dev *hdev = conn->hdev;
167         struct hci_cp_setup_sync_conn cp;
168
169         BT_DBG("%p", conn);
170
171         conn->state = BT_CONNECT;
172         conn->out = 1;
173
174         conn->attempt++;
175
176         cp.handle   = cpu_to_le16(handle);
177         cp.pkt_type = cpu_to_le16(conn->pkt_type);
178
179         cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
180         cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
181         cp.max_latency    = cpu_to_le16(0xffff);
182         cp.voice_setting  = cpu_to_le16(hdev->voice_setting);
183         cp.retrans_effort = 0xff;
184
185         hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
186 }
187
188 void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
189                                         u16 latency, u16 to_multiplier)
190 {
191         struct hci_cp_le_conn_update cp;
192         struct hci_dev *hdev = conn->hdev;
193
194         memset(&cp, 0, sizeof(cp));
195
196         cp.handle               = cpu_to_le16(conn->handle);
197         cp.conn_interval_min    = cpu_to_le16(min);
198         cp.conn_interval_max    = cpu_to_le16(max);
199         cp.conn_latency         = cpu_to_le16(latency);
200         cp.supervision_timeout  = cpu_to_le16(to_multiplier);
201         cp.min_ce_len           = cpu_to_le16(0x0001);
202         cp.max_ce_len           = cpu_to_le16(0x0001);
203
204         hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
205 }
206 EXPORT_SYMBOL(hci_le_conn_update);
207
208 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
209                                                         __u8 ltk[16])
210 {
211         struct hci_dev *hdev = conn->hdev;
212         struct hci_cp_le_start_enc cp;
213
214         BT_DBG("%p", conn);
215
216         memset(&cp, 0, sizeof(cp));
217
218         cp.handle = cpu_to_le16(conn->handle);
219         memcpy(cp.ltk, ltk, sizeof(cp.ltk));
220         cp.ediv = ediv;
221         memcpy(cp.rand, rand, sizeof(cp.rand));
222
223         hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
224 }
225 EXPORT_SYMBOL(hci_le_start_enc);
226
227 void hci_le_ltk_reply(struct hci_conn *conn, u8 ltk[16])
228 {
229         struct hci_dev *hdev = conn->hdev;
230         struct hci_cp_le_ltk_reply cp;
231
232         BT_DBG("%p", conn);
233
234         memset(&cp, 0, sizeof(cp));
235
236         cp.handle = cpu_to_le16(conn->handle);
237         memcpy(cp.ltk, ltk, sizeof(ltk));
238
239         hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
240 }
241 EXPORT_SYMBOL(hci_le_ltk_reply);
242
243 void hci_le_ltk_neg_reply(struct hci_conn *conn)
244 {
245         struct hci_dev *hdev = conn->hdev;
246         struct hci_cp_le_ltk_neg_reply cp;
247
248         BT_DBG("%p", conn);
249
250         memset(&cp, 0, sizeof(cp));
251
252         cp.handle = cpu_to_le16(conn->handle);
253
254         hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(cp), &cp);
255 }
256
257 /* Device _must_ be locked */
258 void hci_sco_setup(struct hci_conn *conn, __u8 status)
259 {
260         struct hci_conn *sco = conn->link;
261
262         BT_DBG("%p", conn);
263
264         if (!sco)
265                 return;
266
267         if (!status) {
268                 if (lmp_esco_capable(conn->hdev))
269                         hci_setup_sync(sco, conn->handle);
270                 else
271                         hci_add_sco(sco, conn->handle);
272         } else {
273                 hci_proto_connect_cfm(sco, status);
274                 hci_conn_del(sco);
275         }
276 }
277
278 static void hci_conn_timeout(unsigned long arg)
279 {
280         struct hci_conn *conn = (void *) arg;
281         struct hci_dev *hdev = conn->hdev;
282         __u8 reason;
283
284         BT_DBG("conn %p state %d", conn, conn->state);
285
286         if (atomic_read(&conn->refcnt))
287                 return;
288
289         hci_dev_lock(hdev);
290
291         switch (conn->state) {
292         case BT_CONNECT:
293         case BT_CONNECT2:
294                 if (conn->out) {
295                         if (conn->type == ACL_LINK)
296                                 hci_acl_connect_cancel(conn);
297                         else if (conn->type == LE_LINK)
298                                 hci_le_connect_cancel(conn);
299                 }
300                 break;
301         case BT_CONFIG:
302         case BT_CONNECTED:
303                 reason = hci_proto_disconn_ind(conn);
304                 hci_acl_disconn(conn, reason);
305                 break;
306         default:
307                 conn->state = BT_CLOSED;
308                 break;
309         }
310
311         hci_dev_unlock(hdev);
312 }
313
314 static void hci_conn_idle(unsigned long arg)
315 {
316         struct hci_conn *conn = (void *) arg;
317
318         BT_DBG("conn %p mode %d", conn, conn->mode);
319
320         hci_conn_enter_sniff_mode(conn);
321 }
322
323 static void hci_conn_auto_accept(unsigned long arg)
324 {
325         struct hci_conn *conn = (void *) arg;
326         struct hci_dev *hdev = conn->hdev;
327
328         hci_dev_lock(hdev);
329
330         hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
331                                                                 &conn->dst);
332
333         hci_dev_unlock(hdev);
334 }
335
336 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
337 {
338         struct hci_conn *conn;
339
340         BT_DBG("%s dst %s", hdev->name, batostr(dst));
341
342         conn = kzalloc(sizeof(struct hci_conn), GFP_ATOMIC);
343         if (!conn)
344                 return NULL;
345
346         bacpy(&conn->dst, dst);
347         conn->hdev  = hdev;
348         conn->type  = type;
349         conn->mode  = HCI_CM_ACTIVE;
350         conn->state = BT_OPEN;
351         conn->auth_type = HCI_AT_GENERAL_BONDING;
352         conn->io_capability = hdev->io_capability;
353         conn->remote_auth = 0xff;
354         conn->key_type = 0xff;
355
356         conn->power_save = 1;
357         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
358
359         switch (type) {
360         case ACL_LINK:
361                 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
362                 break;
363         case SCO_LINK:
364                 if (lmp_esco_capable(hdev))
365                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
366                                         (hdev->esco_type & EDR_ESCO_MASK);
367                 else
368                         conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
369                 break;
370         case ESCO_LINK:
371                 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
372                 break;
373         }
374
375         skb_queue_head_init(&conn->data_q);
376
377         setup_timer(&conn->disc_timer, hci_conn_timeout, (unsigned long)conn);
378         setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
379         setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
380                                                         (unsigned long) conn);
381
382         atomic_set(&conn->refcnt, 0);
383
384         hci_dev_hold(hdev);
385
386         tasklet_disable(&hdev->tx_task);
387
388         hci_conn_hash_add(hdev, conn);
389         if (hdev->notify)
390                 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
391
392         atomic_set(&conn->devref, 0);
393
394         hci_conn_init_sysfs(conn);
395
396         tasklet_enable(&hdev->tx_task);
397
398         return conn;
399 }
400
401 int hci_conn_del(struct hci_conn *conn)
402 {
403         struct hci_dev *hdev = conn->hdev;
404
405         BT_DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
406
407         del_timer(&conn->idle_timer);
408
409         del_timer(&conn->disc_timer);
410
411         del_timer(&conn->auto_accept_timer);
412
413         if (conn->type == ACL_LINK) {
414                 struct hci_conn *sco = conn->link;
415                 if (sco)
416                         sco->link = NULL;
417
418                 /* Unacked frames */
419                 hdev->acl_cnt += conn->sent;
420         } else if (conn->type == LE_LINK) {
421                 if (hdev->le_pkts)
422                         hdev->le_cnt += conn->sent;
423                 else
424                         hdev->acl_cnt += conn->sent;
425         } else {
426                 struct hci_conn *acl = conn->link;
427                 if (acl) {
428                         acl->link = NULL;
429                         hci_conn_put(acl);
430                 }
431         }
432
433         tasklet_disable(&hdev->tx_task);
434
435         hci_conn_hash_del(hdev, conn);
436         if (hdev->notify)
437                 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
438
439         tasklet_enable(&hdev->tx_task);
440
441         skb_queue_purge(&conn->data_q);
442
443         hci_conn_put_device(conn);
444
445         hci_dev_put(hdev);
446
447         if (conn->handle == 0)
448                 kfree(conn);
449
450         return 0;
451 }
452
453 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
454 {
455         int use_src = bacmp(src, BDADDR_ANY);
456         struct hci_dev *hdev = NULL;
457         struct list_head *p;
458
459         BT_DBG("%s -> %s", batostr(src), batostr(dst));
460
461         read_lock_bh(&hci_dev_list_lock);
462
463         list_for_each(p, &hci_dev_list) {
464                 struct hci_dev *d = list_entry(p, struct hci_dev, list);
465
466                 if (!test_bit(HCI_UP, &d->flags) || test_bit(HCI_RAW, &d->flags))
467                         continue;
468
469                 /* Simple routing:
470                  *   No source address - find interface with bdaddr != dst
471                  *   Source address    - find interface with bdaddr == src
472                  */
473
474                 if (use_src) {
475                         if (!bacmp(&d->bdaddr, src)) {
476                                 hdev = d; break;
477                         }
478                 } else {
479                         if (bacmp(&d->bdaddr, dst)) {
480                                 hdev = d; break;
481                         }
482                 }
483         }
484
485         if (hdev)
486                 hdev = hci_dev_hold(hdev);
487
488         read_unlock_bh(&hci_dev_list_lock);
489         return hdev;
490 }
491 EXPORT_SYMBOL(hci_get_route);
492
493 /* Create SCO, ACL or LE connection.
494  * Device _must_ be locked */
495 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 sec_level, __u8 auth_type)
496 {
497         struct hci_conn *acl;
498         struct hci_conn *sco;
499         struct hci_conn *le;
500
501         BT_DBG("%s dst %s", hdev->name, batostr(dst));
502
503         if (type == LE_LINK) {
504                 struct adv_entry *entry;
505
506                 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
507                 if (le)
508                         return ERR_PTR(-EBUSY);
509
510                 entry = hci_find_adv_entry(hdev, dst);
511                 if (!entry)
512                         return ERR_PTR(-EHOSTUNREACH);
513
514                 le = hci_conn_add(hdev, LE_LINK, dst);
515                 if (!le)
516                         return ERR_PTR(-ENOMEM);
517
518                 le->dst_type = entry->bdaddr_type;
519
520                 hci_le_connect(le);
521
522                 hci_conn_hold(le);
523
524                 return le;
525         }
526
527         acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
528         if (!acl) {
529                 acl = hci_conn_add(hdev, ACL_LINK, dst);
530                 if (!acl)
531                         return NULL;
532         }
533
534         hci_conn_hold(acl);
535
536         if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
537                 acl->sec_level = BT_SECURITY_LOW;
538                 acl->pending_sec_level = sec_level;
539                 acl->auth_type = auth_type;
540                 hci_acl_connect(acl);
541         }
542
543         if (type == ACL_LINK)
544                 return acl;
545
546         sco = hci_conn_hash_lookup_ba(hdev, type, dst);
547         if (!sco) {
548                 sco = hci_conn_add(hdev, type, dst);
549                 if (!sco) {
550                         hci_conn_put(acl);
551                         return NULL;
552                 }
553         }
554
555         acl->link = sco;
556         sco->link = acl;
557
558         hci_conn_hold(sco);
559
560         if (acl->state == BT_CONNECTED &&
561                         (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
562                 acl->power_save = 1;
563                 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
564
565                 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->pend)) {
566                         /* defer SCO setup until mode change completed */
567                         set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->pend);
568                         return sco;
569                 }
570
571                 hci_sco_setup(acl, 0x00);
572         }
573
574         return sco;
575 }
576 EXPORT_SYMBOL(hci_connect);
577
578 /* Check link security requirement */
579 int hci_conn_check_link_mode(struct hci_conn *conn)
580 {
581         BT_DBG("conn %p", conn);
582
583         if (conn->ssp_mode > 0 && conn->hdev->ssp_mode > 0 &&
584                                         !(conn->link_mode & HCI_LM_ENCRYPT))
585                 return 0;
586
587         return 1;
588 }
589 EXPORT_SYMBOL(hci_conn_check_link_mode);
590
591 /* Authenticate remote device */
592 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
593 {
594         BT_DBG("conn %p", conn);
595
596         if (conn->pending_sec_level > sec_level)
597                 sec_level = conn->pending_sec_level;
598
599         if (sec_level > conn->sec_level)
600                 conn->pending_sec_level = sec_level;
601         else if (conn->link_mode & HCI_LM_AUTH)
602                 return 1;
603
604         /* Make sure we preserve an existing MITM requirement*/
605         auth_type |= (conn->auth_type & 0x01);
606
607         conn->auth_type = auth_type;
608
609         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
610                 struct hci_cp_auth_requested cp;
611                 cp.handle = cpu_to_le16(conn->handle);
612                 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
613                                                         sizeof(cp), &cp);
614                 if (conn->key_type != 0xff)
615                         set_bit(HCI_CONN_REAUTH_PEND, &conn->pend);
616         }
617
618         return 0;
619 }
620
621 /* Encrypt the the link */
622 static void hci_conn_encrypt(struct hci_conn *conn)
623 {
624         BT_DBG("conn %p", conn);
625
626         if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
627                 struct hci_cp_set_conn_encrypt cp;
628                 cp.handle  = cpu_to_le16(conn->handle);
629                 cp.encrypt = 0x01;
630                 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
631                                                                         &cp);
632         }
633 }
634
635 /* Enable security */
636 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
637 {
638         BT_DBG("conn %p", conn);
639
640         /* For sdp we don't need the link key. */
641         if (sec_level == BT_SECURITY_SDP)
642                 return 1;
643
644         /* For non 2.1 devices and low security level we don't need the link
645            key. */
646         if (sec_level == BT_SECURITY_LOW &&
647                                 (!conn->ssp_mode || !conn->hdev->ssp_mode))
648                 return 1;
649
650         /* For other security levels we need the link key. */
651         if (!(conn->link_mode & HCI_LM_AUTH))
652                 goto auth;
653
654         /* An authenticated combination key has sufficient security for any
655            security level. */
656         if (conn->key_type == HCI_LK_AUTH_COMBINATION)
657                 goto encrypt;
658
659         /* An unauthenticated combination key has sufficient security for
660            security level 1 and 2. */
661         if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
662                         (sec_level == BT_SECURITY_MEDIUM ||
663                         sec_level == BT_SECURITY_LOW))
664                 goto encrypt;
665
666         /* A combination key has always sufficient security for the security
667            levels 1 or 2. High security level requires the combination key
668            is generated using maximum PIN code length (16).
669            For pre 2.1 units. */
670         if (conn->key_type == HCI_LK_COMBINATION &&
671                         (sec_level != BT_SECURITY_HIGH ||
672                         conn->pin_length == 16))
673                 goto encrypt;
674
675 auth:
676         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
677                 return 0;
678
679         if (!hci_conn_auth(conn, sec_level, auth_type))
680                 return 0;
681
682 encrypt:
683         if (conn->link_mode & HCI_LM_ENCRYPT)
684                 return 1;
685
686         hci_conn_encrypt(conn);
687         return 0;
688 }
689 EXPORT_SYMBOL(hci_conn_security);
690
691 /* Check secure link requirement */
692 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
693 {
694         BT_DBG("conn %p", conn);
695
696         if (sec_level != BT_SECURITY_HIGH)
697                 return 1; /* Accept if non-secure is required */
698
699         if (conn->sec_level == BT_SECURITY_HIGH)
700                 return 1;
701
702         return 0; /* Reject not secure link */
703 }
704 EXPORT_SYMBOL(hci_conn_check_secure);
705
706 /* Change link key */
707 int hci_conn_change_link_key(struct hci_conn *conn)
708 {
709         BT_DBG("conn %p", conn);
710
711         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
712                 struct hci_cp_change_conn_link_key cp;
713                 cp.handle = cpu_to_le16(conn->handle);
714                 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
715                                                         sizeof(cp), &cp);
716         }
717
718         return 0;
719 }
720 EXPORT_SYMBOL(hci_conn_change_link_key);
721
722 /* Switch role */
723 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
724 {
725         BT_DBG("conn %p", conn);
726
727         if (!role && conn->link_mode & HCI_LM_MASTER)
728                 return 1;
729
730         if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->pend)) {
731                 struct hci_cp_switch_role cp;
732                 bacpy(&cp.bdaddr, &conn->dst);
733                 cp.role = role;
734                 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
735         }
736
737         return 0;
738 }
739 EXPORT_SYMBOL(hci_conn_switch_role);
740
741 /* Enter active mode */
742 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
743 {
744         struct hci_dev *hdev = conn->hdev;
745
746         BT_DBG("conn %p mode %d", conn, conn->mode);
747
748         if (test_bit(HCI_RAW, &hdev->flags))
749                 return;
750
751         if (conn->mode != HCI_CM_SNIFF)
752                 goto timer;
753
754         if (!conn->power_save && !force_active)
755                 goto timer;
756
757         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
758                 struct hci_cp_exit_sniff_mode cp;
759                 cp.handle = cpu_to_le16(conn->handle);
760                 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
761         }
762
763 timer:
764         if (hdev->idle_timeout > 0)
765                 mod_timer(&conn->idle_timer,
766                         jiffies + msecs_to_jiffies(hdev->idle_timeout));
767 }
768
769 /* Enter sniff mode */
770 void hci_conn_enter_sniff_mode(struct hci_conn *conn)
771 {
772         struct hci_dev *hdev = conn->hdev;
773
774         BT_DBG("conn %p mode %d", conn, conn->mode);
775
776         if (test_bit(HCI_RAW, &hdev->flags))
777                 return;
778
779         if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
780                 return;
781
782         if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
783                 return;
784
785         if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
786                 struct hci_cp_sniff_subrate cp;
787                 cp.handle             = cpu_to_le16(conn->handle);
788                 cp.max_latency        = cpu_to_le16(0);
789                 cp.min_remote_timeout = cpu_to_le16(0);
790                 cp.min_local_timeout  = cpu_to_le16(0);
791                 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
792         }
793
794         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
795                 struct hci_cp_sniff_mode cp;
796                 cp.handle       = cpu_to_le16(conn->handle);
797                 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
798                 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
799                 cp.attempt      = cpu_to_le16(4);
800                 cp.timeout      = cpu_to_le16(1);
801                 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
802         }
803 }
804
805 /* Drop all connection on the device */
806 void hci_conn_hash_flush(struct hci_dev *hdev)
807 {
808         struct hci_conn_hash *h = &hdev->conn_hash;
809         struct list_head *p;
810
811         BT_DBG("hdev %s", hdev->name);
812
813         p = h->list.next;
814         while (p != &h->list) {
815                 struct hci_conn *c;
816
817                 c = list_entry(p, struct hci_conn, list);
818                 p = p->next;
819
820                 c->state = BT_CLOSED;
821
822                 hci_proto_disconn_cfm(c, 0x16);
823                 hci_conn_del(c);
824         }
825 }
826
827 /* Check pending connect attempts */
828 void hci_conn_check_pending(struct hci_dev *hdev)
829 {
830         struct hci_conn *conn;
831
832         BT_DBG("hdev %s", hdev->name);
833
834         hci_dev_lock(hdev);
835
836         conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
837         if (conn)
838                 hci_acl_connect(conn);
839
840         hci_dev_unlock(hdev);
841 }
842
843 void hci_conn_hold_device(struct hci_conn *conn)
844 {
845         atomic_inc(&conn->devref);
846 }
847 EXPORT_SYMBOL(hci_conn_hold_device);
848
849 void hci_conn_put_device(struct hci_conn *conn)
850 {
851         if (atomic_dec_and_test(&conn->devref))
852                 hci_conn_del_sysfs(conn);
853 }
854 EXPORT_SYMBOL(hci_conn_put_device);
855
856 int hci_get_conn_list(void __user *arg)
857 {
858         struct hci_conn_list_req req, *cl;
859         struct hci_conn_info *ci;
860         struct hci_dev *hdev;
861         struct list_head *p;
862         int n = 0, size, err;
863
864         if (copy_from_user(&req, arg, sizeof(req)))
865                 return -EFAULT;
866
867         if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
868                 return -EINVAL;
869
870         size = sizeof(req) + req.conn_num * sizeof(*ci);
871
872         cl = kmalloc(size, GFP_KERNEL);
873         if (!cl)
874                 return -ENOMEM;
875
876         hdev = hci_dev_get(req.dev_id);
877         if (!hdev) {
878                 kfree(cl);
879                 return -ENODEV;
880         }
881
882         ci = cl->conn_info;
883
884         hci_dev_lock_bh(hdev);
885         list_for_each(p, &hdev->conn_hash.list) {
886                 register struct hci_conn *c;
887                 c = list_entry(p, struct hci_conn, list);
888
889                 bacpy(&(ci + n)->bdaddr, &c->dst);
890                 (ci + n)->handle = c->handle;
891                 (ci + n)->type  = c->type;
892                 (ci + n)->out   = c->out;
893                 (ci + n)->state = c->state;
894                 (ci + n)->link_mode = c->link_mode;
895                 if (++n >= req.conn_num)
896                         break;
897         }
898         hci_dev_unlock_bh(hdev);
899
900         cl->dev_id = hdev->id;
901         cl->conn_num = n;
902         size = sizeof(req) + n * sizeof(*ci);
903
904         hci_dev_put(hdev);
905
906         err = copy_to_user(arg, cl, size);
907         kfree(cl);
908
909         return err ? -EFAULT : 0;
910 }
911
912 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
913 {
914         struct hci_conn_info_req req;
915         struct hci_conn_info ci;
916         struct hci_conn *conn;
917         char __user *ptr = arg + sizeof(req);
918
919         if (copy_from_user(&req, arg, sizeof(req)))
920                 return -EFAULT;
921
922         hci_dev_lock_bh(hdev);
923         conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
924         if (conn) {
925                 bacpy(&ci.bdaddr, &conn->dst);
926                 ci.handle = conn->handle;
927                 ci.type  = conn->type;
928                 ci.out   = conn->out;
929                 ci.state = conn->state;
930                 ci.link_mode = conn->link_mode;
931         }
932         hci_dev_unlock_bh(hdev);
933
934         if (!conn)
935                 return -ENOENT;
936
937         return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
938 }
939
940 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
941 {
942         struct hci_auth_info_req req;
943         struct hci_conn *conn;
944
945         if (copy_from_user(&req, arg, sizeof(req)))
946                 return -EFAULT;
947
948         hci_dev_lock_bh(hdev);
949         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
950         if (conn)
951                 req.type = conn->auth_type;
952         hci_dev_unlock_bh(hdev);
953
954         if (!conn)
955                 return -ENOENT;
956
957         return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
958 }