2 BlueZ - Bluetooth protocol stack for Linux
4 Copyright (C) 2010 Nokia Corporation
5 Copyright (C) 2011-2012 Intel Corporation
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth HCI Management interface */
27 #include <linux/kernel.h>
28 #include <linux/uaccess.h>
29 #include <linux/module.h>
30 #include <asm/unaligned.h>
32 #include <net/bluetooth/bluetooth.h>
33 #include <net/bluetooth/hci_core.h>
34 #include <net/bluetooth/mgmt.h>
35 #include <net/bluetooth/smp.h>
40 #define MGMT_VERSION 1
41 #define MGMT_REVISION 0
43 static const u16 mgmt_commands
[] = {
44 MGMT_OP_READ_INDEX_LIST
,
47 MGMT_OP_SET_DISCOVERABLE
,
48 MGMT_OP_SET_CONNECTABLE
,
49 MGMT_OP_SET_FAST_CONNECTABLE
,
51 MGMT_OP_SET_LINK_SECURITY
,
55 MGMT_OP_SET_DEV_CLASS
,
56 MGMT_OP_SET_LOCAL_NAME
,
59 MGMT_OP_LOAD_LINK_KEYS
,
60 MGMT_OP_LOAD_LONG_TERM_KEYS
,
62 MGMT_OP_GET_CONNECTIONS
,
63 MGMT_OP_PIN_CODE_REPLY
,
64 MGMT_OP_PIN_CODE_NEG_REPLY
,
65 MGMT_OP_SET_IO_CAPABILITY
,
67 MGMT_OP_CANCEL_PAIR_DEVICE
,
68 MGMT_OP_UNPAIR_DEVICE
,
69 MGMT_OP_USER_CONFIRM_REPLY
,
70 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
71 MGMT_OP_USER_PASSKEY_REPLY
,
72 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
73 MGMT_OP_READ_LOCAL_OOB_DATA
,
74 MGMT_OP_ADD_REMOTE_OOB_DATA
,
75 MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
76 MGMT_OP_START_DISCOVERY
,
77 MGMT_OP_STOP_DISCOVERY
,
80 MGMT_OP_UNBLOCK_DEVICE
,
83 static const u16 mgmt_events
[] = {
84 MGMT_EV_CONTROLLER_ERROR
,
86 MGMT_EV_INDEX_REMOVED
,
88 MGMT_EV_CLASS_OF_DEV_CHANGED
,
89 MGMT_EV_LOCAL_NAME_CHANGED
,
91 MGMT_EV_NEW_LONG_TERM_KEY
,
92 MGMT_EV_DEVICE_CONNECTED
,
93 MGMT_EV_DEVICE_DISCONNECTED
,
94 MGMT_EV_CONNECT_FAILED
,
95 MGMT_EV_PIN_CODE_REQUEST
,
96 MGMT_EV_USER_CONFIRM_REQUEST
,
97 MGMT_EV_USER_PASSKEY_REQUEST
,
101 MGMT_EV_DEVICE_BLOCKED
,
102 MGMT_EV_DEVICE_UNBLOCKED
,
103 MGMT_EV_DEVICE_UNPAIRED
,
107 * These LE scan and inquiry parameters were chosen according to LE General
108 * Discovery Procedure specification.
110 #define LE_SCAN_TYPE 0x01
111 #define LE_SCAN_WIN 0x12
112 #define LE_SCAN_INT 0x12
113 #define LE_SCAN_TIMEOUT_LE_ONLY 10240 /* TGAP(gen_disc_scan_min) */
114 #define LE_SCAN_TIMEOUT_BREDR_LE 5120 /* TGAP(100)/2 */
116 #define INQUIRY_LEN_BREDR 0x08 /* TGAP(100) */
117 #define INQUIRY_LEN_BREDR_LE 0x04 /* TGAP(100)/2 */
119 #define SERVICE_CACHE_TIMEOUT (5 * 1000)
121 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
122 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
125 struct list_head list
;
133 /* HCI to MGMT error code conversion table */
134 static u8 mgmt_status_table
[] = {
136 MGMT_STATUS_UNKNOWN_COMMAND
, /* Unknown Command */
137 MGMT_STATUS_NOT_CONNECTED
, /* No Connection */
138 MGMT_STATUS_FAILED
, /* Hardware Failure */
139 MGMT_STATUS_CONNECT_FAILED
, /* Page Timeout */
140 MGMT_STATUS_AUTH_FAILED
, /* Authentication Failed */
141 MGMT_STATUS_NOT_PAIRED
, /* PIN or Key Missing */
142 MGMT_STATUS_NO_RESOURCES
, /* Memory Full */
143 MGMT_STATUS_TIMEOUT
, /* Connection Timeout */
144 MGMT_STATUS_NO_RESOURCES
, /* Max Number of Connections */
145 MGMT_STATUS_NO_RESOURCES
, /* Max Number of SCO Connections */
146 MGMT_STATUS_ALREADY_CONNECTED
, /* ACL Connection Exists */
147 MGMT_STATUS_BUSY
, /* Command Disallowed */
148 MGMT_STATUS_NO_RESOURCES
, /* Rejected Limited Resources */
149 MGMT_STATUS_REJECTED
, /* Rejected Security */
150 MGMT_STATUS_REJECTED
, /* Rejected Personal */
151 MGMT_STATUS_TIMEOUT
, /* Host Timeout */
152 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Feature */
153 MGMT_STATUS_INVALID_PARAMS
, /* Invalid Parameters */
154 MGMT_STATUS_DISCONNECTED
, /* OE User Ended Connection */
155 MGMT_STATUS_NO_RESOURCES
, /* OE Low Resources */
156 MGMT_STATUS_DISCONNECTED
, /* OE Power Off */
157 MGMT_STATUS_DISCONNECTED
, /* Connection Terminated */
158 MGMT_STATUS_BUSY
, /* Repeated Attempts */
159 MGMT_STATUS_REJECTED
, /* Pairing Not Allowed */
160 MGMT_STATUS_FAILED
, /* Unknown LMP PDU */
161 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Remote Feature */
162 MGMT_STATUS_REJECTED
, /* SCO Offset Rejected */
163 MGMT_STATUS_REJECTED
, /* SCO Interval Rejected */
164 MGMT_STATUS_REJECTED
, /* Air Mode Rejected */
165 MGMT_STATUS_INVALID_PARAMS
, /* Invalid LMP Parameters */
166 MGMT_STATUS_FAILED
, /* Unspecified Error */
167 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported LMP Parameter Value */
168 MGMT_STATUS_FAILED
, /* Role Change Not Allowed */
169 MGMT_STATUS_TIMEOUT
, /* LMP Response Timeout */
170 MGMT_STATUS_FAILED
, /* LMP Error Transaction Collision */
171 MGMT_STATUS_FAILED
, /* LMP PDU Not Allowed */
172 MGMT_STATUS_REJECTED
, /* Encryption Mode Not Accepted */
173 MGMT_STATUS_FAILED
, /* Unit Link Key Used */
174 MGMT_STATUS_NOT_SUPPORTED
, /* QoS Not Supported */
175 MGMT_STATUS_TIMEOUT
, /* Instant Passed */
176 MGMT_STATUS_NOT_SUPPORTED
, /* Pairing Not Supported */
177 MGMT_STATUS_FAILED
, /* Transaction Collision */
178 MGMT_STATUS_INVALID_PARAMS
, /* Unacceptable Parameter */
179 MGMT_STATUS_REJECTED
, /* QoS Rejected */
180 MGMT_STATUS_NOT_SUPPORTED
, /* Classification Not Supported */
181 MGMT_STATUS_REJECTED
, /* Insufficient Security */
182 MGMT_STATUS_INVALID_PARAMS
, /* Parameter Out Of Range */
183 MGMT_STATUS_BUSY
, /* Role Switch Pending */
184 MGMT_STATUS_FAILED
, /* Slot Violation */
185 MGMT_STATUS_FAILED
, /* Role Switch Failed */
186 MGMT_STATUS_INVALID_PARAMS
, /* EIR Too Large */
187 MGMT_STATUS_NOT_SUPPORTED
, /* Simple Pairing Not Supported */
188 MGMT_STATUS_BUSY
, /* Host Busy Pairing */
189 MGMT_STATUS_REJECTED
, /* Rejected, No Suitable Channel */
190 MGMT_STATUS_BUSY
, /* Controller Busy */
191 MGMT_STATUS_INVALID_PARAMS
, /* Unsuitable Connection Interval */
192 MGMT_STATUS_TIMEOUT
, /* Directed Advertising Timeout */
193 MGMT_STATUS_AUTH_FAILED
, /* Terminated Due to MIC Failure */
194 MGMT_STATUS_CONNECT_FAILED
, /* Connection Establishment Failed */
195 MGMT_STATUS_CONNECT_FAILED
, /* MAC Connection Failed */
198 static u8
mgmt_status(u8 hci_status
)
200 if (hci_status
< ARRAY_SIZE(mgmt_status_table
))
201 return mgmt_status_table
[hci_status
];
203 return MGMT_STATUS_FAILED
;
206 static int cmd_status(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
)
209 struct mgmt_hdr
*hdr
;
210 struct mgmt_ev_cmd_status
*ev
;
213 BT_DBG("sock %p, index %u, cmd %u, status %u", sk
, index
, cmd
, status
);
215 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
), GFP_ATOMIC
);
219 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
221 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_STATUS
);
222 hdr
->index
= cpu_to_le16(index
);
223 hdr
->len
= cpu_to_le16(sizeof(*ev
));
225 ev
= (void *) skb_put(skb
, sizeof(*ev
));
227 put_unaligned_le16(cmd
, &ev
->opcode
);
229 err
= sock_queue_rcv_skb(sk
, skb
);
236 static int cmd_complete(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
,
237 void *rp
, size_t rp_len
)
240 struct mgmt_hdr
*hdr
;
241 struct mgmt_ev_cmd_complete
*ev
;
244 BT_DBG("sock %p", sk
);
246 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
) + rp_len
, GFP_ATOMIC
);
250 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
252 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_COMPLETE
);
253 hdr
->index
= cpu_to_le16(index
);
254 hdr
->len
= cpu_to_le16(sizeof(*ev
) + rp_len
);
256 ev
= (void *) skb_put(skb
, sizeof(*ev
) + rp_len
);
257 put_unaligned_le16(cmd
, &ev
->opcode
);
261 memcpy(ev
->data
, rp
, rp_len
);
263 err
= sock_queue_rcv_skb(sk
, skb
);
270 static int read_version(struct sock
*sk
)
272 struct mgmt_rp_read_version rp
;
274 BT_DBG("sock %p", sk
);
276 rp
.version
= MGMT_VERSION
;
277 put_unaligned_le16(MGMT_REVISION
, &rp
.revision
);
279 return cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_VERSION
, 0, &rp
,
283 static int read_commands(struct sock
*sk
)
285 struct mgmt_rp_read_commands
*rp
;
286 u16 num_commands
= ARRAY_SIZE(mgmt_commands
);
287 u16 num_events
= ARRAY_SIZE(mgmt_events
);
292 BT_DBG("sock %p", sk
);
294 rp_size
= sizeof(*rp
) + ((num_commands
+ num_events
) * sizeof(u16
));
296 rp
= kmalloc(rp_size
, GFP_KERNEL
);
300 put_unaligned_le16(num_commands
, &rp
->num_commands
);
301 put_unaligned_le16(num_events
, &rp
->num_events
);
303 for (i
= 0, opcode
= rp
->opcodes
; i
< num_commands
; i
++, opcode
++)
304 put_unaligned_le16(mgmt_commands
[i
], opcode
);
306 for (i
= 0; i
< num_events
; i
++, opcode
++)
307 put_unaligned_le16(mgmt_events
[i
], opcode
);
309 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_COMMANDS
, 0, rp
,
316 static int read_index_list(struct sock
*sk
)
318 struct mgmt_rp_read_index_list
*rp
;
325 BT_DBG("sock %p", sk
);
327 read_lock(&hci_dev_list_lock
);
330 list_for_each(p
, &hci_dev_list
) {
334 rp_len
= sizeof(*rp
) + (2 * count
);
335 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
337 read_unlock(&hci_dev_list_lock
);
341 put_unaligned_le16(count
, &rp
->num_controllers
);
344 list_for_each_entry(d
, &hci_dev_list
, list
) {
345 if (test_bit(HCI_SETUP
, &d
->dev_flags
))
348 put_unaligned_le16(d
->id
, &rp
->index
[i
++]);
349 BT_DBG("Added hci%u", d
->id
);
352 read_unlock(&hci_dev_list_lock
);
354 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_INDEX_LIST
, 0, rp
,
362 static u32
get_supported_settings(struct hci_dev
*hdev
)
366 settings
|= MGMT_SETTING_POWERED
;
367 settings
|= MGMT_SETTING_CONNECTABLE
;
368 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
369 settings
|= MGMT_SETTING_DISCOVERABLE
;
370 settings
|= MGMT_SETTING_PAIRABLE
;
372 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
)
373 settings
|= MGMT_SETTING_SSP
;
375 if (!(hdev
->features
[4] & LMP_NO_BREDR
)) {
376 settings
|= MGMT_SETTING_BREDR
;
377 settings
|= MGMT_SETTING_LINK_SECURITY
;
381 settings
|= MGMT_SETTING_HS
;
384 if (hdev
->features
[4] & LMP_LE
)
385 settings
|= MGMT_SETTING_LE
;
391 static u32
get_current_settings(struct hci_dev
*hdev
)
395 if (hdev_is_powered(hdev
))
396 settings
|= MGMT_SETTING_POWERED
;
398 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
399 settings
|= MGMT_SETTING_CONNECTABLE
;
401 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
402 settings
|= MGMT_SETTING_DISCOVERABLE
;
404 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
405 settings
|= MGMT_SETTING_PAIRABLE
;
407 if (!(hdev
->features
[4] & LMP_NO_BREDR
))
408 settings
|= MGMT_SETTING_BREDR
;
410 if (hdev
->host_features
[0] & LMP_HOST_LE
)
411 settings
|= MGMT_SETTING_LE
;
413 if (test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
))
414 settings
|= MGMT_SETTING_LINK_SECURITY
;
416 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
417 settings
|= MGMT_SETTING_SSP
;
419 if (test_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
))
420 settings
|= MGMT_SETTING_HS
;
425 #define PNP_INFO_SVCLASS_ID 0x1200
427 static u8 bluetooth_base_uuid
[] = {
428 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80,
429 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
432 static u16
get_uuid16(u8
*uuid128
)
437 for (i
= 0; i
< 12; i
++) {
438 if (bluetooth_base_uuid
[i
] != uuid128
[i
])
442 memcpy(&val
, &uuid128
[12], 4);
444 val
= le32_to_cpu(val
);
451 static void create_eir(struct hci_dev
*hdev
, u8
*data
)
455 u16 uuid16_list
[HCI_MAX_EIR_LENGTH
/ sizeof(u16
)];
456 int i
, truncated
= 0;
457 struct bt_uuid
*uuid
;
460 name_len
= strlen(hdev
->dev_name
);
466 ptr
[1] = EIR_NAME_SHORT
;
468 ptr
[1] = EIR_NAME_COMPLETE
;
470 /* EIR Data length */
471 ptr
[0] = name_len
+ 1;
473 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
475 eir_len
+= (name_len
+ 2);
476 ptr
+= (name_len
+ 2);
479 memset(uuid16_list
, 0, sizeof(uuid16_list
));
481 /* Group all UUID16 types */
482 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
485 uuid16
= get_uuid16(uuid
->uuid
);
492 if (uuid16
== PNP_INFO_SVCLASS_ID
)
495 /* Stop if not enough space to put next UUID */
496 if (eir_len
+ 2 + sizeof(u16
) > HCI_MAX_EIR_LENGTH
) {
501 /* Check for duplicates */
502 for (i
= 0; uuid16_list
[i
] != 0; i
++)
503 if (uuid16_list
[i
] == uuid16
)
506 if (uuid16_list
[i
] == 0) {
507 uuid16_list
[i
] = uuid16
;
508 eir_len
+= sizeof(u16
);
512 if (uuid16_list
[0] != 0) {
516 ptr
[1] = truncated
? EIR_UUID16_SOME
: EIR_UUID16_ALL
;
521 for (i
= 0; uuid16_list
[i
] != 0; i
++) {
522 *ptr
++ = (uuid16_list
[i
] & 0x00ff);
523 *ptr
++ = (uuid16_list
[i
] & 0xff00) >> 8;
526 /* EIR Data length */
527 *length
= (i
* sizeof(u16
)) + 1;
531 static int update_eir(struct hci_dev
*hdev
)
533 struct hci_cp_write_eir cp
;
535 if (!(hdev
->features
[6] & LMP_EXT_INQ
))
538 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
541 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
544 memset(&cp
, 0, sizeof(cp
));
546 create_eir(hdev
, cp
.data
);
548 if (memcmp(cp
.data
, hdev
->eir
, sizeof(cp
.data
)) == 0)
551 memcpy(hdev
->eir
, cp
.data
, sizeof(cp
.data
));
553 return hci_send_cmd(hdev
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
556 static u8
get_service_classes(struct hci_dev
*hdev
)
558 struct bt_uuid
*uuid
;
561 list_for_each_entry(uuid
, &hdev
->uuids
, list
)
562 val
|= uuid
->svc_hint
;
567 static int update_class(struct hci_dev
*hdev
)
571 BT_DBG("%s", hdev
->name
);
573 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
576 cod
[0] = hdev
->minor_class
;
577 cod
[1] = hdev
->major_class
;
578 cod
[2] = get_service_classes(hdev
);
580 if (memcmp(cod
, hdev
->dev_class
, 3) == 0)
583 return hci_send_cmd(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
, sizeof(cod
), cod
);
586 static void service_cache_off(struct work_struct
*work
)
588 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
591 if (!test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
599 hci_dev_unlock(hdev
);
602 static void mgmt_init_hdev(struct hci_dev
*hdev
)
604 if (!test_and_set_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
605 INIT_DELAYED_WORK(&hdev
->service_cache
, service_cache_off
);
607 /* Non-mgmt controlled devices get this bit set
608 * implicitly so that pairing works for them, however
609 * for mgmt we require user-space to explicitly enable
612 clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
615 if (!test_and_set_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
616 schedule_delayed_work(&hdev
->service_cache
,
617 msecs_to_jiffies(SERVICE_CACHE_TIMEOUT
));
620 static int read_controller_info(struct sock
*sk
, u16 index
)
622 struct mgmt_rp_read_info rp
;
623 struct hci_dev
*hdev
;
625 BT_DBG("sock %p hci%u", sk
, index
);
627 hdev
= hci_dev_get(index
);
629 return cmd_status(sk
, index
, MGMT_OP_READ_INFO
,
630 MGMT_STATUS_INVALID_PARAMS
);
634 if (test_and_clear_bit(HCI_PI_MGMT_INIT
, &hci_pi(sk
)->flags
))
635 mgmt_init_hdev(hdev
);
637 memset(&rp
, 0, sizeof(rp
));
639 bacpy(&rp
.bdaddr
, &hdev
->bdaddr
);
641 rp
.version
= hdev
->hci_ver
;
643 put_unaligned_le16(hdev
->manufacturer
, &rp
.manufacturer
);
645 rp
.supported_settings
= cpu_to_le32(get_supported_settings(hdev
));
646 rp
.current_settings
= cpu_to_le32(get_current_settings(hdev
));
648 memcpy(rp
.dev_class
, hdev
->dev_class
, 3);
650 memcpy(rp
.name
, hdev
->dev_name
, sizeof(hdev
->dev_name
));
652 hci_dev_unlock(hdev
);
655 return cmd_complete(sk
, index
, MGMT_OP_READ_INFO
, 0, &rp
, sizeof(rp
));
658 static void mgmt_pending_free(struct pending_cmd
*cmd
)
665 static struct pending_cmd
*mgmt_pending_add(struct sock
*sk
, u16 opcode
,
666 struct hci_dev
*hdev
,
669 struct pending_cmd
*cmd
;
671 cmd
= kmalloc(sizeof(*cmd
), GFP_ATOMIC
);
675 cmd
->opcode
= opcode
;
676 cmd
->index
= hdev
->id
;
678 cmd
->param
= kmalloc(len
, GFP_ATOMIC
);
685 memcpy(cmd
->param
, data
, len
);
690 list_add(&cmd
->list
, &hdev
->mgmt_pending
);
695 static void mgmt_pending_foreach(u16 opcode
, struct hci_dev
*hdev
,
696 void (*cb
)(struct pending_cmd
*cmd
, void *data
),
699 struct list_head
*p
, *n
;
701 list_for_each_safe(p
, n
, &hdev
->mgmt_pending
) {
702 struct pending_cmd
*cmd
;
704 cmd
= list_entry(p
, struct pending_cmd
, list
);
706 if (opcode
> 0 && cmd
->opcode
!= opcode
)
713 static struct pending_cmd
*mgmt_pending_find(u16 opcode
, struct hci_dev
*hdev
)
715 struct pending_cmd
*cmd
;
717 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
718 if (cmd
->opcode
== opcode
)
725 static void mgmt_pending_remove(struct pending_cmd
*cmd
)
727 list_del(&cmd
->list
);
728 mgmt_pending_free(cmd
);
731 static int send_settings_rsp(struct sock
*sk
, u16 opcode
, struct hci_dev
*hdev
)
733 __le32 settings
= cpu_to_le32(get_current_settings(hdev
));
735 return cmd_complete(sk
, hdev
->id
, opcode
, 0, &settings
,
739 static int set_powered(struct sock
*sk
, u16 index
, void *data
, u16 len
)
741 struct mgmt_mode
*cp
= data
;
742 struct hci_dev
*hdev
;
743 struct pending_cmd
*cmd
;
746 BT_DBG("request for hci%u", index
);
748 if (len
!= sizeof(*cp
))
749 return cmd_status(sk
, index
, MGMT_OP_SET_POWERED
,
750 MGMT_STATUS_INVALID_PARAMS
);
752 hdev
= hci_dev_get(index
);
754 return cmd_status(sk
, index
, MGMT_OP_SET_POWERED
,
755 MGMT_STATUS_INVALID_PARAMS
);
759 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
)) {
760 cancel_delayed_work(&hdev
->power_off
);
763 err
= send_settings_rsp(sk
, MGMT_OP_SET_POWERED
, hdev
);
764 mgmt_powered(hdev
, 1);
769 if (!!cp
->val
== hdev_is_powered(hdev
)) {
770 err
= send_settings_rsp(sk
, MGMT_OP_SET_POWERED
, hdev
);
774 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
)) {
775 err
= cmd_status(sk
, index
, MGMT_OP_SET_POWERED
,
780 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
, data
, len
);
787 schedule_work(&hdev
->power_on
);
789 schedule_work(&hdev
->power_off
.work
);
794 hci_dev_unlock(hdev
);
799 static int mgmt_event(u16 event
, struct hci_dev
*hdev
, void *data
,
800 u16 data_len
, struct sock
*skip_sk
)
803 struct mgmt_hdr
*hdr
;
805 skb
= alloc_skb(sizeof(*hdr
) + data_len
, GFP_ATOMIC
);
809 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
810 hdr
->opcode
= cpu_to_le16(event
);
812 hdr
->index
= cpu_to_le16(hdev
->id
);
814 hdr
->index
= cpu_to_le16(MGMT_INDEX_NONE
);
815 hdr
->len
= cpu_to_le16(data_len
);
818 memcpy(skb_put(skb
, data_len
), data
, data_len
);
820 hci_send_to_control(skb
, skip_sk
);
826 static int new_settings(struct hci_dev
*hdev
, struct sock
*skip
)
830 ev
= cpu_to_le32(get_current_settings(hdev
));
832 return mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), skip
);
835 static int set_discoverable(struct sock
*sk
, u16 index
, void *data
, u16 len
)
837 struct mgmt_cp_set_discoverable
*cp
= data
;
838 struct hci_dev
*hdev
;
839 struct pending_cmd
*cmd
;
844 BT_DBG("request for hci%u", index
);
846 if (len
!= sizeof(*cp
))
847 return cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
848 MGMT_STATUS_INVALID_PARAMS
);
850 hdev
= hci_dev_get(index
);
852 return cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
853 MGMT_STATUS_INVALID_PARAMS
);
855 timeout
= get_unaligned_le16(&cp
->timeout
);
859 if (!hdev_is_powered(hdev
) && timeout
> 0) {
860 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
861 MGMT_STATUS_NOT_POWERED
);
865 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
866 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
867 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
872 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
)) {
873 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
,
874 MGMT_STATUS_REJECTED
);
878 if (!hdev_is_powered(hdev
)) {
879 bool changed
= false;
881 if (!!cp
->val
!= test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
)) {
882 change_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
886 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
891 err
= new_settings(hdev
, sk
);
896 if (!!cp
->val
== test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
)) {
897 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
901 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
, data
, len
);
910 scan
|= SCAN_INQUIRY
;
912 cancel_delayed_work(&hdev
->discov_off
);
914 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
916 mgmt_pending_remove(cmd
);
919 hdev
->discov_timeout
= timeout
;
922 hci_dev_unlock(hdev
);
928 static int set_connectable(struct sock
*sk
, u16 index
, void *data
, u16 len
)
930 struct mgmt_mode
*cp
= data
;
931 struct hci_dev
*hdev
;
932 struct pending_cmd
*cmd
;
936 BT_DBG("request for hci%u", index
);
938 if (len
!= sizeof(*cp
))
939 return cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
,
940 MGMT_STATUS_INVALID_PARAMS
);
942 hdev
= hci_dev_get(index
);
944 return cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
,
945 MGMT_STATUS_INVALID_PARAMS
);
949 if (!hdev_is_powered(hdev
)) {
950 bool changed
= false;
952 if (!!cp
->val
!= test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
956 set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
958 clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
959 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
962 err
= send_settings_rsp(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
967 err
= new_settings(hdev
, sk
);
972 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
973 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
974 err
= cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
,
979 if (!!cp
->val
== test_bit(HCI_PSCAN
, &hdev
->flags
)) {
980 err
= send_settings_rsp(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
984 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
, data
, len
);
995 if (test_bit(HCI_ISCAN
, &hdev
->flags
) &&
996 hdev
->discov_timeout
> 0)
997 cancel_delayed_work(&hdev
->discov_off
);
1000 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
1002 mgmt_pending_remove(cmd
);
1005 hci_dev_unlock(hdev
);
1011 static int set_pairable(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1013 struct mgmt_mode
*cp
= data
;
1014 struct hci_dev
*hdev
;
1017 BT_DBG("request for hci%u", index
);
1019 if (len
!= sizeof(*cp
))
1020 return cmd_status(sk
, index
, MGMT_OP_SET_PAIRABLE
,
1021 MGMT_STATUS_INVALID_PARAMS
);
1023 hdev
= hci_dev_get(index
);
1025 return cmd_status(sk
, index
, MGMT_OP_SET_PAIRABLE
,
1026 MGMT_STATUS_INVALID_PARAMS
);
1031 set_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1033 clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1035 err
= send_settings_rsp(sk
, MGMT_OP_SET_PAIRABLE
, hdev
);
1039 err
= new_settings(hdev
, sk
);
1042 hci_dev_unlock(hdev
);
1048 static int set_link_security(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1050 struct mgmt_mode
*cp
= data
;
1051 struct pending_cmd
*cmd
;
1052 struct hci_dev
*hdev
;
1056 BT_DBG("request for hci%u", index
);
1058 if (len
!= sizeof(*cp
))
1059 return cmd_status(sk
, index
, MGMT_OP_SET_LINK_SECURITY
,
1060 MGMT_STATUS_INVALID_PARAMS
);
1062 hdev
= hci_dev_get(index
);
1064 return cmd_status(sk
, index
, MGMT_OP_SET_LINK_SECURITY
,
1065 MGMT_STATUS_INVALID_PARAMS
);
1069 if (!hdev_is_powered(hdev
)) {
1070 bool changed
= false;
1072 if (!!cp
->val
!= test_bit(HCI_LINK_SECURITY
,
1073 &hdev
->dev_flags
)) {
1074 change_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
1078 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1083 err
= new_settings(hdev
, sk
);
1088 if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY
, hdev
)) {
1089 err
= cmd_status(sk
, index
, MGMT_OP_SET_LINK_SECURITY
,
1096 if (test_bit(HCI_AUTH
, &hdev
->flags
) == val
) {
1097 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1101 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
, data
, len
);
1107 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, sizeof(val
), &val
);
1109 mgmt_pending_remove(cmd
);
1114 hci_dev_unlock(hdev
);
1120 static int set_ssp(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1122 struct mgmt_mode
*cp
= data
;
1123 struct pending_cmd
*cmd
;
1124 struct hci_dev
*hdev
;
1128 BT_DBG("request for hci%u", index
);
1130 if (len
!= sizeof(*cp
))
1131 return cmd_status(sk
, index
, MGMT_OP_SET_SSP
,
1132 MGMT_STATUS_INVALID_PARAMS
);
1134 hdev
= hci_dev_get(index
);
1136 return cmd_status(sk
, index
, MGMT_OP_SET_SSP
,
1137 MGMT_STATUS_INVALID_PARAMS
);
1143 if (!hdev_is_powered(hdev
)) {
1144 bool changed
= false;
1146 if (val
!= test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
)) {
1147 change_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
1151 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
1156 err
= new_settings(hdev
, sk
);
1161 if (!(hdev
->features
[6] & LMP_SIMPLE_PAIR
)) {
1162 err
= cmd_status(sk
, index
, MGMT_OP_SET_SSP
,
1163 MGMT_STATUS_NOT_SUPPORTED
);
1167 if (mgmt_pending_find(MGMT_OP_SET_SSP
, hdev
)) {
1168 err
= cmd_status(sk
, index
, MGMT_OP_SET_SSP
, MGMT_STATUS_BUSY
);
1172 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
) == val
) {
1173 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
1177 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SSP
, hdev
, data
, len
);
1183 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, sizeof(val
), &val
);
1185 mgmt_pending_remove(cmd
);
1190 hci_dev_unlock(hdev
);
1196 static int set_hs(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1198 struct mgmt_mode
*cp
= data
;
1199 struct hci_dev
*hdev
;
1202 BT_DBG("request for hci%u", index
);
1204 if (len
!= sizeof(*cp
))
1205 return cmd_status(sk
, index
, MGMT_OP_SET_HS
,
1206 MGMT_STATUS_INVALID_PARAMS
);
1208 hdev
= hci_dev_get(index
);
1210 return cmd_status(sk
, index
, MGMT_OP_SET_HS
,
1211 MGMT_STATUS_INVALID_PARAMS
);
1214 err
= cmd_status(sk
, index
, MGMT_OP_SET_HS
,
1215 MGMT_STATUS_NOT_SUPPORTED
);
1220 set_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1222 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1224 err
= send_settings_rsp(sk
, MGMT_OP_SET_HS
, hdev
);
1231 static int add_uuid(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1233 struct mgmt_cp_add_uuid
*cp
= data
;
1234 struct hci_dev
*hdev
;
1235 struct bt_uuid
*uuid
;
1238 BT_DBG("request for hci%u", index
);
1240 if (len
!= sizeof(*cp
))
1241 return cmd_status(sk
, index
, MGMT_OP_ADD_UUID
,
1242 MGMT_STATUS_INVALID_PARAMS
);
1244 hdev
= hci_dev_get(index
);
1246 return cmd_status(sk
, index
, MGMT_OP_ADD_UUID
,
1247 MGMT_STATUS_INVALID_PARAMS
);
1251 uuid
= kmalloc(sizeof(*uuid
), GFP_ATOMIC
);
1257 memcpy(uuid
->uuid
, cp
->uuid
, 16);
1258 uuid
->svc_hint
= cp
->svc_hint
;
1260 list_add(&uuid
->list
, &hdev
->uuids
);
1262 err
= update_class(hdev
);
1266 err
= update_eir(hdev
);
1270 err
= cmd_complete(sk
, index
, MGMT_OP_ADD_UUID
, 0, NULL
, 0);
1273 hci_dev_unlock(hdev
);
1279 static int remove_uuid(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1281 struct mgmt_cp_remove_uuid
*cp
= data
;
1282 struct list_head
*p
, *n
;
1283 struct hci_dev
*hdev
;
1284 u8 bt_uuid_any
[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
1287 BT_DBG("request for hci%u", index
);
1289 if (len
!= sizeof(*cp
))
1290 return cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
,
1291 MGMT_STATUS_INVALID_PARAMS
);
1293 hdev
= hci_dev_get(index
);
1295 return cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
,
1296 MGMT_STATUS_INVALID_PARAMS
);
1300 if (memcmp(cp
->uuid
, bt_uuid_any
, 16) == 0) {
1301 err
= hci_uuids_clear(hdev
);
1307 list_for_each_safe(p
, n
, &hdev
->uuids
) {
1308 struct bt_uuid
*match
= list_entry(p
, struct bt_uuid
, list
);
1310 if (memcmp(match
->uuid
, cp
->uuid
, 16) != 0)
1313 list_del(&match
->list
);
1318 err
= cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
,
1319 MGMT_STATUS_INVALID_PARAMS
);
1323 err
= update_class(hdev
);
1327 err
= update_eir(hdev
);
1331 err
= cmd_complete(sk
, index
, MGMT_OP_REMOVE_UUID
, 0, NULL
, 0);
1334 hci_dev_unlock(hdev
);
1340 static int set_dev_class(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1342 struct hci_dev
*hdev
;
1343 struct mgmt_cp_set_dev_class
*cp
= data
;
1346 BT_DBG("request for hci%u", index
);
1348 if (len
!= sizeof(*cp
))
1349 return cmd_status(sk
, index
, MGMT_OP_SET_DEV_CLASS
,
1350 MGMT_STATUS_INVALID_PARAMS
);
1352 hdev
= hci_dev_get(index
);
1354 return cmd_status(sk
, index
, MGMT_OP_SET_DEV_CLASS
,
1355 MGMT_STATUS_INVALID_PARAMS
);
1359 if (!hdev_is_powered(hdev
)) {
1360 err
= cmd_status(sk
, index
, MGMT_OP_SET_DEV_CLASS
,
1361 MGMT_STATUS_NOT_POWERED
);
1365 hdev
->major_class
= cp
->major
;
1366 hdev
->minor_class
= cp
->minor
;
1368 if (test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
1369 hci_dev_unlock(hdev
);
1370 cancel_delayed_work_sync(&hdev
->service_cache
);
1375 err
= update_class(hdev
);
1378 err
= cmd_complete(sk
, index
, MGMT_OP_SET_DEV_CLASS
, 0,
1382 hci_dev_unlock(hdev
);
1388 static int load_link_keys(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1390 struct hci_dev
*hdev
;
1391 struct mgmt_cp_load_link_keys
*cp
= data
;
1392 u16 key_count
, expected_len
;
1395 if (len
< sizeof(*cp
))
1396 return cmd_status(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
,
1397 MGMT_STATUS_INVALID_PARAMS
);
1399 key_count
= get_unaligned_le16(&cp
->key_count
);
1401 expected_len
= sizeof(*cp
) + key_count
*
1402 sizeof(struct mgmt_link_key_info
);
1403 if (expected_len
!= len
) {
1404 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
1406 return cmd_status(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
,
1407 MGMT_STATUS_INVALID_PARAMS
);
1410 hdev
= hci_dev_get(index
);
1412 return cmd_status(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
,
1413 MGMT_STATUS_INVALID_PARAMS
);
1415 BT_DBG("hci%u debug_keys %u key_count %u", index
, cp
->debug_keys
,
1420 hci_link_keys_clear(hdev
);
1422 set_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
);
1425 set_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
1427 clear_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
1429 for (i
= 0; i
< key_count
; i
++) {
1430 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
1432 hci_add_link_key(hdev
, NULL
, 0, &key
->addr
.bdaddr
, key
->val
,
1433 key
->type
, key
->pin_len
);
1436 cmd_complete(sk
, index
, MGMT_OP_LOAD_LINK_KEYS
, 0, NULL
, 0);
1438 hci_dev_unlock(hdev
);
1444 static int device_unpaired(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
1445 u8 addr_type
, struct sock
*skip_sk
)
1447 struct mgmt_ev_device_unpaired ev
;
1449 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
1450 ev
.addr
.type
= addr_type
;
1452 return mgmt_event(MGMT_EV_DEVICE_UNPAIRED
, hdev
, &ev
, sizeof(ev
),
1456 static int unpair_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1458 struct hci_dev
*hdev
;
1459 struct mgmt_cp_unpair_device
*cp
= data
;
1460 struct mgmt_rp_unpair_device rp
;
1461 struct hci_cp_disconnect dc
;
1462 struct pending_cmd
*cmd
;
1463 struct hci_conn
*conn
;
1467 if (len
!= sizeof(*cp
))
1468 return cmd_status(sk
, index
, MGMT_OP_UNPAIR_DEVICE
,
1469 MGMT_STATUS_INVALID_PARAMS
);
1471 hdev
= hci_dev_get(index
);
1473 return cmd_status(sk
, index
, MGMT_OP_UNPAIR_DEVICE
,
1474 MGMT_STATUS_INVALID_PARAMS
);
1478 memset(&rp
, 0, sizeof(rp
));
1479 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
1480 rp
.addr
.type
= cp
->addr
.type
;
1482 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1483 err
= hci_remove_link_key(hdev
, &cp
->addr
.bdaddr
);
1485 err
= hci_remove_ltk(hdev
, &cp
->addr
.bdaddr
);
1488 status
= MGMT_STATUS_NOT_PAIRED
;
1492 if (!test_bit(HCI_UP
, &hdev
->flags
) || !cp
->disconnect
) {
1493 err
= cmd_complete(sk
, index
, MGMT_OP_UNPAIR_DEVICE
, status
,
1495 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, sk
);
1499 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1500 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
1503 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
,
1507 err
= cmd_complete(sk
, index
, MGMT_OP_UNPAIR_DEVICE
, status
,
1509 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, sk
);
1513 cmd
= mgmt_pending_add(sk
, MGMT_OP_UNPAIR_DEVICE
, hdev
, cp
,
1520 put_unaligned_le16(conn
->handle
, &dc
.handle
);
1521 dc
.reason
= 0x13; /* Remote User Terminated Connection */
1522 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
1524 mgmt_pending_remove(cmd
);
1528 err
= cmd_complete(sk
, index
, MGMT_OP_UNPAIR_DEVICE
, status
,
1530 hci_dev_unlock(hdev
);
1536 static int disconnect(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1538 struct hci_dev
*hdev
;
1539 struct mgmt_cp_disconnect
*cp
= data
;
1540 struct hci_cp_disconnect dc
;
1541 struct pending_cmd
*cmd
;
1542 struct hci_conn
*conn
;
1547 if (len
!= sizeof(*cp
))
1548 return cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1549 MGMT_STATUS_INVALID_PARAMS
);
1551 hdev
= hci_dev_get(index
);
1553 return cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1554 MGMT_STATUS_INVALID_PARAMS
);
1558 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1559 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1560 MGMT_STATUS_NOT_POWERED
);
1564 if (mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
)) {
1565 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1570 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1571 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
);
1573 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->addr
.bdaddr
);
1576 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
,
1577 MGMT_STATUS_NOT_CONNECTED
);
1581 cmd
= mgmt_pending_add(sk
, MGMT_OP_DISCONNECT
, hdev
, data
, len
);
1587 put_unaligned_le16(conn
->handle
, &dc
.handle
);
1588 dc
.reason
= 0x13; /* Remote User Terminated Connection */
1590 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
1592 mgmt_pending_remove(cmd
);
1595 hci_dev_unlock(hdev
);
1601 static u8
link_to_mgmt(u8 link_type
, u8 addr_type
)
1603 switch (link_type
) {
1605 switch (addr_type
) {
1606 case ADDR_LE_DEV_PUBLIC
:
1607 return MGMT_ADDR_LE_PUBLIC
;
1608 case ADDR_LE_DEV_RANDOM
:
1609 return MGMT_ADDR_LE_RANDOM
;
1611 return MGMT_ADDR_INVALID
;
1614 return MGMT_ADDR_BREDR
;
1616 return MGMT_ADDR_INVALID
;
1620 static int get_connections(struct sock
*sk
, u16 index
)
1622 struct mgmt_rp_get_connections
*rp
;
1623 struct hci_dev
*hdev
;
1631 hdev
= hci_dev_get(index
);
1633 return cmd_status(sk
, index
, MGMT_OP_GET_CONNECTIONS
,
1634 MGMT_STATUS_INVALID_PARAMS
);
1639 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
1640 if (test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
1644 rp_len
= sizeof(*rp
) + (count
* sizeof(struct mgmt_addr_info
));
1645 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
1651 put_unaligned_le16(count
, &rp
->conn_count
);
1654 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
1655 if (!test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
1657 bacpy(&rp
->addr
[i
].bdaddr
, &c
->dst
);
1658 rp
->addr
[i
].type
= link_to_mgmt(c
->type
, c
->dst_type
);
1659 if (rp
->addr
[i
].type
== MGMT_ADDR_INVALID
)
1664 /* Recalculate length in case of filtered SCO connections, etc */
1665 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
1667 err
= cmd_complete(sk
, index
, MGMT_OP_GET_CONNECTIONS
, 0, rp
, rp_len
);
1671 hci_dev_unlock(hdev
);
1676 static int send_pin_code_neg_reply(struct sock
*sk
, u16 index
,
1677 struct hci_dev
*hdev
, struct mgmt_cp_pin_code_neg_reply
*cp
)
1679 struct pending_cmd
*cmd
;
1682 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
, cp
,
1687 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
1688 sizeof(cp
->addr
.bdaddr
), &cp
->addr
.bdaddr
);
1690 mgmt_pending_remove(cmd
);
1695 static int pin_code_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1697 struct hci_dev
*hdev
;
1698 struct hci_conn
*conn
;
1699 struct mgmt_cp_pin_code_reply
*cp
= data
;
1700 struct hci_cp_pin_code_reply reply
;
1701 struct pending_cmd
*cmd
;
1706 if (len
!= sizeof(*cp
))
1707 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1708 MGMT_STATUS_INVALID_PARAMS
);
1710 hdev
= hci_dev_get(index
);
1712 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1713 MGMT_STATUS_INVALID_PARAMS
);
1717 if (!hdev_is_powered(hdev
)) {
1718 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1719 MGMT_STATUS_NOT_POWERED
);
1723 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
);
1725 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1726 MGMT_STATUS_NOT_CONNECTED
);
1730 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
&& cp
->pin_len
!= 16) {
1731 struct mgmt_cp_pin_code_neg_reply ncp
;
1733 memcpy(&ncp
.addr
, &cp
->addr
, sizeof(ncp
.addr
));
1735 BT_ERR("PIN code is not 16 bytes long");
1737 err
= send_pin_code_neg_reply(sk
, index
, hdev
, &ncp
);
1739 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1740 MGMT_STATUS_INVALID_PARAMS
);
1745 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_REPLY
, hdev
, data
,
1752 bacpy(&reply
.bdaddr
, &cp
->addr
.bdaddr
);
1753 reply
.pin_len
= cp
->pin_len
;
1754 memcpy(reply
.pin_code
, cp
->pin_code
, sizeof(reply
.pin_code
));
1756 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_REPLY
, sizeof(reply
), &reply
);
1758 mgmt_pending_remove(cmd
);
1761 hci_dev_unlock(hdev
);
1767 static int pin_code_neg_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1769 struct hci_dev
*hdev
;
1770 struct mgmt_cp_pin_code_neg_reply
*cp
= data
;
1775 if (len
!= sizeof(*cp
))
1776 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1777 MGMT_STATUS_INVALID_PARAMS
);
1779 hdev
= hci_dev_get(index
);
1781 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1782 MGMT_STATUS_INVALID_PARAMS
);
1786 if (!hdev_is_powered(hdev
)) {
1787 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1788 MGMT_STATUS_NOT_POWERED
);
1792 err
= send_pin_code_neg_reply(sk
, index
, hdev
, cp
);
1795 hci_dev_unlock(hdev
);
1801 static int set_io_capability(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1803 struct hci_dev
*hdev
;
1804 struct mgmt_cp_set_io_capability
*cp
= data
;
1808 if (len
!= sizeof(*cp
))
1809 return cmd_status(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
,
1810 MGMT_STATUS_INVALID_PARAMS
);
1812 hdev
= hci_dev_get(index
);
1814 return cmd_status(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
,
1815 MGMT_STATUS_INVALID_PARAMS
);
1819 hdev
->io_capability
= cp
->io_capability
;
1821 BT_DBG("%s IO capability set to 0x%02x", hdev
->name
,
1822 hdev
->io_capability
);
1824 hci_dev_unlock(hdev
);
1827 return cmd_complete(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
, 0, NULL
, 0);
1830 static inline struct pending_cmd
*find_pairing(struct hci_conn
*conn
)
1832 struct hci_dev
*hdev
= conn
->hdev
;
1833 struct pending_cmd
*cmd
;
1835 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
1836 if (cmd
->opcode
!= MGMT_OP_PAIR_DEVICE
)
1839 if (cmd
->user_data
!= conn
)
1848 static void pairing_complete(struct pending_cmd
*cmd
, u8 status
)
1850 struct mgmt_rp_pair_device rp
;
1851 struct hci_conn
*conn
= cmd
->user_data
;
1853 bacpy(&rp
.addr
.bdaddr
, &conn
->dst
);
1854 rp
.addr
.type
= link_to_mgmt(conn
->type
, conn
->dst_type
);
1856 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_PAIR_DEVICE
, status
,
1859 /* So we don't get further callbacks for this connection */
1860 conn
->connect_cfm_cb
= NULL
;
1861 conn
->security_cfm_cb
= NULL
;
1862 conn
->disconn_cfm_cb
= NULL
;
1866 mgmt_pending_remove(cmd
);
1869 static void pairing_complete_cb(struct hci_conn
*conn
, u8 status
)
1871 struct pending_cmd
*cmd
;
1873 BT_DBG("status %u", status
);
1875 cmd
= find_pairing(conn
);
1877 BT_DBG("Unable to find a pending command");
1879 pairing_complete(cmd
, mgmt_status(status
));
1882 static int pair_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
1884 struct hci_dev
*hdev
;
1885 struct mgmt_cp_pair_device
*cp
= data
;
1886 struct mgmt_rp_pair_device rp
;
1887 struct pending_cmd
*cmd
;
1888 u8 sec_level
, auth_type
;
1889 struct hci_conn
*conn
;
1894 if (len
!= sizeof(*cp
))
1895 return cmd_status(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1896 MGMT_STATUS_INVALID_PARAMS
);
1898 hdev
= hci_dev_get(index
);
1900 return cmd_status(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1901 MGMT_STATUS_INVALID_PARAMS
);
1905 sec_level
= BT_SECURITY_MEDIUM
;
1906 if (cp
->io_cap
== 0x03)
1907 auth_type
= HCI_AT_DEDICATED_BONDING
;
1909 auth_type
= HCI_AT_DEDICATED_BONDING_MITM
;
1911 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1912 conn
= hci_connect(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
, sec_level
,
1915 conn
= hci_connect(hdev
, LE_LINK
, &cp
->addr
.bdaddr
, sec_level
,
1918 memset(&rp
, 0, sizeof(rp
));
1919 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
1920 rp
.addr
.type
= cp
->addr
.type
;
1923 err
= cmd_complete(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1924 MGMT_STATUS_CONNECT_FAILED
,
1929 if (conn
->connect_cfm_cb
) {
1931 err
= cmd_complete(sk
, index
, MGMT_OP_PAIR_DEVICE
,
1932 MGMT_STATUS_BUSY
, &rp
, sizeof(rp
));
1936 cmd
= mgmt_pending_add(sk
, MGMT_OP_PAIR_DEVICE
, hdev
, data
, len
);
1943 /* For LE, just connecting isn't a proof that the pairing finished */
1944 if (cp
->addr
.type
== MGMT_ADDR_BREDR
)
1945 conn
->connect_cfm_cb
= pairing_complete_cb
;
1947 conn
->security_cfm_cb
= pairing_complete_cb
;
1948 conn
->disconn_cfm_cb
= pairing_complete_cb
;
1949 conn
->io_capability
= cp
->io_cap
;
1950 cmd
->user_data
= conn
;
1952 if (conn
->state
== BT_CONNECTED
&&
1953 hci_conn_security(conn
, sec_level
, auth_type
))
1954 pairing_complete(cmd
, 0);
1959 hci_dev_unlock(hdev
);
1965 static int cancel_pair_device(struct sock
*sk
, u16 index
,
1966 unsigned char *data
, u16 len
)
1968 struct mgmt_addr_info
*addr
= (void *) data
;
1969 struct hci_dev
*hdev
;
1970 struct pending_cmd
*cmd
;
1971 struct hci_conn
*conn
;
1976 if (len
!= sizeof(*addr
))
1977 return cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1978 MGMT_STATUS_INVALID_PARAMS
);
1980 hdev
= hci_dev_get(index
);
1982 return cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1983 MGMT_STATUS_INVALID_PARAMS
);
1987 cmd
= mgmt_pending_find(MGMT_OP_PAIR_DEVICE
, hdev
);
1989 err
= cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1990 MGMT_STATUS_INVALID_PARAMS
);
1994 conn
= cmd
->user_data
;
1996 if (bacmp(&addr
->bdaddr
, &conn
->dst
) != 0) {
1997 err
= cmd_status(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
,
1998 MGMT_STATUS_INVALID_PARAMS
);
2002 pairing_complete(cmd
, MGMT_STATUS_CANCELLED
);
2004 err
= cmd_complete(sk
, index
, MGMT_OP_CANCEL_PAIR_DEVICE
, 0, addr
,
2007 hci_dev_unlock(hdev
);
2013 static int user_pairing_resp(struct sock
*sk
, u16 index
, bdaddr_t
*bdaddr
,
2014 u8 type
, u16 mgmt_op
, u16 hci_op
,
2017 struct pending_cmd
*cmd
;
2018 struct hci_dev
*hdev
;
2019 struct hci_conn
*conn
;
2022 hdev
= hci_dev_get(index
);
2024 return cmd_status(sk
, index
, mgmt_op
,
2025 MGMT_STATUS_INVALID_PARAMS
);
2029 if (!hdev_is_powered(hdev
)) {
2030 err
= cmd_status(sk
, index
, mgmt_op
, MGMT_STATUS_NOT_POWERED
);
2034 if (type
== MGMT_ADDR_BREDR
)
2035 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, bdaddr
);
2037 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, bdaddr
);
2040 err
= cmd_status(sk
, index
, mgmt_op
,
2041 MGMT_STATUS_NOT_CONNECTED
);
2045 if (type
== MGMT_ADDR_LE_PUBLIC
|| type
== MGMT_ADDR_LE_RANDOM
) {
2046 /* Continue with pairing via SMP */
2047 err
= smp_user_confirm_reply(conn
, mgmt_op
, passkey
);
2050 err
= cmd_status(sk
, index
, mgmt_op
,
2051 MGMT_STATUS_SUCCESS
);
2053 err
= cmd_status(sk
, index
, mgmt_op
,
2054 MGMT_STATUS_FAILED
);
2059 cmd
= mgmt_pending_add(sk
, mgmt_op
, hdev
, bdaddr
, sizeof(*bdaddr
));
2065 /* Continue with pairing via HCI */
2066 if (hci_op
== HCI_OP_USER_PASSKEY_REPLY
) {
2067 struct hci_cp_user_passkey_reply cp
;
2069 bacpy(&cp
.bdaddr
, bdaddr
);
2070 cp
.passkey
= passkey
;
2071 err
= hci_send_cmd(hdev
, hci_op
, sizeof(cp
), &cp
);
2073 err
= hci_send_cmd(hdev
, hci_op
, sizeof(*bdaddr
), bdaddr
);
2076 mgmt_pending_remove(cmd
);
2079 hci_dev_unlock(hdev
);
2085 static int user_confirm_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2087 struct mgmt_cp_user_confirm_reply
*cp
= data
;
2091 if (len
!= sizeof(*cp
))
2092 return cmd_status(sk
, index
, MGMT_OP_USER_CONFIRM_REPLY
,
2093 MGMT_STATUS_INVALID_PARAMS
);
2095 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
2096 MGMT_OP_USER_CONFIRM_REPLY
,
2097 HCI_OP_USER_CONFIRM_REPLY
, 0);
2100 static int user_confirm_neg_reply(struct sock
*sk
, u16 index
, void *data
,
2103 struct mgmt_cp_user_confirm_neg_reply
*cp
= data
;
2107 if (len
!= sizeof(*cp
))
2108 return cmd_status(sk
, index
, MGMT_OP_USER_CONFIRM_NEG_REPLY
,
2109 MGMT_STATUS_INVALID_PARAMS
);
2111 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
2112 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
2113 HCI_OP_USER_CONFIRM_NEG_REPLY
, 0);
2116 static int user_passkey_reply(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2118 struct mgmt_cp_user_passkey_reply
*cp
= data
;
2122 if (len
!= sizeof(*cp
))
2123 return cmd_status(sk
, index
, MGMT_OP_USER_PASSKEY_REPLY
,
2126 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
2127 MGMT_OP_USER_PASSKEY_REPLY
,
2128 HCI_OP_USER_PASSKEY_REPLY
,
2132 static int user_passkey_neg_reply(struct sock
*sk
, u16 index
, void *data
,
2135 struct mgmt_cp_user_passkey_neg_reply
*cp
= data
;
2139 if (len
!= sizeof(*cp
))
2140 return cmd_status(sk
, index
, MGMT_OP_USER_PASSKEY_NEG_REPLY
,
2143 return user_pairing_resp(sk
, index
, &cp
->addr
.bdaddr
, cp
->addr
.type
,
2144 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
2145 HCI_OP_USER_PASSKEY_NEG_REPLY
, 0);
2148 static int set_local_name(struct sock
*sk
, u16 index
, void *data
,
2151 struct mgmt_cp_set_local_name
*mgmt_cp
= data
;
2152 struct hci_cp_write_local_name hci_cp
;
2153 struct hci_dev
*hdev
;
2154 struct pending_cmd
*cmd
;
2159 if (len
!= sizeof(*mgmt_cp
))
2160 return cmd_status(sk
, index
, MGMT_OP_SET_LOCAL_NAME
,
2161 MGMT_STATUS_INVALID_PARAMS
);
2163 hdev
= hci_dev_get(index
);
2165 return cmd_status(sk
, index
, MGMT_OP_SET_LOCAL_NAME
,
2166 MGMT_STATUS_INVALID_PARAMS
);
2170 if (!hdev_is_powered(hdev
)) {
2171 err
= cmd_status(sk
, index
, MGMT_OP_SET_LOCAL_NAME
,
2172 MGMT_STATUS_NOT_POWERED
);
2176 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LOCAL_NAME
, hdev
, data
,
2183 memcpy(hci_cp
.name
, mgmt_cp
->name
, sizeof(hci_cp
.name
));
2184 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_LOCAL_NAME
, sizeof(hci_cp
),
2187 mgmt_pending_remove(cmd
);
2190 hci_dev_unlock(hdev
);
2196 static int read_local_oob_data(struct sock
*sk
, u16 index
)
2198 struct hci_dev
*hdev
;
2199 struct pending_cmd
*cmd
;
2202 BT_DBG("hci%u", index
);
2204 hdev
= hci_dev_get(index
);
2206 return cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2207 MGMT_STATUS_INVALID_PARAMS
);
2211 if (!hdev_is_powered(hdev
)) {
2212 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2213 MGMT_STATUS_NOT_POWERED
);
2217 if (!(hdev
->features
[6] & LMP_SIMPLE_PAIR
)) {
2218 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2219 MGMT_STATUS_NOT_SUPPORTED
);
2223 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
)) {
2224 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2229 cmd
= mgmt_pending_add(sk
, MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
, NULL
, 0);
2235 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_DATA
, 0, NULL
);
2237 mgmt_pending_remove(cmd
);
2240 hci_dev_unlock(hdev
);
2246 static int add_remote_oob_data(struct sock
*sk
, u16 index
, void *data
,
2249 struct hci_dev
*hdev
;
2250 struct mgmt_cp_add_remote_oob_data
*cp
= data
;
2254 BT_DBG("hci%u ", index
);
2256 if (len
!= sizeof(*cp
))
2257 return cmd_status(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
2258 MGMT_STATUS_INVALID_PARAMS
);
2260 hdev
= hci_dev_get(index
);
2262 return cmd_complete(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
2263 MGMT_STATUS_INVALID_PARAMS
,
2264 &cp
->addr
, sizeof(cp
->addr
));
2268 err
= hci_add_remote_oob_data(hdev
, &cp
->addr
.bdaddr
, cp
->hash
,
2271 status
= MGMT_STATUS_FAILED
;
2275 err
= cmd_complete(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
, status
,
2276 &cp
->addr
, sizeof(cp
->addr
));
2278 hci_dev_unlock(hdev
);
2284 static int remove_remote_oob_data(struct sock
*sk
, u16 index
,
2285 void *data
, u16 len
)
2287 struct hci_dev
*hdev
;
2288 struct mgmt_cp_remove_remote_oob_data
*cp
= data
;
2292 BT_DBG("hci%u ", index
);
2294 if (len
!= sizeof(*cp
))
2295 return cmd_status(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
2296 MGMT_STATUS_INVALID_PARAMS
);
2298 hdev
= hci_dev_get(index
);
2300 return cmd_complete(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
2301 MGMT_STATUS_INVALID_PARAMS
,
2302 &cp
->addr
, sizeof(cp
->addr
));
2306 err
= hci_remove_remote_oob_data(hdev
, &cp
->addr
.bdaddr
);
2308 status
= MGMT_STATUS_INVALID_PARAMS
;
2312 err
= cmd_complete(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
, status
,
2313 &cp
->addr
, sizeof(cp
->addr
));
2315 hci_dev_unlock(hdev
);
2321 static int discovery(struct hci_dev
*hdev
)
2325 if (lmp_host_le_capable(hdev
)) {
2326 if (lmp_bredr_capable(hdev
)) {
2327 err
= hci_le_scan(hdev
, LE_SCAN_TYPE
,
2328 LE_SCAN_INT
, LE_SCAN_WIN
,
2329 LE_SCAN_TIMEOUT_BREDR_LE
);
2331 hdev
->discovery
.type
= DISCOV_TYPE_LE
;
2332 err
= hci_le_scan(hdev
, LE_SCAN_TYPE
,
2333 LE_SCAN_INT
, LE_SCAN_WIN
,
2334 LE_SCAN_TIMEOUT_LE_ONLY
);
2337 hdev
->discovery
.type
= DISCOV_TYPE_BREDR
;
2338 err
= hci_do_inquiry(hdev
, INQUIRY_LEN_BREDR
);
2344 int mgmt_interleaved_discovery(struct hci_dev
*hdev
)
2348 BT_DBG("%s", hdev
->name
);
2352 err
= hci_do_inquiry(hdev
, INQUIRY_LEN_BREDR_LE
);
2354 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
2356 hci_dev_unlock(hdev
);
2361 static int start_discovery(struct sock
*sk
, u16 index
,
2362 void *data
, u16 len
)
2364 struct mgmt_cp_start_discovery
*cp
= data
;
2365 struct pending_cmd
*cmd
;
2366 struct hci_dev
*hdev
;
2369 BT_DBG("hci%u", index
);
2371 if (len
!= sizeof(*cp
))
2372 return cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2373 MGMT_STATUS_INVALID_PARAMS
);
2375 hdev
= hci_dev_get(index
);
2377 return cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2378 MGMT_STATUS_INVALID_PARAMS
);
2382 if (!hdev_is_powered(hdev
)) {
2383 err
= cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2384 MGMT_STATUS_NOT_POWERED
);
2388 if (hdev
->discovery
.state
!= DISCOVERY_STOPPED
) {
2389 err
= cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
,
2394 cmd
= mgmt_pending_add(sk
, MGMT_OP_START_DISCOVERY
, hdev
, NULL
, 0);
2400 hdev
->discovery
.type
= cp
->type
;
2402 switch (hdev
->discovery
.type
) {
2403 case DISCOV_TYPE_BREDR
:
2404 err
= hci_do_inquiry(hdev
, INQUIRY_LEN_BREDR
);
2407 case DISCOV_TYPE_LE
:
2408 err
= hci_le_scan(hdev
, LE_SCAN_TYPE
, LE_SCAN_INT
,
2409 LE_SCAN_WIN
, LE_SCAN_TIMEOUT_LE_ONLY
);
2412 case DISCOV_TYPE_INTERLEAVED
:
2413 err
= discovery(hdev
);
2421 mgmt_pending_remove(cmd
);
2423 hci_discovery_set_state(hdev
, DISCOVERY_STARTING
);
2426 hci_dev_unlock(hdev
);
2432 static int stop_discovery(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2434 struct mgmt_cp_stop_discovery
*mgmt_cp
= data
;
2435 struct hci_dev
*hdev
;
2436 struct pending_cmd
*cmd
;
2437 struct hci_cp_remote_name_req_cancel cp
;
2438 struct inquiry_entry
*e
;
2441 BT_DBG("hci%u", index
);
2443 if (len
!= sizeof(*mgmt_cp
))
2444 return cmd_status(sk
, index
, MGMT_OP_STOP_DISCOVERY
,
2445 MGMT_STATUS_INVALID_PARAMS
);
2447 hdev
= hci_dev_get(index
);
2449 return cmd_status(sk
, index
, MGMT_OP_STOP_DISCOVERY
,
2450 MGMT_STATUS_INVALID_PARAMS
);
2454 if (!hci_discovery_active(hdev
)) {
2455 err
= cmd_complete(sk
, index
, MGMT_OP_STOP_DISCOVERY
,
2456 MGMT_STATUS_REJECTED
,
2457 &mgmt_cp
->type
, sizeof(mgmt_cp
->type
));
2461 if (hdev
->discovery
.type
!= mgmt_cp
->type
) {
2462 err
= cmd_complete(sk
, index
, MGMT_OP_STOP_DISCOVERY
,
2463 MGMT_STATUS_INVALID_PARAMS
,
2464 &mgmt_cp
->type
, sizeof(mgmt_cp
->type
));
2468 cmd
= mgmt_pending_add(sk
, MGMT_OP_STOP_DISCOVERY
, hdev
, NULL
, 0);
2474 if (hdev
->discovery
.state
== DISCOVERY_FINDING
) {
2475 err
= hci_cancel_inquiry(hdev
);
2477 mgmt_pending_remove(cmd
);
2479 hci_discovery_set_state(hdev
, DISCOVERY_STOPPING
);
2483 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_PENDING
);
2485 mgmt_pending_remove(cmd
);
2486 err
= cmd_complete(sk
, index
, MGMT_OP_STOP_DISCOVERY
, 0,
2487 &mgmt_cp
->type
, sizeof(mgmt_cp
->type
));
2488 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
2492 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
2493 err
= hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ_CANCEL
,
2496 mgmt_pending_remove(cmd
);
2498 hci_discovery_set_state(hdev
, DISCOVERY_STOPPING
);
2501 hci_dev_unlock(hdev
);
2507 static int confirm_name(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2509 struct mgmt_cp_confirm_name
*cp
= data
;
2510 struct inquiry_entry
*e
;
2511 struct hci_dev
*hdev
;
2514 BT_DBG("hci%u", index
);
2516 if (len
!= sizeof(*cp
))
2517 return cmd_status(sk
, index
, MGMT_OP_CONFIRM_NAME
,
2518 MGMT_STATUS_INVALID_PARAMS
);
2520 hdev
= hci_dev_get(index
);
2522 return cmd_status(sk
, index
, MGMT_OP_CONFIRM_NAME
,
2523 MGMT_STATUS_INVALID_PARAMS
);
2527 if (!hci_discovery_active(hdev
)) {
2528 err
= cmd_status(sk
, index
, MGMT_OP_CONFIRM_NAME
,
2529 MGMT_STATUS_FAILED
);
2533 e
= hci_inquiry_cache_lookup_unknown(hdev
, &cp
->addr
.bdaddr
);
2535 err
= cmd_status(sk
, index
, MGMT_OP_CONFIRM_NAME
,
2536 MGMT_STATUS_INVALID_PARAMS
);
2540 if (cp
->name_known
) {
2541 e
->name_state
= NAME_KNOWN
;
2544 e
->name_state
= NAME_NEEDED
;
2545 hci_inquiry_cache_update_resolve(hdev
, e
);
2551 hci_dev_unlock(hdev
);
2556 static int block_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2558 struct hci_dev
*hdev
;
2559 struct mgmt_cp_block_device
*cp
= data
;
2563 BT_DBG("hci%u", index
);
2565 if (len
!= sizeof(*cp
))
2566 return cmd_status(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
2567 MGMT_STATUS_INVALID_PARAMS
);
2569 hdev
= hci_dev_get(index
);
2571 return cmd_complete(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
2572 MGMT_STATUS_INVALID_PARAMS
,
2573 &cp
->addr
, sizeof(cp
->addr
));
2577 err
= hci_blacklist_add(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
2579 status
= MGMT_STATUS_FAILED
;
2583 err
= cmd_complete(sk
, index
, MGMT_OP_BLOCK_DEVICE
, status
,
2584 &cp
->addr
, sizeof(cp
->addr
));
2586 hci_dev_unlock(hdev
);
2592 static int unblock_device(struct sock
*sk
, u16 index
, void *data
, u16 len
)
2594 struct hci_dev
*hdev
;
2595 struct mgmt_cp_unblock_device
*cp
= data
;
2599 BT_DBG("hci%u", index
);
2601 if (len
!= sizeof(*cp
))
2602 return cmd_status(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
2603 MGMT_STATUS_INVALID_PARAMS
);
2605 hdev
= hci_dev_get(index
);
2607 return cmd_complete(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
2608 MGMT_STATUS_INVALID_PARAMS
,
2609 &cp
->addr
, sizeof(cp
->addr
));
2613 err
= hci_blacklist_del(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
2615 status
= MGMT_STATUS_INVALID_PARAMS
;
2619 err
= cmd_complete(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
, status
,
2620 &cp
->addr
, sizeof(cp
->addr
));
2622 hci_dev_unlock(hdev
);
2628 static int set_fast_connectable(struct sock
*sk
, u16 index
,
2629 void *data
, u16 len
)
2631 struct hci_dev
*hdev
;
2632 struct mgmt_mode
*cp
= data
;
2633 struct hci_cp_write_page_scan_activity acp
;
2637 BT_DBG("hci%u", index
);
2639 if (len
!= sizeof(*cp
))
2640 return cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2641 MGMT_STATUS_INVALID_PARAMS
);
2643 hdev
= hci_dev_get(index
);
2645 return cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2646 MGMT_STATUS_INVALID_PARAMS
);
2647 if (!hdev_is_powered(hdev
))
2648 return cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2649 MGMT_STATUS_NOT_POWERED
);
2651 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
2652 return cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2653 MGMT_STATUS_REJECTED
);
2658 type
= PAGE_SCAN_TYPE_INTERLACED
;
2659 acp
.interval
= 0x0024; /* 22.5 msec page scan interval */
2661 type
= PAGE_SCAN_TYPE_STANDARD
; /* default */
2662 acp
.interval
= 0x0800; /* default 1.28 sec page scan */
2665 acp
.window
= 0x0012; /* default 11.25 msec page scan window */
2667 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
,
2670 err
= cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2671 MGMT_STATUS_FAILED
);
2675 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_PAGE_SCAN_TYPE
, 1, &type
);
2677 err
= cmd_status(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
,
2678 MGMT_STATUS_FAILED
);
2682 err
= cmd_complete(sk
, index
, MGMT_OP_SET_FAST_CONNECTABLE
, 0,
2685 hci_dev_unlock(hdev
);
2691 static int load_long_term_keys(struct sock
*sk
, u16 index
,
2692 void *cp_data
, u16 len
)
2694 struct hci_dev
*hdev
;
2695 struct mgmt_cp_load_long_term_keys
*cp
= cp_data
;
2696 u16 key_count
, expected_len
;
2699 if (len
< sizeof(*cp
))
2700 return cmd_status(sk
, index
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
2703 key_count
= get_unaligned_le16(&cp
->key_count
);
2705 expected_len
= sizeof(*cp
) + key_count
*
2706 sizeof(struct mgmt_ltk_info
);
2707 if (expected_len
!= len
) {
2708 BT_ERR("load_keys: expected %u bytes, got %u bytes",
2710 return cmd_status(sk
, index
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
2714 hdev
= hci_dev_get(index
);
2716 return cmd_status(sk
, index
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
2719 BT_DBG("hci%u key_count %u", index
, key_count
);
2723 hci_smp_ltks_clear(hdev
);
2725 for (i
= 0; i
< key_count
; i
++) {
2726 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
2732 type
= HCI_SMP_LTK_SLAVE
;
2734 hci_add_ltk(hdev
, &key
->addr
.bdaddr
, key
->addr
.type
,
2735 type
, 0, key
->authenticated
, key
->val
,
2736 key
->enc_size
, key
->ediv
, key
->rand
);
2739 hci_dev_unlock(hdev
);
2745 int mgmt_control(struct sock
*sk
, struct msghdr
*msg
, size_t msglen
)
2749 struct mgmt_hdr
*hdr
;
2750 u16 opcode
, index
, len
;
2753 BT_DBG("got %zu bytes", msglen
);
2755 if (msglen
< sizeof(*hdr
))
2758 buf
= kmalloc(msglen
, GFP_KERNEL
);
2762 if (memcpy_fromiovec(buf
, msg
->msg_iov
, msglen
)) {
2768 opcode
= get_unaligned_le16(&hdr
->opcode
);
2769 index
= get_unaligned_le16(&hdr
->index
);
2770 len
= get_unaligned_le16(&hdr
->len
);
2772 if (len
!= msglen
- sizeof(*hdr
)) {
2777 cp
= buf
+ sizeof(*hdr
);
2780 case MGMT_OP_READ_VERSION
:
2781 err
= read_version(sk
);
2783 case MGMT_OP_READ_COMMANDS
:
2784 err
= read_commands(sk
);
2786 case MGMT_OP_READ_INDEX_LIST
:
2787 err
= read_index_list(sk
);
2789 case MGMT_OP_READ_INFO
:
2790 err
= read_controller_info(sk
, index
);
2792 case MGMT_OP_SET_POWERED
:
2793 err
= set_powered(sk
, index
, cp
, len
);
2795 case MGMT_OP_SET_DISCOVERABLE
:
2796 err
= set_discoverable(sk
, index
, cp
, len
);
2798 case MGMT_OP_SET_CONNECTABLE
:
2799 err
= set_connectable(sk
, index
, cp
, len
);
2801 case MGMT_OP_SET_FAST_CONNECTABLE
:
2802 err
= set_fast_connectable(sk
, index
, cp
, len
);
2804 case MGMT_OP_SET_PAIRABLE
:
2805 err
= set_pairable(sk
, index
, cp
, len
);
2807 case MGMT_OP_SET_LINK_SECURITY
:
2808 err
= set_link_security(sk
, index
, cp
, len
);
2810 case MGMT_OP_SET_SSP
:
2811 err
= set_ssp(sk
, index
, cp
, len
);
2813 case MGMT_OP_SET_HS
:
2814 err
= set_hs(sk
, index
, cp
, len
);
2816 case MGMT_OP_ADD_UUID
:
2817 err
= add_uuid(sk
, index
, cp
, len
);
2819 case MGMT_OP_REMOVE_UUID
:
2820 err
= remove_uuid(sk
, index
, cp
, len
);
2822 case MGMT_OP_SET_DEV_CLASS
:
2823 err
= set_dev_class(sk
, index
, cp
, len
);
2825 case MGMT_OP_LOAD_LINK_KEYS
:
2826 err
= load_link_keys(sk
, index
, cp
, len
);
2828 case MGMT_OP_DISCONNECT
:
2829 err
= disconnect(sk
, index
, cp
, len
);
2831 case MGMT_OP_GET_CONNECTIONS
:
2832 err
= get_connections(sk
, index
);
2834 case MGMT_OP_PIN_CODE_REPLY
:
2835 err
= pin_code_reply(sk
, index
, cp
, len
);
2837 case MGMT_OP_PIN_CODE_NEG_REPLY
:
2838 err
= pin_code_neg_reply(sk
, index
, cp
, len
);
2840 case MGMT_OP_SET_IO_CAPABILITY
:
2841 err
= set_io_capability(sk
, index
, cp
, len
);
2843 case MGMT_OP_PAIR_DEVICE
:
2844 err
= pair_device(sk
, index
, cp
, len
);
2846 case MGMT_OP_CANCEL_PAIR_DEVICE
:
2847 err
= cancel_pair_device(sk
, index
, buf
+ sizeof(*hdr
), len
);
2849 case MGMT_OP_UNPAIR_DEVICE
:
2850 err
= unpair_device(sk
, index
, cp
, len
);
2852 case MGMT_OP_USER_CONFIRM_REPLY
:
2853 err
= user_confirm_reply(sk
, index
, cp
, len
);
2855 case MGMT_OP_USER_CONFIRM_NEG_REPLY
:
2856 err
= user_confirm_neg_reply(sk
, index
, cp
, len
);
2858 case MGMT_OP_USER_PASSKEY_REPLY
:
2859 err
= user_passkey_reply(sk
, index
, cp
, len
);
2861 case MGMT_OP_USER_PASSKEY_NEG_REPLY
:
2862 err
= user_passkey_neg_reply(sk
, index
, cp
, len
);
2864 case MGMT_OP_SET_LOCAL_NAME
:
2865 err
= set_local_name(sk
, index
, cp
, len
);
2867 case MGMT_OP_READ_LOCAL_OOB_DATA
:
2868 err
= read_local_oob_data(sk
, index
);
2870 case MGMT_OP_ADD_REMOTE_OOB_DATA
:
2871 err
= add_remote_oob_data(sk
, index
, cp
, len
);
2873 case MGMT_OP_REMOVE_REMOTE_OOB_DATA
:
2874 err
= remove_remote_oob_data(sk
, index
, cp
, len
);
2876 case MGMT_OP_START_DISCOVERY
:
2877 err
= start_discovery(sk
, index
, cp
, len
);
2879 case MGMT_OP_STOP_DISCOVERY
:
2880 err
= stop_discovery(sk
, index
, cp
, len
);
2882 case MGMT_OP_CONFIRM_NAME
:
2883 err
= confirm_name(sk
, index
, cp
, len
);
2885 case MGMT_OP_BLOCK_DEVICE
:
2886 err
= block_device(sk
, index
, cp
, len
);
2888 case MGMT_OP_UNBLOCK_DEVICE
:
2889 err
= unblock_device(sk
, index
, cp
, len
);
2891 case MGMT_OP_LOAD_LONG_TERM_KEYS
:
2892 err
= load_long_term_keys(sk
, index
, cp
, len
);
2895 BT_DBG("Unknown op %u", opcode
);
2896 err
= cmd_status(sk
, index
, opcode
,
2897 MGMT_STATUS_UNKNOWN_COMMAND
);
2911 static void cmd_status_rsp(struct pending_cmd
*cmd
, void *data
)
2915 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, *status
);
2916 mgmt_pending_remove(cmd
);
2919 int mgmt_index_added(struct hci_dev
*hdev
)
2921 return mgmt_event(MGMT_EV_INDEX_ADDED
, hdev
, NULL
, 0, NULL
);
2924 int mgmt_index_removed(struct hci_dev
*hdev
)
2928 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status
);
2930 return mgmt_event(MGMT_EV_INDEX_REMOVED
, hdev
, NULL
, 0, NULL
);
2935 struct hci_dev
*hdev
;
2938 static void settings_rsp(struct pending_cmd
*cmd
, void *data
)
2940 struct cmd_lookup
*match
= data
;
2942 send_settings_rsp(cmd
->sk
, cmd
->opcode
, match
->hdev
);
2944 list_del(&cmd
->list
);
2946 if (match
->sk
== NULL
) {
2947 match
->sk
= cmd
->sk
;
2948 sock_hold(match
->sk
);
2951 mgmt_pending_free(cmd
);
2954 int mgmt_powered(struct hci_dev
*hdev
, u8 powered
)
2956 struct cmd_lookup match
= { NULL
, hdev
};
2959 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2962 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
2967 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
2969 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
2970 scan
|= SCAN_INQUIRY
;
2973 hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
2975 u8 status
= ENETDOWN
;
2976 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status
);
2979 err
= new_settings(hdev
, match
.sk
);
2987 int mgmt_discoverable(struct hci_dev
*hdev
, u8 discoverable
)
2989 struct cmd_lookup match
= { NULL
, hdev
};
2990 bool changed
= false;
2994 if (!test_and_set_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
2997 if (test_and_clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
3001 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, hdev
, settings_rsp
,
3005 err
= new_settings(hdev
, match
.sk
);
3013 int mgmt_connectable(struct hci_dev
*hdev
, u8 connectable
)
3015 struct cmd_lookup match
= { NULL
, hdev
};
3016 bool changed
= false;
3020 if (!test_and_set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
3023 if (test_and_clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
3027 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, hdev
, settings_rsp
,
3031 err
= new_settings(hdev
, match
.sk
);
3039 int mgmt_write_scan_failed(struct hci_dev
*hdev
, u8 scan
, u8 status
)
3041 u8 mgmt_err
= mgmt_status(status
);
3043 if (scan
& SCAN_PAGE
)
3044 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, hdev
,
3045 cmd_status_rsp
, &mgmt_err
);
3047 if (scan
& SCAN_INQUIRY
)
3048 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, hdev
,
3049 cmd_status_rsp
, &mgmt_err
);
3054 int mgmt_new_link_key(struct hci_dev
*hdev
, struct link_key
*key
,
3057 struct mgmt_ev_new_link_key ev
;
3059 memset(&ev
, 0, sizeof(ev
));
3061 ev
.store_hint
= persistent
;
3062 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
3063 ev
.key
.addr
.type
= MGMT_ADDR_BREDR
;
3064 ev
.key
.type
= key
->type
;
3065 memcpy(ev
.key
.val
, key
->val
, 16);
3066 ev
.key
.pin_len
= key
->pin_len
;
3068 return mgmt_event(MGMT_EV_NEW_LINK_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
3071 int mgmt_new_ltk(struct hci_dev
*hdev
, struct smp_ltk
*key
, u8 persistent
)
3073 struct mgmt_ev_new_long_term_key ev
;
3075 memset(&ev
, 0, sizeof(ev
));
3077 ev
.store_hint
= persistent
;
3078 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
3079 ev
.key
.addr
.type
= key
->bdaddr_type
;
3080 ev
.key
.authenticated
= key
->authenticated
;
3081 ev
.key
.enc_size
= key
->enc_size
;
3082 ev
.key
.ediv
= key
->ediv
;
3084 if (key
->type
== HCI_SMP_LTK
)
3087 memcpy(ev
.key
.rand
, key
->rand
, sizeof(key
->rand
));
3088 memcpy(ev
.key
.val
, key
->val
, sizeof(key
->val
));
3090 return mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY
, hdev
,
3091 &ev
, sizeof(ev
), NULL
);
3094 int mgmt_device_connected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3095 u8 addr_type
, u8
*name
, u8 name_len
,
3099 struct mgmt_ev_device_connected
*ev
= (void *) buf
;
3102 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
3103 ev
->addr
.type
= link_to_mgmt(link_type
, addr_type
);
3106 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
,
3109 if (dev_class
&& memcmp(dev_class
, "\0\0\0", 3) != 0)
3110 eir_len
= eir_append_data(&ev
->eir
[eir_len
], eir_len
,
3111 EIR_CLASS_OF_DEV
, dev_class
, 3);
3113 put_unaligned_le16(eir_len
, &ev
->eir_len
);
3115 return mgmt_event(MGMT_EV_DEVICE_CONNECTED
, hdev
, buf
,
3116 sizeof(*ev
) + eir_len
, NULL
);
3119 static void disconnect_rsp(struct pending_cmd
*cmd
, void *data
)
3121 struct mgmt_cp_disconnect
*cp
= cmd
->param
;
3122 struct sock
**sk
= data
;
3123 struct mgmt_rp_disconnect rp
;
3125 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
3126 rp
.addr
.type
= cp
->addr
.type
;
3128 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
, 0, &rp
,
3134 mgmt_pending_remove(cmd
);
3137 static void unpair_device_rsp(struct pending_cmd
*cmd
, void *data
)
3139 struct hci_dev
*hdev
= data
;
3140 struct mgmt_cp_unpair_device
*cp
= cmd
->param
;
3141 struct mgmt_rp_unpair_device rp
;
3143 memset(&rp
, 0, sizeof(rp
));
3144 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
3145 rp
.addr
.type
= cp
->addr
.type
;
3147 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, cmd
->sk
);
3149 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, 0, &rp
, sizeof(rp
));
3151 mgmt_pending_remove(cmd
);
3154 int mgmt_device_disconnected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3155 u8 link_type
, u8 addr_type
)
3157 struct mgmt_addr_info ev
;
3158 struct sock
*sk
= NULL
;
3161 mgmt_pending_foreach(MGMT_OP_DISCONNECT
, hdev
, disconnect_rsp
, &sk
);
3163 bacpy(&ev
.bdaddr
, bdaddr
);
3164 ev
.type
= link_to_mgmt(link_type
, addr_type
);
3166 err
= mgmt_event(MGMT_EV_DEVICE_DISCONNECTED
, hdev
, &ev
, sizeof(ev
),
3172 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
3178 int mgmt_disconnect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3179 u8 link_type
, u8 addr_type
, u8 status
)
3181 struct mgmt_rp_disconnect rp
;
3182 struct pending_cmd
*cmd
;
3185 cmd
= mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
);
3189 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
3190 rp
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3192 err
= cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
,
3193 mgmt_status(status
), &rp
, sizeof(rp
));
3195 mgmt_pending_remove(cmd
);
3197 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
3202 int mgmt_connect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3203 u8 addr_type
, u8 status
)
3205 struct mgmt_ev_connect_failed ev
;
3207 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3208 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3209 ev
.status
= mgmt_status(status
);
3211 return mgmt_event(MGMT_EV_CONNECT_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
3214 int mgmt_pin_code_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 secure
)
3216 struct mgmt_ev_pin_code_request ev
;
3218 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3219 ev
.addr
.type
= MGMT_ADDR_BREDR
;
3222 return mgmt_event(MGMT_EV_PIN_CODE_REQUEST
, hdev
, &ev
, sizeof(ev
),
3226 int mgmt_pin_code_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3229 struct pending_cmd
*cmd
;
3230 struct mgmt_rp_pin_code_reply rp
;
3233 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY
, hdev
);
3237 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
3238 rp
.addr
.type
= MGMT_ADDR_BREDR
;
3240 err
= cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
3241 mgmt_status(status
), &rp
, sizeof(rp
));
3243 mgmt_pending_remove(cmd
);
3248 int mgmt_pin_code_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3251 struct pending_cmd
*cmd
;
3252 struct mgmt_rp_pin_code_reply rp
;
3255 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
);
3259 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
3260 rp
.addr
.type
= MGMT_ADDR_BREDR
;
3262 err
= cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_NEG_REPLY
,
3263 mgmt_status(status
), &rp
, sizeof(rp
));
3265 mgmt_pending_remove(cmd
);
3270 int mgmt_user_confirm_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3271 u8 link_type
, u8 addr_type
, __le32 value
,
3274 struct mgmt_ev_user_confirm_request ev
;
3276 BT_DBG("%s", hdev
->name
);
3278 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3279 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3280 ev
.confirm_hint
= confirm_hint
;
3281 put_unaligned_le32(value
, &ev
.value
);
3283 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST
, hdev
, &ev
, sizeof(ev
),
3287 int mgmt_user_passkey_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3288 u8 link_type
, u8 addr_type
)
3290 struct mgmt_ev_user_passkey_request ev
;
3292 BT_DBG("%s", hdev
->name
);
3294 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3295 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3297 return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST
, hdev
, &ev
, sizeof(ev
),
3301 static int user_pairing_resp_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3302 u8 link_type
, u8 addr_type
, u8 status
,
3305 struct pending_cmd
*cmd
;
3306 struct mgmt_rp_user_confirm_reply rp
;
3309 cmd
= mgmt_pending_find(opcode
, hdev
);
3313 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
3314 rp
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3315 err
= cmd_complete(cmd
->sk
, hdev
->id
, opcode
, mgmt_status(status
),
3318 mgmt_pending_remove(cmd
);
3323 int mgmt_user_confirm_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3324 u8 link_type
, u8 addr_type
, u8 status
)
3326 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3327 status
, MGMT_OP_USER_CONFIRM_REPLY
);
3330 int mgmt_user_confirm_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3331 u8 link_type
, u8 addr_type
, u8 status
)
3333 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3334 status
, MGMT_OP_USER_CONFIRM_NEG_REPLY
);
3337 int mgmt_user_passkey_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3338 u8 link_type
, u8 addr_type
, u8 status
)
3340 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3341 status
, MGMT_OP_USER_PASSKEY_REPLY
);
3344 int mgmt_user_passkey_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
3345 u8 link_type
, u8 addr_type
, u8 status
)
3347 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
3348 status
, MGMT_OP_USER_PASSKEY_NEG_REPLY
);
3351 int mgmt_auth_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3352 u8 addr_type
, u8 status
)
3354 struct mgmt_ev_auth_failed ev
;
3356 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3357 ev
.addr
.type
= link_to_mgmt(link_type
, addr_type
);
3358 ev
.status
= mgmt_status(status
);
3360 return mgmt_event(MGMT_EV_AUTH_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
3363 int mgmt_auth_enable_complete(struct hci_dev
*hdev
, u8 status
)
3365 struct cmd_lookup match
= { NULL
, hdev
};
3366 bool changed
= false;
3370 u8 mgmt_err
= mgmt_status(status
);
3371 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
,
3372 cmd_status_rsp
, &mgmt_err
);
3376 if (test_bit(HCI_AUTH
, &hdev
->flags
)) {
3377 if (!test_and_set_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
))
3380 if (test_and_clear_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
))
3384 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
, settings_rsp
,
3388 err
= new_settings(hdev
, match
.sk
);
3396 static int clear_eir(struct hci_dev
*hdev
)
3398 struct hci_cp_write_eir cp
;
3400 if (!(hdev
->features
[6] & LMP_EXT_INQ
))
3403 memset(hdev
->eir
, 0, sizeof(hdev
->eir
));
3405 memset(&cp
, 0, sizeof(cp
));
3407 return hci_send_cmd(hdev
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
3410 int mgmt_ssp_enable_complete(struct hci_dev
*hdev
, u8 enable
, u8 status
)
3412 struct cmd_lookup match
= { NULL
, hdev
};
3413 bool changed
= false;
3417 u8 mgmt_err
= mgmt_status(status
);
3419 if (enable
&& test_and_clear_bit(HCI_SSP_ENABLED
,
3421 err
= new_settings(hdev
, NULL
);
3423 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
,
3424 cmd_status_rsp
, &mgmt_err
);
3430 if (!test_and_set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
3433 if (test_and_clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
3437 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, settings_rsp
, &match
);
3440 err
= new_settings(hdev
, match
.sk
);
3445 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
3453 int mgmt_set_local_name_complete(struct hci_dev
*hdev
, u8
*name
, u8 status
)
3455 struct pending_cmd
*cmd
;
3456 struct mgmt_cp_set_local_name ev
;
3459 memset(&ev
, 0, sizeof(ev
));
3460 memcpy(ev
.name
, name
, HCI_MAX_NAME_LENGTH
);
3462 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
3467 err
= cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
,
3468 mgmt_status(status
));
3474 err
= cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0, &ev
,
3480 err
= mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, &ev
, sizeof(ev
),
3481 cmd
? cmd
->sk
: NULL
);
3485 mgmt_pending_remove(cmd
);
3489 int mgmt_read_local_oob_data_reply_complete(struct hci_dev
*hdev
, u8
*hash
,
3490 u8
*randomizer
, u8 status
)
3492 struct pending_cmd
*cmd
;
3495 BT_DBG("%s status %u", hdev
->name
, status
);
3497 cmd
= mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
);
3502 err
= cmd_status(cmd
->sk
, hdev
->id
,
3503 MGMT_OP_READ_LOCAL_OOB_DATA
,
3504 mgmt_status(status
));
3506 struct mgmt_rp_read_local_oob_data rp
;
3508 memcpy(rp
.hash
, hash
, sizeof(rp
.hash
));
3509 memcpy(rp
.randomizer
, randomizer
, sizeof(rp
.randomizer
));
3511 err
= cmd_complete(cmd
->sk
, hdev
->id
,
3512 MGMT_OP_READ_LOCAL_OOB_DATA
,
3513 0, &rp
, sizeof(rp
));
3516 mgmt_pending_remove(cmd
);
3521 int mgmt_device_found(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3522 u8 addr_type
, u8
*dev_class
, s8 rssi
,
3523 u8 cfm_name
, u8
*eir
, u16 eir_len
)
3526 struct mgmt_ev_device_found
*ev
= (void *) buf
;
3529 /* Leave 5 bytes for a potential CoD field */
3530 if (sizeof(*ev
) + eir_len
+ 5 > sizeof(buf
))
3533 memset(buf
, 0, sizeof(buf
));
3535 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
3536 ev
->addr
.type
= link_to_mgmt(link_type
, addr_type
);
3538 ev
->confirm_name
= cfm_name
;
3541 memcpy(ev
->eir
, eir
, eir_len
);
3543 if (dev_class
&& !eir_has_data_type(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
))
3544 eir_len
= eir_append_data(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
,
3547 put_unaligned_le16(eir_len
, &ev
->eir_len
);
3549 ev_size
= sizeof(*ev
) + eir_len
;
3551 return mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, ev_size
, NULL
);
3554 int mgmt_remote_name(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
3555 u8 addr_type
, s8 rssi
, u8
*name
, u8 name_len
)
3557 struct mgmt_ev_device_found
*ev
;
3558 char buf
[sizeof(*ev
) + HCI_MAX_NAME_LENGTH
+ 2];
3561 ev
= (struct mgmt_ev_device_found
*) buf
;
3563 memset(buf
, 0, sizeof(buf
));
3565 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
3566 ev
->addr
.type
= link_to_mgmt(link_type
, addr_type
);
3569 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
, name
,
3572 put_unaligned_le16(eir_len
, &ev
->eir_len
);
3574 return mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
,
3575 sizeof(*ev
) + eir_len
, NULL
);
3578 int mgmt_start_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3580 struct pending_cmd
*cmd
;
3584 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3586 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
3590 type
= hdev
->discovery
.type
;
3592 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3593 &type
, sizeof(type
));
3594 mgmt_pending_remove(cmd
);
3599 int mgmt_stop_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3601 struct pending_cmd
*cmd
;
3604 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
3608 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3609 &hdev
->discovery
.type
,
3610 sizeof(hdev
->discovery
.type
));
3611 mgmt_pending_remove(cmd
);
3616 int mgmt_discovering(struct hci_dev
*hdev
, u8 discovering
)
3618 struct mgmt_ev_discovering ev
;
3619 struct pending_cmd
*cmd
;
3621 BT_DBG("%s discovering %u", hdev
->name
, discovering
);
3624 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
3626 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
3629 u8 type
= hdev
->discovery
.type
;
3631 cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, 0,
3632 &type
, sizeof(type
));
3633 mgmt_pending_remove(cmd
);
3636 memset(&ev
, 0, sizeof(ev
));
3637 ev
.type
= hdev
->discovery
.type
;
3638 ev
.discovering
= discovering
;
3640 return mgmt_event(MGMT_EV_DISCOVERING
, hdev
, &ev
, sizeof(ev
), NULL
);
3643 int mgmt_device_blocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
3645 struct pending_cmd
*cmd
;
3646 struct mgmt_ev_device_blocked ev
;
3648 cmd
= mgmt_pending_find(MGMT_OP_BLOCK_DEVICE
, hdev
);
3650 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3651 ev
.addr
.type
= type
;
3653 return mgmt_event(MGMT_EV_DEVICE_BLOCKED
, hdev
, &ev
, sizeof(ev
),
3654 cmd
? cmd
->sk
: NULL
);
3657 int mgmt_device_unblocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
3659 struct pending_cmd
*cmd
;
3660 struct mgmt_ev_device_unblocked ev
;
3662 cmd
= mgmt_pending_find(MGMT_OP_UNBLOCK_DEVICE
, hdev
);
3664 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
3665 ev
.addr
.type
= type
;
3667 return mgmt_event(MGMT_EV_DEVICE_UNBLOCKED
, hdev
, &ev
, sizeof(ev
),
3668 cmd
? cmd
->sk
: NULL
);
3671 module_param(enable_hs
, bool, 0644);
3672 MODULE_PARM_DESC(enable_hs
, "Enable High Speed support");
3674 module_param(enable_le
, bool, 0644);
3675 MODULE_PARM_DESC(enable_le
, "Enable Low Energy support");