hci_conn.c 39.4 KB
Newer Older
1
/*
L
Linus Torvalds 已提交
2
   BlueZ - Bluetooth protocol stack for Linux
3
   Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
L
Linus Torvalds 已提交
4 5 6 7 8 9 10 11 12 13 14

   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 2 as
   published by the Free Software Foundation;

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 16 17
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
L
Linus Torvalds 已提交
18 19
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

20 21
   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
L
Linus Torvalds 已提交
22 23 24 25 26
   SOFTWARE IS DISCLAIMED.
*/

/* Bluetooth HCI connection handling. */

27
#include <linux/export.h>
28
#include <linux/debugfs.h>
L
Linus Torvalds 已提交
29 30 31

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
32
#include <net/bluetooth/l2cap.h>
L
Linus Torvalds 已提交
33

34
#include "hci_request.h"
35
#include "smp.h"
36 37
#include "a2mp.h"

38 39 40
struct sco_param {
	u16 pkt_type;
	u16 max_latency;
41
	u8  retrans_effort;
42 43
};

44
static const struct sco_param esco_param_cvsd[] = {
45 46 47 48 49
	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a,	0x01 }, /* S3 */
	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007,	0x01 }, /* S2 */
	{ EDR_ESCO_MASK | ESCO_EV3,   0x0007,	0x01 }, /* S1 */
	{ EDR_ESCO_MASK | ESCO_HV3,   0xffff,	0x01 }, /* D1 */
	{ EDR_ESCO_MASK | ESCO_HV1,   0xffff,	0x01 }, /* D0 */
50 51
};

52
static const struct sco_param sco_param_cvsd[] = {
53 54
	{ EDR_ESCO_MASK | ESCO_HV3,   0xffff,	0xff }, /* D1 */
	{ EDR_ESCO_MASK | ESCO_HV1,   0xffff,	0xff }, /* D0 */
55 56
};

57
static const struct sco_param esco_param_msbc[] = {
58 59
	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d,	0x02 }, /* T2 */
	{ EDR_ESCO_MASK | ESCO_EV3,   0x0008,	0x02 }, /* T1 */
60 61
};

62
static void hci_le_create_connection_cancel(struct hci_conn *conn)
V
Ville Tervo 已提交
63 64 65 66
{
	hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
}

67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
/* This function requires the caller holds hdev->lock */
static void hci_connect_le_scan_cleanup(struct hci_conn *conn)
{
	struct hci_conn_params *params;
	struct smp_irk *irk;
	bdaddr_t *bdaddr;
	u8 bdaddr_type;

	bdaddr = &conn->dst;
	bdaddr_type = conn->dst_type;

	/* Check if we need to convert to identity address */
	irk = hci_get_irk(conn->hdev, bdaddr, bdaddr_type);
	if (irk) {
		bdaddr = &irk->bdaddr;
		bdaddr_type = irk->addr_type;
	}

	params = hci_explicit_connect_lookup(conn->hdev, bdaddr, bdaddr_type);
	if (!params)
		return;

	/* The connection attempt was doing scan for new RPA, and is
	 * in scan phase. If params are not associated with any other
	 * autoconnect action, remove them completely. If they are, just unmark
	 * them as waiting for connection, by clearing explicit_connect field.
	 */
94
	if (params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
95
		hci_conn_params_del(conn->hdev, bdaddr, bdaddr_type);
96
	} else {
97
		params->explicit_connect = false;
98 99
		hci_update_background_scan(conn->hdev);
	}
100 101 102 103 104 105 106 107 108 109
}

/* This function requires the caller holds hdev->lock */
static void hci_connect_le_scan_remove(struct hci_conn *conn)
{
	hci_connect_le_scan_cleanup(conn);

	hci_conn_hash_del(conn->hdev, conn);
}

110
static void hci_acl_create_connection(struct hci_conn *conn)
L
Linus Torvalds 已提交
111 112 113 114 115
{
	struct hci_dev *hdev = conn->hdev;
	struct inquiry_entry *ie;
	struct hci_cp_create_conn cp;

116
	BT_DBG("hcon %p", conn);
L
Linus Torvalds 已提交
117 118

	conn->state = BT_CONNECT;
119
	conn->out = true;
120
	conn->role = HCI_ROLE_MASTER;
L
Linus Torvalds 已提交
121

122 123
	conn->attempt++;

124 125
	conn->link_policy = hdev->link_policy;

L
Linus Torvalds 已提交
126 127 128 129
	memset(&cp, 0, sizeof(cp));
	bacpy(&cp.bdaddr, &conn->dst);
	cp.pscan_rep_mode = 0x02;

A
Andrei Emeltchenko 已提交
130 131
	ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
	if (ie) {
132 133 134 135
		if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
			cp.pscan_rep_mode = ie->data.pscan_rep_mode;
			cp.pscan_mode     = ie->data.pscan_mode;
			cp.clock_offset   = ie->data.clock_offset |
136
					    cpu_to_le16(0x8000);
137 138
		}

L
Linus Torvalds 已提交
139
		memcpy(conn->dev_class, ie->data.dev_class, 3);
140 141
		if (ie->data.ssp_mode > 0)
			set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
L
Linus Torvalds 已提交
142 143
	}

144
	cp.pkt_type = cpu_to_le16(conn->pkt_type);
L
Linus Torvalds 已提交
145
	if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
146
		cp.role_switch = 0x01;
L
Linus Torvalds 已提交
147
	else
148
		cp.role_switch = 0x00;
149

150
	hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
L
Linus Torvalds 已提交
151 152
}

153
static void hci_acl_create_connection_cancel(struct hci_conn *conn)
154 155 156
{
	struct hci_cp_create_conn_cancel cp;

157
	BT_DBG("hcon %p", conn);
158

159
	if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
160 161 162
		return;

	bacpy(&cp.bdaddr, &conn->dst);
163
	hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
164 165
}

166 167 168 169
static void hci_reject_sco(struct hci_conn *conn)
{
	struct hci_cp_reject_sync_conn_req cp;

170
	cp.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
171 172 173 174 175
	bacpy(&cp.bdaddr, &conn->dst);

	hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);
}

176
int hci_disconnect(struct hci_conn *conn, __u8 reason)
L
Linus Torvalds 已提交
177 178 179
{
	struct hci_cp_disconnect cp;

180
	BT_DBG("hcon %p", conn);
L
Linus Torvalds 已提交
181

182 183 184 185 186 187 188
	/* When we are master of an established connection and it enters
	 * the disconnect timeout, then go ahead and try to read the
	 * current clock offset.  Processing of the result is done
	 * within the event handling and hci_clock_offset_evt function.
	 */
	if (conn->type == ACL_LINK && conn->role == HCI_ROLE_MASTER) {
		struct hci_dev *hdev = conn->hdev;
189
		struct hci_cp_read_clock_offset clkoff_cp;
190

191 192 193
		clkoff_cp.handle = cpu_to_le16(conn->handle);
		hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp),
			     &clkoff_cp);
194 195
	}

L
Linus Torvalds 已提交
196 197
	conn->state = BT_DISCONN;

198
	cp.handle = cpu_to_le16(conn->handle);
L
Linus Torvalds 已提交
199
	cp.reason = reason;
200
	return hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
L
Linus Torvalds 已提交
201 202
}

203
static void hci_amp_disconn(struct hci_conn *conn)
204 205 206 207 208 209 210 211
{
	struct hci_cp_disconn_phy_link cp;

	BT_DBG("hcon %p", conn);

	conn->state = BT_DISCONN;

	cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
212
	cp.reason = hci_proto_disconn_ind(conn);
213 214 215 216
	hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
		     sizeof(cp), &cp);
}

217
static void hci_add_sco(struct hci_conn *conn, __u16 handle)
L
Linus Torvalds 已提交
218 219 220 221
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_cp_add_sco cp;

222
	BT_DBG("hcon %p", conn);
L
Linus Torvalds 已提交
223 224

	conn->state = BT_CONNECT;
225
	conn->out = true;
L
Linus Torvalds 已提交
226

227 228
	conn->attempt++;

229
	cp.handle   = cpu_to_le16(handle);
230
	cp.pkt_type = cpu_to_le16(conn->pkt_type);
L
Linus Torvalds 已提交
231

232
	hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
L
Linus Torvalds 已提交
233 234
}

235
bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
236 237 238
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_cp_setup_sync_conn cp;
239
	const struct sco_param *param;
240

241
	BT_DBG("hcon %p", conn);
242 243

	conn->state = BT_CONNECT;
244
	conn->out = true;
245

246 247
	conn->attempt++;

248 249
	cp.handle   = cpu_to_le16(handle);

250 251
	cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
	cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
252 253 254 255
	cp.voice_setting  = cpu_to_le16(conn->setting);

	switch (conn->setting & SCO_AIRMODE_MASK) {
	case SCO_AIRMODE_TRANSP:
256
		if (conn->attempt > ARRAY_SIZE(esco_param_msbc))
257
			return false;
258
		param = &esco_param_msbc[conn->attempt - 1];
259 260
		break;
	case SCO_AIRMODE_CVSD:
261 262 263 264 265 266 267 268 269
		if (lmp_esco_capable(conn->link)) {
			if (conn->attempt > ARRAY_SIZE(esco_param_cvsd))
				return false;
			param = &esco_param_cvsd[conn->attempt - 1];
		} else {
			if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
				return false;
			param = &sco_param_cvsd[conn->attempt - 1];
		}
270
		break;
271 272
	default:
		return false;
273
	}
274

275
	cp.retrans_effort = param->retrans_effort;
276 277 278 279 280 281 282
	cp.pkt_type = __cpu_to_le16(param->pkt_type);
	cp.max_latency = __cpu_to_le16(param->max_latency);

	if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
		return false;

	return true;
283 284
}

285 286
u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
		      u16 to_multiplier)
287 288
{
	struct hci_dev *hdev = conn->hdev;
289 290
	struct hci_conn_params *params;
	struct hci_cp_le_conn_update cp;
291

292
	hci_dev_lock(hdev);
293

294 295 296 297 298 299 300 301 302 303 304
	params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
	if (params) {
		params->conn_min_interval = min;
		params->conn_max_interval = max;
		params->conn_latency = latency;
		params->supervision_timeout = to_multiplier;
	}

	hci_dev_unlock(hdev);

	memset(&cp, 0, sizeof(cp));
305 306 307 308 309
	cp.handle		= cpu_to_le16(conn->handle);
	cp.conn_interval_min	= cpu_to_le16(min);
	cp.conn_interval_max	= cpu_to_le16(max);
	cp.conn_latency		= cpu_to_le16(latency);
	cp.supervision_timeout	= cpu_to_le16(to_multiplier);
310 311
	cp.min_ce_len		= cpu_to_le16(0x0000);
	cp.max_ce_len		= cpu_to_le16(0x0000);
312 313

	hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
314 315 316 317 318

	if (params)
		return 0x01;

	return 0x00;
319 320
}

321
void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
322
		      __u8 ltk[16], __u8 key_size)
323 324 325 326
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_cp_le_start_enc cp;

327
	BT_DBG("hcon %p", conn);
328 329 330 331

	memset(&cp, 0, sizeof(cp));

	cp.handle = cpu_to_le16(conn->handle);
332
	cp.rand = rand;
333
	cp.ediv = ediv;
334
	memcpy(cp.ltk, ltk, key_size);
335 336 337 338

	hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
}

339 340 341 342 343 344 345 346
/* Device _must_ be locked */
void hci_sco_setup(struct hci_conn *conn, __u8 status)
{
	struct hci_conn *sco = conn->link;

	if (!sco)
		return;

347 348
	BT_DBG("hcon %p", conn);

349 350 351 352 353 354
	if (!status) {
		if (lmp_esco_capable(conn->hdev))
			hci_setup_sync(sco, conn->handle);
		else
			hci_add_sco(sco, conn->handle);
	} else {
355
		hci_connect_cfm(sco, status);
356 357 358 359
		hci_conn_del(sco);
	}
}

360
static void hci_conn_timeout(struct work_struct *work)
L
Linus Torvalds 已提交
361
{
362
	struct hci_conn *conn = container_of(work, struct hci_conn,
363
					     disc_work.work);
364
	int refcnt = atomic_read(&conn->refcnt);
L
Linus Torvalds 已提交
365

366
	BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
L
Linus Torvalds 已提交
367

368 369 370 371 372 373 374 375 376 377
	WARN_ON(refcnt < 0);

	/* FIXME: It was observed that in pairing failed scenario, refcnt
	 * drops below 0. Probably this is because l2cap_conn_del calls
	 * l2cap_chan_del for each channel, and inside l2cap_chan_del conn is
	 * dropped. After that loop hci_chan_del is called which also drops
	 * conn. For now make sure that ACL is alive if refcnt is higher then 0,
	 * otherwise drop it.
	 */
	if (refcnt > 0)
L
Linus Torvalds 已提交
378 379
		return;

380 381
	switch (conn->state) {
	case BT_CONNECT:
382
	case BT_CONNECT2:
V
Ville Tervo 已提交
383 384
		if (conn->out) {
			if (conn->type == ACL_LINK)
385
				hci_acl_create_connection_cancel(conn);
386 387 388 389 390 391
			else if (conn->type == LE_LINK) {
				if (test_bit(HCI_CONN_SCANNING, &conn->flags))
					hci_connect_le_scan_remove(conn);
				else
					hci_le_create_connection_cancel(conn);
			}
392 393
		} else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
			hci_reject_sco(conn);
V
Ville Tervo 已提交
394
		}
395
		break;
396
	case BT_CONFIG:
397
	case BT_CONNECTED:
398 399 400 401 402 403
		if (conn->type == AMP_LINK) {
			hci_amp_disconn(conn);
		} else {
			__u8 reason = hci_proto_disconn_ind(conn);
			hci_disconnect(conn, reason);
		}
404 405
		break;
	default:
L
Linus Torvalds 已提交
406
		conn->state = BT_CLOSED;
407 408
		break;
	}
L
Linus Torvalds 已提交
409 410
}

411
/* Enter sniff mode */
412
static void hci_conn_idle(struct work_struct *work)
413
{
414 415
	struct hci_conn *conn = container_of(work, struct hci_conn,
					     idle_work.work);
416 417
	struct hci_dev *hdev = conn->hdev;

418
	BT_DBG("hcon %p mode %d", conn, conn->mode);
419 420 421 422 423 424 425 426 427 428

	if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
		return;

	if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
		return;

	if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
		struct hci_cp_sniff_subrate cp;
		cp.handle             = cpu_to_le16(conn->handle);
429 430 431
		cp.max_latency        = cpu_to_le16(0);
		cp.min_remote_timeout = cpu_to_le16(0);
		cp.min_local_timeout  = cpu_to_le16(0);
432 433 434
		hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
	}

435
	if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
436 437 438 439
		struct hci_cp_sniff_mode cp;
		cp.handle       = cpu_to_le16(conn->handle);
		cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
		cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
440 441
		cp.attempt      = cpu_to_le16(4);
		cp.timeout      = cpu_to_le16(1);
442 443 444 445
		hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
	}
}

446
static void hci_conn_auto_accept(struct work_struct *work)
447
{
448 449
	struct hci_conn *conn = container_of(work, struct hci_conn,
					     auto_accept_work.work);
450

451
	hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
452
		     &conn->dst);
453 454
}

455 456 457 458
static void le_conn_timeout(struct work_struct *work)
{
	struct hci_conn *conn = container_of(work, struct hci_conn,
					     le_conn_timeout.work);
459
	struct hci_dev *hdev = conn->hdev;
460 461 462

	BT_DBG("");

463 464 465 466 467
	/* We could end up here due to having done directed advertising,
	 * so clean up the state if necessary. This should however only
	 * happen with broken hardware or if low duty cycle was used
	 * (which doesn't have a timeout of its own).
	 */
468
	if (conn->role == HCI_ROLE_SLAVE) {
469 470 471 472 473 474 475
		u8 enable = 0x00;
		hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
			     &enable);
		hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
		return;
	}

476 477 478
	hci_le_create_connection_cancel(conn);
}

479 480
struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
			      u8 role)
L
Linus Torvalds 已提交
481 482 483
{
	struct hci_conn *conn;

484
	BT_DBG("%s dst %pMR", hdev->name, dst);
L
Linus Torvalds 已提交
485

486
	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
487
	if (!conn)
L
Linus Torvalds 已提交
488 489 490
		return NULL;

	bacpy(&conn->dst, dst);
491
	bacpy(&conn->src, &hdev->bdaddr);
492 493
	conn->hdev  = hdev;
	conn->type  = type;
494
	conn->role  = role;
495 496
	conn->mode  = HCI_CM_ACTIVE;
	conn->state = BT_OPEN;
497
	conn->auth_type = HCI_AT_GENERAL_BONDING;
498
	conn->io_capability = hdev->io_capability;
499
	conn->remote_auth = 0xff;
500
	conn->key_type = 0xff;
501
	conn->rssi = HCI_RSSI_INVALID;
502
	conn->tx_power = HCI_TX_POWER_INVALID;
503
	conn->max_tx_power = HCI_TX_POWER_INVALID;
L
Linus Torvalds 已提交
504

505
	set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
506
	conn->disc_timeout = HCI_DISCONN_TIMEOUT;
507

508 509 510
	if (conn->role == HCI_ROLE_MASTER)
		conn->out = true;

511 512 513 514
	switch (type) {
	case ACL_LINK:
		conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
		break;
515 516 517 518
	case LE_LINK:
		/* conn->src should reflect the local identity address */
		hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
		break;
519 520
	case SCO_LINK:
		if (lmp_esco_capable(hdev))
521 522
			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
					(hdev->esco_type & EDR_ESCO_MASK);
523 524 525 526
		else
			conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
		break;
	case ESCO_LINK:
527
		conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
528 529 530
		break;
	}

L
Linus Torvalds 已提交
531
	skb_queue_head_init(&conn->data_q);
532

533
	INIT_LIST_HEAD(&conn->chan_list);
534

535
	INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
536
	INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
537
	INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
538
	INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout);
L
Linus Torvalds 已提交
539 540 541 542 543 544

	atomic_set(&conn->refcnt, 0);

	hci_dev_hold(hdev);

	hci_conn_hash_add(hdev, conn);
545
	if (hdev->notify)
L
Linus Torvalds 已提交
546 547
		hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);

548 549
	hci_conn_init_sysfs(conn);

L
Linus Torvalds 已提交
550 551 552 553 554 555 556
	return conn;
}

int hci_conn_del(struct hci_conn *conn)
{
	struct hci_dev *hdev = conn->hdev;

557
	BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
L
Linus Torvalds 已提交
558

559
	cancel_delayed_work_sync(&conn->disc_work);
560
	cancel_delayed_work_sync(&conn->auto_accept_work);
561
	cancel_delayed_work_sync(&conn->idle_work);
562

563
	if (conn->type == ACL_LINK) {
L
Linus Torvalds 已提交
564 565 566 567 568 569
		struct hci_conn *sco = conn->link;
		if (sco)
			sco->link = NULL;

		/* Unacked frames */
		hdev->acl_cnt += conn->sent;
570
	} else if (conn->type == LE_LINK) {
571
		cancel_delayed_work(&conn->le_conn_timeout);
572

573 574 575 576
		if (hdev->le_pkts)
			hdev->le_cnt += conn->sent;
		else
			hdev->acl_cnt += conn->sent;
577 578 579 580
	} else {
		struct hci_conn *acl = conn->link;
		if (acl) {
			acl->link = NULL;
581
			hci_conn_drop(acl);
582
		}
L
Linus Torvalds 已提交
583 584
	}

585
	hci_chan_list_flush(conn);
586

587 588 589
	if (conn->amp_mgr)
		amp_mgr_put(conn->amp_mgr);

L
Linus Torvalds 已提交
590
	hci_conn_hash_del(hdev, conn);
591
	if (hdev->notify)
L
Linus Torvalds 已提交
592
		hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
593

L
Linus Torvalds 已提交
594 595
	skb_queue_purge(&conn->data_q);

596
	hci_conn_del_sysfs(conn);
597

598 599
	debugfs_remove_recursive(conn->debugfs);

600 601 602
	if (test_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags))
		hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type);

603 604
	hci_dev_put(hdev);

605
	hci_conn_put(conn);
606

L
Linus Torvalds 已提交
607 608 609 610 611 612
	return 0;
}

struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
{
	int use_src = bacmp(src, BDADDR_ANY);
613
	struct hci_dev *hdev = NULL, *d;
L
Linus Torvalds 已提交
614

615
	BT_DBG("%pMR -> %pMR", src, dst);
L
Linus Torvalds 已提交
616

617
	read_lock(&hci_dev_list_lock);
L
Linus Torvalds 已提交
618

619
	list_for_each_entry(d, &hci_dev_list, list) {
620
		if (!test_bit(HCI_UP, &d->flags) ||
621
		    hci_dev_test_flag(d, HCI_USER_CHANNEL) ||
622
		    d->dev_type != HCI_BREDR)
L
Linus Torvalds 已提交
623 624
			continue;

625
		/* Simple routing:
L
Linus Torvalds 已提交
626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643
		 *   No source address - find interface with bdaddr != dst
		 *   Source address    - find interface with bdaddr == src
		 */

		if (use_src) {
			if (!bacmp(&d->bdaddr, src)) {
				hdev = d; break;
			}
		} else {
			if (bacmp(&d->bdaddr, dst)) {
				hdev = d; break;
			}
		}
	}

	if (hdev)
		hdev = hci_dev_hold(hdev);

644
	read_unlock(&hci_dev_list_lock);
L
Linus Torvalds 已提交
645 646 647 648
	return hdev;
}
EXPORT_SYMBOL(hci_get_route);

649
/* This function requires the caller holds hdev->lock */
650
void hci_le_conn_failed(struct hci_conn *conn, u8 status)
651 652
{
	struct hci_dev *hdev = conn->hdev;
653 654 655 656 657 658
	struct hci_conn_params *params;

	params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
					   conn->dst_type);
	if (params && params->conn) {
		hci_conn_drop(params->conn);
659
		hci_conn_put(params->conn);
660 661
		params->conn = NULL;
	}
662 663 664 665 666 667

	conn->state = BT_CLOSED;

	mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type,
			    status);

668
	hci_connect_cfm(conn, status);
669 670

	hci_conn_del(conn);
671 672 673 674 675

	/* Since we may have temporarily stopped the background scanning in
	 * favor of connection establishment, we should restart it.
	 */
	hci_update_background_scan(hdev);
676 677 678 679 680

	/* Re-enable advertising in case this was a failed connection
	 * attempt as a peripheral.
	 */
	mgmt_reenable_advertising(hdev);
681 682
}

683
static void create_le_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode)
684 685 686
{
	struct hci_conn *conn;

687 688 689 690 691 692 693 694
	hci_dev_lock(hdev);

	conn = hci_lookup_le_connect(hdev);

	if (!status) {
		hci_connect_le_scan_cleanup(conn);
		goto done;
	}
695 696 697 698 699 700 701

	BT_ERR("HCI request failed to create LE connection: status 0x%2.2x",
	       status);

	if (!conn)
		goto done;

702
	hci_le_conn_failed(conn, status);
703 704 705 706 707

done:
	hci_dev_unlock(hdev);
}

708 709 710 711 712 713 714 715 716 717
static void hci_req_add_le_create_conn(struct hci_request *req,
				       struct hci_conn *conn)
{
	struct hci_cp_le_create_conn cp;
	struct hci_dev *hdev = conn->hdev;
	u8 own_addr_type;

	memset(&cp, 0, sizeof(cp));

	/* Update random address, but set require_privacy to false so
718
	 * that we never connect with an non-resolvable address.
719 720 721 722 723 724 725 726 727 728 729
	 */
	if (hci_update_random_address(req, false, &own_addr_type))
		return;

	cp.scan_interval = cpu_to_le16(hdev->le_scan_interval);
	cp.scan_window = cpu_to_le16(hdev->le_scan_window);
	bacpy(&cp.peer_addr, &conn->dst);
	cp.peer_addr_type = conn->dst_type;
	cp.own_address_type = own_addr_type;
	cp.conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
	cp.conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
730 731
	cp.conn_latency = cpu_to_le16(conn->le_conn_latency);
	cp.supervision_timeout = cpu_to_le16(conn->le_supv_timeout);
732 733
	cp.min_ce_len = cpu_to_le16(0x0000);
	cp.max_ce_len = cpu_to_le16(0x0000);
734 735

	hci_req_add(req, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
736 737

	conn->state = BT_CONNECT;
738
	clear_bit(HCI_CONN_SCANNING, &conn->flags);
739 740
}

741 742 743 744 745 746 747 748
static void hci_req_directed_advertising(struct hci_request *req,
					 struct hci_conn *conn)
{
	struct hci_dev *hdev = req->hdev;
	struct hci_cp_le_set_adv_param cp;
	u8 own_addr_type;
	u8 enable;

749
	/* Clear the HCI_LE_ADV bit temporarily so that the
750 751 752 753
	 * hci_update_random_address knows that it's safe to go ahead
	 * and write a new random address. The flag will be set back on
	 * as soon as the SET_ADV_ENABLE HCI command completes.
	 */
754
	hci_dev_clear_flag(hdev, HCI_LE_ADV);
755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776

	/* Set require_privacy to false so that the remote device has a
	 * chance of identifying us.
	 */
	if (hci_update_random_address(req, false, &own_addr_type) < 0)
		return;

	memset(&cp, 0, sizeof(cp));
	cp.type = LE_ADV_DIRECT_IND;
	cp.own_address_type = own_addr_type;
	cp.direct_addr_type = conn->dst_type;
	bacpy(&cp.direct_addr, &conn->dst);
	cp.channel_map = hdev->le_adv_channel_map;

	hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);

	enable = 0x01;
	hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);

	conn->state = BT_CONNECT;
}

777
struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
778
				u8 dst_type, u8 sec_level, u16 conn_timeout,
779
				u8 role)
L
Linus Torvalds 已提交
780
{
781
	struct hci_conn_params *params;
782
	struct hci_conn *conn, *conn_unfinished;
783
	struct smp_irk *irk;
784
	struct hci_request req;
785
	int err;
L
Linus Torvalds 已提交
786

787
	/* Let's make sure that le is enabled.*/
788
	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
789 790 791 792 793 794
		if (lmp_le_capable(hdev))
			return ERR_PTR(-ECONNREFUSED);

		return ERR_PTR(-EOPNOTSUPP);
	}

A
Andre Guedes 已提交
795 796 797 798 799 800 801 802 803
	/* Some devices send ATT messages as soon as the physical link is
	 * established. To be able to handle these ATT messages, the user-
	 * space first establishes the connection and then starts the pairing
	 * process.
	 *
	 * So if a hci_conn object already exists for the following connection
	 * attempt, we simply update pending_sec_level and auth_type fields
	 * and return the object found.
	 */
804
	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
805
	conn_unfinished = NULL;
A
Andre Guedes 已提交
806
	if (conn) {
807 808 809 810 811 812 813 814 815
		if (conn->state == BT_CONNECT &&
		    test_bit(HCI_CONN_SCANNING, &conn->flags)) {
			BT_DBG("will continue unfinished conn %pMR", dst);
			conn_unfinished = conn;
		} else {
			if (conn->pending_sec_level < sec_level)
				conn->pending_sec_level = sec_level;
			goto done;
		}
A
Andre Guedes 已提交
816
	}
817

A
Andre Guedes 已提交
818 819 820
	/* Since the controller supports only one LE connection attempt at a
	 * time, we return -EBUSY if there is any connection attempt running.
	 */
821
	if (hci_lookup_le_connect(hdev))
A
Andre Guedes 已提交
822
		return ERR_PTR(-EBUSY);
823

824 825 826 827 828 829 830 831 832
	/* When given an identity address with existing identity
	 * resolving key, the connection needs to be established
	 * to a resolvable random address.
	 *
	 * Storing the resolvable random address is required here
	 * to handle connection failures. The address will later
	 * be resolved back into the original identity address
	 * from the connect request.
	 */
833 834 835 836 837 838
	irk = hci_find_irk_by_addr(hdev, dst, dst_type);
	if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
		dst = &irk->rpa;
		dst_type = ADDR_LE_DEV_RANDOM;
	}

839 840 841 842 843 844 845
	if (conn_unfinished) {
		conn = conn_unfinished;
		bacpy(&conn->dst, dst);
	} else {
		conn = hci_conn_add(hdev, LE_LINK, dst, role);
	}

A
Andre Guedes 已提交
846 847
	if (!conn)
		return ERR_PTR(-ENOMEM);
848

849
	conn->dst_type = dst_type;
A
Andre Guedes 已提交
850
	conn->sec_level = BT_SECURITY_LOW;
851
	conn->conn_timeout = conn_timeout;
852

853 854 855
	if (!conn_unfinished)
		conn->pending_sec_level = sec_level;

856 857
	hci_req_init(&req, hdev);

858 859 860 861 862 863
	/* Disable advertising if we're active. For master role
	 * connections most controllers will refuse to connect if
	 * advertising is enabled, and for slave role connections we
	 * anyway have to disable it in order to start directed
	 * advertising.
	 */
864
	if (hci_dev_test_flag(hdev, HCI_LE_ADV)) {
865 866 867 868 869
		u8 enable = 0x00;
		hci_req_add(&req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
			    &enable);
	}

870
	/* If requested to connect as slave use directed advertising */
871
	if (conn->role == HCI_ROLE_SLAVE) {
872 873 874
		/* If we're active scanning most controllers are unable
		 * to initiate advertising. Simply reject the attempt.
		 */
875
		if (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
876 877 878 879 880 881
		    hdev->le_scan_type == LE_SCAN_ACTIVE) {
			skb_queue_purge(&req.cmd_q);
			hci_conn_del(conn);
			return ERR_PTR(-EBUSY);
		}

882 883 884 885
		hci_req_directed_advertising(&req, conn);
		goto create_conn;
	}

886 887 888 889
	params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
	if (params) {
		conn->le_conn_min_interval = params->conn_min_interval;
		conn->le_conn_max_interval = params->conn_max_interval;
890 891
		conn->le_conn_latency = params->conn_latency;
		conn->le_supv_timeout = params->supervision_timeout;
892 893 894
	} else {
		conn->le_conn_min_interval = hdev->le_conn_min_interval;
		conn->le_conn_max_interval = hdev->le_conn_max_interval;
895 896
		conn->le_conn_latency = hdev->le_conn_latency;
		conn->le_supv_timeout = hdev->le_supv_timeout;
897
	}
898

899
	/* If controller is scanning, we stop it since some controllers are
900 901 902 903
	 * not able to scan and connect at the same time. Also set the
	 * HCI_LE_SCAN_INTERRUPTED flag so that the command complete
	 * handler for scan disabling knows to set the correct discovery
	 * state.
904
	 */
905
	if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
906
		hci_req_add_le_scan_disable(&req);
907
		hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED);
908 909
	}

910 911
	hci_req_add_le_create_conn(&req, conn);

912
create_conn:
913
	err = hci_req_run(&req, create_le_conn_complete);
914 915
	if (err) {
		hci_conn_del(conn);
A
Andre Guedes 已提交
916
		return ERR_PTR(err);
917
	}
V
Ville Tervo 已提交
918

A
Andre Guedes 已提交
919
done:
920 921 922 923 924 925 926
	/* If this is continuation of connect started by hci_connect_le_scan,
	 * it already called hci_conn_hold and calling it again would mess the
	 * counter.
	 */
	if (!conn_unfinished)
		hci_conn_hold(conn);

927
	return conn;
928
}
V
Ville Tervo 已提交
929

930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061
static void hci_connect_le_scan_complete(struct hci_dev *hdev, u8 status,
					 u16 opcode)
{
	struct hci_conn *conn;

	if (!status)
		return;

	BT_ERR("Failed to add device to auto conn whitelist: status 0x%2.2x",
	       status);

	hci_dev_lock(hdev);

	conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
	if (conn)
		hci_le_conn_failed(conn, status);

	hci_dev_unlock(hdev);
}

static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
{
	struct hci_conn *conn;

	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, addr);
	if (!conn)
		return false;

	if (conn->dst_type != type)
		return false;

	if (conn->state != BT_CONNECTED)
		return false;

	return true;
}

/* This function requires the caller holds hdev->lock */
static int hci_explicit_conn_params_set(struct hci_request *req,
					bdaddr_t *addr, u8 addr_type)
{
	struct hci_dev *hdev = req->hdev;
	struct hci_conn_params *params;

	if (is_connected(hdev, addr, addr_type))
		return -EISCONN;

	params = hci_conn_params_add(hdev, addr, addr_type);
	if (!params)
		return -EIO;

	/* If we created new params, or existing params were marked as disabled,
	 * mark them to be used just once to connect.
	 */
	if (params->auto_connect == HCI_AUTO_CONN_DISABLED) {
		params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
		list_del_init(&params->action);
		list_add(&params->action, &hdev->pend_le_conns);
	}

	params->explicit_connect = true;
	__hci_update_background_scan(req);

	BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
	       params->auto_connect);

	return 0;
}

/* This function requires the caller holds hdev->lock */
struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
				     u8 dst_type, u8 sec_level,
				     u16 conn_timeout, u8 role)
{
	struct hci_conn *conn;
	struct hci_request req;
	int err;

	/* Let's make sure that le is enabled.*/
	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
		if (lmp_le_capable(hdev))
			return ERR_PTR(-ECONNREFUSED);

		return ERR_PTR(-EOPNOTSUPP);
	}

	/* Some devices send ATT messages as soon as the physical link is
	 * established. To be able to handle these ATT messages, the user-
	 * space first establishes the connection and then starts the pairing
	 * process.
	 *
	 * So if a hci_conn object already exists for the following connection
	 * attempt, we simply update pending_sec_level and auth_type fields
	 * and return the object found.
	 */
	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
	if (conn) {
		if (conn->pending_sec_level < sec_level)
			conn->pending_sec_level = sec_level;
		goto done;
	}

	BT_DBG("requesting refresh of dst_addr");

	conn = hci_conn_add(hdev, LE_LINK, dst, role);
	if (!conn)
		return ERR_PTR(-ENOMEM);

	hci_req_init(&req, hdev);

	if (hci_explicit_conn_params_set(&req, dst, dst_type) < 0)
		return ERR_PTR(-EBUSY);

	conn->state = BT_CONNECT;
	set_bit(HCI_CONN_SCANNING, &conn->flags);

	err = hci_req_run(&req, hci_connect_le_scan_complete);
	if (err && err != -ENODATA) {
		hci_conn_del(conn);
		return ERR_PTR(err);
	}

	conn->dst_type = dst_type;
	conn->sec_level = BT_SECURITY_LOW;
	conn->pending_sec_level = sec_level;
	conn->conn_timeout = conn_timeout;

done:
	hci_conn_hold(conn);
	return conn;
}

1062 1063
struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
				 u8 sec_level, u8 auth_type)
L
Linus Torvalds 已提交
1064 1065
{
	struct hci_conn *acl;
V
Ville Tervo 已提交
1066

1067
	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
1068 1069 1070
		if (lmp_bredr_capable(hdev))
			return ERR_PTR(-ECONNREFUSED);

1071
		return ERR_PTR(-EOPNOTSUPP);
1072
	}
1073

A
Andrei Emeltchenko 已提交
1074 1075
	acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
	if (!acl) {
1076
		acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER);
A
Andrei Emeltchenko 已提交
1077
		if (!acl)
1078
			return ERR_PTR(-ENOMEM);
L
Linus Torvalds 已提交
1079 1080 1081 1082
	}

	hci_conn_hold(acl);

1083
	if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
1084 1085
		acl->sec_level = BT_SECURITY_LOW;
		acl->pending_sec_level = sec_level;
1086
		acl->auth_type = auth_type;
1087
		hci_acl_create_connection(acl);
1088
	}
L
Linus Torvalds 已提交
1089

1090 1091 1092
	return acl;
}

1093 1094
struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
				 __u16 setting)
1095 1096 1097 1098
{
	struct hci_conn *acl;
	struct hci_conn *sco;

1099
	acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
1100
	if (IS_ERR(acl))
1101
		return acl;
L
Linus Torvalds 已提交
1102

A
Andrei Emeltchenko 已提交
1103 1104
	sco = hci_conn_hash_lookup_ba(hdev, type, dst);
	if (!sco) {
1105
		sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER);
A
Andrei Emeltchenko 已提交
1106
		if (!sco) {
1107
			hci_conn_drop(acl);
1108
			return ERR_PTR(-ENOMEM);
L
Linus Torvalds 已提交
1109
		}
1110
	}
L
Linus Torvalds 已提交
1111

1112 1113
	acl->link = sco;
	sco->link = acl;
L
Linus Torvalds 已提交
1114

1115
	hci_conn_hold(sco);
L
Linus Torvalds 已提交
1116

1117 1118
	sco->setting = setting;

1119
	if (acl->state == BT_CONNECTED &&
1120
	    (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
1121
		set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
1122
		hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
1123

1124
		if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
1125
			/* defer SCO setup until mode change completed */
1126
			set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
1127 1128 1129 1130
			return sco;
		}

		hci_sco_setup(acl, 0x00);
1131
	}
1132 1133

	return sco;
L
Linus Torvalds 已提交
1134 1135
}

1136 1137 1138
/* Check link security requirement */
int hci_conn_check_link_mode(struct hci_conn *conn)
{
1139
	BT_DBG("hcon %p", conn);
1140

1141 1142 1143 1144
	/* In Secure Connections Only mode, it is required that Secure
	 * Connections is used and the link is encrypted with AES-CCM
	 * using a P-256 authenticated combination key.
	 */
1145
	if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) {
1146 1147 1148 1149 1150 1151
		if (!hci_conn_sc_enabled(conn) ||
		    !test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
		    conn->key_type != HCI_LK_AUTH_COMBINATION_P256)
			return 0;
	}

1152 1153
	if (hci_conn_ssp_enabled(conn) &&
	    !test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1154 1155 1156 1157 1158
		return 0;

	return 1;
}

L
Linus Torvalds 已提交
1159
/* Authenticate remote device */
1160
static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
L
Linus Torvalds 已提交
1161
{
1162
	BT_DBG("hcon %p", conn);
L
Linus Torvalds 已提交
1163

1164 1165 1166
	if (conn->pending_sec_level > sec_level)
		sec_level = conn->pending_sec_level;

1167
	if (sec_level > conn->sec_level)
1168
		conn->pending_sec_level = sec_level;
1169
	else if (test_bit(HCI_CONN_AUTH, &conn->flags))
L
Linus Torvalds 已提交
1170 1171
		return 1;

1172 1173 1174
	/* Make sure we preserve an existing MITM requirement*/
	auth_type |= (conn->auth_type & 0x01);

1175 1176
	conn->auth_type = auth_type;

1177
	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
L
Linus Torvalds 已提交
1178
		struct hci_cp_auth_requested cp;
1179

1180
		cp.handle = cpu_to_le16(conn->handle);
1181
		hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
1182
			     sizeof(cp), &cp);
1183 1184 1185 1186

		/* If we're already encrypted set the REAUTH_PEND flag,
		 * otherwise set the ENCRYPT_PEND.
		 */
1187
		if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1188
			set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
1189 1190
		else
			set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
L
Linus Torvalds 已提交
1191
	}
1192

L
Linus Torvalds 已提交
1193 1194 1195
	return 0;
}

1196 1197 1198
/* Encrypt the the link */
static void hci_conn_encrypt(struct hci_conn *conn)
{
1199
	BT_DBG("hcon %p", conn);
1200

1201
	if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
1202 1203 1204 1205
		struct hci_cp_set_conn_encrypt cp;
		cp.handle  = cpu_to_le16(conn->handle);
		cp.encrypt = 0x01;
		hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1206
			     &cp);
1207 1208 1209
	}
}

1210
/* Enable security */
1211 1212
int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
		      bool initiator)
L
Linus Torvalds 已提交
1213
{
1214
	BT_DBG("hcon %p", conn);
L
Linus Torvalds 已提交
1215

1216 1217 1218
	if (conn->type == LE_LINK)
		return smp_conn_security(conn, sec_level);

1219
	/* For sdp we don't need the link key. */
1220 1221 1222
	if (sec_level == BT_SECURITY_SDP)
		return 1;

1223 1224
	/* For non 2.1 devices and low security level we don't need the link
	   key. */
1225
	if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
1226
		return 1;
1227

1228
	/* For other security levels we need the link key. */
1229
	if (!test_bit(HCI_CONN_AUTH, &conn->flags))
1230 1231
		goto auth;

1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242
	/* An authenticated FIPS approved combination key has sufficient
	 * security for security level 4. */
	if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
	    sec_level == BT_SECURITY_FIPS)
		goto encrypt;

	/* An authenticated combination key has sufficient security for
	   security level 3. */
	if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
	     conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
	    sec_level == BT_SECURITY_HIGH)
1243 1244 1245 1246
		goto encrypt;

	/* An unauthenticated combination key has sufficient security for
	   security level 1 and 2. */
1247 1248
	if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
	     conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
1249
	    (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
1250 1251 1252 1253 1254 1255 1256
		goto encrypt;

	/* A combination key has always sufficient security for the security
	   levels 1 or 2. High security level requires the combination key
	   is generated using maximum PIN code length (16).
	   For pre 2.1 units. */
	if (conn->key_type == HCI_LK_COMBINATION &&
1257 1258
	    (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
	     conn->pin_length == 16))
1259 1260 1261
		goto encrypt;

auth:
1262
	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
L
Linus Torvalds 已提交
1263 1264
		return 0;

1265 1266 1267
	if (initiator)
		set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);

1268 1269
	if (!hci_conn_auth(conn, sec_level, auth_type))
		return 0;
1270 1271

encrypt:
1272
	if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1273
		return 1;
1274

1275
	hci_conn_encrypt(conn);
L
Linus Torvalds 已提交
1276 1277
	return 0;
}
1278
EXPORT_SYMBOL(hci_conn_security);
L
Linus Torvalds 已提交
1279

1280 1281 1282
/* Check secure link requirement */
int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
{
1283
	BT_DBG("hcon %p", conn);
1284

1285 1286 1287
	/* Accept if non-secure or higher security level is required */
	if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
		return 1;
1288

1289 1290 1291
	/* Accept if secure or higher security level is already present */
	if (conn->sec_level == BT_SECURITY_HIGH ||
	    conn->sec_level == BT_SECURITY_FIPS)
1292 1293
		return 1;

1294 1295
	/* Reject not secure link */
	return 0;
1296 1297 1298
}
EXPORT_SYMBOL(hci_conn_check_secure);

L
Linus Torvalds 已提交
1299
/* Switch role */
1300
int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
L
Linus Torvalds 已提交
1301
{
1302
	BT_DBG("hcon %p", conn);
L
Linus Torvalds 已提交
1303

1304
	if (role == conn->role)
L
Linus Torvalds 已提交
1305 1306
		return 1;

1307
	if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
L
Linus Torvalds 已提交
1308 1309 1310
		struct hci_cp_switch_role cp;
		bacpy(&cp.bdaddr, &conn->dst);
		cp.role = role;
1311
		hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
L
Linus Torvalds 已提交
1312
	}
1313

L
Linus Torvalds 已提交
1314 1315 1316 1317
	return 0;
}
EXPORT_SYMBOL(hci_conn_switch_role);

1318
/* Enter active mode */
1319
void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
1320 1321 1322
{
	struct hci_dev *hdev = conn->hdev;

1323
	BT_DBG("hcon %p mode %d", conn, conn->mode);
1324

1325 1326 1327
	if (conn->mode != HCI_CM_SNIFF)
		goto timer;

1328
	if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
1329 1330
		goto timer;

1331
	if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
1332
		struct hci_cp_exit_sniff_mode cp;
1333
		cp.handle = cpu_to_le16(conn->handle);
1334
		hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
1335 1336 1337 1338
	}

timer:
	if (hdev->idle_timeout > 0)
1339 1340
		queue_delayed_work(hdev->workqueue, &conn->idle_work,
				   msecs_to_jiffies(hdev->idle_timeout));
1341 1342
}

L
Linus Torvalds 已提交
1343 1344 1345 1346
/* Drop all connection on the device */
void hci_conn_hash_flush(struct hci_dev *hdev)
{
	struct hci_conn_hash *h = &hdev->conn_hash;
1347
	struct hci_conn *c, *n;
L
Linus Torvalds 已提交
1348 1349 1350

	BT_DBG("hdev %s", hdev->name);

1351
	list_for_each_entry_safe(c, n, &h->list, list) {
L
Linus Torvalds 已提交
1352 1353
		c->state = BT_CLOSED;

1354
		hci_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
L
Linus Torvalds 已提交
1355 1356 1357 1358
		hci_conn_del(c);
	}
}

1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369
/* Check pending connect attempts */
void hci_conn_check_pending(struct hci_dev *hdev)
{
	struct hci_conn *conn;

	BT_DBG("hdev %s", hdev->name);

	hci_dev_lock(hdev);

	conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
	if (conn)
1370
		hci_acl_create_connection(conn);
1371 1372 1373 1374

	hci_dev_unlock(hdev);
}

1375 1376 1377 1378
static u32 get_link_mode(struct hci_conn *conn)
{
	u32 link_mode = 0;

1379
	if (conn->role == HCI_ROLE_MASTER)
1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396
		link_mode |= HCI_LM_MASTER;

	if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
		link_mode |= HCI_LM_ENCRYPT;

	if (test_bit(HCI_CONN_AUTH, &conn->flags))
		link_mode |= HCI_LM_AUTH;

	if (test_bit(HCI_CONN_SECURE, &conn->flags))
		link_mode |= HCI_LM_SECURE;

	if (test_bit(HCI_CONN_FIPS, &conn->flags))
		link_mode |= HCI_LM_FIPS;

	return link_mode;
}

L
Linus Torvalds 已提交
1397 1398
int hci_get_conn_list(void __user *arg)
{
1399
	struct hci_conn *c;
L
Linus Torvalds 已提交
1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412
	struct hci_conn_list_req req, *cl;
	struct hci_conn_info *ci;
	struct hci_dev *hdev;
	int n = 0, size, err;

	if (copy_from_user(&req, arg, sizeof(req)))
		return -EFAULT;

	if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
		return -EINVAL;

	size = sizeof(req) + req.conn_num * sizeof(*ci);

A
Andrei Emeltchenko 已提交
1413 1414
	cl = kmalloc(size, GFP_KERNEL);
	if (!cl)
L
Linus Torvalds 已提交
1415 1416
		return -ENOMEM;

A
Andrei Emeltchenko 已提交
1417 1418
	hdev = hci_dev_get(req.dev_id);
	if (!hdev) {
L
Linus Torvalds 已提交
1419 1420 1421 1422 1423 1424
		kfree(cl);
		return -ENODEV;
	}

	ci = cl->conn_info;

1425
	hci_dev_lock(hdev);
1426
	list_for_each_entry(c, &hdev->conn_hash.list, list) {
L
Linus Torvalds 已提交
1427 1428 1429 1430 1431
		bacpy(&(ci + n)->bdaddr, &c->dst);
		(ci + n)->handle = c->handle;
		(ci + n)->type  = c->type;
		(ci + n)->out   = c->out;
		(ci + n)->state = c->state;
1432
		(ci + n)->link_mode = get_link_mode(c);
L
Linus Torvalds 已提交
1433 1434 1435
		if (++n >= req.conn_num)
			break;
	}
1436
	hci_dev_unlock(hdev);
L
Linus Torvalds 已提交
1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459

	cl->dev_id = hdev->id;
	cl->conn_num = n;
	size = sizeof(req) + n * sizeof(*ci);

	hci_dev_put(hdev);

	err = copy_to_user(arg, cl, size);
	kfree(cl);

	return err ? -EFAULT : 0;
}

int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
{
	struct hci_conn_info_req req;
	struct hci_conn_info ci;
	struct hci_conn *conn;
	char __user *ptr = arg + sizeof(req);

	if (copy_from_user(&req, arg, sizeof(req)))
		return -EFAULT;

1460
	hci_dev_lock(hdev);
L
Linus Torvalds 已提交
1461 1462 1463 1464 1465 1466 1467
	conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
	if (conn) {
		bacpy(&ci.bdaddr, &conn->dst);
		ci.handle = conn->handle;
		ci.type  = conn->type;
		ci.out   = conn->out;
		ci.state = conn->state;
1468
		ci.link_mode = get_link_mode(conn);
L
Linus Torvalds 已提交
1469
	}
1470
	hci_dev_unlock(hdev);
L
Linus Torvalds 已提交
1471 1472 1473 1474 1475 1476

	if (!conn)
		return -ENOENT;

	return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
}
1477 1478 1479 1480 1481 1482 1483 1484 1485

int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
{
	struct hci_auth_info_req req;
	struct hci_conn *conn;

	if (copy_from_user(&req, arg, sizeof(req)))
		return -EFAULT;

1486
	hci_dev_lock(hdev);
1487 1488 1489
	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
	if (conn)
		req.type = conn->auth_type;
1490
	hci_dev_unlock(hdev);
1491 1492 1493 1494 1495 1496

	if (!conn)
		return -ENOENT;

	return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
}
1497 1498 1499 1500 1501 1502

struct hci_chan *hci_chan_create(struct hci_conn *conn)
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_chan *chan;

1503
	BT_DBG("%s hcon %p", hdev->name, conn);
1504

1505 1506 1507 1508 1509
	if (test_bit(HCI_CONN_DROP, &conn->flags)) {
		BT_DBG("Refusing to create new hci_chan");
		return NULL;
	}

1510
	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
1511 1512 1513
	if (!chan)
		return NULL;

1514
	chan->conn = hci_conn_get(conn);
1515
	skb_queue_head_init(&chan->data_q);
M
Mat Martineau 已提交
1516
	chan->state = BT_CONNECTED;
1517

1518
	list_add_rcu(&chan->list, &conn->chan_list);
1519 1520 1521 1522

	return chan;
}

1523
void hci_chan_del(struct hci_chan *chan)
1524 1525 1526 1527
{
	struct hci_conn *conn = chan->conn;
	struct hci_dev *hdev = conn->hdev;

1528
	BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
1529

1530 1531 1532
	list_del_rcu(&chan->list);

	synchronize_rcu();
1533

1534
	/* Prevent new hci_chan's to be created for this hci_conn */
1535
	set_bit(HCI_CONN_DROP, &conn->flags);
1536

1537
	hci_conn_put(conn);
1538

1539 1540 1541 1542
	skb_queue_purge(&chan->data_q);
	kfree(chan);
}

1543
void hci_chan_list_flush(struct hci_conn *conn)
1544
{
1545
	struct hci_chan *chan, *n;
1546

1547
	BT_DBG("hcon %p", conn);
1548

1549
	list_for_each_entry_safe(chan, n, &conn->chan_list, list)
1550 1551
		hci_chan_del(chan);
}
1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583

static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
						 __u16 handle)
{
	struct hci_chan *hchan;

	list_for_each_entry(hchan, &hcon->chan_list, list) {
		if (hchan->handle == handle)
			return hchan;
	}

	return NULL;
}

struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
{
	struct hci_conn_hash *h = &hdev->conn_hash;
	struct hci_conn *hcon;
	struct hci_chan *hchan = NULL;

	rcu_read_lock();

	list_for_each_entry_rcu(hcon, &h->list, list) {
		hchan = __hci_chan_lookup_handle(hcon, handle);
		if (hchan)
			break;
	}

	rcu_read_unlock();

	return hchan;
}