summaryrefslogtreecommitdiff
path: root/monitor/analyze.c
diff options
context:
space:
mode:
authorSzymon Janc <szymon.janc@codecoup.pl>2016-06-17 09:59:40 +0200
committerSzymon Janc <szymon.janc@codecoup.pl>2016-06-17 10:13:58 +0200
commitf70216f37b0aaa61acc8dfcd823bc1de1860c840 (patch)
tree7be9afe726b7f0c9789bf88cc47f07ebda6d3519 /monitor/analyze.c
parent91740c65c90e9486b9d7ef9060f04f9e36a10d74 (diff)
downloadbluez-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.c19
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++;