Bluetooth: Look up RPA for connection requests with Identity Address
[pandora-kernel.git] / net / bluetooth / hci_conn.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
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
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI connection handling. */
26
27 #include <linux/export.h>
28
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31
32 #include "smp.h"
33 #include "a2mp.h"
34
35 struct sco_param {
36         u16 pkt_type;
37         u16 max_latency;
38 };
39
40 static const struct sco_param sco_param_cvsd[] = {
41         { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a }, /* S3 */
42         { EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007 }, /* S2 */
43         { EDR_ESCO_MASK | ESCO_EV3,   0x0007 }, /* S1 */
44         { EDR_ESCO_MASK | ESCO_HV3,   0xffff }, /* D1 */
45         { EDR_ESCO_MASK | ESCO_HV1,   0xffff }, /* D0 */
46 };
47
48 static const struct sco_param sco_param_wideband[] = {
49         { EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d }, /* T2 */
50         { EDR_ESCO_MASK | ESCO_EV3,   0x0008 }, /* T1 */
51 };
52
53 static void hci_le_create_connection_cancel(struct hci_conn *conn)
54 {
55         hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
56 }
57
58 static void hci_acl_create_connection(struct hci_conn *conn)
59 {
60         struct hci_dev *hdev = conn->hdev;
61         struct inquiry_entry *ie;
62         struct hci_cp_create_conn cp;
63
64         BT_DBG("hcon %p", conn);
65
66         conn->state = BT_CONNECT;
67         conn->out = true;
68
69         conn->link_mode = HCI_LM_MASTER;
70
71         conn->attempt++;
72
73         conn->link_policy = hdev->link_policy;
74
75         memset(&cp, 0, sizeof(cp));
76         bacpy(&cp.bdaddr, &conn->dst);
77         cp.pscan_rep_mode = 0x02;
78
79         ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
80         if (ie) {
81                 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
82                         cp.pscan_rep_mode = ie->data.pscan_rep_mode;
83                         cp.pscan_mode     = ie->data.pscan_mode;
84                         cp.clock_offset   = ie->data.clock_offset |
85                                             __constant_cpu_to_le16(0x8000);
86                 }
87
88                 memcpy(conn->dev_class, ie->data.dev_class, 3);
89                 if (ie->data.ssp_mode > 0)
90                         set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
91         }
92
93         cp.pkt_type = cpu_to_le16(conn->pkt_type);
94         if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
95                 cp.role_switch = 0x01;
96         else
97                 cp.role_switch = 0x00;
98
99         hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
100 }
101
102 static void hci_acl_create_connection_cancel(struct hci_conn *conn)
103 {
104         struct hci_cp_create_conn_cancel cp;
105
106         BT_DBG("hcon %p", conn);
107
108         if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
109                 return;
110
111         bacpy(&cp.bdaddr, &conn->dst);
112         hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
113 }
114
115 static void hci_reject_sco(struct hci_conn *conn)
116 {
117         struct hci_cp_reject_sync_conn_req cp;
118
119         cp.reason = HCI_ERROR_REMOTE_USER_TERM;
120         bacpy(&cp.bdaddr, &conn->dst);
121
122         hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);
123 }
124
125 void hci_disconnect(struct hci_conn *conn, __u8 reason)
126 {
127         struct hci_cp_disconnect cp;
128
129         BT_DBG("hcon %p", conn);
130
131         conn->state = BT_DISCONN;
132
133         cp.handle = cpu_to_le16(conn->handle);
134         cp.reason = reason;
135         hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
136 }
137
138 static void hci_amp_disconn(struct hci_conn *conn, __u8 reason)
139 {
140         struct hci_cp_disconn_phy_link cp;
141
142         BT_DBG("hcon %p", conn);
143
144         conn->state = BT_DISCONN;
145
146         cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
147         cp.reason = reason;
148         hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
149                      sizeof(cp), &cp);
150 }
151
152 static void hci_add_sco(struct hci_conn *conn, __u16 handle)
153 {
154         struct hci_dev *hdev = conn->hdev;
155         struct hci_cp_add_sco cp;
156
157         BT_DBG("hcon %p", conn);
158
159         conn->state = BT_CONNECT;
160         conn->out = true;
161
162         conn->attempt++;
163
164         cp.handle   = cpu_to_le16(handle);
165         cp.pkt_type = cpu_to_le16(conn->pkt_type);
166
167         hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
168 }
169
170 bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
171 {
172         struct hci_dev *hdev = conn->hdev;
173         struct hci_cp_setup_sync_conn cp;
174         const struct sco_param *param;
175
176         BT_DBG("hcon %p", conn);
177
178         conn->state = BT_CONNECT;
179         conn->out = true;
180
181         conn->attempt++;
182
183         cp.handle   = cpu_to_le16(handle);
184
185         cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
186         cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
187         cp.voice_setting  = cpu_to_le16(conn->setting);
188
189         switch (conn->setting & SCO_AIRMODE_MASK) {
190         case SCO_AIRMODE_TRANSP:
191                 if (conn->attempt > ARRAY_SIZE(sco_param_wideband))
192                         return false;
193                 cp.retrans_effort = 0x02;
194                 param = &sco_param_wideband[conn->attempt - 1];
195                 break;
196         case SCO_AIRMODE_CVSD:
197                 if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
198                         return false;
199                 cp.retrans_effort = 0x01;
200                 param = &sco_param_cvsd[conn->attempt - 1];
201                 break;
202         default:
203                 return false;
204         }
205
206         cp.pkt_type = __cpu_to_le16(param->pkt_type);
207         cp.max_latency = __cpu_to_le16(param->max_latency);
208
209         if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
210                 return false;
211
212         return true;
213 }
214
215 void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
216                         u16 latency, u16 to_multiplier)
217 {
218         struct hci_cp_le_conn_update cp;
219         struct hci_dev *hdev = conn->hdev;
220
221         memset(&cp, 0, sizeof(cp));
222
223         cp.handle               = cpu_to_le16(conn->handle);
224         cp.conn_interval_min    = cpu_to_le16(min);
225         cp.conn_interval_max    = cpu_to_le16(max);
226         cp.conn_latency         = cpu_to_le16(latency);
227         cp.supervision_timeout  = cpu_to_le16(to_multiplier);
228         cp.min_ce_len           = __constant_cpu_to_le16(0x0001);
229         cp.max_ce_len           = __constant_cpu_to_le16(0x0001);
230
231         hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
232 }
233
234 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
235                       __u8 ltk[16])
236 {
237         struct hci_dev *hdev = conn->hdev;
238         struct hci_cp_le_start_enc cp;
239
240         BT_DBG("hcon %p", conn);
241
242         memset(&cp, 0, sizeof(cp));
243
244         cp.handle = cpu_to_le16(conn->handle);
245         memcpy(cp.ltk, ltk, sizeof(cp.ltk));
246         cp.ediv = ediv;
247         memcpy(cp.rand, rand, sizeof(cp.rand));
248
249         hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
250 }
251
252 /* Device _must_ be locked */
253 void hci_sco_setup(struct hci_conn *conn, __u8 status)
254 {
255         struct hci_conn *sco = conn->link;
256
257         if (!sco)
258                 return;
259
260         BT_DBG("hcon %p", conn);
261
262         if (!status) {
263                 if (lmp_esco_capable(conn->hdev))
264                         hci_setup_sync(sco, conn->handle);
265                 else
266                         hci_add_sco(sco, conn->handle);
267         } else {
268                 hci_proto_connect_cfm(sco, status);
269                 hci_conn_del(sco);
270         }
271 }
272
273 static void hci_conn_disconnect(struct hci_conn *conn)
274 {
275         __u8 reason = hci_proto_disconn_ind(conn);
276
277         switch (conn->type) {
278         case AMP_LINK:
279                 hci_amp_disconn(conn, reason);
280                 break;
281         default:
282                 hci_disconnect(conn, reason);
283                 break;
284         }
285 }
286
287 static void hci_conn_timeout(struct work_struct *work)
288 {
289         struct hci_conn *conn = container_of(work, struct hci_conn,
290                                              disc_work.work);
291
292         BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
293
294         if (atomic_read(&conn->refcnt))
295                 return;
296
297         switch (conn->state) {
298         case BT_CONNECT:
299         case BT_CONNECT2:
300                 if (conn->out) {
301                         if (conn->type == ACL_LINK)
302                                 hci_acl_create_connection_cancel(conn);
303                         else if (conn->type == LE_LINK)
304                                 hci_le_create_connection_cancel(conn);
305                 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
306                         hci_reject_sco(conn);
307                 }
308                 break;
309         case BT_CONFIG:
310         case BT_CONNECTED:
311                 hci_conn_disconnect(conn);
312                 break;
313         default:
314                 conn->state = BT_CLOSED;
315                 break;
316         }
317 }
318
319 /* Enter sniff mode */
320 static void hci_conn_idle(struct work_struct *work)
321 {
322         struct hci_conn *conn = container_of(work, struct hci_conn,
323                                              idle_work.work);
324         struct hci_dev *hdev = conn->hdev;
325
326         BT_DBG("hcon %p mode %d", conn, conn->mode);
327
328         if (test_bit(HCI_RAW, &hdev->flags))
329                 return;
330
331         if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
332                 return;
333
334         if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
335                 return;
336
337         if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
338                 struct hci_cp_sniff_subrate cp;
339                 cp.handle             = cpu_to_le16(conn->handle);
340                 cp.max_latency        = __constant_cpu_to_le16(0);
341                 cp.min_remote_timeout = __constant_cpu_to_le16(0);
342                 cp.min_local_timeout  = __constant_cpu_to_le16(0);
343                 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
344         }
345
346         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
347                 struct hci_cp_sniff_mode cp;
348                 cp.handle       = cpu_to_le16(conn->handle);
349                 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
350                 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
351                 cp.attempt      = __constant_cpu_to_le16(4);
352                 cp.timeout      = __constant_cpu_to_le16(1);
353                 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
354         }
355 }
356
357 static void hci_conn_auto_accept(struct work_struct *work)
358 {
359         struct hci_conn *conn = container_of(work, struct hci_conn,
360                                              auto_accept_work.work);
361
362         hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
363                      &conn->dst);
364 }
365
366 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
367 {
368         struct hci_conn *conn;
369
370         BT_DBG("%s dst %pMR", hdev->name, dst);
371
372         conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
373         if (!conn)
374                 return NULL;
375
376         bacpy(&conn->dst, dst);
377         bacpy(&conn->src, &hdev->bdaddr);
378         conn->hdev  = hdev;
379         conn->type  = type;
380         conn->mode  = HCI_CM_ACTIVE;
381         conn->state = BT_OPEN;
382         conn->auth_type = HCI_AT_GENERAL_BONDING;
383         conn->io_capability = hdev->io_capability;
384         conn->remote_auth = 0xff;
385         conn->key_type = 0xff;
386
387         set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
388         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
389
390         switch (type) {
391         case ACL_LINK:
392                 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
393                 break;
394         case SCO_LINK:
395                 if (lmp_esco_capable(hdev))
396                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
397                                         (hdev->esco_type & EDR_ESCO_MASK);
398                 else
399                         conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
400                 break;
401         case ESCO_LINK:
402                 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
403                 break;
404         }
405
406         skb_queue_head_init(&conn->data_q);
407
408         INIT_LIST_HEAD(&conn->chan_list);
409
410         INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
411         INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
412         INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
413
414         atomic_set(&conn->refcnt, 0);
415
416         hci_dev_hold(hdev);
417
418         hci_conn_hash_add(hdev, conn);
419         if (hdev->notify)
420                 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
421
422         hci_conn_init_sysfs(conn);
423
424         return conn;
425 }
426
427 int hci_conn_del(struct hci_conn *conn)
428 {
429         struct hci_dev *hdev = conn->hdev;
430
431         BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
432
433         cancel_delayed_work_sync(&conn->disc_work);
434         cancel_delayed_work_sync(&conn->auto_accept_work);
435         cancel_delayed_work_sync(&conn->idle_work);
436
437         if (conn->type == ACL_LINK) {
438                 struct hci_conn *sco = conn->link;
439                 if (sco)
440                         sco->link = NULL;
441
442                 /* Unacked frames */
443                 hdev->acl_cnt += conn->sent;
444         } else if (conn->type == LE_LINK) {
445                 if (hdev->le_pkts)
446                         hdev->le_cnt += conn->sent;
447                 else
448                         hdev->acl_cnt += conn->sent;
449         } else {
450                 struct hci_conn *acl = conn->link;
451                 if (acl) {
452                         acl->link = NULL;
453                         hci_conn_drop(acl);
454                 }
455         }
456
457         hci_chan_list_flush(conn);
458
459         if (conn->amp_mgr)
460                 amp_mgr_put(conn->amp_mgr);
461
462         hci_conn_hash_del(hdev, conn);
463         if (hdev->notify)
464                 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
465
466         skb_queue_purge(&conn->data_q);
467
468         hci_conn_del_sysfs(conn);
469
470         hci_dev_put(hdev);
471
472         hci_conn_put(conn);
473
474         return 0;
475 }
476
477 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
478 {
479         int use_src = bacmp(src, BDADDR_ANY);
480         struct hci_dev *hdev = NULL, *d;
481
482         BT_DBG("%pMR -> %pMR", src, dst);
483
484         read_lock(&hci_dev_list_lock);
485
486         list_for_each_entry(d, &hci_dev_list, list) {
487                 if (!test_bit(HCI_UP, &d->flags) ||
488                     test_bit(HCI_RAW, &d->flags) ||
489                     test_bit(HCI_USER_CHANNEL, &d->dev_flags) ||
490                     d->dev_type != HCI_BREDR)
491                         continue;
492
493                 /* Simple routing:
494                  *   No source address - find interface with bdaddr != dst
495                  *   Source address    - find interface with bdaddr == src
496                  */
497
498                 if (use_src) {
499                         if (!bacmp(&d->bdaddr, src)) {
500                                 hdev = d; break;
501                         }
502                 } else {
503                         if (bacmp(&d->bdaddr, dst)) {
504                                 hdev = d; break;
505                         }
506                 }
507         }
508
509         if (hdev)
510                 hdev = hci_dev_hold(hdev);
511
512         read_unlock(&hci_dev_list_lock);
513         return hdev;
514 }
515 EXPORT_SYMBOL(hci_get_route);
516
517 /* This function requires the caller holds hdev->lock */
518 static void le_conn_failed(struct hci_conn *conn, u8 status)
519 {
520         struct hci_dev *hdev = conn->hdev;
521
522         conn->state = BT_CLOSED;
523
524         mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type,
525                             status);
526
527         hci_proto_connect_cfm(conn, status);
528
529         hci_conn_del(conn);
530 }
531
532 static void create_le_conn_complete(struct hci_dev *hdev, u8 status)
533 {
534         struct hci_conn *conn;
535
536         if (status == 0)
537                 return;
538
539         BT_ERR("HCI request failed to create LE connection: status 0x%2.2x",
540                status);
541
542         hci_dev_lock(hdev);
543
544         conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
545         if (!conn)
546                 goto done;
547
548         le_conn_failed(conn, status);
549
550 done:
551         hci_dev_unlock(hdev);
552 }
553
554 static int hci_create_le_conn(struct hci_conn *conn)
555 {
556         struct hci_dev *hdev = conn->hdev;
557         struct hci_cp_le_create_conn cp;
558         struct hci_request req;
559         int err;
560
561         hci_req_init(&req, hdev);
562
563         memset(&cp, 0, sizeof(cp));
564         cp.scan_interval = cpu_to_le16(hdev->le_scan_interval);
565         cp.scan_window = cpu_to_le16(hdev->le_scan_window);
566         bacpy(&cp.peer_addr, &conn->dst);
567         cp.peer_addr_type = conn->dst_type;
568         cp.own_address_type = conn->src_type;
569         cp.conn_interval_min = cpu_to_le16(conn->le_conn_min_interval);
570         cp.conn_interval_max = cpu_to_le16(conn->le_conn_max_interval);
571         cp.supervision_timeout = __constant_cpu_to_le16(0x002a);
572         cp.min_ce_len = __constant_cpu_to_le16(0x0000);
573         cp.max_ce_len = __constant_cpu_to_le16(0x0000);
574
575         hci_req_add(&req, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
576
577         err = hci_req_run(&req, create_le_conn_complete);
578         if (err) {
579                 hci_conn_del(conn);
580                 return err;
581         }
582
583         return 0;
584 }
585
586 static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
587                                     u8 dst_type, u8 sec_level, u8 auth_type)
588 {
589         struct hci_conn_params *params;
590         struct hci_conn *conn;
591         struct smp_irk *irk;
592         int err;
593
594         if (test_bit(HCI_ADVERTISING, &hdev->flags))
595                 return ERR_PTR(-ENOTSUPP);
596
597         /* Some devices send ATT messages as soon as the physical link is
598          * established. To be able to handle these ATT messages, the user-
599          * space first establishes the connection and then starts the pairing
600          * process.
601          *
602          * So if a hci_conn object already exists for the following connection
603          * attempt, we simply update pending_sec_level and auth_type fields
604          * and return the object found.
605          */
606         conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
607         if (conn) {
608                 conn->pending_sec_level = sec_level;
609                 conn->auth_type = auth_type;
610                 goto done;
611         }
612
613         /* Since the controller supports only one LE connection attempt at a
614          * time, we return -EBUSY if there is any connection attempt running.
615          */
616         conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
617         if (conn)
618                 return ERR_PTR(-EBUSY);
619
620         /* Convert from L2CAP channel address type to HCI address type */
621         if (dst_type == BDADDR_LE_PUBLIC)
622                 dst_type = ADDR_LE_DEV_PUBLIC;
623         else
624                 dst_type = ADDR_LE_DEV_RANDOM;
625
626         irk = hci_find_irk_by_addr(hdev, dst, dst_type);
627         if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
628                 dst = &irk->rpa;
629                 dst_type = ADDR_LE_DEV_RANDOM;
630         }
631
632         conn = hci_conn_add(hdev, LE_LINK, dst);
633         if (!conn)
634                 return ERR_PTR(-ENOMEM);
635
636         conn->dst_type = dst_type;
637         conn->src_type = hdev->own_addr_type;
638
639         conn->state = BT_CONNECT;
640         conn->out = true;
641         conn->link_mode |= HCI_LM_MASTER;
642         conn->sec_level = BT_SECURITY_LOW;
643         conn->pending_sec_level = sec_level;
644         conn->auth_type = auth_type;
645
646         params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
647         if (params) {
648                 conn->le_conn_min_interval = params->conn_min_interval;
649                 conn->le_conn_max_interval = params->conn_max_interval;
650         } else {
651                 conn->le_conn_min_interval = hdev->le_conn_min_interval;
652                 conn->le_conn_max_interval = hdev->le_conn_max_interval;
653         }
654
655         err = hci_create_le_conn(conn);
656         if (err)
657                 return ERR_PTR(err);
658
659 done:
660         hci_conn_hold(conn);
661         return conn;
662 }
663
664 static struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
665                                                 u8 sec_level, u8 auth_type)
666 {
667         struct hci_conn *acl;
668
669         if (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags))
670                 return ERR_PTR(-ENOTSUPP);
671
672         acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
673         if (!acl) {
674                 acl = hci_conn_add(hdev, ACL_LINK, dst);
675                 if (!acl)
676                         return ERR_PTR(-ENOMEM);
677         }
678
679         hci_conn_hold(acl);
680
681         if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
682                 acl->sec_level = BT_SECURITY_LOW;
683                 acl->pending_sec_level = sec_level;
684                 acl->auth_type = auth_type;
685                 hci_acl_create_connection(acl);
686         }
687
688         return acl;
689 }
690
691 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
692                                  __u16 setting)
693 {
694         struct hci_conn *acl;
695         struct hci_conn *sco;
696
697         acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
698         if (IS_ERR(acl))
699                 return acl;
700
701         sco = hci_conn_hash_lookup_ba(hdev, type, dst);
702         if (!sco) {
703                 sco = hci_conn_add(hdev, type, dst);
704                 if (!sco) {
705                         hci_conn_drop(acl);
706                         return ERR_PTR(-ENOMEM);
707                 }
708         }
709
710         acl->link = sco;
711         sco->link = acl;
712
713         hci_conn_hold(sco);
714
715         sco->setting = setting;
716
717         if (acl->state == BT_CONNECTED &&
718             (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
719                 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
720                 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
721
722                 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
723                         /* defer SCO setup until mode change completed */
724                         set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
725                         return sco;
726                 }
727
728                 hci_sco_setup(acl, 0x00);
729         }
730
731         return sco;
732 }
733
734 /* Create SCO, ACL or LE connection. */
735 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
736                              __u8 dst_type, __u8 sec_level, __u8 auth_type)
737 {
738         BT_DBG("%s dst %pMR type 0x%x", hdev->name, dst, type);
739
740         switch (type) {
741         case LE_LINK:
742                 return hci_connect_le(hdev, dst, dst_type, sec_level, auth_type);
743         case ACL_LINK:
744                 return hci_connect_acl(hdev, dst, sec_level, auth_type);
745         }
746
747         return ERR_PTR(-EINVAL);
748 }
749
750 /* Check link security requirement */
751 int hci_conn_check_link_mode(struct hci_conn *conn)
752 {
753         BT_DBG("hcon %p", conn);
754
755         if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
756                 return 0;
757
758         return 1;
759 }
760
761 /* Authenticate remote device */
762 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
763 {
764         BT_DBG("hcon %p", conn);
765
766         if (conn->pending_sec_level > sec_level)
767                 sec_level = conn->pending_sec_level;
768
769         if (sec_level > conn->sec_level)
770                 conn->pending_sec_level = sec_level;
771         else if (conn->link_mode & HCI_LM_AUTH)
772                 return 1;
773
774         /* Make sure we preserve an existing MITM requirement*/
775         auth_type |= (conn->auth_type & 0x01);
776
777         conn->auth_type = auth_type;
778
779         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
780                 struct hci_cp_auth_requested cp;
781
782                 /* encrypt must be pending if auth is also pending */
783                 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
784
785                 cp.handle = cpu_to_le16(conn->handle);
786                 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
787                              sizeof(cp), &cp);
788                 if (conn->key_type != 0xff)
789                         set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
790         }
791
792         return 0;
793 }
794
795 /* Encrypt the the link */
796 static void hci_conn_encrypt(struct hci_conn *conn)
797 {
798         BT_DBG("hcon %p", conn);
799
800         if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
801                 struct hci_cp_set_conn_encrypt cp;
802                 cp.handle  = cpu_to_le16(conn->handle);
803                 cp.encrypt = 0x01;
804                 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
805                              &cp);
806         }
807 }
808
809 /* Enable security */
810 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
811 {
812         BT_DBG("hcon %p", conn);
813
814         if (conn->type == LE_LINK)
815                 return smp_conn_security(conn, sec_level);
816
817         /* For sdp we don't need the link key. */
818         if (sec_level == BT_SECURITY_SDP)
819                 return 1;
820
821         /* For non 2.1 devices and low security level we don't need the link
822            key. */
823         if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
824                 return 1;
825
826         /* For other security levels we need the link key. */
827         if (!(conn->link_mode & HCI_LM_AUTH))
828                 goto auth;
829
830         /* An authenticated FIPS approved combination key has sufficient
831          * security for security level 4. */
832         if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
833             sec_level == BT_SECURITY_FIPS)
834                 goto encrypt;
835
836         /* An authenticated combination key has sufficient security for
837            security level 3. */
838         if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
839              conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
840             sec_level == BT_SECURITY_HIGH)
841                 goto encrypt;
842
843         /* An unauthenticated combination key has sufficient security for
844            security level 1 and 2. */
845         if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
846              conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
847             (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
848                 goto encrypt;
849
850         /* A combination key has always sufficient security for the security
851            levels 1 or 2. High security level requires the combination key
852            is generated using maximum PIN code length (16).
853            For pre 2.1 units. */
854         if (conn->key_type == HCI_LK_COMBINATION &&
855             (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
856              conn->pin_length == 16))
857                 goto encrypt;
858
859 auth:
860         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
861                 return 0;
862
863         if (!hci_conn_auth(conn, sec_level, auth_type))
864                 return 0;
865
866 encrypt:
867         if (conn->link_mode & HCI_LM_ENCRYPT)
868                 return 1;
869
870         hci_conn_encrypt(conn);
871         return 0;
872 }
873 EXPORT_SYMBOL(hci_conn_security);
874
875 /* Check secure link requirement */
876 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
877 {
878         BT_DBG("hcon %p", conn);
879
880         /* Accept if non-secure or higher security level is required */
881         if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
882                 return 1;
883
884         /* Accept if secure or higher security level is already present */
885         if (conn->sec_level == BT_SECURITY_HIGH ||
886             conn->sec_level == BT_SECURITY_FIPS)
887                 return 1;
888
889         /* Reject not secure link */
890         return 0;
891 }
892 EXPORT_SYMBOL(hci_conn_check_secure);
893
894 /* Change link key */
895 int hci_conn_change_link_key(struct hci_conn *conn)
896 {
897         BT_DBG("hcon %p", conn);
898
899         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
900                 struct hci_cp_change_conn_link_key cp;
901                 cp.handle = cpu_to_le16(conn->handle);
902                 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
903                              sizeof(cp), &cp);
904         }
905
906         return 0;
907 }
908
909 /* Switch role */
910 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
911 {
912         BT_DBG("hcon %p", conn);
913
914         if (!role && conn->link_mode & HCI_LM_MASTER)
915                 return 1;
916
917         if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
918                 struct hci_cp_switch_role cp;
919                 bacpy(&cp.bdaddr, &conn->dst);
920                 cp.role = role;
921                 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
922         }
923
924         return 0;
925 }
926 EXPORT_SYMBOL(hci_conn_switch_role);
927
928 /* Enter active mode */
929 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
930 {
931         struct hci_dev *hdev = conn->hdev;
932
933         BT_DBG("hcon %p mode %d", conn, conn->mode);
934
935         if (test_bit(HCI_RAW, &hdev->flags))
936                 return;
937
938         if (conn->mode != HCI_CM_SNIFF)
939                 goto timer;
940
941         if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
942                 goto timer;
943
944         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
945                 struct hci_cp_exit_sniff_mode cp;
946                 cp.handle = cpu_to_le16(conn->handle);
947                 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
948         }
949
950 timer:
951         if (hdev->idle_timeout > 0)
952                 queue_delayed_work(hdev->workqueue, &conn->idle_work,
953                                    msecs_to_jiffies(hdev->idle_timeout));
954 }
955
956 /* Drop all connection on the device */
957 void hci_conn_hash_flush(struct hci_dev *hdev)
958 {
959         struct hci_conn_hash *h = &hdev->conn_hash;
960         struct hci_conn *c, *n;
961
962         BT_DBG("hdev %s", hdev->name);
963
964         list_for_each_entry_safe(c, n, &h->list, list) {
965                 c->state = BT_CLOSED;
966
967                 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
968                 hci_conn_del(c);
969         }
970 }
971
972 /* Check pending connect attempts */
973 void hci_conn_check_pending(struct hci_dev *hdev)
974 {
975         struct hci_conn *conn;
976
977         BT_DBG("hdev %s", hdev->name);
978
979         hci_dev_lock(hdev);
980
981         conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
982         if (conn)
983                 hci_acl_create_connection(conn);
984
985         hci_dev_unlock(hdev);
986 }
987
988 int hci_get_conn_list(void __user *arg)
989 {
990         struct hci_conn *c;
991         struct hci_conn_list_req req, *cl;
992         struct hci_conn_info *ci;
993         struct hci_dev *hdev;
994         int n = 0, size, err;
995
996         if (copy_from_user(&req, arg, sizeof(req)))
997                 return -EFAULT;
998
999         if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
1000                 return -EINVAL;
1001
1002         size = sizeof(req) + req.conn_num * sizeof(*ci);
1003
1004         cl = kmalloc(size, GFP_KERNEL);
1005         if (!cl)
1006                 return -ENOMEM;
1007
1008         hdev = hci_dev_get(req.dev_id);
1009         if (!hdev) {
1010                 kfree(cl);
1011                 return -ENODEV;
1012         }
1013
1014         ci = cl->conn_info;
1015
1016         hci_dev_lock(hdev);
1017         list_for_each_entry(c, &hdev->conn_hash.list, list) {
1018                 bacpy(&(ci + n)->bdaddr, &c->dst);
1019                 (ci + n)->handle = c->handle;
1020                 (ci + n)->type  = c->type;
1021                 (ci + n)->out   = c->out;
1022                 (ci + n)->state = c->state;
1023                 (ci + n)->link_mode = c->link_mode;
1024                 if (++n >= req.conn_num)
1025                         break;
1026         }
1027         hci_dev_unlock(hdev);
1028
1029         cl->dev_id = hdev->id;
1030         cl->conn_num = n;
1031         size = sizeof(req) + n * sizeof(*ci);
1032
1033         hci_dev_put(hdev);
1034
1035         err = copy_to_user(arg, cl, size);
1036         kfree(cl);
1037
1038         return err ? -EFAULT : 0;
1039 }
1040
1041 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
1042 {
1043         struct hci_conn_info_req req;
1044         struct hci_conn_info ci;
1045         struct hci_conn *conn;
1046         char __user *ptr = arg + sizeof(req);
1047
1048         if (copy_from_user(&req, arg, sizeof(req)))
1049                 return -EFAULT;
1050
1051         hci_dev_lock(hdev);
1052         conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
1053         if (conn) {
1054                 bacpy(&ci.bdaddr, &conn->dst);
1055                 ci.handle = conn->handle;
1056                 ci.type  = conn->type;
1057                 ci.out   = conn->out;
1058                 ci.state = conn->state;
1059                 ci.link_mode = conn->link_mode;
1060         }
1061         hci_dev_unlock(hdev);
1062
1063         if (!conn)
1064                 return -ENOENT;
1065
1066         return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
1067 }
1068
1069 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
1070 {
1071         struct hci_auth_info_req req;
1072         struct hci_conn *conn;
1073
1074         if (copy_from_user(&req, arg, sizeof(req)))
1075                 return -EFAULT;
1076
1077         hci_dev_lock(hdev);
1078         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
1079         if (conn)
1080                 req.type = conn->auth_type;
1081         hci_dev_unlock(hdev);
1082
1083         if (!conn)
1084                 return -ENOENT;
1085
1086         return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
1087 }
1088
1089 struct hci_chan *hci_chan_create(struct hci_conn *conn)
1090 {
1091         struct hci_dev *hdev = conn->hdev;
1092         struct hci_chan *chan;
1093
1094         BT_DBG("%s hcon %p", hdev->name, conn);
1095
1096         chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
1097         if (!chan)
1098                 return NULL;
1099
1100         chan->conn = conn;
1101         skb_queue_head_init(&chan->data_q);
1102         chan->state = BT_CONNECTED;
1103
1104         list_add_rcu(&chan->list, &conn->chan_list);
1105
1106         return chan;
1107 }
1108
1109 void hci_chan_del(struct hci_chan *chan)
1110 {
1111         struct hci_conn *conn = chan->conn;
1112         struct hci_dev *hdev = conn->hdev;
1113
1114         BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
1115
1116         list_del_rcu(&chan->list);
1117
1118         synchronize_rcu();
1119
1120         hci_conn_drop(conn);
1121
1122         skb_queue_purge(&chan->data_q);
1123         kfree(chan);
1124 }
1125
1126 void hci_chan_list_flush(struct hci_conn *conn)
1127 {
1128         struct hci_chan *chan, *n;
1129
1130         BT_DBG("hcon %p", conn);
1131
1132         list_for_each_entry_safe(chan, n, &conn->chan_list, list)
1133                 hci_chan_del(chan);
1134 }
1135
1136 static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
1137                                                  __u16 handle)
1138 {
1139         struct hci_chan *hchan;
1140
1141         list_for_each_entry(hchan, &hcon->chan_list, list) {
1142                 if (hchan->handle == handle)
1143                         return hchan;
1144         }
1145
1146         return NULL;
1147 }
1148
1149 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1150 {
1151         struct hci_conn_hash *h = &hdev->conn_hash;
1152         struct hci_conn *hcon;
1153         struct hci_chan *hchan = NULL;
1154
1155         rcu_read_lock();
1156
1157         list_for_each_entry_rcu(hcon, &h->list, list) {
1158                 hchan = __hci_chan_lookup_handle(hcon, handle);
1159                 if (hchan)
1160                         break;
1161         }
1162
1163         rcu_read_unlock();
1164
1165         return hchan;
1166 }