2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2010 Nokia Corporation
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License version 2 as
7 published by the Free Software Foundation;
9 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20 SOFTWARE IS DISCLAIMED.
23 /* Bluetooth HCI Management interface */
25 #include <linux/uaccess.h>
26 #include <asm/unaligned.h>
28 #include <net/bluetooth/bluetooth.h>
29 #include <net/bluetooth/hci_core.h>
30 #include <net/bluetooth/mgmt.h>
32 #define MGMT_VERSION 0
33 #define MGMT_REVISION 1
36 struct list_head list
;
44 static LIST_HEAD(cmd_list
);
46 static int cmd_status(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
)
50 struct mgmt_ev_cmd_status
*ev
;
52 BT_DBG("sock %p, index %u, cmd %u, status %u", sk
, index
, cmd
, status
);
54 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
), GFP_ATOMIC
);
58 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
60 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_STATUS
);
61 hdr
->index
= cpu_to_le16(index
);
62 hdr
->len
= cpu_to_le16(sizeof(*ev
));
64 ev
= (void *) skb_put(skb
, sizeof(*ev
));
66 put_unaligned_le16(cmd
, &ev
->opcode
);
68 if (sock_queue_rcv_skb(sk
, skb
) < 0)
74 static int cmd_complete(struct sock
*sk
, u16 index
, u16 cmd
, void *rp
,
79 struct mgmt_ev_cmd_complete
*ev
;
81 BT_DBG("sock %p", sk
);
83 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
) + rp_len
, GFP_ATOMIC
);
87 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
89 hdr
->opcode
= cpu_to_le16(MGMT_EV_CMD_COMPLETE
);
90 hdr
->index
= cpu_to_le16(index
);
91 hdr
->len
= cpu_to_le16(sizeof(*ev
) + rp_len
);
93 ev
= (void *) skb_put(skb
, sizeof(*ev
) + rp_len
);
94 put_unaligned_le16(cmd
, &ev
->opcode
);
97 memcpy(ev
->data
, rp
, rp_len
);
99 if (sock_queue_rcv_skb(sk
, skb
) < 0)
105 static int read_version(struct sock
*sk
)
107 struct mgmt_rp_read_version rp
;
109 BT_DBG("sock %p", sk
);
111 rp
.version
= MGMT_VERSION
;
112 put_unaligned_le16(MGMT_REVISION
, &rp
.revision
);
114 return cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_VERSION
, &rp
,
118 static int read_index_list(struct sock
*sk
)
120 struct mgmt_rp_read_index_list
*rp
;
126 BT_DBG("sock %p", sk
);
128 read_lock(&hci_dev_list_lock
);
131 list_for_each(p
, &hci_dev_list
) {
135 rp_len
= sizeof(*rp
) + (2 * count
);
136 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
138 read_unlock(&hci_dev_list_lock
);
142 put_unaligned_le16(count
, &rp
->num_controllers
);
145 list_for_each(p
, &hci_dev_list
) {
146 struct hci_dev
*d
= list_entry(p
, struct hci_dev
, list
);
148 hci_del_off_timer(d
);
150 set_bit(HCI_MGMT
, &d
->flags
);
152 if (test_bit(HCI_SETUP
, &d
->flags
))
155 put_unaligned_le16(d
->id
, &rp
->index
[i
++]);
156 BT_DBG("Added hci%u", d
->id
);
159 read_unlock(&hci_dev_list_lock
);
161 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_INDEX_LIST
, rp
,
169 static int read_controller_info(struct sock
*sk
, u16 index
)
171 struct mgmt_rp_read_info rp
;
172 struct hci_dev
*hdev
;
174 BT_DBG("sock %p hci%u", sk
, index
);
176 hdev
= hci_dev_get(index
);
178 return cmd_status(sk
, index
, MGMT_OP_READ_INFO
, ENODEV
);
180 hci_del_off_timer(hdev
);
182 hci_dev_lock_bh(hdev
);
184 set_bit(HCI_MGMT
, &hdev
->flags
);
186 memset(&rp
, 0, sizeof(rp
));
188 rp
.type
= hdev
->dev_type
;
190 rp
.powered
= test_bit(HCI_UP
, &hdev
->flags
);
191 rp
.connectable
= test_bit(HCI_PSCAN
, &hdev
->flags
);
192 rp
.discoverable
= test_bit(HCI_ISCAN
, &hdev
->flags
);
193 rp
.pairable
= test_bit(HCI_PSCAN
, &hdev
->flags
);
195 if (test_bit(HCI_AUTH
, &hdev
->flags
))
197 else if (hdev
->ssp_mode
> 0)
202 bacpy(&rp
.bdaddr
, &hdev
->bdaddr
);
203 memcpy(rp
.features
, hdev
->features
, 8);
204 memcpy(rp
.dev_class
, hdev
->dev_class
, 3);
205 put_unaligned_le16(hdev
->manufacturer
, &rp
.manufacturer
);
206 rp
.hci_ver
= hdev
->hci_ver
;
207 put_unaligned_le16(hdev
->hci_rev
, &rp
.hci_rev
);
209 memcpy(rp
.name
, hdev
->dev_name
, sizeof(hdev
->dev_name
));
211 hci_dev_unlock_bh(hdev
);
214 return cmd_complete(sk
, index
, MGMT_OP_READ_INFO
, &rp
, sizeof(rp
));
217 static void mgmt_pending_free(struct pending_cmd
*cmd
)
224 static struct pending_cmd
*mgmt_pending_add(struct sock
*sk
, u16 opcode
,
225 u16 index
, void *data
, u16 len
)
227 struct pending_cmd
*cmd
;
229 cmd
= kmalloc(sizeof(*cmd
), GFP_ATOMIC
);
233 cmd
->opcode
= opcode
;
236 cmd
->param
= kmalloc(len
, GFP_ATOMIC
);
243 memcpy(cmd
->param
, data
, len
);
248 list_add(&cmd
->list
, &cmd_list
);
253 static void mgmt_pending_foreach(u16 opcode
, int index
,
254 void (*cb
)(struct pending_cmd
*cmd
, void *data
),
257 struct list_head
*p
, *n
;
259 list_for_each_safe(p
, n
, &cmd_list
) {
260 struct pending_cmd
*cmd
;
262 cmd
= list_entry(p
, struct pending_cmd
, list
);
264 if (cmd
->opcode
!= opcode
)
267 if (index
>= 0 && cmd
->index
!= index
)
274 static struct pending_cmd
*mgmt_pending_find(u16 opcode
, int index
)
278 list_for_each(p
, &cmd_list
) {
279 struct pending_cmd
*cmd
;
281 cmd
= list_entry(p
, struct pending_cmd
, list
);
283 if (cmd
->opcode
!= opcode
)
286 if (index
>= 0 && cmd
->index
!= index
)
295 static void mgmt_pending_remove(struct pending_cmd
*cmd
)
297 list_del(&cmd
->list
);
298 mgmt_pending_free(cmd
);
301 static int set_powered(struct sock
*sk
, u16 index
, unsigned char *data
, u16 len
)
303 struct mgmt_mode
*cp
;
304 struct hci_dev
*hdev
;
305 struct pending_cmd
*cmd
;
310 BT_DBG("request for hci%u", index
);
312 if (len
!= sizeof(*cp
))
313 return cmd_status(sk
, index
, MGMT_OP_SET_POWERED
, EINVAL
);
315 hdev
= hci_dev_get(index
);
317 return cmd_status(sk
, index
, MGMT_OP_SET_POWERED
, ENODEV
);
319 hci_dev_lock_bh(hdev
);
321 up
= test_bit(HCI_UP
, &hdev
->flags
);
322 if ((cp
->val
&& up
) || (!cp
->val
&& !up
)) {
323 err
= cmd_status(sk
, index
, MGMT_OP_SET_POWERED
, EALREADY
);
327 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, index
)) {
328 err
= cmd_status(sk
, index
, MGMT_OP_SET_POWERED
, EBUSY
);
332 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, index
, data
, len
);
339 queue_work(hdev
->workqueue
, &hdev
->power_on
);
341 queue_work(hdev
->workqueue
, &hdev
->power_off
);
346 hci_dev_unlock_bh(hdev
);
351 static int set_discoverable(struct sock
*sk
, u16 index
, unsigned char *data
,
354 struct mgmt_mode
*cp
;
355 struct hci_dev
*hdev
;
356 struct pending_cmd
*cmd
;
362 BT_DBG("request for hci%u", index
);
364 if (len
!= sizeof(*cp
))
365 return cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
, EINVAL
);
367 hdev
= hci_dev_get(index
);
369 return cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
, ENODEV
);
371 hci_dev_lock_bh(hdev
);
373 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
374 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
, ENETDOWN
);
378 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, index
) ||
379 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, index
)) {
380 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
, EBUSY
);
384 if (cp
->val
== test_bit(HCI_ISCAN
, &hdev
->flags
) &&
385 test_bit(HCI_PSCAN
, &hdev
->flags
)) {
386 err
= cmd_status(sk
, index
, MGMT_OP_SET_DISCOVERABLE
, EALREADY
);
390 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DISCOVERABLE
, index
, data
, len
);
399 scan
|= SCAN_INQUIRY
;
401 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
403 mgmt_pending_remove(cmd
);
406 hci_dev_unlock_bh(hdev
);
412 static int set_connectable(struct sock
*sk
, u16 index
, unsigned char *data
,
415 struct mgmt_mode
*cp
;
416 struct hci_dev
*hdev
;
417 struct pending_cmd
*cmd
;
423 BT_DBG("request for hci%u", index
);
425 if (len
!= sizeof(*cp
))
426 return cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
, EINVAL
);
428 hdev
= hci_dev_get(index
);
430 return cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
, ENODEV
);
432 hci_dev_lock_bh(hdev
);
434 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
435 err
= cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
, ENETDOWN
);
439 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, index
) ||
440 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, index
)) {
441 err
= cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
, EBUSY
);
445 if (cp
->val
== test_bit(HCI_PSCAN
, &hdev
->flags
)) {
446 err
= cmd_status(sk
, index
, MGMT_OP_SET_CONNECTABLE
, EALREADY
);
450 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_CONNECTABLE
, index
, data
, len
);
461 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
463 mgmt_pending_remove(cmd
);
466 hci_dev_unlock_bh(hdev
);
472 static int mgmt_event(u16 event
, u16 index
, void *data
, u16 data_len
,
473 struct sock
*skip_sk
)
476 struct mgmt_hdr
*hdr
;
478 skb
= alloc_skb(sizeof(*hdr
) + data_len
, GFP_ATOMIC
);
482 bt_cb(skb
)->channel
= HCI_CHANNEL_CONTROL
;
484 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
485 hdr
->opcode
= cpu_to_le16(event
);
486 hdr
->index
= cpu_to_le16(index
);
487 hdr
->len
= cpu_to_le16(data_len
);
490 memcpy(skb_put(skb
, data_len
), data
, data_len
);
492 hci_send_to_sock(NULL
, skb
, skip_sk
);
498 static int send_mode_rsp(struct sock
*sk
, u16 opcode
, u16 index
, u8 val
)
504 return cmd_complete(sk
, index
, opcode
, &rp
, sizeof(rp
));
507 static int set_pairable(struct sock
*sk
, u16 index
, unsigned char *data
,
510 struct mgmt_mode
*cp
, ev
;
511 struct hci_dev
*hdev
;
516 BT_DBG("request for hci%u", index
);
518 if (len
!= sizeof(*cp
))
519 return cmd_status(sk
, index
, MGMT_OP_SET_PAIRABLE
, EINVAL
);
521 hdev
= hci_dev_get(index
);
523 return cmd_status(sk
, index
, MGMT_OP_SET_PAIRABLE
, ENODEV
);
525 hci_dev_lock_bh(hdev
);
528 set_bit(HCI_PAIRABLE
, &hdev
->flags
);
530 clear_bit(HCI_PAIRABLE
, &hdev
->flags
);
532 err
= send_mode_rsp(sk
, MGMT_OP_SET_PAIRABLE
, index
, cp
->val
);
538 err
= mgmt_event(MGMT_EV_PAIRABLE
, index
, &ev
, sizeof(ev
), sk
);
541 hci_dev_unlock_bh(hdev
);
547 #define EIR_FLAGS 0x01 /* flags */
548 #define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */
549 #define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */
550 #define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */
551 #define EIR_UUID32_ALL 0x05 /* 32-bit UUID, all listed */
552 #define EIR_UUID128_SOME 0x06 /* 128-bit UUID, more available */
553 #define EIR_UUID128_ALL 0x07 /* 128-bit UUID, all listed */
554 #define EIR_NAME_SHORT 0x08 /* shortened local name */
555 #define EIR_NAME_COMPLETE 0x09 /* complete local name */
556 #define EIR_TX_POWER 0x0A /* transmit power level */
557 #define EIR_DEVICE_ID 0x10 /* device ID */
559 #define PNP_INFO_SVCLASS_ID 0x1200
561 static u8 bluetooth_base_uuid
[] = {
562 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80,
563 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
566 static u16
get_uuid16(u8
*uuid128
)
571 for (i
= 0; i
< 12; i
++) {
572 if (bluetooth_base_uuid
[i
] != uuid128
[i
])
576 memcpy(&val
, &uuid128
[12], 4);
578 val
= le32_to_cpu(val
);
585 static void create_eir(struct hci_dev
*hdev
, u8
*data
)
589 u16 uuid16_list
[HCI_MAX_EIR_LENGTH
/ sizeof(u16
)];
590 int i
, truncated
= 0;
594 name_len
= strlen(hdev
->dev_name
);
600 ptr
[1] = EIR_NAME_SHORT
;
602 ptr
[1] = EIR_NAME_COMPLETE
;
604 /* EIR Data length */
605 ptr
[0] = name_len
+ 1;
607 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
609 eir_len
+= (name_len
+ 2);
610 ptr
+= (name_len
+ 2);
613 memset(uuid16_list
, 0, sizeof(uuid16_list
));
615 /* Group all UUID16 types */
616 list_for_each(p
, &hdev
->uuids
) {
617 struct bt_uuid
*uuid
= list_entry(p
, struct bt_uuid
, list
);
620 uuid16
= get_uuid16(uuid
->uuid
);
627 if (uuid16
== PNP_INFO_SVCLASS_ID
)
630 /* Stop if not enough space to put next UUID */
631 if (eir_len
+ 2 + sizeof(u16
) > HCI_MAX_EIR_LENGTH
) {
636 /* Check for duplicates */
637 for (i
= 0; uuid16_list
[i
] != 0; i
++)
638 if (uuid16_list
[i
] == uuid16
)
641 if (uuid16_list
[i
] == 0) {
642 uuid16_list
[i
] = uuid16
;
643 eir_len
+= sizeof(u16
);
647 if (uuid16_list
[0] != 0) {
651 ptr
[1] = truncated
? EIR_UUID16_SOME
: EIR_UUID16_ALL
;
656 for (i
= 0; uuid16_list
[i
] != 0; i
++) {
657 *ptr
++ = (uuid16_list
[i
] & 0x00ff);
658 *ptr
++ = (uuid16_list
[i
] & 0xff00) >> 8;
661 /* EIR Data length */
662 *length
= (i
* sizeof(u16
)) + 1;
666 static int update_eir(struct hci_dev
*hdev
)
668 struct hci_cp_write_eir cp
;
670 if (!(hdev
->features
[6] & LMP_EXT_INQ
))
673 if (hdev
->ssp_mode
== 0)
676 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->flags
))
679 memset(&cp
, 0, sizeof(cp
));
681 create_eir(hdev
, cp
.data
);
683 if (memcmp(cp
.data
, hdev
->eir
, sizeof(cp
.data
)) == 0)
686 memcpy(hdev
->eir
, cp
.data
, sizeof(cp
.data
));
688 return hci_send_cmd(hdev
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
691 static u8
get_service_classes(struct hci_dev
*hdev
)
696 list_for_each(p
, &hdev
->uuids
) {
697 struct bt_uuid
*uuid
= list_entry(p
, struct bt_uuid
, list
);
699 val
|= uuid
->svc_hint
;
705 static int update_class(struct hci_dev
*hdev
)
709 BT_DBG("%s", hdev
->name
);
711 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->flags
))
714 cod
[0] = hdev
->minor_class
;
715 cod
[1] = hdev
->major_class
;
716 cod
[2] = get_service_classes(hdev
);
718 if (memcmp(cod
, hdev
->dev_class
, 3) == 0)
721 return hci_send_cmd(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
, sizeof(cod
), cod
);
724 static int add_uuid(struct sock
*sk
, u16 index
, unsigned char *data
, u16 len
)
726 struct mgmt_cp_add_uuid
*cp
;
727 struct hci_dev
*hdev
;
728 struct bt_uuid
*uuid
;
733 BT_DBG("request for hci%u", index
);
735 if (len
!= sizeof(*cp
))
736 return cmd_status(sk
, index
, MGMT_OP_ADD_UUID
, EINVAL
);
738 hdev
= hci_dev_get(index
);
740 return cmd_status(sk
, index
, MGMT_OP_ADD_UUID
, ENODEV
);
742 hci_dev_lock_bh(hdev
);
744 uuid
= kmalloc(sizeof(*uuid
), GFP_ATOMIC
);
750 memcpy(uuid
->uuid
, cp
->uuid
, 16);
751 uuid
->svc_hint
= cp
->svc_hint
;
753 list_add(&uuid
->list
, &hdev
->uuids
);
755 err
= update_class(hdev
);
759 err
= update_eir(hdev
);
763 err
= cmd_complete(sk
, index
, MGMT_OP_ADD_UUID
, NULL
, 0);
766 hci_dev_unlock_bh(hdev
);
772 static int remove_uuid(struct sock
*sk
, u16 index
, unsigned char *data
, u16 len
)
774 struct list_head
*p
, *n
;
775 struct mgmt_cp_remove_uuid
*cp
;
776 struct hci_dev
*hdev
;
777 u8 bt_uuid_any
[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
782 BT_DBG("request for hci%u", index
);
784 if (len
!= sizeof(*cp
))
785 return cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
, EINVAL
);
787 hdev
= hci_dev_get(index
);
789 return cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
, ENODEV
);
791 hci_dev_lock_bh(hdev
);
793 if (memcmp(cp
->uuid
, bt_uuid_any
, 16) == 0) {
794 err
= hci_uuids_clear(hdev
);
800 list_for_each_safe(p
, n
, &hdev
->uuids
) {
801 struct bt_uuid
*match
= list_entry(p
, struct bt_uuid
, list
);
803 if (memcmp(match
->uuid
, cp
->uuid
, 16) != 0)
806 list_del(&match
->list
);
811 err
= cmd_status(sk
, index
, MGMT_OP_REMOVE_UUID
, ENOENT
);
815 err
= update_class(hdev
);
819 err
= update_eir(hdev
);
823 err
= cmd_complete(sk
, index
, MGMT_OP_REMOVE_UUID
, NULL
, 0);
826 hci_dev_unlock_bh(hdev
);
832 static int set_dev_class(struct sock
*sk
, u16 index
, unsigned char *data
,
835 struct hci_dev
*hdev
;
836 struct mgmt_cp_set_dev_class
*cp
;
841 BT_DBG("request for hci%u", index
);
843 if (len
!= sizeof(*cp
))
844 return cmd_status(sk
, index
, MGMT_OP_SET_DEV_CLASS
, EINVAL
);
846 hdev
= hci_dev_get(index
);
848 return cmd_status(sk
, index
, MGMT_OP_SET_DEV_CLASS
, ENODEV
);
850 hci_dev_lock_bh(hdev
);
852 hdev
->major_class
= cp
->major
;
853 hdev
->minor_class
= cp
->minor
;
855 err
= update_class(hdev
);
858 err
= cmd_complete(sk
, index
, MGMT_OP_SET_DEV_CLASS
, NULL
, 0);
860 hci_dev_unlock_bh(hdev
);
866 static int set_service_cache(struct sock
*sk
, u16 index
, unsigned char *data
,
869 struct hci_dev
*hdev
;
870 struct mgmt_cp_set_service_cache
*cp
;
875 if (len
!= sizeof(*cp
))
876 return cmd_status(sk
, index
, MGMT_OP_SET_SERVICE_CACHE
, EINVAL
);
878 hdev
= hci_dev_get(index
);
880 return cmd_status(sk
, index
, MGMT_OP_SET_SERVICE_CACHE
, ENODEV
);
882 hci_dev_lock_bh(hdev
);
884 BT_DBG("hci%u enable %d", index
, cp
->enable
);
887 set_bit(HCI_SERVICE_CACHE
, &hdev
->flags
);
890 clear_bit(HCI_SERVICE_CACHE
, &hdev
->flags
);
891 err
= update_class(hdev
);
893 err
= update_eir(hdev
);
897 err
= cmd_complete(sk
, index
, MGMT_OP_SET_SERVICE_CACHE
, NULL
,
900 hci_dev_unlock_bh(hdev
);
906 static int load_keys(struct sock
*sk
, u16 index
, unsigned char *data
, u16 len
)
908 struct hci_dev
*hdev
;
909 struct mgmt_cp_load_keys
*cp
;
910 u16 key_count
, expected_len
;
915 if (len
< sizeof(*cp
))
918 key_count
= get_unaligned_le16(&cp
->key_count
);
920 expected_len
= sizeof(*cp
) + key_count
* sizeof(struct mgmt_key_info
);
921 if (expected_len
> len
) {
922 BT_ERR("load_keys: expected at least %u bytes, got %u bytes",
927 hdev
= hci_dev_get(index
);
929 return cmd_status(sk
, index
, MGMT_OP_LOAD_KEYS
, ENODEV
);
931 BT_DBG("hci%u debug_keys %u key_count %u", index
, cp
->debug_keys
,
934 hci_dev_lock_bh(hdev
);
936 hci_link_keys_clear(hdev
);
938 set_bit(HCI_LINK_KEYS
, &hdev
->flags
);
941 set_bit(HCI_DEBUG_KEYS
, &hdev
->flags
);
943 clear_bit(HCI_DEBUG_KEYS
, &hdev
->flags
);
949 struct mgmt_key_info
*key
= (void *) cp
->keys
+ i
;
951 i
+= sizeof(*key
) + key
->dlen
;
953 if (key
->type
== HCI_LK_SMP_LTK
) {
954 struct key_master_id
*id
= (void *) key
->data
;
956 if (key
->dlen
!= sizeof(struct key_master_id
))
959 hci_add_ltk(hdev
, 0, &key
->bdaddr
, key
->pin_len
,
960 id
->ediv
, id
->rand
, key
->val
);
965 hci_add_link_key(hdev
, NULL
, 0, &key
->bdaddr
, key
->val
, key
->type
,
969 err
= cmd_complete(sk
, index
, MGMT_OP_LOAD_KEYS
, NULL
, 0);
971 hci_dev_unlock_bh(hdev
);
977 static int remove_key(struct sock
*sk
, u16 index
, unsigned char *data
, u16 len
)
979 struct hci_dev
*hdev
;
980 struct mgmt_cp_remove_key
*cp
;
981 struct hci_conn
*conn
;
986 if (len
!= sizeof(*cp
))
987 return cmd_status(sk
, index
, MGMT_OP_REMOVE_KEY
, EINVAL
);
989 hdev
= hci_dev_get(index
);
991 return cmd_status(sk
, index
, MGMT_OP_REMOVE_KEY
, ENODEV
);
993 hci_dev_lock_bh(hdev
);
995 err
= hci_remove_link_key(hdev
, &cp
->bdaddr
);
997 err
= cmd_status(sk
, index
, MGMT_OP_REMOVE_KEY
, -err
);
1003 if (!test_bit(HCI_UP
, &hdev
->flags
) || !cp
->disconnect
)
1006 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1008 struct hci_cp_disconnect dc
;
1010 put_unaligned_le16(conn
->handle
, &dc
.handle
);
1011 dc
.reason
= 0x13; /* Remote User Terminated Connection */
1012 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
1016 hci_dev_unlock_bh(hdev
);
1022 static int disconnect(struct sock
*sk
, u16 index
, unsigned char *data
, u16 len
)
1024 struct hci_dev
*hdev
;
1025 struct mgmt_cp_disconnect
*cp
;
1026 struct hci_cp_disconnect dc
;
1027 struct pending_cmd
*cmd
;
1028 struct hci_conn
*conn
;
1035 if (len
!= sizeof(*cp
))
1036 return cmd_status(sk
, index
, MGMT_OP_DISCONNECT
, EINVAL
);
1038 hdev
= hci_dev_get(index
);
1040 return cmd_status(sk
, index
, MGMT_OP_DISCONNECT
, ENODEV
);
1042 hci_dev_lock_bh(hdev
);
1044 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1045 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
, ENETDOWN
);
1049 if (mgmt_pending_find(MGMT_OP_DISCONNECT
, index
)) {
1050 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
, EBUSY
);
1054 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1056 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->bdaddr
);
1059 err
= cmd_status(sk
, index
, MGMT_OP_DISCONNECT
, ENOTCONN
);
1063 cmd
= mgmt_pending_add(sk
, MGMT_OP_DISCONNECT
, index
, data
, len
);
1069 put_unaligned_le16(conn
->handle
, &dc
.handle
);
1070 dc
.reason
= 0x13; /* Remote User Terminated Connection */
1072 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
1074 mgmt_pending_remove(cmd
);
1077 hci_dev_unlock_bh(hdev
);
1083 static int get_connections(struct sock
*sk
, u16 index
)
1085 struct mgmt_rp_get_connections
*rp
;
1086 struct hci_dev
*hdev
;
1087 struct list_head
*p
;
1094 hdev
= hci_dev_get(index
);
1096 return cmd_status(sk
, index
, MGMT_OP_GET_CONNECTIONS
, ENODEV
);
1098 hci_dev_lock_bh(hdev
);
1101 list_for_each(p
, &hdev
->conn_hash
.list
) {
1105 rp_len
= sizeof(*rp
) + (count
* sizeof(bdaddr_t
));
1106 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
1112 put_unaligned_le16(count
, &rp
->conn_count
);
1115 list_for_each(p
, &hdev
->conn_hash
.list
) {
1116 struct hci_conn
*c
= list_entry(p
, struct hci_conn
, list
);
1118 bacpy(&rp
->conn
[i
++], &c
->dst
);
1121 err
= cmd_complete(sk
, index
, MGMT_OP_GET_CONNECTIONS
, rp
, rp_len
);
1125 hci_dev_unlock_bh(hdev
);
1130 static int send_pin_code_neg_reply(struct sock
*sk
, u16 index
,
1131 struct hci_dev
*hdev
, struct mgmt_cp_pin_code_neg_reply
*cp
)
1133 struct pending_cmd
*cmd
;
1136 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_NEG_REPLY
, index
, cp
,
1141 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
, sizeof(cp
->bdaddr
),
1144 mgmt_pending_remove(cmd
);
1149 static int pin_code_reply(struct sock
*sk
, u16 index
, unsigned char *data
,
1152 struct hci_dev
*hdev
;
1153 struct hci_conn
*conn
;
1154 struct mgmt_cp_pin_code_reply
*cp
;
1155 struct mgmt_cp_pin_code_neg_reply ncp
;
1156 struct hci_cp_pin_code_reply reply
;
1157 struct pending_cmd
*cmd
;
1164 if (len
!= sizeof(*cp
))
1165 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
, EINVAL
);
1167 hdev
= hci_dev_get(index
);
1169 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
, ENODEV
);
1171 hci_dev_lock_bh(hdev
);
1173 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1174 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
, ENETDOWN
);
1178 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1180 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
, ENOTCONN
);
1184 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
&& cp
->pin_len
!= 16) {
1185 bacpy(&ncp
.bdaddr
, &cp
->bdaddr
);
1187 BT_ERR("PIN code is not 16 bytes long");
1189 err
= send_pin_code_neg_reply(sk
, index
, hdev
, &ncp
);
1191 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_REPLY
,
1197 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_REPLY
, index
, data
, len
);
1203 bacpy(&reply
.bdaddr
, &cp
->bdaddr
);
1204 reply
.pin_len
= cp
->pin_len
;
1205 memcpy(reply
.pin_code
, cp
->pin_code
, sizeof(reply
.pin_code
));
1207 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_REPLY
, sizeof(reply
), &reply
);
1209 mgmt_pending_remove(cmd
);
1212 hci_dev_unlock_bh(hdev
);
1218 static int pin_code_neg_reply(struct sock
*sk
, u16 index
, unsigned char *data
,
1221 struct hci_dev
*hdev
;
1222 struct mgmt_cp_pin_code_neg_reply
*cp
;
1229 if (len
!= sizeof(*cp
))
1230 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1233 hdev
= hci_dev_get(index
);
1235 return cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1238 hci_dev_lock_bh(hdev
);
1240 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1241 err
= cmd_status(sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
,
1246 err
= send_pin_code_neg_reply(sk
, index
, hdev
, cp
);
1249 hci_dev_unlock_bh(hdev
);
1255 static int set_io_capability(struct sock
*sk
, u16 index
, unsigned char *data
,
1258 struct hci_dev
*hdev
;
1259 struct mgmt_cp_set_io_capability
*cp
;
1265 if (len
!= sizeof(*cp
))
1266 return cmd_status(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
, EINVAL
);
1268 hdev
= hci_dev_get(index
);
1270 return cmd_status(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
, ENODEV
);
1272 hci_dev_lock_bh(hdev
);
1274 hdev
->io_capability
= cp
->io_capability
;
1276 BT_DBG("%s IO capability set to 0x%02x", hdev
->name
,
1277 hdev
->io_capability
);
1279 hci_dev_unlock_bh(hdev
);
1282 return cmd_complete(sk
, index
, MGMT_OP_SET_IO_CAPABILITY
, NULL
, 0);
1285 static inline struct pending_cmd
*find_pairing(struct hci_conn
*conn
)
1287 struct hci_dev
*hdev
= conn
->hdev
;
1288 struct list_head
*p
;
1290 list_for_each(p
, &cmd_list
) {
1291 struct pending_cmd
*cmd
;
1293 cmd
= list_entry(p
, struct pending_cmd
, list
);
1295 if (cmd
->opcode
!= MGMT_OP_PAIR_DEVICE
)
1298 if (cmd
->index
!= hdev
->id
)
1301 if (cmd
->user_data
!= conn
)
1310 static void pairing_complete(struct pending_cmd
*cmd
, u8 status
)
1312 struct mgmt_rp_pair_device rp
;
1313 struct hci_conn
*conn
= cmd
->user_data
;
1315 bacpy(&rp
.bdaddr
, &conn
->dst
);
1318 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_PAIR_DEVICE
, &rp
, sizeof(rp
));
1320 /* So we don't get further callbacks for this connection */
1321 conn
->connect_cfm_cb
= NULL
;
1322 conn
->security_cfm_cb
= NULL
;
1323 conn
->disconn_cfm_cb
= NULL
;
1327 mgmt_pending_remove(cmd
);
1330 static void pairing_complete_cb(struct hci_conn
*conn
, u8 status
)
1332 struct pending_cmd
*cmd
;
1334 BT_DBG("status %u", status
);
1336 cmd
= find_pairing(conn
);
1338 BT_DBG("Unable to find a pending command");
1342 pairing_complete(cmd
, status
);
1345 static int pair_device(struct sock
*sk
, u16 index
, unsigned char *data
, u16 len
)
1347 struct hci_dev
*hdev
;
1348 struct mgmt_cp_pair_device
*cp
;
1349 struct pending_cmd
*cmd
;
1350 u8 sec_level
, auth_type
;
1351 struct hci_conn
*conn
;
1358 if (len
!= sizeof(*cp
))
1359 return cmd_status(sk
, index
, MGMT_OP_PAIR_DEVICE
, EINVAL
);
1361 hdev
= hci_dev_get(index
);
1363 return cmd_status(sk
, index
, MGMT_OP_PAIR_DEVICE
, ENODEV
);
1365 hci_dev_lock_bh(hdev
);
1367 if (cp
->io_cap
== 0x03) {
1368 sec_level
= BT_SECURITY_MEDIUM
;
1369 auth_type
= HCI_AT_DEDICATED_BONDING
;
1371 sec_level
= BT_SECURITY_HIGH
;
1372 auth_type
= HCI_AT_DEDICATED_BONDING_MITM
;
1375 conn
= hci_connect(hdev
, ACL_LINK
, &cp
->bdaddr
, sec_level
, auth_type
);
1377 err
= PTR_ERR(conn
);
1381 if (conn
->connect_cfm_cb
) {
1383 err
= cmd_status(sk
, index
, MGMT_OP_PAIR_DEVICE
, EBUSY
);
1387 cmd
= mgmt_pending_add(sk
, MGMT_OP_PAIR_DEVICE
, index
, data
, len
);
1394 conn
->connect_cfm_cb
= pairing_complete_cb
;
1395 conn
->security_cfm_cb
= pairing_complete_cb
;
1396 conn
->disconn_cfm_cb
= pairing_complete_cb
;
1397 conn
->io_capability
= cp
->io_cap
;
1398 cmd
->user_data
= conn
;
1400 if (conn
->state
== BT_CONNECTED
&&
1401 hci_conn_security(conn
, sec_level
, auth_type
))
1402 pairing_complete(cmd
, 0);
1407 hci_dev_unlock_bh(hdev
);
1413 static int user_confirm_reply(struct sock
*sk
, u16 index
, unsigned char *data
,
1414 u16 len
, int success
)
1416 struct mgmt_cp_user_confirm_reply
*cp
= (void *) data
;
1417 u16 mgmt_op
, hci_op
;
1418 struct pending_cmd
*cmd
;
1419 struct hci_dev
*hdev
;
1425 mgmt_op
= MGMT_OP_USER_CONFIRM_REPLY
;
1426 hci_op
= HCI_OP_USER_CONFIRM_REPLY
;
1428 mgmt_op
= MGMT_OP_USER_CONFIRM_NEG_REPLY
;
1429 hci_op
= HCI_OP_USER_CONFIRM_NEG_REPLY
;
1432 if (len
!= sizeof(*cp
))
1433 return cmd_status(sk
, index
, mgmt_op
, EINVAL
);
1435 hdev
= hci_dev_get(index
);
1437 return cmd_status(sk
, index
, mgmt_op
, ENODEV
);
1439 hci_dev_lock_bh(hdev
);
1441 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1442 err
= cmd_status(sk
, index
, mgmt_op
, ENETDOWN
);
1446 cmd
= mgmt_pending_add(sk
, mgmt_op
, index
, data
, len
);
1452 err
= hci_send_cmd(hdev
, hci_op
, sizeof(cp
->bdaddr
), &cp
->bdaddr
);
1454 mgmt_pending_remove(cmd
);
1457 hci_dev_unlock_bh(hdev
);
1463 static int set_local_name(struct sock
*sk
, u16 index
, unsigned char *data
,
1466 struct mgmt_cp_set_local_name
*mgmt_cp
= (void *) data
;
1467 struct hci_cp_write_local_name hci_cp
;
1468 struct hci_dev
*hdev
;
1469 struct pending_cmd
*cmd
;
1474 if (len
!= sizeof(*mgmt_cp
))
1475 return cmd_status(sk
, index
, MGMT_OP_SET_LOCAL_NAME
, EINVAL
);
1477 hdev
= hci_dev_get(index
);
1479 return cmd_status(sk
, index
, MGMT_OP_SET_LOCAL_NAME
, ENODEV
);
1481 hci_dev_lock_bh(hdev
);
1483 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LOCAL_NAME
, index
, data
, len
);
1489 memcpy(hci_cp
.name
, mgmt_cp
->name
, sizeof(hci_cp
.name
));
1490 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_LOCAL_NAME
, sizeof(hci_cp
),
1493 mgmt_pending_remove(cmd
);
1496 hci_dev_unlock_bh(hdev
);
1502 static int read_local_oob_data(struct sock
*sk
, u16 index
)
1504 struct hci_dev
*hdev
;
1505 struct pending_cmd
*cmd
;
1508 BT_DBG("hci%u", index
);
1510 hdev
= hci_dev_get(index
);
1512 return cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
1515 hci_dev_lock_bh(hdev
);
1517 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
1518 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
1523 if (!(hdev
->features
[6] & LMP_SIMPLE_PAIR
)) {
1524 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
1529 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, index
)) {
1530 err
= cmd_status(sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
, EBUSY
);
1534 cmd
= mgmt_pending_add(sk
, MGMT_OP_READ_LOCAL_OOB_DATA
, index
, NULL
, 0);
1540 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_DATA
, 0, NULL
);
1542 mgmt_pending_remove(cmd
);
1545 hci_dev_unlock_bh(hdev
);
1551 static int add_remote_oob_data(struct sock
*sk
, u16 index
, unsigned char *data
,
1554 struct hci_dev
*hdev
;
1555 struct mgmt_cp_add_remote_oob_data
*cp
= (void *) data
;
1558 BT_DBG("hci%u ", index
);
1560 if (len
!= sizeof(*cp
))
1561 return cmd_status(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
1564 hdev
= hci_dev_get(index
);
1566 return cmd_status(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
1569 hci_dev_lock_bh(hdev
);
1571 err
= hci_add_remote_oob_data(hdev
, &cp
->bdaddr
, cp
->hash
,
1574 err
= cmd_status(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
, -err
);
1576 err
= cmd_complete(sk
, index
, MGMT_OP_ADD_REMOTE_OOB_DATA
, NULL
,
1579 hci_dev_unlock_bh(hdev
);
1585 static int remove_remote_oob_data(struct sock
*sk
, u16 index
,
1586 unsigned char *data
, u16 len
)
1588 struct hci_dev
*hdev
;
1589 struct mgmt_cp_remove_remote_oob_data
*cp
= (void *) data
;
1592 BT_DBG("hci%u ", index
);
1594 if (len
!= sizeof(*cp
))
1595 return cmd_status(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
1598 hdev
= hci_dev_get(index
);
1600 return cmd_status(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
1603 hci_dev_lock_bh(hdev
);
1605 err
= hci_remove_remote_oob_data(hdev
, &cp
->bdaddr
);
1607 err
= cmd_status(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
1610 err
= cmd_complete(sk
, index
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
1613 hci_dev_unlock_bh(hdev
);
1619 static int start_discovery(struct sock
*sk
, u16 index
)
1621 u8 lap
[3] = { 0x33, 0x8b, 0x9e };
1622 struct hci_cp_inquiry cp
;
1623 struct pending_cmd
*cmd
;
1624 struct hci_dev
*hdev
;
1627 BT_DBG("hci%u", index
);
1629 hdev
= hci_dev_get(index
);
1631 return cmd_status(sk
, index
, MGMT_OP_START_DISCOVERY
, ENODEV
);
1633 hci_dev_lock_bh(hdev
);
1635 cmd
= mgmt_pending_add(sk
, MGMT_OP_START_DISCOVERY
, index
, NULL
, 0);
1641 memset(&cp
, 0, sizeof(cp
));
1642 memcpy(&cp
.lap
, lap
, 3);
1646 err
= hci_send_cmd(hdev
, HCI_OP_INQUIRY
, sizeof(cp
), &cp
);
1648 mgmt_pending_remove(cmd
);
1651 hci_dev_unlock_bh(hdev
);
1657 static int stop_discovery(struct sock
*sk
, u16 index
)
1659 struct hci_dev
*hdev
;
1660 struct pending_cmd
*cmd
;
1663 BT_DBG("hci%u", index
);
1665 hdev
= hci_dev_get(index
);
1667 return cmd_status(sk
, index
, MGMT_OP_STOP_DISCOVERY
, ENODEV
);
1669 hci_dev_lock_bh(hdev
);
1671 cmd
= mgmt_pending_add(sk
, MGMT_OP_STOP_DISCOVERY
, index
, NULL
, 0);
1677 err
= hci_send_cmd(hdev
, HCI_OP_INQUIRY_CANCEL
, 0, NULL
);
1679 mgmt_pending_remove(cmd
);
1682 hci_dev_unlock_bh(hdev
);
1688 static int block_device(struct sock
*sk
, u16 index
, unsigned char *data
,
1691 struct hci_dev
*hdev
;
1692 struct mgmt_cp_block_device
*cp
;
1695 BT_DBG("hci%u", index
);
1699 if (len
!= sizeof(*cp
))
1700 return cmd_status(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
1703 hdev
= hci_dev_get(index
);
1705 return cmd_status(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
1708 err
= hci_blacklist_add(hdev
, &cp
->bdaddr
);
1711 err
= cmd_status(sk
, index
, MGMT_OP_BLOCK_DEVICE
, -err
);
1713 err
= cmd_complete(sk
, index
, MGMT_OP_BLOCK_DEVICE
,
1720 static int unblock_device(struct sock
*sk
, u16 index
, unsigned char *data
,
1723 struct hci_dev
*hdev
;
1724 struct mgmt_cp_unblock_device
*cp
;
1727 BT_DBG("hci%u", index
);
1731 if (len
!= sizeof(*cp
))
1732 return cmd_status(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
1735 hdev
= hci_dev_get(index
);
1737 return cmd_status(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
1740 err
= hci_blacklist_del(hdev
, &cp
->bdaddr
);
1743 err
= cmd_status(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
, -err
);
1745 err
= cmd_complete(sk
, index
, MGMT_OP_UNBLOCK_DEVICE
,
1752 int mgmt_control(struct sock
*sk
, struct msghdr
*msg
, size_t msglen
)
1755 struct mgmt_hdr
*hdr
;
1756 u16 opcode
, index
, len
;
1759 BT_DBG("got %zu bytes", msglen
);
1761 if (msglen
< sizeof(*hdr
))
1764 buf
= kmalloc(msglen
, GFP_KERNEL
);
1768 if (memcpy_fromiovec(buf
, msg
->msg_iov
, msglen
)) {
1773 hdr
= (struct mgmt_hdr
*) buf
;
1774 opcode
= get_unaligned_le16(&hdr
->opcode
);
1775 index
= get_unaligned_le16(&hdr
->index
);
1776 len
= get_unaligned_le16(&hdr
->len
);
1778 if (len
!= msglen
- sizeof(*hdr
)) {
1784 case MGMT_OP_READ_VERSION
:
1785 err
= read_version(sk
);
1787 case MGMT_OP_READ_INDEX_LIST
:
1788 err
= read_index_list(sk
);
1790 case MGMT_OP_READ_INFO
:
1791 err
= read_controller_info(sk
, index
);
1793 case MGMT_OP_SET_POWERED
:
1794 err
= set_powered(sk
, index
, buf
+ sizeof(*hdr
), len
);
1796 case MGMT_OP_SET_DISCOVERABLE
:
1797 err
= set_discoverable(sk
, index
, buf
+ sizeof(*hdr
), len
);
1799 case MGMT_OP_SET_CONNECTABLE
:
1800 err
= set_connectable(sk
, index
, buf
+ sizeof(*hdr
), len
);
1802 case MGMT_OP_SET_PAIRABLE
:
1803 err
= set_pairable(sk
, index
, buf
+ sizeof(*hdr
), len
);
1805 case MGMT_OP_ADD_UUID
:
1806 err
= add_uuid(sk
, index
, buf
+ sizeof(*hdr
), len
);
1808 case MGMT_OP_REMOVE_UUID
:
1809 err
= remove_uuid(sk
, index
, buf
+ sizeof(*hdr
), len
);
1811 case MGMT_OP_SET_DEV_CLASS
:
1812 err
= set_dev_class(sk
, index
, buf
+ sizeof(*hdr
), len
);
1814 case MGMT_OP_SET_SERVICE_CACHE
:
1815 err
= set_service_cache(sk
, index
, buf
+ sizeof(*hdr
), len
);
1817 case MGMT_OP_LOAD_KEYS
:
1818 err
= load_keys(sk
, index
, buf
+ sizeof(*hdr
), len
);
1820 case MGMT_OP_REMOVE_KEY
:
1821 err
= remove_key(sk
, index
, buf
+ sizeof(*hdr
), len
);
1823 case MGMT_OP_DISCONNECT
:
1824 err
= disconnect(sk
, index
, buf
+ sizeof(*hdr
), len
);
1826 case MGMT_OP_GET_CONNECTIONS
:
1827 err
= get_connections(sk
, index
);
1829 case MGMT_OP_PIN_CODE_REPLY
:
1830 err
= pin_code_reply(sk
, index
, buf
+ sizeof(*hdr
), len
);
1832 case MGMT_OP_PIN_CODE_NEG_REPLY
:
1833 err
= pin_code_neg_reply(sk
, index
, buf
+ sizeof(*hdr
), len
);
1835 case MGMT_OP_SET_IO_CAPABILITY
:
1836 err
= set_io_capability(sk
, index
, buf
+ sizeof(*hdr
), len
);
1838 case MGMT_OP_PAIR_DEVICE
:
1839 err
= pair_device(sk
, index
, buf
+ sizeof(*hdr
), len
);
1841 case MGMT_OP_USER_CONFIRM_REPLY
:
1842 err
= user_confirm_reply(sk
, index
, buf
+ sizeof(*hdr
), len
, 1);
1844 case MGMT_OP_USER_CONFIRM_NEG_REPLY
:
1845 err
= user_confirm_reply(sk
, index
, buf
+ sizeof(*hdr
), len
, 0);
1847 case MGMT_OP_SET_LOCAL_NAME
:
1848 err
= set_local_name(sk
, index
, buf
+ sizeof(*hdr
), len
);
1850 case MGMT_OP_READ_LOCAL_OOB_DATA
:
1851 err
= read_local_oob_data(sk
, index
);
1853 case MGMT_OP_ADD_REMOTE_OOB_DATA
:
1854 err
= add_remote_oob_data(sk
, index
, buf
+ sizeof(*hdr
), len
);
1856 case MGMT_OP_REMOVE_REMOTE_OOB_DATA
:
1857 err
= remove_remote_oob_data(sk
, index
, buf
+ sizeof(*hdr
),
1860 case MGMT_OP_START_DISCOVERY
:
1861 err
= start_discovery(sk
, index
);
1863 case MGMT_OP_STOP_DISCOVERY
:
1864 err
= stop_discovery(sk
, index
);
1866 case MGMT_OP_BLOCK_DEVICE
:
1867 err
= block_device(sk
, index
, buf
+ sizeof(*hdr
), len
);
1869 case MGMT_OP_UNBLOCK_DEVICE
:
1870 err
= unblock_device(sk
, index
, buf
+ sizeof(*hdr
), len
);
1873 BT_DBG("Unknown op %u", opcode
);
1874 err
= cmd_status(sk
, index
, opcode
, 0x01);
1888 int mgmt_index_added(u16 index
)
1890 return mgmt_event(MGMT_EV_INDEX_ADDED
, index
, NULL
, 0, NULL
);
1893 int mgmt_index_removed(u16 index
)
1895 return mgmt_event(MGMT_EV_INDEX_REMOVED
, index
, NULL
, 0, NULL
);
1903 static void mode_rsp(struct pending_cmd
*cmd
, void *data
)
1905 struct mgmt_mode
*cp
= cmd
->param
;
1906 struct cmd_lookup
*match
= data
;
1908 if (cp
->val
!= match
->val
)
1911 send_mode_rsp(cmd
->sk
, cmd
->opcode
, cmd
->index
, cp
->val
);
1913 list_del(&cmd
->list
);
1915 if (match
->sk
== NULL
) {
1916 match
->sk
= cmd
->sk
;
1917 sock_hold(match
->sk
);
1920 mgmt_pending_free(cmd
);
1923 int mgmt_powered(u16 index
, u8 powered
)
1925 struct mgmt_mode ev
;
1926 struct cmd_lookup match
= { powered
, NULL
};
1929 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, index
, mode_rsp
, &match
);
1933 ret
= mgmt_event(MGMT_EV_POWERED
, index
, &ev
, sizeof(ev
), match
.sk
);
1941 int mgmt_discoverable(u16 index
, u8 discoverable
)
1943 struct mgmt_mode ev
;
1944 struct cmd_lookup match
= { discoverable
, NULL
};
1947 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, index
, mode_rsp
, &match
);
1949 ev
.val
= discoverable
;
1951 ret
= mgmt_event(MGMT_EV_DISCOVERABLE
, index
, &ev
, sizeof(ev
),
1960 int mgmt_connectable(u16 index
, u8 connectable
)
1962 struct mgmt_mode ev
;
1963 struct cmd_lookup match
= { connectable
, NULL
};
1966 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, index
, mode_rsp
, &match
);
1968 ev
.val
= connectable
;
1970 ret
= mgmt_event(MGMT_EV_CONNECTABLE
, index
, &ev
, sizeof(ev
), match
.sk
);
1978 int mgmt_new_key(u16 index
, struct link_key
*key
, u8 persistent
)
1980 struct mgmt_ev_new_key
*ev
;
1983 total
= sizeof(struct mgmt_ev_new_key
) + key
->dlen
;
1984 ev
= kzalloc(total
, GFP_ATOMIC
);
1988 bacpy(&ev
->key
.bdaddr
, &key
->bdaddr
);
1989 ev
->key
.type
= key
->type
;
1990 memcpy(ev
->key
.val
, key
->val
, 16);
1991 ev
->key
.pin_len
= key
->pin_len
;
1992 ev
->key
.dlen
= key
->dlen
;
1993 ev
->store_hint
= persistent
;
1995 memcpy(ev
->key
.data
, key
->data
, key
->dlen
);
1997 err
= mgmt_event(MGMT_EV_NEW_KEY
, index
, ev
, total
, NULL
);
2004 int mgmt_connected(u16 index
, bdaddr_t
*bdaddr
)
2006 struct mgmt_ev_connected ev
;
2008 bacpy(&ev
.bdaddr
, bdaddr
);
2010 return mgmt_event(MGMT_EV_CONNECTED
, index
, &ev
, sizeof(ev
), NULL
);
2013 static void disconnect_rsp(struct pending_cmd
*cmd
, void *data
)
2015 struct mgmt_cp_disconnect
*cp
= cmd
->param
;
2016 struct sock
**sk
= data
;
2017 struct mgmt_rp_disconnect rp
;
2019 bacpy(&rp
.bdaddr
, &cp
->bdaddr
);
2021 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
, &rp
, sizeof(rp
));
2026 mgmt_pending_remove(cmd
);
2029 int mgmt_disconnected(u16 index
, bdaddr_t
*bdaddr
)
2031 struct mgmt_ev_disconnected ev
;
2032 struct sock
*sk
= NULL
;
2035 mgmt_pending_foreach(MGMT_OP_DISCONNECT
, index
, disconnect_rsp
, &sk
);
2037 bacpy(&ev
.bdaddr
, bdaddr
);
2039 err
= mgmt_event(MGMT_EV_DISCONNECTED
, index
, &ev
, sizeof(ev
), sk
);
2047 int mgmt_disconnect_failed(u16 index
)
2049 struct pending_cmd
*cmd
;
2052 cmd
= mgmt_pending_find(MGMT_OP_DISCONNECT
, index
);
2056 err
= cmd_status(cmd
->sk
, index
, MGMT_OP_DISCONNECT
, EIO
);
2058 mgmt_pending_remove(cmd
);
2063 int mgmt_connect_failed(u16 index
, bdaddr_t
*bdaddr
, u8 status
)
2065 struct mgmt_ev_connect_failed ev
;
2067 bacpy(&ev
.bdaddr
, bdaddr
);
2070 return mgmt_event(MGMT_EV_CONNECT_FAILED
, index
, &ev
, sizeof(ev
), NULL
);
2073 int mgmt_pin_code_request(u16 index
, bdaddr_t
*bdaddr
, u8 secure
)
2075 struct mgmt_ev_pin_code_request ev
;
2077 bacpy(&ev
.bdaddr
, bdaddr
);
2080 return mgmt_event(MGMT_EV_PIN_CODE_REQUEST
, index
, &ev
, sizeof(ev
),
2084 int mgmt_pin_code_reply_complete(u16 index
, bdaddr_t
*bdaddr
, u8 status
)
2086 struct pending_cmd
*cmd
;
2087 struct mgmt_rp_pin_code_reply rp
;
2090 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY
, index
);
2094 bacpy(&rp
.bdaddr
, bdaddr
);
2097 err
= cmd_complete(cmd
->sk
, index
, MGMT_OP_PIN_CODE_REPLY
, &rp
,
2100 mgmt_pending_remove(cmd
);
2105 int mgmt_pin_code_neg_reply_complete(u16 index
, bdaddr_t
*bdaddr
, u8 status
)
2107 struct pending_cmd
*cmd
;
2108 struct mgmt_rp_pin_code_reply rp
;
2111 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY
, index
);
2115 bacpy(&rp
.bdaddr
, bdaddr
);
2118 err
= cmd_complete(cmd
->sk
, index
, MGMT_OP_PIN_CODE_NEG_REPLY
, &rp
,
2121 mgmt_pending_remove(cmd
);
2126 int mgmt_user_confirm_request(u16 index
, bdaddr_t
*bdaddr
, __le32 value
,
2129 struct mgmt_ev_user_confirm_request ev
;
2131 BT_DBG("hci%u", index
);
2133 bacpy(&ev
.bdaddr
, bdaddr
);
2134 ev
.confirm_hint
= confirm_hint
;
2135 put_unaligned_le32(value
, &ev
.value
);
2137 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST
, index
, &ev
, sizeof(ev
),
2141 static int confirm_reply_complete(u16 index
, bdaddr_t
*bdaddr
, u8 status
,
2144 struct pending_cmd
*cmd
;
2145 struct mgmt_rp_user_confirm_reply rp
;
2148 cmd
= mgmt_pending_find(opcode
, index
);
2152 bacpy(&rp
.bdaddr
, bdaddr
);
2154 err
= cmd_complete(cmd
->sk
, index
, opcode
, &rp
, sizeof(rp
));
2156 mgmt_pending_remove(cmd
);
2161 int mgmt_user_confirm_reply_complete(u16 index
, bdaddr_t
*bdaddr
, u8 status
)
2163 return confirm_reply_complete(index
, bdaddr
, status
,
2164 MGMT_OP_USER_CONFIRM_REPLY
);
2167 int mgmt_user_confirm_neg_reply_complete(u16 index
, bdaddr_t
*bdaddr
, u8 status
)
2169 return confirm_reply_complete(index
, bdaddr
, status
,
2170 MGMT_OP_USER_CONFIRM_NEG_REPLY
);
2173 int mgmt_auth_failed(u16 index
, bdaddr_t
*bdaddr
, u8 status
)
2175 struct mgmt_ev_auth_failed ev
;
2177 bacpy(&ev
.bdaddr
, bdaddr
);
2180 return mgmt_event(MGMT_EV_AUTH_FAILED
, index
, &ev
, sizeof(ev
), NULL
);
2183 int mgmt_set_local_name_complete(u16 index
, u8
*name
, u8 status
)
2185 struct pending_cmd
*cmd
;
2186 struct hci_dev
*hdev
;
2187 struct mgmt_cp_set_local_name ev
;
2190 memset(&ev
, 0, sizeof(ev
));
2191 memcpy(ev
.name
, name
, HCI_MAX_NAME_LENGTH
);
2193 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, index
);
2198 err
= cmd_status(cmd
->sk
, index
, MGMT_OP_SET_LOCAL_NAME
, EIO
);
2202 hdev
= hci_dev_get(index
);
2204 hci_dev_lock_bh(hdev
);
2206 hci_dev_unlock_bh(hdev
);
2210 err
= cmd_complete(cmd
->sk
, index
, MGMT_OP_SET_LOCAL_NAME
, &ev
,
2216 err
= mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, index
, &ev
, sizeof(ev
),
2217 cmd
? cmd
->sk
: NULL
);
2221 mgmt_pending_remove(cmd
);
2225 int mgmt_read_local_oob_data_reply_complete(u16 index
, u8
*hash
, u8
*randomizer
,
2228 struct pending_cmd
*cmd
;
2231 BT_DBG("hci%u status %u", index
, status
);
2233 cmd
= mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, index
);
2238 err
= cmd_status(cmd
->sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2241 struct mgmt_rp_read_local_oob_data rp
;
2243 memcpy(rp
.hash
, hash
, sizeof(rp
.hash
));
2244 memcpy(rp
.randomizer
, randomizer
, sizeof(rp
.randomizer
));
2246 err
= cmd_complete(cmd
->sk
, index
, MGMT_OP_READ_LOCAL_OOB_DATA
,
2250 mgmt_pending_remove(cmd
);
2255 int mgmt_device_found(u16 index
, bdaddr_t
*bdaddr
, u8
*dev_class
, s8 rssi
,
2258 struct mgmt_ev_device_found ev
;
2260 memset(&ev
, 0, sizeof(ev
));
2262 bacpy(&ev
.bdaddr
, bdaddr
);
2263 memcpy(ev
.dev_class
, dev_class
, sizeof(ev
.dev_class
));
2267 memcpy(ev
.eir
, eir
, sizeof(ev
.eir
));
2269 return mgmt_event(MGMT_EV_DEVICE_FOUND
, index
, &ev
, sizeof(ev
), NULL
);
2272 int mgmt_remote_name(u16 index
, bdaddr_t
*bdaddr
, u8
*name
)
2274 struct mgmt_ev_remote_name ev
;
2276 memset(&ev
, 0, sizeof(ev
));
2278 bacpy(&ev
.bdaddr
, bdaddr
);
2279 memcpy(ev
.name
, name
, HCI_MAX_NAME_LENGTH
);
2281 return mgmt_event(MGMT_EV_REMOTE_NAME
, index
, &ev
, sizeof(ev
), NULL
);
2284 int mgmt_discovering(u16 index
, u8 discovering
)
2286 return mgmt_event(MGMT_EV_DISCOVERING
, index
, &discovering
,
2287 sizeof(discovering
), NULL
);