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