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, __le64 rand,
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);
247 memcpy(cp.ltk, ltk, sizeof(cp.ltk));
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 static void le_conn_timeout(struct work_struct *work)
368 struct hci_conn *conn = container_of(work, struct hci_conn,
369 le_conn_timeout.work);
373 hci_le_create_connection_cancel(conn);
376 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
378 struct hci_conn *conn;
380 BT_DBG("%s dst %pMR", hdev->name, dst);
382 conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
386 bacpy(&conn->dst, dst);
387 bacpy(&conn->src, &hdev->bdaddr);
390 conn->mode = HCI_CM_ACTIVE;
391 conn->state = BT_OPEN;
392 conn->auth_type = HCI_AT_GENERAL_BONDING;
393 conn->io_capability = hdev->io_capability;
394 conn->remote_auth = 0xff;
395 conn->key_type = 0xff;
397 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
398 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
402 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
405 if (lmp_esco_capable(hdev))
406 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
407 (hdev->esco_type & EDR_ESCO_MASK);
409 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
412 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
416 skb_queue_head_init(&conn->data_q);
418 INIT_LIST_HEAD(&conn->chan_list);
420 INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
421 INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
422 INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
423 INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout);
425 atomic_set(&conn->refcnt, 0);
429 hci_conn_hash_add(hdev, conn);
431 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
433 hci_conn_init_sysfs(conn);
438 int hci_conn_del(struct hci_conn *conn)
440 struct hci_dev *hdev = conn->hdev;
442 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
444 cancel_delayed_work_sync(&conn->disc_work);
445 cancel_delayed_work_sync(&conn->auto_accept_work);
446 cancel_delayed_work_sync(&conn->idle_work);
448 if (conn->type == ACL_LINK) {
449 struct hci_conn *sco = conn->link;
454 hdev->acl_cnt += conn->sent;
455 } else if (conn->type == LE_LINK) {
456 cancel_delayed_work_sync(&conn->le_conn_timeout);
459 hdev->le_cnt += conn->sent;
461 hdev->acl_cnt += conn->sent;
463 struct hci_conn *acl = conn->link;
470 hci_chan_list_flush(conn);
473 amp_mgr_put(conn->amp_mgr);
475 hci_conn_hash_del(hdev, conn);
477 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
479 skb_queue_purge(&conn->data_q);
481 hci_conn_del_sysfs(conn);
490 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
492 int use_src = bacmp(src, BDADDR_ANY);
493 struct hci_dev *hdev = NULL, *d;
495 BT_DBG("%pMR -> %pMR", src, dst);
497 read_lock(&hci_dev_list_lock);
499 list_for_each_entry(d, &hci_dev_list, list) {
500 if (!test_bit(HCI_UP, &d->flags) ||
501 test_bit(HCI_RAW, &d->flags) ||
502 test_bit(HCI_USER_CHANNEL, &d->dev_flags) ||
503 d->dev_type != HCI_BREDR)
507 * No source address - find interface with bdaddr != dst
508 * Source address - find interface with bdaddr == src
512 if (!bacmp(&d->bdaddr, src)) {
516 if (bacmp(&d->bdaddr, dst)) {
523 hdev = hci_dev_hold(hdev);
525 read_unlock(&hci_dev_list_lock);
528 EXPORT_SYMBOL(hci_get_route);
530 /* This function requires the caller holds hdev->lock */
531 void hci_le_conn_failed(struct hci_conn *conn, u8 status)
533 struct hci_dev *hdev = conn->hdev;
535 conn->state = BT_CLOSED;
537 mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type,
540 hci_proto_connect_cfm(conn, status);
544 /* Since we may have temporarily stopped the background scanning in
545 * favor of connection establishment, we should restart it.
547 hci_update_background_scan(hdev);
550 static void create_le_conn_complete(struct hci_dev *hdev, u8 status)
552 struct hci_conn *conn;
557 BT_ERR("HCI request failed to create LE connection: status 0x%2.2x",
562 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
566 hci_le_conn_failed(conn, status);
569 hci_dev_unlock(hdev);
572 static void hci_req_add_le_create_conn(struct hci_request *req,
573 struct hci_conn *conn)
575 struct hci_cp_le_create_conn cp;
576 struct hci_dev *hdev = conn->hdev;
579 memset(&cp, 0, sizeof(cp));
581 /* Update random address, but set require_privacy to false so
582 * that we never connect with an unresolvable address.
584 if (hci_update_random_address(req, false, &own_addr_type))
587 /* Save the address type used for this connnection attempt so we able
588 * to retrieve this information if we need it.
590 conn->src_type = own_addr_type;
592 cp.scan_interval = cpu_to_le16(hdev->le_scan_interval);
593 cp.scan_window = cpu_to_le16(hdev->le_scan_window);
594 bacpy(&cp.peer_addr, &conn->dst);
595 cp.peer_addr_type = conn->dst_type;
596 cp.own_address_type = own_addr_type;
597 cp.conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
598 cp.conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
599 cp.supervision_timeout = __constant_cpu_to_le16(0x002a);
600 cp.min_ce_len = __constant_cpu_to_le16(0x0000);
601 cp.max_ce_len = __constant_cpu_to_le16(0x0000);
603 hci_req_add(req, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
605 conn->state = BT_CONNECT;
608 static void stop_scan_complete(struct hci_dev *hdev, u8 status)
610 struct hci_request req;
611 struct hci_conn *conn;
614 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
619 BT_DBG("HCI request failed to stop scanning: status 0x%2.2x",
623 hci_le_conn_failed(conn, status);
624 hci_dev_unlock(hdev);
628 /* Since we may have prematurely stopped discovery procedure, we should
629 * update discovery state.
631 cancel_delayed_work(&hdev->le_scan_disable);
632 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
634 hci_req_init(&req, hdev);
636 hci_req_add_le_create_conn(&req, conn);
638 err = hci_req_run(&req, create_le_conn_complete);
641 hci_le_conn_failed(conn, HCI_ERROR_MEMORY_EXCEEDED);
642 hci_dev_unlock(hdev);
647 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
648 u8 dst_type, u8 sec_level, u8 auth_type)
650 struct hci_conn_params *params;
651 struct hci_conn *conn;
653 struct hci_request req;
656 if (test_bit(HCI_ADVERTISING, &hdev->flags))
657 return ERR_PTR(-ENOTSUPP);
659 /* Some devices send ATT messages as soon as the physical link is
660 * established. To be able to handle these ATT messages, the user-
661 * space first establishes the connection and then starts the pairing
664 * So if a hci_conn object already exists for the following connection
665 * attempt, we simply update pending_sec_level and auth_type fields
666 * and return the object found.
668 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
670 conn->pending_sec_level = sec_level;
671 conn->auth_type = auth_type;
675 /* Since the controller supports only one LE connection attempt at a
676 * time, we return -EBUSY if there is any connection attempt running.
678 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
680 return ERR_PTR(-EBUSY);
682 /* When given an identity address with existing identity
683 * resolving key, the connection needs to be established
684 * to a resolvable random address.
686 * This uses the cached random resolvable address from
687 * a previous scan. When no cached address is available,
688 * try connecting to the identity address instead.
690 * Storing the resolvable random address is required here
691 * to handle connection failures. The address will later
692 * be resolved back into the original identity address
693 * from the connect request.
695 irk = hci_find_irk_by_addr(hdev, dst, dst_type);
696 if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
698 dst_type = ADDR_LE_DEV_RANDOM;
701 conn = hci_conn_add(hdev, LE_LINK, dst);
703 return ERR_PTR(-ENOMEM);
705 conn->dst_type = dst_type;
708 conn->link_mode |= HCI_LM_MASTER;
709 conn->sec_level = BT_SECURITY_LOW;
710 conn->pending_sec_level = sec_level;
711 conn->auth_type = auth_type;
713 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
715 conn->le_conn_min_interval = params->conn_min_interval;
716 conn->le_conn_max_interval = params->conn_max_interval;
718 conn->le_conn_min_interval = hdev->le_conn_min_interval;
719 conn->le_conn_max_interval = hdev->le_conn_max_interval;
722 hci_req_init(&req, hdev);
724 /* If controller is scanning, we stop it since some controllers are
725 * not able to scan and connect at the same time.
727 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags)) {
728 hci_req_add_le_scan_disable(&req);
729 err = hci_req_run(&req, stop_scan_complete);
731 hci_req_add_le_create_conn(&req, conn);
732 err = hci_req_run(&req, create_le_conn_complete);
745 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
746 u8 sec_level, u8 auth_type)
748 struct hci_conn *acl;
750 if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
751 return ERR_PTR(-ENOTSUPP);
753 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
755 acl = hci_conn_add(hdev, ACL_LINK, dst);
757 return ERR_PTR(-ENOMEM);
762 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
763 acl->sec_level = BT_SECURITY_LOW;
764 acl->pending_sec_level = sec_level;
765 acl->auth_type = auth_type;
766 hci_acl_create_connection(acl);
772 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
775 struct hci_conn *acl;
776 struct hci_conn *sco;
778 acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
782 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
784 sco = hci_conn_add(hdev, type, dst);
787 return ERR_PTR(-ENOMEM);
796 sco->setting = setting;
798 if (acl->state == BT_CONNECTED &&
799 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
800 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
801 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
803 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
804 /* defer SCO setup until mode change completed */
805 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
809 hci_sco_setup(acl, 0x00);
815 /* Check link security requirement */
816 int hci_conn_check_link_mode(struct hci_conn *conn)
818 BT_DBG("hcon %p", conn);
820 if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
826 /* Authenticate remote device */
827 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
829 BT_DBG("hcon %p", conn);
831 if (conn->pending_sec_level > sec_level)
832 sec_level = conn->pending_sec_level;
834 if (sec_level > conn->sec_level)
835 conn->pending_sec_level = sec_level;
836 else if (conn->link_mode & HCI_LM_AUTH)
839 /* Make sure we preserve an existing MITM requirement*/
840 auth_type |= (conn->auth_type & 0x01);
842 conn->auth_type = auth_type;
844 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
845 struct hci_cp_auth_requested cp;
847 /* encrypt must be pending if auth is also pending */
848 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
850 cp.handle = cpu_to_le16(conn->handle);
851 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
853 if (conn->key_type != 0xff)
854 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
860 /* Encrypt the the link */
861 static void hci_conn_encrypt(struct hci_conn *conn)
863 BT_DBG("hcon %p", conn);
865 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
866 struct hci_cp_set_conn_encrypt cp;
867 cp.handle = cpu_to_le16(conn->handle);
869 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
874 /* Enable security */
875 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
877 BT_DBG("hcon %p", conn);
879 if (conn->type == LE_LINK)
880 return smp_conn_security(conn, sec_level);
882 /* For sdp we don't need the link key. */
883 if (sec_level == BT_SECURITY_SDP)
886 /* For non 2.1 devices and low security level we don't need the link
888 if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
891 /* For other security levels we need the link key. */
892 if (!(conn->link_mode & HCI_LM_AUTH))
895 /* An authenticated FIPS approved combination key has sufficient
896 * security for security level 4. */
897 if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
898 sec_level == BT_SECURITY_FIPS)
901 /* An authenticated combination key has sufficient security for
903 if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
904 conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
905 sec_level == BT_SECURITY_HIGH)
908 /* An unauthenticated combination key has sufficient security for
909 security level 1 and 2. */
910 if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
911 conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
912 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
915 /* A combination key has always sufficient security for the security
916 levels 1 or 2. High security level requires the combination key
917 is generated using maximum PIN code length (16).
918 For pre 2.1 units. */
919 if (conn->key_type == HCI_LK_COMBINATION &&
920 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
921 conn->pin_length == 16))
925 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
928 if (!hci_conn_auth(conn, sec_level, auth_type))
932 if (conn->link_mode & HCI_LM_ENCRYPT)
935 hci_conn_encrypt(conn);
938 EXPORT_SYMBOL(hci_conn_security);
940 /* Check secure link requirement */
941 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
943 BT_DBG("hcon %p", conn);
945 /* Accept if non-secure or higher security level is required */
946 if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
949 /* Accept if secure or higher security level is already present */
950 if (conn->sec_level == BT_SECURITY_HIGH ||
951 conn->sec_level == BT_SECURITY_FIPS)
954 /* Reject not secure link */
957 EXPORT_SYMBOL(hci_conn_check_secure);
959 /* Change link key */
960 int hci_conn_change_link_key(struct hci_conn *conn)
962 BT_DBG("hcon %p", conn);
964 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
965 struct hci_cp_change_conn_link_key cp;
966 cp.handle = cpu_to_le16(conn->handle);
967 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
975 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
977 BT_DBG("hcon %p", conn);
979 if (!role && conn->link_mode & HCI_LM_MASTER)
982 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
983 struct hci_cp_switch_role cp;
984 bacpy(&cp.bdaddr, &conn->dst);
986 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
991 EXPORT_SYMBOL(hci_conn_switch_role);
993 /* Enter active mode */
994 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
996 struct hci_dev *hdev = conn->hdev;
998 BT_DBG("hcon %p mode %d", conn, conn->mode);
1000 if (test_bit(HCI_RAW, &hdev->flags))
1003 if (conn->mode != HCI_CM_SNIFF)
1006 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
1009 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
1010 struct hci_cp_exit_sniff_mode cp;
1011 cp.handle = cpu_to_le16(conn->handle);
1012 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
1016 if (hdev->idle_timeout > 0)
1017 queue_delayed_work(hdev->workqueue, &conn->idle_work,
1018 msecs_to_jiffies(hdev->idle_timeout));
1021 /* Drop all connection on the device */
1022 void hci_conn_hash_flush(struct hci_dev *hdev)
1024 struct hci_conn_hash *h = &hdev->conn_hash;
1025 struct hci_conn *c, *n;
1027 BT_DBG("hdev %s", hdev->name);
1029 list_for_each_entry_safe(c, n, &h->list, list) {
1030 c->state = BT_CLOSED;
1032 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1037 /* Check pending connect attempts */
1038 void hci_conn_check_pending(struct hci_dev *hdev)
1040 struct hci_conn *conn;
1042 BT_DBG("hdev %s", hdev->name);
1046 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
1048 hci_acl_create_connection(conn);
1050 hci_dev_unlock(hdev);
1053 int hci_get_conn_list(void __user *arg)
1056 struct hci_conn_list_req req, *cl;
1057 struct hci_conn_info *ci;
1058 struct hci_dev *hdev;
1059 int n = 0, size, err;
1061 if (copy_from_user(&req, arg, sizeof(req)))
1064 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
1067 size = sizeof(req) + req.conn_num * sizeof(*ci);
1069 cl = kmalloc(size, GFP_KERNEL);
1073 hdev = hci_dev_get(req.dev_id);
1082 list_for_each_entry(c, &hdev->conn_hash.list, list) {
1083 bacpy(&(ci + n)->bdaddr, &c->dst);
1084 (ci + n)->handle = c->handle;
1085 (ci + n)->type = c->type;
1086 (ci + n)->out = c->out;
1087 (ci + n)->state = c->state;
1088 (ci + n)->link_mode = c->link_mode;
1089 if (++n >= req.conn_num)
1092 hci_dev_unlock(hdev);
1094 cl->dev_id = hdev->id;
1096 size = sizeof(req) + n * sizeof(*ci);
1100 err = copy_to_user(arg, cl, size);
1103 return err ? -EFAULT : 0;
1106 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
1108 struct hci_conn_info_req req;
1109 struct hci_conn_info ci;
1110 struct hci_conn *conn;
1111 char __user *ptr = arg + sizeof(req);
1113 if (copy_from_user(&req, arg, sizeof(req)))
1117 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
1119 bacpy(&ci.bdaddr, &conn->dst);
1120 ci.handle = conn->handle;
1121 ci.type = conn->type;
1123 ci.state = conn->state;
1124 ci.link_mode = conn->link_mode;
1126 hci_dev_unlock(hdev);
1131 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
1134 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
1136 struct hci_auth_info_req req;
1137 struct hci_conn *conn;
1139 if (copy_from_user(&req, arg, sizeof(req)))
1143 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
1145 req.type = conn->auth_type;
1146 hci_dev_unlock(hdev);
1151 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
1154 struct hci_chan *hci_chan_create(struct hci_conn *conn)
1156 struct hci_dev *hdev = conn->hdev;
1157 struct hci_chan *chan;
1159 BT_DBG("%s hcon %p", hdev->name, conn);
1161 chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
1166 skb_queue_head_init(&chan->data_q);
1167 chan->state = BT_CONNECTED;
1169 list_add_rcu(&chan->list, &conn->chan_list);
1174 void hci_chan_del(struct hci_chan *chan)
1176 struct hci_conn *conn = chan->conn;
1177 struct hci_dev *hdev = conn->hdev;
1179 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
1181 list_del_rcu(&chan->list);
1185 hci_conn_drop(conn);
1187 skb_queue_purge(&chan->data_q);
1191 void hci_chan_list_flush(struct hci_conn *conn)
1193 struct hci_chan *chan, *n;
1195 BT_DBG("hcon %p", conn);
1197 list_for_each_entry_safe(chan, n, &conn->chan_list, list)
1201 static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
1204 struct hci_chan *hchan;
1206 list_for_each_entry(hchan, &hcon->chan_list, list) {
1207 if (hchan->handle == handle)
1214 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1216 struct hci_conn_hash *h = &hdev->conn_hash;
1217 struct hci_conn *hcon;
1218 struct hci_chan *hchan = NULL;
1222 list_for_each_entry_rcu(hcon, &h->list, list) {
1223 hchan = __hci_chan_lookup_handle(hcon, handle);