1 | /* |
2 | BlueZ - Bluetooth protocol stack for Linux |
3 | |
4 | Copyright (C) 2010 Nokia Corporation |
5 | Copyright (C) 2011-2012 Intel Corporation |
6 | |
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; |
10 | |
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. |
19 | |
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. |
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_tlv { |
56 | __le16 type; |
57 | __u8 length; |
58 | __u8 value[]; |
59 | } __packed; |
60 | |
61 | struct mgmt_addr_info { |
62 | bdaddr_t bdaddr; |
63 | __u8 type; |
64 | } __packed; |
65 | #define MGMT_ADDR_INFO_SIZE 7 |
66 | |
67 | #define MGMT_OP_READ_VERSION 0x0001 |
68 | #define MGMT_READ_VERSION_SIZE 0 |
69 | struct mgmt_rp_read_version { |
70 | __u8 version; |
71 | __le16 revision; |
72 | } __packed; |
73 | |
74 | #define MGMT_OP_READ_COMMANDS 0x0002 |
75 | #define MGMT_READ_COMMANDS_SIZE 0 |
76 | struct mgmt_rp_read_commands { |
77 | __le16 num_commands; |
78 | __le16 num_events; |
79 | __le16 opcodes[]; |
80 | } __packed; |
81 | |
82 | #define MGMT_OP_READ_INDEX_LIST 0x0003 |
83 | #define MGMT_READ_INDEX_LIST_SIZE 0 |
84 | struct mgmt_rp_read_index_list { |
85 | __le16 num_controllers; |
86 | __le16 index[]; |
87 | } __packed; |
88 | |
89 | /* Reserve one extra byte for names in management messages so that they |
90 | * are always guaranteed to be nul-terminated */ |
91 | #define MGMT_MAX_NAME_LENGTH (HCI_MAX_NAME_LENGTH + 1) |
92 | #define MGMT_MAX_SHORT_NAME_LENGTH (HCI_MAX_SHORT_NAME_LENGTH + 1) |
93 | |
94 | #define MGMT_SETTING_POWERED BIT(0) |
95 | #define MGMT_SETTING_CONNECTABLE BIT(1) |
96 | #define MGMT_SETTING_FAST_CONNECTABLE BIT(2) |
97 | #define MGMT_SETTING_DISCOVERABLE BIT(3) |
98 | #define MGMT_SETTING_BONDABLE BIT(4) |
99 | #define MGMT_SETTING_LINK_SECURITY BIT(5) |
100 | #define MGMT_SETTING_SSP BIT(6) |
101 | #define MGMT_SETTING_BREDR BIT(7) |
102 | #define MGMT_SETTING_HS BIT(8) |
103 | #define MGMT_SETTING_LE BIT(9) |
104 | #define MGMT_SETTING_ADVERTISING BIT(10) |
105 | #define MGMT_SETTING_SECURE_CONN BIT(11) |
106 | #define MGMT_SETTING_DEBUG_KEYS BIT(12) |
107 | #define MGMT_SETTING_PRIVACY BIT(13) |
108 | #define MGMT_SETTING_CONFIGURATION BIT(14) |
109 | #define MGMT_SETTING_STATIC_ADDRESS BIT(15) |
110 | #define MGMT_SETTING_PHY_CONFIGURATION BIT(16) |
111 | #define MGMT_SETTING_WIDEBAND_SPEECH BIT(17) |
112 | #define MGMT_SETTING_CIS_CENTRAL BIT(18) |
113 | #define MGMT_SETTING_CIS_PERIPHERAL BIT(19) |
114 | #define MGMT_SETTING_ISO_BROADCASTER BIT(20) |
115 | #define MGMT_SETTING_ISO_SYNC_RECEIVER BIT(21) |
116 | |
117 | #define MGMT_OP_READ_INFO 0x0004 |
118 | #define MGMT_READ_INFO_SIZE 0 |
119 | struct mgmt_rp_read_info { |
120 | bdaddr_t bdaddr; |
121 | __u8 version; |
122 | __le16 manufacturer; |
123 | __le32 supported_settings; |
124 | __le32 current_settings; |
125 | __u8 dev_class[3]; |
126 | __u8 name[MGMT_MAX_NAME_LENGTH]; |
127 | __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH]; |
128 | } __packed; |
129 | |
130 | struct mgmt_mode { |
131 | __u8 val; |
132 | } __packed; |
133 | |
134 | #define MGMT_SETTING_SIZE 1 |
135 | |
136 | #define MGMT_OP_SET_POWERED 0x0005 |
137 | |
138 | #define MGMT_OP_SET_DISCOVERABLE 0x0006 |
139 | struct mgmt_cp_set_discoverable { |
140 | __u8 val; |
141 | __le16 timeout; |
142 | } __packed; |
143 | #define MGMT_SET_DISCOVERABLE_SIZE 3 |
144 | |
145 | #define MGMT_OP_SET_CONNECTABLE 0x0007 |
146 | |
147 | #define MGMT_OP_SET_FAST_CONNECTABLE 0x0008 |
148 | |
149 | #define MGMT_OP_SET_BONDABLE 0x0009 |
150 | |
151 | #define MGMT_OP_SET_LINK_SECURITY 0x000A |
152 | |
153 | #define MGMT_OP_SET_SSP 0x000B |
154 | |
155 | #define MGMT_OP_SET_HS 0x000C |
156 | |
157 | #define MGMT_OP_SET_LE 0x000D |
158 | #define MGMT_OP_SET_DEV_CLASS 0x000E |
159 | struct mgmt_cp_set_dev_class { |
160 | __u8 major; |
161 | __u8 minor; |
162 | } __packed; |
163 | #define MGMT_SET_DEV_CLASS_SIZE 2 |
164 | |
165 | #define MGMT_OP_SET_LOCAL_NAME 0x000F |
166 | struct mgmt_cp_set_local_name { |
167 | __u8 name[MGMT_MAX_NAME_LENGTH]; |
168 | __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH]; |
169 | } __packed; |
170 | #define MGMT_SET_LOCAL_NAME_SIZE 260 |
171 | |
172 | #define MGMT_OP_ADD_UUID 0x0010 |
173 | struct mgmt_cp_add_uuid { |
174 | __u8 uuid[16]; |
175 | __u8 svc_hint; |
176 | } __packed; |
177 | #define MGMT_ADD_UUID_SIZE 17 |
178 | |
179 | #define MGMT_OP_REMOVE_UUID 0x0011 |
180 | struct mgmt_cp_remove_uuid { |
181 | __u8 uuid[16]; |
182 | } __packed; |
183 | #define MGMT_REMOVE_UUID_SIZE 16 |
184 | |
185 | struct mgmt_link_key_info { |
186 | struct mgmt_addr_info addr; |
187 | __u8 type; |
188 | __u8 val[16]; |
189 | __u8 pin_len; |
190 | } __packed; |
191 | |
192 | #define MGMT_OP_LOAD_LINK_KEYS 0x0012 |
193 | struct mgmt_cp_load_link_keys { |
194 | __u8 debug_keys; |
195 | __le16 key_count; |
196 | struct mgmt_link_key_info keys[]; |
197 | } __packed; |
198 | #define MGMT_LOAD_LINK_KEYS_SIZE 3 |
199 | |
200 | #define MGMT_LTK_UNAUTHENTICATED 0x00 |
201 | #define MGMT_LTK_AUTHENTICATED 0x01 |
202 | #define MGMT_LTK_P256_UNAUTH 0x02 |
203 | #define MGMT_LTK_P256_AUTH 0x03 |
204 | #define MGMT_LTK_P256_DEBUG 0x04 |
205 | |
206 | struct mgmt_ltk_info { |
207 | struct mgmt_addr_info addr; |
208 | __u8 type; |
209 | __u8 initiator; |
210 | __u8 enc_size; |
211 | __le16 ediv; |
212 | __le64 rand; |
213 | __u8 val[16]; |
214 | } __packed; |
215 | |
216 | #define MGMT_OP_LOAD_LONG_TERM_KEYS 0x0013 |
217 | struct mgmt_cp_load_long_term_keys { |
218 | __le16 key_count; |
219 | struct mgmt_ltk_info keys[]; |
220 | } __packed; |
221 | #define MGMT_LOAD_LONG_TERM_KEYS_SIZE 2 |
222 | |
223 | #define MGMT_OP_DISCONNECT 0x0014 |
224 | struct mgmt_cp_disconnect { |
225 | struct mgmt_addr_info addr; |
226 | } __packed; |
227 | #define MGMT_DISCONNECT_SIZE MGMT_ADDR_INFO_SIZE |
228 | struct mgmt_rp_disconnect { |
229 | struct mgmt_addr_info addr; |
230 | } __packed; |
231 | |
232 | #define MGMT_OP_GET_CONNECTIONS 0x0015 |
233 | #define MGMT_GET_CONNECTIONS_SIZE 0 |
234 | struct mgmt_rp_get_connections { |
235 | __le16 conn_count; |
236 | struct mgmt_addr_info addr[]; |
237 | } __packed; |
238 | |
239 | #define MGMT_OP_PIN_CODE_REPLY 0x0016 |
240 | struct mgmt_cp_pin_code_reply { |
241 | struct mgmt_addr_info addr; |
242 | __u8 pin_len; |
243 | __u8 pin_code[16]; |
244 | } __packed; |
245 | #define MGMT_PIN_CODE_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 17) |
246 | struct mgmt_rp_pin_code_reply { |
247 | struct mgmt_addr_info addr; |
248 | } __packed; |
249 | |
250 | #define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017 |
251 | struct mgmt_cp_pin_code_neg_reply { |
252 | struct mgmt_addr_info addr; |
253 | } __packed; |
254 | #define MGMT_PIN_CODE_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE |
255 | |
256 | #define MGMT_OP_SET_IO_CAPABILITY 0x0018 |
257 | struct mgmt_cp_set_io_capability { |
258 | __u8 io_capability; |
259 | } __packed; |
260 | #define MGMT_SET_IO_CAPABILITY_SIZE 1 |
261 | |
262 | #define MGMT_OP_PAIR_DEVICE 0x0019 |
263 | struct mgmt_cp_pair_device { |
264 | struct mgmt_addr_info addr; |
265 | __u8 io_cap; |
266 | } __packed; |
267 | #define MGMT_PAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1) |
268 | struct mgmt_rp_pair_device { |
269 | struct mgmt_addr_info addr; |
270 | } __packed; |
271 | |
272 | #define MGMT_OP_CANCEL_PAIR_DEVICE 0x001A |
273 | #define MGMT_CANCEL_PAIR_DEVICE_SIZE MGMT_ADDR_INFO_SIZE |
274 | |
275 | #define MGMT_OP_UNPAIR_DEVICE 0x001B |
276 | struct mgmt_cp_unpair_device { |
277 | struct mgmt_addr_info addr; |
278 | __u8 disconnect; |
279 | } __packed; |
280 | #define MGMT_UNPAIR_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1) |
281 | struct mgmt_rp_unpair_device { |
282 | struct mgmt_addr_info addr; |
283 | }; |
284 | |
285 | #define MGMT_OP_USER_CONFIRM_REPLY 0x001C |
286 | struct mgmt_cp_user_confirm_reply { |
287 | struct mgmt_addr_info addr; |
288 | } __packed; |
289 | #define MGMT_USER_CONFIRM_REPLY_SIZE MGMT_ADDR_INFO_SIZE |
290 | struct mgmt_rp_user_confirm_reply { |
291 | struct mgmt_addr_info addr; |
292 | } __packed; |
293 | |
294 | #define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001D |
295 | struct mgmt_cp_user_confirm_neg_reply { |
296 | struct mgmt_addr_info addr; |
297 | } __packed; |
298 | #define MGMT_USER_CONFIRM_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE |
299 | |
300 | #define MGMT_OP_USER_PASSKEY_REPLY 0x001E |
301 | struct mgmt_cp_user_passkey_reply { |
302 | struct mgmt_addr_info addr; |
303 | __le32 passkey; |
304 | } __packed; |
305 | #define MGMT_USER_PASSKEY_REPLY_SIZE (MGMT_ADDR_INFO_SIZE + 4) |
306 | struct mgmt_rp_user_passkey_reply { |
307 | struct mgmt_addr_info addr; |
308 | } __packed; |
309 | |
310 | #define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001F |
311 | struct mgmt_cp_user_passkey_neg_reply { |
312 | struct mgmt_addr_info addr; |
313 | } __packed; |
314 | #define MGMT_USER_PASSKEY_NEG_REPLY_SIZE MGMT_ADDR_INFO_SIZE |
315 | |
316 | #define MGMT_OP_READ_LOCAL_OOB_DATA 0x0020 |
317 | #define MGMT_READ_LOCAL_OOB_DATA_SIZE 0 |
318 | struct mgmt_rp_read_local_oob_data { |
319 | __u8 hash192[16]; |
320 | __u8 rand192[16]; |
321 | __u8 hash256[16]; |
322 | __u8 rand256[16]; |
323 | } __packed; |
324 | |
325 | #define MGMT_OP_ADD_REMOTE_OOB_DATA 0x0021 |
326 | struct mgmt_cp_add_remote_oob_data { |
327 | struct mgmt_addr_info addr; |
328 | __u8 hash[16]; |
329 | __u8 rand[16]; |
330 | } __packed; |
331 | #define MGMT_ADD_REMOTE_OOB_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 32) |
332 | struct mgmt_cp_add_remote_oob_ext_data { |
333 | struct mgmt_addr_info addr; |
334 | __u8 hash192[16]; |
335 | __u8 rand192[16]; |
336 | __u8 hash256[16]; |
337 | __u8 rand256[16]; |
338 | } __packed; |
339 | #define MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 64) |
340 | |
341 | #define MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0022 |
342 | struct mgmt_cp_remove_remote_oob_data { |
343 | struct mgmt_addr_info addr; |
344 | } __packed; |
345 | #define MGMT_REMOVE_REMOTE_OOB_DATA_SIZE MGMT_ADDR_INFO_SIZE |
346 | |
347 | #define MGMT_OP_START_DISCOVERY 0x0023 |
348 | struct mgmt_cp_start_discovery { |
349 | __u8 type; |
350 | } __packed; |
351 | #define MGMT_START_DISCOVERY_SIZE 1 |
352 | |
353 | #define MGMT_OP_STOP_DISCOVERY 0x0024 |
354 | struct mgmt_cp_stop_discovery { |
355 | __u8 type; |
356 | } __packed; |
357 | #define MGMT_STOP_DISCOVERY_SIZE 1 |
358 | |
359 | #define MGMT_OP_CONFIRM_NAME 0x0025 |
360 | struct mgmt_cp_confirm_name { |
361 | struct mgmt_addr_info addr; |
362 | __u8 name_known; |
363 | } __packed; |
364 | #define MGMT_CONFIRM_NAME_SIZE (MGMT_ADDR_INFO_SIZE + 1) |
365 | struct mgmt_rp_confirm_name { |
366 | struct mgmt_addr_info addr; |
367 | } __packed; |
368 | |
369 | #define MGMT_OP_BLOCK_DEVICE 0x0026 |
370 | struct mgmt_cp_block_device { |
371 | struct mgmt_addr_info addr; |
372 | } __packed; |
373 | #define MGMT_BLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE |
374 | |
375 | #define MGMT_OP_UNBLOCK_DEVICE 0x0027 |
376 | struct mgmt_cp_unblock_device { |
377 | struct mgmt_addr_info addr; |
378 | } __packed; |
379 | #define MGMT_UNBLOCK_DEVICE_SIZE MGMT_ADDR_INFO_SIZE |
380 | |
381 | #define MGMT_OP_SET_DEVICE_ID 0x0028 |
382 | struct mgmt_cp_set_device_id { |
383 | __le16 source; |
384 | __le16 vendor; |
385 | __le16 product; |
386 | __le16 version; |
387 | } __packed; |
388 | #define MGMT_SET_DEVICE_ID_SIZE 8 |
389 | |
390 | #define MGMT_OP_SET_ADVERTISING 0x0029 |
391 | |
392 | #define MGMT_OP_SET_BREDR 0x002A |
393 | |
394 | #define MGMT_OP_SET_STATIC_ADDRESS 0x002B |
395 | struct mgmt_cp_set_static_address { |
396 | bdaddr_t bdaddr; |
397 | } __packed; |
398 | #define MGMT_SET_STATIC_ADDRESS_SIZE 6 |
399 | |
400 | #define MGMT_OP_SET_SCAN_PARAMS 0x002C |
401 | struct mgmt_cp_set_scan_params { |
402 | __le16 interval; |
403 | __le16 window; |
404 | } __packed; |
405 | #define MGMT_SET_SCAN_PARAMS_SIZE 4 |
406 | |
407 | #define MGMT_OP_SET_SECURE_CONN 0x002D |
408 | |
409 | #define MGMT_OP_SET_DEBUG_KEYS 0x002E |
410 | |
411 | #define MGMT_OP_SET_PRIVACY 0x002F |
412 | struct mgmt_cp_set_privacy { |
413 | __u8 privacy; |
414 | __u8 irk[16]; |
415 | } __packed; |
416 | #define MGMT_SET_PRIVACY_SIZE 17 |
417 | |
418 | struct mgmt_irk_info { |
419 | struct mgmt_addr_info addr; |
420 | __u8 val[16]; |
421 | } __packed; |
422 | |
423 | #define MGMT_OP_LOAD_IRKS 0x0030 |
424 | struct mgmt_cp_load_irks { |
425 | __le16 irk_count; |
426 | struct mgmt_irk_info irks[]; |
427 | } __packed; |
428 | #define MGMT_LOAD_IRKS_SIZE 2 |
429 | |
430 | #define MGMT_OP_GET_CONN_INFO 0x0031 |
431 | struct mgmt_cp_get_conn_info { |
432 | struct mgmt_addr_info addr; |
433 | } __packed; |
434 | #define MGMT_GET_CONN_INFO_SIZE MGMT_ADDR_INFO_SIZE |
435 | struct mgmt_rp_get_conn_info { |
436 | struct mgmt_addr_info addr; |
437 | __s8 ; |
438 | __s8 tx_power; |
439 | __s8 max_tx_power; |
440 | } __packed; |
441 | |
442 | #define MGMT_OP_GET_CLOCK_INFO 0x0032 |
443 | struct mgmt_cp_get_clock_info { |
444 | struct mgmt_addr_info addr; |
445 | } __packed; |
446 | #define MGMT_GET_CLOCK_INFO_SIZE MGMT_ADDR_INFO_SIZE |
447 | struct mgmt_rp_get_clock_info { |
448 | struct mgmt_addr_info addr; |
449 | __le32 local_clock; |
450 | __le32 piconet_clock; |
451 | __le16 accuracy; |
452 | } __packed; |
453 | |
454 | #define MGMT_OP_ADD_DEVICE 0x0033 |
455 | struct mgmt_cp_add_device { |
456 | struct mgmt_addr_info addr; |
457 | __u8 action; |
458 | } __packed; |
459 | #define MGMT_ADD_DEVICE_SIZE (MGMT_ADDR_INFO_SIZE + 1) |
460 | |
461 | #define MGMT_OP_REMOVE_DEVICE 0x0034 |
462 | struct mgmt_cp_remove_device { |
463 | struct mgmt_addr_info addr; |
464 | } __packed; |
465 | #define MGMT_REMOVE_DEVICE_SIZE MGMT_ADDR_INFO_SIZE |
466 | |
467 | struct mgmt_conn_param { |
468 | struct mgmt_addr_info addr; |
469 | __le16 min_interval; |
470 | __le16 max_interval; |
471 | __le16 latency; |
472 | __le16 timeout; |
473 | } __packed; |
474 | |
475 | #define MGMT_OP_LOAD_CONN_PARAM 0x0035 |
476 | struct mgmt_cp_load_conn_param { |
477 | __le16 param_count; |
478 | struct mgmt_conn_param params[]; |
479 | } __packed; |
480 | #define MGMT_LOAD_CONN_PARAM_SIZE 2 |
481 | |
482 | #define MGMT_OP_READ_UNCONF_INDEX_LIST 0x0036 |
483 | #define MGMT_READ_UNCONF_INDEX_LIST_SIZE 0 |
484 | struct mgmt_rp_read_unconf_index_list { |
485 | __le16 num_controllers; |
486 | __le16 index[]; |
487 | } __packed; |
488 | |
489 | #define MGMT_OPTION_EXTERNAL_CONFIG 0x00000001 |
490 | #define MGMT_OPTION_PUBLIC_ADDRESS 0x00000002 |
491 | |
492 | #define MGMT_OP_READ_CONFIG_INFO 0x0037 |
493 | #define MGMT_READ_CONFIG_INFO_SIZE 0 |
494 | struct mgmt_rp_read_config_info { |
495 | __le16 manufacturer; |
496 | __le32 supported_options; |
497 | __le32 missing_options; |
498 | } __packed; |
499 | |
500 | #define MGMT_OP_SET_EXTERNAL_CONFIG 0x0038 |
501 | struct mgmt_cp_set_external_config { |
502 | __u8 config; |
503 | } __packed; |
504 | #define MGMT_SET_EXTERNAL_CONFIG_SIZE 1 |
505 | |
506 | #define MGMT_OP_SET_PUBLIC_ADDRESS 0x0039 |
507 | struct mgmt_cp_set_public_address { |
508 | bdaddr_t bdaddr; |
509 | } __packed; |
510 | #define MGMT_SET_PUBLIC_ADDRESS_SIZE 6 |
511 | |
512 | #define MGMT_OP_START_SERVICE_DISCOVERY 0x003A |
513 | struct mgmt_cp_start_service_discovery { |
514 | __u8 type; |
515 | __s8 ; |
516 | __le16 uuid_count; |
517 | __u8 uuids[][16]; |
518 | } __packed; |
519 | #define MGMT_START_SERVICE_DISCOVERY_SIZE 4 |
520 | |
521 | #define MGMT_OP_READ_LOCAL_OOB_EXT_DATA 0x003B |
522 | struct mgmt_cp_read_local_oob_ext_data { |
523 | __u8 type; |
524 | } __packed; |
525 | #define MGMT_READ_LOCAL_OOB_EXT_DATA_SIZE 1 |
526 | struct mgmt_rp_read_local_oob_ext_data { |
527 | __u8 type; |
528 | __le16 eir_len; |
529 | __u8 eir[]; |
530 | } __packed; |
531 | |
532 | #define MGMT_OP_READ_EXT_INDEX_LIST 0x003C |
533 | #define MGMT_READ_EXT_INDEX_LIST_SIZE 0 |
534 | struct mgmt_rp_read_ext_index_list { |
535 | __le16 num_controllers; |
536 | struct { |
537 | __le16 index; |
538 | __u8 type; |
539 | __u8 bus; |
540 | } entry[]; |
541 | } __packed; |
542 | |
543 | #define MGMT_OP_READ_ADV_FEATURES 0x0003D |
544 | #define MGMT_READ_ADV_FEATURES_SIZE 0 |
545 | struct mgmt_rp_read_adv_features { |
546 | __le32 supported_flags; |
547 | __u8 max_adv_data_len; |
548 | __u8 max_scan_rsp_len; |
549 | __u8 max_instances; |
550 | __u8 num_instances; |
551 | __u8 instance[]; |
552 | } __packed; |
553 | |
554 | #define MGMT_OP_ADD_ADVERTISING 0x003E |
555 | struct mgmt_cp_add_advertising { |
556 | __u8 instance; |
557 | __le32 flags; |
558 | __le16 duration; |
559 | __le16 timeout; |
560 | __u8 adv_data_len; |
561 | __u8 scan_rsp_len; |
562 | __u8 data[]; |
563 | } __packed; |
564 | #define MGMT_ADD_ADVERTISING_SIZE 11 |
565 | struct mgmt_rp_add_advertising { |
566 | __u8 instance; |
567 | } __packed; |
568 | |
569 | #define MGMT_ADV_FLAG_CONNECTABLE BIT(0) |
570 | #define MGMT_ADV_FLAG_DISCOV BIT(1) |
571 | #define MGMT_ADV_FLAG_LIMITED_DISCOV BIT(2) |
572 | #define MGMT_ADV_FLAG_MANAGED_FLAGS BIT(3) |
573 | #define MGMT_ADV_FLAG_TX_POWER BIT(4) |
574 | #define MGMT_ADV_FLAG_APPEARANCE BIT(5) |
575 | #define MGMT_ADV_FLAG_LOCAL_NAME BIT(6) |
576 | #define MGMT_ADV_FLAG_SEC_1M BIT(7) |
577 | #define MGMT_ADV_FLAG_SEC_2M BIT(8) |
578 | #define MGMT_ADV_FLAG_SEC_CODED BIT(9) |
579 | #define MGMT_ADV_FLAG_CAN_SET_TX_POWER BIT(10) |
580 | #define MGMT_ADV_FLAG_HW_OFFLOAD BIT(11) |
581 | #define MGMT_ADV_PARAM_DURATION BIT(12) |
582 | #define MGMT_ADV_PARAM_TIMEOUT BIT(13) |
583 | #define MGMT_ADV_PARAM_INTERVALS BIT(14) |
584 | #define MGMT_ADV_PARAM_TX_POWER BIT(15) |
585 | #define MGMT_ADV_PARAM_SCAN_RSP BIT(16) |
586 | |
587 | #define MGMT_ADV_FLAG_SEC_MASK (MGMT_ADV_FLAG_SEC_1M | MGMT_ADV_FLAG_SEC_2M | \ |
588 | MGMT_ADV_FLAG_SEC_CODED) |
589 | |
590 | #define MGMT_OP_REMOVE_ADVERTISING 0x003F |
591 | struct mgmt_cp_remove_advertising { |
592 | __u8 instance; |
593 | } __packed; |
594 | #define MGMT_REMOVE_ADVERTISING_SIZE 1 |
595 | struct mgmt_rp_remove_advertising { |
596 | __u8 instance; |
597 | } __packed; |
598 | |
599 | #define MGMT_OP_GET_ADV_SIZE_INFO 0x0040 |
600 | struct mgmt_cp_get_adv_size_info { |
601 | __u8 instance; |
602 | __le32 flags; |
603 | } __packed; |
604 | #define MGMT_GET_ADV_SIZE_INFO_SIZE 5 |
605 | struct mgmt_rp_get_adv_size_info { |
606 | __u8 instance; |
607 | __le32 flags; |
608 | __u8 max_adv_data_len; |
609 | __u8 max_scan_rsp_len; |
610 | } __packed; |
611 | |
612 | #define MGMT_OP_START_LIMITED_DISCOVERY 0x0041 |
613 | |
614 | #define MGMT_OP_READ_EXT_INFO 0x0042 |
615 | #define MGMT_READ_EXT_INFO_SIZE 0 |
616 | struct mgmt_rp_read_ext_info { |
617 | bdaddr_t bdaddr; |
618 | __u8 version; |
619 | __le16 manufacturer; |
620 | __le32 supported_settings; |
621 | __le32 current_settings; |
622 | __le16 eir_len; |
623 | __u8 eir[]; |
624 | } __packed; |
625 | |
626 | #define MGMT_OP_SET_APPEARANCE 0x0043 |
627 | struct mgmt_cp_set_appearance { |
628 | __le16 appearance; |
629 | } __packed; |
630 | #define MGMT_SET_APPEARANCE_SIZE 2 |
631 | |
632 | #define MGMT_OP_GET_PHY_CONFIGURATION 0x0044 |
633 | struct mgmt_rp_get_phy_configuration { |
634 | __le32 supported_phys; |
635 | __le32 configurable_phys; |
636 | __le32 selected_phys; |
637 | } __packed; |
638 | #define MGMT_GET_PHY_CONFIGURATION_SIZE 0 |
639 | |
640 | #define MGMT_PHY_BR_1M_1SLOT BIT(0) |
641 | #define MGMT_PHY_BR_1M_3SLOT BIT(1) |
642 | #define MGMT_PHY_BR_1M_5SLOT BIT(2) |
643 | #define MGMT_PHY_EDR_2M_1SLOT BIT(3) |
644 | #define MGMT_PHY_EDR_2M_3SLOT BIT(4) |
645 | #define MGMT_PHY_EDR_2M_5SLOT BIT(5) |
646 | #define MGMT_PHY_EDR_3M_1SLOT BIT(6) |
647 | #define MGMT_PHY_EDR_3M_3SLOT BIT(7) |
648 | #define MGMT_PHY_EDR_3M_5SLOT BIT(8) |
649 | #define MGMT_PHY_LE_1M_TX BIT(9) |
650 | #define MGMT_PHY_LE_1M_RX BIT(10) |
651 | #define MGMT_PHY_LE_2M_TX BIT(11) |
652 | #define MGMT_PHY_LE_2M_RX BIT(12) |
653 | #define MGMT_PHY_LE_CODED_TX BIT(13) |
654 | #define MGMT_PHY_LE_CODED_RX BIT(14) |
655 | |
656 | #define MGMT_PHY_BREDR_MASK (MGMT_PHY_BR_1M_1SLOT | MGMT_PHY_BR_1M_3SLOT | \ |
657 | MGMT_PHY_BR_1M_5SLOT | MGMT_PHY_EDR_2M_1SLOT | \ |
658 | MGMT_PHY_EDR_2M_3SLOT | MGMT_PHY_EDR_2M_5SLOT | \ |
659 | MGMT_PHY_EDR_3M_1SLOT | MGMT_PHY_EDR_3M_3SLOT | \ |
660 | MGMT_PHY_EDR_3M_5SLOT) |
661 | #define MGMT_PHY_LE_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_1M_RX | \ |
662 | MGMT_PHY_LE_2M_TX | MGMT_PHY_LE_2M_RX | \ |
663 | MGMT_PHY_LE_CODED_TX | MGMT_PHY_LE_CODED_RX) |
664 | #define MGMT_PHY_LE_TX_MASK (MGMT_PHY_LE_1M_TX | MGMT_PHY_LE_2M_TX | \ |
665 | MGMT_PHY_LE_CODED_TX) |
666 | #define MGMT_PHY_LE_RX_MASK (MGMT_PHY_LE_1M_RX | MGMT_PHY_LE_2M_RX | \ |
667 | MGMT_PHY_LE_CODED_RX) |
668 | |
669 | #define MGMT_OP_SET_PHY_CONFIGURATION 0x0045 |
670 | struct mgmt_cp_set_phy_configuration { |
671 | __le32 selected_phys; |
672 | } __packed; |
673 | #define MGMT_SET_PHY_CONFIGURATION_SIZE 4 |
674 | |
675 | #define MGMT_OP_SET_BLOCKED_KEYS 0x0046 |
676 | |
677 | #define HCI_BLOCKED_KEY_TYPE_LINKKEY 0x00 |
678 | #define HCI_BLOCKED_KEY_TYPE_LTK 0x01 |
679 | #define HCI_BLOCKED_KEY_TYPE_IRK 0x02 |
680 | |
681 | struct mgmt_blocked_key_info { |
682 | __u8 type; |
683 | __u8 val[16]; |
684 | } __packed; |
685 | |
686 | struct mgmt_cp_set_blocked_keys { |
687 | __le16 key_count; |
688 | struct mgmt_blocked_key_info keys[]; |
689 | } __packed; |
690 | #define MGMT_OP_SET_BLOCKED_KEYS_SIZE 2 |
691 | |
692 | #define MGMT_OP_SET_WIDEBAND_SPEECH 0x0047 |
693 | |
694 | #define MGMT_CAP_SEC_FLAGS 0x01 |
695 | #define MGMT_CAP_MAX_ENC_KEY_SIZE 0x02 |
696 | #define MGMT_CAP_SMP_MAX_ENC_KEY_SIZE 0x03 |
697 | #define MGMT_CAP_LE_TX_PWR 0x04 |
698 | |
699 | #define MGMT_OP_READ_CONTROLLER_CAP 0x0048 |
700 | #define MGMT_READ_CONTROLLER_CAP_SIZE 0 |
701 | struct mgmt_rp_read_controller_cap { |
702 | __le16 cap_len; |
703 | __u8 cap[]; |
704 | } __packed; |
705 | |
706 | #define MGMT_OP_READ_EXP_FEATURES_INFO 0x0049 |
707 | #define MGMT_READ_EXP_FEATURES_INFO_SIZE 0 |
708 | struct mgmt_rp_read_exp_features_info { |
709 | __le16 feature_count; |
710 | struct { |
711 | __u8 uuid[16]; |
712 | __le32 flags; |
713 | } features[]; |
714 | } __packed; |
715 | |
716 | #define MGMT_OP_SET_EXP_FEATURE 0x004a |
717 | struct mgmt_cp_set_exp_feature { |
718 | __u8 uuid[16]; |
719 | __u8 param[]; |
720 | } __packed; |
721 | #define MGMT_SET_EXP_FEATURE_SIZE 16 |
722 | struct mgmt_rp_set_exp_feature { |
723 | __u8 uuid[16]; |
724 | __le32 flags; |
725 | } __packed; |
726 | |
727 | #define MGMT_OP_READ_DEF_SYSTEM_CONFIG 0x004b |
728 | #define MGMT_READ_DEF_SYSTEM_CONFIG_SIZE 0 |
729 | |
730 | #define MGMT_OP_SET_DEF_SYSTEM_CONFIG 0x004c |
731 | #define MGMT_SET_DEF_SYSTEM_CONFIG_SIZE 0 |
732 | |
733 | #define MGMT_OP_READ_DEF_RUNTIME_CONFIG 0x004d |
734 | #define MGMT_READ_DEF_RUNTIME_CONFIG_SIZE 0 |
735 | |
736 | #define MGMT_OP_SET_DEF_RUNTIME_CONFIG 0x004e |
737 | #define MGMT_SET_DEF_RUNTIME_CONFIG_SIZE 0 |
738 | |
739 | #define MGMT_OP_GET_DEVICE_FLAGS 0x004F |
740 | #define MGMT_GET_DEVICE_FLAGS_SIZE 7 |
741 | struct mgmt_cp_get_device_flags { |
742 | struct mgmt_addr_info addr; |
743 | } __packed; |
744 | struct mgmt_rp_get_device_flags { |
745 | struct mgmt_addr_info addr; |
746 | __le32 supported_flags; |
747 | __le32 current_flags; |
748 | } __packed; |
749 | |
750 | #define MGMT_OP_SET_DEVICE_FLAGS 0x0050 |
751 | #define MGMT_SET_DEVICE_FLAGS_SIZE 11 |
752 | struct mgmt_cp_set_device_flags { |
753 | struct mgmt_addr_info addr; |
754 | __le32 current_flags; |
755 | } __packed; |
756 | struct mgmt_rp_set_device_flags { |
757 | struct mgmt_addr_info addr; |
758 | } __packed; |
759 | |
760 | #define MGMT_ADV_MONITOR_FEATURE_MASK_OR_PATTERNS BIT(0) |
761 | |
762 | #define MGMT_OP_READ_ADV_MONITOR_FEATURES 0x0051 |
763 | #define MGMT_READ_ADV_MONITOR_FEATURES_SIZE 0 |
764 | struct mgmt_rp_read_adv_monitor_features { |
765 | __le32 supported_features; |
766 | __le32 enabled_features; |
767 | __le16 max_num_handles; |
768 | __u8 max_num_patterns; |
769 | __le16 num_handles; |
770 | __le16 handles[]; |
771 | } __packed; |
772 | |
773 | struct mgmt_adv_pattern { |
774 | __u8 ad_type; |
775 | __u8 offset; |
776 | __u8 length; |
777 | __u8 value[31]; |
778 | } __packed; |
779 | |
780 | #define MGMT_OP_ADD_ADV_PATTERNS_MONITOR 0x0052 |
781 | struct mgmt_cp_add_adv_patterns_monitor { |
782 | __u8 pattern_count; |
783 | struct mgmt_adv_pattern patterns[]; |
784 | } __packed; |
785 | #define MGMT_ADD_ADV_PATTERNS_MONITOR_SIZE 1 |
786 | struct mgmt_rp_add_adv_patterns_monitor { |
787 | __le16 monitor_handle; |
788 | } __packed; |
789 | |
790 | #define MGMT_OP_REMOVE_ADV_MONITOR 0x0053 |
791 | struct mgmt_cp_remove_adv_monitor { |
792 | __le16 monitor_handle; |
793 | } __packed; |
794 | #define MGMT_REMOVE_ADV_MONITOR_SIZE 2 |
795 | struct mgmt_rp_remove_adv_monitor { |
796 | __le16 monitor_handle; |
797 | } __packed; |
798 | |
799 | #define MGMT_OP_ADD_EXT_ADV_PARAMS 0x0054 |
800 | struct mgmt_cp_add_ext_adv_params { |
801 | __u8 instance; |
802 | __le32 flags; |
803 | __le16 duration; |
804 | __le16 timeout; |
805 | __le32 min_interval; |
806 | __le32 max_interval; |
807 | __s8 tx_power; |
808 | } __packed; |
809 | #define MGMT_ADD_EXT_ADV_PARAMS_MIN_SIZE 18 |
810 | struct mgmt_rp_add_ext_adv_params { |
811 | __u8 instance; |
812 | __s8 tx_power; |
813 | __u8 max_adv_data_len; |
814 | __u8 max_scan_rsp_len; |
815 | } __packed; |
816 | |
817 | #define MGMT_OP_ADD_EXT_ADV_DATA 0x0055 |
818 | struct mgmt_cp_add_ext_adv_data { |
819 | __u8 instance; |
820 | __u8 adv_data_len; |
821 | __u8 scan_rsp_len; |
822 | __u8 data[]; |
823 | } __packed; |
824 | #define MGMT_ADD_EXT_ADV_DATA_SIZE 3 |
825 | struct mgmt_rp_add_ext_adv_data { |
826 | __u8 instance; |
827 | } __packed; |
828 | |
829 | struct { |
830 | __s8 ; |
831 | __le16 ; |
832 | __s8 ; |
833 | __le16 ; |
834 | __u8 ; |
835 | } __packed; |
836 | |
837 | #define 0x0056 |
838 | struct { |
839 | struct mgmt_adv_rssi_thresholds ; |
840 | __u8 ; |
841 | struct mgmt_adv_pattern []; |
842 | } __packed; |
843 | #define 8 |
844 | #define MGMT_OP_SET_MESH_RECEIVER 0x0057 |
845 | struct mgmt_cp_set_mesh { |
846 | __u8 enable; |
847 | __le16 window; |
848 | __le16 period; |
849 | __u8 num_ad_types; |
850 | __u8 ad_types[]; |
851 | } __packed; |
852 | #define MGMT_SET_MESH_RECEIVER_SIZE 6 |
853 | |
854 | #define MGMT_OP_MESH_READ_FEATURES 0x0058 |
855 | #define MGMT_MESH_READ_FEATURES_SIZE 0 |
856 | #define MESH_HANDLES_MAX 3 |
857 | struct mgmt_rp_mesh_read_features { |
858 | __le16 index; |
859 | __u8 max_handles; |
860 | __u8 used_handles; |
861 | __u8 handles[MESH_HANDLES_MAX]; |
862 | } __packed; |
863 | |
864 | #define MGMT_OP_MESH_SEND 0x0059 |
865 | struct mgmt_cp_mesh_send { |
866 | struct mgmt_addr_info addr; |
867 | __le64 instant; |
868 | __le16 delay; |
869 | __u8 cnt; |
870 | __u8 adv_data_len; |
871 | __u8 adv_data[]; |
872 | } __packed; |
873 | #define MGMT_MESH_SEND_SIZE 19 |
874 | |
875 | #define MGMT_OP_MESH_SEND_CANCEL 0x005A |
876 | struct mgmt_cp_mesh_send_cancel { |
877 | __u8 handle; |
878 | } __packed; |
879 | #define MGMT_MESH_SEND_CANCEL_SIZE 1 |
880 | |
881 | #define MGMT_EV_CMD_COMPLETE 0x0001 |
882 | struct mgmt_ev_cmd_complete { |
883 | __le16 opcode; |
884 | __u8 status; |
885 | __u8 data[]; |
886 | } __packed; |
887 | |
888 | #define MGMT_EV_CMD_STATUS 0x0002 |
889 | struct mgmt_ev_cmd_status { |
890 | __le16 opcode; |
891 | __u8 status; |
892 | } __packed; |
893 | |
894 | #define MGMT_EV_CONTROLLER_ERROR 0x0003 |
895 | struct mgmt_ev_controller_error { |
896 | __u8 error_code; |
897 | } __packed; |
898 | |
899 | #define MGMT_EV_INDEX_ADDED 0x0004 |
900 | |
901 | #define MGMT_EV_INDEX_REMOVED 0x0005 |
902 | |
903 | #define MGMT_EV_NEW_SETTINGS 0x0006 |
904 | |
905 | #define MGMT_EV_CLASS_OF_DEV_CHANGED 0x0007 |
906 | struct mgmt_ev_class_of_dev_changed { |
907 | __u8 dev_class[3]; |
908 | }; |
909 | |
910 | #define MGMT_EV_LOCAL_NAME_CHANGED 0x0008 |
911 | struct mgmt_ev_local_name_changed { |
912 | __u8 name[MGMT_MAX_NAME_LENGTH]; |
913 | __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH]; |
914 | } __packed; |
915 | |
916 | #define MGMT_EV_NEW_LINK_KEY 0x0009 |
917 | struct mgmt_ev_new_link_key { |
918 | __u8 store_hint; |
919 | struct mgmt_link_key_info key; |
920 | } __packed; |
921 | |
922 | #define MGMT_EV_NEW_LONG_TERM_KEY 0x000A |
923 | struct mgmt_ev_new_long_term_key { |
924 | __u8 store_hint; |
925 | struct mgmt_ltk_info key; |
926 | } __packed; |
927 | |
928 | #define MGMT_EV_DEVICE_CONNECTED 0x000B |
929 | struct mgmt_ev_device_connected { |
930 | struct mgmt_addr_info addr; |
931 | __le32 flags; |
932 | __le16 eir_len; |
933 | __u8 eir[]; |
934 | } __packed; |
935 | |
936 | #define MGMT_DEV_DISCONN_UNKNOWN 0x00 |
937 | #define MGMT_DEV_DISCONN_TIMEOUT 0x01 |
938 | #define MGMT_DEV_DISCONN_LOCAL_HOST 0x02 |
939 | #define MGMT_DEV_DISCONN_REMOTE 0x03 |
940 | #define MGMT_DEV_DISCONN_AUTH_FAILURE 0x04 |
941 | #define MGMT_DEV_DISCONN_LOCAL_HOST_SUSPEND 0x05 |
942 | |
943 | #define MGMT_EV_DEVICE_DISCONNECTED 0x000C |
944 | struct mgmt_ev_device_disconnected { |
945 | struct mgmt_addr_info addr; |
946 | __u8 reason; |
947 | } __packed; |
948 | |
949 | #define MGMT_EV_CONNECT_FAILED 0x000D |
950 | struct mgmt_ev_connect_failed { |
951 | struct mgmt_addr_info addr; |
952 | __u8 status; |
953 | } __packed; |
954 | |
955 | #define MGMT_EV_PIN_CODE_REQUEST 0x000E |
956 | struct mgmt_ev_pin_code_request { |
957 | struct mgmt_addr_info addr; |
958 | __u8 secure; |
959 | } __packed; |
960 | |
961 | #define MGMT_EV_USER_CONFIRM_REQUEST 0x000F |
962 | struct mgmt_ev_user_confirm_request { |
963 | struct mgmt_addr_info addr; |
964 | __u8 confirm_hint; |
965 | __le32 value; |
966 | } __packed; |
967 | |
968 | #define MGMT_EV_USER_PASSKEY_REQUEST 0x0010 |
969 | struct mgmt_ev_user_passkey_request { |
970 | struct mgmt_addr_info addr; |
971 | } __packed; |
972 | |
973 | #define MGMT_EV_AUTH_FAILED 0x0011 |
974 | struct mgmt_ev_auth_failed { |
975 | struct mgmt_addr_info addr; |
976 | __u8 status; |
977 | } __packed; |
978 | |
979 | #define MGMT_DEV_FOUND_CONFIRM_NAME BIT(0) |
980 | #define MGMT_DEV_FOUND_LEGACY_PAIRING BIT(1) |
981 | #define MGMT_DEV_FOUND_NOT_CONNECTABLE BIT(2) |
982 | #define MGMT_DEV_FOUND_INITIATED_CONN BIT(3) |
983 | #define MGMT_DEV_FOUND_NAME_REQUEST_FAILED BIT(4) |
984 | #define MGMT_DEV_FOUND_SCAN_RSP BIT(5) |
985 | |
986 | #define MGMT_EV_DEVICE_FOUND 0x0012 |
987 | struct mgmt_ev_device_found { |
988 | struct mgmt_addr_info addr; |
989 | __s8 ; |
990 | __le32 flags; |
991 | __le16 eir_len; |
992 | __u8 eir[]; |
993 | } __packed; |
994 | |
995 | #define MGMT_EV_DISCOVERING 0x0013 |
996 | struct mgmt_ev_discovering { |
997 | __u8 type; |
998 | __u8 discovering; |
999 | } __packed; |
1000 | |
1001 | #define MGMT_EV_DEVICE_BLOCKED 0x0014 |
1002 | struct mgmt_ev_device_blocked { |
1003 | struct mgmt_addr_info addr; |
1004 | } __packed; |
1005 | |
1006 | #define MGMT_EV_DEVICE_UNBLOCKED 0x0015 |
1007 | struct mgmt_ev_device_unblocked { |
1008 | struct mgmt_addr_info addr; |
1009 | } __packed; |
1010 | |
1011 | #define MGMT_EV_DEVICE_UNPAIRED 0x0016 |
1012 | struct mgmt_ev_device_unpaired { |
1013 | struct mgmt_addr_info addr; |
1014 | } __packed; |
1015 | |
1016 | #define MGMT_EV_PASSKEY_NOTIFY 0x0017 |
1017 | struct mgmt_ev_passkey_notify { |
1018 | struct mgmt_addr_info addr; |
1019 | __le32 passkey; |
1020 | __u8 entered; |
1021 | } __packed; |
1022 | |
1023 | #define MGMT_EV_NEW_IRK 0x0018 |
1024 | struct mgmt_ev_new_irk { |
1025 | __u8 store_hint; |
1026 | bdaddr_t rpa; |
1027 | struct mgmt_irk_info irk; |
1028 | } __packed; |
1029 | |
1030 | #define MGMT_CSRK_LOCAL_UNAUTHENTICATED 0x00 |
1031 | #define MGMT_CSRK_REMOTE_UNAUTHENTICATED 0x01 |
1032 | #define MGMT_CSRK_LOCAL_AUTHENTICATED 0x02 |
1033 | #define MGMT_CSRK_REMOTE_AUTHENTICATED 0x03 |
1034 | |
1035 | struct mgmt_csrk_info { |
1036 | struct mgmt_addr_info addr; |
1037 | __u8 type; |
1038 | __u8 val[16]; |
1039 | } __packed; |
1040 | |
1041 | #define MGMT_EV_NEW_CSRK 0x0019 |
1042 | struct mgmt_ev_new_csrk { |
1043 | __u8 store_hint; |
1044 | struct mgmt_csrk_info key; |
1045 | } __packed; |
1046 | |
1047 | #define MGMT_EV_DEVICE_ADDED 0x001a |
1048 | struct mgmt_ev_device_added { |
1049 | struct mgmt_addr_info addr; |
1050 | __u8 action; |
1051 | } __packed; |
1052 | |
1053 | #define MGMT_EV_DEVICE_REMOVED 0x001b |
1054 | struct mgmt_ev_device_removed { |
1055 | struct mgmt_addr_info addr; |
1056 | } __packed; |
1057 | |
1058 | #define MGMT_EV_NEW_CONN_PARAM 0x001c |
1059 | struct mgmt_ev_new_conn_param { |
1060 | struct mgmt_addr_info addr; |
1061 | __u8 store_hint; |
1062 | __le16 min_interval; |
1063 | __le16 max_interval; |
1064 | __le16 latency; |
1065 | __le16 timeout; |
1066 | } __packed; |
1067 | |
1068 | #define MGMT_EV_UNCONF_INDEX_ADDED 0x001d |
1069 | |
1070 | #define MGMT_EV_UNCONF_INDEX_REMOVED 0x001e |
1071 | |
1072 | #define MGMT_EV_NEW_CONFIG_OPTIONS 0x001f |
1073 | |
1074 | struct mgmt_ev_ext_index { |
1075 | __u8 type; |
1076 | __u8 bus; |
1077 | } __packed; |
1078 | |
1079 | #define MGMT_EV_EXT_INDEX_ADDED 0x0020 |
1080 | |
1081 | #define MGMT_EV_EXT_INDEX_REMOVED 0x0021 |
1082 | |
1083 | #define MGMT_EV_LOCAL_OOB_DATA_UPDATED 0x0022 |
1084 | struct mgmt_ev_local_oob_data_updated { |
1085 | __u8 type; |
1086 | __le16 eir_len; |
1087 | __u8 eir[]; |
1088 | } __packed; |
1089 | |
1090 | #define MGMT_EV_ADVERTISING_ADDED 0x0023 |
1091 | struct mgmt_ev_advertising_added { |
1092 | __u8 instance; |
1093 | } __packed; |
1094 | |
1095 | #define MGMT_EV_ADVERTISING_REMOVED 0x0024 |
1096 | struct mgmt_ev_advertising_removed { |
1097 | __u8 instance; |
1098 | } __packed; |
1099 | |
1100 | #define MGMT_EV_EXT_INFO_CHANGED 0x0025 |
1101 | struct mgmt_ev_ext_info_changed { |
1102 | __le16 eir_len; |
1103 | __u8 eir[]; |
1104 | } __packed; |
1105 | |
1106 | #define MGMT_EV_PHY_CONFIGURATION_CHANGED 0x0026 |
1107 | struct mgmt_ev_phy_configuration_changed { |
1108 | __le32 selected_phys; |
1109 | } __packed; |
1110 | |
1111 | #define MGMT_EV_EXP_FEATURE_CHANGED 0x0027 |
1112 | struct mgmt_ev_exp_feature_changed { |
1113 | __u8 uuid[16]; |
1114 | __le32 flags; |
1115 | } __packed; |
1116 | |
1117 | #define MGMT_EV_DEVICE_FLAGS_CHANGED 0x002a |
1118 | struct mgmt_ev_device_flags_changed { |
1119 | struct mgmt_addr_info addr; |
1120 | __le32 supported_flags; |
1121 | __le32 current_flags; |
1122 | } __packed; |
1123 | |
1124 | #define MGMT_EV_ADV_MONITOR_ADDED 0x002b |
1125 | struct mgmt_ev_adv_monitor_added { |
1126 | __le16 monitor_handle; |
1127 | } __packed; |
1128 | |
1129 | #define MGMT_EV_ADV_MONITOR_REMOVED 0x002c |
1130 | struct mgmt_ev_adv_monitor_removed { |
1131 | __le16 monitor_handle; |
1132 | } __packed; |
1133 | |
1134 | #define MGMT_EV_CONTROLLER_SUSPEND 0x002d |
1135 | struct mgmt_ev_controller_suspend { |
1136 | __u8 suspend_state; |
1137 | } __packed; |
1138 | |
1139 | #define MGMT_EV_CONTROLLER_RESUME 0x002e |
1140 | struct mgmt_ev_controller_resume { |
1141 | __u8 wake_reason; |
1142 | struct mgmt_addr_info addr; |
1143 | } __packed; |
1144 | |
1145 | #define MGMT_WAKE_REASON_NON_BT_WAKE 0x0 |
1146 | #define MGMT_WAKE_REASON_UNEXPECTED 0x1 |
1147 | #define MGMT_WAKE_REASON_REMOTE_WAKE 0x2 |
1148 | |
1149 | #define MGMT_EV_ADV_MONITOR_DEVICE_FOUND 0x002f |
1150 | struct mgmt_ev_adv_monitor_device_found { |
1151 | __le16 monitor_handle; |
1152 | struct mgmt_addr_info addr; |
1153 | __s8 ; |
1154 | __le32 flags; |
1155 | __le16 eir_len; |
1156 | __u8 eir[]; |
1157 | } __packed; |
1158 | |
1159 | #define MGMT_EV_ADV_MONITOR_DEVICE_LOST 0x0030 |
1160 | struct mgmt_ev_adv_monitor_device_lost { |
1161 | __le16 monitor_handle; |
1162 | struct mgmt_addr_info addr; |
1163 | } __packed; |
1164 | |
1165 | #define MGMT_EV_MESH_DEVICE_FOUND 0x0031 |
1166 | struct mgmt_ev_mesh_device_found { |
1167 | struct mgmt_addr_info addr; |
1168 | __s8 ; |
1169 | __le64 instant; |
1170 | __le32 flags; |
1171 | __le16 eir_len; |
1172 | __u8 eir[]; |
1173 | } __packed; |
1174 | |
1175 | |
1176 | #define MGMT_EV_MESH_PACKET_CMPLT 0x0032 |
1177 | struct mgmt_ev_mesh_pkt_cmplt { |
1178 | __u8 handle; |
1179 | } __packed; |
1180 | |