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