2 BlueZ - Bluetooth protocol stack for Linux
4 Copyright (C) 2010 Nokia Corporation
5 Copyright (C) 2011-2012 Intel Corporation
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth HCI Management interface */
27 #include <linux/kernel.h>
28 #include <linux/uaccess.h>
29 #include <linux/module.h>
30 #include <asm/unaligned.h>
32 #include <net/bluetooth/bluetooth.h>
33 #include <net/bluetooth/hci_core.h>
34 #include <net/bluetooth/mgmt.h>
35 #include <net/bluetooth/smp.h>
37 #define MGMT_VERSION 0
38 #define MGMT_REVISION 1
40 static const u16 mgmt_commands
[] = {
41 MGMT_OP_READ_INDEX_LIST
,
44 MGMT_OP_SET_DISCOVERABLE
,
45 MGMT_OP_SET_CONNECTABLE
,
46 MGMT_OP_SET_FAST_CONNECTABLE
,
48 MGMT_OP_SET_LINK_SECURITY
,
52 MGMT_OP_SET_DEV_CLASS
,
53 MGMT_OP_SET_LOCAL_NAME
,
56 MGMT_OP_LOAD_LINK_KEYS
,
57 MGMT_OP_LOAD_LONG_TERM_KEYS
,
59 MGMT_OP_GET_CONNECTIONS
,
60 MGMT_OP_PIN_CODE_REPLY
,
61 MGMT_OP_PIN_CODE_NEG_REPLY
,
62 MGMT_OP_SET_IO_CAPABILITY
,
64 MGMT_OP_CANCEL_PAIR_DEVICE
,
65 MGMT_OP_UNPAIR_DEVICE
,
66 MGMT_OP_USER_CONFIRM_REPLY
,
67 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
68 MGMT_OP_USER_PASSKEY_REPLY
,
69 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
70 MGMT_OP_READ_LOCAL_OOB_DATA
,
71 MGMT_OP_ADD_REMOTE_OOB_DATA
,
72 MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
73 MGMT_OP_START_DISCOVERY
,
74 MGMT_OP_STOP_DISCOVERY
,
77 MGMT_OP_UNBLOCK_DEVICE
,
80 static const u16 mgmt_events
[] = {
81 MGMT_EV_CONTROLLER_ERROR
,
83 MGMT_EV_INDEX_REMOVED
,
85 MGMT_EV_CLASS_OF_DEV_CHANGED
,
86 MGMT_EV_LOCAL_NAME_CHANGED
,
88 MGMT_EV_NEW_LONG_TERM_KEY
,
89 MGMT_EV_DEVICE_CONNECTED
,
90 MGMT_EV_DEVICE_DISCONNECTED
,
91 MGMT_EV_CONNECT_FAILED
,
92 MGMT_EV_PIN_CODE_REQUEST
,
93 MGMT_EV_USER_CONFIRM_REQUEST
,
94 MGMT_EV_USER_PASSKEY_REQUEST
,
98 MGMT_EV_DEVICE_BLOCKED
,
99 MGMT_EV_DEVICE_UNBLOCKED
,
100 MGMT_EV_DEVICE_UNPAIRED
,
104 * These LE scan and inquiry parameters were chosen according to LE General
105 * Discovery Procedure specification.
107 #define LE_SCAN_TYPE 0x01
108 #define LE_SCAN_WIN 0x12
109 #define LE_SCAN_INT 0x12
110 #define LE_SCAN_TIMEOUT_LE_ONLY 10240 /* TGAP(gen_disc_scan_min) */
112 #define INQUIRY_LEN_BREDR 0x08 /* TGAP(100) */
114 #define SERVICE_CACHE_TIMEOUT (5 * 1000)
117 struct list_head list
;
125 /* HCI to MGMT error code conversion table */
126 static u8 mgmt_status_table
[] = {
128 MGMT_STATUS_UNKNOWN_COMMAND
, /* Unknown Command */
129 MGMT_STATUS_NOT_CONNECTED
, /* No Connection */
130 MGMT_STATUS_FAILED
, /* Hardware Failure */
131 MGMT_STATUS_CONNECT_FAILED
, /* Page Timeout */
132 MGMT_STATUS_AUTH_FAILED
, /* Authentication Failed */
133 MGMT_STATUS_NOT_PAIRED
, /* PIN or Key Missing */
134 MGMT_STATUS_NO_RESOURCES
, /* Memory Full */
135 MGMT_STATUS_TIMEOUT
, /* Connection Timeout */
136 MGMT_STATUS_NO_RESOURCES
, /* Max Number of Connections */
137 MGMT_STATUS_NO_RESOURCES
, /* Max Number of SCO Connections */
138 MGMT_STATUS_ALREADY_CONNECTED
, /* ACL Connection Exists */
139 MGMT_STATUS_BUSY
, /* Command Disallowed */
140 MGMT_STATUS_NO_RESOURCES
, /* Rejected Limited Resources */
141 MGMT_STATUS_REJECTED
, /* Rejected Security */
142 MGMT_STATUS_REJECTED
, /* Rejected Personal */
143 MGMT_STATUS_TIMEOUT
, /* Host Timeout */
144 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Feature */
145 MGMT_STATUS_INVALID_PARAMS
, /* Invalid Parameters */
146 MGMT_STATUS_DISCONNECTED
, /* OE User Ended Connection */
147 MGMT_STATUS_NO_RESOURCES
, /* OE Low Resources */
148 MGMT_STATUS_DISCONNECTED
, /* OE Power Off */
149 MGMT_STATUS_DISCONNECTED
, /* Connection Terminated */
150 MGMT_STATUS_BUSY
, /* Repeated Attempts */
151 MGMT_STATUS_REJECTED
, /* Pairing Not Allowed */
152 MGMT_STATUS_FAILED
, /* Unknown LMP PDU */
153 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Remote Feature */
154 MGMT_STATUS_REJECTED
, /* SCO Offset Rejected */
155 MGMT_STATUS_REJECTED
, /* SCO Interval Rejected */
156 MGMT_STATUS_REJECTED
, /* Air Mode Rejected */
157 MGMT_STATUS_INVALID_PARAMS
, /* Invalid LMP Parameters */
158 MGMT_STATUS_FAILED
, /* Unspecified Error */
159 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported LMP Parameter Value */
160 MGMT_STATUS_FAILED
, /* Role Change Not Allowed */
161 MGMT_STATUS_TIMEOUT
, /* LMP Response Timeout */
162 MGMT_STATUS_FAILED
, /* LMP Error Transaction Collision */
163 MGMT_STATUS_FAILED
, /* LMP PDU Not Allowed */
164 MGMT_STATUS_REJECTED
, /* Encryption Mode Not Accepted */
165 MGMT_STATUS_FAILED
, /* Unit Link Key Used */
166 MGMT_STATUS_NOT_SUPPORTED
, /* QoS Not Supported */
167 MGMT_STATUS_TIMEOUT
, /* Instant Passed */
168 MGMT_STATUS_NOT_SUPPORTED
, /* Pairing Not Supported */
169 MGMT_STATUS_FAILED
, /* Transaction Collision */
170 MGMT_STATUS_INVALID_PARAMS
, /* Unacceptable Parameter */
171 MGMT_STATUS_REJECTED
, /* QoS Rejected */
172 MGMT_STATUS_NOT_SUPPORTED
, /* Classification Not Supported */
173 MGMT_STATUS_REJECTED
, /* Insufficient Security */
174 MGMT_STATUS_INVALID_PARAMS
, /* Parameter Out Of Range */
175 MGMT_STATUS_BUSY
, /* Role Switch Pending */
176 MGMT_STATUS_FAILED
, /* Slot Violation */
177 MGMT_STATUS_FAILED
, /* Role Switch Failed */
178 MGMT_STATUS_INVALID_PARAMS
, /* EIR Too Large */
179 MGMT_STATUS_NOT_SUPPORTED
, /* Simple Pairing Not Supported */
180 MGMT_STATUS_BUSY
, /* Host Busy Pairing */
181 MGMT_STATUS_REJECTED
, /* Rejected, No Suitable Channel */
182 MGMT_STATUS_BUSY
, /* Controller Busy */
183 MGMT_STATUS_INVALID_PARAMS
, /* Unsuitable Connection Interval */
184 MGMT_STATUS_TIMEOUT
, /* Directed Advertising Timeout */
185 MGMT_STATUS_AUTH_FAILED
, /* Terminated Due to MIC Failure */
186 MGMT_STATUS_CONNECT_FAILED
, /* Connection Establishment Failed */
187 MGMT_STATUS_CONNECT_FAILED
, /* MAC Connection Failed */
190 static u8
mgmt_status(u8 hci_status
)
192 if (hci_status
< ARRAY_SIZE(mgmt_status_table
))
193 return mgmt_status_table
[hci_status
];
195 return MGMT_STATUS_FAILED
;
198 static int cmd_status(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
)
201 struct mgmt_hdr
*hdr
;
202 struct mgmt_ev_cmd_status
*ev
;
205 BT_DBG("sock %p, index %u, cmd %u, status %u", sk
, index
, cmd
, status
);
207 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
), GFP_ATOMIC
);
211 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
213 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_STATUS
);
214 hdr
->index
= cpu_to_le16(index
);
215 hdr
->len
= cpu_to_le16(sizeof(*ev
));
217 ev
= (void *) skb_put(skb
, sizeof(*ev
));
219 put_unaligned_le16(cmd
, &ev
->opcode
);
221 err
= sock_queue_rcv_skb(sk
, skb
);
228 static int cmd_complete(struct sock
*sk
, u16 index
, u16 cmd
, void *rp
,
232 struct mgmt_hdr
*hdr
;
233 struct mgmt_ev_cmd_complete
*ev
;
236 BT_DBG("sock %p", sk
);
238 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
) + rp_len
, GFP_ATOMIC
);
242 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
244 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_COMPLETE
);
245 hdr
->index
= cpu_to_le16(index
);
246 hdr
->len
= cpu_to_le16(sizeof(*ev
) + rp_len
);
248 ev
= (void *) skb_put(skb
, sizeof(*ev
) + rp_len
);
249 put_unaligned_le16(cmd
, &ev
->opcode
);
252 memcpy(ev
->data
, rp
, rp_len
);
254 err
= sock_queue_rcv_skb(sk
, skb
);
261 static int read_version(struct sock
*sk
)
263 struct mgmt_rp_read_version rp
;
265 BT_DBG("sock %p", sk
);
267 rp
.version
= MGMT_VERSION
;
268 put_unaligned_le16(MGMT_REVISION
, &rp
.revision
);
270 return cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_VERSION
, &rp
,
274 static int read_commands(struct sock
*sk
)
276 struct mgmt_rp_read_commands
*rp
;
277 u16 num_commands
= ARRAY_SIZE(mgmt_commands
);
278 u16 num_events
= ARRAY_SIZE(mgmt_events
);
283 BT_DBG("sock %p", sk
);
285 rp_size
= sizeof(*rp
) + ((num_commands
+ num_events
) * sizeof(u16
));
287 rp
= kmalloc(rp_size
, GFP_KERNEL
);
291 put_unaligned_le16(num_commands
, &rp
->num_commands
);
292 put_unaligned_le16(num_events
, &rp
->num_events
);
294 for (i
= 0, opcode
= rp
->opcodes
; i
< num_commands
; i
++, opcode
++)
295 put_unaligned_le16(mgmt_commands
[i
], opcode
);
297 for (i
= 0; i
< num_events
; i
++, opcode
++)
298 put_unaligned_le16(mgmt_events
[i
], opcode
);
300 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_COMMANDS
, rp
,
307 static int read_index_list(struct sock
*sk
)
309 struct mgmt_rp_read_index_list
*rp
;
316 BT_DBG("sock %p", sk
);
318 read_lock(&hci_dev_list_lock
);
321 list_for_each(p
, &hci_dev_list
) {
325 rp_len
= sizeof(*rp
) + (2 * count
);
326 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
328 read_unlock(&hci_dev_list_lock
);
332 put_unaligned_le16(count
, &rp
->num_controllers
);
335 list_for_each_entry(d
, &hci_dev_list
, list
) {
336 if (test_and_clear_bit(HCI_AUTO_OFF
, &d
->dev_flags
))
337 cancel_delayed_work(&d
->power_off
);
339 if (test_bit(HCI_SETUP
, &d
->dev_flags
))
342 put_unaligned_le16(d
->id
, &rp
->index
[i
++]);
343 BT_DBG("Added hci%u", d
->id
);
346 read_unlock(&hci_dev_list_lock
);
348 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_INDEX_LIST
, rp
,
356 static u32
get_supported_settings(struct hci_dev
*hdev
)
360 settings
|= MGMT_SETTING_POWERED
;
361 settings
|= MGMT_SETTING_CONNECTABLE
;
362 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
363 settings
|= MGMT_SETTING_DISCOVERABLE
;
364 settings
|= MGMT_SETTING_PAIRABLE
;
366 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
)
367 settings
|= MGMT_SETTING_SSP
;
369 if (!(hdev
->features
[4] & LMP_NO_BREDR
)) {
370 settings
|= MGMT_SETTING_BREDR
;
371 settings
|= MGMT_SETTING_LINK_SECURITY
;
374 if (hdev
->features
[4] & LMP_LE
)
375 settings
|= MGMT_SETTING_LE
;
380 static u32
get_current_settings(struct hci_dev
*hdev
)
384 if (test_bit(HCI_UP
, &hdev
->flags
))
385 settings
|= MGMT_SETTING_POWERED
;
389 if (test_bit(HCI_PSCAN
, &hdev
->flags
))
390 settings
|= MGMT_SETTING_CONNECTABLE
;
392 if (test_bit(HCI_ISCAN
, &hdev
->flags
))
393 settings
|= MGMT_SETTING_DISCOVERABLE
;
395 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
396 settings
|= MGMT_SETTING_PAIRABLE
;
398 if (!(hdev
->features
[4] & LMP_NO_BREDR
))
399 settings
|= MGMT_SETTING_BREDR
;
401 if (hdev
->host_features
[0] & LMP_HOST_LE
)
402 settings
|= MGMT_SETTING_LE
;
404 if (test_bit(HCI_AUTH
, &hdev
->flags
))
405 settings
|= MGMT_SETTING_LINK_SECURITY
;
407 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
408 settings
|= MGMT_SETTING_SSP
;
413 #define PNP_INFO_SVCLASS_ID 0x1200
415 static u8 bluetooth_base_uuid
[] = {
416 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80,
417 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
420 static u16
get_uuid16(u8
*uuid128
)
425 for (i
= 0; i
< 12; i
++) {
426 if (bluetooth_base_uuid
[i
] != uuid128
[i
])
430 memcpy(&val
, &uuid128
[12], 4);
432 val
= le32_to_cpu(val
);
439 static void create_eir(struct hci_dev
*hdev
, u8
*data
)
443 u16 uuid16_list
[HCI_MAX_EIR_LENGTH
/ sizeof(u16
)];
444 int i
, truncated
= 0;
445 struct bt_uuid
*uuid
;
448 name_len
= strlen(hdev
->dev_name
);
454 ptr
[1] = EIR_NAME_SHORT
;
456 ptr
[1] = EIR_NAME_COMPLETE
;
458 /* EIR Data length */
459 ptr
[0] = name_len
+ 1;
461 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
463 eir_len
+= (name_len
+ 2);
464 ptr
+= (name_len
+ 2);
467 memset(uuid16_list
, 0, sizeof(uuid16_list
));
469 /* Group all UUID16 types */
470 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
473 uuid16
= get_uuid16(uuid
->uuid
);
480 if (uuid16
== PNP_INFO_SVCLASS_ID
)
483 /* Stop if not enough space to put next UUID */
484 if (eir_len
+ 2 + sizeof(u16
) > HCI_MAX_EIR_LENGTH
) {
489 /* Check for duplicates */
490 for (i
= 0; uuid16_list
[i
] != 0; i
++)
491 if (uuid16_list
[i
] == uuid16
)
494 if (uuid16_list
[i
] == 0) {
495 uuid16_list
[i
] = uuid16
;
496 eir_len
+= sizeof(u16
);
500 if (uuid16_list
[0] != 0) {
504 ptr
[1] = truncated
? EIR_UUID16_SOME
: EIR_UUID16_ALL
;
509 for (i
= 0; uuid16_list
[i
] != 0; i
++) {
510 *ptr
++ = (uuid16_list
[i
] & 0x00ff);
511 *ptr
++ = (uuid16_list
[i
] & 0xff00) >> 8;
514 /* EIR Data length */
515 *length
= (i
* sizeof(u16
)) + 1;
519 static int update_eir(struct hci_dev
*hdev
)
521 struct hci_cp_write_eir cp
;
523 if (!(hdev
->features
[6] & LMP_EXT_INQ
))
526 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
529 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
532 memset(&cp
, 0, sizeof(cp
));
534 create_eir(hdev
, cp
.data
);
536 if (memcmp(cp
.data
, hdev
->eir
, sizeof(cp
.data
)) == 0)
539 memcpy(hdev
->eir
, cp
.data
, sizeof(cp
.data
));
541 return hci_send_cmd(hdev
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
544 static u8
get_service_classes(struct hci_dev
*hdev
)
546 struct bt_uuid
*uuid
;
549 list_for_each_entry(uuid
, &hdev
->uuids
, list
)
550 val
|= uuid
->svc_hint
;
555 static int update_class(struct hci_dev
*hdev
)
559 BT_DBG("%s", hdev
->name
);
561 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
564 cod
[0] = hdev
->minor_class
;
565 cod
[1] = hdev
->major_class
;
566 cod
[2] = get_service_classes(hdev
);
568 if (memcmp(cod
, hdev
->dev_class
, 3) == 0)
571 return hci_send_cmd(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
, sizeof(cod
), cod
);
574 static void service_cache_off(struct work_struct
*work
)
576 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
579 if (!test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
587 hci_dev_unlock(hdev
);
590 static void mgmt_init_hdev(struct hci_dev
*hdev
)
592 if (!test_and_set_bit(HCI_MGMT
, &hdev
->dev_flags
))
593 INIT_DELAYED_WORK(&hdev
->service_cache
, service_cache_off
);
595 if (!test_and_set_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
596 schedule_delayed_work(&hdev
->service_cache
,
597 msecs_to_jiffies(SERVICE_CACHE_TIMEOUT
));
600 static int read_controller_info(struct sock
*sk
, u16 index
)
602 struct mgmt_rp_read_info rp
;
603 struct hci_dev
*hdev
;
605 BT_DBG("sock %p hci%u", sk
, index
);
607 hdev
= hci_dev_get(index
);
609 return cmd_status(sk
, index
, MGMT_OP_READ_INFO
,
610 MGMT_STATUS_INVALID_PARAMS
);
612 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
))
613 cancel_delayed_work_sync(&hdev
->power_off
);
617 if (test_and_clear_bit(HCI_PI_MGMT_INIT
, &hci_pi(sk
)->flags
))
618 mgmt_init_hdev(hdev
);
620 memset(&rp
, 0, sizeof(rp
));
622 bacpy(&rp
.bdaddr
, &hdev
->bdaddr
);
624 rp
.version
= hdev
->hci_ver
;
626 put_unaligned_le16(hdev
->manufacturer
, &rp
.manufacturer
);
628 rp
.supported_settings
= cpu_to_le32(get_supported_settings(hdev
));
629 rp
.current_settings
= cpu_to_le32(get_current_settings(hdev
));
631 memcpy(rp
.dev_class
, hdev
->dev_class
, 3);
633 memcpy(rp
.name
, hdev
->dev_name
, sizeof(hdev
->dev_name
));
635 hci_dev_unlock(hdev
);
638 return cmd_complete(sk
, index
, MGMT_OP_READ_INFO
, &rp
, sizeof(rp
));
641 static void mgmt_pending_free(struct pending_cmd
*cmd
)
648 static struct pending_cmd
*mgmt_pending_add(struct sock
*sk
, u16 opcode
,
649 struct hci_dev
*hdev
,
652 struct pending_cmd
*cmd
;
654 cmd
= kmalloc(sizeof(*cmd
), GFP_ATOMIC
);
658 cmd
->opcode
= opcode
;
659 cmd
->index
= hdev
->id
;
661 cmd
->param
= kmalloc(len
, GFP_ATOMIC
);
668 memcpy(cmd
->param
, data
, len
);
673 list_add(&cmd
->list
, &hdev
->mgmt_pending
);
678 static void mgmt_pending_foreach(u16 opcode
, struct hci_dev
*hdev
,
679 void (*cb
)(struct pending_cmd
*cmd
, void *data
),
682 struct list_head
*p
, *n
;
684 list_for_each_safe(p
, n
, &hdev
->mgmt_pending
) {
685 struct pending_cmd
*cmd
;
687 cmd
= list_entry(p
, struct pending_cmd
, list
);
689 if (opcode
> 0 && cmd
->opcode
!= opcode
)
696 static struct pending_cmd
*mgmt_pending_find(u16 opcode
, struct hci_dev
*hdev
)
698 struct pending_cmd
*cmd
;
700 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
701 if (cmd
->opcode
== opcode
)
708 static void mgmt_pending_remove(struct pending_cmd
*cmd
)
710 list_del(&cmd
->list
);
711 mgmt_pending_free(cmd
);
714 static int send_settings_rsp(struct sock
*sk
, u16 opcode
, struct hci_dev
*hdev
)
716 __le32 settings
= cpu_to_le32(get_current_settings(hdev
));
718 return cmd_complete(sk
, hdev
->id
, opcode
, &settings
, sizeof(settings
));
721 static int set_powered(struct sock
*sk
, u16 index
, void *data
, u16 len
)
723 struct mgmt_mode
*cp
= data
;
724 struct hci_dev
*hdev
;
725 struct pending_cmd
*cmd
;
728 BT_DBG("request for hci%u", index
);
730 if (len
!= sizeof(*cp
))
731 return cmd_status(sk
, index
, MGMT_OP_SET_POWERED
,
732 MGMT_STATUS_INVALID_PARAMS
);
734 hdev
= hci_dev_get(index
);
736 return cmd_status(sk
, index
, MGMT_OP_SET_POWERED
,
737 MGMT_STATUS_INVALID_PARAMS
);
741 up
= test_bit(HCI_UP
, &hdev
->flags
);
742 if ((cp
->val
&& up
) || (!cp
->val
&& !up
)) {
743 err
= send_settings_rsp(sk
, MGMT_OP_SET_POWERED
, hdev
);
747 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
)) {
748 err
= cmd_status(sk
, index
, MGMT_OP_SET_POWERED
,
753 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
, data
, len
);
760 schedule_work(&hdev
->power_on
);
762 schedule_work(&hdev
->power_off
.work
);
767 hci_dev_unlock(hdev
);
772 static int set_discoverable(struct sock
*sk
, u16 index
, void *data
, u16 len
)
774 struct mgmt_cp_set_discoverable
*cp
= data
;
775 struct hci_dev
*hdev
;
776 struct pending_cmd
*cmd
;
780 BT_DBG("request for hci%u", index
);
782 if (len
!= sizeof(*cp
))
783 return cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
784 MGMT_STATUS_INVALID_PARAMS
);
786 hdev
= hci_dev_get(index
);
788 return cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
789 MGMT_STATUS_INVALID_PARAMS
);
793 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
794 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
795 MGMT_STATUS_NOT_POWERED
);
799 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
800 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
801 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
806 if (cp
->val
== test_bit(HCI_ISCAN
, &hdev
->flags
) &&
807 test_bit(HCI_PSCAN
, &hdev
->flags
)) {
808 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
812 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
, data
, len
);
821 scan
|= SCAN_INQUIRY
;
823 cancel_delayed_work(&hdev
->discov_off
);
825 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
827 mgmt_pending_remove(cmd
);
830 hdev
->discov_timeout
= get_unaligned_le16(&cp
->timeout
);
833 hci_dev_unlock(hdev
);
839 static int set_connectable(struct sock
*sk
, u16 index
, void *data
, u16 len
)
841 struct mgmt_mode
*cp
= data
;
842 struct hci_dev
*hdev
;
843 struct pending_cmd
*cmd
;
847 BT_DBG("request for hci%u", index
);
849 if (len
!= sizeof(*cp
))
850 return cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
,
851 MGMT_STATUS_INVALID_PARAMS
);
853 hdev
= hci_dev_get(index
);
855 return cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
,
856 MGMT_STATUS_INVALID_PARAMS
);
860 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
861 err
= cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
,
862 MGMT_STATUS_NOT_POWERED
);
866 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
867 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
868 err
= cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
,
873 if (cp
->val
== test_bit(HCI_PSCAN
, &hdev
->flags
)) {
874 err
= send_settings_rsp(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
878 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
, data
, len
);
889 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
891 mgmt_pending_remove(cmd
);
894 hci_dev_unlock(hdev
);
900 static int mgmt_event(u16 event
, struct hci_dev
*hdev
, void *data
,
901 u16 data_len
, struct sock
*skip_sk
)
904 struct mgmt_hdr
*hdr
;
906 skb
= alloc_skb(sizeof(*hdr
) + data_len
, GFP_ATOMIC
);
910 bt_cb(skb
)->channel
= HCI_CHANNEL_CONTROL
;
912 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
913 hdr
->opcode
= cpu_to_le16(event
);
915 hdr
->index
= cpu_to_le16(hdev
->id
);
917 hdr
->index
= cpu_to_le16(MGMT_INDEX_NONE
);
918 hdr
->len
= cpu_to_le16(data_len
);
921 memcpy(skb_put(skb
, data_len
), data
, data_len
);
923 hci_send_to_sock(NULL
, skb
, skip_sk
);
929 static int set_pairable(struct sock
*sk
, u16 index
, void *data
, u16 len
)
931 struct mgmt_mode
*cp
= data
;
932 struct hci_dev
*hdev
;
936 BT_DBG("request for hci%u", index
);
938 if (len
!= sizeof(*cp
))
939 return cmd_status(sk
, index
, MGMT_OP_SET_PAIRABLE
,
940 MGMT_STATUS_INVALID_PARAMS
);
942 hdev
= hci_dev_get(index
);
944 return cmd_status(sk
, index
, MGMT_OP_SET_PAIRABLE
,
945 MGMT_STATUS_INVALID_PARAMS
);
950 set_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
952 clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
954 err
= send_settings_rsp(sk
, MGMT_OP_SET_PAIRABLE
, hdev
);
958 ev
= cpu_to_le32(get_current_settings(hdev
));
960 err
= mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), sk
);
963 hci_dev_unlock(hdev
);
969 static int set_link_security(struct sock
*sk
, u16 index
, void *data
, u16 len
)
971 struct mgmt_mode
*cp
= data
;
972 struct pending_cmd
*cmd
;
973 struct hci_dev
*hdev
;
977 BT_DBG("request for hci%u", index
);
979 if (len
!= sizeof(*cp
))
980 return cmd_status(sk
, index
, MGMT_OP_SET_LINK_SECURITY
,
981 MGMT_STATUS_INVALID_PARAMS
);
983 hdev
= hci_dev_get(index
);
985 return cmd_status(sk
, index
, MGMT_OP_SET_LINK_SECURITY
,
986 MGMT_STATUS_INVALID_PARAMS
);
990 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
991 err
= cmd_status(sk
, index
, MGMT_OP_SET_LINK_SECURITY
,
992 MGMT_STATUS_NOT_POWERED
);
996 if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY
, hdev
)) {
997 err
= cmd_status(sk
, index
, MGMT_OP_SET_LINK_SECURITY
,
1004 if (test_bit(HCI_AUTH
, &hdev
->flags
) == val
) {
1005 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1009 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
, data
, len
);
1015 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, sizeof(val
), &val
);
1017 mgmt_pending_remove(cmd
);
1022 hci_dev_unlock(hdev
);
1028 static int set_ssp(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1030 struct mgmt_mode
*cp
= data
;
1031 struct pending_cmd
*cmd
;
1032 struct hci_dev
*hdev
;
1036 BT_DBG("request for hci%u", index
);
1038 if (len
!= sizeof(*cp
))
1039 return cmd_status(sk
, index
, MGMT_OP_SET_SSP
,
1040 MGMT_STATUS_INVALID_PARAMS
);
1042 hdev
= hci_dev_get(index
);
1044 return cmd_status(sk
, index
, MGMT_OP_SET_SSP
,
1045 MGMT_STATUS_INVALID_PARAMS
);
1049 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1050 err
= cmd_status(sk
, index
, MGMT_OP_SET_SSP
,
1051 MGMT_STATUS_NOT_POWERED
);
1055 if (mgmt_pending_find(MGMT_OP_SET_SSP
, hdev
)) {
1056 err
= cmd_status(sk
, index
, MGMT_OP_SET_SSP
, MGMT_STATUS_BUSY
);
1062 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
) == val
) {
1063 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
1067 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SSP
, hdev
, data
, len
);
1073 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, sizeof(val
), &val
);
1075 mgmt_pending_remove(cmd
);
1080 hci_dev_unlock(hdev
);
1086 static int add_uuid(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1088 struct mgmt_cp_add_uuid
*cp
= data
;
1089 struct hci_dev
*hdev
;
1090 struct bt_uuid
*uuid
;
1093 BT_DBG("request for hci%u", index
);
1095 if (len
!= sizeof(*cp
))
1096 return cmd_status(sk
, index
, MGMT_OP_ADD_UUID
,
1097 MGMT_STATUS_INVALID_PARAMS
);
1099 hdev
= hci_dev_get(index
);
1101 return cmd_status(sk
, index
, MGMT_OP_ADD_UUID
,
1102 MGMT_STATUS_INVALID_PARAMS
);
1106 uuid
= kmalloc(sizeof(*uuid
), GFP_ATOMIC
);
1112 memcpy(uuid
->uuid
, cp
->uuid
, 16);
1113 uuid
->svc_hint
= cp
->svc_hint
;
1115 list_add(&uuid
->list
, &hdev
->uuids
);
1117 err
= update_class(hdev
);
1121 err
= update_eir(hdev
);
1125 err
= cmd_complete(sk
, index
, MGMT_OP_ADD_UUID
, NULL
, 0);
1128 hci_dev_unlock(hdev
);
1134 static int remove_uuid(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1136 struct mgmt_cp_remove_uuid
*cp
= data
;
1137 struct list_head
*p
, *n
;
1138 struct hci_dev
*hdev
;
1139 u8 bt_uuid_any
[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1142 BT_DBG("request for hci%u", index
);
1144 if (len
!= sizeof(*cp
))
1145 return cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
,
1146 MGMT_STATUS_INVALID_PARAMS
);
1148 hdev
= hci_dev_get(index
);
1150 return cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
,
1151 MGMT_STATUS_INVALID_PARAMS
);
1155 if (memcmp(cp
->uuid
, bt_uuid_any
, 16) == 0) {
1156 err
= hci_uuids_clear(hdev
);
1162 list_for_each_safe(p
, n
, &hdev
->uuids
) {
1163 struct bt_uuid
*match
= list_entry(p
, struct bt_uuid
, list
);
1165 if (memcmp(match
->uuid
, cp
->uuid
, 16) != 0)
1168 list_del(&match
->list
);
1173 err
= cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
,
1174 MGMT_STATUS_INVALID_PARAMS
);
1178 err
= update_class(hdev
);
1182 err
= update_eir(hdev
);
1186 err
= cmd_complete(sk
, index
, MGMT_OP_REMOVE_UUID
, NULL
, 0);
1189 hci_dev_unlock(hdev
);
1195 static int set_dev_class(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1197 struct hci_dev
*hdev
;
1198 struct mgmt_cp_set_dev_class
*cp
= data
;
1201 BT_DBG("request for hci%u", index
);
1203 if (len
!= sizeof(*cp
))
1204 return cmd_status(sk
, index
, MGMT_OP_SET_DEV_CLASS
,
1205 MGMT_STATUS_INVALID_PARAMS
);
1207 hdev
= hci_dev_get(index
);
1209 return cmd_status(sk
, index
, MGMT_OP_SET_DEV_CLASS
,
1210 MGMT_STATUS_INVALID_PARAMS
);
1214 hdev
->major_class
= cp
->major
;
1215 hdev
->minor_class
= cp
->minor
;
1217 if (test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
1218 hci_dev_unlock(hdev
);
1219 cancel_delayed_work_sync(&hdev
->service_cache
);
1224 err
= update_class(hdev
);
1227 err
= cmd_complete(sk
, index
, MGMT_OP_SET_DEV_CLASS
, NULL
, 0);
1229 hci_dev_unlock(hdev
);
1235 static int load_link_keys(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1237 struct hci_dev
*hdev
;
1238 struct mgmt_cp_load_link_keys
*cp
= data
;
1239 u16 key_count
, expected_len
;
1242 if (len
< sizeof(*cp
))
1243 return cmd_status(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
,
1244 MGMT_STATUS_INVALID_PARAMS
);
1246 key_count
= get_unaligned_le16(&cp
->key_count
);
1248 expected_len
= sizeof(*cp
) + key_count
*
1249 sizeof(struct mgmt_link_key_info
);
1250 if (expected_len
!= len
) {
1251 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
1253 return cmd_status(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
,
1254 MGMT_STATUS_INVALID_PARAMS
);
1257 hdev
= hci_dev_get(index
);
1259 return cmd_status(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
,
1260 MGMT_STATUS_INVALID_PARAMS
);
1262 BT_DBG("hci%u debug_keys %u key_count %u", index
, cp
->debug_keys
,
1267 hci_link_keys_clear(hdev
);
1269 set_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
);
1272 set_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
1274 clear_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
1276 for (i
= 0; i
< key_count
; i
++) {
1277 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
1279 hci_add_link_key(hdev
, NULL
, 0, &key
->addr
.bdaddr
, key
->val
,
1280 key
->type
, key
->pin_len
);
1283 cmd_complete(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
, NULL
, 0);
1285 hci_dev_unlock(hdev
);
1291 static int device_unpaired(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
1292 u8 addr_type
, struct sock
*skip_sk
)
1294 struct mgmt_ev_device_unpaired ev
;
1296 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
1297 ev
.addr
.type
= addr_type
;
1299 return mgmt_event(MGMT_EV_DEVICE_UNPAIRED
, hdev
, &ev
, sizeof(ev
),
1303 static int unpair_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1305 struct hci_dev
*hdev
;
1306 struct mgmt_cp_unpair_device
*cp
= data
;
1307 struct mgmt_rp_unpair_device rp
;
1308 struct hci_cp_disconnect dc
;
1309 struct pending_cmd
*cmd
;
1310 struct hci_conn
*conn
;
1313 if (len
!= sizeof(*cp
))
1314 return cmd_status(sk
, index
, MGMT_OP_UNPAIR_DEVICE
,
1315 MGMT_STATUS_INVALID_PARAMS
);
1317 hdev
= hci_dev_get(index
);
1319 return cmd_status(sk
, index
, MGMT_OP_UNPAIR_DEVICE
,
1320 MGMT_STATUS_INVALID_PARAMS
);
1324 memset(&rp
, 0, sizeof(rp
));
1325 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
1326 rp
.addr
.type
= cp
->addr
.type
;
1328 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1329 err
= hci_remove_link_key(hdev
, &cp
->addr
.bdaddr
);
1331 err
= hci_remove_ltk(hdev
, &cp
->addr
.bdaddr
);
1334 rp
.status
= MGMT_STATUS_NOT_PAIRED
;
1338 if (!test_bit(HCI_UP
, &hdev
->flags
) || !cp
->disconnect
) {
1339 err
= cmd_complete(sk
, index
, MGMT_OP_UNPAIR_DEVICE
, &rp
,
1341 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, sk
);
1345 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1346 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
1349 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
,
1353 err
= cmd_complete(sk
, index
, MGMT_OP_UNPAIR_DEVICE
, &rp
,
1355 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, sk
);
1359 cmd
= mgmt_pending_add(sk
, MGMT_OP_UNPAIR_DEVICE
, hdev
, cp
,
1366 put_unaligned_le16(conn
->handle
, &dc
.handle
);
1367 dc
.reason
= 0x13; /* Remote User Terminated Connection */
1368 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
1370 mgmt_pending_remove(cmd
);
1374 err
= cmd_complete(sk
, index
, MGMT_OP_UNPAIR_DEVICE
, &rp
,
1376 hci_dev_unlock(hdev
);
1382 static int disconnect(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1384 struct hci_dev
*hdev
;
1385 struct mgmt_cp_disconnect
*cp
= data
;
1386 struct hci_cp_disconnect dc
;
1387 struct pending_cmd
*cmd
;
1388 struct hci_conn
*conn
;
1393 if (len
!= sizeof(*cp
))
1394 return cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1395 MGMT_STATUS_INVALID_PARAMS
);
1397 hdev
= hci_dev_get(index
);
1399 return cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1400 MGMT_STATUS_INVALID_PARAMS
);
1404 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1405 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1406 MGMT_STATUS_NOT_POWERED
);
1410 if (mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
)) {
1411 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1416 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1417 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
);
1419 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->addr
.bdaddr
);
1422 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1423 MGMT_STATUS_NOT_CONNECTED
);
1427 cmd
= mgmt_pending_add(sk
, MGMT_OP_DISCONNECT
, hdev
, data
, len
);
1433 put_unaligned_le16(conn
->handle
, &dc
.handle
);
1434 dc
.reason
= 0x13; /* Remote User Terminated Connection */
1436 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
1438 mgmt_pending_remove(cmd
);
1441 hci_dev_unlock(hdev
);
1447 static u8
link_to_mgmt(u8 link_type
, u8 addr_type
)
1449 switch (link_type
) {
1451 switch (addr_type
) {
1452 case ADDR_LE_DEV_PUBLIC
:
1453 return MGMT_ADDR_LE_PUBLIC
;
1454 case ADDR_LE_DEV_RANDOM
:
1455 return MGMT_ADDR_LE_RANDOM
;
1457 return MGMT_ADDR_INVALID
;
1460 return MGMT_ADDR_BREDR
;
1462 return MGMT_ADDR_INVALID
;
1466 static int get_connections(struct sock
*sk
, u16 index
)
1468 struct mgmt_rp_get_connections
*rp
;
1469 struct hci_dev
*hdev
;
1477 hdev
= hci_dev_get(index
);
1479 return cmd_status(sk
, index
, MGMT_OP_GET_CONNECTIONS
,
1480 MGMT_STATUS_INVALID_PARAMS
);
1485 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
1486 if (test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
1490 rp_len
= sizeof(*rp
) + (count
* sizeof(struct mgmt_addr_info
));
1491 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
1497 put_unaligned_le16(count
, &rp
->conn_count
);
1500 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
1501 if (!test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
1503 bacpy(&rp
->addr
[i
].bdaddr
, &c
->dst
);
1504 rp
->addr
[i
].type
= link_to_mgmt(c
->type
, c
->dst_type
);
1505 if (rp
->addr
[i
].type
== MGMT_ADDR_INVALID
)
1510 /* Recalculate length in case of filtered SCO connections, etc */
1511 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
1513 err
= cmd_complete(sk
, index
, MGMT_OP_GET_CONNECTIONS
, rp
, rp_len
);
1517 hci_dev_unlock(hdev
);
1522 static int send_pin_code_neg_reply(struct sock
*sk
, u16 index
,
1523 struct hci_dev
*hdev
, struct mgmt_cp_pin_code_neg_reply
*cp
)
1525 struct pending_cmd
*cmd
;
1528 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
, cp
,
1533 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
1534 sizeof(cp
->addr
.bdaddr
), &cp
->addr
.bdaddr
);
1536 mgmt_pending_remove(cmd
);
1541 static int pin_code_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1543 struct hci_dev
*hdev
;
1544 struct hci_conn
*conn
;
1545 struct mgmt_cp_pin_code_reply
*cp
= data
;
1546 struct hci_cp_pin_code_reply reply
;
1547 struct pending_cmd
*cmd
;
1552 if (len
!= sizeof(*cp
))
1553 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1554 MGMT_STATUS_INVALID_PARAMS
);
1556 hdev
= hci_dev_get(index
);
1558 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1559 MGMT_STATUS_INVALID_PARAMS
);
1563 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1564 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1565 MGMT_STATUS_NOT_POWERED
);
1569 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
);
1571 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1572 MGMT_STATUS_NOT_CONNECTED
);
1576 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
&& cp
->pin_len
!= 16) {
1577 struct mgmt_cp_pin_code_neg_reply ncp
;
1579 memcpy(&ncp
.addr
, &cp
->addr
, sizeof(ncp
.addr
));
1581 BT_ERR("PIN code is not 16 bytes long");
1583 err
= send_pin_code_neg_reply(sk
, index
, hdev
, &ncp
);
1585 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1586 MGMT_STATUS_INVALID_PARAMS
);
1591 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_REPLY
, hdev
, data
,
1598 bacpy(&reply
.bdaddr
, &cp
->addr
.bdaddr
);
1599 reply
.pin_len
= cp
->pin_len
;
1600 memcpy(reply
.pin_code
, cp
->pin_code
, sizeof(reply
.pin_code
));
1602 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_REPLY
, sizeof(reply
), &reply
);
1604 mgmt_pending_remove(cmd
);
1607 hci_dev_unlock(hdev
);
1613 static int pin_code_neg_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1615 struct hci_dev
*hdev
;
1616 struct mgmt_cp_pin_code_neg_reply
*cp
= data
;
1621 if (len
!= sizeof(*cp
))
1622 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1623 MGMT_STATUS_INVALID_PARAMS
);
1625 hdev
= hci_dev_get(index
);
1627 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1628 MGMT_STATUS_INVALID_PARAMS
);
1632 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1633 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1634 MGMT_STATUS_NOT_POWERED
);
1638 err
= send_pin_code_neg_reply(sk
, index
, hdev
, cp
);
1641 hci_dev_unlock(hdev
);
1647 static int set_io_capability(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1649 struct hci_dev
*hdev
;
1650 struct mgmt_cp_set_io_capability
*cp
= data
;
1654 if (len
!= sizeof(*cp
))
1655 return cmd_status(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
,
1656 MGMT_STATUS_INVALID_PARAMS
);
1658 hdev
= hci_dev_get(index
);
1660 return cmd_status(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
,
1661 MGMT_STATUS_INVALID_PARAMS
);
1665 hdev
->io_capability
= cp
->io_capability
;
1667 BT_DBG("%s IO capability set to 0x%02x", hdev
->name
,
1668 hdev
->io_capability
);
1670 hci_dev_unlock(hdev
);
1673 return cmd_complete(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
, NULL
, 0);
1676 static inline struct pending_cmd
*find_pairing(struct hci_conn
*conn
)
1678 struct hci_dev
*hdev
= conn
->hdev
;
1679 struct pending_cmd
*cmd
;
1681 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
1682 if (cmd
->opcode
!= MGMT_OP_PAIR_DEVICE
)
1685 if (cmd
->user_data
!= conn
)
1694 static void pairing_complete(struct pending_cmd
*cmd
, u8 status
)
1696 struct mgmt_rp_pair_device rp
;
1697 struct hci_conn
*conn
= cmd
->user_data
;
1699 bacpy(&rp
.addr
.bdaddr
, &conn
->dst
);
1700 rp
.addr
.type
= link_to_mgmt(conn
->type
, conn
->dst_type
);
1703 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_PAIR_DEVICE
, &rp
, sizeof(rp
));
1705 /* So we don't get further callbacks for this connection */
1706 conn
->connect_cfm_cb
= NULL
;
1707 conn
->security_cfm_cb
= NULL
;
1708 conn
->disconn_cfm_cb
= NULL
;
1712 mgmt_pending_remove(cmd
);
1715 static void pairing_complete_cb(struct hci_conn
*conn
, u8 status
)
1717 struct pending_cmd
*cmd
;
1719 BT_DBG("status %u", status
);
1721 cmd
= find_pairing(conn
);
1723 BT_DBG("Unable to find a pending command");
1725 pairing_complete(cmd
, status
);
1728 static int pair_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1730 struct hci_dev
*hdev
;
1731 struct mgmt_cp_pair_device
*cp
= data
;
1732 struct mgmt_rp_pair_device rp
;
1733 struct pending_cmd
*cmd
;
1734 u8 sec_level
, auth_type
;
1735 struct hci_conn
*conn
;
1740 if (len
!= sizeof(*cp
))
1741 return cmd_status(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1742 MGMT_STATUS_INVALID_PARAMS
);
1744 hdev
= hci_dev_get(index
);
1746 return cmd_status(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1747 MGMT_STATUS_INVALID_PARAMS
);
1751 sec_level
= BT_SECURITY_MEDIUM
;
1752 if (cp
->io_cap
== 0x03)
1753 auth_type
= HCI_AT_DEDICATED_BONDING
;
1755 auth_type
= HCI_AT_DEDICATED_BONDING_MITM
;
1757 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1758 conn
= hci_connect(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
, sec_level
,
1761 conn
= hci_connect(hdev
, LE_LINK
, &cp
->addr
.bdaddr
, sec_level
,
1764 memset(&rp
, 0, sizeof(rp
));
1765 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
1766 rp
.addr
.type
= cp
->addr
.type
;
1769 rp
.status
= -PTR_ERR(conn
);
1770 err
= cmd_complete(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1775 if (conn
->connect_cfm_cb
) {
1778 err
= cmd_complete(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1783 cmd
= mgmt_pending_add(sk
, MGMT_OP_PAIR_DEVICE
, hdev
, data
, len
);
1790 /* For LE, just connecting isn't a proof that the pairing finished */
1791 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1792 conn
->connect_cfm_cb
= pairing_complete_cb
;
1794 conn
->security_cfm_cb
= pairing_complete_cb
;
1795 conn
->disconn_cfm_cb
= pairing_complete_cb
;
1796 conn
->io_capability
= cp
->io_cap
;
1797 cmd
->user_data
= conn
;
1799 if (conn
->state
== BT_CONNECTED
&&
1800 hci_conn_security(conn
, sec_level
, auth_type
))
1801 pairing_complete(cmd
, 0);
1806 hci_dev_unlock(hdev
);
1812 static int cancel_pair_device(struct sock
*sk
, u16 index
,
1813 unsigned char *data
, u16 len
)
1815 struct mgmt_addr_info
*addr
= (void *) data
;
1816 struct hci_dev
*hdev
;
1817 struct pending_cmd
*cmd
;
1818 struct hci_conn
*conn
;
1823 if (len
!= sizeof(*addr
))
1824 return cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1825 MGMT_STATUS_INVALID_PARAMS
);
1827 hdev
= hci_dev_get(index
);
1829 return cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1830 MGMT_STATUS_INVALID_PARAMS
);
1834 cmd
= mgmt_pending_find(MGMT_OP_PAIR_DEVICE
, hdev
);
1836 err
= cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1837 MGMT_STATUS_INVALID_PARAMS
);
1841 conn
= cmd
->user_data
;
1843 if (bacmp(&addr
->bdaddr
, &conn
->dst
) != 0) {
1844 err
= cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1845 MGMT_STATUS_INVALID_PARAMS
);
1849 pairing_complete(cmd
, MGMT_STATUS_CANCELLED
);
1851 err
= cmd_complete(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
, addr
,
1854 hci_dev_unlock(hdev
);
1860 static int user_pairing_resp(struct sock
*sk
, u16 index
, bdaddr_t
*bdaddr
,
1861 u8 type
, u16 mgmt_op
, u16 hci_op
,
1864 struct pending_cmd
*cmd
;
1865 struct hci_dev
*hdev
;
1866 struct hci_conn
*conn
;
1869 hdev
= hci_dev_get(index
);
1871 return cmd_status(sk
, index
, mgmt_op
,
1872 MGMT_STATUS_INVALID_PARAMS
);
1876 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1877 err
= cmd_status(sk
, index
, mgmt_op
, MGMT_STATUS_NOT_POWERED
);
1881 if (type
== MGMT_ADDR_BREDR
)
1882 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, bdaddr
);
1884 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, bdaddr
);
1887 err
= cmd_status(sk
, index
, mgmt_op
,
1888 MGMT_STATUS_NOT_CONNECTED
);
1892 if (type
== MGMT_ADDR_LE_PUBLIC
|| type
== MGMT_ADDR_LE_RANDOM
) {
1893 /* Continue with pairing via SMP */
1894 err
= smp_user_confirm_reply(conn
, mgmt_op
, passkey
);
1897 err
= cmd_status(sk
, index
, mgmt_op
,
1898 MGMT_STATUS_SUCCESS
);
1900 err
= cmd_status(sk
, index
, mgmt_op
,
1901 MGMT_STATUS_FAILED
);
1906 cmd
= mgmt_pending_add(sk
, mgmt_op
, hdev
, bdaddr
, sizeof(*bdaddr
));
1912 /* Continue with pairing via HCI */
1913 if (hci_op
== HCI_OP_USER_PASSKEY_REPLY
) {
1914 struct hci_cp_user_passkey_reply cp
;
1916 bacpy(&cp
.bdaddr
, bdaddr
);
1917 cp
.passkey
= passkey
;
1918 err
= hci_send_cmd(hdev
, hci_op
, sizeof(cp
), &cp
);
1920 err
= hci_send_cmd(hdev
, hci_op
, sizeof(*bdaddr
), bdaddr
);
1923 mgmt_pending_remove(cmd
);
1926 hci_dev_unlock(hdev
);
1932 static int user_confirm_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1934 struct mgmt_cp_user_confirm_reply
*cp
= data
;
1938 if (len
!= sizeof(*cp
))
1939 return cmd_status(sk
, index
, MGMT_OP_USER_CONFIRM_REPLY
,
1940 MGMT_STATUS_INVALID_PARAMS
);
1942 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
1943 MGMT_OP_USER_CONFIRM_REPLY
,
1944 HCI_OP_USER_CONFIRM_REPLY
, 0);
1947 static int user_confirm_neg_reply(struct sock
*sk
, u16 index
, void *data
,
1950 struct mgmt_cp_user_confirm_neg_reply
*cp
= data
;
1954 if (len
!= sizeof(*cp
))
1955 return cmd_status(sk
, index
, MGMT_OP_USER_CONFIRM_NEG_REPLY
,
1956 MGMT_STATUS_INVALID_PARAMS
);
1958 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
1959 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
1960 HCI_OP_USER_CONFIRM_NEG_REPLY
, 0);
1963 static int user_passkey_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1965 struct mgmt_cp_user_passkey_reply
*cp
= data
;
1969 if (len
!= sizeof(*cp
))
1970 return cmd_status(sk
, index
, MGMT_OP_USER_PASSKEY_REPLY
,
1973 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
1974 MGMT_OP_USER_PASSKEY_REPLY
,
1975 HCI_OP_USER_PASSKEY_REPLY
,
1979 static int user_passkey_neg_reply(struct sock
*sk
, u16 index
, void *data
,
1982 struct mgmt_cp_user_passkey_neg_reply
*cp
= data
;
1986 if (len
!= sizeof(*cp
))
1987 return cmd_status(sk
, index
, MGMT_OP_USER_PASSKEY_NEG_REPLY
,
1990 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
1991 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
1992 HCI_OP_USER_PASSKEY_NEG_REPLY
, 0);
1995 static int set_local_name(struct sock
*sk
, u16 index
, void *data
,
1998 struct mgmt_cp_set_local_name
*mgmt_cp
= data
;
1999 struct hci_cp_write_local_name hci_cp
;
2000 struct hci_dev
*hdev
;
2001 struct pending_cmd
*cmd
;
2006 if (len
!= sizeof(*mgmt_cp
))
2007 return cmd_status(sk
, index
, MGMT_OP_SET_LOCAL_NAME
,
2008 MGMT_STATUS_INVALID_PARAMS
);
2010 hdev
= hci_dev_get(index
);
2012 return cmd_status(sk
, index
, MGMT_OP_SET_LOCAL_NAME
,
2013 MGMT_STATUS_INVALID_PARAMS
);
2017 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LOCAL_NAME
, hdev
, data
,
2024 memcpy(hci_cp
.name
, mgmt_cp
->name
, sizeof(hci_cp
.name
));
2025 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_LOCAL_NAME
, sizeof(hci_cp
),
2028 mgmt_pending_remove(cmd
);
2031 hci_dev_unlock(hdev
);
2037 static int read_local_oob_data(struct sock
*sk
, u16 index
)
2039 struct hci_dev
*hdev
;
2040 struct pending_cmd
*cmd
;
2043 BT_DBG("hci%u", index
);
2045 hdev
= hci_dev_get(index
);
2047 return cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2048 MGMT_STATUS_INVALID_PARAMS
);
2052 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
2053 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2054 MGMT_STATUS_NOT_POWERED
);
2058 if (!(hdev
->features
[6] & LMP_SIMPLE_PAIR
)) {
2059 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2060 MGMT_STATUS_NOT_SUPPORTED
);
2064 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
)) {
2065 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2070 cmd
= mgmt_pending_add(sk
, MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
, NULL
, 0);
2076 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_DATA
, 0, NULL
);
2078 mgmt_pending_remove(cmd
);
2081 hci_dev_unlock(hdev
);
2087 static int add_remote_oob_data(struct sock
*sk
, u16 index
, void *data
,
2090 struct hci_dev
*hdev
;
2091 struct mgmt_cp_add_remote_oob_data
*cp
= data
;
2094 BT_DBG("hci%u ", index
);
2096 if (len
!= sizeof(*cp
))
2097 return cmd_status(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
2098 MGMT_STATUS_INVALID_PARAMS
);
2100 hdev
= hci_dev_get(index
);
2102 return cmd_status(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
2103 MGMT_STATUS_INVALID_PARAMS
);
2107 err
= hci_add_remote_oob_data(hdev
, &cp
->addr
.bdaddr
, cp
->hash
,
2110 err
= cmd_status(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
2111 MGMT_STATUS_FAILED
);
2113 err
= cmd_complete(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
, NULL
,
2116 hci_dev_unlock(hdev
);
2122 static int remove_remote_oob_data(struct sock
*sk
, u16 index
,
2123 void *data
, u16 len
)
2125 struct hci_dev
*hdev
;
2126 struct mgmt_cp_remove_remote_oob_data
*cp
= data
;
2129 BT_DBG("hci%u ", index
);
2131 if (len
!= sizeof(*cp
))
2132 return cmd_status(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
2133 MGMT_STATUS_INVALID_PARAMS
);
2135 hdev
= hci_dev_get(index
);
2137 return cmd_status(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
2138 MGMT_STATUS_INVALID_PARAMS
);
2142 err
= hci_remove_remote_oob_data(hdev
, &cp
->addr
.bdaddr
);
2144 err
= cmd_status(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
2145 MGMT_STATUS_INVALID_PARAMS
);
2147 err
= cmd_complete(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
2150 hci_dev_unlock(hdev
);
2156 static int start_discovery(struct sock
*sk
, u16 index
,
2157 void *data
, u16 len
)
2159 struct mgmt_cp_start_discovery
*cp
= data
;
2160 unsigned long discov_type
= cp
->type
;
2161 struct pending_cmd
*cmd
;
2162 struct hci_dev
*hdev
;
2165 BT_DBG("hci%u", index
);
2167 if (len
!= sizeof(*cp
))
2168 return cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2169 MGMT_STATUS_INVALID_PARAMS
);
2171 hdev
= hci_dev_get(index
);
2173 return cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2174 MGMT_STATUS_INVALID_PARAMS
);
2178 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
2179 err
= cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2180 MGMT_STATUS_NOT_POWERED
);
2184 if (hdev
->discovery
.state
!= DISCOVERY_STOPPED
) {
2185 err
= cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2190 cmd
= mgmt_pending_add(sk
, MGMT_OP_START_DISCOVERY
, hdev
, NULL
, 0);
2196 if (test_bit(MGMT_ADDR_BREDR
, &discov_type
))
2197 err
= hci_do_inquiry(hdev
, INQUIRY_LEN_BREDR
);
2198 else if (test_bit(MGMT_ADDR_LE_PUBLIC
, &discov_type
) &&
2199 test_bit(MGMT_ADDR_LE_RANDOM
, &discov_type
))
2200 err
= hci_le_scan(hdev
, LE_SCAN_TYPE
, LE_SCAN_INT
,
2201 LE_SCAN_WIN
, LE_SCAN_TIMEOUT_LE_ONLY
);
2206 mgmt_pending_remove(cmd
);
2208 hci_discovery_set_state(hdev
, DISCOVERY_STARTING
);
2211 hci_dev_unlock(hdev
);
2217 static int stop_discovery(struct sock
*sk
, u16 index
)
2219 struct hci_dev
*hdev
;
2220 struct pending_cmd
*cmd
;
2221 struct hci_cp_remote_name_req_cancel cp
;
2222 struct inquiry_entry
*e
;
2225 BT_DBG("hci%u", index
);
2227 hdev
= hci_dev_get(index
);
2229 return cmd_status(sk
, index
, MGMT_OP_STOP_DISCOVERY
,
2230 MGMT_STATUS_INVALID_PARAMS
);
2234 if (!hci_discovery_active(hdev
)) {
2235 err
= cmd_status(sk
, index
, MGMT_OP_STOP_DISCOVERY
,
2236 MGMT_STATUS_REJECTED
);
2240 cmd
= mgmt_pending_add(sk
, MGMT_OP_STOP_DISCOVERY
, hdev
, NULL
, 0);
2246 if (hdev
->discovery
.state
== DISCOVERY_INQUIRY
) {
2247 err
= hci_cancel_inquiry(hdev
);
2249 mgmt_pending_remove(cmd
);
2251 hci_discovery_set_state(hdev
, DISCOVERY_STOPPING
);
2255 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_PENDING
);
2257 mgmt_pending_remove(cmd
);
2258 err
= cmd_complete(sk
, index
, MGMT_OP_STOP_DISCOVERY
, NULL
, 0);
2259 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
2263 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
2264 err
= hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ_CANCEL
,
2267 mgmt_pending_remove(cmd
);
2269 hci_discovery_set_state(hdev
, DISCOVERY_STOPPING
);
2272 hci_dev_unlock(hdev
);
2278 static int confirm_name(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2280 struct mgmt_cp_confirm_name
*cp
= data
;
2281 struct inquiry_entry
*e
;
2282 struct hci_dev
*hdev
;
2285 BT_DBG("hci%u", index
);
2287 if (len
!= sizeof(*cp
))
2288 return cmd_status(sk
, index
, MGMT_OP_CONFIRM_NAME
,
2289 MGMT_STATUS_INVALID_PARAMS
);
2291 hdev
= hci_dev_get(index
);
2293 return cmd_status(sk
, index
, MGMT_OP_CONFIRM_NAME
,
2294 MGMT_STATUS_INVALID_PARAMS
);
2298 if (!hci_discovery_active(hdev
)) {
2299 err
= cmd_status(sk
, index
, MGMT_OP_CONFIRM_NAME
,
2300 MGMT_STATUS_FAILED
);
2304 e
= hci_inquiry_cache_lookup_unknown(hdev
, &cp
->addr
.bdaddr
);
2306 err
= cmd_status (sk
, index
, MGMT_OP_CONFIRM_NAME
,
2307 MGMT_STATUS_INVALID_PARAMS
);
2311 if (cp
->name_known
) {
2312 e
->name_state
= NAME_KNOWN
;
2315 e
->name_state
= NAME_NEEDED
;
2316 hci_inquiry_cache_update_resolve(hdev
, e
);
2322 hci_dev_unlock(hdev
);
2327 static int block_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2329 struct hci_dev
*hdev
;
2330 struct mgmt_cp_block_device
*cp
= data
;
2333 BT_DBG("hci%u", index
);
2335 if (len
!= sizeof(*cp
))
2336 return cmd_status(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
2337 MGMT_STATUS_INVALID_PARAMS
);
2339 hdev
= hci_dev_get(index
);
2341 return cmd_status(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
2342 MGMT_STATUS_INVALID_PARAMS
);
2346 err
= hci_blacklist_add(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
2348 err
= cmd_status(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
2349 MGMT_STATUS_FAILED
);
2351 err
= cmd_complete(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
2354 hci_dev_unlock(hdev
);
2360 static int unblock_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2362 struct hci_dev
*hdev
;
2363 struct mgmt_cp_unblock_device
*cp
= data
;
2366 BT_DBG("hci%u", index
);
2368 if (len
!= sizeof(*cp
))
2369 return cmd_status(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
2370 MGMT_STATUS_INVALID_PARAMS
);
2372 hdev
= hci_dev_get(index
);
2374 return cmd_status(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
2375 MGMT_STATUS_INVALID_PARAMS
);
2379 err
= hci_blacklist_del(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
2382 err
= cmd_status(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
2383 MGMT_STATUS_INVALID_PARAMS
);
2385 err
= cmd_complete(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
2388 hci_dev_unlock(hdev
);
2394 static int set_fast_connectable(struct sock
*sk
, u16 index
,
2395 void *data
, u16 len
)
2397 struct hci_dev
*hdev
;
2398 struct mgmt_mode
*cp
= data
;
2399 struct hci_cp_write_page_scan_activity acp
;
2403 BT_DBG("hci%u", index
);
2405 if (len
!= sizeof(*cp
))
2406 return cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2407 MGMT_STATUS_INVALID_PARAMS
);
2409 hdev
= hci_dev_get(index
);
2411 return cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2412 MGMT_STATUS_INVALID_PARAMS
);
2417 type
= PAGE_SCAN_TYPE_INTERLACED
;
2418 acp
.interval
= 0x0024; /* 22.5 msec page scan interval */
2420 type
= PAGE_SCAN_TYPE_STANDARD
; /* default */
2421 acp
.interval
= 0x0800; /* default 1.28 sec page scan */
2424 acp
.window
= 0x0012; /* default 11.25 msec page scan window */
2426 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
,
2429 err
= cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2430 MGMT_STATUS_FAILED
);
2434 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_PAGE_SCAN_TYPE
, 1, &type
);
2436 err
= cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2437 MGMT_STATUS_FAILED
);
2441 err
= cmd_complete(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2444 hci_dev_unlock(hdev
);
2450 static int load_long_term_keys(struct sock
*sk
, u16 index
,
2451 void *cp_data
, u16 len
)
2453 struct hci_dev
*hdev
;
2454 struct mgmt_cp_load_long_term_keys
*cp
= cp_data
;
2455 u16 key_count
, expected_len
;
2458 if (len
< sizeof(*cp
))
2459 return cmd_status(sk
, index
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
2462 key_count
= get_unaligned_le16(&cp
->key_count
);
2464 expected_len
= sizeof(*cp
) + key_count
*
2465 sizeof(struct mgmt_ltk_info
);
2466 if (expected_len
!= len
) {
2467 BT_ERR("load_keys: expected %u bytes, got %u bytes",
2469 return cmd_status(sk
, index
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
2473 hdev
= hci_dev_get(index
);
2475 return cmd_status(sk
, index
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
2478 BT_DBG("hci%u key_count %u", index
, key_count
);
2482 hci_smp_ltks_clear(hdev
);
2484 for (i
= 0; i
< key_count
; i
++) {
2485 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
2491 type
= HCI_SMP_LTK_SLAVE
;
2493 hci_add_ltk(hdev
, &key
->addr
.bdaddr
, key
->addr
.type
,
2494 type
, 0, key
->authenticated
, key
->val
,
2495 key
->enc_size
, key
->ediv
, key
->rand
);
2498 hci_dev_unlock(hdev
);
2504 int mgmt_control(struct sock
*sk
, struct msghdr
*msg
, size_t msglen
)
2508 struct mgmt_hdr
*hdr
;
2509 u16 opcode
, index
, len
;
2512 BT_DBG("got %zu bytes", msglen
);
2514 if (msglen
< sizeof(*hdr
))
2517 buf
= kmalloc(msglen
, GFP_KERNEL
);
2521 if (memcpy_fromiovec(buf
, msg
->msg_iov
, msglen
)) {
2527 opcode
= get_unaligned_le16(&hdr
->opcode
);
2528 index
= get_unaligned_le16(&hdr
->index
);
2529 len
= get_unaligned_le16(&hdr
->len
);
2531 if (len
!= msglen
- sizeof(*hdr
)) {
2536 cp
= buf
+ sizeof(*hdr
);
2539 case MGMT_OP_READ_VERSION
:
2540 err
= read_version(sk
);
2542 case MGMT_OP_READ_COMMANDS
:
2543 err
= read_commands(sk
);
2545 case MGMT_OP_READ_INDEX_LIST
:
2546 err
= read_index_list(sk
);
2548 case MGMT_OP_READ_INFO
:
2549 err
= read_controller_info(sk
, index
);
2551 case MGMT_OP_SET_POWERED
:
2552 err
= set_powered(sk
, index
, cp
, len
);
2554 case MGMT_OP_SET_DISCOVERABLE
:
2555 err
= set_discoverable(sk
, index
, cp
, len
);
2557 case MGMT_OP_SET_CONNECTABLE
:
2558 err
= set_connectable(sk
, index
, cp
, len
);
2560 case MGMT_OP_SET_FAST_CONNECTABLE
:
2561 err
= set_fast_connectable(sk
, index
, cp
, len
);
2563 case MGMT_OP_SET_PAIRABLE
:
2564 err
= set_pairable(sk
, index
, cp
, len
);
2566 case MGMT_OP_SET_LINK_SECURITY
:
2567 err
= set_link_security(sk
, index
, cp
, len
);
2569 case MGMT_OP_SET_SSP
:
2570 err
= set_ssp(sk
, index
, cp
, len
);
2572 case MGMT_OP_ADD_UUID
:
2573 err
= add_uuid(sk
, index
, cp
, len
);
2575 case MGMT_OP_REMOVE_UUID
:
2576 err
= remove_uuid(sk
, index
, cp
, len
);
2578 case MGMT_OP_SET_DEV_CLASS
:
2579 err
= set_dev_class(sk
, index
, cp
, len
);
2581 case MGMT_OP_LOAD_LINK_KEYS
:
2582 err
= load_link_keys(sk
, index
, cp
, len
);
2584 case MGMT_OP_DISCONNECT
:
2585 err
= disconnect(sk
, index
, cp
, len
);
2587 case MGMT_OP_GET_CONNECTIONS
:
2588 err
= get_connections(sk
, index
);
2590 case MGMT_OP_PIN_CODE_REPLY
:
2591 err
= pin_code_reply(sk
, index
, cp
, len
);
2593 case MGMT_OP_PIN_CODE_NEG_REPLY
:
2594 err
= pin_code_neg_reply(sk
, index
, cp
, len
);
2596 case MGMT_OP_SET_IO_CAPABILITY
:
2597 err
= set_io_capability(sk
, index
, cp
, len
);
2599 case MGMT_OP_PAIR_DEVICE
:
2600 err
= pair_device(sk
, index
, cp
, len
);
2602 case MGMT_OP_CANCEL_PAIR_DEVICE
:
2603 err
= cancel_pair_device(sk
, index
, buf
+ sizeof(*hdr
), len
);
2605 case MGMT_OP_UNPAIR_DEVICE
:
2606 err
= unpair_device(sk
, index
, cp
, len
);
2608 case MGMT_OP_USER_CONFIRM_REPLY
:
2609 err
= user_confirm_reply(sk
, index
, cp
, len
);
2611 case MGMT_OP_USER_CONFIRM_NEG_REPLY
:
2612 err
= user_confirm_neg_reply(sk
, index
, cp
, len
);
2614 case MGMT_OP_USER_PASSKEY_REPLY
:
2615 err
= user_passkey_reply(sk
, index
, cp
, len
);
2617 case MGMT_OP_USER_PASSKEY_NEG_REPLY
:
2618 err
= user_passkey_neg_reply(sk
, index
, cp
, len
);
2620 case MGMT_OP_SET_LOCAL_NAME
:
2621 err
= set_local_name(sk
, index
, cp
, len
);
2623 case MGMT_OP_READ_LOCAL_OOB_DATA
:
2624 err
= read_local_oob_data(sk
, index
);
2626 case MGMT_OP_ADD_REMOTE_OOB_DATA
:
2627 err
= add_remote_oob_data(sk
, index
, cp
, len
);
2629 case MGMT_OP_REMOVE_REMOTE_OOB_DATA
:
2630 err
= remove_remote_oob_data(sk
, index
, cp
, len
);
2632 case MGMT_OP_START_DISCOVERY
:
2633 err
= start_discovery(sk
, index
, cp
, len
);
2635 case MGMT_OP_STOP_DISCOVERY
:
2636 err
= stop_discovery(sk
, index
);
2638 case MGMT_OP_CONFIRM_NAME
:
2639 err
= confirm_name(sk
, index
, cp
, len
);
2641 case MGMT_OP_BLOCK_DEVICE
:
2642 err
= block_device(sk
, index
, cp
, len
);
2644 case MGMT_OP_UNBLOCK_DEVICE
:
2645 err
= unblock_device(sk
, index
, cp
, len
);
2647 case MGMT_OP_LOAD_LONG_TERM_KEYS
:
2648 err
= load_long_term_keys(sk
, index
, cp
, len
);
2651 BT_DBG("Unknown op %u", opcode
);
2652 err
= cmd_status(sk
, index
, opcode
,
2653 MGMT_STATUS_UNKNOWN_COMMAND
);
2667 static void cmd_status_rsp(struct pending_cmd
*cmd
, void *data
)
2671 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, *status
);
2672 mgmt_pending_remove(cmd
);
2675 int mgmt_index_added(struct hci_dev
*hdev
)
2677 return mgmt_event(MGMT_EV_INDEX_ADDED
, hdev
, NULL
, 0, NULL
);
2680 int mgmt_index_removed(struct hci_dev
*hdev
)
2684 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status
);
2686 return mgmt_event(MGMT_EV_INDEX_REMOVED
, hdev
, NULL
, 0, NULL
);
2691 struct hci_dev
*hdev
;
2694 static void settings_rsp(struct pending_cmd
*cmd
, void *data
)
2696 struct cmd_lookup
*match
= data
;
2698 send_settings_rsp(cmd
->sk
, cmd
->opcode
, match
->hdev
);
2700 list_del(&cmd
->list
);
2702 if (match
->sk
== NULL
) {
2703 match
->sk
= cmd
->sk
;
2704 sock_hold(match
->sk
);
2707 mgmt_pending_free(cmd
);
2710 int mgmt_powered(struct hci_dev
*hdev
, u8 powered
)
2712 struct cmd_lookup match
= { NULL
, hdev
};
2716 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
2719 u8 status
= ENETDOWN
;
2720 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status
);
2723 ev
= cpu_to_le32(get_current_settings(hdev
));
2725 err
= mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
),
2734 int mgmt_discoverable(struct hci_dev
*hdev
, u8 discoverable
)
2736 struct cmd_lookup match
= { NULL
, hdev
};
2740 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, hdev
, settings_rsp
, &match
);
2742 ev
= cpu_to_le32(get_current_settings(hdev
));
2744 err
= mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
),
2752 int mgmt_connectable(struct hci_dev
*hdev
, u8 connectable
)
2755 struct cmd_lookup match
= { NULL
, hdev
};
2758 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, hdev
, settings_rsp
,
2761 ev
= cpu_to_le32(get_current_settings(hdev
));
2763 err
= mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), match
.sk
);
2771 int mgmt_write_scan_failed(struct hci_dev
*hdev
, u8 scan
, u8 status
)
2773 u8 mgmt_err
= mgmt_status(status
);
2775 if (scan
& SCAN_PAGE
)
2776 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, hdev
,
2777 cmd_status_rsp
, &mgmt_err
);
2779 if (scan
& SCAN_INQUIRY
)
2780 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, hdev
,
2781 cmd_status_rsp
, &mgmt_err
);
2786 int mgmt_new_link_key(struct hci_dev
*hdev
, struct link_key
*key
,
2789 struct mgmt_ev_new_link_key ev
;
2791 memset(&ev
, 0, sizeof(ev
));
2793 ev
.store_hint
= persistent
;
2794 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
2795 ev
.key
.addr
.type
= MGMT_ADDR_BREDR
;
2796 ev
.key
.type
= key
->type
;
2797 memcpy(ev
.key
.val
, key
->val
, 16);
2798 ev
.key
.pin_len
= key
->pin_len
;
2800 return mgmt_event(MGMT_EV_NEW_LINK_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
2803 int mgmt_new_ltk(struct hci_dev
*hdev
, struct smp_ltk
*key
, u8 persistent
)
2805 struct mgmt_ev_new_long_term_key ev
;
2807 memset(&ev
, 0, sizeof(ev
));
2809 ev
.store_hint
= persistent
;
2810 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
2811 ev
.key
.addr
.type
= key
->bdaddr_type
;
2812 ev
.key
.authenticated
= key
->authenticated
;
2813 ev
.key
.enc_size
= key
->enc_size
;
2814 ev
.key
.ediv
= key
->ediv
;
2816 if (key
->type
== HCI_SMP_LTK
)
2819 memcpy(ev
.key
.rand
, key
->rand
, sizeof(key
->rand
));
2820 memcpy(ev
.key
.val
, key
->val
, sizeof(key
->val
));
2822 return mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY
, hdev
,
2823 &ev
, sizeof(ev
), NULL
);
2826 int mgmt_device_connected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
2827 u8 addr_type
, u8
*name
, u8 name_len
,
2831 struct mgmt_ev_device_connected
*ev
= (void *) buf
;
2834 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
2835 ev
->addr
.type
= link_to_mgmt(link_type
, addr_type
);
2838 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
,
2841 if (dev_class
&& memcmp(dev_class
, "\0\0\0", 3) != 0)
2842 eir_len
= eir_append_data(&ev
->eir
[eir_len
], eir_len
,
2843 EIR_CLASS_OF_DEV
, dev_class
, 3);
2845 put_unaligned_le16(eir_len
, &ev
->eir_len
);
2847 return mgmt_event(MGMT_EV_DEVICE_CONNECTED
, hdev
, buf
,
2848 sizeof(*ev
) + eir_len
, NULL
);
2851 static void disconnect_rsp(struct pending_cmd
*cmd
, void *data
)
2853 struct mgmt_cp_disconnect
*cp
= cmd
->param
;
2854 struct sock
**sk
= data
;
2855 struct mgmt_rp_disconnect rp
;
2857 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2858 rp
.addr
.type
= cp
->addr
.type
;
2861 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
, &rp
, sizeof(rp
));
2866 mgmt_pending_remove(cmd
);
2869 static void unpair_device_rsp(struct pending_cmd
*cmd
, void *data
)
2871 struct hci_dev
*hdev
= data
;
2872 struct mgmt_cp_unpair_device
*cp
= cmd
->param
;
2873 struct mgmt_rp_unpair_device rp
;
2875 memset(&rp
, 0, sizeof(rp
));
2876 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2877 rp
.addr
.type
= cp
->addr
.type
;
2879 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, cmd
->sk
);
2881 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, &rp
, sizeof(rp
));
2883 mgmt_pending_remove(cmd
);
2886 int mgmt_device_disconnected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2887 u8 link_type
, u8 addr_type
)
2889 struct mgmt_addr_info ev
;
2890 struct sock
*sk
= NULL
;
2893 mgmt_pending_foreach(MGMT_OP_DISCONNECT
, hdev
, disconnect_rsp
, &sk
);
2895 bacpy(&ev
.bdaddr
, bdaddr
);
2896 ev
.type
= link_to_mgmt(link_type
, addr_type
);
2898 err
= mgmt_event(MGMT_EV_DEVICE_DISCONNECTED
, hdev
, &ev
, sizeof(ev
),
2904 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
2910 int mgmt_disconnect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2911 u8 link_type
, u8 addr_type
, u8 status
)
2913 struct mgmt_rp_disconnect rp
;
2914 struct pending_cmd
*cmd
;
2917 cmd
= mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
);
2921 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
2922 rp
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
2923 rp
.status
= mgmt_status(status
);
2925 err
= cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
,
2928 mgmt_pending_remove(cmd
);
2930 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
2935 int mgmt_connect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
2936 u8 addr_type
, u8 status
)
2938 struct mgmt_ev_connect_failed ev
;
2940 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
2941 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
2942 ev
.status
= mgmt_status(status
);
2944 return mgmt_event(MGMT_EV_CONNECT_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
2947 int mgmt_pin_code_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 secure
)
2949 struct mgmt_ev_pin_code_request ev
;
2951 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
2952 ev
.addr
.type
= MGMT_ADDR_BREDR
;
2955 return mgmt_event(MGMT_EV_PIN_CODE_REQUEST
, hdev
, &ev
, sizeof(ev
),
2959 int mgmt_pin_code_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2962 struct pending_cmd
*cmd
;
2963 struct mgmt_rp_pin_code_reply rp
;
2966 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY
, hdev
);
2970 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
2971 rp
.addr
.type
= MGMT_ADDR_BREDR
;
2972 rp
.status
= mgmt_status(status
);
2974 err
= cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
, &rp
,
2977 mgmt_pending_remove(cmd
);
2982 int mgmt_pin_code_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2985 struct pending_cmd
*cmd
;
2986 struct mgmt_rp_pin_code_reply rp
;
2989 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
);
2993 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
2994 rp
.addr
.type
= MGMT_ADDR_BREDR
;
2995 rp
.status
= mgmt_status(status
);
2997 err
= cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_NEG_REPLY
, &rp
,
3000 mgmt_pending_remove(cmd
);
3005 int mgmt_user_confirm_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3006 u8 link_type
, u8 addr_type
, __le32 value
,
3009 struct mgmt_ev_user_confirm_request ev
;
3011 BT_DBG("%s", hdev
->name
);
3013 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3014 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3015 ev
.confirm_hint
= confirm_hint
;
3016 put_unaligned_le32(value
, &ev
.value
);
3018 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST
, hdev
, &ev
, sizeof(ev
),
3022 int mgmt_user_passkey_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3023 u8 link_type
, u8 addr_type
)
3025 struct mgmt_ev_user_passkey_request ev
;
3027 BT_DBG("%s", hdev
->name
);
3029 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3030 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3032 return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST
, hdev
, &ev
, sizeof(ev
),
3036 static int user_pairing_resp_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3037 u8 link_type
, u8 addr_type
, u8 status
,
3040 struct pending_cmd
*cmd
;
3041 struct mgmt_rp_user_confirm_reply rp
;
3044 cmd
= mgmt_pending_find(opcode
, hdev
);
3048 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
3049 rp
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3050 rp
.status
= mgmt_status(status
);
3051 err
= cmd_complete(cmd
->sk
, hdev
->id
, opcode
, &rp
, sizeof(rp
));
3053 mgmt_pending_remove(cmd
);
3058 int mgmt_user_confirm_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3059 u8 link_type
, u8 addr_type
, u8 status
)
3061 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3062 status
, MGMT_OP_USER_CONFIRM_REPLY
);
3065 int mgmt_user_confirm_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3066 u8 link_type
, u8 addr_type
, u8 status
)
3068 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3069 status
, MGMT_OP_USER_CONFIRM_NEG_REPLY
);
3072 int mgmt_user_passkey_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3073 u8 link_type
, u8 addr_type
, u8 status
)
3075 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3076 status
, MGMT_OP_USER_PASSKEY_REPLY
);
3079 int mgmt_user_passkey_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3080 u8 link_type
, u8 addr_type
, u8 status
)
3082 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3083 status
, MGMT_OP_USER_PASSKEY_NEG_REPLY
);
3086 int mgmt_auth_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3087 u8 addr_type
, u8 status
)
3089 struct mgmt_ev_auth_failed ev
;
3091 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3092 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3093 ev
.status
= mgmt_status(status
);
3095 return mgmt_event(MGMT_EV_AUTH_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
3098 int mgmt_auth_enable_complete(struct hci_dev
*hdev
, u8 status
)
3100 struct cmd_lookup match
= { NULL
, hdev
};
3105 u8 mgmt_err
= mgmt_status(status
);
3106 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
,
3107 cmd_status_rsp
, &mgmt_err
);
3111 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
, settings_rsp
,
3114 ev
= cpu_to_le32(get_current_settings(hdev
));
3115 err
= mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), match
.sk
);
3123 int mgmt_ssp_enable_complete(struct hci_dev
*hdev
, u8 status
)
3125 struct cmd_lookup match
= { NULL
, hdev
};
3130 u8 mgmt_err
= mgmt_status(status
);
3131 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
,
3132 cmd_status_rsp
, &mgmt_err
);
3136 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, settings_rsp
, &match
);
3138 ev
= cpu_to_le32(get_current_settings(hdev
));
3139 err
= mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), match
.sk
);
3147 int mgmt_set_local_name_complete(struct hci_dev
*hdev
, u8
*name
, u8 status
)
3149 struct pending_cmd
*cmd
;
3150 struct mgmt_cp_set_local_name ev
;
3153 memset(&ev
, 0, sizeof(ev
));
3154 memcpy(ev
.name
, name
, HCI_MAX_NAME_LENGTH
);
3156 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
3161 err
= cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
,
3162 mgmt_status(status
));
3168 err
= cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, &ev
,
3174 err
= mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, &ev
, sizeof(ev
),
3175 cmd
? cmd
->sk
: NULL
);
3179 mgmt_pending_remove(cmd
);
3183 int mgmt_read_local_oob_data_reply_complete(struct hci_dev
*hdev
, u8
*hash
,
3184 u8
*randomizer
, u8 status
)
3186 struct pending_cmd
*cmd
;
3189 BT_DBG("%s status %u", hdev
->name
, status
);
3191 cmd
= mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
);
3196 err
= cmd_status(cmd
->sk
, hdev
->id
,
3197 MGMT_OP_READ_LOCAL_OOB_DATA
,
3198 mgmt_status(status
));
3200 struct mgmt_rp_read_local_oob_data rp
;
3202 memcpy(rp
.hash
, hash
, sizeof(rp
.hash
));
3203 memcpy(rp
.randomizer
, randomizer
, sizeof(rp
.randomizer
));
3205 err
= cmd_complete(cmd
->sk
, hdev
->id
,
3206 MGMT_OP_READ_LOCAL_OOB_DATA
,
3210 mgmt_pending_remove(cmd
);
3215 int mgmt_device_found(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3216 u8 addr_type
, u8
*dev_class
, s8 rssi
,
3217 u8 cfm_name
, u8
*eir
, u16 eir_len
)
3220 struct mgmt_ev_device_found
*ev
= (void *) buf
;
3223 /* Leave 5 bytes for a potential CoD field */
3224 if (sizeof(*ev
) + eir_len
+ 5 > sizeof(buf
))
3227 memset(buf
, 0, sizeof(buf
));
3229 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
3230 ev
->addr
.type
= link_to_mgmt(link_type
, addr_type
);
3232 ev
->confirm_name
= cfm_name
;
3235 memcpy(ev
->eir
, eir
, eir_len
);
3237 if (dev_class
&& !eir_has_data_type(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
))
3238 eir_len
= eir_append_data(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
,
3241 put_unaligned_le16(eir_len
, &ev
->eir_len
);
3243 ev_size
= sizeof(*ev
) + eir_len
;
3245 return mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, ev_size
, NULL
);
3248 int mgmt_remote_name(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3249 u8 addr_type
, s8 rssi
, u8
*name
, u8 name_len
)
3251 struct mgmt_ev_device_found
*ev
;
3252 char buf
[sizeof(*ev
) + HCI_MAX_NAME_LENGTH
+ 2];
3255 ev
= (struct mgmt_ev_device_found
*) buf
;
3257 memset(buf
, 0, sizeof(buf
));
3259 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
3260 ev
->addr
.type
= link_to_mgmt(link_type
, addr_type
);
3263 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
, name
,
3266 put_unaligned_le16(eir_len
, &ev
->eir_len
);
3268 return mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
,
3269 sizeof(*ev
) + eir_len
, NULL
);
3272 int mgmt_start_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3274 struct pending_cmd
*cmd
;
3277 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3279 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
3283 err
= cmd_status(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
));
3284 mgmt_pending_remove(cmd
);
3289 int mgmt_stop_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3291 struct pending_cmd
*cmd
;
3294 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
3298 err
= cmd_status(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
));
3299 mgmt_pending_remove(cmd
);
3304 int mgmt_discovering(struct hci_dev
*hdev
, u8 discovering
)
3306 struct pending_cmd
*cmd
;
3308 BT_DBG("%s discovering %u", hdev
->name
, discovering
);
3311 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
3313 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
3316 cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, NULL
, 0);
3317 mgmt_pending_remove(cmd
);
3320 return mgmt_event(MGMT_EV_DISCOVERING
, hdev
, &discovering
,
3321 sizeof(discovering
), NULL
);
3324 int mgmt_device_blocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
3326 struct pending_cmd
*cmd
;
3327 struct mgmt_ev_device_blocked ev
;
3329 cmd
= mgmt_pending_find(MGMT_OP_BLOCK_DEVICE
, hdev
);
3331 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3332 ev
.addr
.type
= type
;
3334 return mgmt_event(MGMT_EV_DEVICE_BLOCKED
, hdev
, &ev
, sizeof(ev
),
3335 cmd
? cmd
->sk
: NULL
);
3338 int mgmt_device_unblocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
3340 struct pending_cmd
*cmd
;
3341 struct mgmt_ev_device_unblocked ev
;
3343 cmd
= mgmt_pending_find(MGMT_OP_UNBLOCK_DEVICE
, hdev
);
3345 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3346 ev
.addr
.type
= type
;
3348 return mgmt_event(MGMT_EV_DEVICE_UNBLOCKED
, hdev
, &ev
, sizeof(ev
),
3349 cmd
? cmd
->sk
: NULL
);