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