Bluetooth: Add structures for the new LTK exchange messages
[deliverable/linux.git] / include / net / bluetooth / mgmt.h
CommitLineData
c02178d2
JH
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
4e51eae9
SJ
24#define MGMT_INDEX_NONE 0xFFFF
25
ca69b795
JH
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
c02178d2
JH
43struct mgmt_hdr {
44 __le16 opcode;
4e51eae9 45 __le16 index;
c02178d2
JH
46 __le16 len;
47} __packed;
c02178d2 48
02d98129
JH
49#define MGMT_OP_READ_VERSION 0x0001
50struct mgmt_rp_read_version {
51 __u8 version;
52 __le16 revision;
53} __packed;
54
faba42eb
JH
55#define MGMT_OP_READ_INDEX_LIST 0x0003
56struct mgmt_rp_read_index_list {
57 __le16 num_controllers;
58 __le16 index[0];
59} __packed;
60
dc4fe30b
JH
61/* Reserve one extra byte for names in management messages so that they
62 * are always guaranteed to be nul-terminated */
63#define MGMT_MAX_NAME_LENGTH (HCI_MAX_NAME_LENGTH + 1)
69ab39ea
JH
64#define MGMT_MAX_SHORT_NAME_LENGTH (10 + 1)
65
66#define MGMT_SETTING_POWERED 0x00000001
67#define MGMT_SETTING_CONNECTABLE 0x00000002
68#define MGMT_SETTING_FAST_CONNECTABLE 0x00000004
69#define MGMT_SETTING_DISCOVERABLE 0x00000008
70#define MGMT_SETTING_PAIRABLE 0x00000010
71#define MGMT_SETTING_LINK_SECURITY 0x00000020
72#define MGMT_SETTING_SSP 0x00000040
73#define MGMT_SETTING_BREDR 0x00000080
74#define MGMT_SETTING_HS 0x00000100
75#define MGMT_SETTING_LE 0x00000200
dc4fe30b 76
f7b64e69 77#define MGMT_OP_READ_INFO 0x0004
f7b64e69 78struct mgmt_rp_read_info {
f7b64e69 79 bdaddr_t bdaddr;
69ab39ea
JH
80 __u8 version;
81 __le16 manufacturer;
82 __le32 supported_settings;
83 __le32 current_settings;
f7b64e69 84 __u8 dev_class[3];
dc4fe30b 85 __u8 name[MGMT_MAX_NAME_LENGTH];
69ab39ea 86 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
f7b64e69
JH
87} __packed;
88
72a734ec 89struct mgmt_mode {
72a734ec 90 __u8 val;
eec8d2bc
JH
91} __packed;
92
72a734ec
JH
93#define MGMT_OP_SET_POWERED 0x0005
94
73f22f62 95#define MGMT_OP_SET_DISCOVERABLE 0x0006
16ab91ab
JH
96struct mgmt_cp_set_discoverable {
97 __u8 val;
98 __u16 timeout;
99} __packed;
73f22f62 100
9fbcbb45 101#define MGMT_OP_SET_CONNECTABLE 0x0007
9fbcbb45 102
f71d5a25 103#define MGMT_OP_SET_FAST_CONNECTABLE 0x0008
f7c6869c 104
f71d5a25 105#define MGMT_OP_SET_PAIRABLE 0x0009
c542a06c 106
f71d5a25
JH
107#define MGMT_OP_SET_LINK_SECURITY 0x000A
108
109#define MGMT_OP_SET_SSP 0x000B
110
111#define MGMT_OP_SET_HS 0x000C
112
113#define MGMT_OP_SET_LE 0x000D
114
115#define MGMT_OP_SET_DEV_CLASS 0x000E
116struct mgmt_cp_set_dev_class {
117 __u8 major;
118 __u8 minor;
119} __packed;
120
121#define MGMT_OP_SET_LOCAL_NAME 0x000F
122struct mgmt_cp_set_local_name {
123 __u8 name[MGMT_MAX_NAME_LENGTH];
124} __packed;
125
126#define MGMT_OP_ADD_UUID 0x0010
2aeb9a1a 127struct mgmt_cp_add_uuid {
2aeb9a1a 128 __u8 uuid[16];
1aff6f09 129 __u8 svc_hint;
2aeb9a1a
JH
130} __packed;
131
f71d5a25 132#define MGMT_OP_REMOVE_UUID 0x0011
2aeb9a1a 133struct mgmt_cp_remove_uuid {
2aeb9a1a
JH
134 __u8 uuid[16];
135} __packed;
136
86742e1e 137struct mgmt_link_key_info {
55ed8ca1
JH
138 bdaddr_t bdaddr;
139 u8 type;
140 u8 val[16];
141 u8 pin_len;
142} __packed;
143
f71d5a25 144#define MGMT_OP_LOAD_LINK_KEYS 0x0012
86742e1e 145struct mgmt_cp_load_link_keys {
55ed8ca1
JH
146 __u8 debug_keys;
147 __le16 key_count;
86742e1e 148 struct mgmt_link_key_info keys[0];
55ed8ca1
JH
149} __packed;
150
f71d5a25 151#define MGMT_OP_REMOVE_KEYS 0x0013
86742e1e 152struct mgmt_cp_remove_keys {
55ed8ca1
JH
153 bdaddr_t bdaddr;
154 __u8 disconnect;
155} __packed;
a8a1d19e
JH
156struct mgmt_rp_remove_keys {
157 bdaddr_t bdaddr;
158 __u8 status;
159};
8962ee74 160
f71d5a25 161#define MGMT_OP_DISCONNECT 0x0014
8962ee74 162struct mgmt_cp_disconnect {
8962ee74
JH
163 bdaddr_t bdaddr;
164} __packed;
165struct mgmt_rp_disconnect {
8962ee74 166 bdaddr_t bdaddr;
37d9ef76 167 __u8 status;
8962ee74 168} __packed;
55ed8ca1 169
4c659c39 170#define MGMT_ADDR_BREDR 0x00
48264f06
JH
171#define MGMT_ADDR_LE_PUBLIC 0x01
172#define MGMT_ADDR_LE_RANDOM 0x02
4c659c39
JH
173#define MGMT_ADDR_INVALID 0xff
174
175struct mgmt_addr_info {
176 bdaddr_t bdaddr;
177 __u8 type;
178} __packed;
179
f71d5a25 180#define MGMT_OP_GET_CONNECTIONS 0x0015
2784eb41 181struct mgmt_rp_get_connections {
2784eb41 182 __le16 conn_count;
4c659c39 183 struct mgmt_addr_info addr[0];
2784eb41
JH
184} __packed;
185
f71d5a25 186#define MGMT_OP_PIN_CODE_REPLY 0x0016
980e1a53 187struct mgmt_cp_pin_code_reply {
980e1a53
JH
188 bdaddr_t bdaddr;
189 __u8 pin_len;
190 __u8 pin_code[16];
191} __packed;
ac56fb13 192struct mgmt_rp_pin_code_reply {
ac56fb13
JH
193 bdaddr_t bdaddr;
194 uint8_t status;
195} __packed;
980e1a53 196
f71d5a25 197#define MGMT_OP_PIN_CODE_NEG_REPLY 0x0017
980e1a53 198struct mgmt_cp_pin_code_neg_reply {
980e1a53
JH
199 bdaddr_t bdaddr;
200} __packed;
201
f71d5a25 202#define MGMT_OP_SET_IO_CAPABILITY 0x0018
17fa4b9d 203struct mgmt_cp_set_io_capability {
17fa4b9d
JH
204 __u8 io_capability;
205} __packed;
206
f71d5a25 207#define MGMT_OP_PAIR_DEVICE 0x0019
e9a416b5 208struct mgmt_cp_pair_device {
ba4e564f 209 struct mgmt_addr_info addr;
e9a416b5
JH
210 __u8 io_cap;
211} __packed;
212struct mgmt_rp_pair_device {
ba4e564f 213 struct mgmt_addr_info addr;
e9a416b5
JH
214 __u8 status;
215} __packed;
216
f71d5a25 217#define MGMT_OP_USER_CONFIRM_REPLY 0x001A
a5c29683 218struct mgmt_cp_user_confirm_reply {
a5c29683
JH
219 bdaddr_t bdaddr;
220} __packed;
221struct mgmt_rp_user_confirm_reply {
a5c29683
JH
222 bdaddr_t bdaddr;
223 __u8 status;
224} __packed;
225
f71d5a25
JH
226#define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x001B
227struct mgmt_cp_user_confirm_neg_reply {
228 bdaddr_t bdaddr;
229} __packed;
a5c29683 230
f71d5a25
JH
231#define MGMT_OP_USER_PASSKEY_REPLY 0x001C
232struct mgmt_cp_user_passkey_reply {
233 bdaddr_t bdaddr;
234 __le32 passkey;
235} __packed;
236struct mgmt_rp_user_passkey_reply {
237 bdaddr_t bdaddr;
238 __u8 status;
239} __packed;
240
241#define MGMT_OP_USER_PASSKEY_NEG_REPLY 0x001D
242struct mgmt_cp_user_passkey_neg_reply {
243 bdaddr_t bdaddr;
b312b161
JH
244} __packed;
245
f71d5a25 246#define MGMT_OP_READ_LOCAL_OOB_DATA 0x001E
c35938b2
SJ
247struct mgmt_rp_read_local_oob_data {
248 __u8 hash[16];
249 __u8 randomizer[16];
250} __packed;
251
f71d5a25 252#define MGMT_OP_ADD_REMOTE_OOB_DATA 0x001F
2763eda6
SJ
253struct mgmt_cp_add_remote_oob_data {
254 bdaddr_t bdaddr;
255 __u8 hash[16];
256 __u8 randomizer[16];
257} __packed;
258
f71d5a25 259#define MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0020
2763eda6
SJ
260struct mgmt_cp_remove_remote_oob_data {
261 bdaddr_t bdaddr;
262} __packed;
263
f71d5a25 264#define MGMT_OP_START_DISCOVERY 0x0021
450dfdaf
JH
265struct mgmt_cp_start_discovery {
266 __u8 type;
267} __packed;
14a53664 268
f71d5a25 269#define MGMT_OP_STOP_DISCOVERY 0x0022
14a53664 270
4dad9992
JH
271#define MGMT_OP_CONFIRM_NAME 0x0023
272struct mgmt_cp_confirm_name {
273 bdaddr_t bdaddr;
274 __u8 name_known;
275} __packed;
276struct mgmt_rp_confirm_name {
277 bdaddr_t bdaddr;
278 __u8 status;
279} __packed;
280
1f8cd0d9 281#define MGMT_OP_BLOCK_DEVICE 0x0024
7fbec224
AJ
282struct mgmt_cp_block_device {
283 bdaddr_t bdaddr;
284} __packed;
285
1f8cd0d9 286#define MGMT_OP_UNBLOCK_DEVICE 0x0025
7fbec224
AJ
287struct mgmt_cp_unblock_device {
288 bdaddr_t bdaddr;
289} __packed;
290
27f27ed8
VCG
291struct mgmt_ltk_info {
292 struct mgmt_addr_info addr;
293 __u8 authenticated;
294 __u8 master;
295 __u8 enc_size;
296 __le16 ediv;
297 __u8 rand[8];
298 __u8 val[16];
299} __packed;
300
301#define MGMT_OP_LOAD_LONG_TERM_KEYS 0x0026
302struct mgmt_cp_load_long_term_keys {
303 __le16 key_count;
304 struct mgmt_ltk_info keys[0];
305} __packed;
306
c02178d2
JH
307#define MGMT_EV_CMD_COMPLETE 0x0001
308struct mgmt_ev_cmd_complete {
309 __le16 opcode;
310 __u8 data[0];
311} __packed;
312
313#define MGMT_EV_CMD_STATUS 0x0002
314struct mgmt_ev_cmd_status {
315 __u8 status;
316 __le16 opcode;
317} __packed;
318
319#define MGMT_EV_CONTROLLER_ERROR 0x0003
320struct mgmt_ev_controller_error {
c02178d2
JH
321 __u8 error_code;
322} __packed;
c71e97bf
JH
323
324#define MGMT_EV_INDEX_ADDED 0x0004
c71e97bf
JH
325
326#define MGMT_EV_INDEX_REMOVED 0x0005
5add6af8 327
69ab39ea 328#define MGMT_EV_NEW_SETTINGS 0x0006
73f22f62 329
f71d5a25
JH
330#define MGMT_EV_CLASS_OF_DEV_CHANGED 0x0007
331struct mgmt_ev_class_of_dev_changed {
332 __u8 dev_class[3];
333};
c542a06c 334
f71d5a25
JH
335#define MGMT_EV_LOCAL_NAME_CHANGED 0x0008
336struct mgmt_ev_local_name_changed {
337 __u8 name[MGMT_MAX_NAME_LENGTH];
338 __u8 short_name[MGMT_MAX_SHORT_NAME_LENGTH];
339} __packed;
55ed8ca1 340
f71d5a25 341#define MGMT_EV_NEW_LINK_KEY 0x0009
86742e1e 342struct mgmt_ev_new_link_key {
4df378a1 343 __u8 store_hint;
86742e1e 344 struct mgmt_link_key_info key;
55ed8ca1 345} __packed;
f7520543 346
afc747a6 347#define MGMT_EV_DEVICE_CONNECTED 0x000A
b644ba33
JH
348struct mgmt_ev_device_connected {
349 struct mgmt_addr_info addr;
350 __le16 eir_len;
351 __u8 eir[0];
352} __packed;
f7520543 353
afc747a6 354#define MGMT_EV_DEVICE_DISCONNECTED 0x000B
17d5c04c 355
f71d5a25 356#define MGMT_EV_CONNECT_FAILED 0x000C
17d5c04c 357struct mgmt_ev_connect_failed {
4c659c39 358 struct mgmt_addr_info addr;
17d5c04c
JH
359 __u8 status;
360} __packed;
980e1a53 361
f71d5a25 362#define MGMT_EV_PIN_CODE_REQUEST 0x000D
980e1a53 363struct mgmt_ev_pin_code_request {
980e1a53 364 bdaddr_t bdaddr;
a770bb5a 365 __u8 secure;
980e1a53 366} __packed;
a5c29683 367
f71d5a25 368#define MGMT_EV_USER_CONFIRM_REQUEST 0x000E
a5c29683 369struct mgmt_ev_user_confirm_request {
a5c29683 370 bdaddr_t bdaddr;
55bc1a37 371 __u8 confirm_hint;
a5c29683
JH
372 __le32 value;
373} __packed;
2a611692 374
f71d5a25
JH
375#define MGMT_EV_USER_PASSKEY_REQUEST 0x000F
376struct mgmt_ev_user_passkey_request {
377 bdaddr_t bdaddr;
378} __packed;
379
2a611692
JH
380#define MGMT_EV_AUTH_FAILED 0x0010
381struct mgmt_ev_auth_failed {
2a611692
JH
382 bdaddr_t bdaddr;
383 __u8 status;
384} __packed;
b312b161 385
f71d5a25 386#define MGMT_EV_DEVICE_FOUND 0x0011
e17acd40 387struct mgmt_ev_device_found {
4c659c39 388 struct mgmt_addr_info addr;
e17acd40 389 __s8 rssi;
d85bb264 390 __u8 confirm_name;
e319d2e7
JH
391 __le16 eir_len;
392 __u8 eir[0];
e17acd40 393} __packed;
a88a9652 394
b644ba33 395#define MGMT_EV_DISCOVERING 0x0012
5e762444 396
b644ba33 397#define MGMT_EV_DEVICE_BLOCKED 0x0013
5e762444
AJ
398struct mgmt_ev_device_blocked {
399 bdaddr_t bdaddr;
400} __packed;
401
b644ba33 402#define MGMT_EV_DEVICE_UNBLOCKED 0x0014
5e762444
AJ
403struct mgmt_ev_device_unblocked {
404 bdaddr_t bdaddr;
405} __packed;
27f27ed8
VCG
406
407#define MGMT_EV_NEW_LONG_TERM_KEY 0x0015
408struct mgmt_ev_new_long_term_key {
409 __u8 store_hint;
410 struct mgmt_ltk_info key;
411} __packed;
This page took 0.118002 seconds and 5 git commands to generate.