From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ v1] monitor: Add support for -K/--kernel
Date: Wed, 20 Aug 2025 16:41:17 -0400 [thread overview]
Message-ID: <20250820204117.1905780-2-luiz.dentz@gmail.com> (raw)
In-Reply-To: <20250820204117.1905780-1-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds support for -K/--kernel that open /proc/kmsg and attempts
to print messages starting with 'Bluetooth:':
> monitor/btmon -K
= Note: Bluetooth: BNEP (Ethernet Emulation) ver 1.3
= Note: Bluetooth: BNEP filters: protocol multicast
= Note: Bluetooth: BNEP socket layer initialized
= Note: Bluetooth: MGMT ver 1.23
= Note: Bluetooth: RFCOMM TTY layer initialized
= Note: Bluetooth: RFCOMM socket layer initialized
= Note: Bluetooth: RFCOMM ver 1.11
---
monitor/btmon.rst | 2 ++
monitor/control.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++
monitor/main.c | 7 +++++-
monitor/packet.h | 1 +
4 files changed, 68 insertions(+), 1 deletion(-)
diff --git a/monitor/btmon.rst b/monitor/btmon.rst
index eb5e25182f0f..39c185fd5e41 100644
--- a/monitor/btmon.rst
+++ b/monitor/btmon.rst
@@ -77,6 +77,8 @@ OPTIONS
-M, --mgmt Open channel for mgmt events.
+-K, --kernel Open kmsg for kernel messages.
+
-t, --time Show a time instead of time offset.
-T, --date Show a time and date information instead of
diff --git a/monitor/control.c b/monitor/control.c
index cb8e9fe731fb..83347d5dbc3e 100644
--- a/monitor/control.c
+++ b/monitor/control.c
@@ -1081,6 +1081,62 @@ static int open_channel(uint16_t channel)
return 0;
}
+static void kmsg_callback(int fd, uint32_t events, void *user_data)
+{
+ char buf[1024], *msg;
+ ssize_t len;
+ struct timeval tv;
+
+ if (events & (EPOLLERR | EPOLLHUP)) {
+ mainloop_remove_fd(fd);
+ return;
+ }
+
+ memset(buf, 0, sizeof(buf));
+
+ len = read(fd, buf, sizeof(buf));
+ if (len < 0)
+ return;
+
+ /* Check if the kernel message is from Bluetooth */
+ msg = strcasestr(buf, "Bluetooth:");
+ if (!msg)
+ return;
+
+ /* Replace Bluetooth with Kernel to avoid possible confusions */
+ msg += 3;
+ memcpy(msg, "Kernel", 6);
+
+ /* Adjust the actual length since part of the message is skipped and
+ * replace the \n with \0 at the end.
+ */
+ len = len - (msg - buf);
+ msg[len - 1] = '\0';
+
+ gettimeofday(&tv, NULL);
+
+ btsnoop_write_hci(btsnoop_file, &tv, HCI_DEV_NONE,
+ BTSNOOP_OPCODE_SYSTEM_NOTE, 0, msg, len);
+ packet_monitor(&tv, NULL, HCI_DEV_NONE,
+ BTSNOOP_OPCODE_SYSTEM_NOTE, msg, len);
+}
+
+static int open_kmsg(void)
+{
+ int fd;
+
+ fd = open("/dev/kmsg", O_RDONLY);
+ if (fd < 0)
+ return -1;
+
+ if (mainloop_add_fd(fd, EPOLLIN, kmsg_callback, NULL, NULL) < 0) {
+ close(fd);
+ return -1;
+ }
+
+ return 0;
+}
+
static void client_callback(int fd, uint32_t events, void *user_data)
{
struct control_data *data = user_data;
@@ -1556,6 +1612,9 @@ int control_tracing(void)
if (packet_has_filter(PACKET_FILTER_SHOW_MGMT_SOCKET))
open_channel(HCI_CHANNEL_CONTROL);
+ if (packet_has_filter(PACKET_FILTER_SHOW_KMSG))
+ open_kmsg();
+
return 0;
}
diff --git a/monitor/main.c b/monitor/main.c
index fa56fcb29f38..cc947af1ffc4 100644
--- a/monitor/main.c
+++ b/monitor/main.c
@@ -61,6 +61,7 @@ static void usage(void)
"\t-B, --tty-speed <rate> Set TTY speed (default 115200)\n"
"\t-V, --vendor <compid> Set default company identifier\n"
"\t-M, --mgmt Open channel for mgmt events\n"
+ "\t-K, --kernel Open kmsg for kernel messages\n"
"\t-t, --time Show time instead of time offset\n"
"\t-T, --date Show time and date information\n"
"\t-S, --sco Dump SCO traffic\n"
@@ -88,6 +89,7 @@ static const struct option main_options[] = {
{ "tty-speed", required_argument, NULL, 'B' },
{ "vendor", required_argument, NULL, 'V' },
{ "mgmt", no_argument, NULL, 'M' },
+ { "kernel", no_argument, NULL, 'K' },
{ "no-time", no_argument, NULL, 'N' },
{ "time", no_argument, NULL, 't' },
{ "date", no_argument, NULL, 'T' },
@@ -131,7 +133,7 @@ int main(int argc, char *argv[])
struct sockaddr_un addr;
opt = getopt_long(argc, argv,
- "r:w:a:s:p:i:d:B:V:MNtTSAIE:PJ:R:C:c:vh",
+ "r:w:a:s:p:i:d:B:V:MKNtTSAIE:PJ:R:C:c:vh",
main_options, NULL);
if (opt < 0)
break;
@@ -184,6 +186,9 @@ int main(int argc, char *argv[])
case 'M':
filter_mask |= PACKET_FILTER_SHOW_MGMT_SOCKET;
break;
+ case 'K':
+ filter_mask |= PACKET_FILTER_SHOW_KMSG;
+ break;
case 'N':
filter_mask &= ~PACKET_FILTER_SHOW_TIME_OFFSET;
break;
diff --git a/monitor/packet.h b/monitor/packet.h
index 964b9a7219fa..154a08efacc5 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
@@ -23,6 +23,7 @@
#define PACKET_FILTER_SHOW_A2DP_STREAM (1 << 6)
#define PACKET_FILTER_SHOW_MGMT_SOCKET (1 << 7)
#define PACKET_FILTER_SHOW_ISO_DATA (1 << 8)
+#define PACKET_FILTER_SHOW_KMSG (1 << 9)
#define TV_MSEC(_tv) (long long)((_tv).tv_sec * 1000 + (_tv).tv_usec / 1000)
struct packet_latency {
--
2.50.1
next prev parent reply other threads:[~2025-08-20 20:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-20 20:41 [PATCH BlueZ v1] adapter: Fix setting index in MGMT_OP_SET_EXP_FEATURE with debug_uuid Luiz Augusto von Dentz
2025-08-20 20:41 ` Luiz Augusto von Dentz [this message]
2025-08-20 22:00 ` [BlueZ,v1] monitor: Add support for -K/--kernel bluez.test.bot
2025-08-20 21:59 ` [BlueZ,v1] adapter: Fix setting index in MGMT_OP_SET_EXP_FEATURE with debug_uuid bluez.test.bot
2025-08-21 14:00 ` [PATCH BlueZ v1] " patchwork-bot+bluetooth
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=20250820204117.1905780-2-luiz.dentz@gmail.com \
--to=luiz.dentz@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox