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