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/module.h>
28 #include <asm/unaligned.h>
30 #include <net/bluetooth/bluetooth.h>
31 #include <net/bluetooth/hci_core.h>
32 #include <net/bluetooth/l2cap.h>
33 #include <net/bluetooth/mgmt.h>
37 #define MGMT_VERSION 1
38 #define MGMT_REVISION 7
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
,
78 MGMT_OP_SET_DEVICE_ID
,
79 MGMT_OP_SET_ADVERTISING
,
81 MGMT_OP_SET_STATIC_ADDRESS
,
82 MGMT_OP_SET_SCAN_PARAMS
,
83 MGMT_OP_SET_SECURE_CONN
,
84 MGMT_OP_SET_DEBUG_KEYS
,
87 MGMT_OP_GET_CONN_INFO
,
88 MGMT_OP_GET_CLOCK_INFO
,
90 MGMT_OP_REMOVE_DEVICE
,
91 MGMT_OP_LOAD_CONN_PARAM
,
92 MGMT_OP_READ_UNCONF_INDEX_LIST
,
93 MGMT_OP_READ_CONFIG_INFO
,
94 MGMT_OP_SET_EXTERNAL_CONFIG
,
95 MGMT_OP_SET_PUBLIC_ADDRESS
,
98 static const u16 mgmt_events
[] = {
99 MGMT_EV_CONTROLLER_ERROR
,
101 MGMT_EV_INDEX_REMOVED
,
102 MGMT_EV_NEW_SETTINGS
,
103 MGMT_EV_CLASS_OF_DEV_CHANGED
,
104 MGMT_EV_LOCAL_NAME_CHANGED
,
105 MGMT_EV_NEW_LINK_KEY
,
106 MGMT_EV_NEW_LONG_TERM_KEY
,
107 MGMT_EV_DEVICE_CONNECTED
,
108 MGMT_EV_DEVICE_DISCONNECTED
,
109 MGMT_EV_CONNECT_FAILED
,
110 MGMT_EV_PIN_CODE_REQUEST
,
111 MGMT_EV_USER_CONFIRM_REQUEST
,
112 MGMT_EV_USER_PASSKEY_REQUEST
,
114 MGMT_EV_DEVICE_FOUND
,
116 MGMT_EV_DEVICE_BLOCKED
,
117 MGMT_EV_DEVICE_UNBLOCKED
,
118 MGMT_EV_DEVICE_UNPAIRED
,
119 MGMT_EV_PASSKEY_NOTIFY
,
122 MGMT_EV_DEVICE_ADDED
,
123 MGMT_EV_DEVICE_REMOVED
,
124 MGMT_EV_NEW_CONN_PARAM
,
125 MGMT_EV_UNCONF_INDEX_ADDED
,
126 MGMT_EV_UNCONF_INDEX_REMOVED
,
127 MGMT_EV_NEW_CONFIG_OPTIONS
,
130 #define CACHE_TIMEOUT msecs_to_jiffies(2 * 1000)
132 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
133 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
136 struct list_head list
;
144 /* HCI to MGMT error code conversion table */
145 static u8 mgmt_status_table
[] = {
147 MGMT_STATUS_UNKNOWN_COMMAND
, /* Unknown Command */
148 MGMT_STATUS_NOT_CONNECTED
, /* No Connection */
149 MGMT_STATUS_FAILED
, /* Hardware Failure */
150 MGMT_STATUS_CONNECT_FAILED
, /* Page Timeout */
151 MGMT_STATUS_AUTH_FAILED
, /* Authentication Failed */
152 MGMT_STATUS_AUTH_FAILED
, /* PIN or Key Missing */
153 MGMT_STATUS_NO_RESOURCES
, /* Memory Full */
154 MGMT_STATUS_TIMEOUT
, /* Connection Timeout */
155 MGMT_STATUS_NO_RESOURCES
, /* Max Number of Connections */
156 MGMT_STATUS_NO_RESOURCES
, /* Max Number of SCO Connections */
157 MGMT_STATUS_ALREADY_CONNECTED
, /* ACL Connection Exists */
158 MGMT_STATUS_BUSY
, /* Command Disallowed */
159 MGMT_STATUS_NO_RESOURCES
, /* Rejected Limited Resources */
160 MGMT_STATUS_REJECTED
, /* Rejected Security */
161 MGMT_STATUS_REJECTED
, /* Rejected Personal */
162 MGMT_STATUS_TIMEOUT
, /* Host Timeout */
163 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Feature */
164 MGMT_STATUS_INVALID_PARAMS
, /* Invalid Parameters */
165 MGMT_STATUS_DISCONNECTED
, /* OE User Ended Connection */
166 MGMT_STATUS_NO_RESOURCES
, /* OE Low Resources */
167 MGMT_STATUS_DISCONNECTED
, /* OE Power Off */
168 MGMT_STATUS_DISCONNECTED
, /* Connection Terminated */
169 MGMT_STATUS_BUSY
, /* Repeated Attempts */
170 MGMT_STATUS_REJECTED
, /* Pairing Not Allowed */
171 MGMT_STATUS_FAILED
, /* Unknown LMP PDU */
172 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Remote Feature */
173 MGMT_STATUS_REJECTED
, /* SCO Offset Rejected */
174 MGMT_STATUS_REJECTED
, /* SCO Interval Rejected */
175 MGMT_STATUS_REJECTED
, /* Air Mode Rejected */
176 MGMT_STATUS_INVALID_PARAMS
, /* Invalid LMP Parameters */
177 MGMT_STATUS_FAILED
, /* Unspecified Error */
178 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported LMP Parameter Value */
179 MGMT_STATUS_FAILED
, /* Role Change Not Allowed */
180 MGMT_STATUS_TIMEOUT
, /* LMP Response Timeout */
181 MGMT_STATUS_FAILED
, /* LMP Error Transaction Collision */
182 MGMT_STATUS_FAILED
, /* LMP PDU Not Allowed */
183 MGMT_STATUS_REJECTED
, /* Encryption Mode Not Accepted */
184 MGMT_STATUS_FAILED
, /* Unit Link Key Used */
185 MGMT_STATUS_NOT_SUPPORTED
, /* QoS Not Supported */
186 MGMT_STATUS_TIMEOUT
, /* Instant Passed */
187 MGMT_STATUS_NOT_SUPPORTED
, /* Pairing Not Supported */
188 MGMT_STATUS_FAILED
, /* Transaction Collision */
189 MGMT_STATUS_INVALID_PARAMS
, /* Unacceptable Parameter */
190 MGMT_STATUS_REJECTED
, /* QoS Rejected */
191 MGMT_STATUS_NOT_SUPPORTED
, /* Classification Not Supported */
192 MGMT_STATUS_REJECTED
, /* Insufficient Security */
193 MGMT_STATUS_INVALID_PARAMS
, /* Parameter Out Of Range */
194 MGMT_STATUS_BUSY
, /* Role Switch Pending */
195 MGMT_STATUS_FAILED
, /* Slot Violation */
196 MGMT_STATUS_FAILED
, /* Role Switch Failed */
197 MGMT_STATUS_INVALID_PARAMS
, /* EIR Too Large */
198 MGMT_STATUS_NOT_SUPPORTED
, /* Simple Pairing Not Supported */
199 MGMT_STATUS_BUSY
, /* Host Busy Pairing */
200 MGMT_STATUS_REJECTED
, /* Rejected, No Suitable Channel */
201 MGMT_STATUS_BUSY
, /* Controller Busy */
202 MGMT_STATUS_INVALID_PARAMS
, /* Unsuitable Connection Interval */
203 MGMT_STATUS_TIMEOUT
, /* Directed Advertising Timeout */
204 MGMT_STATUS_AUTH_FAILED
, /* Terminated Due to MIC Failure */
205 MGMT_STATUS_CONNECT_FAILED
, /* Connection Establishment Failed */
206 MGMT_STATUS_CONNECT_FAILED
, /* MAC Connection Failed */
209 static u8
mgmt_status(u8 hci_status
)
211 if (hci_status
< ARRAY_SIZE(mgmt_status_table
))
212 return mgmt_status_table
[hci_status
];
214 return MGMT_STATUS_FAILED
;
217 static int mgmt_event(u16 event
, struct hci_dev
*hdev
, void *data
, u16 data_len
,
218 struct sock
*skip_sk
)
221 struct mgmt_hdr
*hdr
;
223 skb
= alloc_skb(sizeof(*hdr
) + data_len
, GFP_KERNEL
);
227 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
228 hdr
->opcode
= cpu_to_le16(event
);
230 hdr
->index
= cpu_to_le16(hdev
->id
);
232 hdr
->index
= cpu_to_le16(MGMT_INDEX_NONE
);
233 hdr
->len
= cpu_to_le16(data_len
);
236 memcpy(skb_put(skb
, data_len
), data
, data_len
);
239 __net_timestamp(skb
);
241 hci_send_to_control(skb
, skip_sk
);
247 static int cmd_status(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
)
250 struct mgmt_hdr
*hdr
;
251 struct mgmt_ev_cmd_status
*ev
;
254 BT_DBG("sock %p, index %u, cmd %u, status %u", sk
, index
, cmd
, status
);
256 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
), GFP_KERNEL
);
260 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
262 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_STATUS
);
263 hdr
->index
= cpu_to_le16(index
);
264 hdr
->len
= cpu_to_le16(sizeof(*ev
));
266 ev
= (void *) skb_put(skb
, sizeof(*ev
));
268 ev
->opcode
= cpu_to_le16(cmd
);
270 err
= sock_queue_rcv_skb(sk
, skb
);
277 static int cmd_complete(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
,
278 void *rp
, size_t rp_len
)
281 struct mgmt_hdr
*hdr
;
282 struct mgmt_ev_cmd_complete
*ev
;
285 BT_DBG("sock %p", sk
);
287 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
) + rp_len
, GFP_KERNEL
);
291 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
293 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_COMPLETE
);
294 hdr
->index
= cpu_to_le16(index
);
295 hdr
->len
= cpu_to_le16(sizeof(*ev
) + rp_len
);
297 ev
= (void *) skb_put(skb
, sizeof(*ev
) + rp_len
);
298 ev
->opcode
= cpu_to_le16(cmd
);
302 memcpy(ev
->data
, rp
, rp_len
);
304 err
= sock_queue_rcv_skb(sk
, skb
);
311 static int read_version(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
314 struct mgmt_rp_read_version rp
;
316 BT_DBG("sock %p", sk
);
318 rp
.version
= MGMT_VERSION
;
319 rp
.revision
= cpu_to_le16(MGMT_REVISION
);
321 return cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_VERSION
, 0, &rp
,
325 static int read_commands(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
328 struct mgmt_rp_read_commands
*rp
;
329 const u16 num_commands
= ARRAY_SIZE(mgmt_commands
);
330 const u16 num_events
= ARRAY_SIZE(mgmt_events
);
335 BT_DBG("sock %p", sk
);
337 rp_size
= sizeof(*rp
) + ((num_commands
+ num_events
) * sizeof(u16
));
339 rp
= kmalloc(rp_size
, GFP_KERNEL
);
343 rp
->num_commands
= cpu_to_le16(num_commands
);
344 rp
->num_events
= cpu_to_le16(num_events
);
346 for (i
= 0, opcode
= rp
->opcodes
; i
< num_commands
; i
++, opcode
++)
347 put_unaligned_le16(mgmt_commands
[i
], opcode
);
349 for (i
= 0; i
< num_events
; i
++, opcode
++)
350 put_unaligned_le16(mgmt_events
[i
], opcode
);
352 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_COMMANDS
, 0, rp
,
359 static int read_index_list(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
362 struct mgmt_rp_read_index_list
*rp
;
368 BT_DBG("sock %p", sk
);
370 read_lock(&hci_dev_list_lock
);
373 list_for_each_entry(d
, &hci_dev_list
, list
) {
374 if (d
->dev_type
== HCI_BREDR
&&
375 !test_bit(HCI_UNCONFIGURED
, &d
->dev_flags
))
379 rp_len
= sizeof(*rp
) + (2 * count
);
380 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
382 read_unlock(&hci_dev_list_lock
);
387 list_for_each_entry(d
, &hci_dev_list
, list
) {
388 if (test_bit(HCI_SETUP
, &d
->dev_flags
) ||
389 test_bit(HCI_CONFIG
, &d
->dev_flags
) ||
390 test_bit(HCI_USER_CHANNEL
, &d
->dev_flags
))
393 /* Devices marked as raw-only are neither configured
394 * nor unconfigured controllers.
396 if (test_bit(HCI_QUIRK_RAW_DEVICE
, &d
->quirks
))
399 if (d
->dev_type
== HCI_BREDR
&&
400 !test_bit(HCI_UNCONFIGURED
, &d
->dev_flags
)) {
401 rp
->index
[count
++] = cpu_to_le16(d
->id
);
402 BT_DBG("Added hci%u", d
->id
);
406 rp
->num_controllers
= cpu_to_le16(count
);
407 rp_len
= sizeof(*rp
) + (2 * count
);
409 read_unlock(&hci_dev_list_lock
);
411 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_INDEX_LIST
, 0, rp
,
419 static int read_unconf_index_list(struct sock
*sk
, struct hci_dev
*hdev
,
420 void *data
, u16 data_len
)
422 struct mgmt_rp_read_unconf_index_list
*rp
;
428 BT_DBG("sock %p", sk
);
430 read_lock(&hci_dev_list_lock
);
433 list_for_each_entry(d
, &hci_dev_list
, list
) {
434 if (d
->dev_type
== HCI_BREDR
&&
435 test_bit(HCI_UNCONFIGURED
, &d
->dev_flags
))
439 rp_len
= sizeof(*rp
) + (2 * count
);
440 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
442 read_unlock(&hci_dev_list_lock
);
447 list_for_each_entry(d
, &hci_dev_list
, list
) {
448 if (test_bit(HCI_SETUP
, &d
->dev_flags
) ||
449 test_bit(HCI_CONFIG
, &d
->dev_flags
) ||
450 test_bit(HCI_USER_CHANNEL
, &d
->dev_flags
))
453 /* Devices marked as raw-only are neither configured
454 * nor unconfigured controllers.
456 if (test_bit(HCI_QUIRK_RAW_DEVICE
, &d
->quirks
))
459 if (d
->dev_type
== HCI_BREDR
&&
460 test_bit(HCI_UNCONFIGURED
, &d
->dev_flags
)) {
461 rp
->index
[count
++] = cpu_to_le16(d
->id
);
462 BT_DBG("Added hci%u", d
->id
);
466 rp
->num_controllers
= cpu_to_le16(count
);
467 rp_len
= sizeof(*rp
) + (2 * count
);
469 read_unlock(&hci_dev_list_lock
);
471 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_UNCONF_INDEX_LIST
,
479 static bool is_configured(struct hci_dev
*hdev
)
481 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG
, &hdev
->quirks
) &&
482 !test_bit(HCI_EXT_CONFIGURED
, &hdev
->dev_flags
))
485 if (test_bit(HCI_QUIRK_INVALID_BDADDR
, &hdev
->quirks
) &&
486 !bacmp(&hdev
->public_addr
, BDADDR_ANY
))
492 static __le32
get_missing_options(struct hci_dev
*hdev
)
496 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG
, &hdev
->quirks
) &&
497 !test_bit(HCI_EXT_CONFIGURED
, &hdev
->dev_flags
))
498 options
|= MGMT_OPTION_EXTERNAL_CONFIG
;
500 if (test_bit(HCI_QUIRK_INVALID_BDADDR
, &hdev
->quirks
) &&
501 !bacmp(&hdev
->public_addr
, BDADDR_ANY
))
502 options
|= MGMT_OPTION_PUBLIC_ADDRESS
;
504 return cpu_to_le32(options
);
507 static int new_options(struct hci_dev
*hdev
, struct sock
*skip
)
509 __le32 options
= get_missing_options(hdev
);
511 return mgmt_event(MGMT_EV_NEW_CONFIG_OPTIONS
, hdev
, &options
,
512 sizeof(options
), skip
);
515 static int send_options_rsp(struct sock
*sk
, u16 opcode
, struct hci_dev
*hdev
)
517 __le32 options
= get_missing_options(hdev
);
519 return cmd_complete(sk
, hdev
->id
, opcode
, 0, &options
,
523 static int read_config_info(struct sock
*sk
, struct hci_dev
*hdev
,
524 void *data
, u16 data_len
)
526 struct mgmt_rp_read_config_info rp
;
529 BT_DBG("sock %p %s", sk
, hdev
->name
);
533 memset(&rp
, 0, sizeof(rp
));
534 rp
.manufacturer
= cpu_to_le16(hdev
->manufacturer
);
536 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG
, &hdev
->quirks
))
537 options
|= MGMT_OPTION_EXTERNAL_CONFIG
;
539 if (hdev
->set_bdaddr
)
540 options
|= MGMT_OPTION_PUBLIC_ADDRESS
;
542 rp
.supported_options
= cpu_to_le32(options
);
543 rp
.missing_options
= get_missing_options(hdev
);
545 hci_dev_unlock(hdev
);
547 return cmd_complete(sk
, hdev
->id
, MGMT_OP_READ_CONFIG_INFO
, 0, &rp
,
551 static u32
get_supported_settings(struct hci_dev
*hdev
)
555 settings
|= MGMT_SETTING_POWERED
;
556 settings
|= MGMT_SETTING_PAIRABLE
;
557 settings
|= MGMT_SETTING_DEBUG_KEYS
;
559 if (lmp_bredr_capable(hdev
)) {
560 settings
|= MGMT_SETTING_CONNECTABLE
;
561 if (hdev
->hci_ver
>= BLUETOOTH_VER_1_2
)
562 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
563 settings
|= MGMT_SETTING_DISCOVERABLE
;
564 settings
|= MGMT_SETTING_BREDR
;
565 settings
|= MGMT_SETTING_LINK_SECURITY
;
567 if (lmp_ssp_capable(hdev
)) {
568 settings
|= MGMT_SETTING_SSP
;
569 settings
|= MGMT_SETTING_HS
;
572 if (lmp_sc_capable(hdev
) ||
573 test_bit(HCI_FORCE_SC
, &hdev
->dbg_flags
))
574 settings
|= MGMT_SETTING_SECURE_CONN
;
577 if (lmp_le_capable(hdev
)) {
578 settings
|= MGMT_SETTING_LE
;
579 settings
|= MGMT_SETTING_ADVERTISING
;
580 settings
|= MGMT_SETTING_PRIVACY
;
583 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG
, &hdev
->quirks
) ||
585 settings
|= MGMT_SETTING_CONFIGURATION
;
590 static u32
get_current_settings(struct hci_dev
*hdev
)
594 if (hdev_is_powered(hdev
))
595 settings
|= MGMT_SETTING_POWERED
;
597 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
598 settings
|= MGMT_SETTING_CONNECTABLE
;
600 if (test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
))
601 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
603 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
604 settings
|= MGMT_SETTING_DISCOVERABLE
;
606 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
607 settings
|= MGMT_SETTING_PAIRABLE
;
609 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
610 settings
|= MGMT_SETTING_BREDR
;
612 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
613 settings
|= MGMT_SETTING_LE
;
615 if (test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
))
616 settings
|= MGMT_SETTING_LINK_SECURITY
;
618 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
619 settings
|= MGMT_SETTING_SSP
;
621 if (test_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
))
622 settings
|= MGMT_SETTING_HS
;
624 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
625 settings
|= MGMT_SETTING_ADVERTISING
;
627 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
))
628 settings
|= MGMT_SETTING_SECURE_CONN
;
630 if (test_bit(HCI_KEEP_DEBUG_KEYS
, &hdev
->dev_flags
))
631 settings
|= MGMT_SETTING_DEBUG_KEYS
;
633 if (test_bit(HCI_PRIVACY
, &hdev
->dev_flags
))
634 settings
|= MGMT_SETTING_PRIVACY
;
639 #define PNP_INFO_SVCLASS_ID 0x1200
641 static u8
*create_uuid16_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
643 u8
*ptr
= data
, *uuids_start
= NULL
;
644 struct bt_uuid
*uuid
;
649 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
652 if (uuid
->size
!= 16)
655 uuid16
= get_unaligned_le16(&uuid
->uuid
[12]);
659 if (uuid16
== PNP_INFO_SVCLASS_ID
)
665 uuids_start
[1] = EIR_UUID16_ALL
;
669 /* Stop if not enough space to put next UUID */
670 if ((ptr
- data
) + sizeof(u16
) > len
) {
671 uuids_start
[1] = EIR_UUID16_SOME
;
675 *ptr
++ = (uuid16
& 0x00ff);
676 *ptr
++ = (uuid16
& 0xff00) >> 8;
677 uuids_start
[0] += sizeof(uuid16
);
683 static u8
*create_uuid32_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
685 u8
*ptr
= data
, *uuids_start
= NULL
;
686 struct bt_uuid
*uuid
;
691 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
692 if (uuid
->size
!= 32)
698 uuids_start
[1] = EIR_UUID32_ALL
;
702 /* Stop if not enough space to put next UUID */
703 if ((ptr
- data
) + sizeof(u32
) > len
) {
704 uuids_start
[1] = EIR_UUID32_SOME
;
708 memcpy(ptr
, &uuid
->uuid
[12], sizeof(u32
));
710 uuids_start
[0] += sizeof(u32
);
716 static u8
*create_uuid128_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
718 u8
*ptr
= data
, *uuids_start
= NULL
;
719 struct bt_uuid
*uuid
;
724 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
725 if (uuid
->size
!= 128)
731 uuids_start
[1] = EIR_UUID128_ALL
;
735 /* Stop if not enough space to put next UUID */
736 if ((ptr
- data
) + 16 > len
) {
737 uuids_start
[1] = EIR_UUID128_SOME
;
741 memcpy(ptr
, uuid
->uuid
, 16);
743 uuids_start
[0] += 16;
749 static struct pending_cmd
*mgmt_pending_find(u16 opcode
, struct hci_dev
*hdev
)
751 struct pending_cmd
*cmd
;
753 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
754 if (cmd
->opcode
== opcode
)
761 static struct pending_cmd
*mgmt_pending_find_data(u16 opcode
,
762 struct hci_dev
*hdev
,
765 struct pending_cmd
*cmd
;
767 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
768 if (cmd
->user_data
!= data
)
770 if (cmd
->opcode
== opcode
)
777 static u8
create_scan_rsp_data(struct hci_dev
*hdev
, u8
*ptr
)
782 name_len
= strlen(hdev
->dev_name
);
784 size_t max_len
= HCI_MAX_AD_LENGTH
- ad_len
- 2;
786 if (name_len
> max_len
) {
788 ptr
[1] = EIR_NAME_SHORT
;
790 ptr
[1] = EIR_NAME_COMPLETE
;
792 ptr
[0] = name_len
+ 1;
794 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
796 ad_len
+= (name_len
+ 2);
797 ptr
+= (name_len
+ 2);
803 static void update_scan_rsp_data(struct hci_request
*req
)
805 struct hci_dev
*hdev
= req
->hdev
;
806 struct hci_cp_le_set_scan_rsp_data cp
;
809 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
812 memset(&cp
, 0, sizeof(cp
));
814 len
= create_scan_rsp_data(hdev
, cp
.data
);
816 if (hdev
->scan_rsp_data_len
== len
&&
817 memcmp(cp
.data
, hdev
->scan_rsp_data
, len
) == 0)
820 memcpy(hdev
->scan_rsp_data
, cp
.data
, sizeof(cp
.data
));
821 hdev
->scan_rsp_data_len
= len
;
825 hci_req_add(req
, HCI_OP_LE_SET_SCAN_RSP_DATA
, sizeof(cp
), &cp
);
828 static u8
get_adv_discov_flags(struct hci_dev
*hdev
)
830 struct pending_cmd
*cmd
;
832 /* If there's a pending mgmt command the flags will not yet have
833 * their final values, so check for this first.
835 cmd
= mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
);
837 struct mgmt_mode
*cp
= cmd
->param
;
839 return LE_AD_GENERAL
;
840 else if (cp
->val
== 0x02)
841 return LE_AD_LIMITED
;
843 if (test_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
))
844 return LE_AD_LIMITED
;
845 else if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
846 return LE_AD_GENERAL
;
852 static u8
create_adv_data(struct hci_dev
*hdev
, u8
*ptr
)
854 u8 ad_len
= 0, flags
= 0;
856 flags
|= get_adv_discov_flags(hdev
);
858 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
859 flags
|= LE_AD_NO_BREDR
;
862 BT_DBG("adv flags 0x%02x", flags
);
872 if (hdev
->adv_tx_power
!= HCI_TX_POWER_INVALID
) {
874 ptr
[1] = EIR_TX_POWER
;
875 ptr
[2] = (u8
) hdev
->adv_tx_power
;
884 static void update_adv_data(struct hci_request
*req
)
886 struct hci_dev
*hdev
= req
->hdev
;
887 struct hci_cp_le_set_adv_data cp
;
890 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
893 memset(&cp
, 0, sizeof(cp
));
895 len
= create_adv_data(hdev
, cp
.data
);
897 if (hdev
->adv_data_len
== len
&&
898 memcmp(cp
.data
, hdev
->adv_data
, len
) == 0)
901 memcpy(hdev
->adv_data
, cp
.data
, sizeof(cp
.data
));
902 hdev
->adv_data_len
= len
;
906 hci_req_add(req
, HCI_OP_LE_SET_ADV_DATA
, sizeof(cp
), &cp
);
909 static void create_eir(struct hci_dev
*hdev
, u8
*data
)
914 name_len
= strlen(hdev
->dev_name
);
920 ptr
[1] = EIR_NAME_SHORT
;
922 ptr
[1] = EIR_NAME_COMPLETE
;
924 /* EIR Data length */
925 ptr
[0] = name_len
+ 1;
927 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
929 ptr
+= (name_len
+ 2);
932 if (hdev
->inq_tx_power
!= HCI_TX_POWER_INVALID
) {
934 ptr
[1] = EIR_TX_POWER
;
935 ptr
[2] = (u8
) hdev
->inq_tx_power
;
940 if (hdev
->devid_source
> 0) {
942 ptr
[1] = EIR_DEVICE_ID
;
944 put_unaligned_le16(hdev
->devid_source
, ptr
+ 2);
945 put_unaligned_le16(hdev
->devid_vendor
, ptr
+ 4);
946 put_unaligned_le16(hdev
->devid_product
, ptr
+ 6);
947 put_unaligned_le16(hdev
->devid_version
, ptr
+ 8);
952 ptr
= create_uuid16_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
953 ptr
= create_uuid32_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
954 ptr
= create_uuid128_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
957 static void update_eir(struct hci_request
*req
)
959 struct hci_dev
*hdev
= req
->hdev
;
960 struct hci_cp_write_eir cp
;
962 if (!hdev_is_powered(hdev
))
965 if (!lmp_ext_inq_capable(hdev
))
968 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
971 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
974 memset(&cp
, 0, sizeof(cp
));
976 create_eir(hdev
, cp
.data
);
978 if (memcmp(cp
.data
, hdev
->eir
, sizeof(cp
.data
)) == 0)
981 memcpy(hdev
->eir
, cp
.data
, sizeof(cp
.data
));
983 hci_req_add(req
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
986 static u8
get_service_classes(struct hci_dev
*hdev
)
988 struct bt_uuid
*uuid
;
991 list_for_each_entry(uuid
, &hdev
->uuids
, list
)
992 val
|= uuid
->svc_hint
;
997 static void update_class(struct hci_request
*req
)
999 struct hci_dev
*hdev
= req
->hdev
;
1002 BT_DBG("%s", hdev
->name
);
1004 if (!hdev_is_powered(hdev
))
1007 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1010 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
1013 cod
[0] = hdev
->minor_class
;
1014 cod
[1] = hdev
->major_class
;
1015 cod
[2] = get_service_classes(hdev
);
1017 if (test_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
))
1020 if (memcmp(cod
, hdev
->dev_class
, 3) == 0)
1023 hci_req_add(req
, HCI_OP_WRITE_CLASS_OF_DEV
, sizeof(cod
), cod
);
1026 static bool get_connectable(struct hci_dev
*hdev
)
1028 struct pending_cmd
*cmd
;
1030 /* If there's a pending mgmt command the flag will not yet have
1031 * it's final value, so check for this first.
1033 cmd
= mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
);
1035 struct mgmt_mode
*cp
= cmd
->param
;
1039 return test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1042 static void enable_advertising(struct hci_request
*req
)
1044 struct hci_dev
*hdev
= req
->hdev
;
1045 struct hci_cp_le_set_adv_param cp
;
1046 u8 own_addr_type
, enable
= 0x01;
1049 /* Clear the HCI_ADVERTISING bit temporarily so that the
1050 * hci_update_random_address knows that it's safe to go ahead
1051 * and write a new random address. The flag will be set back on
1052 * as soon as the SET_ADV_ENABLE HCI command completes.
1054 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
1056 connectable
= get_connectable(hdev
);
1058 /* Set require_privacy to true only when non-connectable
1059 * advertising is used. In that case it is fine to use a
1060 * non-resolvable private address.
1062 if (hci_update_random_address(req
, !connectable
, &own_addr_type
) < 0)
1065 memset(&cp
, 0, sizeof(cp
));
1066 cp
.min_interval
= cpu_to_le16(0x0800);
1067 cp
.max_interval
= cpu_to_le16(0x0800);
1068 cp
.type
= connectable
? LE_ADV_IND
: LE_ADV_NONCONN_IND
;
1069 cp
.own_address_type
= own_addr_type
;
1070 cp
.channel_map
= hdev
->le_adv_channel_map
;
1072 hci_req_add(req
, HCI_OP_LE_SET_ADV_PARAM
, sizeof(cp
), &cp
);
1074 hci_req_add(req
, HCI_OP_LE_SET_ADV_ENABLE
, sizeof(enable
), &enable
);
1077 static void disable_advertising(struct hci_request
*req
)
1081 hci_req_add(req
, HCI_OP_LE_SET_ADV_ENABLE
, sizeof(enable
), &enable
);
1084 static void service_cache_off(struct work_struct
*work
)
1086 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
1087 service_cache
.work
);
1088 struct hci_request req
;
1090 if (!test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
1093 hci_req_init(&req
, hdev
);
1100 hci_dev_unlock(hdev
);
1102 hci_req_run(&req
, NULL
);
1105 static void rpa_expired(struct work_struct
*work
)
1107 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
1109 struct hci_request req
;
1113 set_bit(HCI_RPA_EXPIRED
, &hdev
->dev_flags
);
1115 if (!test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
) ||
1116 hci_conn_num(hdev
, LE_LINK
) > 0)
1119 /* The generation of a new RPA and programming it into the
1120 * controller happens in the enable_advertising() function.
1123 hci_req_init(&req
, hdev
);
1125 disable_advertising(&req
);
1126 enable_advertising(&req
);
1128 hci_req_run(&req
, NULL
);
1131 static void mgmt_init_hdev(struct sock
*sk
, struct hci_dev
*hdev
)
1133 if (test_and_set_bit(HCI_MGMT
, &hdev
->dev_flags
))
1136 INIT_DELAYED_WORK(&hdev
->service_cache
, service_cache_off
);
1137 INIT_DELAYED_WORK(&hdev
->rpa_expired
, rpa_expired
);
1139 /* Non-mgmt controlled devices get this bit set
1140 * implicitly so that pairing works for them, however
1141 * for mgmt we require user-space to explicitly enable
1144 clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1147 static int read_controller_info(struct sock
*sk
, struct hci_dev
*hdev
,
1148 void *data
, u16 data_len
)
1150 struct mgmt_rp_read_info rp
;
1152 BT_DBG("sock %p %s", sk
, hdev
->name
);
1156 memset(&rp
, 0, sizeof(rp
));
1158 bacpy(&rp
.bdaddr
, &hdev
->bdaddr
);
1160 rp
.version
= hdev
->hci_ver
;
1161 rp
.manufacturer
= cpu_to_le16(hdev
->manufacturer
);
1163 rp
.supported_settings
= cpu_to_le32(get_supported_settings(hdev
));
1164 rp
.current_settings
= cpu_to_le32(get_current_settings(hdev
));
1166 memcpy(rp
.dev_class
, hdev
->dev_class
, 3);
1168 memcpy(rp
.name
, hdev
->dev_name
, sizeof(hdev
->dev_name
));
1169 memcpy(rp
.short_name
, hdev
->short_name
, sizeof(hdev
->short_name
));
1171 hci_dev_unlock(hdev
);
1173 return cmd_complete(sk
, hdev
->id
, MGMT_OP_READ_INFO
, 0, &rp
,
1177 static void mgmt_pending_free(struct pending_cmd
*cmd
)
1184 static struct pending_cmd
*mgmt_pending_add(struct sock
*sk
, u16 opcode
,
1185 struct hci_dev
*hdev
, void *data
,
1188 struct pending_cmd
*cmd
;
1190 cmd
= kzalloc(sizeof(*cmd
), GFP_KERNEL
);
1194 cmd
->opcode
= opcode
;
1195 cmd
->index
= hdev
->id
;
1197 cmd
->param
= kmalloc(len
, GFP_KERNEL
);
1204 memcpy(cmd
->param
, data
, len
);
1209 list_add(&cmd
->list
, &hdev
->mgmt_pending
);
1214 static void mgmt_pending_foreach(u16 opcode
, struct hci_dev
*hdev
,
1215 void (*cb
)(struct pending_cmd
*cmd
,
1219 struct pending_cmd
*cmd
, *tmp
;
1221 list_for_each_entry_safe(cmd
, tmp
, &hdev
->mgmt_pending
, list
) {
1222 if (opcode
> 0 && cmd
->opcode
!= opcode
)
1229 static void mgmt_pending_remove(struct pending_cmd
*cmd
)
1231 list_del(&cmd
->list
);
1232 mgmt_pending_free(cmd
);
1235 static int send_settings_rsp(struct sock
*sk
, u16 opcode
, struct hci_dev
*hdev
)
1237 __le32 settings
= cpu_to_le32(get_current_settings(hdev
));
1239 return cmd_complete(sk
, hdev
->id
, opcode
, 0, &settings
,
1243 static void clean_up_hci_complete(struct hci_dev
*hdev
, u8 status
)
1245 BT_DBG("%s status 0x%02x", hdev
->name
, status
);
1247 if (hci_conn_count(hdev
) == 0) {
1248 cancel_delayed_work(&hdev
->power_off
);
1249 queue_work(hdev
->req_workqueue
, &hdev
->power_off
.work
);
1253 static void hci_stop_discovery(struct hci_request
*req
)
1255 struct hci_dev
*hdev
= req
->hdev
;
1256 struct hci_cp_remote_name_req_cancel cp
;
1257 struct inquiry_entry
*e
;
1259 switch (hdev
->discovery
.state
) {
1260 case DISCOVERY_FINDING
:
1261 if (test_bit(HCI_INQUIRY
, &hdev
->flags
)) {
1262 hci_req_add(req
, HCI_OP_INQUIRY_CANCEL
, 0, NULL
);
1264 cancel_delayed_work(&hdev
->le_scan_disable
);
1265 hci_req_add_le_scan_disable(req
);
1270 case DISCOVERY_RESOLVING
:
1271 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
,
1276 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1277 hci_req_add(req
, HCI_OP_REMOTE_NAME_REQ_CANCEL
, sizeof(cp
),
1283 /* Passive scanning */
1284 if (test_bit(HCI_LE_SCAN
, &hdev
->dev_flags
))
1285 hci_req_add_le_scan_disable(req
);
1290 static int clean_up_hci_state(struct hci_dev
*hdev
)
1292 struct hci_request req
;
1293 struct hci_conn
*conn
;
1295 hci_req_init(&req
, hdev
);
1297 if (test_bit(HCI_ISCAN
, &hdev
->flags
) ||
1298 test_bit(HCI_PSCAN
, &hdev
->flags
)) {
1300 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
1303 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
1304 disable_advertising(&req
);
1306 hci_stop_discovery(&req
);
1308 list_for_each_entry(conn
, &hdev
->conn_hash
.list
, list
) {
1309 struct hci_cp_disconnect dc
;
1310 struct hci_cp_reject_conn_req rej
;
1312 switch (conn
->state
) {
1315 dc
.handle
= cpu_to_le16(conn
->handle
);
1316 dc
.reason
= 0x15; /* Terminated due to Power Off */
1317 hci_req_add(&req
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
1320 if (conn
->type
== LE_LINK
)
1321 hci_req_add(&req
, HCI_OP_LE_CREATE_CONN_CANCEL
,
1323 else if (conn
->type
== ACL_LINK
)
1324 hci_req_add(&req
, HCI_OP_CREATE_CONN_CANCEL
,
1328 bacpy(&rej
.bdaddr
, &conn
->dst
);
1329 rej
.reason
= 0x15; /* Terminated due to Power Off */
1330 if (conn
->type
== ACL_LINK
)
1331 hci_req_add(&req
, HCI_OP_REJECT_CONN_REQ
,
1333 else if (conn
->type
== SCO_LINK
)
1334 hci_req_add(&req
, HCI_OP_REJECT_SYNC_CONN_REQ
,
1340 return hci_req_run(&req
, clean_up_hci_complete
);
1343 static int set_powered(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1346 struct mgmt_mode
*cp
= data
;
1347 struct pending_cmd
*cmd
;
1350 BT_DBG("request for %s", hdev
->name
);
1352 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1353 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_POWERED
,
1354 MGMT_STATUS_INVALID_PARAMS
);
1358 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
)) {
1359 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_POWERED
,
1364 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
)) {
1365 cancel_delayed_work(&hdev
->power_off
);
1368 mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
,
1370 err
= mgmt_powered(hdev
, 1);
1375 if (!!cp
->val
== hdev_is_powered(hdev
)) {
1376 err
= send_settings_rsp(sk
, MGMT_OP_SET_POWERED
, hdev
);
1380 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
, data
, len
);
1387 queue_work(hdev
->req_workqueue
, &hdev
->power_on
);
1390 /* Disconnect connections, stop scans, etc */
1391 err
= clean_up_hci_state(hdev
);
1393 queue_delayed_work(hdev
->req_workqueue
, &hdev
->power_off
,
1394 HCI_POWER_OFF_TIMEOUT
);
1396 /* ENODATA means there were no HCI commands queued */
1397 if (err
== -ENODATA
) {
1398 cancel_delayed_work(&hdev
->power_off
);
1399 queue_work(hdev
->req_workqueue
, &hdev
->power_off
.work
);
1405 hci_dev_unlock(hdev
);
1409 static int new_settings(struct hci_dev
*hdev
, struct sock
*skip
)
1413 ev
= cpu_to_le32(get_current_settings(hdev
));
1415 return mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), skip
);
1420 struct hci_dev
*hdev
;
1424 static void settings_rsp(struct pending_cmd
*cmd
, void *data
)
1426 struct cmd_lookup
*match
= data
;
1428 send_settings_rsp(cmd
->sk
, cmd
->opcode
, match
->hdev
);
1430 list_del(&cmd
->list
);
1432 if (match
->sk
== NULL
) {
1433 match
->sk
= cmd
->sk
;
1434 sock_hold(match
->sk
);
1437 mgmt_pending_free(cmd
);
1440 static void cmd_status_rsp(struct pending_cmd
*cmd
, void *data
)
1444 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, *status
);
1445 mgmt_pending_remove(cmd
);
1448 static u8
mgmt_bredr_support(struct hci_dev
*hdev
)
1450 if (!lmp_bredr_capable(hdev
))
1451 return MGMT_STATUS_NOT_SUPPORTED
;
1452 else if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1453 return MGMT_STATUS_REJECTED
;
1455 return MGMT_STATUS_SUCCESS
;
1458 static u8
mgmt_le_support(struct hci_dev
*hdev
)
1460 if (!lmp_le_capable(hdev
))
1461 return MGMT_STATUS_NOT_SUPPORTED
;
1462 else if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
1463 return MGMT_STATUS_REJECTED
;
1465 return MGMT_STATUS_SUCCESS
;
1468 static void set_discoverable_complete(struct hci_dev
*hdev
, u8 status
)
1470 struct pending_cmd
*cmd
;
1471 struct mgmt_mode
*cp
;
1472 struct hci_request req
;
1475 BT_DBG("status 0x%02x", status
);
1479 cmd
= mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
);
1484 u8 mgmt_err
= mgmt_status(status
);
1485 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
1486 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1492 changed
= !test_and_set_bit(HCI_DISCOVERABLE
,
1495 if (hdev
->discov_timeout
> 0) {
1496 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
1497 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
1501 changed
= test_and_clear_bit(HCI_DISCOVERABLE
,
1505 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1508 new_settings(hdev
, cmd
->sk
);
1510 /* When the discoverable mode gets changed, make sure
1511 * that class of device has the limited discoverable
1512 * bit correctly set.
1514 hci_req_init(&req
, hdev
);
1516 hci_req_run(&req
, NULL
);
1519 mgmt_pending_remove(cmd
);
1522 hci_dev_unlock(hdev
);
1525 static int set_discoverable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1528 struct mgmt_cp_set_discoverable
*cp
= data
;
1529 struct pending_cmd
*cmd
;
1530 struct hci_request req
;
1535 BT_DBG("request for %s", hdev
->name
);
1537 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
1538 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1539 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1540 MGMT_STATUS_REJECTED
);
1542 if (cp
->val
!= 0x00 && cp
->val
!= 0x01 && cp
->val
!= 0x02)
1543 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1544 MGMT_STATUS_INVALID_PARAMS
);
1546 timeout
= __le16_to_cpu(cp
->timeout
);
1548 /* Disabling discoverable requires that no timeout is set,
1549 * and enabling limited discoverable requires a timeout.
1551 if ((cp
->val
== 0x00 && timeout
> 0) ||
1552 (cp
->val
== 0x02 && timeout
== 0))
1553 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1554 MGMT_STATUS_INVALID_PARAMS
);
1558 if (!hdev_is_powered(hdev
) && timeout
> 0) {
1559 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1560 MGMT_STATUS_NOT_POWERED
);
1564 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
1565 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
1566 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1571 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
)) {
1572 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1573 MGMT_STATUS_REJECTED
);
1577 if (!hdev_is_powered(hdev
)) {
1578 bool changed
= false;
1580 /* Setting limited discoverable when powered off is
1581 * not a valid operation since it requires a timeout
1582 * and so no need to check HCI_LIMITED_DISCOVERABLE.
1584 if (!!cp
->val
!= test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
)) {
1585 change_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1589 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1594 err
= new_settings(hdev
, sk
);
1599 /* If the current mode is the same, then just update the timeout
1600 * value with the new value. And if only the timeout gets updated,
1601 * then no need for any HCI transactions.
1603 if (!!cp
->val
== test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
) &&
1604 (cp
->val
== 0x02) == test_bit(HCI_LIMITED_DISCOVERABLE
,
1605 &hdev
->dev_flags
)) {
1606 cancel_delayed_work(&hdev
->discov_off
);
1607 hdev
->discov_timeout
= timeout
;
1609 if (cp
->val
&& hdev
->discov_timeout
> 0) {
1610 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
1611 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
1615 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1619 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
, data
, len
);
1625 /* Cancel any potential discoverable timeout that might be
1626 * still active and store new timeout value. The arming of
1627 * the timeout happens in the complete handler.
1629 cancel_delayed_work(&hdev
->discov_off
);
1630 hdev
->discov_timeout
= timeout
;
1632 /* Limited discoverable mode */
1633 if (cp
->val
== 0x02)
1634 set_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1636 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1638 hci_req_init(&req
, hdev
);
1640 /* The procedure for LE-only controllers is much simpler - just
1641 * update the advertising data.
1643 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1649 struct hci_cp_write_current_iac_lap hci_cp
;
1651 if (cp
->val
== 0x02) {
1652 /* Limited discoverable mode */
1653 hci_cp
.num_iac
= min_t(u8
, hdev
->num_iac
, 2);
1654 hci_cp
.iac_lap
[0] = 0x00; /* LIAC */
1655 hci_cp
.iac_lap
[1] = 0x8b;
1656 hci_cp
.iac_lap
[2] = 0x9e;
1657 hci_cp
.iac_lap
[3] = 0x33; /* GIAC */
1658 hci_cp
.iac_lap
[4] = 0x8b;
1659 hci_cp
.iac_lap
[5] = 0x9e;
1661 /* General discoverable mode */
1663 hci_cp
.iac_lap
[0] = 0x33; /* GIAC */
1664 hci_cp
.iac_lap
[1] = 0x8b;
1665 hci_cp
.iac_lap
[2] = 0x9e;
1668 hci_req_add(&req
, HCI_OP_WRITE_CURRENT_IAC_LAP
,
1669 (hci_cp
.num_iac
* 3) + 1, &hci_cp
);
1671 scan
|= SCAN_INQUIRY
;
1673 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1676 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
, sizeof(scan
), &scan
);
1679 update_adv_data(&req
);
1681 err
= hci_req_run(&req
, set_discoverable_complete
);
1683 mgmt_pending_remove(cmd
);
1686 hci_dev_unlock(hdev
);
1690 static void write_fast_connectable(struct hci_request
*req
, bool enable
)
1692 struct hci_dev
*hdev
= req
->hdev
;
1693 struct hci_cp_write_page_scan_activity acp
;
1696 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1699 if (hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
1703 type
= PAGE_SCAN_TYPE_INTERLACED
;
1705 /* 160 msec page scan interval */
1706 acp
.interval
= cpu_to_le16(0x0100);
1708 type
= PAGE_SCAN_TYPE_STANDARD
; /* default */
1710 /* default 1.28 sec page scan */
1711 acp
.interval
= cpu_to_le16(0x0800);
1714 acp
.window
= cpu_to_le16(0x0012);
1716 if (__cpu_to_le16(hdev
->page_scan_interval
) != acp
.interval
||
1717 __cpu_to_le16(hdev
->page_scan_window
) != acp
.window
)
1718 hci_req_add(req
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
,
1721 if (hdev
->page_scan_type
!= type
)
1722 hci_req_add(req
, HCI_OP_WRITE_PAGE_SCAN_TYPE
, 1, &type
);
1725 static void set_connectable_complete(struct hci_dev
*hdev
, u8 status
)
1727 struct pending_cmd
*cmd
;
1728 struct mgmt_mode
*cp
;
1731 BT_DBG("status 0x%02x", status
);
1735 cmd
= mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
);
1740 u8 mgmt_err
= mgmt_status(status
);
1741 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
1747 changed
= !test_and_set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1749 changed
= test_and_clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1751 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
1754 new_settings(hdev
, cmd
->sk
);
1755 hci_update_background_scan(hdev
);
1759 mgmt_pending_remove(cmd
);
1762 hci_dev_unlock(hdev
);
1765 static int set_connectable_update_settings(struct hci_dev
*hdev
,
1766 struct sock
*sk
, u8 val
)
1768 bool changed
= false;
1771 if (!!val
!= test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
1775 set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1777 clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1778 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1781 err
= send_settings_rsp(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
1786 return new_settings(hdev
, sk
);
1791 static int set_connectable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1794 struct mgmt_mode
*cp
= data
;
1795 struct pending_cmd
*cmd
;
1796 struct hci_request req
;
1800 BT_DBG("request for %s", hdev
->name
);
1802 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
1803 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1804 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1805 MGMT_STATUS_REJECTED
);
1807 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1808 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1809 MGMT_STATUS_INVALID_PARAMS
);
1813 if (!hdev_is_powered(hdev
)) {
1814 err
= set_connectable_update_settings(hdev
, sk
, cp
->val
);
1818 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
1819 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
1820 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1825 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
, data
, len
);
1831 hci_req_init(&req
, hdev
);
1833 /* If BR/EDR is not enabled and we disable advertising as a
1834 * by-product of disabling connectable, we need to update the
1835 * advertising flags.
1837 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
1839 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1840 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1842 update_adv_data(&req
);
1843 } else if (cp
->val
!= test_bit(HCI_PSCAN
, &hdev
->flags
)) {
1849 if (test_bit(HCI_ISCAN
, &hdev
->flags
) &&
1850 hdev
->discov_timeout
> 0)
1851 cancel_delayed_work(&hdev
->discov_off
);
1854 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
1857 /* If we're going from non-connectable to connectable or
1858 * vice-versa when fast connectable is enabled ensure that fast
1859 * connectable gets disabled. write_fast_connectable won't do
1860 * anything if the page scan parameters are already what they
1863 if (cp
->val
|| test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
))
1864 write_fast_connectable(&req
, false);
1866 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
) &&
1867 hci_conn_num(hdev
, LE_LINK
) == 0) {
1868 disable_advertising(&req
);
1869 enable_advertising(&req
);
1872 err
= hci_req_run(&req
, set_connectable_complete
);
1874 mgmt_pending_remove(cmd
);
1875 if (err
== -ENODATA
)
1876 err
= set_connectable_update_settings(hdev
, sk
,
1882 hci_dev_unlock(hdev
);
1886 static int set_pairable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1889 struct mgmt_mode
*cp
= data
;
1893 BT_DBG("request for %s", hdev
->name
);
1895 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1896 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PAIRABLE
,
1897 MGMT_STATUS_INVALID_PARAMS
);
1902 changed
= !test_and_set_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1904 changed
= test_and_clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1906 err
= send_settings_rsp(sk
, MGMT_OP_SET_PAIRABLE
, hdev
);
1911 err
= new_settings(hdev
, sk
);
1914 hci_dev_unlock(hdev
);
1918 static int set_link_security(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1921 struct mgmt_mode
*cp
= data
;
1922 struct pending_cmd
*cmd
;
1926 BT_DBG("request for %s", hdev
->name
);
1928 status
= mgmt_bredr_support(hdev
);
1930 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1933 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1934 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1935 MGMT_STATUS_INVALID_PARAMS
);
1939 if (!hdev_is_powered(hdev
)) {
1940 bool changed
= false;
1942 if (!!cp
->val
!= test_bit(HCI_LINK_SECURITY
,
1943 &hdev
->dev_flags
)) {
1944 change_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
1948 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1953 err
= new_settings(hdev
, sk
);
1958 if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY
, hdev
)) {
1959 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1966 if (test_bit(HCI_AUTH
, &hdev
->flags
) == val
) {
1967 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1971 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
, data
, len
);
1977 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, sizeof(val
), &val
);
1979 mgmt_pending_remove(cmd
);
1984 hci_dev_unlock(hdev
);
1988 static int set_ssp(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1990 struct mgmt_mode
*cp
= data
;
1991 struct pending_cmd
*cmd
;
1995 BT_DBG("request for %s", hdev
->name
);
1997 status
= mgmt_bredr_support(hdev
);
1999 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
, status
);
2001 if (!lmp_ssp_capable(hdev
))
2002 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
2003 MGMT_STATUS_NOT_SUPPORTED
);
2005 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
2006 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
2007 MGMT_STATUS_INVALID_PARAMS
);
2011 if (!hdev_is_powered(hdev
)) {
2015 changed
= !test_and_set_bit(HCI_SSP_ENABLED
,
2018 changed
= test_and_clear_bit(HCI_SSP_ENABLED
,
2021 changed
= test_and_clear_bit(HCI_HS_ENABLED
,
2024 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
2027 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
2032 err
= new_settings(hdev
, sk
);
2037 if (mgmt_pending_find(MGMT_OP_SET_SSP
, hdev
) ||
2038 mgmt_pending_find(MGMT_OP_SET_HS
, hdev
)) {
2039 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
2044 if (!!cp
->val
== test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
)) {
2045 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
2049 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SSP
, hdev
, data
, len
);
2055 if (!cp
->val
&& test_bit(HCI_USE_DEBUG_KEYS
, &hdev
->dev_flags
))
2056 hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_DEBUG_MODE
,
2057 sizeof(cp
->val
), &cp
->val
);
2059 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, 1, &cp
->val
);
2061 mgmt_pending_remove(cmd
);
2066 hci_dev_unlock(hdev
);
2070 static int set_hs(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
2072 struct mgmt_mode
*cp
= data
;
2077 BT_DBG("request for %s", hdev
->name
);
2079 status
= mgmt_bredr_support(hdev
);
2081 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
, status
);
2083 if (!lmp_ssp_capable(hdev
))
2084 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
2085 MGMT_STATUS_NOT_SUPPORTED
);
2087 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
2088 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
2089 MGMT_STATUS_REJECTED
);
2091 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
2092 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
2093 MGMT_STATUS_INVALID_PARAMS
);
2098 changed
= !test_and_set_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
2100 if (hdev_is_powered(hdev
)) {
2101 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
2102 MGMT_STATUS_REJECTED
);
2106 changed
= test_and_clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
2109 err
= send_settings_rsp(sk
, MGMT_OP_SET_HS
, hdev
);
2114 err
= new_settings(hdev
, sk
);
2117 hci_dev_unlock(hdev
);
2121 static void le_enable_complete(struct hci_dev
*hdev
, u8 status
)
2123 struct cmd_lookup match
= { NULL
, hdev
};
2126 u8 mgmt_err
= mgmt_status(status
);
2128 mgmt_pending_foreach(MGMT_OP_SET_LE
, hdev
, cmd_status_rsp
,
2133 mgmt_pending_foreach(MGMT_OP_SET_LE
, hdev
, settings_rsp
, &match
);
2135 new_settings(hdev
, match
.sk
);
2140 /* Make sure the controller has a good default for
2141 * advertising data. Restrict the update to when LE
2142 * has actually been enabled. During power on, the
2143 * update in powered_update_hci will take care of it.
2145 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
2146 struct hci_request req
;
2150 hci_req_init(&req
, hdev
);
2151 update_adv_data(&req
);
2152 update_scan_rsp_data(&req
);
2153 hci_req_run(&req
, NULL
);
2155 hci_update_background_scan(hdev
);
2157 hci_dev_unlock(hdev
);
2161 static int set_le(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
2163 struct mgmt_mode
*cp
= data
;
2164 struct hci_cp_write_le_host_supported hci_cp
;
2165 struct pending_cmd
*cmd
;
2166 struct hci_request req
;
2170 BT_DBG("request for %s", hdev
->name
);
2172 if (!lmp_le_capable(hdev
))
2173 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
2174 MGMT_STATUS_NOT_SUPPORTED
);
2176 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
2177 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
2178 MGMT_STATUS_INVALID_PARAMS
);
2180 /* LE-only devices do not allow toggling LE on/off */
2181 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
2182 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
2183 MGMT_STATUS_REJECTED
);
2188 enabled
= lmp_host_le_capable(hdev
);
2190 if (!hdev_is_powered(hdev
) || val
== enabled
) {
2191 bool changed
= false;
2193 if (val
!= test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
2194 change_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
);
2198 if (!val
&& test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
2199 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
2203 err
= send_settings_rsp(sk
, MGMT_OP_SET_LE
, hdev
);
2208 err
= new_settings(hdev
, sk
);
2213 if (mgmt_pending_find(MGMT_OP_SET_LE
, hdev
) ||
2214 mgmt_pending_find(MGMT_OP_SET_ADVERTISING
, hdev
)) {
2215 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
2220 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LE
, hdev
, data
, len
);
2226 hci_req_init(&req
, hdev
);
2228 memset(&hci_cp
, 0, sizeof(hci_cp
));
2232 hci_cp
.simul
= lmp_le_br_capable(hdev
);
2234 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
2235 disable_advertising(&req
);
2238 hci_req_add(&req
, HCI_OP_WRITE_LE_HOST_SUPPORTED
, sizeof(hci_cp
),
2241 err
= hci_req_run(&req
, le_enable_complete
);
2243 mgmt_pending_remove(cmd
);
2246 hci_dev_unlock(hdev
);
2250 /* This is a helper function to test for pending mgmt commands that can
2251 * cause CoD or EIR HCI commands. We can only allow one such pending
2252 * mgmt command at a time since otherwise we cannot easily track what
2253 * the current values are, will be, and based on that calculate if a new
2254 * HCI command needs to be sent and if yes with what value.
2256 static bool pending_eir_or_class(struct hci_dev
*hdev
)
2258 struct pending_cmd
*cmd
;
2260 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
2261 switch (cmd
->opcode
) {
2262 case MGMT_OP_ADD_UUID
:
2263 case MGMT_OP_REMOVE_UUID
:
2264 case MGMT_OP_SET_DEV_CLASS
:
2265 case MGMT_OP_SET_POWERED
:
2273 static const u8 bluetooth_base_uuid
[] = {
2274 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
2275 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2278 static u8
get_uuid_size(const u8
*uuid
)
2282 if (memcmp(uuid
, bluetooth_base_uuid
, 12))
2285 val
= get_unaligned_le32(&uuid
[12]);
2292 static void mgmt_class_complete(struct hci_dev
*hdev
, u16 mgmt_op
, u8 status
)
2294 struct pending_cmd
*cmd
;
2298 cmd
= mgmt_pending_find(mgmt_op
, hdev
);
2302 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_status(status
),
2303 hdev
->dev_class
, 3);
2305 mgmt_pending_remove(cmd
);
2308 hci_dev_unlock(hdev
);
2311 static void add_uuid_complete(struct hci_dev
*hdev
, u8 status
)
2313 BT_DBG("status 0x%02x", status
);
2315 mgmt_class_complete(hdev
, MGMT_OP_ADD_UUID
, status
);
2318 static int add_uuid(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
2320 struct mgmt_cp_add_uuid
*cp
= data
;
2321 struct pending_cmd
*cmd
;
2322 struct hci_request req
;
2323 struct bt_uuid
*uuid
;
2326 BT_DBG("request for %s", hdev
->name
);
2330 if (pending_eir_or_class(hdev
)) {
2331 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_ADD_UUID
,
2336 uuid
= kmalloc(sizeof(*uuid
), GFP_KERNEL
);
2342 memcpy(uuid
->uuid
, cp
->uuid
, 16);
2343 uuid
->svc_hint
= cp
->svc_hint
;
2344 uuid
->size
= get_uuid_size(cp
->uuid
);
2346 list_add_tail(&uuid
->list
, &hdev
->uuids
);
2348 hci_req_init(&req
, hdev
);
2353 err
= hci_req_run(&req
, add_uuid_complete
);
2355 if (err
!= -ENODATA
)
2358 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_UUID
, 0,
2359 hdev
->dev_class
, 3);
2363 cmd
= mgmt_pending_add(sk
, MGMT_OP_ADD_UUID
, hdev
, data
, len
);
2372 hci_dev_unlock(hdev
);
2376 static bool enable_service_cache(struct hci_dev
*hdev
)
2378 if (!hdev_is_powered(hdev
))
2381 if (!test_and_set_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
2382 queue_delayed_work(hdev
->workqueue
, &hdev
->service_cache
,
2390 static void remove_uuid_complete(struct hci_dev
*hdev
, u8 status
)
2392 BT_DBG("status 0x%02x", status
);
2394 mgmt_class_complete(hdev
, MGMT_OP_REMOVE_UUID
, status
);
2397 static int remove_uuid(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2400 struct mgmt_cp_remove_uuid
*cp
= data
;
2401 struct pending_cmd
*cmd
;
2402 struct bt_uuid
*match
, *tmp
;
2403 u8 bt_uuid_any
[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2404 struct hci_request req
;
2407 BT_DBG("request for %s", hdev
->name
);
2411 if (pending_eir_or_class(hdev
)) {
2412 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2417 if (memcmp(cp
->uuid
, bt_uuid_any
, 16) == 0) {
2418 hci_uuids_clear(hdev
);
2420 if (enable_service_cache(hdev
)) {
2421 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2422 0, hdev
->dev_class
, 3);
2431 list_for_each_entry_safe(match
, tmp
, &hdev
->uuids
, list
) {
2432 if (memcmp(match
->uuid
, cp
->uuid
, 16) != 0)
2435 list_del(&match
->list
);
2441 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2442 MGMT_STATUS_INVALID_PARAMS
);
2447 hci_req_init(&req
, hdev
);
2452 err
= hci_req_run(&req
, remove_uuid_complete
);
2454 if (err
!= -ENODATA
)
2457 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
, 0,
2458 hdev
->dev_class
, 3);
2462 cmd
= mgmt_pending_add(sk
, MGMT_OP_REMOVE_UUID
, hdev
, data
, len
);
2471 hci_dev_unlock(hdev
);
2475 static void set_class_complete(struct hci_dev
*hdev
, u8 status
)
2477 BT_DBG("status 0x%02x", status
);
2479 mgmt_class_complete(hdev
, MGMT_OP_SET_DEV_CLASS
, status
);
2482 static int set_dev_class(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2485 struct mgmt_cp_set_dev_class
*cp
= data
;
2486 struct pending_cmd
*cmd
;
2487 struct hci_request req
;
2490 BT_DBG("request for %s", hdev
->name
);
2492 if (!lmp_bredr_capable(hdev
))
2493 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2494 MGMT_STATUS_NOT_SUPPORTED
);
2498 if (pending_eir_or_class(hdev
)) {
2499 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2504 if ((cp
->minor
& 0x03) != 0 || (cp
->major
& 0xe0) != 0) {
2505 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2506 MGMT_STATUS_INVALID_PARAMS
);
2510 hdev
->major_class
= cp
->major
;
2511 hdev
->minor_class
= cp
->minor
;
2513 if (!hdev_is_powered(hdev
)) {
2514 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
, 0,
2515 hdev
->dev_class
, 3);
2519 hci_req_init(&req
, hdev
);
2521 if (test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
2522 hci_dev_unlock(hdev
);
2523 cancel_delayed_work_sync(&hdev
->service_cache
);
2530 err
= hci_req_run(&req
, set_class_complete
);
2532 if (err
!= -ENODATA
)
2535 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
, 0,
2536 hdev
->dev_class
, 3);
2540 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DEV_CLASS
, hdev
, data
, len
);
2549 hci_dev_unlock(hdev
);
2553 static int load_link_keys(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2556 struct mgmt_cp_load_link_keys
*cp
= data
;
2557 const u16 max_key_count
= ((U16_MAX
- sizeof(*cp
)) /
2558 sizeof(struct mgmt_link_key_info
));
2559 u16 key_count
, expected_len
;
2563 BT_DBG("request for %s", hdev
->name
);
2565 if (!lmp_bredr_capable(hdev
))
2566 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2567 MGMT_STATUS_NOT_SUPPORTED
);
2569 key_count
= __le16_to_cpu(cp
->key_count
);
2570 if (key_count
> max_key_count
) {
2571 BT_ERR("load_link_keys: too big key_count value %u",
2573 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2574 MGMT_STATUS_INVALID_PARAMS
);
2577 expected_len
= sizeof(*cp
) + key_count
*
2578 sizeof(struct mgmt_link_key_info
);
2579 if (expected_len
!= len
) {
2580 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
2582 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2583 MGMT_STATUS_INVALID_PARAMS
);
2586 if (cp
->debug_keys
!= 0x00 && cp
->debug_keys
!= 0x01)
2587 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2588 MGMT_STATUS_INVALID_PARAMS
);
2590 BT_DBG("%s debug_keys %u key_count %u", hdev
->name
, cp
->debug_keys
,
2593 for (i
= 0; i
< key_count
; i
++) {
2594 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
2596 if (key
->addr
.type
!= BDADDR_BREDR
|| key
->type
> 0x08)
2597 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2598 MGMT_STATUS_INVALID_PARAMS
);
2603 hci_link_keys_clear(hdev
);
2606 changed
= !test_and_set_bit(HCI_KEEP_DEBUG_KEYS
,
2609 changed
= test_and_clear_bit(HCI_KEEP_DEBUG_KEYS
,
2613 new_settings(hdev
, NULL
);
2615 for (i
= 0; i
< key_count
; i
++) {
2616 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
2618 /* Always ignore debug keys and require a new pairing if
2619 * the user wants to use them.
2621 if (key
->type
== HCI_LK_DEBUG_COMBINATION
)
2624 hci_add_link_key(hdev
, NULL
, &key
->addr
.bdaddr
, key
->val
,
2625 key
->type
, key
->pin_len
, NULL
);
2628 cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
, 0, NULL
, 0);
2630 hci_dev_unlock(hdev
);
2635 static int device_unpaired(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2636 u8 addr_type
, struct sock
*skip_sk
)
2638 struct mgmt_ev_device_unpaired ev
;
2640 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
2641 ev
.addr
.type
= addr_type
;
2643 return mgmt_event(MGMT_EV_DEVICE_UNPAIRED
, hdev
, &ev
, sizeof(ev
),
2647 static int unpair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2650 struct mgmt_cp_unpair_device
*cp
= data
;
2651 struct mgmt_rp_unpair_device rp
;
2652 struct hci_cp_disconnect dc
;
2653 struct pending_cmd
*cmd
;
2654 struct hci_conn
*conn
;
2657 memset(&rp
, 0, sizeof(rp
));
2658 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2659 rp
.addr
.type
= cp
->addr
.type
;
2661 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2662 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2663 MGMT_STATUS_INVALID_PARAMS
,
2666 if (cp
->disconnect
!= 0x00 && cp
->disconnect
!= 0x01)
2667 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2668 MGMT_STATUS_INVALID_PARAMS
,
2673 if (!hdev_is_powered(hdev
)) {
2674 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2675 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2679 if (cp
->addr
.type
== BDADDR_BREDR
) {
2680 err
= hci_remove_link_key(hdev
, &cp
->addr
.bdaddr
);
2684 if (cp
->addr
.type
== BDADDR_LE_PUBLIC
)
2685 addr_type
= ADDR_LE_DEV_PUBLIC
;
2687 addr_type
= ADDR_LE_DEV_RANDOM
;
2689 hci_remove_irk(hdev
, &cp
->addr
.bdaddr
, addr_type
);
2691 hci_conn_params_del(hdev
, &cp
->addr
.bdaddr
, addr_type
);
2693 err
= hci_remove_ltk(hdev
, &cp
->addr
.bdaddr
, addr_type
);
2697 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2698 MGMT_STATUS_NOT_PAIRED
, &rp
, sizeof(rp
));
2702 if (cp
->disconnect
) {
2703 if (cp
->addr
.type
== BDADDR_BREDR
)
2704 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
2707 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
,
2714 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
, 0,
2716 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, sk
);
2720 cmd
= mgmt_pending_add(sk
, MGMT_OP_UNPAIR_DEVICE
, hdev
, cp
,
2727 dc
.handle
= cpu_to_le16(conn
->handle
);
2728 dc
.reason
= 0x13; /* Remote User Terminated Connection */
2729 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
2731 mgmt_pending_remove(cmd
);
2734 hci_dev_unlock(hdev
);
2738 static int disconnect(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2741 struct mgmt_cp_disconnect
*cp
= data
;
2742 struct mgmt_rp_disconnect rp
;
2743 struct hci_cp_disconnect dc
;
2744 struct pending_cmd
*cmd
;
2745 struct hci_conn
*conn
;
2750 memset(&rp
, 0, sizeof(rp
));
2751 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2752 rp
.addr
.type
= cp
->addr
.type
;
2754 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2755 return cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2756 MGMT_STATUS_INVALID_PARAMS
,
2761 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
2762 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2763 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2767 if (mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
)) {
2768 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2769 MGMT_STATUS_BUSY
, &rp
, sizeof(rp
));
2773 if (cp
->addr
.type
== BDADDR_BREDR
)
2774 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
2777 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->addr
.bdaddr
);
2779 if (!conn
|| conn
->state
== BT_OPEN
|| conn
->state
== BT_CLOSED
) {
2780 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2781 MGMT_STATUS_NOT_CONNECTED
, &rp
, sizeof(rp
));
2785 cmd
= mgmt_pending_add(sk
, MGMT_OP_DISCONNECT
, hdev
, data
, len
);
2791 dc
.handle
= cpu_to_le16(conn
->handle
);
2792 dc
.reason
= HCI_ERROR_REMOTE_USER_TERM
;
2794 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
2796 mgmt_pending_remove(cmd
);
2799 hci_dev_unlock(hdev
);
2803 static u8
link_to_bdaddr(u8 link_type
, u8 addr_type
)
2805 switch (link_type
) {
2807 switch (addr_type
) {
2808 case ADDR_LE_DEV_PUBLIC
:
2809 return BDADDR_LE_PUBLIC
;
2812 /* Fallback to LE Random address type */
2813 return BDADDR_LE_RANDOM
;
2817 /* Fallback to BR/EDR type */
2818 return BDADDR_BREDR
;
2822 static int get_connections(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2825 struct mgmt_rp_get_connections
*rp
;
2835 if (!hdev_is_powered(hdev
)) {
2836 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_GET_CONNECTIONS
,
2837 MGMT_STATUS_NOT_POWERED
);
2842 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
2843 if (test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
2847 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
2848 rp
= kmalloc(rp_len
, GFP_KERNEL
);
2855 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
2856 if (!test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
2858 bacpy(&rp
->addr
[i
].bdaddr
, &c
->dst
);
2859 rp
->addr
[i
].type
= link_to_bdaddr(c
->type
, c
->dst_type
);
2860 if (c
->type
== SCO_LINK
|| c
->type
== ESCO_LINK
)
2865 rp
->conn_count
= cpu_to_le16(i
);
2867 /* Recalculate length in case of filtered SCO connections, etc */
2868 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
2870 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CONNECTIONS
, 0, rp
,
2876 hci_dev_unlock(hdev
);
2880 static int send_pin_code_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2881 struct mgmt_cp_pin_code_neg_reply
*cp
)
2883 struct pending_cmd
*cmd
;
2886 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
, cp
,
2891 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2892 sizeof(cp
->addr
.bdaddr
), &cp
->addr
.bdaddr
);
2894 mgmt_pending_remove(cmd
);
2899 static int pin_code_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2902 struct hci_conn
*conn
;
2903 struct mgmt_cp_pin_code_reply
*cp
= data
;
2904 struct hci_cp_pin_code_reply reply
;
2905 struct pending_cmd
*cmd
;
2912 if (!hdev_is_powered(hdev
)) {
2913 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2914 MGMT_STATUS_NOT_POWERED
);
2918 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
);
2920 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2921 MGMT_STATUS_NOT_CONNECTED
);
2925 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
&& cp
->pin_len
!= 16) {
2926 struct mgmt_cp_pin_code_neg_reply ncp
;
2928 memcpy(&ncp
.addr
, &cp
->addr
, sizeof(ncp
.addr
));
2930 BT_ERR("PIN code is not 16 bytes long");
2932 err
= send_pin_code_neg_reply(sk
, hdev
, &ncp
);
2934 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2935 MGMT_STATUS_INVALID_PARAMS
);
2940 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_REPLY
, hdev
, data
, len
);
2946 bacpy(&reply
.bdaddr
, &cp
->addr
.bdaddr
);
2947 reply
.pin_len
= cp
->pin_len
;
2948 memcpy(reply
.pin_code
, cp
->pin_code
, sizeof(reply
.pin_code
));
2950 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_REPLY
, sizeof(reply
), &reply
);
2952 mgmt_pending_remove(cmd
);
2955 hci_dev_unlock(hdev
);
2959 static int set_io_capability(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2962 struct mgmt_cp_set_io_capability
*cp
= data
;
2966 if (cp
->io_capability
> SMP_IO_KEYBOARD_DISPLAY
)
2967 return cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_IO_CAPABILITY
,
2968 MGMT_STATUS_INVALID_PARAMS
, NULL
, 0);
2972 hdev
->io_capability
= cp
->io_capability
;
2974 BT_DBG("%s IO capability set to 0x%02x", hdev
->name
,
2975 hdev
->io_capability
);
2977 hci_dev_unlock(hdev
);
2979 return cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_IO_CAPABILITY
, 0, NULL
,
2983 static struct pending_cmd
*find_pairing(struct hci_conn
*conn
)
2985 struct hci_dev
*hdev
= conn
->hdev
;
2986 struct pending_cmd
*cmd
;
2988 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
2989 if (cmd
->opcode
!= MGMT_OP_PAIR_DEVICE
)
2992 if (cmd
->user_data
!= conn
)
3001 static void pairing_complete(struct pending_cmd
*cmd
, u8 status
)
3003 struct mgmt_rp_pair_device rp
;
3004 struct hci_conn
*conn
= cmd
->user_data
;
3006 bacpy(&rp
.addr
.bdaddr
, &conn
->dst
);
3007 rp
.addr
.type
= link_to_bdaddr(conn
->type
, conn
->dst_type
);
3009 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_PAIR_DEVICE
, status
,
3012 /* So we don't get further callbacks for this connection */
3013 conn
->connect_cfm_cb
= NULL
;
3014 conn
->security_cfm_cb
= NULL
;
3015 conn
->disconn_cfm_cb
= NULL
;
3017 hci_conn_drop(conn
);
3019 mgmt_pending_remove(cmd
);
3022 void mgmt_smp_complete(struct hci_conn
*conn
, bool complete
)
3024 u8 status
= complete
? MGMT_STATUS_SUCCESS
: MGMT_STATUS_FAILED
;
3025 struct pending_cmd
*cmd
;
3027 cmd
= find_pairing(conn
);
3029 pairing_complete(cmd
, status
);
3032 static void pairing_complete_cb(struct hci_conn
*conn
, u8 status
)
3034 struct pending_cmd
*cmd
;
3036 BT_DBG("status %u", status
);
3038 cmd
= find_pairing(conn
);
3040 BT_DBG("Unable to find a pending command");
3042 pairing_complete(cmd
, mgmt_status(status
));
3045 static void le_pairing_complete_cb(struct hci_conn
*conn
, u8 status
)
3047 struct pending_cmd
*cmd
;
3049 BT_DBG("status %u", status
);
3054 cmd
= find_pairing(conn
);
3056 BT_DBG("Unable to find a pending command");
3058 pairing_complete(cmd
, mgmt_status(status
));
3061 static int pair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3064 struct mgmt_cp_pair_device
*cp
= data
;
3065 struct mgmt_rp_pair_device rp
;
3066 struct pending_cmd
*cmd
;
3067 u8 sec_level
, auth_type
;
3068 struct hci_conn
*conn
;
3073 memset(&rp
, 0, sizeof(rp
));
3074 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
3075 rp
.addr
.type
= cp
->addr
.type
;
3077 if (!bdaddr_type_is_valid(cp
->addr
.type
))
3078 return cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
3079 MGMT_STATUS_INVALID_PARAMS
,
3082 if (cp
->io_cap
> SMP_IO_KEYBOARD_DISPLAY
)
3083 return cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
3084 MGMT_STATUS_INVALID_PARAMS
,
3089 if (!hdev_is_powered(hdev
)) {
3090 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
3091 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
3095 sec_level
= BT_SECURITY_MEDIUM
;
3096 auth_type
= HCI_AT_DEDICATED_BONDING
;
3098 if (cp
->addr
.type
== BDADDR_BREDR
) {
3099 conn
= hci_connect_acl(hdev
, &cp
->addr
.bdaddr
, sec_level
,
3104 /* Convert from L2CAP channel address type to HCI address type
3106 if (cp
->addr
.type
== BDADDR_LE_PUBLIC
)
3107 addr_type
= ADDR_LE_DEV_PUBLIC
;
3109 addr_type
= ADDR_LE_DEV_RANDOM
;
3111 /* When pairing a new device, it is expected to remember
3112 * this device for future connections. Adding the connection
3113 * parameter information ahead of time allows tracking
3114 * of the slave preferred values and will speed up any
3115 * further connection establishment.
3117 * If connection parameters already exist, then they
3118 * will be kept and this function does nothing.
3120 hci_conn_params_add(hdev
, &cp
->addr
.bdaddr
, addr_type
);
3122 /* Request a connection with master = true role */
3123 conn
= hci_connect_le(hdev
, &cp
->addr
.bdaddr
, addr_type
,
3124 sec_level
, HCI_LE_CONN_TIMEOUT
, true);
3130 if (PTR_ERR(conn
) == -EBUSY
)
3131 status
= MGMT_STATUS_BUSY
;
3133 status
= MGMT_STATUS_CONNECT_FAILED
;
3135 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
3141 if (conn
->connect_cfm_cb
) {
3142 hci_conn_drop(conn
);
3143 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
3144 MGMT_STATUS_BUSY
, &rp
, sizeof(rp
));
3148 cmd
= mgmt_pending_add(sk
, MGMT_OP_PAIR_DEVICE
, hdev
, data
, len
);
3151 hci_conn_drop(conn
);
3155 /* For LE, just connecting isn't a proof that the pairing finished */
3156 if (cp
->addr
.type
== BDADDR_BREDR
) {
3157 conn
->connect_cfm_cb
= pairing_complete_cb
;
3158 conn
->security_cfm_cb
= pairing_complete_cb
;
3159 conn
->disconn_cfm_cb
= pairing_complete_cb
;
3161 conn
->connect_cfm_cb
= le_pairing_complete_cb
;
3162 conn
->security_cfm_cb
= le_pairing_complete_cb
;
3163 conn
->disconn_cfm_cb
= le_pairing_complete_cb
;
3166 conn
->io_capability
= cp
->io_cap
;
3167 cmd
->user_data
= conn
;
3169 if (conn
->state
== BT_CONNECTED
&&
3170 hci_conn_security(conn
, sec_level
, auth_type
))
3171 pairing_complete(cmd
, 0);
3176 hci_dev_unlock(hdev
);
3180 static int cancel_pair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3183 struct mgmt_addr_info
*addr
= data
;
3184 struct pending_cmd
*cmd
;
3185 struct hci_conn
*conn
;
3192 if (!hdev_is_powered(hdev
)) {
3193 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
3194 MGMT_STATUS_NOT_POWERED
);
3198 cmd
= mgmt_pending_find(MGMT_OP_PAIR_DEVICE
, hdev
);
3200 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
3201 MGMT_STATUS_INVALID_PARAMS
);
3205 conn
= cmd
->user_data
;
3207 if (bacmp(&addr
->bdaddr
, &conn
->dst
) != 0) {
3208 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
3209 MGMT_STATUS_INVALID_PARAMS
);
3213 pairing_complete(cmd
, MGMT_STATUS_CANCELLED
);
3215 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
, 0,
3216 addr
, sizeof(*addr
));
3218 hci_dev_unlock(hdev
);
3222 static int user_pairing_resp(struct sock
*sk
, struct hci_dev
*hdev
,
3223 struct mgmt_addr_info
*addr
, u16 mgmt_op
,
3224 u16 hci_op
, __le32 passkey
)
3226 struct pending_cmd
*cmd
;
3227 struct hci_conn
*conn
;
3232 if (!hdev_is_powered(hdev
)) {
3233 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
3234 MGMT_STATUS_NOT_POWERED
, addr
,
3239 if (addr
->type
== BDADDR_BREDR
)
3240 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &addr
->bdaddr
);
3242 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &addr
->bdaddr
);
3245 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
3246 MGMT_STATUS_NOT_CONNECTED
, addr
,
3251 if (addr
->type
== BDADDR_LE_PUBLIC
|| addr
->type
== BDADDR_LE_RANDOM
) {
3252 err
= smp_user_confirm_reply(conn
, mgmt_op
, passkey
);
3254 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
3255 MGMT_STATUS_SUCCESS
, addr
,
3258 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
3259 MGMT_STATUS_FAILED
, addr
,
3265 cmd
= mgmt_pending_add(sk
, mgmt_op
, hdev
, addr
, sizeof(*addr
));
3271 /* Continue with pairing via HCI */
3272 if (hci_op
== HCI_OP_USER_PASSKEY_REPLY
) {
3273 struct hci_cp_user_passkey_reply cp
;
3275 bacpy(&cp
.bdaddr
, &addr
->bdaddr
);
3276 cp
.passkey
= passkey
;
3277 err
= hci_send_cmd(hdev
, hci_op
, sizeof(cp
), &cp
);
3279 err
= hci_send_cmd(hdev
, hci_op
, sizeof(addr
->bdaddr
),
3283 mgmt_pending_remove(cmd
);
3286 hci_dev_unlock(hdev
);
3290 static int pin_code_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
3291 void *data
, u16 len
)
3293 struct mgmt_cp_pin_code_neg_reply
*cp
= data
;
3297 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
3298 MGMT_OP_PIN_CODE_NEG_REPLY
,
3299 HCI_OP_PIN_CODE_NEG_REPLY
, 0);
3302 static int user_confirm_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3305 struct mgmt_cp_user_confirm_reply
*cp
= data
;
3309 if (len
!= sizeof(*cp
))
3310 return cmd_status(sk
, hdev
->id
, MGMT_OP_USER_CONFIRM_REPLY
,
3311 MGMT_STATUS_INVALID_PARAMS
);
3313 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
3314 MGMT_OP_USER_CONFIRM_REPLY
,
3315 HCI_OP_USER_CONFIRM_REPLY
, 0);
3318 static int user_confirm_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
3319 void *data
, u16 len
)
3321 struct mgmt_cp_user_confirm_neg_reply
*cp
= data
;
3325 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
3326 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
3327 HCI_OP_USER_CONFIRM_NEG_REPLY
, 0);
3330 static int user_passkey_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3333 struct mgmt_cp_user_passkey_reply
*cp
= data
;
3337 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
3338 MGMT_OP_USER_PASSKEY_REPLY
,
3339 HCI_OP_USER_PASSKEY_REPLY
, cp
->passkey
);
3342 static int user_passkey_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
3343 void *data
, u16 len
)
3345 struct mgmt_cp_user_passkey_neg_reply
*cp
= data
;
3349 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
3350 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
3351 HCI_OP_USER_PASSKEY_NEG_REPLY
, 0);
3354 static void update_name(struct hci_request
*req
)
3356 struct hci_dev
*hdev
= req
->hdev
;
3357 struct hci_cp_write_local_name cp
;
3359 memcpy(cp
.name
, hdev
->dev_name
, sizeof(cp
.name
));
3361 hci_req_add(req
, HCI_OP_WRITE_LOCAL_NAME
, sizeof(cp
), &cp
);
3364 static void set_name_complete(struct hci_dev
*hdev
, u8 status
)
3366 struct mgmt_cp_set_local_name
*cp
;
3367 struct pending_cmd
*cmd
;
3369 BT_DBG("status 0x%02x", status
);
3373 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
3380 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
,
3381 mgmt_status(status
));
3383 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
3386 mgmt_pending_remove(cmd
);
3389 hci_dev_unlock(hdev
);
3392 static int set_local_name(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3395 struct mgmt_cp_set_local_name
*cp
= data
;
3396 struct pending_cmd
*cmd
;
3397 struct hci_request req
;
3404 /* If the old values are the same as the new ones just return a
3405 * direct command complete event.
3407 if (!memcmp(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
)) &&
3408 !memcmp(hdev
->short_name
, cp
->short_name
,
3409 sizeof(hdev
->short_name
))) {
3410 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
3415 memcpy(hdev
->short_name
, cp
->short_name
, sizeof(hdev
->short_name
));
3417 if (!hdev_is_powered(hdev
)) {
3418 memcpy(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
));
3420 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
3425 err
= mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, data
, len
,
3431 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LOCAL_NAME
, hdev
, data
, len
);
3437 memcpy(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
));
3439 hci_req_init(&req
, hdev
);
3441 if (lmp_bredr_capable(hdev
)) {
3446 /* The name is stored in the scan response data and so
3447 * no need to udpate the advertising data here.
3449 if (lmp_le_capable(hdev
))
3450 update_scan_rsp_data(&req
);
3452 err
= hci_req_run(&req
, set_name_complete
);
3454 mgmt_pending_remove(cmd
);
3457 hci_dev_unlock(hdev
);
3461 static int read_local_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3462 void *data
, u16 data_len
)
3464 struct pending_cmd
*cmd
;
3467 BT_DBG("%s", hdev
->name
);
3471 if (!hdev_is_powered(hdev
)) {
3472 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3473 MGMT_STATUS_NOT_POWERED
);
3477 if (!lmp_ssp_capable(hdev
)) {
3478 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3479 MGMT_STATUS_NOT_SUPPORTED
);
3483 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
)) {
3484 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3489 cmd
= mgmt_pending_add(sk
, MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
, NULL
, 0);
3495 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
))
3496 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_EXT_DATA
,
3499 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_DATA
, 0, NULL
);
3502 mgmt_pending_remove(cmd
);
3505 hci_dev_unlock(hdev
);
3509 static int add_remote_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3510 void *data
, u16 len
)
3514 BT_DBG("%s ", hdev
->name
);
3518 if (len
== MGMT_ADD_REMOTE_OOB_DATA_SIZE
) {
3519 struct mgmt_cp_add_remote_oob_data
*cp
= data
;
3522 err
= hci_add_remote_oob_data(hdev
, &cp
->addr
.bdaddr
,
3523 cp
->hash
, cp
->randomizer
);
3525 status
= MGMT_STATUS_FAILED
;
3527 status
= MGMT_STATUS_SUCCESS
;
3529 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3530 status
, &cp
->addr
, sizeof(cp
->addr
));
3531 } else if (len
== MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE
) {
3532 struct mgmt_cp_add_remote_oob_ext_data
*cp
= data
;
3535 err
= hci_add_remote_oob_ext_data(hdev
, &cp
->addr
.bdaddr
,
3541 status
= MGMT_STATUS_FAILED
;
3543 status
= MGMT_STATUS_SUCCESS
;
3545 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3546 status
, &cp
->addr
, sizeof(cp
->addr
));
3548 BT_ERR("add_remote_oob_data: invalid length of %u bytes", len
);
3549 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3550 MGMT_STATUS_INVALID_PARAMS
);
3553 hci_dev_unlock(hdev
);
3557 static int remove_remote_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3558 void *data
, u16 len
)
3560 struct mgmt_cp_remove_remote_oob_data
*cp
= data
;
3564 BT_DBG("%s", hdev
->name
);
3568 err
= hci_remove_remote_oob_data(hdev
, &cp
->addr
.bdaddr
);
3570 status
= MGMT_STATUS_INVALID_PARAMS
;
3572 status
= MGMT_STATUS_SUCCESS
;
3574 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
3575 status
, &cp
->addr
, sizeof(cp
->addr
));
3577 hci_dev_unlock(hdev
);
3581 static int mgmt_start_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3583 struct pending_cmd
*cmd
;
3587 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3589 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
3593 type
= hdev
->discovery
.type
;
3595 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3596 &type
, sizeof(type
));
3597 mgmt_pending_remove(cmd
);
3602 static void start_discovery_complete(struct hci_dev
*hdev
, u8 status
)
3604 unsigned long timeout
= 0;
3606 BT_DBG("status %d", status
);
3610 mgmt_start_discovery_failed(hdev
, status
);
3611 hci_dev_unlock(hdev
);
3616 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
3617 hci_dev_unlock(hdev
);
3619 switch (hdev
->discovery
.type
) {
3620 case DISCOV_TYPE_LE
:
3621 timeout
= msecs_to_jiffies(DISCOV_LE_TIMEOUT
);
3624 case DISCOV_TYPE_INTERLEAVED
:
3625 timeout
= msecs_to_jiffies(hdev
->discov_interleaved_timeout
);
3628 case DISCOV_TYPE_BREDR
:
3632 BT_ERR("Invalid discovery type %d", hdev
->discovery
.type
);
3638 queue_delayed_work(hdev
->workqueue
, &hdev
->le_scan_disable
, timeout
);
3641 static int start_discovery(struct sock
*sk
, struct hci_dev
*hdev
,
3642 void *data
, u16 len
)
3644 struct mgmt_cp_start_discovery
*cp
= data
;
3645 struct pending_cmd
*cmd
;
3646 struct hci_cp_le_set_scan_param param_cp
;
3647 struct hci_cp_le_set_scan_enable enable_cp
;
3648 struct hci_cp_inquiry inq_cp
;
3649 struct hci_request req
;
3650 /* General inquiry access code (GIAC) */
3651 u8 lap
[3] = { 0x33, 0x8b, 0x9e };
3652 u8 status
, own_addr_type
;
3655 BT_DBG("%s", hdev
->name
);
3659 if (!hdev_is_powered(hdev
)) {
3660 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3661 MGMT_STATUS_NOT_POWERED
);
3665 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
)) {
3666 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3671 if (hdev
->discovery
.state
!= DISCOVERY_STOPPED
) {
3672 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3677 cmd
= mgmt_pending_add(sk
, MGMT_OP_START_DISCOVERY
, hdev
, NULL
, 0);
3683 hdev
->discovery
.type
= cp
->type
;
3685 hci_req_init(&req
, hdev
);
3687 switch (hdev
->discovery
.type
) {
3688 case DISCOV_TYPE_BREDR
:
3689 status
= mgmt_bredr_support(hdev
);
3691 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3693 mgmt_pending_remove(cmd
);
3697 if (test_bit(HCI_INQUIRY
, &hdev
->flags
)) {
3698 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3700 mgmt_pending_remove(cmd
);
3704 hci_inquiry_cache_flush(hdev
);
3706 memset(&inq_cp
, 0, sizeof(inq_cp
));
3707 memcpy(&inq_cp
.lap
, lap
, sizeof(inq_cp
.lap
));
3708 inq_cp
.length
= DISCOV_BREDR_INQUIRY_LEN
;
3709 hci_req_add(&req
, HCI_OP_INQUIRY
, sizeof(inq_cp
), &inq_cp
);
3712 case DISCOV_TYPE_LE
:
3713 case DISCOV_TYPE_INTERLEAVED
:
3714 status
= mgmt_le_support(hdev
);
3716 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3718 mgmt_pending_remove(cmd
);
3722 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
3723 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
3724 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3725 MGMT_STATUS_NOT_SUPPORTED
);
3726 mgmt_pending_remove(cmd
);
3730 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
3731 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3732 MGMT_STATUS_REJECTED
);
3733 mgmt_pending_remove(cmd
);
3737 /* If controller is scanning, it means the background scanning
3738 * is running. Thus, we should temporarily stop it in order to
3739 * set the discovery scanning parameters.
3741 if (test_bit(HCI_LE_SCAN
, &hdev
->dev_flags
))
3742 hci_req_add_le_scan_disable(&req
);
3744 memset(¶m_cp
, 0, sizeof(param_cp
));
3746 /* All active scans will be done with either a resolvable
3747 * private address (when privacy feature has been enabled)
3748 * or unresolvable private address.
3750 err
= hci_update_random_address(&req
, true, &own_addr_type
);
3752 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3753 MGMT_STATUS_FAILED
);
3754 mgmt_pending_remove(cmd
);
3758 param_cp
.type
= LE_SCAN_ACTIVE
;
3759 param_cp
.interval
= cpu_to_le16(DISCOV_LE_SCAN_INT
);
3760 param_cp
.window
= cpu_to_le16(DISCOV_LE_SCAN_WIN
);
3761 param_cp
.own_address_type
= own_addr_type
;
3762 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_PARAM
, sizeof(param_cp
),
3765 memset(&enable_cp
, 0, sizeof(enable_cp
));
3766 enable_cp
.enable
= LE_SCAN_ENABLE
;
3767 enable_cp
.filter_dup
= LE_SCAN_FILTER_DUP_ENABLE
;
3768 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_ENABLE
, sizeof(enable_cp
),
3773 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3774 MGMT_STATUS_INVALID_PARAMS
);
3775 mgmt_pending_remove(cmd
);
3779 err
= hci_req_run(&req
, start_discovery_complete
);
3781 mgmt_pending_remove(cmd
);
3783 hci_discovery_set_state(hdev
, DISCOVERY_STARTING
);
3786 hci_dev_unlock(hdev
);
3790 static int mgmt_stop_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3792 struct pending_cmd
*cmd
;
3795 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
3799 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3800 &hdev
->discovery
.type
, sizeof(hdev
->discovery
.type
));
3801 mgmt_pending_remove(cmd
);
3806 static void stop_discovery_complete(struct hci_dev
*hdev
, u8 status
)
3808 BT_DBG("status %d", status
);
3813 mgmt_stop_discovery_failed(hdev
, status
);
3817 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3820 hci_dev_unlock(hdev
);
3823 static int stop_discovery(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3826 struct mgmt_cp_stop_discovery
*mgmt_cp
= data
;
3827 struct pending_cmd
*cmd
;
3828 struct hci_request req
;
3831 BT_DBG("%s", hdev
->name
);
3835 if (!hci_discovery_active(hdev
)) {
3836 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3837 MGMT_STATUS_REJECTED
, &mgmt_cp
->type
,
3838 sizeof(mgmt_cp
->type
));
3842 if (hdev
->discovery
.type
!= mgmt_cp
->type
) {
3843 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3844 MGMT_STATUS_INVALID_PARAMS
, &mgmt_cp
->type
,
3845 sizeof(mgmt_cp
->type
));
3849 cmd
= mgmt_pending_add(sk
, MGMT_OP_STOP_DISCOVERY
, hdev
, NULL
, 0);
3855 hci_req_init(&req
, hdev
);
3857 hci_stop_discovery(&req
);
3859 err
= hci_req_run(&req
, stop_discovery_complete
);
3861 hci_discovery_set_state(hdev
, DISCOVERY_STOPPING
);
3865 mgmt_pending_remove(cmd
);
3867 /* If no HCI commands were sent we're done */
3868 if (err
== -ENODATA
) {
3869 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
, 0,
3870 &mgmt_cp
->type
, sizeof(mgmt_cp
->type
));
3871 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3875 hci_dev_unlock(hdev
);
3879 static int confirm_name(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3882 struct mgmt_cp_confirm_name
*cp
= data
;
3883 struct inquiry_entry
*e
;
3886 BT_DBG("%s", hdev
->name
);
3890 if (!hci_discovery_active(hdev
)) {
3891 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
,
3892 MGMT_STATUS_FAILED
, &cp
->addr
,
3897 e
= hci_inquiry_cache_lookup_unknown(hdev
, &cp
->addr
.bdaddr
);
3899 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
,
3900 MGMT_STATUS_INVALID_PARAMS
, &cp
->addr
,
3905 if (cp
->name_known
) {
3906 e
->name_state
= NAME_KNOWN
;
3909 e
->name_state
= NAME_NEEDED
;
3910 hci_inquiry_cache_update_resolve(hdev
, e
);
3913 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
, 0, &cp
->addr
,
3917 hci_dev_unlock(hdev
);
3921 static int block_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3924 struct mgmt_cp_block_device
*cp
= data
;
3928 BT_DBG("%s", hdev
->name
);
3930 if (!bdaddr_type_is_valid(cp
->addr
.type
))
3931 return cmd_complete(sk
, hdev
->id
, MGMT_OP_BLOCK_DEVICE
,
3932 MGMT_STATUS_INVALID_PARAMS
,
3933 &cp
->addr
, sizeof(cp
->addr
));
3937 err
= hci_blacklist_add(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
3939 status
= MGMT_STATUS_FAILED
;
3943 mgmt_event(MGMT_EV_DEVICE_BLOCKED
, hdev
, &cp
->addr
, sizeof(cp
->addr
),
3945 status
= MGMT_STATUS_SUCCESS
;
3948 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_BLOCK_DEVICE
, status
,
3949 &cp
->addr
, sizeof(cp
->addr
));
3951 hci_dev_unlock(hdev
);
3956 static int unblock_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3959 struct mgmt_cp_unblock_device
*cp
= data
;
3963 BT_DBG("%s", hdev
->name
);
3965 if (!bdaddr_type_is_valid(cp
->addr
.type
))
3966 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNBLOCK_DEVICE
,
3967 MGMT_STATUS_INVALID_PARAMS
,
3968 &cp
->addr
, sizeof(cp
->addr
));
3972 err
= hci_blacklist_del(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
3974 status
= MGMT_STATUS_INVALID_PARAMS
;
3978 mgmt_event(MGMT_EV_DEVICE_UNBLOCKED
, hdev
, &cp
->addr
, sizeof(cp
->addr
),
3980 status
= MGMT_STATUS_SUCCESS
;
3983 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNBLOCK_DEVICE
, status
,
3984 &cp
->addr
, sizeof(cp
->addr
));
3986 hci_dev_unlock(hdev
);
3991 static int set_device_id(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3994 struct mgmt_cp_set_device_id
*cp
= data
;
3995 struct hci_request req
;
3999 BT_DBG("%s", hdev
->name
);
4001 source
= __le16_to_cpu(cp
->source
);
4003 if (source
> 0x0002)
4004 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEVICE_ID
,
4005 MGMT_STATUS_INVALID_PARAMS
);
4009 hdev
->devid_source
= source
;
4010 hdev
->devid_vendor
= __le16_to_cpu(cp
->vendor
);
4011 hdev
->devid_product
= __le16_to_cpu(cp
->product
);
4012 hdev
->devid_version
= __le16_to_cpu(cp
->version
);
4014 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEVICE_ID
, 0, NULL
, 0);
4016 hci_req_init(&req
, hdev
);
4018 hci_req_run(&req
, NULL
);
4020 hci_dev_unlock(hdev
);
4025 static void set_advertising_complete(struct hci_dev
*hdev
, u8 status
)
4027 struct cmd_lookup match
= { NULL
, hdev
};
4030 u8 mgmt_err
= mgmt_status(status
);
4032 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING
, hdev
,
4033 cmd_status_rsp
, &mgmt_err
);
4037 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING
, hdev
, settings_rsp
,
4040 new_settings(hdev
, match
.sk
);
4046 static int set_advertising(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
4049 struct mgmt_mode
*cp
= data
;
4050 struct pending_cmd
*cmd
;
4051 struct hci_request req
;
4052 u8 val
, enabled
, status
;
4055 BT_DBG("request for %s", hdev
->name
);
4057 status
= mgmt_le_support(hdev
);
4059 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
4062 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
4063 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
4064 MGMT_STATUS_INVALID_PARAMS
);
4069 enabled
= test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
4071 /* The following conditions are ones which mean that we should
4072 * not do any HCI communication but directly send a mgmt
4073 * response to user space (after toggling the flag if
4076 if (!hdev_is_powered(hdev
) || val
== enabled
||
4077 hci_conn_num(hdev
, LE_LINK
) > 0) {
4078 bool changed
= false;
4080 if (val
!= test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
4081 change_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
4085 err
= send_settings_rsp(sk
, MGMT_OP_SET_ADVERTISING
, hdev
);
4090 err
= new_settings(hdev
, sk
);
4095 if (mgmt_pending_find(MGMT_OP_SET_ADVERTISING
, hdev
) ||
4096 mgmt_pending_find(MGMT_OP_SET_LE
, hdev
)) {
4097 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
4102 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_ADVERTISING
, hdev
, data
, len
);
4108 hci_req_init(&req
, hdev
);
4111 enable_advertising(&req
);
4113 disable_advertising(&req
);
4115 err
= hci_req_run(&req
, set_advertising_complete
);
4117 mgmt_pending_remove(cmd
);
4120 hci_dev_unlock(hdev
);
4124 static int set_static_address(struct sock
*sk
, struct hci_dev
*hdev
,
4125 void *data
, u16 len
)
4127 struct mgmt_cp_set_static_address
*cp
= data
;
4130 BT_DBG("%s", hdev
->name
);
4132 if (!lmp_le_capable(hdev
))
4133 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
,
4134 MGMT_STATUS_NOT_SUPPORTED
);
4136 if (hdev_is_powered(hdev
))
4137 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
,
4138 MGMT_STATUS_REJECTED
);
4140 if (bacmp(&cp
->bdaddr
, BDADDR_ANY
)) {
4141 if (!bacmp(&cp
->bdaddr
, BDADDR_NONE
))
4142 return cmd_status(sk
, hdev
->id
,
4143 MGMT_OP_SET_STATIC_ADDRESS
,
4144 MGMT_STATUS_INVALID_PARAMS
);
4146 /* Two most significant bits shall be set */
4147 if ((cp
->bdaddr
.b
[5] & 0xc0) != 0xc0)
4148 return cmd_status(sk
, hdev
->id
,
4149 MGMT_OP_SET_STATIC_ADDRESS
,
4150 MGMT_STATUS_INVALID_PARAMS
);
4155 bacpy(&hdev
->static_addr
, &cp
->bdaddr
);
4157 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
, 0, NULL
, 0);
4159 hci_dev_unlock(hdev
);
4164 static int set_scan_params(struct sock
*sk
, struct hci_dev
*hdev
,
4165 void *data
, u16 len
)
4167 struct mgmt_cp_set_scan_params
*cp
= data
;
4168 __u16 interval
, window
;
4171 BT_DBG("%s", hdev
->name
);
4173 if (!lmp_le_capable(hdev
))
4174 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
4175 MGMT_STATUS_NOT_SUPPORTED
);
4177 interval
= __le16_to_cpu(cp
->interval
);
4179 if (interval
< 0x0004 || interval
> 0x4000)
4180 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
4181 MGMT_STATUS_INVALID_PARAMS
);
4183 window
= __le16_to_cpu(cp
->window
);
4185 if (window
< 0x0004 || window
> 0x4000)
4186 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
4187 MGMT_STATUS_INVALID_PARAMS
);
4189 if (window
> interval
)
4190 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
4191 MGMT_STATUS_INVALID_PARAMS
);
4195 hdev
->le_scan_interval
= interval
;
4196 hdev
->le_scan_window
= window
;
4198 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
, 0, NULL
, 0);
4200 /* If background scan is running, restart it so new parameters are
4203 if (test_bit(HCI_LE_SCAN
, &hdev
->dev_flags
) &&
4204 hdev
->discovery
.state
== DISCOVERY_STOPPED
) {
4205 struct hci_request req
;
4207 hci_req_init(&req
, hdev
);
4209 hci_req_add_le_scan_disable(&req
);
4210 hci_req_add_le_passive_scan(&req
);
4212 hci_req_run(&req
, NULL
);
4215 hci_dev_unlock(hdev
);
4220 static void fast_connectable_complete(struct hci_dev
*hdev
, u8 status
)
4222 struct pending_cmd
*cmd
;
4224 BT_DBG("status 0x%02x", status
);
4228 cmd
= mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE
, hdev
);
4233 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
4234 mgmt_status(status
));
4236 struct mgmt_mode
*cp
= cmd
->param
;
4239 set_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
4241 clear_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
4243 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_FAST_CONNECTABLE
, hdev
);
4244 new_settings(hdev
, cmd
->sk
);
4247 mgmt_pending_remove(cmd
);
4250 hci_dev_unlock(hdev
);
4253 static int set_fast_connectable(struct sock
*sk
, struct hci_dev
*hdev
,
4254 void *data
, u16 len
)
4256 struct mgmt_mode
*cp
= data
;
4257 struct pending_cmd
*cmd
;
4258 struct hci_request req
;
4261 BT_DBG("%s", hdev
->name
);
4263 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
) ||
4264 hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
4265 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
4266 MGMT_STATUS_NOT_SUPPORTED
);
4268 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
4269 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
4270 MGMT_STATUS_INVALID_PARAMS
);
4272 if (!hdev_is_powered(hdev
))
4273 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
4274 MGMT_STATUS_NOT_POWERED
);
4276 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
4277 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
4278 MGMT_STATUS_REJECTED
);
4282 if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE
, hdev
)) {
4283 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
4288 if (!!cp
->val
== test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
)) {
4289 err
= send_settings_rsp(sk
, MGMT_OP_SET_FAST_CONNECTABLE
,
4294 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_FAST_CONNECTABLE
, hdev
,
4301 hci_req_init(&req
, hdev
);
4303 write_fast_connectable(&req
, cp
->val
);
4305 err
= hci_req_run(&req
, fast_connectable_complete
);
4307 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
4308 MGMT_STATUS_FAILED
);
4309 mgmt_pending_remove(cmd
);
4313 hci_dev_unlock(hdev
);
4318 static void set_bredr_scan(struct hci_request
*req
)
4320 struct hci_dev
*hdev
= req
->hdev
;
4323 /* Ensure that fast connectable is disabled. This function will
4324 * not do anything if the page scan parameters are already what
4327 write_fast_connectable(req
, false);
4329 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
4331 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
4332 scan
|= SCAN_INQUIRY
;
4335 hci_req_add(req
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
4338 static void set_bredr_complete(struct hci_dev
*hdev
, u8 status
)
4340 struct pending_cmd
*cmd
;
4342 BT_DBG("status 0x%02x", status
);
4346 cmd
= mgmt_pending_find(MGMT_OP_SET_BREDR
, hdev
);
4351 u8 mgmt_err
= mgmt_status(status
);
4353 /* We need to restore the flag if related HCI commands
4356 clear_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
4358 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
4360 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_BREDR
, hdev
);
4361 new_settings(hdev
, cmd
->sk
);
4364 mgmt_pending_remove(cmd
);
4367 hci_dev_unlock(hdev
);
4370 static int set_bredr(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
4372 struct mgmt_mode
*cp
= data
;
4373 struct pending_cmd
*cmd
;
4374 struct hci_request req
;
4377 BT_DBG("request for %s", hdev
->name
);
4379 if (!lmp_bredr_capable(hdev
) || !lmp_le_capable(hdev
))
4380 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4381 MGMT_STATUS_NOT_SUPPORTED
);
4383 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
4384 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4385 MGMT_STATUS_REJECTED
);
4387 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
4388 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4389 MGMT_STATUS_INVALID_PARAMS
);
4393 if (cp
->val
== test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
4394 err
= send_settings_rsp(sk
, MGMT_OP_SET_BREDR
, hdev
);
4398 if (!hdev_is_powered(hdev
)) {
4400 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
4401 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
4402 clear_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
4403 clear_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
4404 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
4407 change_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
4409 err
= send_settings_rsp(sk
, MGMT_OP_SET_BREDR
, hdev
);
4413 err
= new_settings(hdev
, sk
);
4417 /* Reject disabling when powered on */
4419 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4420 MGMT_STATUS_REJECTED
);
4424 if (mgmt_pending_find(MGMT_OP_SET_BREDR
, hdev
)) {
4425 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4430 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_BREDR
, hdev
, data
, len
);
4436 /* We need to flip the bit already here so that update_adv_data
4437 * generates the correct flags.
4439 set_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
4441 hci_req_init(&req
, hdev
);
4443 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
4444 set_bredr_scan(&req
);
4446 /* Since only the advertising data flags will change, there
4447 * is no need to update the scan response data.
4449 update_adv_data(&req
);
4451 err
= hci_req_run(&req
, set_bredr_complete
);
4453 mgmt_pending_remove(cmd
);
4456 hci_dev_unlock(hdev
);
4460 static int set_secure_conn(struct sock
*sk
, struct hci_dev
*hdev
,
4461 void *data
, u16 len
)
4463 struct mgmt_mode
*cp
= data
;
4464 struct pending_cmd
*cmd
;
4468 BT_DBG("request for %s", hdev
->name
);
4470 status
= mgmt_bredr_support(hdev
);
4472 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4475 if (!lmp_sc_capable(hdev
) &&
4476 !test_bit(HCI_FORCE_SC
, &hdev
->dbg_flags
))
4477 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4478 MGMT_STATUS_NOT_SUPPORTED
);
4480 if (cp
->val
!= 0x00 && cp
->val
!= 0x01 && cp
->val
!= 0x02)
4481 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4482 MGMT_STATUS_INVALID_PARAMS
);
4486 if (!hdev_is_powered(hdev
)) {
4490 changed
= !test_and_set_bit(HCI_SC_ENABLED
,
4492 if (cp
->val
== 0x02)
4493 set_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4495 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4497 changed
= test_and_clear_bit(HCI_SC_ENABLED
,
4499 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4502 err
= send_settings_rsp(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
);
4507 err
= new_settings(hdev
, sk
);
4512 if (mgmt_pending_find(MGMT_OP_SET_SECURE_CONN
, hdev
)) {
4513 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4520 if (val
== test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
) &&
4521 (cp
->val
== 0x02) == test_bit(HCI_SC_ONLY
, &hdev
->dev_flags
)) {
4522 err
= send_settings_rsp(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
);
4526 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
, data
, len
);
4532 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SC_SUPPORT
, 1, &val
);
4534 mgmt_pending_remove(cmd
);
4538 if (cp
->val
== 0x02)
4539 set_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4541 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4544 hci_dev_unlock(hdev
);
4548 static int set_debug_keys(struct sock
*sk
, struct hci_dev
*hdev
,
4549 void *data
, u16 len
)
4551 struct mgmt_mode
*cp
= data
;
4552 bool changed
, use_changed
;
4555 BT_DBG("request for %s", hdev
->name
);
4557 if (cp
->val
!= 0x00 && cp
->val
!= 0x01 && cp
->val
!= 0x02)
4558 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEBUG_KEYS
,
4559 MGMT_STATUS_INVALID_PARAMS
);
4564 changed
= !test_and_set_bit(HCI_KEEP_DEBUG_KEYS
,
4567 changed
= test_and_clear_bit(HCI_KEEP_DEBUG_KEYS
,
4570 if (cp
->val
== 0x02)
4571 use_changed
= !test_and_set_bit(HCI_USE_DEBUG_KEYS
,
4574 use_changed
= test_and_clear_bit(HCI_USE_DEBUG_KEYS
,
4577 if (hdev_is_powered(hdev
) && use_changed
&&
4578 test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
)) {
4579 u8 mode
= (cp
->val
== 0x02) ? 0x01 : 0x00;
4580 hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_DEBUG_MODE
,
4581 sizeof(mode
), &mode
);
4584 err
= send_settings_rsp(sk
, MGMT_OP_SET_DEBUG_KEYS
, hdev
);
4589 err
= new_settings(hdev
, sk
);
4592 hci_dev_unlock(hdev
);
4596 static int set_privacy(struct sock
*sk
, struct hci_dev
*hdev
, void *cp_data
,
4599 struct mgmt_cp_set_privacy
*cp
= cp_data
;
4603 BT_DBG("request for %s", hdev
->name
);
4605 if (!lmp_le_capable(hdev
))
4606 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PRIVACY
,
4607 MGMT_STATUS_NOT_SUPPORTED
);
4609 if (cp
->privacy
!= 0x00 && cp
->privacy
!= 0x01)
4610 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PRIVACY
,
4611 MGMT_STATUS_INVALID_PARAMS
);
4613 if (hdev_is_powered(hdev
))
4614 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PRIVACY
,
4615 MGMT_STATUS_REJECTED
);
4619 /* If user space supports this command it is also expected to
4620 * handle IRKs. Therefore, set the HCI_RPA_RESOLVING flag.
4622 set_bit(HCI_RPA_RESOLVING
, &hdev
->dev_flags
);
4625 changed
= !test_and_set_bit(HCI_PRIVACY
, &hdev
->dev_flags
);
4626 memcpy(hdev
->irk
, cp
->irk
, sizeof(hdev
->irk
));
4627 set_bit(HCI_RPA_EXPIRED
, &hdev
->dev_flags
);
4629 changed
= test_and_clear_bit(HCI_PRIVACY
, &hdev
->dev_flags
);
4630 memset(hdev
->irk
, 0, sizeof(hdev
->irk
));
4631 clear_bit(HCI_RPA_EXPIRED
, &hdev
->dev_flags
);
4634 err
= send_settings_rsp(sk
, MGMT_OP_SET_PRIVACY
, hdev
);
4639 err
= new_settings(hdev
, sk
);
4642 hci_dev_unlock(hdev
);
4646 static bool irk_is_valid(struct mgmt_irk_info
*irk
)
4648 switch (irk
->addr
.type
) {
4649 case BDADDR_LE_PUBLIC
:
4652 case BDADDR_LE_RANDOM
:
4653 /* Two most significant bits shall be set */
4654 if ((irk
->addr
.bdaddr
.b
[5] & 0xc0) != 0xc0)
4662 static int load_irks(struct sock
*sk
, struct hci_dev
*hdev
, void *cp_data
,
4665 struct mgmt_cp_load_irks
*cp
= cp_data
;
4666 const u16 max_irk_count
= ((U16_MAX
- sizeof(*cp
)) /
4667 sizeof(struct mgmt_irk_info
));
4668 u16 irk_count
, expected_len
;
4671 BT_DBG("request for %s", hdev
->name
);
4673 if (!lmp_le_capable(hdev
))
4674 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_IRKS
,
4675 MGMT_STATUS_NOT_SUPPORTED
);
4677 irk_count
= __le16_to_cpu(cp
->irk_count
);
4678 if (irk_count
> max_irk_count
) {
4679 BT_ERR("load_irks: too big irk_count value %u", irk_count
);
4680 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_IRKS
,
4681 MGMT_STATUS_INVALID_PARAMS
);
4684 expected_len
= sizeof(*cp
) + irk_count
* sizeof(struct mgmt_irk_info
);
4685 if (expected_len
!= len
) {
4686 BT_ERR("load_irks: expected %u bytes, got %u bytes",
4688 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_IRKS
,
4689 MGMT_STATUS_INVALID_PARAMS
);
4692 BT_DBG("%s irk_count %u", hdev
->name
, irk_count
);
4694 for (i
= 0; i
< irk_count
; i
++) {
4695 struct mgmt_irk_info
*key
= &cp
->irks
[i
];
4697 if (!irk_is_valid(key
))
4698 return cmd_status(sk
, hdev
->id
,
4700 MGMT_STATUS_INVALID_PARAMS
);
4705 hci_smp_irks_clear(hdev
);
4707 for (i
= 0; i
< irk_count
; i
++) {
4708 struct mgmt_irk_info
*irk
= &cp
->irks
[i
];
4711 if (irk
->addr
.type
== BDADDR_LE_PUBLIC
)
4712 addr_type
= ADDR_LE_DEV_PUBLIC
;
4714 addr_type
= ADDR_LE_DEV_RANDOM
;
4716 hci_add_irk(hdev
, &irk
->addr
.bdaddr
, addr_type
, irk
->val
,
4720 set_bit(HCI_RPA_RESOLVING
, &hdev
->dev_flags
);
4722 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_IRKS
, 0, NULL
, 0);
4724 hci_dev_unlock(hdev
);
4729 static bool ltk_is_valid(struct mgmt_ltk_info
*key
)
4731 if (key
->master
!= 0x00 && key
->master
!= 0x01)
4734 switch (key
->addr
.type
) {
4735 case BDADDR_LE_PUBLIC
:
4738 case BDADDR_LE_RANDOM
:
4739 /* Two most significant bits shall be set */
4740 if ((key
->addr
.bdaddr
.b
[5] & 0xc0) != 0xc0)
4748 static int load_long_term_keys(struct sock
*sk
, struct hci_dev
*hdev
,
4749 void *cp_data
, u16 len
)
4751 struct mgmt_cp_load_long_term_keys
*cp
= cp_data
;
4752 const u16 max_key_count
= ((U16_MAX
- sizeof(*cp
)) /
4753 sizeof(struct mgmt_ltk_info
));
4754 u16 key_count
, expected_len
;
4757 BT_DBG("request for %s", hdev
->name
);
4759 if (!lmp_le_capable(hdev
))
4760 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
4761 MGMT_STATUS_NOT_SUPPORTED
);
4763 key_count
= __le16_to_cpu(cp
->key_count
);
4764 if (key_count
> max_key_count
) {
4765 BT_ERR("load_ltks: too big key_count value %u", key_count
);
4766 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
4767 MGMT_STATUS_INVALID_PARAMS
);
4770 expected_len
= sizeof(*cp
) + key_count
*
4771 sizeof(struct mgmt_ltk_info
);
4772 if (expected_len
!= len
) {
4773 BT_ERR("load_keys: expected %u bytes, got %u bytes",
4775 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
4776 MGMT_STATUS_INVALID_PARAMS
);
4779 BT_DBG("%s key_count %u", hdev
->name
, key_count
);
4781 for (i
= 0; i
< key_count
; i
++) {
4782 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
4784 if (!ltk_is_valid(key
))
4785 return cmd_status(sk
, hdev
->id
,
4786 MGMT_OP_LOAD_LONG_TERM_KEYS
,
4787 MGMT_STATUS_INVALID_PARAMS
);
4792 hci_smp_ltks_clear(hdev
);
4794 for (i
= 0; i
< key_count
; i
++) {
4795 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
4796 u8 type
, addr_type
, authenticated
;
4798 if (key
->addr
.type
== BDADDR_LE_PUBLIC
)
4799 addr_type
= ADDR_LE_DEV_PUBLIC
;
4801 addr_type
= ADDR_LE_DEV_RANDOM
;
4806 type
= SMP_LTK_SLAVE
;
4808 switch (key
->type
) {
4809 case MGMT_LTK_UNAUTHENTICATED
:
4810 authenticated
= 0x00;
4812 case MGMT_LTK_AUTHENTICATED
:
4813 authenticated
= 0x01;
4819 hci_add_ltk(hdev
, &key
->addr
.bdaddr
, addr_type
, type
,
4820 authenticated
, key
->val
, key
->enc_size
, key
->ediv
,
4824 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
, 0,
4827 hci_dev_unlock(hdev
);
4832 struct cmd_conn_lookup
{
4833 struct hci_conn
*conn
;
4834 bool valid_tx_power
;
4838 static void get_conn_info_complete(struct pending_cmd
*cmd
, void *data
)
4840 struct cmd_conn_lookup
*match
= data
;
4841 struct mgmt_cp_get_conn_info
*cp
;
4842 struct mgmt_rp_get_conn_info rp
;
4843 struct hci_conn
*conn
= cmd
->user_data
;
4845 if (conn
!= match
->conn
)
4848 cp
= (struct mgmt_cp_get_conn_info
*) cmd
->param
;
4850 memset(&rp
, 0, sizeof(rp
));
4851 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
4852 rp
.addr
.type
= cp
->addr
.type
;
4854 if (!match
->mgmt_status
) {
4855 rp
.rssi
= conn
->rssi
;
4857 if (match
->valid_tx_power
) {
4858 rp
.tx_power
= conn
->tx_power
;
4859 rp
.max_tx_power
= conn
->max_tx_power
;
4861 rp
.tx_power
= HCI_TX_POWER_INVALID
;
4862 rp
.max_tx_power
= HCI_TX_POWER_INVALID
;
4866 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_GET_CONN_INFO
,
4867 match
->mgmt_status
, &rp
, sizeof(rp
));
4869 hci_conn_drop(conn
);
4871 mgmt_pending_remove(cmd
);
4874 static void conn_info_refresh_complete(struct hci_dev
*hdev
, u8 status
)
4876 struct hci_cp_read_rssi
*cp
;
4877 struct hci_conn
*conn
;
4878 struct cmd_conn_lookup match
;
4881 BT_DBG("status 0x%02x", status
);
4885 /* TX power data is valid in case request completed successfully,
4886 * otherwise we assume it's not valid. At the moment we assume that
4887 * either both or none of current and max values are valid to keep code
4890 match
.valid_tx_power
= !status
;
4892 /* Commands sent in request are either Read RSSI or Read Transmit Power
4893 * Level so we check which one was last sent to retrieve connection
4894 * handle. Both commands have handle as first parameter so it's safe to
4895 * cast data on the same command struct.
4897 * First command sent is always Read RSSI and we fail only if it fails.
4898 * In other case we simply override error to indicate success as we
4899 * already remembered if TX power value is actually valid.
4901 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_RSSI
);
4903 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_TX_POWER
);
4908 BT_ERR("invalid sent_cmd in response");
4912 handle
= __le16_to_cpu(cp
->handle
);
4913 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
4915 BT_ERR("unknown handle (%d) in response", handle
);
4920 match
.mgmt_status
= mgmt_status(status
);
4922 /* Cache refresh is complete, now reply for mgmt request for given
4925 mgmt_pending_foreach(MGMT_OP_GET_CONN_INFO
, hdev
,
4926 get_conn_info_complete
, &match
);
4929 hci_dev_unlock(hdev
);
4932 static int get_conn_info(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
4935 struct mgmt_cp_get_conn_info
*cp
= data
;
4936 struct mgmt_rp_get_conn_info rp
;
4937 struct hci_conn
*conn
;
4938 unsigned long conn_info_age
;
4941 BT_DBG("%s", hdev
->name
);
4943 memset(&rp
, 0, sizeof(rp
));
4944 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
4945 rp
.addr
.type
= cp
->addr
.type
;
4947 if (!bdaddr_type_is_valid(cp
->addr
.type
))
4948 return cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CONN_INFO
,
4949 MGMT_STATUS_INVALID_PARAMS
,
4954 if (!hdev_is_powered(hdev
)) {
4955 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CONN_INFO
,
4956 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
4960 if (cp
->addr
.type
== BDADDR_BREDR
)
4961 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
4964 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->addr
.bdaddr
);
4966 if (!conn
|| conn
->state
!= BT_CONNECTED
) {
4967 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CONN_INFO
,
4968 MGMT_STATUS_NOT_CONNECTED
, &rp
, sizeof(rp
));
4972 /* To avoid client trying to guess when to poll again for information we
4973 * calculate conn info age as random value between min/max set in hdev.
4975 conn_info_age
= hdev
->conn_info_min_age
+
4976 prandom_u32_max(hdev
->conn_info_max_age
-
4977 hdev
->conn_info_min_age
);
4979 /* Query controller to refresh cached values if they are too old or were
4982 if (time_after(jiffies
, conn
->conn_info_timestamp
+
4983 msecs_to_jiffies(conn_info_age
)) ||
4984 !conn
->conn_info_timestamp
) {
4985 struct hci_request req
;
4986 struct hci_cp_read_tx_power req_txp_cp
;
4987 struct hci_cp_read_rssi req_rssi_cp
;
4988 struct pending_cmd
*cmd
;
4990 hci_req_init(&req
, hdev
);
4991 req_rssi_cp
.handle
= cpu_to_le16(conn
->handle
);
4992 hci_req_add(&req
, HCI_OP_READ_RSSI
, sizeof(req_rssi_cp
),
4995 /* For LE links TX power does not change thus we don't need to
4996 * query for it once value is known.
4998 if (!bdaddr_type_is_le(cp
->addr
.type
) ||
4999 conn
->tx_power
== HCI_TX_POWER_INVALID
) {
5000 req_txp_cp
.handle
= cpu_to_le16(conn
->handle
);
5001 req_txp_cp
.type
= 0x00;
5002 hci_req_add(&req
, HCI_OP_READ_TX_POWER
,
5003 sizeof(req_txp_cp
), &req_txp_cp
);
5006 /* Max TX power needs to be read only once per connection */
5007 if (conn
->max_tx_power
== HCI_TX_POWER_INVALID
) {
5008 req_txp_cp
.handle
= cpu_to_le16(conn
->handle
);
5009 req_txp_cp
.type
= 0x01;
5010 hci_req_add(&req
, HCI_OP_READ_TX_POWER
,
5011 sizeof(req_txp_cp
), &req_txp_cp
);
5014 err
= hci_req_run(&req
, conn_info_refresh_complete
);
5018 cmd
= mgmt_pending_add(sk
, MGMT_OP_GET_CONN_INFO
, hdev
,
5025 hci_conn_hold(conn
);
5026 cmd
->user_data
= conn
;
5028 conn
->conn_info_timestamp
= jiffies
;
5030 /* Cache is valid, just reply with values cached in hci_conn */
5031 rp
.rssi
= conn
->rssi
;
5032 rp
.tx_power
= conn
->tx_power
;
5033 rp
.max_tx_power
= conn
->max_tx_power
;
5035 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CONN_INFO
,
5036 MGMT_STATUS_SUCCESS
, &rp
, sizeof(rp
));
5040 hci_dev_unlock(hdev
);
5044 static void get_clock_info_complete(struct hci_dev
*hdev
, u8 status
)
5046 struct mgmt_cp_get_clock_info
*cp
;
5047 struct mgmt_rp_get_clock_info rp
;
5048 struct hci_cp_read_clock
*hci_cp
;
5049 struct pending_cmd
*cmd
;
5050 struct hci_conn
*conn
;
5052 BT_DBG("%s status %u", hdev
->name
, status
);
5056 hci_cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_CLOCK
);
5060 if (hci_cp
->which
) {
5061 u16 handle
= __le16_to_cpu(hci_cp
->handle
);
5062 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
5067 cmd
= mgmt_pending_find_data(MGMT_OP_GET_CLOCK_INFO
, hdev
, conn
);
5073 memset(&rp
, 0, sizeof(rp
));
5074 memcpy(&rp
.addr
, &cp
->addr
, sizeof(rp
.addr
));
5079 rp
.local_clock
= cpu_to_le32(hdev
->clock
);
5082 rp
.piconet_clock
= cpu_to_le32(conn
->clock
);
5083 rp
.accuracy
= cpu_to_le16(conn
->clock_accuracy
);
5087 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_status(status
),
5089 mgmt_pending_remove(cmd
);
5091 hci_conn_drop(conn
);
5094 hci_dev_unlock(hdev
);
5097 static int get_clock_info(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
5100 struct mgmt_cp_get_clock_info
*cp
= data
;
5101 struct mgmt_rp_get_clock_info rp
;
5102 struct hci_cp_read_clock hci_cp
;
5103 struct pending_cmd
*cmd
;
5104 struct hci_request req
;
5105 struct hci_conn
*conn
;
5108 BT_DBG("%s", hdev
->name
);
5110 memset(&rp
, 0, sizeof(rp
));
5111 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
5112 rp
.addr
.type
= cp
->addr
.type
;
5114 if (cp
->addr
.type
!= BDADDR_BREDR
)
5115 return cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CLOCK_INFO
,
5116 MGMT_STATUS_INVALID_PARAMS
,
5121 if (!hdev_is_powered(hdev
)) {
5122 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CLOCK_INFO
,
5123 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
5127 if (bacmp(&cp
->addr
.bdaddr
, BDADDR_ANY
)) {
5128 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
5130 if (!conn
|| conn
->state
!= BT_CONNECTED
) {
5131 err
= cmd_complete(sk
, hdev
->id
,
5132 MGMT_OP_GET_CLOCK_INFO
,
5133 MGMT_STATUS_NOT_CONNECTED
,
5141 cmd
= mgmt_pending_add(sk
, MGMT_OP_GET_CLOCK_INFO
, hdev
, data
, len
);
5147 hci_req_init(&req
, hdev
);
5149 memset(&hci_cp
, 0, sizeof(hci_cp
));
5150 hci_req_add(&req
, HCI_OP_READ_CLOCK
, sizeof(hci_cp
), &hci_cp
);
5153 hci_conn_hold(conn
);
5154 cmd
->user_data
= conn
;
5156 hci_cp
.handle
= cpu_to_le16(conn
->handle
);
5157 hci_cp
.which
= 0x01; /* Piconet clock */
5158 hci_req_add(&req
, HCI_OP_READ_CLOCK
, sizeof(hci_cp
), &hci_cp
);
5161 err
= hci_req_run(&req
, get_clock_info_complete
);
5163 mgmt_pending_remove(cmd
);
5166 hci_dev_unlock(hdev
);
5170 static void device_added(struct sock
*sk
, struct hci_dev
*hdev
,
5171 bdaddr_t
*bdaddr
, u8 type
, u8 action
)
5173 struct mgmt_ev_device_added ev
;
5175 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5176 ev
.addr
.type
= type
;
5179 mgmt_event(MGMT_EV_DEVICE_ADDED
, hdev
, &ev
, sizeof(ev
), sk
);
5182 static int add_device(struct sock
*sk
, struct hci_dev
*hdev
,
5183 void *data
, u16 len
)
5185 struct mgmt_cp_add_device
*cp
= data
;
5186 u8 auto_conn
, addr_type
;
5189 BT_DBG("%s", hdev
->name
);
5191 if (!bdaddr_type_is_le(cp
->addr
.type
) ||
5192 !bacmp(&cp
->addr
.bdaddr
, BDADDR_ANY
))
5193 return cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_DEVICE
,
5194 MGMT_STATUS_INVALID_PARAMS
,
5195 &cp
->addr
, sizeof(cp
->addr
));
5197 if (cp
->action
!= 0x00 && cp
->action
!= 0x01)
5198 return cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_DEVICE
,
5199 MGMT_STATUS_INVALID_PARAMS
,
5200 &cp
->addr
, sizeof(cp
->addr
));
5204 if (cp
->addr
.type
== BDADDR_LE_PUBLIC
)
5205 addr_type
= ADDR_LE_DEV_PUBLIC
;
5207 addr_type
= ADDR_LE_DEV_RANDOM
;
5210 auto_conn
= HCI_AUTO_CONN_ALWAYS
;
5212 auto_conn
= HCI_AUTO_CONN_REPORT
;
5214 /* If the connection parameters don't exist for this device,
5215 * they will be created and configured with defaults.
5217 if (hci_conn_params_set(hdev
, &cp
->addr
.bdaddr
, addr_type
,
5219 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_DEVICE
,
5221 &cp
->addr
, sizeof(cp
->addr
));
5225 device_added(sk
, hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, cp
->action
);
5227 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_DEVICE
,
5228 MGMT_STATUS_SUCCESS
, &cp
->addr
, sizeof(cp
->addr
));
5231 hci_dev_unlock(hdev
);
5235 static void device_removed(struct sock
*sk
, struct hci_dev
*hdev
,
5236 bdaddr_t
*bdaddr
, u8 type
)
5238 struct mgmt_ev_device_removed ev
;
5240 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5241 ev
.addr
.type
= type
;
5243 mgmt_event(MGMT_EV_DEVICE_REMOVED
, hdev
, &ev
, sizeof(ev
), sk
);
5246 static int remove_device(struct sock
*sk
, struct hci_dev
*hdev
,
5247 void *data
, u16 len
)
5249 struct mgmt_cp_remove_device
*cp
= data
;
5252 BT_DBG("%s", hdev
->name
);
5256 if (bacmp(&cp
->addr
.bdaddr
, BDADDR_ANY
)) {
5257 struct hci_conn_params
*params
;
5260 if (!bdaddr_type_is_le(cp
->addr
.type
)) {
5261 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_DEVICE
,
5262 MGMT_STATUS_INVALID_PARAMS
,
5263 &cp
->addr
, sizeof(cp
->addr
));
5267 if (cp
->addr
.type
== BDADDR_LE_PUBLIC
)
5268 addr_type
= ADDR_LE_DEV_PUBLIC
;
5270 addr_type
= ADDR_LE_DEV_RANDOM
;
5272 params
= hci_conn_params_lookup(hdev
, &cp
->addr
.bdaddr
,
5275 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_DEVICE
,
5276 MGMT_STATUS_INVALID_PARAMS
,
5277 &cp
->addr
, sizeof(cp
->addr
));
5281 if (params
->auto_connect
== HCI_AUTO_CONN_DISABLED
) {
5282 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_DEVICE
,
5283 MGMT_STATUS_INVALID_PARAMS
,
5284 &cp
->addr
, sizeof(cp
->addr
));
5288 list_del(¶ms
->action
);
5289 list_del(¶ms
->list
);
5291 hci_update_background_scan(hdev
);
5293 device_removed(sk
, hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
5295 struct hci_conn_params
*p
, *tmp
;
5297 if (cp
->addr
.type
) {
5298 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_DEVICE
,
5299 MGMT_STATUS_INVALID_PARAMS
,
5300 &cp
->addr
, sizeof(cp
->addr
));
5304 list_for_each_entry_safe(p
, tmp
, &hdev
->le_conn_params
, list
) {
5305 if (p
->auto_connect
== HCI_AUTO_CONN_DISABLED
)
5307 device_removed(sk
, hdev
, &p
->addr
, p
->addr_type
);
5308 list_del(&p
->action
);
5313 BT_DBG("All LE connection parameters were removed");
5315 hci_update_background_scan(hdev
);
5318 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_DEVICE
,
5319 MGMT_STATUS_SUCCESS
, &cp
->addr
, sizeof(cp
->addr
));
5322 hci_dev_unlock(hdev
);
5326 static int load_conn_param(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
5329 struct mgmt_cp_load_conn_param
*cp
= data
;
5330 const u16 max_param_count
= ((U16_MAX
- sizeof(*cp
)) /
5331 sizeof(struct mgmt_conn_param
));
5332 u16 param_count
, expected_len
;
5335 if (!lmp_le_capable(hdev
))
5336 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_CONN_PARAM
,
5337 MGMT_STATUS_NOT_SUPPORTED
);
5339 param_count
= __le16_to_cpu(cp
->param_count
);
5340 if (param_count
> max_param_count
) {
5341 BT_ERR("load_conn_param: too big param_count value %u",
5343 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_CONN_PARAM
,
5344 MGMT_STATUS_INVALID_PARAMS
);
5347 expected_len
= sizeof(*cp
) + param_count
*
5348 sizeof(struct mgmt_conn_param
);
5349 if (expected_len
!= len
) {
5350 BT_ERR("load_conn_param: expected %u bytes, got %u bytes",
5352 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_CONN_PARAM
,
5353 MGMT_STATUS_INVALID_PARAMS
);
5356 BT_DBG("%s param_count %u", hdev
->name
, param_count
);
5360 hci_conn_params_clear_disabled(hdev
);
5362 for (i
= 0; i
< param_count
; i
++) {
5363 struct mgmt_conn_param
*param
= &cp
->params
[i
];
5364 struct hci_conn_params
*hci_param
;
5365 u16 min
, max
, latency
, timeout
;
5368 BT_DBG("Adding %pMR (type %u)", ¶m
->addr
.bdaddr
,
5371 if (param
->addr
.type
== BDADDR_LE_PUBLIC
) {
5372 addr_type
= ADDR_LE_DEV_PUBLIC
;
5373 } else if (param
->addr
.type
== BDADDR_LE_RANDOM
) {
5374 addr_type
= ADDR_LE_DEV_RANDOM
;
5376 BT_ERR("Ignoring invalid connection parameters");
5380 min
= le16_to_cpu(param
->min_interval
);
5381 max
= le16_to_cpu(param
->max_interval
);
5382 latency
= le16_to_cpu(param
->latency
);
5383 timeout
= le16_to_cpu(param
->timeout
);
5385 BT_DBG("min 0x%04x max 0x%04x latency 0x%04x timeout 0x%04x",
5386 min
, max
, latency
, timeout
);
5388 if (hci_check_conn_params(min
, max
, latency
, timeout
) < 0) {
5389 BT_ERR("Ignoring invalid connection parameters");
5393 hci_param
= hci_conn_params_add(hdev
, ¶m
->addr
.bdaddr
,
5396 BT_ERR("Failed to add connection parameters");
5400 hci_param
->conn_min_interval
= min
;
5401 hci_param
->conn_max_interval
= max
;
5402 hci_param
->conn_latency
= latency
;
5403 hci_param
->supervision_timeout
= timeout
;
5406 hci_dev_unlock(hdev
);
5408 return cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_CONN_PARAM
, 0, NULL
, 0);
5411 static int set_external_config(struct sock
*sk
, struct hci_dev
*hdev
,
5412 void *data
, u16 len
)
5414 struct mgmt_cp_set_external_config
*cp
= data
;
5418 BT_DBG("%s", hdev
->name
);
5420 if (hdev_is_powered(hdev
))
5421 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_EXTERNAL_CONFIG
,
5422 MGMT_STATUS_REJECTED
);
5424 if (cp
->config
!= 0x00 && cp
->config
!= 0x01)
5425 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_EXTERNAL_CONFIG
,
5426 MGMT_STATUS_INVALID_PARAMS
);
5428 if (!test_bit(HCI_QUIRK_EXTERNAL_CONFIG
, &hdev
->quirks
))
5429 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_EXTERNAL_CONFIG
,
5430 MGMT_STATUS_NOT_SUPPORTED
);
5435 changed
= !test_and_set_bit(HCI_EXT_CONFIGURED
,
5438 changed
= test_and_clear_bit(HCI_EXT_CONFIGURED
,
5441 err
= send_options_rsp(sk
, MGMT_OP_SET_EXTERNAL_CONFIG
, hdev
);
5448 err
= new_options(hdev
, sk
);
5450 if (test_bit(HCI_UNCONFIGURED
, &hdev
->dev_flags
) == is_configured(hdev
)) {
5451 mgmt_index_removed(hdev
);
5453 if (test_and_change_bit(HCI_UNCONFIGURED
, &hdev
->dev_flags
)) {
5454 set_bit(HCI_CONFIG
, &hdev
->dev_flags
);
5455 set_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
);
5457 queue_work(hdev
->req_workqueue
, &hdev
->power_on
);
5459 set_bit(HCI_RAW
, &hdev
->flags
);
5460 mgmt_index_added(hdev
);
5465 hci_dev_unlock(hdev
);
5469 static int set_public_address(struct sock
*sk
, struct hci_dev
*hdev
,
5470 void *data
, u16 len
)
5472 struct mgmt_cp_set_public_address
*cp
= data
;
5476 BT_DBG("%s", hdev
->name
);
5478 if (hdev_is_powered(hdev
))
5479 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PUBLIC_ADDRESS
,
5480 MGMT_STATUS_REJECTED
);
5482 if (!bacmp(&cp
->bdaddr
, BDADDR_ANY
))
5483 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PUBLIC_ADDRESS
,
5484 MGMT_STATUS_INVALID_PARAMS
);
5486 if (!hdev
->set_bdaddr
)
5487 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PUBLIC_ADDRESS
,
5488 MGMT_STATUS_NOT_SUPPORTED
);
5492 changed
= !!bacmp(&hdev
->public_addr
, &cp
->bdaddr
);
5493 bacpy(&hdev
->public_addr
, &cp
->bdaddr
);
5495 err
= send_options_rsp(sk
, MGMT_OP_SET_PUBLIC_ADDRESS
, hdev
);
5502 if (test_bit(HCI_UNCONFIGURED
, &hdev
->dev_flags
))
5503 err
= new_options(hdev
, sk
);
5505 if (is_configured(hdev
)) {
5506 mgmt_index_removed(hdev
);
5508 clear_bit(HCI_UNCONFIGURED
, &hdev
->dev_flags
);
5510 set_bit(HCI_CONFIG
, &hdev
->dev_flags
);
5511 set_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
);
5513 queue_work(hdev
->req_workqueue
, &hdev
->power_on
);
5517 hci_dev_unlock(hdev
);
5521 static const struct mgmt_handler
{
5522 int (*func
) (struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
5526 } mgmt_handlers
[] = {
5527 { NULL
}, /* 0x0000 (no command) */
5528 { read_version
, false, MGMT_READ_VERSION_SIZE
},
5529 { read_commands
, false, MGMT_READ_COMMANDS_SIZE
},
5530 { read_index_list
, false, MGMT_READ_INDEX_LIST_SIZE
},
5531 { read_controller_info
, false, MGMT_READ_INFO_SIZE
},
5532 { set_powered
, false, MGMT_SETTING_SIZE
},
5533 { set_discoverable
, false, MGMT_SET_DISCOVERABLE_SIZE
},
5534 { set_connectable
, false, MGMT_SETTING_SIZE
},
5535 { set_fast_connectable
, false, MGMT_SETTING_SIZE
},
5536 { set_pairable
, false, MGMT_SETTING_SIZE
},
5537 { set_link_security
, false, MGMT_SETTING_SIZE
},
5538 { set_ssp
, false, MGMT_SETTING_SIZE
},
5539 { set_hs
, false, MGMT_SETTING_SIZE
},
5540 { set_le
, false, MGMT_SETTING_SIZE
},
5541 { set_dev_class
, false, MGMT_SET_DEV_CLASS_SIZE
},
5542 { set_local_name
, false, MGMT_SET_LOCAL_NAME_SIZE
},
5543 { add_uuid
, false, MGMT_ADD_UUID_SIZE
},
5544 { remove_uuid
, false, MGMT_REMOVE_UUID_SIZE
},
5545 { load_link_keys
, true, MGMT_LOAD_LINK_KEYS_SIZE
},
5546 { load_long_term_keys
, true, MGMT_LOAD_LONG_TERM_KEYS_SIZE
},
5547 { disconnect
, false, MGMT_DISCONNECT_SIZE
},
5548 { get_connections
, false, MGMT_GET_CONNECTIONS_SIZE
},
5549 { pin_code_reply
, false, MGMT_PIN_CODE_REPLY_SIZE
},
5550 { pin_code_neg_reply
, false, MGMT_PIN_CODE_NEG_REPLY_SIZE
},
5551 { set_io_capability
, false, MGMT_SET_IO_CAPABILITY_SIZE
},
5552 { pair_device
, false, MGMT_PAIR_DEVICE_SIZE
},
5553 { cancel_pair_device
, false, MGMT_CANCEL_PAIR_DEVICE_SIZE
},
5554 { unpair_device
, false, MGMT_UNPAIR_DEVICE_SIZE
},
5555 { user_confirm_reply
, false, MGMT_USER_CONFIRM_REPLY_SIZE
},
5556 { user_confirm_neg_reply
, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE
},
5557 { user_passkey_reply
, false, MGMT_USER_PASSKEY_REPLY_SIZE
},
5558 { user_passkey_neg_reply
, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE
},
5559 { read_local_oob_data
, false, MGMT_READ_LOCAL_OOB_DATA_SIZE
},
5560 { add_remote_oob_data
, true, MGMT_ADD_REMOTE_OOB_DATA_SIZE
},
5561 { remove_remote_oob_data
, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE
},
5562 { start_discovery
, false, MGMT_START_DISCOVERY_SIZE
},
5563 { stop_discovery
, false, MGMT_STOP_DISCOVERY_SIZE
},
5564 { confirm_name
, false, MGMT_CONFIRM_NAME_SIZE
},
5565 { block_device
, false, MGMT_BLOCK_DEVICE_SIZE
},
5566 { unblock_device
, false, MGMT_UNBLOCK_DEVICE_SIZE
},
5567 { set_device_id
, false, MGMT_SET_DEVICE_ID_SIZE
},
5568 { set_advertising
, false, MGMT_SETTING_SIZE
},
5569 { set_bredr
, false, MGMT_SETTING_SIZE
},
5570 { set_static_address
, false, MGMT_SET_STATIC_ADDRESS_SIZE
},
5571 { set_scan_params
, false, MGMT_SET_SCAN_PARAMS_SIZE
},
5572 { set_secure_conn
, false, MGMT_SETTING_SIZE
},
5573 { set_debug_keys
, false, MGMT_SETTING_SIZE
},
5574 { set_privacy
, false, MGMT_SET_PRIVACY_SIZE
},
5575 { load_irks
, true, MGMT_LOAD_IRKS_SIZE
},
5576 { get_conn_info
, false, MGMT_GET_CONN_INFO_SIZE
},
5577 { get_clock_info
, false, MGMT_GET_CLOCK_INFO_SIZE
},
5578 { add_device
, false, MGMT_ADD_DEVICE_SIZE
},
5579 { remove_device
, false, MGMT_REMOVE_DEVICE_SIZE
},
5580 { load_conn_param
, true, MGMT_LOAD_CONN_PARAM_SIZE
},
5581 { read_unconf_index_list
, false, MGMT_READ_UNCONF_INDEX_LIST_SIZE
},
5582 { read_config_info
, false, MGMT_READ_CONFIG_INFO_SIZE
},
5583 { set_external_config
, false, MGMT_SET_EXTERNAL_CONFIG_SIZE
},
5584 { set_public_address
, false, MGMT_SET_PUBLIC_ADDRESS_SIZE
},
5587 int mgmt_control(struct sock
*sk
, struct msghdr
*msg
, size_t msglen
)
5591 struct mgmt_hdr
*hdr
;
5592 u16 opcode
, index
, len
;
5593 struct hci_dev
*hdev
= NULL
;
5594 const struct mgmt_handler
*handler
;
5597 BT_DBG("got %zu bytes", msglen
);
5599 if (msglen
< sizeof(*hdr
))
5602 buf
= kmalloc(msglen
, GFP_KERNEL
);
5606 if (memcpy_fromiovec(buf
, msg
->msg_iov
, msglen
)) {
5612 opcode
= __le16_to_cpu(hdr
->opcode
);
5613 index
= __le16_to_cpu(hdr
->index
);
5614 len
= __le16_to_cpu(hdr
->len
);
5616 if (len
!= msglen
- sizeof(*hdr
)) {
5621 if (index
!= MGMT_INDEX_NONE
) {
5622 hdev
= hci_dev_get(index
);
5624 err
= cmd_status(sk
, index
, opcode
,
5625 MGMT_STATUS_INVALID_INDEX
);
5629 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
) ||
5630 test_bit(HCI_CONFIG
, &hdev
->dev_flags
) ||
5631 test_bit(HCI_USER_CHANNEL
, &hdev
->dev_flags
)) {
5632 err
= cmd_status(sk
, index
, opcode
,
5633 MGMT_STATUS_INVALID_INDEX
);
5637 if (test_bit(HCI_UNCONFIGURED
, &hdev
->dev_flags
) &&
5638 opcode
!= MGMT_OP_READ_CONFIG_INFO
&&
5639 opcode
!= MGMT_OP_SET_EXTERNAL_CONFIG
&&
5640 opcode
!= MGMT_OP_SET_PUBLIC_ADDRESS
) {
5641 err
= cmd_status(sk
, index
, opcode
,
5642 MGMT_STATUS_INVALID_INDEX
);
5647 if (opcode
>= ARRAY_SIZE(mgmt_handlers
) ||
5648 mgmt_handlers
[opcode
].func
== NULL
) {
5649 BT_DBG("Unknown op %u", opcode
);
5650 err
= cmd_status(sk
, index
, opcode
,
5651 MGMT_STATUS_UNKNOWN_COMMAND
);
5655 if (hdev
&& (opcode
<= MGMT_OP_READ_INDEX_LIST
||
5656 opcode
== MGMT_OP_READ_UNCONF_INDEX_LIST
)) {
5657 err
= cmd_status(sk
, index
, opcode
,
5658 MGMT_STATUS_INVALID_INDEX
);
5662 if (!hdev
&& (opcode
> MGMT_OP_READ_INDEX_LIST
&&
5663 opcode
!= MGMT_OP_READ_UNCONF_INDEX_LIST
)) {
5664 err
= cmd_status(sk
, index
, opcode
,
5665 MGMT_STATUS_INVALID_INDEX
);
5669 handler
= &mgmt_handlers
[opcode
];
5671 if ((handler
->var_len
&& len
< handler
->data_len
) ||
5672 (!handler
->var_len
&& len
!= handler
->data_len
)) {
5673 err
= cmd_status(sk
, index
, opcode
,
5674 MGMT_STATUS_INVALID_PARAMS
);
5679 mgmt_init_hdev(sk
, hdev
);
5681 cp
= buf
+ sizeof(*hdr
);
5683 err
= handler
->func(sk
, hdev
, cp
, len
);
5697 void mgmt_index_added(struct hci_dev
*hdev
)
5699 if (hdev
->dev_type
!= HCI_BREDR
)
5702 if (test_bit(HCI_QUIRK_RAW_DEVICE
, &hdev
->quirks
))
5705 if (test_bit(HCI_UNCONFIGURED
, &hdev
->dev_flags
))
5706 mgmt_event(MGMT_EV_UNCONF_INDEX_ADDED
, hdev
, NULL
, 0, NULL
);
5708 mgmt_event(MGMT_EV_INDEX_ADDED
, hdev
, NULL
, 0, NULL
);
5711 void mgmt_index_removed(struct hci_dev
*hdev
)
5713 u8 status
= MGMT_STATUS_INVALID_INDEX
;
5715 if (hdev
->dev_type
!= HCI_BREDR
)
5718 if (test_bit(HCI_QUIRK_RAW_DEVICE
, &hdev
->quirks
))
5721 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status
);
5723 if (test_bit(HCI_UNCONFIGURED
, &hdev
->dev_flags
))
5724 mgmt_event(MGMT_EV_UNCONF_INDEX_REMOVED
, hdev
, NULL
, 0, NULL
);
5726 mgmt_event(MGMT_EV_INDEX_REMOVED
, hdev
, NULL
, 0, NULL
);
5729 /* This function requires the caller holds hdev->lock */
5730 static void restart_le_actions(struct hci_dev
*hdev
)
5732 struct hci_conn_params
*p
;
5734 list_for_each_entry(p
, &hdev
->le_conn_params
, list
) {
5735 /* Needed for AUTO_OFF case where might not "really"
5736 * have been powered off.
5738 list_del_init(&p
->action
);
5740 switch (p
->auto_connect
) {
5741 case HCI_AUTO_CONN_ALWAYS
:
5742 list_add(&p
->action
, &hdev
->pend_le_conns
);
5744 case HCI_AUTO_CONN_REPORT
:
5745 list_add(&p
->action
, &hdev
->pend_le_reports
);
5752 hci_update_background_scan(hdev
);
5755 static void powered_complete(struct hci_dev
*hdev
, u8 status
)
5757 struct cmd_lookup match
= { NULL
, hdev
};
5759 BT_DBG("status 0x%02x", status
);
5763 restart_le_actions(hdev
);
5765 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
5767 new_settings(hdev
, match
.sk
);
5769 hci_dev_unlock(hdev
);
5775 static int powered_update_hci(struct hci_dev
*hdev
)
5777 struct hci_request req
;
5780 hci_req_init(&req
, hdev
);
5782 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
) &&
5783 !lmp_host_ssp_capable(hdev
)) {
5786 hci_req_add(&req
, HCI_OP_WRITE_SSP_MODE
, 1, &ssp
);
5789 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
5790 lmp_bredr_capable(hdev
)) {
5791 struct hci_cp_write_le_host_supported cp
;
5794 cp
.simul
= lmp_le_br_capable(hdev
);
5796 /* Check first if we already have the right
5797 * host state (host features set)
5799 if (cp
.le
!= lmp_host_le_capable(hdev
) ||
5800 cp
.simul
!= lmp_host_le_br_capable(hdev
))
5801 hci_req_add(&req
, HCI_OP_WRITE_LE_HOST_SUPPORTED
,
5805 if (lmp_le_capable(hdev
)) {
5806 /* Make sure the controller has a good default for
5807 * advertising data. This also applies to the case
5808 * where BR/EDR was toggled during the AUTO_OFF phase.
5810 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
5811 update_adv_data(&req
);
5812 update_scan_rsp_data(&req
);
5815 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
5816 enable_advertising(&req
);
5819 link_sec
= test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
5820 if (link_sec
!= test_bit(HCI_AUTH
, &hdev
->flags
))
5821 hci_req_add(&req
, HCI_OP_WRITE_AUTH_ENABLE
,
5822 sizeof(link_sec
), &link_sec
);
5824 if (lmp_bredr_capable(hdev
)) {
5825 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
5826 set_bredr_scan(&req
);
5832 return hci_req_run(&req
, powered_complete
);
5835 int mgmt_powered(struct hci_dev
*hdev
, u8 powered
)
5837 struct cmd_lookup match
= { NULL
, hdev
};
5838 u8 status_not_powered
= MGMT_STATUS_NOT_POWERED
;
5839 u8 zero_cod
[] = { 0, 0, 0 };
5842 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
5846 if (powered_update_hci(hdev
) == 0)
5849 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
,
5854 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
5855 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status_not_powered
);
5857 if (memcmp(hdev
->dev_class
, zero_cod
, sizeof(zero_cod
)) != 0)
5858 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED
, hdev
,
5859 zero_cod
, sizeof(zero_cod
), NULL
);
5862 err
= new_settings(hdev
, match
.sk
);
5870 void mgmt_set_powered_failed(struct hci_dev
*hdev
, int err
)
5872 struct pending_cmd
*cmd
;
5875 cmd
= mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
);
5879 if (err
== -ERFKILL
)
5880 status
= MGMT_STATUS_RFKILLED
;
5882 status
= MGMT_STATUS_FAILED
;
5884 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_POWERED
, status
);
5886 mgmt_pending_remove(cmd
);
5889 void mgmt_discoverable_timeout(struct hci_dev
*hdev
)
5891 struct hci_request req
;
5895 /* When discoverable timeout triggers, then just make sure
5896 * the limited discoverable flag is cleared. Even in the case
5897 * of a timeout triggered from general discoverable, it is
5898 * safe to unconditionally clear the flag.
5900 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
5901 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
5903 hci_req_init(&req
, hdev
);
5904 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
5905 u8 scan
= SCAN_PAGE
;
5906 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
,
5907 sizeof(scan
), &scan
);
5910 update_adv_data(&req
);
5911 hci_req_run(&req
, NULL
);
5913 hdev
->discov_timeout
= 0;
5915 new_settings(hdev
, NULL
);
5917 hci_dev_unlock(hdev
);
5920 void mgmt_discoverable(struct hci_dev
*hdev
, u8 discoverable
)
5924 /* Nothing needed here if there's a pending command since that
5925 * commands request completion callback takes care of everything
5928 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
))
5931 /* Powering off may clear the scan mode - don't let that interfere */
5932 if (!discoverable
&& mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
))
5936 changed
= !test_and_set_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
5938 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
5939 changed
= test_and_clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
5943 struct hci_request req
;
5945 /* In case this change in discoverable was triggered by
5946 * a disabling of connectable there could be a need to
5947 * update the advertising flags.
5949 hci_req_init(&req
, hdev
);
5950 update_adv_data(&req
);
5951 hci_req_run(&req
, NULL
);
5953 new_settings(hdev
, NULL
);
5957 void mgmt_connectable(struct hci_dev
*hdev
, u8 connectable
)
5961 /* Nothing needed here if there's a pending command since that
5962 * commands request completion callback takes care of everything
5965 if (mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
))
5968 /* Powering off may clear the scan mode - don't let that interfere */
5969 if (!connectable
&& mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
))
5973 changed
= !test_and_set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
5975 changed
= test_and_clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
5978 new_settings(hdev
, NULL
);
5981 void mgmt_advertising(struct hci_dev
*hdev
, u8 advertising
)
5983 /* Powering off may stop advertising - don't let that interfere */
5984 if (!advertising
&& mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
))
5988 set_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
5990 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
5993 void mgmt_write_scan_failed(struct hci_dev
*hdev
, u8 scan
, u8 status
)
5995 u8 mgmt_err
= mgmt_status(status
);
5997 if (scan
& SCAN_PAGE
)
5998 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, hdev
,
5999 cmd_status_rsp
, &mgmt_err
);
6001 if (scan
& SCAN_INQUIRY
)
6002 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, hdev
,
6003 cmd_status_rsp
, &mgmt_err
);
6006 void mgmt_new_link_key(struct hci_dev
*hdev
, struct link_key
*key
,
6009 struct mgmt_ev_new_link_key ev
;
6011 memset(&ev
, 0, sizeof(ev
));
6013 ev
.store_hint
= persistent
;
6014 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
6015 ev
.key
.addr
.type
= BDADDR_BREDR
;
6016 ev
.key
.type
= key
->type
;
6017 memcpy(ev
.key
.val
, key
->val
, HCI_LINK_KEY_SIZE
);
6018 ev
.key
.pin_len
= key
->pin_len
;
6020 mgmt_event(MGMT_EV_NEW_LINK_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
6023 static u8
mgmt_ltk_type(struct smp_ltk
*ltk
)
6025 if (ltk
->authenticated
)
6026 return MGMT_LTK_AUTHENTICATED
;
6028 return MGMT_LTK_UNAUTHENTICATED
;
6031 void mgmt_new_ltk(struct hci_dev
*hdev
, struct smp_ltk
*key
, bool persistent
)
6033 struct mgmt_ev_new_long_term_key ev
;
6035 memset(&ev
, 0, sizeof(ev
));
6037 /* Devices using resolvable or non-resolvable random addresses
6038 * without providing an indentity resolving key don't require
6039 * to store long term keys. Their addresses will change the
6042 * Only when a remote device provides an identity address
6043 * make sure the long term key is stored. If the remote
6044 * identity is known, the long term keys are internally
6045 * mapped to the identity address. So allow static random
6046 * and public addresses here.
6048 if (key
->bdaddr_type
== ADDR_LE_DEV_RANDOM
&&
6049 (key
->bdaddr
.b
[5] & 0xc0) != 0xc0)
6050 ev
.store_hint
= 0x00;
6052 ev
.store_hint
= persistent
;
6054 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
6055 ev
.key
.addr
.type
= link_to_bdaddr(LE_LINK
, key
->bdaddr_type
);
6056 ev
.key
.type
= mgmt_ltk_type(key
);
6057 ev
.key
.enc_size
= key
->enc_size
;
6058 ev
.key
.ediv
= key
->ediv
;
6059 ev
.key
.rand
= key
->rand
;
6061 if (key
->type
== SMP_LTK
)
6064 memcpy(ev
.key
.val
, key
->val
, sizeof(key
->val
));
6066 mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
6069 void mgmt_new_irk(struct hci_dev
*hdev
, struct smp_irk
*irk
)
6071 struct mgmt_ev_new_irk ev
;
6073 memset(&ev
, 0, sizeof(ev
));
6075 /* For identity resolving keys from devices that are already
6076 * using a public address or static random address, do not
6077 * ask for storing this key. The identity resolving key really
6078 * is only mandatory for devices using resovlable random
6081 * Storing all identity resolving keys has the downside that
6082 * they will be also loaded on next boot of they system. More
6083 * identity resolving keys, means more time during scanning is
6084 * needed to actually resolve these addresses.
6086 if (bacmp(&irk
->rpa
, BDADDR_ANY
))
6087 ev
.store_hint
= 0x01;
6089 ev
.store_hint
= 0x00;
6091 bacpy(&ev
.rpa
, &irk
->rpa
);
6092 bacpy(&ev
.irk
.addr
.bdaddr
, &irk
->bdaddr
);
6093 ev
.irk
.addr
.type
= link_to_bdaddr(LE_LINK
, irk
->addr_type
);
6094 memcpy(ev
.irk
.val
, irk
->val
, sizeof(irk
->val
));
6096 mgmt_event(MGMT_EV_NEW_IRK
, hdev
, &ev
, sizeof(ev
), NULL
);
6099 void mgmt_new_csrk(struct hci_dev
*hdev
, struct smp_csrk
*csrk
,
6102 struct mgmt_ev_new_csrk ev
;
6104 memset(&ev
, 0, sizeof(ev
));
6106 /* Devices using resolvable or non-resolvable random addresses
6107 * without providing an indentity resolving key don't require
6108 * to store signature resolving keys. Their addresses will change
6109 * the next time around.
6111 * Only when a remote device provides an identity address
6112 * make sure the signature resolving key is stored. So allow
6113 * static random and public addresses here.
6115 if (csrk
->bdaddr_type
== ADDR_LE_DEV_RANDOM
&&
6116 (csrk
->bdaddr
.b
[5] & 0xc0) != 0xc0)
6117 ev
.store_hint
= 0x00;
6119 ev
.store_hint
= persistent
;
6121 bacpy(&ev
.key
.addr
.bdaddr
, &csrk
->bdaddr
);
6122 ev
.key
.addr
.type
= link_to_bdaddr(LE_LINK
, csrk
->bdaddr_type
);
6123 ev
.key
.master
= csrk
->master
;
6124 memcpy(ev
.key
.val
, csrk
->val
, sizeof(csrk
->val
));
6126 mgmt_event(MGMT_EV_NEW_CSRK
, hdev
, &ev
, sizeof(ev
), NULL
);
6129 void mgmt_new_conn_param(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6130 u8 bdaddr_type
, u8 store_hint
, u16 min_interval
,
6131 u16 max_interval
, u16 latency
, u16 timeout
)
6133 struct mgmt_ev_new_conn_param ev
;
6135 if (!hci_is_identity_address(bdaddr
, bdaddr_type
))
6138 memset(&ev
, 0, sizeof(ev
));
6139 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6140 ev
.addr
.type
= link_to_bdaddr(LE_LINK
, bdaddr_type
);
6141 ev
.store_hint
= store_hint
;
6142 ev
.min_interval
= cpu_to_le16(min_interval
);
6143 ev
.max_interval
= cpu_to_le16(max_interval
);
6144 ev
.latency
= cpu_to_le16(latency
);
6145 ev
.timeout
= cpu_to_le16(timeout
);
6147 mgmt_event(MGMT_EV_NEW_CONN_PARAM
, hdev
, &ev
, sizeof(ev
), NULL
);
6150 static inline u16
eir_append_data(u8
*eir
, u16 eir_len
, u8 type
, u8
*data
,
6153 eir
[eir_len
++] = sizeof(type
) + data_len
;
6154 eir
[eir_len
++] = type
;
6155 memcpy(&eir
[eir_len
], data
, data_len
);
6156 eir_len
+= data_len
;
6161 void mgmt_device_connected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
6162 u8 addr_type
, u32 flags
, u8
*name
, u8 name_len
,
6166 struct mgmt_ev_device_connected
*ev
= (void *) buf
;
6169 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
6170 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6172 ev
->flags
= __cpu_to_le32(flags
);
6175 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
,
6178 if (dev_class
&& memcmp(dev_class
, "\0\0\0", 3) != 0)
6179 eir_len
= eir_append_data(ev
->eir
, eir_len
,
6180 EIR_CLASS_OF_DEV
, dev_class
, 3);
6182 ev
->eir_len
= cpu_to_le16(eir_len
);
6184 mgmt_event(MGMT_EV_DEVICE_CONNECTED
, hdev
, buf
,
6185 sizeof(*ev
) + eir_len
, NULL
);
6188 static void disconnect_rsp(struct pending_cmd
*cmd
, void *data
)
6190 struct mgmt_cp_disconnect
*cp
= cmd
->param
;
6191 struct sock
**sk
= data
;
6192 struct mgmt_rp_disconnect rp
;
6194 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
6195 rp
.addr
.type
= cp
->addr
.type
;
6197 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
, 0, &rp
,
6203 mgmt_pending_remove(cmd
);
6206 static void unpair_device_rsp(struct pending_cmd
*cmd
, void *data
)
6208 struct hci_dev
*hdev
= data
;
6209 struct mgmt_cp_unpair_device
*cp
= cmd
->param
;
6210 struct mgmt_rp_unpair_device rp
;
6212 memset(&rp
, 0, sizeof(rp
));
6213 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
6214 rp
.addr
.type
= cp
->addr
.type
;
6216 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, cmd
->sk
);
6218 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, 0, &rp
, sizeof(rp
));
6220 mgmt_pending_remove(cmd
);
6223 void mgmt_device_disconnected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6224 u8 link_type
, u8 addr_type
, u8 reason
,
6225 bool mgmt_connected
)
6227 struct mgmt_ev_device_disconnected ev
;
6228 struct pending_cmd
*power_off
;
6229 struct sock
*sk
= NULL
;
6231 power_off
= mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
);
6233 struct mgmt_mode
*cp
= power_off
->param
;
6235 /* The connection is still in hci_conn_hash so test for 1
6236 * instead of 0 to know if this is the last one.
6238 if (!cp
->val
&& hci_conn_count(hdev
) == 1) {
6239 cancel_delayed_work(&hdev
->power_off
);
6240 queue_work(hdev
->req_workqueue
, &hdev
->power_off
.work
);
6244 if (!mgmt_connected
)
6247 if (link_type
!= ACL_LINK
&& link_type
!= LE_LINK
)
6250 mgmt_pending_foreach(MGMT_OP_DISCONNECT
, hdev
, disconnect_rsp
, &sk
);
6252 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6253 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6256 mgmt_event(MGMT_EV_DEVICE_DISCONNECTED
, hdev
, &ev
, sizeof(ev
), sk
);
6261 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
6265 void mgmt_disconnect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6266 u8 link_type
, u8 addr_type
, u8 status
)
6268 u8 bdaddr_type
= link_to_bdaddr(link_type
, addr_type
);
6269 struct mgmt_cp_disconnect
*cp
;
6270 struct mgmt_rp_disconnect rp
;
6271 struct pending_cmd
*cmd
;
6273 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
6276 cmd
= mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
);
6282 if (bacmp(bdaddr
, &cp
->addr
.bdaddr
))
6285 if (cp
->addr
.type
!= bdaddr_type
)
6288 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
6289 rp
.addr
.type
= bdaddr_type
;
6291 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
,
6292 mgmt_status(status
), &rp
, sizeof(rp
));
6294 mgmt_pending_remove(cmd
);
6297 void mgmt_connect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
6298 u8 addr_type
, u8 status
)
6300 struct mgmt_ev_connect_failed ev
;
6301 struct pending_cmd
*power_off
;
6303 power_off
= mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
);
6305 struct mgmt_mode
*cp
= power_off
->param
;
6307 /* The connection is still in hci_conn_hash so test for 1
6308 * instead of 0 to know if this is the last one.
6310 if (!cp
->val
&& hci_conn_count(hdev
) == 1) {
6311 cancel_delayed_work(&hdev
->power_off
);
6312 queue_work(hdev
->req_workqueue
, &hdev
->power_off
.work
);
6316 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6317 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6318 ev
.status
= mgmt_status(status
);
6320 mgmt_event(MGMT_EV_CONNECT_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
6323 void mgmt_pin_code_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 secure
)
6325 struct mgmt_ev_pin_code_request ev
;
6327 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6328 ev
.addr
.type
= BDADDR_BREDR
;
6331 mgmt_event(MGMT_EV_PIN_CODE_REQUEST
, hdev
, &ev
, sizeof(ev
), NULL
);
6334 void mgmt_pin_code_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6337 struct pending_cmd
*cmd
;
6338 struct mgmt_rp_pin_code_reply rp
;
6340 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY
, hdev
);
6344 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
6345 rp
.addr
.type
= BDADDR_BREDR
;
6347 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
6348 mgmt_status(status
), &rp
, sizeof(rp
));
6350 mgmt_pending_remove(cmd
);
6353 void mgmt_pin_code_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6356 struct pending_cmd
*cmd
;
6357 struct mgmt_rp_pin_code_reply rp
;
6359 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
);
6363 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
6364 rp
.addr
.type
= BDADDR_BREDR
;
6366 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_NEG_REPLY
,
6367 mgmt_status(status
), &rp
, sizeof(rp
));
6369 mgmt_pending_remove(cmd
);
6372 int mgmt_user_confirm_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6373 u8 link_type
, u8 addr_type
, u32 value
,
6376 struct mgmt_ev_user_confirm_request ev
;
6378 BT_DBG("%s", hdev
->name
);
6380 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6381 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6382 ev
.confirm_hint
= confirm_hint
;
6383 ev
.value
= cpu_to_le32(value
);
6385 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST
, hdev
, &ev
, sizeof(ev
),
6389 int mgmt_user_passkey_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6390 u8 link_type
, u8 addr_type
)
6392 struct mgmt_ev_user_passkey_request ev
;
6394 BT_DBG("%s", hdev
->name
);
6396 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6397 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6399 return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST
, hdev
, &ev
, sizeof(ev
),
6403 static int user_pairing_resp_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6404 u8 link_type
, u8 addr_type
, u8 status
,
6407 struct pending_cmd
*cmd
;
6408 struct mgmt_rp_user_confirm_reply rp
;
6411 cmd
= mgmt_pending_find(opcode
, hdev
);
6415 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
6416 rp
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6417 err
= cmd_complete(cmd
->sk
, hdev
->id
, opcode
, mgmt_status(status
),
6420 mgmt_pending_remove(cmd
);
6425 int mgmt_user_confirm_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6426 u8 link_type
, u8 addr_type
, u8 status
)
6428 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
6429 status
, MGMT_OP_USER_CONFIRM_REPLY
);
6432 int mgmt_user_confirm_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6433 u8 link_type
, u8 addr_type
, u8 status
)
6435 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
6437 MGMT_OP_USER_CONFIRM_NEG_REPLY
);
6440 int mgmt_user_passkey_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6441 u8 link_type
, u8 addr_type
, u8 status
)
6443 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
6444 status
, MGMT_OP_USER_PASSKEY_REPLY
);
6447 int mgmt_user_passkey_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6448 u8 link_type
, u8 addr_type
, u8 status
)
6450 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
6452 MGMT_OP_USER_PASSKEY_NEG_REPLY
);
6455 int mgmt_user_passkey_notify(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
6456 u8 link_type
, u8 addr_type
, u32 passkey
,
6459 struct mgmt_ev_passkey_notify ev
;
6461 BT_DBG("%s", hdev
->name
);
6463 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6464 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6465 ev
.passkey
= __cpu_to_le32(passkey
);
6466 ev
.entered
= entered
;
6468 return mgmt_event(MGMT_EV_PASSKEY_NOTIFY
, hdev
, &ev
, sizeof(ev
), NULL
);
6471 void mgmt_auth_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
6472 u8 addr_type
, u8 status
)
6474 struct mgmt_ev_auth_failed ev
;
6476 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
6477 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6478 ev
.status
= mgmt_status(status
);
6480 mgmt_event(MGMT_EV_AUTH_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
6483 void mgmt_auth_enable_complete(struct hci_dev
*hdev
, u8 status
)
6485 struct cmd_lookup match
= { NULL
, hdev
};
6489 u8 mgmt_err
= mgmt_status(status
);
6490 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
,
6491 cmd_status_rsp
, &mgmt_err
);
6495 if (test_bit(HCI_AUTH
, &hdev
->flags
))
6496 changed
= !test_and_set_bit(HCI_LINK_SECURITY
,
6499 changed
= test_and_clear_bit(HCI_LINK_SECURITY
,
6502 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
, settings_rsp
,
6506 new_settings(hdev
, match
.sk
);
6512 static void clear_eir(struct hci_request
*req
)
6514 struct hci_dev
*hdev
= req
->hdev
;
6515 struct hci_cp_write_eir cp
;
6517 if (!lmp_ext_inq_capable(hdev
))
6520 memset(hdev
->eir
, 0, sizeof(hdev
->eir
));
6522 memset(&cp
, 0, sizeof(cp
));
6524 hci_req_add(req
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
6527 void mgmt_ssp_enable_complete(struct hci_dev
*hdev
, u8 enable
, u8 status
)
6529 struct cmd_lookup match
= { NULL
, hdev
};
6530 struct hci_request req
;
6531 bool changed
= false;
6534 u8 mgmt_err
= mgmt_status(status
);
6536 if (enable
&& test_and_clear_bit(HCI_SSP_ENABLED
,
6537 &hdev
->dev_flags
)) {
6538 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
6539 new_settings(hdev
, NULL
);
6542 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, cmd_status_rsp
,
6548 changed
= !test_and_set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
6550 changed
= test_and_clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
6552 changed
= test_and_clear_bit(HCI_HS_ENABLED
,
6555 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
6558 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, settings_rsp
, &match
);
6561 new_settings(hdev
, match
.sk
);
6566 hci_req_init(&req
, hdev
);
6568 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
)) {
6569 if (test_bit(HCI_USE_DEBUG_KEYS
, &hdev
->dev_flags
))
6570 hci_req_add(&req
, HCI_OP_WRITE_SSP_DEBUG_MODE
,
6571 sizeof(enable
), &enable
);
6577 hci_req_run(&req
, NULL
);
6580 void mgmt_sc_enable_complete(struct hci_dev
*hdev
, u8 enable
, u8 status
)
6582 struct cmd_lookup match
= { NULL
, hdev
};
6583 bool changed
= false;
6586 u8 mgmt_err
= mgmt_status(status
);
6589 if (test_and_clear_bit(HCI_SC_ENABLED
,
6591 new_settings(hdev
, NULL
);
6592 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
6595 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN
, hdev
,
6596 cmd_status_rsp
, &mgmt_err
);
6601 changed
= !test_and_set_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
);
6603 changed
= test_and_clear_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
);
6604 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
6607 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN
, hdev
,
6608 settings_rsp
, &match
);
6611 new_settings(hdev
, match
.sk
);
6617 static void sk_lookup(struct pending_cmd
*cmd
, void *data
)
6619 struct cmd_lookup
*match
= data
;
6621 if (match
->sk
== NULL
) {
6622 match
->sk
= cmd
->sk
;
6623 sock_hold(match
->sk
);
6627 void mgmt_set_class_of_dev_complete(struct hci_dev
*hdev
, u8
*dev_class
,
6630 struct cmd_lookup match
= { NULL
, hdev
, mgmt_status(status
) };
6632 mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS
, hdev
, sk_lookup
, &match
);
6633 mgmt_pending_foreach(MGMT_OP_ADD_UUID
, hdev
, sk_lookup
, &match
);
6634 mgmt_pending_foreach(MGMT_OP_REMOVE_UUID
, hdev
, sk_lookup
, &match
);
6637 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED
, hdev
, dev_class
, 3,
6644 void mgmt_set_local_name_complete(struct hci_dev
*hdev
, u8
*name
, u8 status
)
6646 struct mgmt_cp_set_local_name ev
;
6647 struct pending_cmd
*cmd
;
6652 memset(&ev
, 0, sizeof(ev
));
6653 memcpy(ev
.name
, name
, HCI_MAX_NAME_LENGTH
);
6654 memcpy(ev
.short_name
, hdev
->short_name
, HCI_MAX_SHORT_NAME_LENGTH
);
6656 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
6658 memcpy(hdev
->dev_name
, name
, sizeof(hdev
->dev_name
));
6660 /* If this is a HCI command related to powering on the
6661 * HCI dev don't send any mgmt signals.
6663 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
))
6667 mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, &ev
, sizeof(ev
),
6668 cmd
? cmd
->sk
: NULL
);
6671 void mgmt_read_local_oob_data_complete(struct hci_dev
*hdev
, u8
*hash192
,
6672 u8
*randomizer192
, u8
*hash256
,
6673 u8
*randomizer256
, u8 status
)
6675 struct pending_cmd
*cmd
;
6677 BT_DBG("%s status %u", hdev
->name
, status
);
6679 cmd
= mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
);
6684 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
6685 mgmt_status(status
));
6687 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
) &&
6688 hash256
&& randomizer256
) {
6689 struct mgmt_rp_read_local_oob_ext_data rp
;
6691 memcpy(rp
.hash192
, hash192
, sizeof(rp
.hash192
));
6692 memcpy(rp
.randomizer192
, randomizer192
,
6693 sizeof(rp
.randomizer192
));
6695 memcpy(rp
.hash256
, hash256
, sizeof(rp
.hash256
));
6696 memcpy(rp
.randomizer256
, randomizer256
,
6697 sizeof(rp
.randomizer256
));
6699 cmd_complete(cmd
->sk
, hdev
->id
,
6700 MGMT_OP_READ_LOCAL_OOB_DATA
, 0,
6703 struct mgmt_rp_read_local_oob_data rp
;
6705 memcpy(rp
.hash
, hash192
, sizeof(rp
.hash
));
6706 memcpy(rp
.randomizer
, randomizer192
,
6707 sizeof(rp
.randomizer
));
6709 cmd_complete(cmd
->sk
, hdev
->id
,
6710 MGMT_OP_READ_LOCAL_OOB_DATA
, 0,
6715 mgmt_pending_remove(cmd
);
6718 void mgmt_device_found(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
6719 u8 addr_type
, u8
*dev_class
, s8 rssi
, u32 flags
,
6720 u8
*eir
, u16 eir_len
, u8
*scan_rsp
, u8 scan_rsp_len
)
6723 struct mgmt_ev_device_found
*ev
= (void *) buf
;
6726 /* Don't send events for a non-kernel initiated discovery. With
6727 * LE one exception is if we have pend_le_reports > 0 in which
6728 * case we're doing passive scanning and want these events.
6730 if (!hci_discovery_active(hdev
)) {
6731 if (link_type
== ACL_LINK
)
6733 if (link_type
== LE_LINK
&& list_empty(&hdev
->pend_le_reports
))
6737 /* Make sure that the buffer is big enough. The 5 extra bytes
6738 * are for the potential CoD field.
6740 if (sizeof(*ev
) + eir_len
+ scan_rsp_len
+ 5 > sizeof(buf
))
6743 memset(buf
, 0, sizeof(buf
));
6745 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
6746 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6748 ev
->flags
= cpu_to_le32(flags
);
6751 memcpy(ev
->eir
, eir
, eir_len
);
6753 if (dev_class
&& !eir_has_data_type(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
))
6754 eir_len
= eir_append_data(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
,
6757 if (scan_rsp_len
> 0)
6758 memcpy(ev
->eir
+ eir_len
, scan_rsp
, scan_rsp_len
);
6760 ev
->eir_len
= cpu_to_le16(eir_len
+ scan_rsp_len
);
6761 ev_size
= sizeof(*ev
) + eir_len
+ scan_rsp_len
;
6763 mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, ev_size
, NULL
);
6766 void mgmt_remote_name(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
6767 u8 addr_type
, s8 rssi
, u8
*name
, u8 name_len
)
6769 struct mgmt_ev_device_found
*ev
;
6770 char buf
[sizeof(*ev
) + HCI_MAX_NAME_LENGTH
+ 2];
6773 ev
= (struct mgmt_ev_device_found
*) buf
;
6775 memset(buf
, 0, sizeof(buf
));
6777 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
6778 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
6781 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
, name
,
6784 ev
->eir_len
= cpu_to_le16(eir_len
);
6786 mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, sizeof(*ev
) + eir_len
, NULL
);
6789 void mgmt_discovering(struct hci_dev
*hdev
, u8 discovering
)
6791 struct mgmt_ev_discovering ev
;
6792 struct pending_cmd
*cmd
;
6794 BT_DBG("%s discovering %u", hdev
->name
, discovering
);
6797 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
6799 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
6802 u8 type
= hdev
->discovery
.type
;
6804 cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, 0, &type
,
6806 mgmt_pending_remove(cmd
);
6809 memset(&ev
, 0, sizeof(ev
));
6810 ev
.type
= hdev
->discovery
.type
;
6811 ev
.discovering
= discovering
;
6813 mgmt_event(MGMT_EV_DISCOVERING
, hdev
, &ev
, sizeof(ev
), NULL
);
6816 static void adv_enable_complete(struct hci_dev
*hdev
, u8 status
)
6818 BT_DBG("%s status %u", hdev
->name
, status
);
6820 /* Clear the advertising mgmt setting if we failed to re-enable it */
6822 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
6823 new_settings(hdev
, NULL
);
6827 void mgmt_reenable_advertising(struct hci_dev
*hdev
)
6829 struct hci_request req
;
6831 if (hci_conn_num(hdev
, LE_LINK
) > 0)
6834 if (!test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
6837 hci_req_init(&req
, hdev
);
6838 enable_advertising(&req
);
6840 /* If this fails we have no option but to let user space know
6841 * that we've disabled advertising.
6843 if (hci_req_run(&req
, adv_enable_complete
) < 0) {
6844 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
6845 new_settings(hdev
, NULL
);