1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #define MGMT_INDEX_NONE 0xFFFF
26
27 #define MGMT_STATUS_SUCCESS 0x00
28 #define MGMT_STATUS_UNKNOWN_COMMAND 0x01
29 #define MGMT_STATUS_NOT_CONNECTED 0x02
30 #define MGMT_STATUS_FAILED 0x03
31 #define MGMT_STATUS_CONNECT_FAILED 0x04
32 #define MGMT_STATUS_AUTH_FAILED 0x05
33 #define MGMT_STATUS_NOT_PAIRED 0x06
34 #define MGMT_STATUS_NO_RESOURCES 0x07
35 #define MGMT_STATUS_TIMEOUT 0x08
36 #define MGMT_STATUS_ALREADY_CONNECTED 0x09
37 #define MGMT_STATUS_BUSY 0x0a
38 #define MGMT_STATUS_REJECTED 0x0b
39 #define MGMT_STATUS_NOT_SUPPORTED 0x0c
40 #define MGMT_STATUS_INVALID_PARAMS 0x0d
41 #define MGMT_STATUS_DISCONNECTED 0x0e
42 #define MGMT_STATUS_NOT_POWERED 0x0f
43 #define MGMT_STATUS_CANCELLED 0x10
44 #define MGMT_STATUS_INVALID_INDEX 0x11
45 #define MGMT_STATUS_RFKILLED 0x12
46 #define MGMT_STATUS_ALREADY_PAIRED 0x13
47 #define MGMT_STATUS_PERMISSION_DENIED 0x14
48
49 struct mgmt_hdr {
50 __le16 opcode;
51 __le16 index;
52 __le16 len;
53 } __packed;
54
55 struct mgmt_addr_info {
56 bdaddr_t bdaddr;
57 __u8 type;
58 } __packed;
59 #define MGMT_ADDR_INFO_SIZE 7
60
61 #define MGMT_OP_READ_VERSION 0x0001
62 #define MGMT_READ_VERSION_SIZE 0
63 struct mgmt_rp_read_version {
64 __u8 version;
65 __le16 revision;
66 } __packed;
67
68 #define MGMT_OP_READ_COMMANDS 0x0002
69 #define MGMT_READ_COMMANDS_SIZE 0
70 struct mgmt_rp_read_commands {
71 __le16 num_commands;
72 __le16 num_events;
73 __le16 opcodes[0];
74 } __packed;
75
76 #define MGMT_OP_READ_INDEX_LIST 0x0003
77 #define MGMT_READ_INDEX_LIST_SIZE 0
78 struct mgmt_rp_read_index_list {
79 __le16 num_controllers;
80 __le16 index[0];
81 } __packed;
82
83
84
85 #define MGMT_MAX_NAME_LENGTH (HCI_MAX_NAME_LENGTH + 1)
86 #define MGMT_MAX_SHORT_NAME_LENGTH (HCI_MAX_SHORT_NAME_LENGTH + 1)
87
88 #define MGMT_SETTING_POWERED 0x00000001
89 #define MGMT_SETTING_CONNECTABLE 0x00000002
90 #define MGMT_SETTING_FAST_CONNECTABLE 0x00000004
91 #define MGMT_SETTING_DISCOVERABLE 0x00000008
92 #define MGMT_SETTING_BONDABLE 0x00000010
93 #define MGMT_SETTING_LINK_SECURITY 0x00000020
94 #define MGMT_SETTING_SSP 0x00000040
95 #define MGMT_SETTING_BREDR 0x00000080
96 #define MGMT_SETTING_HS 0x00000100
97 #define MGMT_SETTING_LE 0x00000200
98 #define MGMT_SETTING_ADVERTISING 0x00000400
99 #define MGMT_SETTING_SECURE_CONN 0x00000800
100 #define MGMT_SETTING_DEBUG_KEYS 0x00001000
101 #define MGMT_SETTING_PRIVACY 0x00002000
102 #define MGMT_SETTING_CONFIGURATION 0x00004000
103 #define MGMT_SETTING_STATIC_ADDRESS 0x00008000
104 #define MGMT_SETTING_PHY_CONFIGURATION 0x00010000
105
106 #define MGMT_OP_READ_INFO 0x0004
107 #define MGMT_READ_INFO_SIZE 0
108 struct mgmt_rp_read_info {
109 bdaddr_t bdaddr;
110 __u8 version;
111 __le16 manufacturer;
112 __le32 supported_settings;
113 __le32 current_settings;
114 __u8 dev_class[3];
115 __u8 name[MGMT_MAX_NAME_LENGTH];
116 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
117 } __packed;
118
119 struct mgmt_mode {
120 __u8 val;
121 } __packed;
122
123 #define MGMT_SETTING_SIZE 1
124
125 #define MGMT_OP_SET_POWERED 0x0005
126
127 #define MGMT_OP_SET_DISCOVERABLE 0x0006
128 struct mgmt_cp_set_discoverable {
129 __u8 val;
130 __le16 timeout;
131 } __packed;
132 #define MGMT_SET_DISCOVERABLE_SIZE 3
133
134 #define MGMT_OP_SET_CONNECTABLE 0x0007
135
136 #define MGMT_OP_SET_FAST_CONNECTABLE 0x0008
137
138 #define MGMT_OP_SET_BONDABLE 0x0009
139
140 #define MGMT_OP_SET_LINK_SECURITY 0x000A
141
142 #define MGMT_OP_SET_SSP 0x000B
143
144 #define MGMT_OP_SET_HS 0x000C
145
146 #define MGMT_OP_SET_LE 0x000D
147 #define MGMT_OP_SET_DEV_CLASS 0x000E
148 struct mgmt_cp_set_dev_class {
149 __u8 major;
150 __u8 minor;
151 } __packed;
152 #define MGMT_SET_DEV_CLASS_SIZE 2
153
154 #define MGMT_OP_SET_LOCAL_NAME 0x000F
155 struct mgmt_cp_set_local_name {
156 __u8 name[MGMT_MAX_NAME_LENGTH];
157 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
158 } __packed;
159 #define MGMT_SET_LOCAL_NAME_SIZE 260
160
161 #define MGMT_OP_ADD_UUID 0x0010
162 struct mgmt_cp_add_uuid {
163 __u8 uuid[16];
164 __u8 svc_hint;
165 } __packed;
166 #define MGMT_ADD_UUID_SIZE 17
167
168 #define MGMT_OP_REMOVE_UUID 0x0011
169 struct mgmt_cp_remove_uuid {
170 __u8 uuid[16];
171 } __packed;
172 #define MGMT_REMOVE_UUID_SIZE 16
173
174 struct mgmt_link_key_info {
175 struct mgmt_addr_info addr;
176 __u8 type;
177 __u8 val[16];
178 __u8 pin_len;
179 } __packed;
180
181 #define MGMT_OP_LOAD_LINK_KEYS 0x0012
182 struct mgmt_cp_load_link_keys {
183 __u8 debug_keys;
184 __le16 key_count;
185 struct mgmt_link_key_info keys[0];
186 } __packed;
187 #define MGMT_LOAD_LINK_KEYS_SIZE 3
188
189 #define MGMT_LTK_UNAUTHENTICATED 0x00
190 #define MGMT_LTK_AUTHENTICATED 0x01
191 #define MGMT_LTK_P256_UNAUTH 0x02
192 #define MGMT_LTK_P256_AUTH 0x03
193 #define MGMT_LTK_P256_DEBUG 0x04
194
195 struct mgmt_ltk_info {
196 struct mgmt_addr_info addr;
197 __u8 type;
198 __u8 master;
199 __u8 enc_size;
200 __le16 ediv;
201 __le64 rand;
202 __u8 val[16];
203 } __packed;
204
205 #define MGMT_OP_LOAD_LONG_TERM_KEYS 0x0013
206 struct mgmt_cp_load_long_term_keys {
207 __le16 key_count;
208 struct mgmt_ltk_info keys[0];
209 } __packed;
210 #define MGMT_LOAD_LONG_TERM_KEYS_SIZE 2
211
212 #define MGMT_OP_DISCONNECT 0x0014
213 struct mgmt_cp_disconnect {
214 struct mgmt_addr_info addr;
215 } __packed;
216 #define MGMT_DISCONNECT_SIZE MGMT_ADDR_INFO_SIZE
217 struct mgmt_rp_disconnect {
218 struct mgmt_addr_info addr;
219 } __packed;
220
221 #define MGMT_OP_GET_CONNECTIONS 0x0015
222 #define MGMT_GET_CONNECTIONS_SIZE 0
223 struct mgmt_rp_get_connections {
224 __le16 conn_count;
225 struct mgmt_addr_info addr[0];
226 } __packed;
227
228 #define MGMT_OP_PIN_CODE_REPLY 0x0016
229 struct mgmt_cp_pin_code_reply {
230 struct mgmt_addr_info addr;
231 __u8 pin_len;
232 __u8 pin_code[16];
233 } __packed;
234 #define MGMT_PIN_CODE_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 17)
235 struct mgmt_rp_pin_code_reply {
236 struct mgmt_addr_info addr;
237 } __packed;
238
239 #define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017
240 struct mgmt_cp_pin_code_neg_reply {
241 struct mgmt_addr_info addr;
242 } __packed;
243 #define MGMT_PIN_CODE_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE
244
245 #define MGMT_OP_SET_IO_CAPABILITY 0x0018
246 struct mgmt_cp_set_io_capability {
247 __u8 io_capability;
248 } __packed;
249 #define MGMT_SET_IO_CAPABILITY_SIZE 1
250
251 #define MGMT_OP_PAIR_DEVICE 0x0019
252 struct mgmt_cp_pair_device {
253 struct mgmt_addr_info addr;
254 __u8 io_cap;
255 } __packed;
256 #define MGMT_PAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1)
257 struct mgmt_rp_pair_device {
258 struct mgmt_addr_info addr;
259 } __packed;
260
261 #define MGMT_OP_CANCEL_PAIR_DEVICE 0x001A
262 #define MGMT_CANCEL_PAIR_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
263
264 #define MGMT_OP_UNPAIR_DEVICE 0x001B
265 struct mgmt_cp_unpair_device {
266 struct mgmt_addr_info addr;
267 __u8 disconnect;
268 } __packed;
269 #define MGMT_UNPAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1)
270 struct mgmt_rp_unpair_device {
271 struct mgmt_addr_info addr;
272 };
273
274 #define MGMT_OP_USER_CONFIRM_REPLY 0x001C
275 struct mgmt_cp_user_confirm_reply {
276 struct mgmt_addr_info addr;
277 } __packed;
278 #define MGMT_USER_CONFIRM_REPLY_SIZE MGMT_ADDR_INFO_SIZE
279 struct mgmt_rp_user_confirm_reply {
280 struct mgmt_addr_info addr;
281 } __packed;
282
283 #define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D
284 struct mgmt_cp_user_confirm_neg_reply {
285 struct mgmt_addr_info addr;
286 } __packed;
287 #define MGMT_USER_CONFIRM_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE
288
289 #define MGMT_OP_USER_PASSKEY_REPLY 0x001E
290 struct mgmt_cp_user_passkey_reply {
291 struct mgmt_addr_info addr;
292 __le32 passkey;
293 } __packed;
294 #define MGMT_USER_PASSKEY_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 4)
295 struct mgmt_rp_user_passkey_reply {
296 struct mgmt_addr_info addr;
297 } __packed;
298
299 #define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F
300 struct mgmt_cp_user_passkey_neg_reply {
301 struct mgmt_addr_info addr;
302 } __packed;
303 #define MGMT_USER_PASSKEY_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE
304
305 #define MGMT_OP_READ_LOCAL_OOB_DATA 0x0020
306 #define MGMT_READ_LOCAL_OOB_DATA_SIZE 0
307 struct mgmt_rp_read_local_oob_data {
308 __u8 hash192[16];
309 __u8 rand192[16];
310 __u8 hash256[16];
311 __u8 rand256[16];
312 } __packed;
313
314 #define MGMT_OP_ADD_REMOTE_OOB_DATA 0x0021
315 struct mgmt_cp_add_remote_oob_data {
316 struct mgmt_addr_info addr;
317 __u8 hash[16];
318 __u8 rand[16];
319 } __packed;
320 #define MGMT_ADD_REMOTE_OOB_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 32)
321 struct mgmt_cp_add_remote_oob_ext_data {
322 struct mgmt_addr_info addr;
323 __u8 hash192[16];
324 __u8 rand192[16];
325 __u8 hash256[16];
326 __u8 rand256[16];
327 } __packed;
328 #define MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 64)
329
330 #define MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0022
331 struct mgmt_cp_remove_remote_oob_data {
332 struct mgmt_addr_info addr;
333 } __packed;
334 #define MGMT_REMOVE_REMOTE_OOB_DATA_SIZE MGMT_ADDR_INFO_SIZE
335
336 #define MGMT_OP_START_DISCOVERY 0x0023
337 struct mgmt_cp_start_discovery {
338 __u8 type;
339 } __packed;
340 #define MGMT_START_DISCOVERY_SIZE 1
341
342 #define MGMT_OP_STOP_DISCOVERY 0x0024
343 struct mgmt_cp_stop_discovery {
344 __u8 type;
345 } __packed;
346 #define MGMT_STOP_DISCOVERY_SIZE 1
347
348 #define MGMT_OP_CONFIRM_NAME 0x0025
349 struct mgmt_cp_confirm_name {
350 struct mgmt_addr_info addr;
351 __u8 name_known;
352 } __packed;
353 #define MGMT_CONFIRM_NAME_SIZE (MGMT_ADDR_INFO_SIZE + 1)
354 struct mgmt_rp_confirm_name {
355 struct mgmt_addr_info addr;
356 } __packed;
357
358 #define MGMT_OP_BLOCK_DEVICE 0x0026
359 struct mgmt_cp_block_device {
360 struct mgmt_addr_info addr;
361 } __packed;
362 #define MGMT_BLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
363
364 #define MGMT_OP_UNBLOCK_DEVICE 0x0027
365 struct mgmt_cp_unblock_device {
366 struct mgmt_addr_info addr;
367 } __packed;
368 #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
369
370 #define MGMT_OP_SET_DEVICE_ID 0x0028
371 struct mgmt_cp_set_device_id {
372 __le16 source;
373 __le16 vendor;
374 __le16 product;
375 __le16 version;
376 } __packed;
377 #define MGMT_SET_DEVICE_ID_SIZE 8
378
379 #define MGMT_OP_SET_ADVERTISING 0x0029
380
381 #define MGMT_OP_SET_BREDR 0x002A
382
383 #define MGMT_OP_SET_STATIC_ADDRESS 0x002B
384 struct mgmt_cp_set_static_address {
385 bdaddr_t bdaddr;
386 } __packed;
387 #define MGMT_SET_STATIC_ADDRESS_SIZE 6
388
389 #define MGMT_OP_SET_SCAN_PARAMS 0x002C
390 struct mgmt_cp_set_scan_params {
391 __le16 interval;
392 __le16 window;
393 } __packed;
394 #define MGMT_SET_SCAN_PARAMS_SIZE 4
395
396 #define MGMT_OP_SET_SECURE_CONN 0x002D
397
398 #define MGMT_OP_SET_DEBUG_KEYS 0x002E
399
400 #define MGMT_OP_SET_PRIVACY 0x002F
401 struct mgmt_cp_set_privacy {
402 __u8 privacy;
403 __u8 irk[16];
404 } __packed;
405 #define MGMT_SET_PRIVACY_SIZE 17
406
407 struct mgmt_irk_info {
408 struct mgmt_addr_info addr;
409 __u8 val[16];
410 } __packed;
411
412 #define MGMT_OP_LOAD_IRKS 0x0030
413 struct mgmt_cp_load_irks {
414 __le16 irk_count;
415 struct mgmt_irk_info irks[0];
416 } __packed;
417 #define MGMT_LOAD_IRKS_SIZE 2
418
419 #define MGMT_OP_GET_CONN_INFO 0x0031
420 struct mgmt_cp_get_conn_info {
421 struct mgmt_addr_info addr;
422 } __packed;
423 #define MGMT_GET_CONN_INFO_SIZE MGMT_ADDR_INFO_SIZE
424 struct mgmt_rp_get_conn_info {
425 struct mgmt_addr_info addr;
426 __s8 rssi;
427 __s8 tx_power;
428 __s8 max_tx_power;
429 } __packed;
430
431 #define MGMT_OP_GET_CLOCK_INFO 0x0032
432 struct mgmt_cp_get_clock_info {
433 struct mgmt_addr_info addr;
434 } __packed;
435 #define MGMT_GET_CLOCK_INFO_SIZE MGMT_ADDR_INFO_SIZE
436 struct mgmt_rp_get_clock_info {
437 struct mgmt_addr_info addr;
438 __le32 local_clock;
439 __le32 piconet_clock;
440 __le16 accuracy;
441 } __packed;
442
443 #define MGMT_OP_ADD_DEVICE 0x0033
444 struct mgmt_cp_add_device {
445 struct mgmt_addr_info addr;
446 __u8 action;
447 } __packed;
448 #define MGMT_ADD_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1)
449
450 #define MGMT_OP_REMOVE_DEVICE 0x0034
451 struct mgmt_cp_remove_device {
452 struct mgmt_addr_info addr;
453 } __packed;
454 #define MGMT_REMOVE_DEVICE_SIZE MGMT_ADDR_INFO_SIZE
455
456 struct mgmt_conn_param {
457 struct mgmt_addr_info addr;
458 __le16 min_interval;
459 __le16 max_interval;
460 __le16 latency;
461 __le16 timeout;
462 } __packed;
463
464 #define MGMT_OP_LOAD_CONN_PARAM 0x0035
465 struct mgmt_cp_load_conn_param {
466 __le16 param_count;
467 struct mgmt_conn_param params[0];
468 } __packed;
469 #define MGMT_LOAD_CONN_PARAM_SIZE 2
470
471 #define MGMT_OP_READ_UNCONF_INDEX_LIST 0x0036
472 #define MGMT_READ_UNCONF_INDEX_LIST_SIZE 0
473 struct mgmt_rp_read_unconf_index_list {
474 __le16 num_controllers;
475 __le16 index[0];
476 } __packed;
477
478 #define MGMT_OPTION_EXTERNAL_CONFIG 0x00000001
479 #define MGMT_OPTION_PUBLIC_ADDRESS 0x00000002
480
481 #define MGMT_OP_READ_CONFIG_INFO 0x0037
482 #define MGMT_READ_CONFIG_INFO_SIZE 0
483 struct mgmt_rp_read_config_info {
484 __le16 manufacturer;
485 __le32 supported_options;
486 __le32 missing_options;
487 } __packed;
488
489 #define MGMT_OP_SET_EXTERNAL_CONFIG 0x0038
490 struct mgmt_cp_set_external_config {
491 __u8 config;
492 } __packed;
493 #define MGMT_SET_EXTERNAL_CONFIG_SIZE 1
494
495 #define MGMT_OP_SET_PUBLIC_ADDRESS 0x0039
496 struct mgmt_cp_set_public_address {
497 bdaddr_t bdaddr;
498 } __packed;
499 #define MGMT_SET_PUBLIC_ADDRESS_SIZE 6
500
501 #define MGMT_OP_START_SERVICE_DISCOVERY 0x003A
502 struct mgmt_cp_start_service_discovery {
503 __u8 type;
504 __s8 rssi;
505 __le16 uuid_count;
506 __u8 uuids[0][16];
507 } __packed;
508 #define MGMT_START_SERVICE_DISCOVERY_SIZE 4
509
510 #define MGMT_OP_READ_LOCAL_OOB_EXT_DATA 0x003B
511 struct mgmt_cp_read_local_oob_ext_data {
512 __u8 type;
513 } __packed;
514 #define MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE 1
515 struct mgmt_rp_read_local_oob_ext_data {
516 __u8 type;
517 __le16 eir_len;
518 __u8 eir[0];
519 } __packed;
520
521 #define MGMT_OP_READ_EXT_INDEX_LIST 0x003C
522 #define MGMT_READ_EXT_INDEX_LIST_SIZE 0
523 struct mgmt_rp_read_ext_index_list {
524 __le16 num_controllers;
525 struct {
526 __le16 index;
527 __u8 type;
528 __u8 bus;
529 } entry[0];
530 } __packed;
531
532 #define MGMT_OP_READ_ADV_FEATURES 0x0003D
533 #define MGMT_READ_ADV_FEATURES_SIZE 0
534 struct mgmt_rp_read_adv_features {
535 __le32 supported_flags;
536 __u8 max_adv_data_len;
537 __u8 max_scan_rsp_len;
538 __u8 max_instances;
539 __u8 num_instances;
540 __u8 instance[0];
541 } __packed;
542
543 #define MGMT_OP_ADD_ADVERTISING 0x003E
544 struct mgmt_cp_add_advertising {
545 __u8 instance;
546 __le32 flags;
547 __le16 duration;
548 __le16 timeout;
549 __u8 adv_data_len;
550 __u8 scan_rsp_len;
551 __u8 data[0];
552 } __packed;
553 #define MGMT_ADD_ADVERTISING_SIZE 11
554 struct mgmt_rp_add_advertising {
555 __u8 instance;
556 } __packed;
557
558 #define MGMT_ADV_FLAG_CONNECTABLE BIT(0)
559 #define MGMT_ADV_FLAG_DISCOV BIT(1)
560 #define MGMT_ADV_FLAG_LIMITED_DISCOV BIT(2)
561 #define MGMT_ADV_FLAG_MANAGED_FLAGS BIT(3)
562 #define MGMT_ADV_FLAG_TX_POWER BIT(4)
563 #define MGMT_ADV_FLAG_APPEARANCE BIT(5)
564 #define MGMT_ADV_FLAG_LOCAL_NAME BIT(6)
565 #define MGMT_ADV_FLAG_SEC_1M BIT(7)
566 #define MGMT_ADV_FLAG_SEC_2M BIT(8)
567 #define MGMT_ADV_FLAG_SEC_CODED BIT(9)
568
569 #define MGMT_ADV_FLAG_SEC_MASK (MGMT_ADV_FLAG_SEC_1M | MGMT_ADV_FLAG_SEC_2M | \
570 MGMT_ADV_FLAG_SEC_CODED)
571
572 #define MGMT_OP_REMOVE_ADVERTISING 0x003F
573 struct mgmt_cp_remove_advertising {
574 __u8 instance;
575 } __packed;
576 #define MGMT_REMOVE_ADVERTISING_SIZE 1
577 struct mgmt_rp_remove_advertising {
578 __u8 instance;
579 } __packed;
580
581 #define MGMT_OP_GET_ADV_SIZE_INFO 0x0040
582 struct mgmt_cp_get_adv_size_info {
583 __u8 instance;
584 __le32 flags;
585 } __packed;
586 #define MGMT_GET_ADV_SIZE_INFO_SIZE 5
587 struct mgmt_rp_get_adv_size_info {
588 __u8 instance;
589 __le32 flags;
590 __u8 max_adv_data_len;
591 __u8 max_scan_rsp_len;
592 } __packed;
593
594 #define MGMT_OP_START_LIMITED_DISCOVERY 0x0041
595
596 #define MGMT_OP_READ_EXT_INFO 0x0042
597 #define MGMT_READ_EXT_INFO_SIZE 0
598 struct mgmt_rp_read_ext_info {
599 bdaddr_t bdaddr;
600 __u8 version;
601 __le16 manufacturer;
602 __le32 supported_settings;
603 __le32 current_settings;
604 __le16 eir_len;
605 __u8 eir[0];
606 } __packed;
607
608 #define MGMT_OP_SET_APPEARANCE 0x0043
609 struct mgmt_cp_set_appearance {
610 __le16 appearance;
611 } __packed;
612 #define MGMT_SET_APPEARANCE_SIZE 2
613
614 #define MGMT_OP_GET_PHY_CONFIGURATION 0x0044
615 struct mgmt_rp_get_phy_confguration {
616 __le32 supported_phys;
617 __le32 configurable_phys;
618 __le32 selected_phys;
619 } __packed;
620 #define MGMT_GET_PHY_CONFIGURATION_SIZE 0
621
622 #define MGMT_PHY_BR_1M_1SLOT 0x00000001
623 #define MGMT_PHY_BR_1M_3SLOT 0x00000002
624 #define MGMT_PHY_BR_1M_5SLOT 0x00000004
625 #define MGMT_PHY_EDR_2M_1SLOT 0x00000008
626 #define MGMT_PHY_EDR_2M_3SLOT 0x00000010
627 #define MGMT_PHY_EDR_2M_5SLOT 0x00000020
628 #define MGMT_PHY_EDR_3M_1SLOT 0x00000040
629 #define MGMT_PHY_EDR_3M_3SLOT 0x00000080
630 #define MGMT_PHY_EDR_3M_5SLOT 0x00000100
631 #define MGMT_PHY_LE_1M_TX 0x00000200
632 #define MGMT_PHY_LE_1M_RX 0x00000400
633 #define MGMT_PHY_LE_2M_TX 0x00000800
634 #define MGMT_PHY_LE_2M_RX 0x00001000
635 #define MGMT_PHY_LE_CODED_TX 0x00002000
636 #define MGMT_PHY_LE_CODED_RX 0x00004000
637
638 #define MGMT_PHY_BREDR_MASK (MGMT_PHY_BR_1M_1SLOT | MGMT_PHY_BR_1M_3SLOT | \
639 MGMT_PHY_BR_1M_5SLOT | MGMT_PHY_EDR_2M_1SLOT | \
640 MGMT_PHY_EDR_2M_3SLOT | MGMT_PHY_EDR_2M_5SLOT | \
641 MGMT_PHY_EDR_3M_1SLOT | MGMT_PHY_EDR_3M_3SLOT | \
642 MGMT_PHY_EDR_3M_5SLOT)
643 #define MGMT_PHY_LE_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_1M_RX | \
644 MGMT_PHY_LE_2M_TX | MGMT_PHY_LE_2M_RX | \
645 MGMT_PHY_LE_CODED_TX | MGMT_PHY_LE_CODED_RX)
646 #define MGMT_PHY_LE_TX_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_2M_TX | \
647 MGMT_PHY_LE_CODED_TX)
648 #define MGMT_PHY_LE_RX_MASK (MGMT_PHY_LE_1M_RX | MGMT_PHY_LE_2M_RX | \
649 MGMT_PHY_LE_CODED_RX)
650
651 #define MGMT_OP_SET_PHY_CONFIGURATION 0x0045
652 struct mgmt_cp_set_phy_confguration {
653 __le32 selected_phys;
654 } __packed;
655 #define MGMT_SET_PHY_CONFIGURATION_SIZE 4
656
657 #define MGMT_EV_CMD_COMPLETE 0x0001
658 struct mgmt_ev_cmd_complete {
659 __le16 opcode;
660 __u8 status;
661 __u8 data[0];
662 } __packed;
663
664 #define MGMT_EV_CMD_STATUS 0x0002
665 struct mgmt_ev_cmd_status {
666 __le16 opcode;
667 __u8 status;
668 } __packed;
669
670 #define MGMT_EV_CONTROLLER_ERROR 0x0003
671 struct mgmt_ev_controller_error {
672 __u8 error_code;
673 } __packed;
674
675 #define MGMT_EV_INDEX_ADDED 0x0004
676
677 #define MGMT_EV_INDEX_REMOVED 0x0005
678
679 #define MGMT_EV_NEW_SETTINGS 0x0006
680
681 #define MGMT_EV_CLASS_OF_DEV_CHANGED 0x0007
682 struct mgmt_ev_class_of_dev_changed {
683 __u8 dev_class[3];
684 };
685
686 #define MGMT_EV_LOCAL_NAME_CHANGED 0x0008
687 struct mgmt_ev_local_name_changed {
688 __u8 name[MGMT_MAX_NAME_LENGTH];
689 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
690 } __packed;
691
692 #define MGMT_EV_NEW_LINK_KEY 0x0009
693 struct mgmt_ev_new_link_key {
694 __u8 store_hint;
695 struct mgmt_link_key_info key;
696 } __packed;
697
698 #define MGMT_EV_NEW_LONG_TERM_KEY 0x000A
699 struct mgmt_ev_new_long_term_key {
700 __u8 store_hint;
701 struct mgmt_ltk_info key;
702 } __packed;
703
704 #define MGMT_EV_DEVICE_CONNECTED 0x000B
705 struct mgmt_ev_device_connected {
706 struct mgmt_addr_info addr;
707 __le32 flags;
708 __le16 eir_len;
709 __u8 eir[0];
710 } __packed;
711
712 #define MGMT_DEV_DISCONN_UNKNOWN 0x00
713 #define MGMT_DEV_DISCONN_TIMEOUT 0x01
714 #define MGMT_DEV_DISCONN_LOCAL_HOST 0x02
715 #define MGMT_DEV_DISCONN_REMOTE 0x03
716 #define MGMT_DEV_DISCONN_AUTH_FAILURE 0x04
717
718 #define MGMT_EV_DEVICE_DISCONNECTED 0x000C
719 struct mgmt_ev_device_disconnected {
720 struct mgmt_addr_info addr;
721 __u8 reason;
722 } __packed;
723
724 #define MGMT_EV_CONNECT_FAILED 0x000D
725 struct mgmt_ev_connect_failed {
726 struct mgmt_addr_info addr;
727 __u8 status;
728 } __packed;
729
730 #define MGMT_EV_PIN_CODE_REQUEST 0x000E
731 struct mgmt_ev_pin_code_request {
732 struct mgmt_addr_info addr;
733 __u8 secure;
734 } __packed;
735
736 #define MGMT_EV_USER_CONFIRM_REQUEST 0x000F
737 struct mgmt_ev_user_confirm_request {
738 struct mgmt_addr_info addr;
739 __u8 confirm_hint;
740 __le32 value;
741 } __packed;
742
743 #define MGMT_EV_USER_PASSKEY_REQUEST 0x0010
744 struct mgmt_ev_user_passkey_request {
745 struct mgmt_addr_info addr;
746 } __packed;
747
748 #define MGMT_EV_AUTH_FAILED 0x0011
749 struct mgmt_ev_auth_failed {
750 struct mgmt_addr_info addr;
751 __u8 status;
752 } __packed;
753
754 #define MGMT_DEV_FOUND_CONFIRM_NAME 0x01
755 #define MGMT_DEV_FOUND_LEGACY_PAIRING 0x02
756 #define MGMT_DEV_FOUND_NOT_CONNECTABLE 0x04
757
758 #define MGMT_EV_DEVICE_FOUND 0x0012
759 struct mgmt_ev_device_found {
760 struct mgmt_addr_info addr;
761 __s8 rssi;
762 __le32 flags;
763 __le16 eir_len;
764 __u8 eir[0];
765 } __packed;
766
767 #define MGMT_EV_DISCOVERING 0x0013
768 struct mgmt_ev_discovering {
769 __u8 type;
770 __u8 discovering;
771 } __packed;
772
773 #define MGMT_EV_DEVICE_BLOCKED 0x0014
774 struct mgmt_ev_device_blocked {
775 struct mgmt_addr_info addr;
776 } __packed;
777
778 #define MGMT_EV_DEVICE_UNBLOCKED 0x0015
779 struct mgmt_ev_device_unblocked {
780 struct mgmt_addr_info addr;
781 } __packed;
782
783 #define MGMT_EV_DEVICE_UNPAIRED 0x0016
784 struct mgmt_ev_device_unpaired {
785 struct mgmt_addr_info addr;
786 } __packed;
787
788 #define MGMT_EV_PASSKEY_NOTIFY 0x0017
789 struct mgmt_ev_passkey_notify {
790 struct mgmt_addr_info addr;
791 __le32 passkey;
792 __u8 entered;
793 } __packed;
794
795 #define MGMT_EV_NEW_IRK 0x0018
796 struct mgmt_ev_new_irk {
797 __u8 store_hint;
798 bdaddr_t rpa;
799 struct mgmt_irk_info irk;
800 } __packed;
801
802 #define MGMT_CSRK_LOCAL_UNAUTHENTICATED 0x00
803 #define MGMT_CSRK_REMOTE_UNAUTHENTICATED 0x01
804 #define MGMT_CSRK_LOCAL_AUTHENTICATED 0x02
805 #define MGMT_CSRK_REMOTE_AUTHENTICATED 0x03
806
807 struct mgmt_csrk_info {
808 struct mgmt_addr_info addr;
809 __u8 type;
810 __u8 val[16];
811 } __packed;
812
813 #define MGMT_EV_NEW_CSRK 0x0019
814 struct mgmt_ev_new_csrk {
815 __u8 store_hint;
816 struct mgmt_csrk_info key;
817 } __packed;
818
819 #define MGMT_EV_DEVICE_ADDED 0x001a
820 struct mgmt_ev_device_added {
821 struct mgmt_addr_info addr;
822 __u8 action;
823 } __packed;
824
825 #define MGMT_EV_DEVICE_REMOVED 0x001b
826 struct mgmt_ev_device_removed {
827 struct mgmt_addr_info addr;
828 } __packed;
829
830 #define MGMT_EV_NEW_CONN_PARAM 0x001c
831 struct mgmt_ev_new_conn_param {
832 struct mgmt_addr_info addr;
833 __u8 store_hint;
834 __le16 min_interval;
835 __le16 max_interval;
836 __le16 latency;
837 __le16 timeout;
838 } __packed;
839
840 #define MGMT_EV_UNCONF_INDEX_ADDED 0x001d
841
842 #define MGMT_EV_UNCONF_INDEX_REMOVED 0x001e
843
844 #define MGMT_EV_NEW_CONFIG_OPTIONS 0x001f
845
846 struct mgmt_ev_ext_index {
847 __u8 type;
848 __u8 bus;
849 } __packed;
850
851 #define MGMT_EV_EXT_INDEX_ADDED 0x0020
852
853 #define MGMT_EV_EXT_INDEX_REMOVED 0x0021
854
855 #define MGMT_EV_LOCAL_OOB_DATA_UPDATED 0x0022
856 struct mgmt_ev_local_oob_data_updated {
857 __u8 type;
858 __le16 eir_len;
859 __u8 eir[0];
860 } __packed;
861
862 #define MGMT_EV_ADVERTISING_ADDED 0x0023
863 struct mgmt_ev_advertising_added {
864 __u8 instance;
865 } __packed;
866
867 #define MGMT_EV_ADVERTISING_REMOVED 0x0024
868 struct mgmt_ev_advertising_removed {
869 __u8 instance;
870 } __packed;
871
872 #define MGMT_EV_EXT_INFO_CHANGED 0x0025
873 struct mgmt_ev_ext_info_changed {
874 __le16 eir_len;
875 __u8 eir[0];
876 } __packed;
877
878 #define MGMT_EV_PHY_CONFIGURATION_CHANGED 0x0026
879 struct mgmt_ev_phy_configuration_changed {
880 __le32 selected_phys;
881 } __packed;