monitor: Add support for out-of-band data management commands
diff --git a/monitor/packet.c b/monitor/packet.c
index 20e4d83..f1f42fb 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -9695,6 +9695,14 @@
print_hex_field("Key", data + 8, 16);
}
+static void mgmt_print_oob_data(const void *data)
+{
+ print_hash_p192(data);
+ print_randomizer_p192(data + 16);
+ print_hash_p256(data + 32);
+ print_randomizer_p256(data + 48);
+}
+
static void mgmt_null_cmd(const void *data, uint16_t size)
{
}
@@ -10021,6 +10029,40 @@
mgmt_print_address(data, address_type);
}
+static void mgmt_read_local_oob_data_rsp(const void *data, uint16_t size)
+{
+ mgmt_print_oob_data(data);
+}
+
+static void mgmt_add_remote_oob_data_cmd(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+
+ mgmt_print_address(data, address_type);
+ mgmt_print_oob_data(data + 7);
+}
+
+static void mgmt_add_remote_oob_data_rsp(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+
+ mgmt_print_address(data, address_type);
+}
+
+static void mgmt_remove_remote_oob_data_cmd(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+
+ mgmt_print_address(data, address_type);
+}
+
+static void mgmt_remove_remote_oob_data_rsp(const void *data, uint16_t size)
+{
+ uint8_t address_type = get_u8(data + 6);
+
+ mgmt_print_address(data, address_type);
+}
+
static void mgmt_start_discovery_cmd(const void *data, uint16_t size)
{
uint8_t type = get_u8(data);
@@ -10416,6 +10458,16 @@
mgmt_print_address_type(type);
}
+static void mgmt_read_local_oob_ext_data_rsp(const void *data, uint16_t size)
+{
+ uint8_t type = get_u8(data);
+ uint16_t data_len = get_le16(data + 1);
+
+ mgmt_print_address_type(type);
+ print_field("Data length: %u", data_len);
+ print_eir(data + 3, size - 3, true);
+}
+
static void mgmt_read_advertising_features_rsp(const void *data, uint16_t size)
{
uint32_t flags = get_le32(data);
@@ -10613,9 +10665,14 @@
{ 0x001e, "User Passkey Reply" },
{ 0x001f, "User Passkey Negative Reply" },
{ 0x0020, "Read Local Out Of Band Data",
- mgmt_null_cmd, 0, true },
- { 0x0021, "Add Remote Out Of Band Data" },
- { 0x0022, "Remove Remote Out Of Band Data" },
+ mgmt_null_cmd, 0, true,
+ mgmt_read_local_oob_data_rsp, 64, true },
+ { 0x0021, "Add Remote Out Of Band Data",
+ mgmt_add_remote_oob_data_cmd, 71, true,
+ mgmt_add_remote_oob_data_rsp, 7, true },
+ { 0x0022, "Remove Remote Out Of Band Data",
+ mgmt_remove_remote_oob_data_cmd, 7, true,
+ mgmt_remove_remote_oob_data_rsp, 7, true },
{ 0x0023, "Start Discovery",
mgmt_start_discovery_cmd, 1, true,
mgmt_start_discovery_rsp, 1, true },
@@ -10687,7 +10744,8 @@
mgmt_start_service_discovery_cmd, 3, false,
mgmt_start_service_discovery_rsp, 1, true },
{ 0x003b, "Read Local Out Of Band Extended Data",
- mgmt_read_local_oob_ext_data_cmd, 1, true },
+ mgmt_read_local_oob_ext_data_cmd, 1, true,
+ mgmt_read_local_oob_ext_data_rsp, 3, false },
{ 0x003c, "Read Extended Controller Index List",
mgmt_null_cmd, 0, true,
mgmt_read_ext_index_list_rsp, 2, false },