diff options
author | Szymon Janc <szymon.janc@codecoup.pl> | 2016-06-17 09:59:40 +0200 |
---|---|---|
committer | Szymon Janc <szymon.janc@codecoup.pl> | 2016-06-17 10:13:58 +0200 |
commit | f70216f37b0aaa61acc8dfcd823bc1de1860c840 (patch) | |
tree | 7be9afe726b7f0c9789bf88cc47f07ebda6d3519 /monitor/analyze.c | |
parent | 91740c65c90e9486b9d7ef9060f04f9e36a10d74 (diff) | |
download | bluez-f70216f37b0aaa61acc8dfcd823bc1de1860c840.tar.gz |
monitor: Add support for counting unknown opcodes in analyze
Count unknown opcodes and print them in summary instead of failing
to analyze btsnoop file.
Diffstat (limited to 'monitor/analyze.c')
-rw-r--r-- | monitor/analyze.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/monitor/analyze.c b/monitor/analyze.c index 94f0c578c..da0e85169 100644 --- a/monitor/analyze.c +++ b/monitor/analyze.c @@ -50,6 +50,7 @@ struct hci_dev { unsigned long vendor_diag; unsigned long system_note; unsigned long user_log; + unsigned long unknown; uint16_t manufacturer; }; @@ -88,6 +89,7 @@ static void dev_destroy(void *data) printf(" %lu vendor diagnostics\n", dev->vendor_diag); printf(" %lu system notes\n", dev->system_note); printf(" %lu user logs\n", dev->user_log); + printf(" %lu unknown opcodes\n", dev->unknown); printf("\n"); free(dev); @@ -318,6 +320,18 @@ static void user_log(struct timeval *tv, uint16_t index, dev->user_log++; } +static void unknown_opcode(struct timeval *tv, uint16_t index, + const void *data, uint16_t size) +{ + struct hci_dev *dev; + + dev = dev_lookup(index); + if (!dev) + return; + + dev->unknown++; +} + void analyze_trace(const char *path) { struct btsnoop *btsnoop_file; @@ -392,8 +406,9 @@ void analyze_trace(const char *path) user_log(&tv, index, buf, pktlen); break; default: - fprintf(stderr, "Wrong opcode %u\n", opcode); - goto done; + fprintf(stderr, "Unknown opcode %u\n", opcode); + unknown_opcode(&tv, index, buf, pktlen); + break; } num_packets++; |