Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
hci_conn.c
Go to the documentation of this file.
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 <[email protected]>
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/export.h>
28 
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/a2mp.h>
32 #include <net/bluetooth/smp.h>
33 
34 static void hci_le_create_connection(struct hci_conn *conn)
35 {
36  struct hci_dev *hdev = conn->hdev;
38 
39  conn->state = BT_CONNECT;
40  conn->out = true;
41  conn->link_mode |= HCI_LM_MASTER;
42  conn->sec_level = BT_SECURITY_LOW;
43 
44  memset(&cp, 0, sizeof(cp));
45  cp.scan_interval = __constant_cpu_to_le16(0x0060);
46  cp.scan_window = __constant_cpu_to_le16(0x0030);
47  bacpy(&cp.peer_addr, &conn->dst);
48  cp.peer_addr_type = conn->dst_type;
49  cp.conn_interval_min = __constant_cpu_to_le16(0x0028);
50  cp.conn_interval_max = __constant_cpu_to_le16(0x0038);
51  cp.supervision_timeout = __constant_cpu_to_le16(0x002a);
52  cp.min_ce_len = __constant_cpu_to_le16(0x0000);
53  cp.max_ce_len = __constant_cpu_to_le16(0x0000);
54 
55  hci_send_cmd(hdev, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
56 }
57 
58 static void hci_le_create_connection_cancel(struct hci_conn *conn)
59 {
61 }
62 
63 static void hci_acl_create_connection(struct hci_conn *conn)
64 {
65  struct hci_dev *hdev = conn->hdev;
66  struct inquiry_entry *ie;
67  struct hci_cp_create_conn cp;
68 
69  BT_DBG("hcon %p", conn);
70 
71  conn->state = BT_CONNECT;
72  conn->out = true;
73 
74  conn->link_mode = HCI_LM_MASTER;
75 
76  conn->attempt++;
77 
78  conn->link_policy = hdev->link_policy;
79 
80  memset(&cp, 0, sizeof(cp));
81  bacpy(&cp.bdaddr, &conn->dst);
82  cp.pscan_rep_mode = 0x02;
83 
84  ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
85  if (ie) {
86  if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
87  cp.pscan_rep_mode = ie->data.pscan_rep_mode;
88  cp.pscan_mode = ie->data.pscan_mode;
89  cp.clock_offset = ie->data.clock_offset |
90  __constant_cpu_to_le16(0x8000);
91  }
92 
93  memcpy(conn->dev_class, ie->data.dev_class, 3);
94  if (ie->data.ssp_mode > 0)
96  }
97 
98  cp.pkt_type = cpu_to_le16(conn->pkt_type);
99  if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
100  cp.role_switch = 0x01;
101  else
102  cp.role_switch = 0x00;
103 
104  hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
105 }
106 
107 static void hci_acl_create_connection_cancel(struct hci_conn *conn)
108 {
110 
111  BT_DBG("hcon %p", conn);
112 
113  if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
114  return;
115 
116  bacpy(&cp.bdaddr, &conn->dst);
117  hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
118 }
119 
120 void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
121 {
122  struct hci_cp_disconnect cp;
123 
124  BT_DBG("hcon %p", conn);
125 
126  conn->state = BT_DISCONN;
127 
128  cp.handle = cpu_to_le16(conn->handle);
129  cp.reason = reason;
130  hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
131 }
132 
133 static void hci_add_sco(struct hci_conn *conn, __u16 handle)
134 {
135  struct hci_dev *hdev = conn->hdev;
136  struct hci_cp_add_sco cp;
137 
138  BT_DBG("hcon %p", conn);
139 
140  conn->state = BT_CONNECT;
141  conn->out = true;
142 
143  conn->attempt++;
144 
145  cp.handle = cpu_to_le16(handle);
146  cp.pkt_type = cpu_to_le16(conn->pkt_type);
147 
148  hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
149 }
150 
151 void hci_setup_sync(struct hci_conn *conn, __u16 handle)
152 {
153  struct hci_dev *hdev = conn->hdev;
154  struct hci_cp_setup_sync_conn cp;
155 
156  BT_DBG("hcon %p", conn);
157 
158  conn->state = BT_CONNECT;
159  conn->out = true;
160 
161  conn->attempt++;
162 
163  cp.handle = cpu_to_le16(handle);
164  cp.pkt_type = cpu_to_le16(conn->pkt_type);
165 
166  cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
167  cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
168  cp.max_latency = __constant_cpu_to_le16(0xffff);
170  cp.retrans_effort = 0xff;
171 
172  hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
173 }
174 
175 void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
176  u16 latency, u16 to_multiplier)
177 {
178  struct hci_cp_le_conn_update cp;
179  struct hci_dev *hdev = conn->hdev;
180 
181  memset(&cp, 0, sizeof(cp));
182 
183  cp.handle = cpu_to_le16(conn->handle);
184  cp.conn_interval_min = cpu_to_le16(min);
185  cp.conn_interval_max = cpu_to_le16(max);
186  cp.conn_latency = cpu_to_le16(latency);
187  cp.supervision_timeout = cpu_to_le16(to_multiplier);
188  cp.min_ce_len = __constant_cpu_to_le16(0x0001);
189  cp.max_ce_len = __constant_cpu_to_le16(0x0001);
190 
191  hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
192 }
193 
194 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
195  __u8 ltk[16])
196 {
197  struct hci_dev *hdev = conn->hdev;
198  struct hci_cp_le_start_enc cp;
199 
200  BT_DBG("hcon %p", conn);
201 
202  memset(&cp, 0, sizeof(cp));
203 
204  cp.handle = cpu_to_le16(conn->handle);
205  memcpy(cp.ltk, ltk, sizeof(cp.ltk));
206  cp.ediv = ediv;
207  memcpy(cp.rand, rand, sizeof(cp.rand));
208 
209  hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
210 }
211 
212 /* Device _must_ be locked */
213 void hci_sco_setup(struct hci_conn *conn, __u8 status)
214 {
215  struct hci_conn *sco = conn->link;
216 
217  if (!sco)
218  return;
219 
220  BT_DBG("hcon %p", conn);
221 
222  if (!status) {
223  if (lmp_esco_capable(conn->hdev))
224  hci_setup_sync(sco, conn->handle);
225  else
226  hci_add_sco(sco, conn->handle);
227  } else {
228  hci_proto_connect_cfm(sco, status);
229  hci_conn_del(sco);
230  }
231 }
232 
233 static void hci_conn_timeout(struct work_struct *work)
234 {
235  struct hci_conn *conn = container_of(work, struct hci_conn,
236  disc_work.work);
237  __u8 reason;
238 
239  BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
240 
241  if (atomic_read(&conn->refcnt))
242  return;
243 
244  switch (conn->state) {
245  case BT_CONNECT:
246  case BT_CONNECT2:
247  if (conn->out) {
248  if (conn->type == ACL_LINK)
249  hci_acl_create_connection_cancel(conn);
250  else if (conn->type == LE_LINK)
251  hci_le_create_connection_cancel(conn);
252  }
253  break;
254  case BT_CONFIG:
255  case BT_CONNECTED:
256  reason = hci_proto_disconn_ind(conn);
257  hci_acl_disconn(conn, reason);
258  break;
259  default:
260  conn->state = BT_CLOSED;
261  break;
262  }
263 }
264 
265 /* Enter sniff mode */
266 static void hci_conn_enter_sniff_mode(struct hci_conn *conn)
267 {
268  struct hci_dev *hdev = conn->hdev;
269 
270  BT_DBG("hcon %p mode %d", conn, conn->mode);
271 
272  if (test_bit(HCI_RAW, &hdev->flags))
273  return;
274 
275  if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
276  return;
277 
278  if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
279  return;
280 
281  if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
282  struct hci_cp_sniff_subrate cp;
283  cp.handle = cpu_to_le16(conn->handle);
284  cp.max_latency = __constant_cpu_to_le16(0);
285  cp.min_remote_timeout = __constant_cpu_to_le16(0);
286  cp.min_local_timeout = __constant_cpu_to_le16(0);
287  hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
288  }
289 
291  struct hci_cp_sniff_mode cp;
292  cp.handle = cpu_to_le16(conn->handle);
293  cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
294  cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
295  cp.attempt = __constant_cpu_to_le16(4);
296  cp.timeout = __constant_cpu_to_le16(1);
297  hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
298  }
299 }
300 
301 static void hci_conn_idle(unsigned long arg)
302 {
303  struct hci_conn *conn = (void *) arg;
304 
305  BT_DBG("hcon %p mode %d", conn, conn->mode);
306 
307  hci_conn_enter_sniff_mode(conn);
308 }
309 
310 static void hci_conn_auto_accept(unsigned long arg)
311 {
312  struct hci_conn *conn = (void *) arg;
313  struct hci_dev *hdev = conn->hdev;
314 
315  hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
316  &conn->dst);
317 }
318 
319 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
320 {
321  struct hci_conn *conn;
322 
323  BT_DBG("%s dst %s", hdev->name, batostr(dst));
324 
325  conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
326  if (!conn)
327  return NULL;
328 
329  bacpy(&conn->dst, dst);
330  conn->hdev = hdev;
331  conn->type = type;
332  conn->mode = HCI_CM_ACTIVE;
333  conn->state = BT_OPEN;
335  conn->io_capability = hdev->io_capability;
336  conn->remote_auth = 0xff;
337  conn->key_type = 0xff;
338 
341 
342  switch (type) {
343  case ACL_LINK:
344  conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
345  break;
346  case SCO_LINK:
347  if (lmp_esco_capable(hdev))
348  conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
349  (hdev->esco_type & EDR_ESCO_MASK);
350  else
351  conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
352  break;
353  case ESCO_LINK:
354  conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
355  break;
356  }
357 
358  skb_queue_head_init(&conn->data_q);
359 
360  INIT_LIST_HEAD(&conn->chan_list);
361 
362  INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
363  setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
364  setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
365  (unsigned long) conn);
366 
367  atomic_set(&conn->refcnt, 0);
368 
369  hci_dev_hold(hdev);
370 
371  hci_conn_hash_add(hdev, conn);
372  if (hdev->notify)
373  hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
374 
375  atomic_set(&conn->devref, 0);
376 
377  hci_conn_init_sysfs(conn);
378 
379  return conn;
380 }
381 
382 int hci_conn_del(struct hci_conn *conn)
383 {
384  struct hci_dev *hdev = conn->hdev;
385 
386  BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
387 
388  del_timer(&conn->idle_timer);
389 
391 
393 
394  if (conn->type == ACL_LINK) {
395  struct hci_conn *sco = conn->link;
396  if (sco)
397  sco->link = NULL;
398 
399  /* Unacked frames */
400  hdev->acl_cnt += conn->sent;
401  } else if (conn->type == LE_LINK) {
402  if (hdev->le_pkts)
403  hdev->le_cnt += conn->sent;
404  else
405  hdev->acl_cnt += conn->sent;
406  } else {
407  struct hci_conn *acl = conn->link;
408  if (acl) {
409  acl->link = NULL;
410  hci_conn_put(acl);
411  }
412  }
413 
414  hci_chan_list_flush(conn);
415 
416  if (conn->amp_mgr)
417  amp_mgr_put(conn->amp_mgr);
418 
419  hci_conn_hash_del(hdev, conn);
420  if (hdev->notify)
421  hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
422 
423  skb_queue_purge(&conn->data_q);
424 
425  hci_conn_put_device(conn);
426 
427  hci_dev_put(hdev);
428 
429  if (conn->handle == 0)
430  kfree(conn);
431 
432  return 0;
433 }
434 
435 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
436 {
437  int use_src = bacmp(src, BDADDR_ANY);
438  struct hci_dev *hdev = NULL, *d;
439 
440  BT_DBG("%s -> %s", batostr(src), batostr(dst));
441 
443 
445  if (!test_bit(HCI_UP, &d->flags) ||
446  test_bit(HCI_RAW, &d->flags) ||
447  d->dev_type != HCI_BREDR)
448  continue;
449 
450  /* Simple routing:
451  * No source address - find interface with bdaddr != dst
452  * Source address - find interface with bdaddr == src
453  */
454 
455  if (use_src) {
456  if (!bacmp(&d->bdaddr, src)) {
457  hdev = d; break;
458  }
459  } else {
460  if (bacmp(&d->bdaddr, dst)) {
461  hdev = d; break;
462  }
463  }
464  }
465 
466  if (hdev)
467  hdev = hci_dev_hold(hdev);
468 
470  return hdev;
471 }
473 
474 static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
476 {
477  struct hci_conn *le;
478 
479  le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
480  if (!le) {
481  le = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
482  if (le)
483  return ERR_PTR(-EBUSY);
484 
485  le = hci_conn_add(hdev, LE_LINK, dst);
486  if (!le)
487  return ERR_PTR(-ENOMEM);
488 
489  le->dst_type = bdaddr_to_le(dst_type);
490  hci_le_create_connection(le);
491  }
492 
494  le->auth_type = auth_type;
495 
496  hci_conn_hold(le);
497 
498  return le;
499 }
500 
501 static struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
502  u8 sec_level, u8 auth_type)
503 {
504  struct hci_conn *acl;
505 
506  acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
507  if (!acl) {
508  acl = hci_conn_add(hdev, ACL_LINK, dst);
509  if (!acl)
510  return ERR_PTR(-ENOMEM);
511  }
512 
513  hci_conn_hold(acl);
514 
515  if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
516  acl->sec_level = BT_SECURITY_LOW;
518  acl->auth_type = auth_type;
519  hci_acl_create_connection(acl);
520  }
521 
522  return acl;
523 }
524 
525 static struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type,
526  bdaddr_t *dst, u8 sec_level, u8 auth_type)
527 {
528  struct hci_conn *acl;
529  struct hci_conn *sco;
530 
531  acl = hci_connect_acl(hdev, dst, sec_level, auth_type);
532  if (IS_ERR(acl))
533  return acl;
534 
535  sco = hci_conn_hash_lookup_ba(hdev, type, dst);
536  if (!sco) {
537  sco = hci_conn_add(hdev, type, dst);
538  if (!sco) {
539  hci_conn_put(acl);
540  return ERR_PTR(-ENOMEM);
541  }
542  }
543 
544  acl->link = sco;
545  sco->link = acl;
546 
547  hci_conn_hold(sco);
548 
549  if (acl->state == BT_CONNECTED &&
550  (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
553 
555  /* defer SCO setup until mode change completed */
557  return sco;
558  }
559 
560  hci_sco_setup(acl, 0x00);
561  }
562 
563  return sco;
564 }
565 
566 /* Create SCO, ACL or LE connection. */
567 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
568  __u8 dst_type, __u8 sec_level, __u8 auth_type)
569 {
570  BT_DBG("%s dst %s type 0x%x", hdev->name, batostr(dst), type);
571 
572  switch (type) {
573  case LE_LINK:
574  return hci_connect_le(hdev, dst, dst_type, sec_level, auth_type);
575  case ACL_LINK:
576  return hci_connect_acl(hdev, dst, sec_level, auth_type);
577  case SCO_LINK:
578  case ESCO_LINK:
579  return hci_connect_sco(hdev, type, dst, sec_level, auth_type);
580  }
581 
582  return ERR_PTR(-EINVAL);
583 }
584 
585 /* Check link security requirement */
587 {
588  BT_DBG("hcon %p", conn);
589 
590  if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
591  return 0;
592 
593  return 1;
594 }
595 
596 /* Authenticate remote device */
597 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
598 {
599  BT_DBG("hcon %p", conn);
600 
601  if (conn->pending_sec_level > sec_level)
602  sec_level = conn->pending_sec_level;
603 
604  if (sec_level > conn->sec_level)
606  else if (conn->link_mode & HCI_LM_AUTH)
607  return 1;
608 
609  /* Make sure we preserve an existing MITM requirement*/
610  auth_type |= (conn->auth_type & 0x01);
611 
612  conn->auth_type = auth_type;
613 
614  if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
615  struct hci_cp_auth_requested cp;
616 
617  /* encrypt must be pending if auth is also pending */
619 
620  cp.handle = cpu_to_le16(conn->handle);
622  sizeof(cp), &cp);
623  if (conn->key_type != 0xff)
625  }
626 
627  return 0;
628 }
629 
630 /* Encrypt the the link */
631 static void hci_conn_encrypt(struct hci_conn *conn)
632 {
633  BT_DBG("hcon %p", conn);
634 
637  cp.handle = cpu_to_le16(conn->handle);
638  cp.encrypt = 0x01;
640  &cp);
641  }
642 }
643 
644 /* Enable security */
645 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
646 {
647  BT_DBG("hcon %p", conn);
648 
649  if (conn->type == LE_LINK)
650  return smp_conn_security(conn, sec_level);
651 
652  /* For sdp we don't need the link key. */
653  if (sec_level == BT_SECURITY_SDP)
654  return 1;
655 
656  /* For non 2.1 devices and low security level we don't need the link
657  key. */
658  if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
659  return 1;
660 
661  /* For other security levels we need the link key. */
662  if (!(conn->link_mode & HCI_LM_AUTH))
663  goto auth;
664 
665  /* An authenticated combination key has sufficient security for any
666  security level. */
667  if (conn->key_type == HCI_LK_AUTH_COMBINATION)
668  goto encrypt;
669 
670  /* An unauthenticated combination key has sufficient security for
671  security level 1 and 2. */
672  if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
673  (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
674  goto encrypt;
675 
676  /* A combination key has always sufficient security for the security
677  levels 1 or 2. High security level requires the combination key
678  is generated using maximum PIN code length (16).
679  For pre 2.1 units. */
680  if (conn->key_type == HCI_LK_COMBINATION &&
681  (sec_level != BT_SECURITY_HIGH || conn->pin_length == 16))
682  goto encrypt;
683 
684 auth:
685  if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
686  return 0;
687 
688  if (!hci_conn_auth(conn, sec_level, auth_type))
689  return 0;
690 
691 encrypt:
692  if (conn->link_mode & HCI_LM_ENCRYPT)
693  return 1;
694 
695  hci_conn_encrypt(conn);
696  return 0;
697 }
699 
700 /* Check secure link requirement */
701 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
702 {
703  BT_DBG("hcon %p", conn);
704 
705  if (sec_level != BT_SECURITY_HIGH)
706  return 1; /* Accept if non-secure is required */
707 
708  if (conn->sec_level == BT_SECURITY_HIGH)
709  return 1;
710 
711  return 0; /* Reject not secure link */
712 }
714 
715 /* Change link key */
717 {
718  BT_DBG("hcon %p", conn);
719 
720  if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
721  struct hci_cp_change_conn_link_key cp;
722  cp.handle = cpu_to_le16(conn->handle);
724  sizeof(cp), &cp);
725  }
726 
727  return 0;
728 }
729 
730 /* Switch role */
732 {
733  BT_DBG("hcon %p", conn);
734 
735  if (!role && conn->link_mode & HCI_LM_MASTER)
736  return 1;
737 
739  struct hci_cp_switch_role cp;
740  bacpy(&cp.bdaddr, &conn->dst);
741  cp.role = role;
742  hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
743  }
744 
745  return 0;
746 }
748 
749 /* Enter active mode */
750 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
751 {
752  struct hci_dev *hdev = conn->hdev;
753 
754  BT_DBG("hcon %p mode %d", conn, conn->mode);
755 
756  if (test_bit(HCI_RAW, &hdev->flags))
757  return;
758 
759  if (conn->mode != HCI_CM_SNIFF)
760  goto timer;
761 
762  if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
763  goto timer;
764 
766  struct hci_cp_exit_sniff_mode cp;
767  cp.handle = cpu_to_le16(conn->handle);
768  hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
769  }
770 
771 timer:
772  if (hdev->idle_timeout > 0)
773  mod_timer(&conn->idle_timer,
775 }
776 
777 /* Drop all connection on the device */
778 void hci_conn_hash_flush(struct hci_dev *hdev)
779 {
780  struct hci_conn_hash *h = &hdev->conn_hash;
781  struct hci_conn *c, *n;
782 
783  BT_DBG("hdev %s", hdev->name);
784 
785  list_for_each_entry_safe(c, n, &h->list, list) {
786  c->state = BT_CLOSED;
787 
788  hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
789  hci_conn_del(c);
790  }
791 }
792 
793 /* Check pending connect attempts */
794 void hci_conn_check_pending(struct hci_dev *hdev)
795 {
796  struct hci_conn *conn;
797 
798  BT_DBG("hdev %s", hdev->name);
799 
800  hci_dev_lock(hdev);
801 
802  conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
803  if (conn)
804  hci_acl_create_connection(conn);
805 
806  hci_dev_unlock(hdev);
807 }
808 
809 void hci_conn_hold_device(struct hci_conn *conn)
810 {
811  atomic_inc(&conn->devref);
812 }
814 
815 void hci_conn_put_device(struct hci_conn *conn)
816 {
817  if (atomic_dec_and_test(&conn->devref))
818  hci_conn_del_sysfs(conn);
819 }
821 
822 int hci_get_conn_list(void __user *arg)
823 {
824  struct hci_conn *c;
825  struct hci_conn_list_req req, *cl;
826  struct hci_conn_info *ci;
827  struct hci_dev *hdev;
828  int n = 0, size, err;
829 
830  if (copy_from_user(&req, arg, sizeof(req)))
831  return -EFAULT;
832 
833  if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
834  return -EINVAL;
835 
836  size = sizeof(req) + req.conn_num * sizeof(*ci);
837 
838  cl = kmalloc(size, GFP_KERNEL);
839  if (!cl)
840  return -ENOMEM;
841 
842  hdev = hci_dev_get(req.dev_id);
843  if (!hdev) {
844  kfree(cl);
845  return -ENODEV;
846  }
847 
848  ci = cl->conn_info;
849 
850  hci_dev_lock(hdev);
851  list_for_each_entry(c, &hdev->conn_hash.list, list) {
852  bacpy(&(ci + n)->bdaddr, &c->dst);
853  (ci + n)->handle = c->handle;
854  (ci + n)->type = c->type;
855  (ci + n)->out = c->out;
856  (ci + n)->state = c->state;
857  (ci + n)->link_mode = c->link_mode;
858  if (++n >= req.conn_num)
859  break;
860  }
861  hci_dev_unlock(hdev);
862 
863  cl->dev_id = hdev->id;
864  cl->conn_num = n;
865  size = sizeof(req) + n * sizeof(*ci);
866 
867  hci_dev_put(hdev);
868 
869  err = copy_to_user(arg, cl, size);
870  kfree(cl);
871 
872  return err ? -EFAULT : 0;
873 }
874 
875 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
876 {
877  struct hci_conn_info_req req;
878  struct hci_conn_info ci;
879  struct hci_conn *conn;
880  char __user *ptr = arg + sizeof(req);
881 
882  if (copy_from_user(&req, arg, sizeof(req)))
883  return -EFAULT;
884 
885  hci_dev_lock(hdev);
886  conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
887  if (conn) {
888  bacpy(&ci.bdaddr, &conn->dst);
889  ci.handle = conn->handle;
890  ci.type = conn->type;
891  ci.out = conn->out;
892  ci.state = conn->state;
893  ci.link_mode = conn->link_mode;
894  }
895  hci_dev_unlock(hdev);
896 
897  if (!conn)
898  return -ENOENT;
899 
900  return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
901 }
902 
903 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
904 {
905  struct hci_auth_info_req req;
906  struct hci_conn *conn;
907 
908  if (copy_from_user(&req, arg, sizeof(req)))
909  return -EFAULT;
910 
911  hci_dev_lock(hdev);
912  conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
913  if (conn)
914  req.type = conn->auth_type;
915  hci_dev_unlock(hdev);
916 
917  if (!conn)
918  return -ENOENT;
919 
920  return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
921 }
922 
923 struct hci_chan *hci_chan_create(struct hci_conn *conn)
924 {
925  struct hci_dev *hdev = conn->hdev;
926  struct hci_chan *chan;
927 
928  BT_DBG("%s hcon %p", hdev->name, conn);
929 
930  chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
931  if (!chan)
932  return NULL;
933 
934  chan->conn = conn;
935  skb_queue_head_init(&chan->data_q);
936 
937  list_add_rcu(&chan->list, &conn->chan_list);
938 
939  return chan;
940 }
941 
943 {
944  struct hci_conn *conn = chan->conn;
945  struct hci_dev *hdev = conn->hdev;
946 
947  BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
948 
949  list_del_rcu(&chan->list);
950 
951  synchronize_rcu();
952 
953  skb_queue_purge(&chan->data_q);
954  kfree(chan);
955 }
956 
957 void hci_chan_list_flush(struct hci_conn *conn)
958 {
959  struct hci_chan *chan, *n;
960 
961  BT_DBG("hcon %p", conn);
962 
963  list_for_each_entry_safe(chan, n, &conn->chan_list, list)
964  hci_chan_del(chan);
965 }