Initial commit
[kernel/linux-3.0.git] / include / net / bluetooth / mgmt_mgmt.h
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3
4    Copyright (C) 2010  Nokia Corporation
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License version 2 as
8    published by the Free Software Foundation;
9
10    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
19    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21    SOFTWARE IS DISCLAIMED.
22 */
23
24 #define MGMT_INDEX_NONE                 0xFFFF
25
26 #define MGMT_STATUS_SUCCESS             0x00
27 #define MGMT_STATUS_UNKNOWN_COMMAND     0x01
28 #define MGMT_STATUS_NOT_CONNECTED       0x02
29 #define MGMT_STATUS_FAILED              0x03
30 #define MGMT_STATUS_CONNECT_FAILED      0x04
31 #define MGMT_STATUS_AUTH_FAILED         0x05
32 #define MGMT_STATUS_NOT_PAIRED          0x06
33 #define MGMT_STATUS_NO_RESOURCES        0x07
34 #define MGMT_STATUS_TIMEOUT             0x08
35 #define MGMT_STATUS_ALREADY_CONNECTED   0x09
36 #define MGMT_STATUS_BUSY                0x0a
37 #define MGMT_STATUS_REJECTED            0x0b
38 #define MGMT_STATUS_NOT_SUPPORTED       0x0c
39 #define MGMT_STATUS_INVALID_PARAMS      0x0d
40 #define MGMT_STATUS_DISCONNECTED        0x0e
41 #define MGMT_STATUS_NOT_POWERED         0x0f
42 #define MGMT_STATUS_CANCELLED           0x10
43
44 struct mgmt_hdr {
45         __le16 opcode;
46         __le16 index;
47         __le16 len;
48 } __packed;
49
50 #define MGMT_ADDR_BREDR                 0x00
51 #define MGMT_ADDR_LE_PUBLIC             0x01
52 #define MGMT_ADDR_LE_RANDOM             0x02
53 #define MGMT_ADDR_INVALID               0xff
54
55 struct mgmt_addr_info {
56         bdaddr_t bdaddr;
57         __u8 type;
58 } __packed;
59
60 #define MGMT_OP_READ_VERSION            0x0001
61 struct mgmt_rp_read_version {
62         __u8 version;
63         __le16 revision;
64 } __packed;
65
66 #define MGMT_OP_READ_COMMANDS          0x0002
67 struct mgmt_rp_read_commands {
68         __le16 num_commands;
69         __le16 num_events;
70         __le16 opcodes[0];
71 } __packed;
72
73 #define MGMT_OP_READ_INDEX_LIST         0x0003
74 struct mgmt_rp_read_index_list {
75         __le16 num_controllers;
76         __le16 index[0];
77 } __packed;
78
79 /* Reserve one extra byte for names in management messages so that they
80  * are always guaranteed to be nul-terminated */
81 #define MGMT_MAX_NAME_LENGTH            (HCI_MAX_NAME_LENGTH + 1)
82 #define MGMT_MAX_SHORT_NAME_LENGTH      (10 + 1)
83
84 #define MGMT_SETTING_POWERED            0x00000001
85 #define MGMT_SETTING_CONNECTABLE        0x00000002
86 #define MGMT_SETTING_FAST_CONNECTABLE   0x00000004
87 #define MGMT_SETTING_DISCOVERABLE       0x00000008
88 #define MGMT_SETTING_PAIRABLE           0x00000010
89 #define MGMT_SETTING_LINK_SECURITY      0x00000020
90 #define MGMT_SETTING_SSP                0x00000040
91 #define MGMT_SETTING_BREDR              0x00000080
92 #define MGMT_SETTING_HS                 0x00000100
93 #define MGMT_SETTING_LE                 0x00000200
94
95 #define MGMT_OP_READ_INFO               0x0004
96 struct mgmt_rp_read_info {
97         bdaddr_t bdaddr;
98         __u8 version;
99         __le16 manufacturer;
100         __le32 supported_settings;
101         __le32 current_settings;
102         __u8 dev_class[3];
103         __u8 name[MGMT_MAX_NAME_LENGTH];
104         __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
105 } __packed;
106
107 struct mgmt_mode {
108         __u8 val;
109 } __packed;
110
111 #define MGMT_OP_SET_POWERED             0x0005
112
113 #define MGMT_OP_SET_DISCOVERABLE        0x0006
114 struct mgmt_cp_set_discoverable {
115         __u8 val;
116         __u16 timeout;
117 } __packed;
118
119 #define MGMT_OP_SET_CONNECTABLE         0x0007
120
121 #define MGMT_OP_SET_FAST_CONNECTABLE    0x0008
122
123 #define MGMT_OP_SET_PAIRABLE            0x0009
124
125 #define MGMT_OP_SET_LINK_SECURITY       0x000A
126
127 #define MGMT_OP_SET_SSP                 0x000B
128
129 #define MGMT_OP_SET_HS                  0x000C
130
131 #define MGMT_OP_SET_LE                  0x000D
132
133 #define MGMT_OP_SET_DEV_CLASS           0x000E
134 struct mgmt_cp_set_dev_class {
135         __u8 major;
136         __u8 minor;
137 } __packed;
138
139 #define MGMT_OP_SET_LOCAL_NAME          0x000F
140 struct mgmt_cp_set_local_name {
141         __u8 name[MGMT_MAX_NAME_LENGTH];
142 /* SSBT :: KJH + set local name issue */
143         __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
144 } __packed;
145
146 #define MGMT_OP_ADD_UUID                0x0010
147 struct mgmt_cp_add_uuid {
148         __u8 uuid[16];
149         __u8 svc_hint;
150 } __packed;
151
152 #define MGMT_OP_REMOVE_UUID             0x0011
153 struct mgmt_cp_remove_uuid {
154         __u8 uuid[16];
155 } __packed;
156
157 struct mgmt_link_key_info {
158         bdaddr_t bdaddr;
159         u8 type;
160         u8 val[16];
161         u8 pin_len;
162 } __packed;
163
164 #define MGMT_OP_LOAD_LINK_KEYS          0x0012
165 struct mgmt_cp_load_link_keys {
166         __u8 debug_keys;
167         __le16 key_count;
168         struct mgmt_link_key_info keys[0];
169 } __packed;
170
171 struct mgmt_ltk_info {
172         struct mgmt_addr_info addr;
173         __u8 authenticated;
174         __u8 master;
175         __u8 enc_size;
176         __le16 ediv;
177         __u8 rand[8];
178         __u8 val[16];
179 } __packed;
180
181 #define MGMT_OP_LOAD_LONG_TERM_KEYS     0x0013
182 struct mgmt_cp_load_long_term_keys {
183         __le16 key_count;
184         struct mgmt_ltk_info keys[0];
185 } __packed;
186
187 /*
188 #define MGMT_OP_REMOVE_KEYS             0x0014
189 struct mgmt_cp_remove_keys {
190         bdaddr_t bdaddr;
191         __u8 disconnect;
192 } __packed;
193 struct mgmt_rp_remove_keys {
194         bdaddr_t bdaddr;
195         __u8 status;
196 };
197 */
198
199 #define MGMT_OP_DISCONNECT              0x0014
200 struct mgmt_cp_disconnect {
201         struct mgmt_addr_info addr;
202 } __packed;
203 struct mgmt_rp_disconnect {
204         struct mgmt_addr_info addr;
205         __u8 status;
206 } __packed;
207
208 #define MGMT_OP_GET_CONNECTIONS         0x0015
209 struct mgmt_rp_get_connections {
210         __le16 conn_count;
211         struct mgmt_addr_info addr[0];
212 } __packed;
213
214 #define MGMT_OP_PIN_CODE_REPLY          0x0016
215 struct mgmt_cp_pin_code_reply {
216         bdaddr_t bdaddr;
217         __u8 pin_len;
218         __u8 pin_code[16];
219 } __packed;
220 struct mgmt_rp_pin_code_reply {
221         bdaddr_t bdaddr;
222         uint8_t status;
223 } __packed;
224
225 #define MGMT_OP_PIN_CODE_NEG_REPLY      0x0017
226 struct mgmt_cp_pin_code_neg_reply {
227         bdaddr_t bdaddr;
228 } __packed;
229
230 #define MGMT_OP_SET_IO_CAPABILITY       0x0018
231 struct mgmt_cp_set_io_capability {
232         __u8 io_capability;
233 } __packed;
234
235 #define MGMT_OP_PAIR_DEVICE             0x0019
236 struct mgmt_cp_pair_device {
237         struct mgmt_addr_info addr;
238         __u8 io_cap;
239 } __packed;
240 struct mgmt_rp_pair_device {
241         struct mgmt_addr_info addr;
242         __u8 status;
243 } __packed;
244
245 #define MGMT_OP_CANCEL_PAIR_DEVICE      0x001A
246
247 #define MGMT_OP_UNPAIR_DEVICE           0x001B
248 struct mgmt_cp_unpair_device {
249         struct mgmt_addr_info addr;
250         __u8 disconnect;
251 } __packed;
252 struct mgmt_rp_unpair_device {
253         struct mgmt_addr_info addr;
254         __u8 status;
255 };
256
257 #define MGMT_OP_USER_CONFIRM_REPLY      0x001C
258 struct mgmt_cp_user_confirm_reply {
259         struct mgmt_addr_info addr;
260 } __packed;
261 struct mgmt_rp_user_confirm_reply {
262         struct mgmt_addr_info addr;
263         __u8 status;
264 } __packed;
265
266 #define MGMT_OP_USER_CONFIRM_NEG_REPLY  0x001D
267 struct mgmt_cp_user_confirm_neg_reply {
268         struct mgmt_addr_info addr;
269 } __packed;
270
271 #define MGMT_OP_USER_PASSKEY_REPLY      0x001E
272 struct mgmt_cp_user_passkey_reply {
273         struct mgmt_addr_info addr;
274         __le32 passkey;
275 } __packed;
276 struct mgmt_rp_user_passkey_reply {
277         struct mgmt_addr_info addr;
278         __u8 status;
279 } __packed;
280
281 #define MGMT_OP_USER_PASSKEY_NEG_REPLY  0x001F
282 struct mgmt_cp_user_passkey_neg_reply {
283         struct mgmt_addr_info addr;
284 } __packed;
285
286 #define MGMT_OP_READ_LOCAL_OOB_DATA     0x0020
287 struct mgmt_rp_read_local_oob_data {
288         __u8 hash[16];
289         __u8 randomizer[16];
290 } __packed;
291
292 #define MGMT_OP_ADD_REMOTE_OOB_DATA     0x0021
293 struct mgmt_cp_add_remote_oob_data {
294         struct mgmt_addr_info addr;
295         __u8 hash[16];
296         __u8 randomizer[16];
297 } __packed;
298
299 #define MGMT_OP_REMOVE_REMOTE_OOB_DATA  0x0022
300 struct mgmt_cp_remove_remote_oob_data {
301         struct mgmt_addr_info addr;
302 } __packed;
303
304 #define MGMT_OP_START_DISCOVERY         0x0023
305 struct mgmt_cp_start_discovery {
306         __u8 type;
307 } __packed;
308
309 #define MGMT_OP_STOP_DISCOVERY          0x0024
310
311 #define MGMT_OP_CONFIRM_NAME            0x0025
312 struct mgmt_cp_confirm_name {
313         bdaddr_t bdaddr;
314         __u8 name_known;
315 } __packed;
316 struct mgmt_rp_confirm_name {
317         bdaddr_t bdaddr;
318         __u8 status;
319 } __packed;
320
321 #define MGMT_OP_BLOCK_DEVICE            0x0026
322 struct mgmt_cp_block_device {
323         struct mgmt_addr_info addr;
324 } __packed;
325
326 #define MGMT_OP_UNBLOCK_DEVICE          0x0027
327 struct mgmt_cp_unblock_device {
328         struct mgmt_addr_info addr;
329 } __packed;
330
331 #define MGMT_OP_LE_TEST_END             0x0028
332 struct mgmt_rp_le_test_end {
333         __u8 status;
334         __u16 num_pkts;
335 } __packed;
336
337 #define MGMT_EV_CMD_COMPLETE            0x0001
338 struct mgmt_ev_cmd_complete {
339         __le16 opcode;
340         __u8 data[0];
341 } __packed;
342
343 #define MGMT_EV_CMD_STATUS              0x0002
344 struct mgmt_ev_cmd_status {
345         __u8 status;
346         __le16 opcode;
347 } __packed;
348
349 #define MGMT_EV_CONTROLLER_ERROR        0x0003
350 struct mgmt_ev_controller_error {
351         __u8 error_code;
352 } __packed;
353
354 #define MGMT_EV_INDEX_ADDED             0x0004
355
356 #define MGMT_EV_INDEX_REMOVED           0x0005
357
358 #define MGMT_EV_NEW_SETTINGS            0x0006
359
360 #define MGMT_EV_CLASS_OF_DEV_CHANGED    0x0007
361 struct mgmt_ev_class_of_dev_changed {
362         __u8 dev_class[3];
363 };
364
365 #define MGMT_EV_LOCAL_NAME_CHANGED      0x0008
366 struct mgmt_ev_local_name_changed {
367         __u8 name[MGMT_MAX_NAME_LENGTH];
368         __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
369 } __packed;
370
371 #define MGMT_EV_NEW_LINK_KEY            0x0009
372 struct mgmt_ev_new_link_key {
373         __u8 store_hint;
374         struct mgmt_link_key_info key;
375 } __packed;
376
377 #define MGMT_EV_NEW_LONG_TERM_KEY       0x000A
378 struct mgmt_ev_new_long_term_key {
379         __u8 store_hint;
380         struct mgmt_ltk_info key;
381 } __packed;
382
383 #define MGMT_EV_DEVICE_CONNECTED        0x000B
384 struct mgmt_ev_device_connected {
385         struct mgmt_addr_info addr;
386         __le16 eir_len;
387         __u8 eir[0];
388 } __packed;
389
390 #define MGMT_EV_DEVICE_DISCONNECTED     0x000C
391
392 #define MGMT_EV_CONNECT_FAILED          0x000D
393 struct mgmt_ev_connect_failed {
394         struct mgmt_addr_info addr;
395         __u8 status;
396 } __packed;
397
398 #define MGMT_EV_PIN_CODE_REQUEST        0x000E
399 struct mgmt_ev_pin_code_request {
400         bdaddr_t bdaddr;
401         __u8 secure;
402 } __packed;
403
404 #define MGMT_EV_USER_CONFIRM_REQUEST    0x000F
405 struct mgmt_ev_user_confirm_request {
406         struct mgmt_addr_info addr;
407         __u8 confirm_hint;
408         __le32 value;
409 } __packed;
410
411 #define MGMT_EV_USER_PASSKEY_REQUEST    0x0010
412 struct mgmt_ev_user_passkey_request {
413         struct mgmt_addr_info addr;
414 } __packed;
415
416 #define MGMT_EV_AUTH_FAILED             0x0011
417 struct mgmt_ev_auth_failed {
418         struct mgmt_addr_info addr;
419         __u8 status;
420 } __packed;
421
422 #define MGMT_EV_DEVICE_FOUND            0x0012
423 struct mgmt_ev_device_found {
424         struct mgmt_addr_info addr;
425         __s8 rssi;
426         __u8 confirm_name;
427         __le16 eir_len;
428         __u8 eir[0];
429 } __packed;
430
431 #define MGMT_EV_DISCOVERING             0x0013
432
433 #define MGMT_EV_DEVICE_BLOCKED          0x0014
434 struct mgmt_ev_device_blocked {
435         struct mgmt_addr_info addr;
436 } __packed;
437
438 #define MGMT_EV_DEVICE_UNBLOCKED        0x0015
439 struct mgmt_ev_device_unblocked {
440         struct mgmt_addr_info addr;
441 } __packed;
442
443 #define MGMT_EV_DEVICE_UNPAIRED         0x0016
444 struct mgmt_ev_device_unpaired {
445         struct mgmt_addr_info addr;
446 } __packed;
447
448 /* SSBT :: LJH + */
449 #define MGMT_OP_ENCRYPT_LINK            0x0101
450 struct mgmt_cp_encrypt_link {
451         bdaddr_t bdaddr;
452         __u8 enable;
453 } __packed;
454
455 /* monitoring of the RSSI of the link between two Bluetooth devices */
456 #define MGMT_OP_READ_RSSI               0x0102
457 struct mgmt_cp_read_rssi {
458         bdaddr_t bdaddr;
459 } __packed;
460
461 struct mgmt_rp_read_rssi {
462         __u8 status;
463         bdaddr_t bdaddr;
464         __s8 rssi;
465 } __packed;
466
467 /* SSBT :: KJH + to check encryption changed status */
468 #define MGMT_EV_ENCRYPT_CHANGE          0x0101
469 struct mgmt_ev_encrypt_change {
470         bdaddr_t bdaddr;
471         __u8 status;
472 } __packed;
473
474 /* SSBT :: LJH(bluez0220) + passkey notification */
475 #define MGMT_EV_USER_PASSKEY_NOTIFICATION       0x0102
476 struct mgmt_ev_user_passkey_notificaion {
477         bdaddr_t bdaddr;
478         uint32_t value;
479 } __packed;
480 /* SSBT :: LJH(bluez0220) + passkey notification end */
481
482 #define MGMT_WRITE_LE_HOST_SUPPORTED    0x0103
483 struct write_le_host_supported {
484         uint8_t         le;
485         uint8_t         simul;
486 } __packed;
487
488 #define MGMT_EV_REMOTE_VERSION          0x0104
489 struct mgmt_ev_remote_version {
490         bdaddr_t bdaddr;
491         __u8    lmp_ver;
492         __u16   manufacturer;
493         __u16   lmp_subver;
494 } __packed;
495
496 #define MGMT_EV_REMOTE_FEATURES         0x0105
497 struct mgmt_ev_remote_features {
498         bdaddr_t bdaddr;
499         uint8_t features[8];
500 } __packed;