Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
This commit is contained in:
@@ -65,6 +65,7 @@ struct bt_security {
|
||||
#define BT_SECURITY_LOW 1
|
||||
#define BT_SECURITY_MEDIUM 2
|
||||
#define BT_SECURITY_HIGH 3
|
||||
#define BT_SECURITY_FIPS 4
|
||||
|
||||
#define BT_DEFER_SETUP 7
|
||||
|
||||
|
||||
@@ -117,11 +117,16 @@ enum {
|
||||
HCI_SERVICE_CACHE,
|
||||
HCI_DEBUG_KEYS,
|
||||
HCI_DUT_MODE,
|
||||
HCI_FORCE_SC,
|
||||
HCI_FORCE_STATIC_ADDR,
|
||||
HCI_UNREGISTER,
|
||||
HCI_USER_CHANNEL,
|
||||
|
||||
HCI_LE_SCAN,
|
||||
HCI_SSP_ENABLED,
|
||||
HCI_SC_ENABLED,
|
||||
HCI_SC_ONLY,
|
||||
HCI_RPA_RESOLVING,
|
||||
HCI_HS_ENABLED,
|
||||
HCI_LE_ENABLED,
|
||||
HCI_ADVERTISING,
|
||||
@@ -282,10 +287,14 @@ enum {
|
||||
#define LMP_SYNC_TRAIN 0x04
|
||||
#define LMP_SYNC_SCAN 0x08
|
||||
|
||||
#define LMP_SC 0x01
|
||||
#define LMP_PING 0x02
|
||||
|
||||
/* Host features */
|
||||
#define LMP_HOST_SSP 0x01
|
||||
#define LMP_HOST_LE 0x02
|
||||
#define LMP_HOST_LE_BREDR 0x04
|
||||
#define LMP_HOST_SC 0x08
|
||||
|
||||
/* Connection modes */
|
||||
#define HCI_CM_ACTIVE 0x0000
|
||||
@@ -307,6 +316,7 @@ enum {
|
||||
#define HCI_LM_TRUSTED 0x0008
|
||||
#define HCI_LM_RELIABLE 0x0010
|
||||
#define HCI_LM_SECURE 0x0020
|
||||
#define HCI_LM_FIPS 0x0040
|
||||
|
||||
/* Authentication types */
|
||||
#define HCI_AT_NO_BONDING 0x00
|
||||
@@ -327,15 +337,21 @@ enum {
|
||||
#define HCI_LK_LOCAL_UNIT 0x01
|
||||
#define HCI_LK_REMOTE_UNIT 0x02
|
||||
#define HCI_LK_DEBUG_COMBINATION 0x03
|
||||
#define HCI_LK_UNAUTH_COMBINATION 0x04
|
||||
#define HCI_LK_AUTH_COMBINATION 0x05
|
||||
#define HCI_LK_UNAUTH_COMBINATION_P192 0x04
|
||||
#define HCI_LK_AUTH_COMBINATION_P192 0x05
|
||||
#define HCI_LK_CHANGED_COMBINATION 0x06
|
||||
#define HCI_LK_UNAUTH_COMBINATION_P256 0x07
|
||||
#define HCI_LK_AUTH_COMBINATION_P256 0x08
|
||||
/* The spec doesn't define types for SMP keys, the _MASTER suffix is implied */
|
||||
#define HCI_SMP_STK 0x80
|
||||
#define HCI_SMP_STK_SLAVE 0x81
|
||||
#define HCI_SMP_LTK 0x82
|
||||
#define HCI_SMP_LTK_SLAVE 0x83
|
||||
|
||||
/* Long Term Key types */
|
||||
#define HCI_LTK_UNAUTH 0x00
|
||||
#define HCI_LTK_AUTH 0x01
|
||||
|
||||
/* ---- HCI Error Codes ---- */
|
||||
#define HCI_ERROR_AUTH_FAILURE 0x05
|
||||
#define HCI_ERROR_CONNECTION_TIMEOUT 0x08
|
||||
@@ -660,6 +676,15 @@ struct hci_rp_set_csb {
|
||||
|
||||
#define HCI_OP_START_SYNC_TRAIN 0x0443
|
||||
|
||||
#define HCI_OP_REMOTE_OOB_EXT_DATA_REPLY 0x0445
|
||||
struct hci_cp_remote_oob_ext_data_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 hash192[16];
|
||||
__u8 randomizer192[16];
|
||||
__u8 hash256[16];
|
||||
__u8 randomizer256[16];
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SNIFF_MODE 0x0803
|
||||
struct hci_cp_sniff_mode {
|
||||
__le16 handle;
|
||||
@@ -933,6 +958,26 @@ struct hci_rp_write_sync_train_params {
|
||||
__le16 sync_train_int;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_SC_SUPPORT 0x0c79
|
||||
struct hci_rp_read_sc_support {
|
||||
__u8 status;
|
||||
__u8 support;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_SC_SUPPORT 0x0c7a
|
||||
struct hci_cp_write_sc_support {
|
||||
__u8 support;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LOCAL_OOB_EXT_DATA 0x0c7d
|
||||
struct hci_rp_read_local_oob_ext_data {
|
||||
__u8 status;
|
||||
__u8 hash192[16];
|
||||
__u8 randomizer192[16];
|
||||
__u8 hash256[16];
|
||||
__u8 randomizer256[16];
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LOCAL_VERSION 0x1001
|
||||
struct hci_rp_read_local_version {
|
||||
__u8 status;
|
||||
|
||||
@@ -101,7 +101,15 @@ struct smp_ltk {
|
||||
__le16 ediv;
|
||||
u8 rand[8];
|
||||
u8 val[16];
|
||||
} __packed;
|
||||
};
|
||||
|
||||
struct smp_irk {
|
||||
struct list_head list;
|
||||
bdaddr_t rpa;
|
||||
bdaddr_t bdaddr;
|
||||
u8 addr_type;
|
||||
u8 val[16];
|
||||
};
|
||||
|
||||
struct link_key {
|
||||
struct list_head list;
|
||||
@@ -114,8 +122,10 @@ struct link_key {
|
||||
struct oob_data {
|
||||
struct list_head list;
|
||||
bdaddr_t bdaddr;
|
||||
u8 hash[16];
|
||||
u8 randomizer[16];
|
||||
u8 hash192[16];
|
||||
u8 randomizer192[16];
|
||||
u8 hash256[16];
|
||||
u8 randomizer256[16];
|
||||
};
|
||||
|
||||
#define HCI_MAX_SHORT_NAME_LENGTH 10
|
||||
@@ -141,6 +151,7 @@ struct hci_dev {
|
||||
__u8 bus;
|
||||
__u8 dev_type;
|
||||
bdaddr_t bdaddr;
|
||||
bdaddr_t random_addr;
|
||||
bdaddr_t static_addr;
|
||||
__u8 own_addr_type;
|
||||
__u8 dev_name[HCI_MAX_NAME_LENGTH];
|
||||
@@ -167,6 +178,7 @@ struct hci_dev {
|
||||
__u16 page_scan_interval;
|
||||
__u16 page_scan_window;
|
||||
__u8 page_scan_type;
|
||||
__u8 le_adv_channel_map;
|
||||
__u16 le_scan_interval;
|
||||
__u16 le_scan_window;
|
||||
__u16 le_conn_min_interval;
|
||||
@@ -257,19 +269,19 @@ struct hci_dev {
|
||||
__u32 req_status;
|
||||
__u32 req_result;
|
||||
|
||||
struct list_head mgmt_pending;
|
||||
struct crypto_blkcipher *tfm_aes;
|
||||
|
||||
struct discovery_state discovery;
|
||||
struct hci_conn_hash conn_hash;
|
||||
|
||||
struct list_head mgmt_pending;
|
||||
struct list_head blacklist;
|
||||
|
||||
struct list_head uuids;
|
||||
|
||||
struct list_head link_keys;
|
||||
|
||||
struct list_head long_term_keys;
|
||||
|
||||
struct list_head identity_resolving_keys;
|
||||
struct list_head remote_oob_data;
|
||||
struct list_head le_conn_params;
|
||||
|
||||
struct hci_dev_stats stat;
|
||||
|
||||
@@ -332,6 +344,8 @@ struct hci_conn {
|
||||
__u8 passkey_entered;
|
||||
__u16 disc_timeout;
|
||||
__u16 setting;
|
||||
__u16 le_conn_min_interval;
|
||||
__u16 le_conn_max_interval;
|
||||
unsigned long flags;
|
||||
|
||||
__u8 remote_cap;
|
||||
@@ -372,6 +386,16 @@ struct hci_chan {
|
||||
__u8 state;
|
||||
};
|
||||
|
||||
struct hci_conn_params {
|
||||
struct list_head list;
|
||||
|
||||
bdaddr_t addr;
|
||||
u8 addr_type;
|
||||
|
||||
u16 conn_min_interval;
|
||||
u16 conn_max_interval;
|
||||
};
|
||||
|
||||
extern struct list_head hci_dev_list;
|
||||
extern struct list_head hci_cb_list;
|
||||
extern rwlock_t hci_dev_list_lock;
|
||||
@@ -446,6 +470,8 @@ enum {
|
||||
HCI_CONN_LE_SMP_PEND,
|
||||
HCI_CONN_MGMT_CONNECTED,
|
||||
HCI_CONN_SSP_ENABLED,
|
||||
HCI_CONN_SC_ENABLED,
|
||||
HCI_CONN_AES_CCM,
|
||||
HCI_CONN_POWER_SAVE,
|
||||
HCI_CONN_REMOTE_OOB,
|
||||
HCI_CONN_6LOWPAN,
|
||||
@@ -458,6 +484,13 @@ static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
|
||||
test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
|
||||
}
|
||||
|
||||
static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
|
||||
{
|
||||
struct hci_dev *hdev = conn->hdev;
|
||||
return test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
|
||||
test_bit(HCI_CONN_SC_ENABLED, &conn->flags);
|
||||
}
|
||||
|
||||
static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
@@ -737,31 +770,50 @@ int hci_inquiry(void __user *arg);
|
||||
|
||||
struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev,
|
||||
bdaddr_t *bdaddr, u8 type);
|
||||
int hci_blacklist_clear(struct hci_dev *hdev);
|
||||
void hci_blacklist_clear(struct hci_dev *hdev);
|
||||
int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
|
||||
int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
|
||||
|
||||
int hci_uuids_clear(struct hci_dev *hdev);
|
||||
struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
|
||||
bdaddr_t *addr, u8 addr_type);
|
||||
void hci_conn_params_add(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
|
||||
u16 conn_min_interval, u16 conn_max_interval);
|
||||
void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
|
||||
void hci_conn_params_clear(struct hci_dev *hdev);
|
||||
|
||||
int hci_link_keys_clear(struct hci_dev *hdev);
|
||||
void hci_uuids_clear(struct hci_dev *hdev);
|
||||
|
||||
void hci_link_keys_clear(struct hci_dev *hdev);
|
||||
struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
|
||||
bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len);
|
||||
struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8]);
|
||||
int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type,
|
||||
int new_key, u8 authenticated, u8 tk[16], u8 enc_size,
|
||||
__le16 ediv, u8 rand[8]);
|
||||
struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8],
|
||||
bool master);
|
||||
struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
|
||||
u8 addr_type, u8 type, u8 authenticated,
|
||||
u8 tk[16], u8 enc_size, __le16 ediv, u8 rand[8]);
|
||||
struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
|
||||
u8 addr_type);
|
||||
int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
int hci_smp_ltks_clear(struct hci_dev *hdev);
|
||||
u8 addr_type, bool master);
|
||||
int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
|
||||
void hci_smp_ltks_clear(struct hci_dev *hdev);
|
||||
int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
|
||||
int hci_remote_oob_data_clear(struct hci_dev *hdev);
|
||||
struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
|
||||
struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
|
||||
u8 addr_type);
|
||||
struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
|
||||
u8 addr_type, u8 val[16], bdaddr_t *rpa);
|
||||
void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
|
||||
void hci_smp_irks_clear(struct hci_dev *hdev);
|
||||
|
||||
void hci_remote_oob_data_clear(struct hci_dev *hdev);
|
||||
struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
|
||||
bdaddr_t *bdaddr);
|
||||
int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
|
||||
u8 *randomizer);
|
||||
bdaddr_t *bdaddr);
|
||||
int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
|
||||
u8 *hash, u8 *randomizer);
|
||||
int hci_add_remote_oob_ext_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
|
||||
u8 *hash192, u8 *randomizer192,
|
||||
u8 *hash256, u8 *randomizer256);
|
||||
int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
|
||||
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
|
||||
@@ -803,9 +855,12 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
|
||||
#define lmp_csb_slave_capable(dev) ((dev)->features[2][0] & LMP_CSB_SLAVE)
|
||||
#define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
|
||||
#define lmp_sync_scan_capable(dev) ((dev)->features[2][0] & LMP_SYNC_SCAN)
|
||||
#define lmp_sc_capable(dev) ((dev)->features[2][1] & LMP_SC)
|
||||
#define lmp_ping_capable(dev) ((dev)->features[2][1] & LMP_PING)
|
||||
|
||||
/* ----- Host capabilities ----- */
|
||||
#define lmp_host_ssp_capable(dev) ((dev)->features[1][0] & LMP_HOST_SSP)
|
||||
#define lmp_host_sc_capable(dev) ((dev)->features[1][0] & LMP_HOST_SC)
|
||||
#define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE))
|
||||
#define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
|
||||
|
||||
@@ -1019,6 +1074,26 @@ static inline bool eir_has_data_type(u8 *data, size_t data_len, u8 type)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
|
||||
{
|
||||
if (addr_type != 0x01)
|
||||
return false;
|
||||
|
||||
if ((bdaddr->b[5] & 0xc0) == 0x40)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
|
||||
bdaddr_t *bdaddr, u8 addr_type)
|
||||
{
|
||||
if (!hci_bdaddr_is_rpa(bdaddr, addr_type))
|
||||
return NULL;
|
||||
|
||||
return hci_find_irk_by_rpa(hdev, bdaddr);
|
||||
}
|
||||
|
||||
int hci_register_cb(struct hci_cb *hcb);
|
||||
int hci_unregister_cb(struct hci_cb *hcb);
|
||||
|
||||
@@ -1122,11 +1197,13 @@ void mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
|
||||
u8 addr_type, u8 status);
|
||||
void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
|
||||
void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
|
||||
void mgmt_sc_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
|
||||
void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
|
||||
u8 status);
|
||||
void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
|
||||
void mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash,
|
||||
u8 *randomizer, u8 status);
|
||||
void mgmt_read_local_oob_data_complete(struct hci_dev *hdev, u8 *hash192,
|
||||
u8 *randomizer192, u8 *hash256,
|
||||
u8 *randomizer256, u8 status);
|
||||
void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
|
||||
u8 addr_type, u8 *dev_class, s8 rssi, u8 cfm_name,
|
||||
u8 ssp, u8 *eir, u16 eir_len);
|
||||
@@ -1135,8 +1212,10 @@ void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
|
||||
void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
|
||||
int mgmt_device_blocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
|
||||
int mgmt_device_unblocked(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
|
||||
void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent);
|
||||
void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key);
|
||||
void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk);
|
||||
void mgmt_reenable_advertising(struct hci_dev *hdev);
|
||||
void mgmt_smp_complete(struct hci_conn *conn, bool complete);
|
||||
|
||||
/* HCI info for socket */
|
||||
#define hci_pi(sk) ((struct hci_pinfo *) sk)
|
||||
|
||||
@@ -91,6 +91,7 @@ struct l2cap_conninfo {
|
||||
#define L2CAP_LM_TRUSTED 0x0008
|
||||
#define L2CAP_LM_RELIABLE 0x0010
|
||||
#define L2CAP_LM_SECURE 0x0020
|
||||
#define L2CAP_LM_FIPS 0x0040
|
||||
|
||||
/* L2CAP command codes */
|
||||
#define L2CAP_COMMAND_REJ 0x01
|
||||
@@ -623,6 +624,9 @@ struct l2cap_conn {
|
||||
__u32 rx_len;
|
||||
__u8 tx_ident;
|
||||
|
||||
struct sk_buff_head pending_rx;
|
||||
struct work_struct pending_rx_work;
|
||||
|
||||
__u8 disc_reason;
|
||||
|
||||
struct delayed_work security_timer;
|
||||
@@ -647,7 +651,7 @@ struct l2cap_user {
|
||||
#define L2CAP_CHAN_RAW 1
|
||||
#define L2CAP_CHAN_CONN_LESS 2
|
||||
#define L2CAP_CHAN_CONN_ORIENTED 3
|
||||
#define L2CAP_CHAN_CONN_FIX_A2MP 4
|
||||
#define L2CAP_CHAN_FIXED 4
|
||||
|
||||
/* ----- L2CAP socket info ----- */
|
||||
#define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
|
||||
@@ -853,7 +857,6 @@ static inline long l2cap_chan_no_get_sndtimeo(struct l2cap_chan *chan)
|
||||
}
|
||||
|
||||
extern bool disable_ertm;
|
||||
extern bool enable_lecoc;
|
||||
|
||||
int l2cap_init_sockets(void);
|
||||
void l2cap_cleanup_sockets(void);
|
||||
@@ -878,6 +881,7 @@ int l2cap_ertm_init(struct l2cap_chan *chan);
|
||||
void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
|
||||
void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
|
||||
void l2cap_chan_del(struct l2cap_chan *chan, int err);
|
||||
void l2cap_conn_update_id_addr(struct hci_conn *hcon);
|
||||
void l2cap_send_conn_req(struct l2cap_chan *chan);
|
||||
void l2cap_move_start(struct l2cap_chan *chan);
|
||||
void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
|
||||
|
||||
@@ -94,6 +94,8 @@ struct mgmt_rp_read_index_list {
|
||||
#define MGMT_SETTING_HS 0x00000100
|
||||
#define MGMT_SETTING_LE 0x00000200
|
||||
#define MGMT_SETTING_ADVERTISING 0x00000400
|
||||
#define MGMT_SETTING_SECURE_CONN 0x00000800
|
||||
#define MGMT_SETTING_DEBUG_KEYS 0x00001000
|
||||
|
||||
#define MGMT_OP_READ_INFO 0x0004
|
||||
#define MGMT_READ_INFO_SIZE 0
|
||||
@@ -180,7 +182,7 @@ struct mgmt_cp_load_link_keys {
|
||||
|
||||
struct mgmt_ltk_info {
|
||||
struct mgmt_addr_info addr;
|
||||
__u8 authenticated;
|
||||
__u8 type;
|
||||
__u8 master;
|
||||
__u8 enc_size;
|
||||
__le16 ediv;
|
||||
@@ -294,6 +296,12 @@ struct mgmt_rp_read_local_oob_data {
|
||||
__u8 hash[16];
|
||||
__u8 randomizer[16];
|
||||
} __packed;
|
||||
struct mgmt_rp_read_local_oob_ext_data {
|
||||
__u8 hash192[16];
|
||||
__u8 randomizer192[16];
|
||||
__u8 hash256[16];
|
||||
__u8 randomizer256[16];
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_ADD_REMOTE_OOB_DATA 0x0021
|
||||
struct mgmt_cp_add_remote_oob_data {
|
||||
@@ -302,6 +310,14 @@ struct mgmt_cp_add_remote_oob_data {
|
||||
__u8 randomizer[16];
|
||||
} __packed;
|
||||
#define MGMT_ADD_REMOTE_OOB_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 32)
|
||||
struct mgmt_cp_add_remote_oob_ext_data {
|
||||
struct mgmt_addr_info addr;
|
||||
__u8 hash192[16];
|
||||
__u8 randomizer192[16];
|
||||
__u8 hash256[16];
|
||||
__u8 randomizer256[16];
|
||||
} __packed;
|
||||
#define MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE (MGMT_ADDR_INFO_SIZE + 64)
|
||||
|
||||
#define MGMT_OP_REMOVE_REMOTE_OOB_DATA 0x0022
|
||||
struct mgmt_cp_remove_remote_oob_data {
|
||||
@@ -369,6 +385,22 @@ struct mgmt_cp_set_scan_params {
|
||||
} __packed;
|
||||
#define MGMT_SET_SCAN_PARAMS_SIZE 4
|
||||
|
||||
#define MGMT_OP_SET_SECURE_CONN 0x002D
|
||||
|
||||
#define MGMT_OP_SET_DEBUG_KEYS 0x002E
|
||||
|
||||
struct mgmt_irk_info {
|
||||
struct mgmt_addr_info addr;
|
||||
__u8 val[16];
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_LOAD_IRKS 0x0030
|
||||
struct mgmt_cp_load_irks {
|
||||
__le16 irk_count;
|
||||
struct mgmt_irk_info irks[0];
|
||||
} __packed;
|
||||
#define MGMT_LOAD_IRKS_SIZE 2
|
||||
|
||||
#define MGMT_EV_CMD_COMPLETE 0x0001
|
||||
struct mgmt_ev_cmd_complete {
|
||||
__le16 opcode;
|
||||
@@ -504,3 +536,10 @@ struct mgmt_ev_passkey_notify {
|
||||
__le32 passkey;
|
||||
__u8 entered;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_NEW_IRK 0x0018
|
||||
struct mgmt_ev_new_irk {
|
||||
__u8 store_hint;
|
||||
bdaddr_t rpa;
|
||||
struct mgmt_irk_info irk;
|
||||
} __packed;
|
||||
|
||||
@@ -238,9 +238,11 @@ int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst,
|
||||
u8 channel);
|
||||
int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
|
||||
int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
|
||||
void rfcomm_dlc_send_noerror(struct rfcomm_dlc *d, struct sk_buff *skb);
|
||||
int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
|
||||
int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
|
||||
void rfcomm_dlc_accept(struct rfcomm_dlc *d);
|
||||
struct rfcomm_dlc *rfcomm_dlc_exists(bdaddr_t *src, bdaddr_t *dst, u8 channel);
|
||||
|
||||
#define rfcomm_dlc_lock(d) spin_lock(&d->lock)
|
||||
#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock)
|
||||
@@ -295,6 +297,7 @@ struct rfcomm_conninfo {
|
||||
#define RFCOMM_LM_TRUSTED 0x0008
|
||||
#define RFCOMM_LM_RELIABLE 0x0010
|
||||
#define RFCOMM_LM_SECURE 0x0020
|
||||
#define RFCOMM_LM_FIPS 0x0040
|
||||
|
||||
#define rfcomm_pi(sk) ((struct rfcomm_pinfo *) sk)
|
||||
|
||||
@@ -323,11 +326,16 @@ int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel,
|
||||
#define RFCOMMGETDEVINFO _IOR('R', 211, int)
|
||||
#define RFCOMMSTEALDLC _IOW('R', 220, int)
|
||||
|
||||
/* rfcomm_dev.flags bit definitions */
|
||||
#define RFCOMM_REUSE_DLC 0
|
||||
#define RFCOMM_RELEASE_ONHUP 1
|
||||
#define RFCOMM_HANGUP_NOW 2
|
||||
#define RFCOMM_TTY_ATTACHED 3
|
||||
#define RFCOMM_TTY_RELEASED 4
|
||||
#define RFCOMM_DEFUNCT_BIT4 4 /* don't reuse this bit - userspace visible */
|
||||
|
||||
/* rfcomm_dev.status bit definitions */
|
||||
#define RFCOMM_DEV_RELEASED 0
|
||||
#define RFCOMM_TTY_OWNED 1
|
||||
|
||||
struct rfcomm_dev_req {
|
||||
s16 dev_id;
|
||||
|
||||
Reference in New Issue
Block a user