From 00152e751e3a1ec8f281d21a8c6b633fc996a8df Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 13 Dec 2014 20:21:25 +0100 Subject: [PATCH] monitor: Add support for decoding resolving list related commands --- monitor/bt.h | 22 ++++++++++++++++++++++ monitor/packet.c | 42 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/monitor/bt.h b/monitor/bt.h index 9308fcd00..b3a790823 100644 --- a/monitor/bt.h +++ b/monitor/bt.h @@ -1891,6 +1891,28 @@ struct bt_hci_cmd_le_generate_dhkey { uint8_t remote_pk256[64]; } __attribute__ ((packed)); +#define BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST 0x2027 +struct bt_hci_cmd_le_add_to_resolv_list { + uint8_t addr_type; + uint8_t addr[6]; + uint8_t peer_irk[16]; + uint8_t local_irk[16]; +} __attribute__ ((packed)); + +#define BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST 0x2028 +struct bt_hci_cmd_le_remove_from_resolv_list { + uint8_t addr_type; + uint8_t addr[6]; +} __attribute__ ((packed)); + +#define BT_HCI_CMD_LE_CLEAR_RESOLV_LIST 0x2029 + +#define BT_HCI_CMD_LE_READ_RESOLV_LIST_SIZE 0x202a +struct bt_hci_rsp_le_read_resolv_list_size { + uint8_t status; + uint8_t size; +} __attribute__ ((packed)); + #define BT_HCI_CMD_LE_READ_MAX_DATA_LENGTH 0x202f struct bt_hci_rsp_le_read_max_data_length { uint8_t status; diff --git a/monitor/packet.c b/monitor/packet.c index 885c4b1a6..9e932a318 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -6032,6 +6032,32 @@ static void le_generate_dhkey_cmd(const void *data, uint8_t size) print_pk256("Remote P-256 public key", cmd->remote_pk256); } +static void le_add_to_resolv_list_cmd(const void *data, uint8_t size) +{ + const struct bt_hci_cmd_le_add_to_resolv_list *cmd = data; + + print_addr_type("Address type", cmd->addr_type); + print_addr("Address", cmd->addr, cmd->addr_type); + print_key("Peer identity resolving key", cmd->peer_irk); + print_key("Local identity resolving key", cmd->local_irk); +} + +static void le_remove_from_resolv_list_cmd(const void *data, uint8_t size) +{ + const struct bt_hci_cmd_le_remove_from_resolv_list *cmd = data; + + print_addr_type("Address type", cmd->addr_type); + print_addr("Address", cmd->addr, cmd->addr_type); +} + +static void le_read_resolv_list_size_rsp(const void *data, uint8_t size) +{ + const struct bt_hci_rsp_le_read_resolv_list_size *rsp = data; + + print_status(rsp->status); + print_field("Size: %u", rsp->size); +} + static void le_read_max_data_length_rsp(const void *data, uint8_t size) { const struct bt_hci_rsp_le_read_max_data_length *rsp = data; @@ -6689,10 +6715,18 @@ static const struct opcode_data opcode_table[] = { null_cmd, 0, true }, { 0x2026, 274, "LE Generate DHKey", le_generate_dhkey_cmd, 64, true }, - { 0x2027, 275, "LE Add Device To Resolving List" }, - { 0x2028, 276, "LE Remove Device From Resolving List" }, - { 0x2029, 277, "LE Clear Resolving List" }, - { 0x202a, 278, "LE Read Resolving List Size" }, + { 0x2027, 275, "LE Add Device To Resolving List", + le_add_to_resolv_list_cmd, 39, true, + status_rsp, 1, true }, + { 0x2028, 276, "LE Remove Device From Resolving List", + le_remove_from_resolv_list_cmd, 7, true, + status_rsp, 1, true }, + { 0x2029, 277, "LE Clear Resolving List", + null_cmd, 0, true, + status_rsp, 1, true }, + { 0x202a, 278, "LE Read Resolving List Size", + null_cmd, 0, true, + le_read_resolv_list_size_rsp, 2, true }, { 0x202b, 279, "LE Read Peer Resolvable Address" }, { 0x202c, 280, "LE Read Local Resolvable Address" }, { 0x202d, 281, "LE Set Address Resolution Enable" }, -- 2.47.3