From: Brian Gix <brian.gix@intel.com>
To: linux-bluetooth@vger.kernel.org
Cc: luiz.dentz@gmail.com, brian.gix@intel.com
Subject: [PATCH BlueZ v3 2/2] monitor: Add mesh MGMT cmds/events to btmon parser
Date: Wed, 7 Sep 2022 15:44:16 -0700 [thread overview]
Message-ID: <20220907224416.62115-2-brian.gix@intel.com> (raw)
In-Reply-To: <20220907224416.62115-1-brian.gix@intel.com>
Sample Output:
@ MGMT Command: Read Mesh Features (0x0058) plen 0
@ MGMT Event: Command Complete (0x0001) plen 7
Read Mesh Features (0x0058) plen 4
Status: Success (0x00)
Index: 0
Max Handles: 3
Used Handles: 0
@ MGMT Command: Set Mesh Receiver (0x0057) plen 9
Enable: 1
Window: 4096
Period: 4096
Num AD Types: 3
AD Type: 42
AD Type: 43
AD Type: 41
@ MGMT Event: Command Complete (0x0001) plen 3
Set Mesh Receiver (0x0057) plen 0
Status: Success (0x00)
@ MGMT Command: Mesh Send (0x0059) plen 43
Address: 00:00:00:00:00:00 (OUI 00-00-00)
Addr Type: 2
Instant: 0x0000000000000000
Delay: 0
Count: 1
Data Length: 24
Data: : 172b01002dda0c2491537ae2000000009de2120a725038b2
@ MGMT Event: Command Complete (0x0001) plen 4
Mesh Send (0x0059) plen 1
Status: Success (0x00)
Handle: 3
@ MGMT Event: Mesh Packet Complete (0x0032) plen 1
Handle: 3
---
monitor/packet.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 111 insertions(+)
diff --git a/monitor/packet.c b/monitor/packet.c
index 4c4f53dee..7544a7e68 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -14191,6 +14191,74 @@ static void mgmt_remove_adv_monitor_patterns_rsp(const void *data,
print_field("Handle: %d", handle);
}
+static void mgmt_set_mesh_receiver_cmd(const void *data, uint16_t size)
+{
+ uint8_t enable = get_u8(data);
+ uint16_t window = get_le16(data + 1);
+ uint16_t period = get_le16(data + 3);
+ uint8_t num_ad_types = get_u8(data + 5);
+ const uint8_t *ad_types = data + 6;
+
+ print_field("Enable: %d", enable);
+ print_field("Window: %d", window);
+ print_field("Period: %d", period);
+ print_field("Num AD Types: %d", num_ad_types);
+ size -= 6;
+
+ while (size--)
+ print_field(" AD Type: %d", *ad_types++);
+}
+
+static void mgmt_read_mesh_features_rsp(const void *data, uint16_t size)
+{
+ uint16_t index = get_le16(data);
+ uint8_t max_handles = get_u8(data + 2);
+ uint8_t used_handles = get_u8(data + 3);
+ const uint8_t *handles = data + 4;
+
+ print_field("Index: %d", index);
+ print_field("Max Handles: %d", max_handles);
+ print_field("Used Handles: %d", used_handles);
+ size -= 4;
+
+ while (size--)
+ print_field(" Used Handle: %d", *handles++);
+}
+
+static void mgmt_mesh_send_cmd(const void *data, uint16_t size)
+{
+ const uint8_t *addr = data;
+ uint8_t addr_type = get_u8(data + 6);
+ uint64_t instant = get_le64(data + 7);
+ uint16_t delay = get_le16(data + 15);
+ uint8_t cnt = get_u8(data + 17);
+ uint8_t adv_data_len = get_u8(data + 18);
+
+ data += 19;
+ size -= 19;
+ print_bdaddr(addr);
+ print_field("Addr Type: %d", addr_type);
+ print_field("Instant: 0x%16.16" PRIx64, instant);
+ print_field("Delay: %d", delay);
+ print_field("Count: %d", cnt);
+ print_field("Data Length: %d", adv_data_len);
+ print_hex_field("Data: ", data, size);
+}
+
+static void mgmt_mesh_send_rsp(const void *data, uint16_t size)
+{
+ uint8_t handle = get_u8(data);
+
+ print_field("Handle: %d", handle);
+}
+
+static void mgmt_mesh_send_cancel_cmd(const void *data, uint16_t size)
+{
+ uint8_t handle = get_u8(data);
+
+ print_field("Handle: %d", handle);
+}
+
struct mgmt_data {
uint16_t opcode;
const char *str;
@@ -14448,6 +14516,18 @@ static const struct mgmt_data mgmt_command_table[] = {
mgmt_add_adv_monitor_patterns_rssi_cmd, 8,
false,
mgmt_add_adv_monitor_patterns_rsp, 2, true},
+ { 0x0057, "Set Mesh Receiver",
+ mgmt_set_mesh_receiver_cmd, 6, false,
+ mgmt_null_rsp, 0, true},
+ { 0x0058, "Read Mesh Features",
+ mgmt_null_cmd, 0, true,
+ mgmt_read_mesh_features_rsp, 4, false},
+ { 0x0059, "Mesh Send",
+ mgmt_mesh_send_cmd, 19, false,
+ mgmt_mesh_send_rsp, 1, true},
+ { 0x0056, "Mesh Send Cancel",
+ mgmt_mesh_send_cancel_cmd, 1, true,
+ mgmt_null_rsp, 0, true},
{ }
};
@@ -14945,6 +15025,33 @@ static void mgmt_adv_monitor_device_lost_evt(const void *data, uint16_t size)
print_field("Addr Type: %d", addr_type);
}
+static void mgmt_mesh_device_found_evt(const void *data, uint16_t size)
+{
+ const uint8_t *addr = data;
+ uint8_t addr_type = get_u8(data + 6);
+ int8_t rssi = get_s8(data + 7);
+ uint64_t instant = get_le64(data + 8);
+ uint32_t flags = get_le32(data + 16);
+ uint16_t eir_len = get_le16(data + 20);
+ const uint8_t *eir_data = data + 22;
+
+ print_bdaddr(addr);
+ print_field("Addr Type: %d", addr_type);
+ print_field("RSSI: %d", rssi);
+ print_field("Instant: 0x%16.16" PRIx64, instant);
+ mgmt_print_device_flags(flags);
+ print_field("EIR Length: %d", eir_len);
+ size -= 22;
+ print_hex_field("EIR Data: ", eir_data, size);
+}
+
+static void mgmt_mesh_packet_cmplt_evt(const void *data, uint16_t size)
+{
+ uint8_t handle = get_u8(data);
+
+ print_field("Handle: %d", handle);
+}
+
static const struct mgmt_data mgmt_event_table[] = {
{ 0x0001, "Command Complete",
mgmt_command_complete_evt, 3, false },
@@ -15038,6 +15145,10 @@ static const struct mgmt_data mgmt_event_table[] = {
mgmt_adv_monitor_device_found_evt, 16, false },
{ 0x0030, "ADV Monitor Device Lost",
mgmt_adv_monitor_device_lost_evt, 9, true },
+ { 0x0031, "Mesh Device Found",
+ mgmt_mesh_device_found_evt, 22, false },
+ { 0x0032, "Mesh Packet Complete",
+ mgmt_mesh_packet_cmplt_evt, 1, true },
{ }
};
--
2.37.2
next prev parent reply other threads:[~2022-09-07 22:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-07 22:44 [PATCH BlueZ v3 1/2] monitor: Add ADV Monitor events to btmon parser Brian Gix
2022-09-07 22:44 ` Brian Gix [this message]
2022-09-07 23:25 ` [BlueZ,v3,1/2] " bluez.test.bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220907224416.62115-2-brian.gix@intel.com \
--to=brian.gix@intel.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.