monitor: Add option to suppress HCI vendor events
When idle, Marvell 88W8897 Bluetooth adapter sends the following
HCI vendor events to BlueZ stack on continuous basis:
$ btmon
Bluetooth monitor ver 5.43
= New Index: XX:XX:XX:XX:XX:XX (Primary,SDIO,hci0) [hci0] 0.029199
= Open Index: XX:XX:XX:XX:XX:XX [hci0] 0.029211
= Index Info: XX:XX:XX:XX:XX:XX (Marvell Technology Group Ltd.)
[hci0] 0.029222
> HCI Event: Vendor (0xff) plen 5 [hci0] 0.300944
05 80 00 09 00
> HCI Event: Vendor (0xff) plen 5 [hci0] 2.860113
05 80 00 09 00
> HCI Event: Vendor (0xff) plen 5 [hci0] 5.420643
05 80 00 09 00
...
Add option to suppress these HCI vendor events from btmon log.
Change-Id: I357ef2c65c3ea18faf6a4462c7e70d2fc92219db
diff --git a/monitor/main.c b/monitor/main.c
index c04a94a..9976b79 100644
--- a/monitor/main.c
+++ b/monitor/main.c
@@ -71,6 +71,7 @@
"\t-S, --sco Dump SCO traffic\n"
"\t-E, --ellisys [ip] Send Ellisys HCI Injection\n"
"\t-A, --no_leadv Suppress LE_ADV messages\n"
+ "\t-V, --no_vendor Suppress Vendor messages\n"
"\t-h, --help Show help options\n");
}
@@ -88,6 +89,7 @@
{ "sco", no_argument, NULL, 'S' },
{ "ellisys", required_argument, NULL, 'E' },
{ "no_leadv", no_argument, NULL, 'A' },
+ { "no_vendor", no_argument, NULL, 'V' },
{ "todo", no_argument, NULL, '#' },
{ "version", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
@@ -116,7 +118,7 @@
for (;;) {
int opt;
- opt = getopt_long(argc, argv, "d:r:w:a:s:p:i:tTSAE:vh",
+ opt = getopt_long(argc, argv, "d:r:w:a:s:p:i:tTSAVE:vh",
main_options, NULL);
if (opt < 0)
break;
@@ -173,6 +175,9 @@
case 'A':
filter_mask |= PACKET_FILTER_SUPPRESS_LE_ADV;
break;
+ case 'V':
+ filter_mask |= PACKET_FILTER_SUPPRESS_VENDOR;
+ break;
case 'E':
ellisys_server = optarg;
ellisys_port = 24352;
diff --git a/monitor/packet.c b/monitor/packet.c
index 45c9e8c..cf4f40d 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -9046,6 +9046,9 @@
}
}
+ if (filter_mask & PACKET_FILTER_SUPPRESS_VENDOR && hdr->evt == 0xff)
+ return;
+
sprintf(extra_str, "(0x%2.2x) plen %d", hdr->evt, hdr->plen);
print_packet(tv, cred, '>', index, NULL, event_color, "HCI Event",
diff --git a/monitor/packet.h b/monitor/packet.h
index a02ea50..0330857 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
@@ -33,6 +33,7 @@
#define PACKET_FILTER_SHOW_TIME_OFFSET (1 << 3)
#define PACKET_FILTER_SHOW_ACL_DATA (1 << 4)
#define PACKET_FILTER_SHOW_SCO_DATA (1 << 5)
+#define PACKET_FILTER_SUPPRESS_VENDOR (1 << 30)
#define PACKET_FILTER_SUPPRESS_LE_ADV (1 << 31)
void packet_set_filter(unsigned long filter);