2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
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;
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.
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.
25 /* Bluetooth HCI connection handling. */
27 #include <linux/export.h>
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
40 static const struct sco_param sco_param_cvsd[] = {
41 { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a }, /* S3 */
42 { EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007 }, /* S2 */
43 { EDR_ESCO_MASK | ESCO_EV3, 0x0007 }, /* S1 */
44 { EDR_ESCO_MASK | ESCO_HV3, 0xffff }, /* D1 */
45 { EDR_ESCO_MASK | ESCO_HV1, 0xffff }, /* D0 */
48 static const struct sco_param sco_param_wideband[] = {
49 { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d }, /* T2 */
50 { EDR_ESCO_MASK | ESCO_EV3, 0x0008 }, /* T1 */
53 static void hci_le_create_connection_cancel(struct hci_conn *conn)
55 hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
58 static void hci_acl_create_connection(struct hci_conn *conn)
60 struct hci_dev *hdev = conn->hdev;
61 struct inquiry_entry *ie;
62 struct hci_cp_create_conn cp;
64 BT_DBG("hcon %p", conn);
66 conn->state = BT_CONNECT;
69 conn->link_mode = HCI_LM_MASTER;
73 conn->link_policy = hdev->link_policy;
75 memset(&cp, 0, sizeof(cp));
76 bacpy(&cp.bdaddr, &conn->dst);
77 cp.pscan_rep_mode = 0x02;
79 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
81 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
82 cp.pscan_rep_mode = ie->data.pscan_rep_mode;
83 cp.pscan_mode = ie->data.pscan_mode;
84 cp.clock_offset = ie->data.clock_offset |
85 __constant_cpu_to_le16(0x8000);
88 memcpy(conn->dev_class, ie->data.dev_class, 3);
89 if (ie->data.ssp_mode > 0)
90 set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
93 cp.pkt_type = cpu_to_le16(conn->pkt_type);
94 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
95 cp.role_switch = 0x01;
97 cp.role_switch = 0x00;
99 hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
102 static void hci_acl_create_connection_cancel(struct hci_conn *conn)
104 struct hci_cp_create_conn_cancel cp;
106 BT_DBG("hcon %p", conn);
108 if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
111 bacpy(&cp.bdaddr, &conn->dst);
112 hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
115 static void hci_reject_sco(struct hci_conn *conn)
117 struct hci_cp_reject_sync_conn_req cp;
119 cp.reason = HCI_ERROR_REMOTE_USER_TERM;
120 bacpy(&cp.bdaddr, &conn->dst);
122 hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);
125 void hci_disconnect(struct hci_conn *conn, __u8 reason)
127 struct hci_cp_disconnect cp;
129 BT_DBG("hcon %p", conn);
131 conn->state = BT_DISCONN;
133 cp.handle = cpu_to_le16(conn->handle);
135 hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
138 static void hci_amp_disconn(struct hci_conn *conn, __u8 reason)
140 struct hci_cp_disconn_phy_link cp;
142 BT_DBG("hcon %p", conn);
144 conn->state = BT_DISCONN;
146 cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
148 hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
152 static void hci_add_sco(struct hci_conn *conn, __u16 handle)
154 struct hci_dev *hdev = conn->hdev;
155 struct hci_cp_add_sco cp;
157 BT_DBG("hcon %p", conn);
159 conn->state = BT_CONNECT;
164 cp.handle = cpu_to_le16(handle);
165 cp.pkt_type = cpu_to_le16(conn->pkt_type);
167 hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
170 bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
172 struct hci_dev *hdev = conn->hdev;
173 struct hci_cp_setup_sync_conn cp;
174 const struct sco_param *param;
176 BT_DBG("hcon %p", conn);
178 conn->state = BT_CONNECT;
183 cp.handle = cpu_to_le16(handle);
185 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
186 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
187 cp.voice_setting = cpu_to_le16(conn->setting);
189 switch (conn->setting & SCO_AIRMODE_MASK) {
190 case SCO_AIRMODE_TRANSP:
191 if (conn->attempt > ARRAY_SIZE(sco_param_wideband))
193 cp.retrans_effort = 0x02;
194 param = &sco_param_wideband[conn->attempt - 1];
196 case SCO_AIRMODE_CVSD:
197 if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
199 cp.retrans_effort = 0x01;
200 param = &sco_param_cvsd[conn->attempt - 1];
206 cp.pkt_type = __cpu_to_le16(param->pkt_type);
207 cp.max_latency = __cpu_to_le16(param->max_latency);
209 if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
215 void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
216 u16 latency, u16 to_multiplier)
218 struct hci_cp_le_conn_update cp;
219 struct hci_dev *hdev = conn->hdev;
221 memset(&cp, 0, sizeof(cp));
223 cp.handle = cpu_to_le16(conn->handle);
224 cp.conn_interval_min = cpu_to_le16(min);
225 cp.conn_interval_max = cpu_to_le16(max);
226 cp.conn_latency = cpu_to_le16(latency);
227 cp.supervision_timeout = cpu_to_le16(to_multiplier);
228 cp.min_ce_len = __constant_cpu_to_le16(0x0000);
229 cp.max_ce_len = __constant_cpu_to_le16(0x0000);
231 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
234 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
237 struct hci_dev *hdev = conn->hdev;
238 struct hci_cp_le_start_enc cp;
240 BT_DBG("hcon %p", conn);
242 memset(&cp, 0, sizeof(cp));
244 cp.handle = cpu_to_le16(conn->handle);
245 memcpy(cp.ltk, ltk, sizeof(cp.ltk));
247 memcpy(cp.rand, rand, sizeof(cp.rand));
249 hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
252 /* Device _must_ be locked */
253 void hci_sco_setup(struct hci_conn *conn, __u8 status)
255 struct hci_conn *sco = conn->link;
260 BT_DBG("hcon %p", conn);
263 if (lmp_esco_capable(conn->hdev))
264 hci_setup_sync(sco, conn->handle);
266 hci_add_sco(sco, conn->handle);
268 hci_proto_connect_cfm(sco, status);
273 static void hci_conn_disconnect(struct hci_conn *conn)
275 __u8 reason = hci_proto_disconn_ind(conn);
277 switch (conn->type) {
279 hci_amp_disconn(conn, reason);
282 hci_disconnect(conn, reason);
287 static void hci_conn_timeout(struct work_struct *work)
289 struct hci_conn *conn = container_of(work, struct hci_conn,
292 BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
294 if (atomic_read(&conn->refcnt))
297 switch (conn->state) {
301 if (conn->type == ACL_LINK)
302 hci_acl_create_connection_cancel(conn);
303 else if (conn->type == LE_LINK)
304 hci_le_create_connection_cancel(conn);
305 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
306 hci_reject_sco(conn);
311 hci_conn_disconnect(conn);
314 conn->state = BT_CLOSED;
319 /* Enter sniff mode */
320 static void hci_conn_idle(struct work_struct *work)
322 struct hci_conn *conn = container_of(work, struct hci_conn,
324 struct hci_dev *hdev = conn->hdev;
326 BT_DBG("hcon %p mode %d", conn, conn->mode);
328 if (test_bit(HCI_RAW, &hdev->flags))
331 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
334 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
337 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
338 struct hci_cp_sniff_subrate cp;
339 cp.handle = cpu_to_le16(conn->handle);
340 cp.max_latency = __constant_cpu_to_le16(0);
341 cp.min_remote_timeout = __constant_cpu_to_le16(0);
342 cp.min_local_timeout = __constant_cpu_to_le16(0);
343 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
346 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
347 struct hci_cp_sniff_mode cp;
348 cp.handle = cpu_to_le16(conn->handle);
349 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
350 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
351 cp.attempt = __constant_cpu_to_le16(4);
352 cp.timeout = __constant_cpu_to_le16(1);
353 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
357 static void hci_conn_auto_accept(struct work_struct *work)
359 struct hci_conn *conn = container_of(work, struct hci_conn,
360 auto_accept_work.work);
362 hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
366 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
368 struct hci_conn *conn;
370 BT_DBG("%s dst %pMR", hdev->name, dst);
372 conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
376 bacpy(&conn->dst, dst);
377 bacpy(&conn->src, &hdev->bdaddr);
380 conn->mode = HCI_CM_ACTIVE;
381 conn->state = BT_OPEN;
382 conn->auth_type = HCI_AT_GENERAL_BONDING;
383 conn->io_capability = hdev->io_capability;
384 conn->remote_auth = 0xff;
385 conn->key_type = 0xff;
387 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
388 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
392 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
395 if (lmp_esco_capable(hdev))
396 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
397 (hdev->esco_type & EDR_ESCO_MASK);
399 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
402 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
406 skb_queue_head_init(&conn->data_q);
408 INIT_LIST_HEAD(&conn->chan_list);
410 INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
411 INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
412 INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
414 atomic_set(&conn->refcnt, 0);
418 hci_conn_hash_add(hdev, conn);
420 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
422 hci_conn_init_sysfs(conn);
427 int hci_conn_del(struct hci_conn *conn)
429 struct hci_dev *hdev = conn->hdev;
431 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
433 cancel_delayed_work_sync(&conn->disc_work);
434 cancel_delayed_work_sync(&conn->auto_accept_work);
435 cancel_delayed_work_sync(&conn->idle_work);
437 if (conn->type == ACL_LINK) {
438 struct hci_conn *sco = conn->link;
443 hdev->acl_cnt += conn->sent;
444 } else if (conn->type == LE_LINK) {
446 hdev->le_cnt += conn->sent;
448 hdev->acl_cnt += conn->sent;
450 struct hci_conn *acl = conn->link;
457 hci_chan_list_flush(conn);
460 amp_mgr_put(conn->amp_mgr);
462 hci_conn_hash_del(hdev, conn);
464 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
466 skb_queue_purge(&conn->data_q);
468 hci_conn_del_sysfs(conn);
477 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
479 int use_src = bacmp(src, BDADDR_ANY);
480 struct hci_dev *hdev = NULL, *d;
482 BT_DBG("%pMR -> %pMR", src, dst);
484 read_lock(&hci_dev_list_lock);
486 list_for_each_entry(d, &hci_dev_list, list) {
487 if (!test_bit(HCI_UP, &d->flags) ||
488 test_bit(HCI_RAW, &d->flags) ||
489 test_bit(HCI_USER_CHANNEL, &d->dev_flags) ||
490 d->dev_type != HCI_BREDR)
494 * No source address - find interface with bdaddr != dst
495 * Source address - find interface with bdaddr == src
499 if (!bacmp(&d->bdaddr, src)) {
503 if (bacmp(&d->bdaddr, dst)) {
510 hdev = hci_dev_hold(hdev);
512 read_unlock(&hci_dev_list_lock);
515 EXPORT_SYMBOL(hci_get_route);
517 /* This function requires the caller holds hdev->lock */
518 void hci_le_conn_failed(struct hci_conn *conn, u8 status)
520 struct hci_dev *hdev = conn->hdev;
522 conn->state = BT_CLOSED;
524 mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type,
527 hci_proto_connect_cfm(conn, status);
531 /* Since we may have temporarily stopped the background scanning in
532 * favor of connection establishment, we should restart it.
534 hci_update_background_scan(hdev);
537 static void create_le_conn_complete(struct hci_dev *hdev, u8 status)
539 struct hci_conn *conn;
544 BT_ERR("HCI request failed to create LE connection: status 0x%2.2x",
549 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
553 hci_le_conn_failed(conn, status);
556 hci_dev_unlock(hdev);
559 static void hci_req_add_le_create_conn(struct hci_request *req,
560 struct hci_conn *conn)
562 struct hci_cp_le_create_conn cp;
563 struct hci_dev *hdev = conn->hdev;
566 memset(&cp, 0, sizeof(cp));
568 /* Update random address, but set require_privacy to false so
569 * that we never connect with an unresolvable address.
571 if (hci_update_random_address(req, false, &own_addr_type))
574 /* Save the address type used for this connnection attempt so we able
575 * to retrieve this information if we need it.
577 conn->src_type = own_addr_type;
579 cp.scan_interval = cpu_to_le16(hdev->le_scan_interval);
580 cp.scan_window = cpu_to_le16(hdev->le_scan_window);
581 bacpy(&cp.peer_addr, &conn->dst);
582 cp.peer_addr_type = conn->dst_type;
583 cp.own_address_type = own_addr_type;
584 cp.conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
585 cp.conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
586 cp.supervision_timeout = __constant_cpu_to_le16(0x002a);
587 cp.min_ce_len = __constant_cpu_to_le16(0x0000);
588 cp.max_ce_len = __constant_cpu_to_le16(0x0000);
590 hci_req_add(req, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
593 static void stop_scan_complete(struct hci_dev *hdev, u8 status)
595 struct hci_request req;
596 struct hci_conn *conn;
599 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
604 BT_DBG("HCI request failed to stop scanning: status 0x%2.2x",
608 hci_le_conn_failed(conn, status);
609 hci_dev_unlock(hdev);
613 /* Since we may have prematurely stopped discovery procedure, we should
614 * update discovery state.
616 cancel_delayed_work(&hdev->le_scan_disable);
617 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
619 hci_req_init(&req, hdev);
621 hci_req_add_le_create_conn(&req, conn);
623 err = hci_req_run(&req, create_le_conn_complete);
626 hci_le_conn_failed(conn, HCI_ERROR_MEMORY_EXCEEDED);
627 hci_dev_unlock(hdev);
632 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
633 u8 dst_type, u8 sec_level, u8 auth_type)
635 struct hci_conn_params *params;
636 struct hci_conn *conn;
638 struct hci_request req;
641 if (test_bit(HCI_ADVERTISING, &hdev->flags))
642 return ERR_PTR(-ENOTSUPP);
644 /* Some devices send ATT messages as soon as the physical link is
645 * established. To be able to handle these ATT messages, the user-
646 * space first establishes the connection and then starts the pairing
649 * So if a hci_conn object already exists for the following connection
650 * attempt, we simply update pending_sec_level and auth_type fields
651 * and return the object found.
653 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
655 conn->pending_sec_level = sec_level;
656 conn->auth_type = auth_type;
660 /* Since the controller supports only one LE connection attempt at a
661 * time, we return -EBUSY if there is any connection attempt running.
663 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
665 return ERR_PTR(-EBUSY);
667 /* When given an identity address with existing identity
668 * resolving key, the connection needs to be established
669 * to a resolvable random address.
671 * This uses the cached random resolvable address from
672 * a previous scan. When no cached address is available,
673 * try connecting to the identity address instead.
675 * Storing the resolvable random address is required here
676 * to handle connection failures. The address will later
677 * be resolved back into the original identity address
678 * from the connect request.
680 irk = hci_find_irk_by_addr(hdev, dst, dst_type);
681 if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
683 dst_type = ADDR_LE_DEV_RANDOM;
686 conn = hci_conn_add(hdev, LE_LINK, dst);
688 return ERR_PTR(-ENOMEM);
690 conn->dst_type = dst_type;
692 conn->state = BT_CONNECT;
694 conn->link_mode |= HCI_LM_MASTER;
695 conn->sec_level = BT_SECURITY_LOW;
696 conn->pending_sec_level = sec_level;
697 conn->auth_type = auth_type;
699 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
701 conn->le_conn_min_interval = params->conn_min_interval;
702 conn->le_conn_max_interval = params->conn_max_interval;
704 conn->le_conn_min_interval = hdev->le_conn_min_interval;
705 conn->le_conn_max_interval = hdev->le_conn_max_interval;
708 hci_req_init(&req, hdev);
710 /* If controller is scanning, we stop it since some controllers are
711 * not able to scan and connect at the same time.
713 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) {
714 hci_req_add_le_scan_disable(&req);
715 err = hci_req_run(&req, stop_scan_complete);
717 hci_req_add_le_create_conn(&req, conn);
718 err = hci_req_run(&req, create_le_conn_complete);
731 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
732 u8 sec_level, u8 auth_type)
734 struct hci_conn *acl;
736 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
737 return ERR_PTR(-ENOTSUPP);
739 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
741 acl = hci_conn_add(hdev, ACL_LINK, dst);
743 return ERR_PTR(-ENOMEM);
748 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
749 acl->sec_level = BT_SECURITY_LOW;
750 acl->pending_sec_level = sec_level;
751 acl->auth_type = auth_type;
752 hci_acl_create_connection(acl);
758 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
761 struct hci_conn *acl;
762 struct hci_conn *sco;
764 acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
768 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
770 sco = hci_conn_add(hdev, type, dst);
773 return ERR_PTR(-ENOMEM);
782 sco->setting = setting;
784 if (acl->state == BT_CONNECTED &&
785 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
786 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
787 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
789 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
790 /* defer SCO setup until mode change completed */
791 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
795 hci_sco_setup(acl, 0x00);
801 /* Check link security requirement */
802 int hci_conn_check_link_mode(struct hci_conn *conn)
804 BT_DBG("hcon %p", conn);
806 if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
812 /* Authenticate remote device */
813 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
815 BT_DBG("hcon %p", conn);
817 if (conn->pending_sec_level > sec_level)
818 sec_level = conn->pending_sec_level;
820 if (sec_level > conn->sec_level)
821 conn->pending_sec_level = sec_level;
822 else if (conn->link_mode & HCI_LM_AUTH)
825 /* Make sure we preserve an existing MITM requirement*/
826 auth_type |= (conn->auth_type & 0x01);
828 conn->auth_type = auth_type;
830 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
831 struct hci_cp_auth_requested cp;
833 /* encrypt must be pending if auth is also pending */
834 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
836 cp.handle = cpu_to_le16(conn->handle);
837 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
839 if (conn->key_type != 0xff)
840 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
846 /* Encrypt the the link */
847 static void hci_conn_encrypt(struct hci_conn *conn)
849 BT_DBG("hcon %p", conn);
851 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
852 struct hci_cp_set_conn_encrypt cp;
853 cp.handle = cpu_to_le16(conn->handle);
855 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
860 /* Enable security */
861 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
863 BT_DBG("hcon %p", conn);
865 if (conn->type == LE_LINK)
866 return smp_conn_security(conn, sec_level);
868 /* For sdp we don't need the link key. */
869 if (sec_level == BT_SECURITY_SDP)
872 /* For non 2.1 devices and low security level we don't need the link
874 if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
877 /* For other security levels we need the link key. */
878 if (!(conn->link_mode & HCI_LM_AUTH))
881 /* An authenticated FIPS approved combination key has sufficient
882 * security for security level 4. */
883 if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
884 sec_level == BT_SECURITY_FIPS)
887 /* An authenticated combination key has sufficient security for
889 if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
890 conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
891 sec_level == BT_SECURITY_HIGH)
894 /* An unauthenticated combination key has sufficient security for
895 security level 1 and 2. */
896 if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
897 conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
898 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
901 /* A combination key has always sufficient security for the security
902 levels 1 or 2. High security level requires the combination key
903 is generated using maximum PIN code length (16).
904 For pre 2.1 units. */
905 if (conn->key_type == HCI_LK_COMBINATION &&
906 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
907 conn->pin_length == 16))
911 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
914 if (!hci_conn_auth(conn, sec_level, auth_type))
918 if (conn->link_mode & HCI_LM_ENCRYPT)
921 hci_conn_encrypt(conn);
924 EXPORT_SYMBOL(hci_conn_security);
926 /* Check secure link requirement */
927 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
929 BT_DBG("hcon %p", conn);
931 /* Accept if non-secure or higher security level is required */
932 if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
935 /* Accept if secure or higher security level is already present */
936 if (conn->sec_level == BT_SECURITY_HIGH ||
937 conn->sec_level == BT_SECURITY_FIPS)
940 /* Reject not secure link */
943 EXPORT_SYMBOL(hci_conn_check_secure);
945 /* Change link key */
946 int hci_conn_change_link_key(struct hci_conn *conn)
948 BT_DBG("hcon %p", conn);
950 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
951 struct hci_cp_change_conn_link_key cp;
952 cp.handle = cpu_to_le16(conn->handle);
953 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
961 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
963 BT_DBG("hcon %p", conn);
965 if (!role && conn->link_mode & HCI_LM_MASTER)
968 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
969 struct hci_cp_switch_role cp;
970 bacpy(&cp.bdaddr, &conn->dst);
972 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
977 EXPORT_SYMBOL(hci_conn_switch_role);
979 /* Enter active mode */
980 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
982 struct hci_dev *hdev = conn->hdev;
984 BT_DBG("hcon %p mode %d", conn, conn->mode);
986 if (test_bit(HCI_RAW, &hdev->flags))
989 if (conn->mode != HCI_CM_SNIFF)
992 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
995 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
996 struct hci_cp_exit_sniff_mode cp;
997 cp.handle = cpu_to_le16(conn->handle);
998 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
1002 if (hdev->idle_timeout > 0)
1003 queue_delayed_work(hdev->workqueue, &conn->idle_work,
1004 msecs_to_jiffies(hdev->idle_timeout));
1007 /* Drop all connection on the device */
1008 void hci_conn_hash_flush(struct hci_dev *hdev)
1010 struct hci_conn_hash *h = &hdev->conn_hash;
1011 struct hci_conn *c, *n;
1013 BT_DBG("hdev %s", hdev->name);
1015 list_for_each_entry_safe(c, n, &h->list, list) {
1016 c->state = BT_CLOSED;
1018 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1023 /* Check pending connect attempts */
1024 void hci_conn_check_pending(struct hci_dev *hdev)
1026 struct hci_conn *conn;
1028 BT_DBG("hdev %s", hdev->name);
1032 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
1034 hci_acl_create_connection(conn);
1036 hci_dev_unlock(hdev);
1039 int hci_get_conn_list(void __user *arg)
1042 struct hci_conn_list_req req, *cl;
1043 struct hci_conn_info *ci;
1044 struct hci_dev *hdev;
1045 int n = 0, size, err;
1047 if (copy_from_user(&req, arg, sizeof(req)))
1050 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
1053 size = sizeof(req) + req.conn_num * sizeof(*ci);
1055 cl = kmalloc(size, GFP_KERNEL);
1059 hdev = hci_dev_get(req.dev_id);
1068 list_for_each_entry(c, &hdev->conn_hash.list, list) {
1069 bacpy(&(ci + n)->bdaddr, &c->dst);
1070 (ci + n)->handle = c->handle;
1071 (ci + n)->type = c->type;
1072 (ci + n)->out = c->out;
1073 (ci + n)->state = c->state;
1074 (ci + n)->link_mode = c->link_mode;
1075 if (++n >= req.conn_num)
1078 hci_dev_unlock(hdev);
1080 cl->dev_id = hdev->id;
1082 size = sizeof(req) + n * sizeof(*ci);
1086 err = copy_to_user(arg, cl, size);
1089 return err ? -EFAULT : 0;
1092 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
1094 struct hci_conn_info_req req;
1095 struct hci_conn_info ci;
1096 struct hci_conn *conn;
1097 char __user *ptr = arg + sizeof(req);
1099 if (copy_from_user(&req, arg, sizeof(req)))
1103 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
1105 bacpy(&ci.bdaddr, &conn->dst);
1106 ci.handle = conn->handle;
1107 ci.type = conn->type;
1109 ci.state = conn->state;
1110 ci.link_mode = conn->link_mode;
1112 hci_dev_unlock(hdev);
1117 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
1120 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
1122 struct hci_auth_info_req req;
1123 struct hci_conn *conn;
1125 if (copy_from_user(&req, arg, sizeof(req)))
1129 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
1131 req.type = conn->auth_type;
1132 hci_dev_unlock(hdev);
1137 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
1140 struct hci_chan *hci_chan_create(struct hci_conn *conn)
1142 struct hci_dev *hdev = conn->hdev;
1143 struct hci_chan *chan;
1145 BT_DBG("%s hcon %p", hdev->name, conn);
1147 chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
1152 skb_queue_head_init(&chan->data_q);
1153 chan->state = BT_CONNECTED;
1155 list_add_rcu(&chan->list, &conn->chan_list);
1160 void hci_chan_del(struct hci_chan *chan)
1162 struct hci_conn *conn = chan->conn;
1163 struct hci_dev *hdev = conn->hdev;
1165 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
1167 list_del_rcu(&chan->list);
1171 hci_conn_drop(conn);
1173 skb_queue_purge(&chan->data_q);
1177 void hci_chan_list_flush(struct hci_conn *conn)
1179 struct hci_chan *chan, *n;
1181 BT_DBG("hcon %p", conn);
1183 list_for_each_entry_safe(chan, n, &conn->chan_list, list)
1187 static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
1190 struct hci_chan *hchan;
1192 list_for_each_entry(hchan, &hcon->chan_list, list) {
1193 if (hchan->handle == handle)
1200 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1202 struct hci_conn_hash *h = &hdev->conn_hash;
1203 struct hci_conn *hcon;
1204 struct hci_chan *hchan = NULL;
1208 list_for_each_entry_rcu(hcon, &h->list, list) {
1209 hchan = __hci_chan_lookup_handle(hcon, handle);