1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#include <linux/export.h>
28#include <linux/debugfs.h>
29
30#include <net/bluetooth/bluetooth.h>
31#include <net/bluetooth/hci_core.h>
32#include <net/bluetooth/l2cap.h>
33
34#include "hci_request.h"
35#include "smp.h"
36#include "a2mp.h"
37
38struct sco_param {
39 u16 pkt_type;
40 u16 max_latency;
41 u8 retrans_effort;
42};
43
44static const struct sco_param esco_param_cvsd[] = {
45 { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a, 0x01 },
46 { EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007, 0x01 },
47 { EDR_ESCO_MASK | ESCO_EV3, 0x0007, 0x01 },
48 { EDR_ESCO_MASK | ESCO_HV3, 0xffff, 0x01 },
49 { EDR_ESCO_MASK | ESCO_HV1, 0xffff, 0x01 },
50};
51
52static const struct sco_param sco_param_cvsd[] = {
53 { EDR_ESCO_MASK | ESCO_HV3, 0xffff, 0xff },
54 { EDR_ESCO_MASK | ESCO_HV1, 0xffff, 0xff },
55};
56
57static const struct sco_param esco_param_msbc[] = {
58 { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d, 0x02 },
59 { EDR_ESCO_MASK | ESCO_EV3, 0x0008, 0x02 },
60};
61
62static void hci_le_create_connection_cancel(struct hci_conn *conn)
63{
64 hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
65}
66
67static void hci_acl_create_connection(struct hci_conn *conn)
68{
69 struct hci_dev *hdev = conn->hdev;
70 struct inquiry_entry *ie;
71 struct hci_cp_create_conn cp;
72
73 BT_DBG("hcon %p", conn);
74
75 conn->state = BT_CONNECT;
76 conn->out = true;
77 conn->role = HCI_ROLE_MASTER;
78
79 conn->attempt++;
80
81 conn->link_policy = hdev->link_policy;
82
83 memset(&cp, 0, sizeof(cp));
84 bacpy(&cp.bdaddr, &conn->dst);
85 cp.pscan_rep_mode = 0x02;
86
87 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
88 if (ie) {
89 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
90 cp.pscan_rep_mode = ie->data.pscan_rep_mode;
91 cp.pscan_mode = ie->data.pscan_mode;
92 cp.clock_offset = ie->data.clock_offset |
93 cpu_to_le16(0x8000);
94 }
95
96 memcpy(conn->dev_class, ie->data.dev_class, 3);
97 if (ie->data.ssp_mode > 0)
98 set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
99 }
100
101 cp.pkt_type = cpu_to_le16(conn->pkt_type);
102 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
103 cp.role_switch = 0x01;
104 else
105 cp.role_switch = 0x00;
106
107 hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
108}
109
110static void hci_acl_create_connection_cancel(struct hci_conn *conn)
111{
112 struct hci_cp_create_conn_cancel cp;
113
114 BT_DBG("hcon %p", conn);
115
116 if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
117 return;
118
119 bacpy(&cp.bdaddr, &conn->dst);
120 hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
121}
122
123static void hci_reject_sco(struct hci_conn *conn)
124{
125 struct hci_cp_reject_sync_conn_req cp;
126
127 cp.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
128 bacpy(&cp.bdaddr, &conn->dst);
129
130 hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);
131}
132
133int hci_disconnect(struct hci_conn *conn, __u8 reason)
134{
135 struct hci_cp_disconnect cp;
136
137 BT_DBG("hcon %p", conn);
138
139
140
141
142
143
144 if (conn->type == ACL_LINK && conn->role == HCI_ROLE_MASTER) {
145 struct hci_dev *hdev = conn->hdev;
146 struct hci_cp_read_clock_offset clkoff_cp;
147
148 clkoff_cp.handle = cpu_to_le16(conn->handle);
149 hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp),
150 &clkoff_cp);
151 }
152
153 conn->state = BT_DISCONN;
154
155 cp.handle = cpu_to_le16(conn->handle);
156 cp.reason = reason;
157 return hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
158}
159
160static void hci_amp_disconn(struct hci_conn *conn)
161{
162 struct hci_cp_disconn_phy_link cp;
163
164 BT_DBG("hcon %p", conn);
165
166 conn->state = BT_DISCONN;
167
168 cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
169 cp.reason = hci_proto_disconn_ind(conn);
170 hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
171 sizeof(cp), &cp);
172}
173
174static void hci_add_sco(struct hci_conn *conn, __u16 handle)
175{
176 struct hci_dev *hdev = conn->hdev;
177 struct hci_cp_add_sco cp;
178
179 BT_DBG("hcon %p", conn);
180
181 conn->state = BT_CONNECT;
182 conn->out = true;
183
184 conn->attempt++;
185
186 cp.handle = cpu_to_le16(handle);
187 cp.pkt_type = cpu_to_le16(conn->pkt_type);
188
189 hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
190}
191
192bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
193{
194 struct hci_dev *hdev = conn->hdev;
195 struct hci_cp_setup_sync_conn cp;
196 const struct sco_param *param;
197
198 BT_DBG("hcon %p", conn);
199
200 conn->state = BT_CONNECT;
201 conn->out = true;
202
203 conn->attempt++;
204
205 cp.handle = cpu_to_le16(handle);
206
207 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
208 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
209 cp.voice_setting = cpu_to_le16(conn->setting);
210
211 switch (conn->setting & SCO_AIRMODE_MASK) {
212 case SCO_AIRMODE_TRANSP:
213 if (conn->attempt > ARRAY_SIZE(esco_param_msbc))
214 return false;
215 param = &esco_param_msbc[conn->attempt - 1];
216 break;
217 case SCO_AIRMODE_CVSD:
218 if (lmp_esco_capable(conn->link)) {
219 if (conn->attempt > ARRAY_SIZE(esco_param_cvsd))
220 return false;
221 param = &esco_param_cvsd[conn->attempt - 1];
222 } else {
223 if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
224 return false;
225 param = &sco_param_cvsd[conn->attempt - 1];
226 }
227 break;
228 default:
229 return false;
230 }
231
232 cp.retrans_effort = param->retrans_effort;
233 cp.pkt_type = __cpu_to_le16(param->pkt_type);
234 cp.max_latency = __cpu_to_le16(param->max_latency);
235
236 if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
237 return false;
238
239 return true;
240}
241
242u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
243 u16 to_multiplier)
244{
245 struct hci_dev *hdev = conn->hdev;
246 struct hci_conn_params *params;
247 struct hci_cp_le_conn_update cp;
248
249 hci_dev_lock(hdev);
250
251 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
252 if (params) {
253 params->conn_min_interval = min;
254 params->conn_max_interval = max;
255 params->conn_latency = latency;
256 params->supervision_timeout = to_multiplier;
257 }
258
259 hci_dev_unlock(hdev);
260
261 memset(&cp, 0, sizeof(cp));
262 cp.handle = cpu_to_le16(conn->handle);
263 cp.conn_interval_min = cpu_to_le16(min);
264 cp.conn_interval_max = cpu_to_le16(max);
265 cp.conn_latency = cpu_to_le16(latency);
266 cp.supervision_timeout = cpu_to_le16(to_multiplier);
267 cp.min_ce_len = cpu_to_le16(0x0000);
268 cp.max_ce_len = cpu_to_le16(0x0000);
269
270 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
271
272 if (params)
273 return 0x01;
274
275 return 0x00;
276}
277
278void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
279 __u8 ltk[16])
280{
281 struct hci_dev *hdev = conn->hdev;
282 struct hci_cp_le_start_enc cp;
283
284 BT_DBG("hcon %p", conn);
285
286 memset(&cp, 0, sizeof(cp));
287
288 cp.handle = cpu_to_le16(conn->handle);
289 cp.rand = rand;
290 cp.ediv = ediv;
291 memcpy(cp.ltk, ltk, sizeof(cp.ltk));
292
293 hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
294}
295
296
297void hci_sco_setup(struct hci_conn *conn, __u8 status)
298{
299 struct hci_conn *sco = conn->link;
300
301 if (!sco)
302 return;
303
304 BT_DBG("hcon %p", conn);
305
306 if (!status) {
307 if (lmp_esco_capable(conn->hdev))
308 hci_setup_sync(sco, conn->handle);
309 else
310 hci_add_sco(sco, conn->handle);
311 } else {
312 hci_connect_cfm(sco, status);
313 hci_conn_del(sco);
314 }
315}
316
317static void hci_conn_timeout(struct work_struct *work)
318{
319 struct hci_conn *conn = container_of(work, struct hci_conn,
320 disc_work.work);
321 int refcnt = atomic_read(&conn->refcnt);
322
323 BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
324
325 WARN_ON(refcnt < 0);
326
327
328
329
330
331
332
333
334 if (refcnt > 0)
335 return;
336
337 switch (conn->state) {
338 case BT_CONNECT:
339 case BT_CONNECT2:
340 if (conn->out) {
341 if (conn->type == ACL_LINK)
342 hci_acl_create_connection_cancel(conn);
343 else if (conn->type == LE_LINK)
344 hci_le_create_connection_cancel(conn);
345 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
346 hci_reject_sco(conn);
347 }
348 break;
349 case BT_CONFIG:
350 case BT_CONNECTED:
351 if (conn->type == AMP_LINK) {
352 hci_amp_disconn(conn);
353 } else {
354 __u8 reason = hci_proto_disconn_ind(conn);
355 hci_disconnect(conn, reason);
356 }
357 break;
358 default:
359 conn->state = BT_CLOSED;
360 break;
361 }
362}
363
364
365static void hci_conn_idle(struct work_struct *work)
366{
367 struct hci_conn *conn = container_of(work, struct hci_conn,
368 idle_work.work);
369 struct hci_dev *hdev = conn->hdev;
370
371 BT_DBG("hcon %p mode %d", conn, conn->mode);
372
373 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
374 return;
375
376 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
377 return;
378
379 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
380 struct hci_cp_sniff_subrate cp;
381 cp.handle = cpu_to_le16(conn->handle);
382 cp.max_latency = cpu_to_le16(0);
383 cp.min_remote_timeout = cpu_to_le16(0);
384 cp.min_local_timeout = cpu_to_le16(0);
385 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
386 }
387
388 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
389 struct hci_cp_sniff_mode cp;
390 cp.handle = cpu_to_le16(conn->handle);
391 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
392 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
393 cp.attempt = cpu_to_le16(4);
394 cp.timeout = cpu_to_le16(1);
395 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
396 }
397}
398
399static void hci_conn_auto_accept(struct work_struct *work)
400{
401 struct hci_conn *conn = container_of(work, struct hci_conn,
402 auto_accept_work.work);
403
404 hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
405 &conn->dst);
406}
407
408static void le_conn_timeout(struct work_struct *work)
409{
410 struct hci_conn *conn = container_of(work, struct hci_conn,
411 le_conn_timeout.work);
412 struct hci_dev *hdev = conn->hdev;
413
414 BT_DBG("");
415
416
417
418
419
420
421 if (conn->role == HCI_ROLE_SLAVE) {
422 u8 enable = 0x00;
423 hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
424 &enable);
425 hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
426 return;
427 }
428
429 hci_le_create_connection_cancel(conn);
430}
431
432struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
433 u8 role)
434{
435 struct hci_conn *conn;
436
437 BT_DBG("%s dst %pMR", hdev->name, dst);
438
439 conn = kzalloc(sizeof(*conn), GFP_KERNEL);
440 if (!conn)
441 return NULL;
442
443 bacpy(&conn->dst, dst);
444 bacpy(&conn->src, &hdev->bdaddr);
445 conn->hdev = hdev;
446 conn->type = type;
447 conn->role = role;
448 conn->mode = HCI_CM_ACTIVE;
449 conn->state = BT_OPEN;
450 conn->auth_type = HCI_AT_GENERAL_BONDING;
451 conn->io_capability = hdev->io_capability;
452 conn->remote_auth = 0xff;
453 conn->key_type = 0xff;
454 conn->rssi = HCI_RSSI_INVALID;
455 conn->tx_power = HCI_TX_POWER_INVALID;
456 conn->max_tx_power = HCI_TX_POWER_INVALID;
457
458 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
459 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
460
461 if (conn->role == HCI_ROLE_MASTER)
462 conn->out = true;
463
464 switch (type) {
465 case ACL_LINK:
466 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
467 break;
468 case LE_LINK:
469
470 hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
471 break;
472 case SCO_LINK:
473 if (lmp_esco_capable(hdev))
474 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
475 (hdev->esco_type & EDR_ESCO_MASK);
476 else
477 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
478 break;
479 case ESCO_LINK:
480 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
481 break;
482 }
483
484 skb_queue_head_init(&conn->data_q);
485
486 INIT_LIST_HEAD(&conn->chan_list);
487
488 INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
489 INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
490 INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
491 INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout);
492
493 atomic_set(&conn->refcnt, 0);
494
495 hci_dev_hold(hdev);
496
497 hci_conn_hash_add(hdev, conn);
498 if (hdev->notify)
499 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
500
501 hci_conn_init_sysfs(conn);
502
503 return conn;
504}
505
506int hci_conn_del(struct hci_conn *conn)
507{
508 struct hci_dev *hdev = conn->hdev;
509
510 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
511
512 cancel_delayed_work_sync(&conn->disc_work);
513 cancel_delayed_work_sync(&conn->auto_accept_work);
514 cancel_delayed_work_sync(&conn->idle_work);
515
516 if (conn->type == ACL_LINK) {
517 struct hci_conn *sco = conn->link;
518 if (sco)
519 sco->link = NULL;
520
521
522 hdev->acl_cnt += conn->sent;
523 } else if (conn->type == LE_LINK) {
524 cancel_delayed_work(&conn->le_conn_timeout);
525
526 if (hdev->le_pkts)
527 hdev->le_cnt += conn->sent;
528 else
529 hdev->acl_cnt += conn->sent;
530 } else {
531 struct hci_conn *acl = conn->link;
532 if (acl) {
533 acl->link = NULL;
534 hci_conn_drop(acl);
535 }
536 }
537
538 hci_chan_list_flush(conn);
539
540 if (conn->amp_mgr)
541 amp_mgr_put(conn->amp_mgr);
542
543 hci_conn_hash_del(hdev, conn);
544 if (hdev->notify)
545 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
546
547 skb_queue_purge(&conn->data_q);
548
549 hci_conn_del_sysfs(conn);
550
551 debugfs_remove_recursive(conn->debugfs);
552
553 if (test_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags))
554 hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type);
555
556 hci_dev_put(hdev);
557
558 hci_conn_put(conn);
559
560 return 0;
561}
562
563struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
564{
565 int use_src = bacmp(src, BDADDR_ANY);
566 struct hci_dev *hdev = NULL, *d;
567
568 BT_DBG("%pMR -> %pMR", src, dst);
569
570 read_lock(&hci_dev_list_lock);
571
572 list_for_each_entry(d, &hci_dev_list, list) {
573 if (!test_bit(HCI_UP, &d->flags) ||
574 hci_dev_test_flag(d, HCI_USER_CHANNEL) ||
575 d->dev_type != HCI_BREDR)
576 continue;
577
578
579
580
581
582
583 if (use_src) {
584 if (!bacmp(&d->bdaddr, src)) {
585 hdev = d; break;
586 }
587 } else {
588 if (bacmp(&d->bdaddr, dst)) {
589 hdev = d; break;
590 }
591 }
592 }
593
594 if (hdev)
595 hdev = hci_dev_hold(hdev);
596
597 read_unlock(&hci_dev_list_lock);
598 return hdev;
599}
600EXPORT_SYMBOL(hci_get_route);
601
602
603void hci_le_conn_failed(struct hci_conn *conn, u8 status)
604{
605 struct hci_dev *hdev = conn->hdev;
606 struct hci_conn_params *params;
607
608 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
609 conn->dst_type);
610 if (params && params->conn) {
611 hci_conn_drop(params->conn);
612 hci_conn_put(params->conn);
613 params->conn = NULL;
614 }
615
616 conn->state = BT_CLOSED;
617
618 mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type,
619 status);
620
621 hci_connect_cfm(conn, status);
622
623 hci_conn_del(conn);
624
625
626
627
628 hci_update_background_scan(hdev);
629
630
631
632
633 mgmt_reenable_advertising(hdev);
634}
635
636static void create_le_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode)
637{
638 struct hci_conn *conn;
639
640 if (status == 0)
641 return;
642
643 BT_ERR("HCI request failed to create LE connection: status 0x%2.2x",
644 status);
645
646 hci_dev_lock(hdev);
647
648 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
649 if (!conn)
650 goto done;
651
652 hci_le_conn_failed(conn, status);
653
654done:
655 hci_dev_unlock(hdev);
656}
657
658static void hci_req_add_le_create_conn(struct hci_request *req,
659 struct hci_conn *conn)
660{
661 struct hci_cp_le_create_conn cp;
662 struct hci_dev *hdev = conn->hdev;
663 u8 own_addr_type;
664
665 memset(&cp, 0, sizeof(cp));
666
667
668
669
670 if (hci_update_random_address(req, false, &own_addr_type))
671 return;
672
673 cp.scan_interval = cpu_to_le16(hdev->le_scan_interval);
674 cp.scan_window = cpu_to_le16(hdev->le_scan_window);
675 bacpy(&cp.peer_addr, &conn->dst);
676 cp.peer_addr_type = conn->dst_type;
677 cp.own_address_type = own_addr_type;
678 cp.conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
679 cp.conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
680 cp.conn_latency = cpu_to_le16(conn->le_conn_latency);
681 cp.supervision_timeout = cpu_to_le16(conn->le_supv_timeout);
682 cp.min_ce_len = cpu_to_le16(0x0000);
683 cp.max_ce_len = cpu_to_le16(0x0000);
684
685 hci_req_add(req, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
686
687 conn->state = BT_CONNECT;
688}
689
690static void hci_req_directed_advertising(struct hci_request *req,
691 struct hci_conn *conn)
692{
693 struct hci_dev *hdev = req->hdev;
694 struct hci_cp_le_set_adv_param cp;
695 u8 own_addr_type;
696 u8 enable;
697
698
699
700
701
702
703 hci_dev_clear_flag(hdev, HCI_LE_ADV);
704
705
706
707
708 if (hci_update_random_address(req, false, &own_addr_type) < 0)
709 return;
710
711 memset(&cp, 0, sizeof(cp));
712 cp.type = LE_ADV_DIRECT_IND;
713 cp.own_address_type = own_addr_type;
714 cp.direct_addr_type = conn->dst_type;
715 bacpy(&cp.direct_addr, &conn->dst);
716 cp.channel_map = hdev->le_adv_channel_map;
717
718 hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp);
719
720 enable = 0x01;
721 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable);
722
723 conn->state = BT_CONNECT;
724}
725
726struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
727 u8 dst_type, u8 sec_level, u16 conn_timeout,
728 u8 role)
729{
730 struct hci_conn_params *params;
731 struct hci_conn *conn;
732 struct smp_irk *irk;
733 struct hci_request req;
734 int err;
735
736
737 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
738 if (lmp_le_capable(hdev))
739 return ERR_PTR(-ECONNREFUSED);
740
741 return ERR_PTR(-EOPNOTSUPP);
742 }
743
744
745
746
747
748
749
750
751
752
753 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
754 if (conn) {
755 conn->pending_sec_level = sec_level;
756 goto done;
757 }
758
759
760
761
762 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
763 if (conn)
764 return ERR_PTR(-EBUSY);
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779 irk = hci_find_irk_by_addr(hdev, dst, dst_type);
780 if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
781 dst = &irk->rpa;
782 dst_type = ADDR_LE_DEV_RANDOM;
783 }
784
785 conn = hci_conn_add(hdev, LE_LINK, dst, role);
786 if (!conn)
787 return ERR_PTR(-ENOMEM);
788
789 conn->dst_type = dst_type;
790 conn->sec_level = BT_SECURITY_LOW;
791 conn->pending_sec_level = sec_level;
792 conn->conn_timeout = conn_timeout;
793
794 hci_req_init(&req, hdev);
795
796
797
798
799
800
801
802 if (hci_dev_test_flag(hdev, HCI_LE_ADV)) {
803 u8 enable = 0x00;
804 hci_req_add(&req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
805 &enable);
806 }
807
808
809 if (conn->role == HCI_ROLE_SLAVE) {
810
811
812
813 if (hci_dev_test_flag(hdev, HCI_LE_SCAN) &&
814 hdev->le_scan_type == LE_SCAN_ACTIVE) {
815 skb_queue_purge(&req.cmd_q);
816 hci_conn_del(conn);
817 return ERR_PTR(-EBUSY);
818 }
819
820 hci_req_directed_advertising(&req, conn);
821 goto create_conn;
822 }
823
824 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
825 if (params) {
826 conn->le_conn_min_interval = params->conn_min_interval;
827 conn->le_conn_max_interval = params->conn_max_interval;
828 conn->le_conn_latency = params->conn_latency;
829 conn->le_supv_timeout = params->supervision_timeout;
830 } else {
831 conn->le_conn_min_interval = hdev->le_conn_min_interval;
832 conn->le_conn_max_interval = hdev->le_conn_max_interval;
833 conn->le_conn_latency = hdev->le_conn_latency;
834 conn->le_supv_timeout = hdev->le_supv_timeout;
835 }
836
837
838
839
840
841
842
843 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) {
844 hci_req_add_le_scan_disable(&req);
845 hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED);
846 }
847
848 hci_req_add_le_create_conn(&req, conn);
849
850create_conn:
851 err = hci_req_run(&req, create_le_conn_complete);
852 if (err) {
853 hci_conn_del(conn);
854 return ERR_PTR(err);
855 }
856
857done:
858 hci_conn_hold(conn);
859 return conn;
860}
861
862struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
863 u8 sec_level, u8 auth_type)
864{
865 struct hci_conn *acl;
866
867 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
868 if (lmp_bredr_capable(hdev))
869 return ERR_PTR(-ECONNREFUSED);
870
871 return ERR_PTR(-EOPNOTSUPP);
872 }
873
874 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
875 if (!acl) {
876 acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER);
877 if (!acl)
878 return ERR_PTR(-ENOMEM);
879 }
880
881 hci_conn_hold(acl);
882
883 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
884 acl->sec_level = BT_SECURITY_LOW;
885 acl->pending_sec_level = sec_level;
886 acl->auth_type = auth_type;
887 hci_acl_create_connection(acl);
888 }
889
890 return acl;
891}
892
893struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
894 __u16 setting)
895{
896 struct hci_conn *acl;
897 struct hci_conn *sco;
898
899 acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
900 if (IS_ERR(acl))
901 return acl;
902
903 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
904 if (!sco) {
905 sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER);
906 if (!sco) {
907 hci_conn_drop(acl);
908 return ERR_PTR(-ENOMEM);
909 }
910 }
911
912 acl->link = sco;
913 sco->link = acl;
914
915 hci_conn_hold(sco);
916
917 sco->setting = setting;
918
919 if (acl->state == BT_CONNECTED &&
920 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
921 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
922 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
923
924 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
925
926 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
927 return sco;
928 }
929
930 hci_sco_setup(acl, 0x00);
931 }
932
933 return sco;
934}
935
936
937int hci_conn_check_link_mode(struct hci_conn *conn)
938{
939 BT_DBG("hcon %p", conn);
940
941
942
943
944
945 if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) {
946 if (!hci_conn_sc_enabled(conn) ||
947 !test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
948 conn->key_type != HCI_LK_AUTH_COMBINATION_P256)
949 return 0;
950 }
951
952 if (hci_conn_ssp_enabled(conn) &&
953 !test_bit(HCI_CONN_ENCRYPT, &conn->flags))
954 return 0;
955
956 return 1;
957}
958
959
960static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
961{
962 BT_DBG("hcon %p", conn);
963
964 if (conn->pending_sec_level > sec_level)
965 sec_level = conn->pending_sec_level;
966
967 if (sec_level > conn->sec_level)
968 conn->pending_sec_level = sec_level;
969 else if (test_bit(HCI_CONN_AUTH, &conn->flags))
970 return 1;
971
972
973 auth_type |= (conn->auth_type & 0x01);
974
975 conn->auth_type = auth_type;
976
977 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
978 struct hci_cp_auth_requested cp;
979
980 cp.handle = cpu_to_le16(conn->handle);
981 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
982 sizeof(cp), &cp);
983
984
985
986
987 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
988 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
989 else
990 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
991 }
992
993 return 0;
994}
995
996
997static void hci_conn_encrypt(struct hci_conn *conn)
998{
999 BT_DBG("hcon %p", conn);
1000
1001 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
1002 struct hci_cp_set_conn_encrypt cp;
1003 cp.handle = cpu_to_le16(conn->handle);
1004 cp.encrypt = 0x01;
1005 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1006 &cp);
1007 }
1008}
1009
1010
1011int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
1012 bool initiator)
1013{
1014 BT_DBG("hcon %p", conn);
1015
1016 if (conn->type == LE_LINK)
1017 return smp_conn_security(conn, sec_level);
1018
1019
1020 if (sec_level == BT_SECURITY_SDP)
1021 return 1;
1022
1023
1024
1025 if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
1026 return 1;
1027
1028
1029 if (!test_bit(HCI_CONN_AUTH, &conn->flags))
1030 goto auth;
1031
1032
1033
1034 if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
1035 sec_level == BT_SECURITY_FIPS)
1036 goto encrypt;
1037
1038
1039
1040 if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
1041 conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
1042 sec_level == BT_SECURITY_HIGH)
1043 goto encrypt;
1044
1045
1046
1047 if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
1048 conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
1049 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
1050 goto encrypt;
1051
1052
1053
1054
1055
1056 if (conn->key_type == HCI_LK_COMBINATION &&
1057 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
1058 conn->pin_length == 16))
1059 goto encrypt;
1060
1061auth:
1062 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1063 return 0;
1064
1065 if (initiator)
1066 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
1067
1068 if (!hci_conn_auth(conn, sec_level, auth_type))
1069 return 0;
1070
1071encrypt:
1072 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1073 return 1;
1074
1075 hci_conn_encrypt(conn);
1076 return 0;
1077}
1078EXPORT_SYMBOL(hci_conn_security);
1079
1080
1081int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
1082{
1083 BT_DBG("hcon %p", conn);
1084
1085
1086 if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
1087 return 1;
1088
1089
1090 if (conn->sec_level == BT_SECURITY_HIGH ||
1091 conn->sec_level == BT_SECURITY_FIPS)
1092 return 1;
1093
1094
1095 return 0;
1096}
1097EXPORT_SYMBOL(hci_conn_check_secure);
1098
1099
1100int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
1101{
1102 BT_DBG("hcon %p", conn);
1103
1104 if (role == conn->role)
1105 return 1;
1106
1107 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
1108 struct hci_cp_switch_role cp;
1109 bacpy(&cp.bdaddr, &conn->dst);
1110 cp.role = role;
1111 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
1112 }
1113
1114 return 0;
1115}
1116EXPORT_SYMBOL(hci_conn_switch_role);
1117
1118
1119void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
1120{
1121 struct hci_dev *hdev = conn->hdev;
1122
1123 BT_DBG("hcon %p mode %d", conn, conn->mode);
1124
1125 if (conn->mode != HCI_CM_SNIFF)
1126 goto timer;
1127
1128 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
1129 goto timer;
1130
1131 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
1132 struct hci_cp_exit_sniff_mode cp;
1133 cp.handle = cpu_to_le16(conn->handle);
1134 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
1135 }
1136
1137timer:
1138 if (hdev->idle_timeout > 0)
1139 queue_delayed_work(hdev->workqueue, &conn->idle_work,
1140 msecs_to_jiffies(hdev->idle_timeout));
1141}
1142
1143
1144void hci_conn_hash_flush(struct hci_dev *hdev)
1145{
1146 struct hci_conn_hash *h = &hdev->conn_hash;
1147 struct hci_conn *c, *n;
1148
1149 BT_DBG("hdev %s", hdev->name);
1150
1151 list_for_each_entry_safe(c, n, &h->list, list) {
1152 c->state = BT_CLOSED;
1153
1154 hci_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1155 hci_conn_del(c);
1156 }
1157}
1158
1159
1160void hci_conn_check_pending(struct hci_dev *hdev)
1161{
1162 struct hci_conn *conn;
1163
1164 BT_DBG("hdev %s", hdev->name);
1165
1166 hci_dev_lock(hdev);
1167
1168 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
1169 if (conn)
1170 hci_acl_create_connection(conn);
1171
1172 hci_dev_unlock(hdev);
1173}
1174
1175static u32 get_link_mode(struct hci_conn *conn)
1176{
1177 u32 link_mode = 0;
1178
1179 if (conn->role == HCI_ROLE_MASTER)
1180 link_mode |= HCI_LM_MASTER;
1181
1182 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1183 link_mode |= HCI_LM_ENCRYPT;
1184
1185 if (test_bit(HCI_CONN_AUTH, &conn->flags))
1186 link_mode |= HCI_LM_AUTH;
1187
1188 if (test_bit(HCI_CONN_SECURE, &conn->flags))
1189 link_mode |= HCI_LM_SECURE;
1190
1191 if (test_bit(HCI_CONN_FIPS, &conn->flags))
1192 link_mode |= HCI_LM_FIPS;
1193
1194 return link_mode;
1195}
1196
1197int hci_get_conn_list(void __user *arg)
1198{
1199 struct hci_conn *c;
1200 struct hci_conn_list_req req, *cl;
1201 struct hci_conn_info *ci;
1202 struct hci_dev *hdev;
1203 int n = 0, size, err;
1204
1205 if (copy_from_user(&req, arg, sizeof(req)))
1206 return -EFAULT;
1207
1208 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
1209 return -EINVAL;
1210
1211 size = sizeof(req) + req.conn_num * sizeof(*ci);
1212
1213 cl = kmalloc(size, GFP_KERNEL);
1214 if (!cl)
1215 return -ENOMEM;
1216
1217 hdev = hci_dev_get(req.dev_id);
1218 if (!hdev) {
1219 kfree(cl);
1220 return -ENODEV;
1221 }
1222
1223 ci = cl->conn_info;
1224
1225 hci_dev_lock(hdev);
1226 list_for_each_entry(c, &hdev->conn_hash.list, list) {
1227 bacpy(&(ci + n)->bdaddr, &c->dst);
1228 (ci + n)->handle = c->handle;
1229 (ci + n)->type = c->type;
1230 (ci + n)->out = c->out;
1231 (ci + n)->state = c->state;
1232 (ci + n)->link_mode = get_link_mode(c);
1233 if (++n >= req.conn_num)
1234 break;
1235 }
1236 hci_dev_unlock(hdev);
1237
1238 cl->dev_id = hdev->id;
1239 cl->conn_num = n;
1240 size = sizeof(req) + n * sizeof(*ci);
1241
1242 hci_dev_put(hdev);
1243
1244 err = copy_to_user(arg, cl, size);
1245 kfree(cl);
1246
1247 return err ? -EFAULT : 0;
1248}
1249
1250int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
1251{
1252 struct hci_conn_info_req req;
1253 struct hci_conn_info ci;
1254 struct hci_conn *conn;
1255 char __user *ptr = arg + sizeof(req);
1256
1257 if (copy_from_user(&req, arg, sizeof(req)))
1258 return -EFAULT;
1259
1260 hci_dev_lock(hdev);
1261 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
1262 if (conn) {
1263 bacpy(&ci.bdaddr, &conn->dst);
1264 ci.handle = conn->handle;
1265 ci.type = conn->type;
1266 ci.out = conn->out;
1267 ci.state = conn->state;
1268 ci.link_mode = get_link_mode(conn);
1269 }
1270 hci_dev_unlock(hdev);
1271
1272 if (!conn)
1273 return -ENOENT;
1274
1275 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
1276}
1277
1278int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
1279{
1280 struct hci_auth_info_req req;
1281 struct hci_conn *conn;
1282
1283 if (copy_from_user(&req, arg, sizeof(req)))
1284 return -EFAULT;
1285
1286 hci_dev_lock(hdev);
1287 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
1288 if (conn)
1289 req.type = conn->auth_type;
1290 hci_dev_unlock(hdev);
1291
1292 if (!conn)
1293 return -ENOENT;
1294
1295 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
1296}
1297
1298struct hci_chan *hci_chan_create(struct hci_conn *conn)
1299{
1300 struct hci_dev *hdev = conn->hdev;
1301 struct hci_chan *chan;
1302
1303 BT_DBG("%s hcon %p", hdev->name, conn);
1304
1305 if (test_bit(HCI_CONN_DROP, &conn->flags)) {
1306 BT_DBG("Refusing to create new hci_chan");
1307 return NULL;
1308 }
1309
1310 chan = kzalloc(sizeof(*chan), GFP_KERNEL);
1311 if (!chan)
1312 return NULL;
1313
1314 chan->conn = hci_conn_get(conn);
1315 skb_queue_head_init(&chan->data_q);
1316 chan->state = BT_CONNECTED;
1317
1318 list_add_rcu(&chan->list, &conn->chan_list);
1319
1320 return chan;
1321}
1322
1323void hci_chan_del(struct hci_chan *chan)
1324{
1325 struct hci_conn *conn = chan->conn;
1326 struct hci_dev *hdev = conn->hdev;
1327
1328 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
1329
1330 list_del_rcu(&chan->list);
1331
1332 synchronize_rcu();
1333
1334
1335 set_bit(HCI_CONN_DROP, &conn->flags);
1336
1337 hci_conn_put(conn);
1338
1339 skb_queue_purge(&chan->data_q);
1340 kfree(chan);
1341}
1342
1343void hci_chan_list_flush(struct hci_conn *conn)
1344{
1345 struct hci_chan *chan, *n;
1346
1347 BT_DBG("hcon %p", conn);
1348
1349 list_for_each_entry_safe(chan, n, &conn->chan_list, list)
1350 hci_chan_del(chan);
1351}
1352
1353static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
1354 __u16 handle)
1355{
1356 struct hci_chan *hchan;
1357
1358 list_for_each_entry(hchan, &hcon->chan_list, list) {
1359 if (hchan->handle == handle)
1360 return hchan;
1361 }
1362
1363 return NULL;
1364}
1365
1366struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1367{
1368 struct hci_conn_hash *h = &hdev->conn_hash;
1369 struct hci_conn *hcon;
1370 struct hci_chan *hchan = NULL;
1371
1372 rcu_read_lock();
1373
1374 list_for_each_entry_rcu(hcon, &h->list, list) {
1375 hchan = __hci_chan_lookup_handle(hcon, handle);
1376 if (hchan)
1377 break;
1378 }
1379
1380 rcu_read_unlock();
1381
1382 return hchan;
1383}
1384