aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2014-01-12 00:50:41 +0000
committerMichael Mann <mmann78@netscape.net>2014-01-12 00:50:41 +0000
commitc071a1c7286eb9789dc5c96bb45ab75c75c3ecb4 (patch)
tree39717e01eed5f1ad45d3276c820938e3c0ee7d4d /wiretap
parent4210311b6985f957ad4073b410678685f0494865 (diff)
Bluetooth/Ubertooth improvements. Bug 9606 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9606)
From Michal Labedski 1. add support for new btsnoop "format" introduced by BlueZ team in "btmon" tool 2. Bluetooth: Make EIR, AD and COD more generic 3. Bluetooth: HCI/LL: Update Error Codes to Core 4.1 Specification 4. Ubertooth: Fix response command handling 5. Ubertooth: Update to support firmware version 6. Ubertooth: Dissect by Vendor Id/Product Id svn path=/trunk/; revision=54699
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/btsnoop.c22
-rw-r--r--wiretap/wtap.c4
-rw-r--r--wiretap/wtap.h12
3 files changed, 25 insertions, 13 deletions
diff --git a/wiretap/btsnoop.c b/wiretap/btsnoop.c
index 69aaf1d108..9fc2cb06f4 100644
--- a/wiretap/btsnoop.c
+++ b/wiretap/btsnoop.c
@@ -63,8 +63,8 @@ struct btsnooprec_hdr {
#define KHciLoggerDatalinkTypeBCSP 1003
/* H5 is the official three wire serial protocol derived from BCSP*/
#define KHciLoggerDatalinkTypeH5 1004
-/* BlueZ 5 Monitor */
-#define KHciLoggerDatalinkBlueZ5Monitor 2001
+/* Linux Monitor */
+#define KHciLoggerDatalinkLinuxMonitor 2001
/* BlueZ 5 Simulator */
#define KHciLoggerDatalinkBlueZ5Simulator 2002
@@ -140,10 +140,9 @@ int btsnoop_open(wtap *wth, int *err, gchar **err_info)
*err = WTAP_ERR_UNSUPPORTED;
*err_info = g_strdup_printf("btsnoop: H5 capture logs unsupported");
return -1;
- case KHciLoggerDatalinkBlueZ5Monitor:
- *err = WTAP_ERR_UNSUPPORTED;
- *err_info = g_strdup_printf("btsnoop: BlueZ 5 Monitor capture logs unsupported");
- return -1;
+ case KHciLoggerDatalinkLinuxMonitor:
+ file_encap=WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR;
+ break;
case KHciLoggerDatalinkBlueZ5Simulator:
*err = WTAP_ERR_UNSUPPORTED;
*err_info = g_strdup_printf("btsnoop: BlueZ 5 Simulator capture logs unsupported");
@@ -227,9 +226,7 @@ static gboolean btsnoop_read_record(wtap *wth, FILE_T fh,
if(wth->file_encap == WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR)
{
phdr->pseudo_header.p2p.sent = (flags & KHciLoggerControllerToHost) ? FALSE : TRUE;
- }
- else if(wth->file_encap == WTAP_ENCAP_BLUETOOTH_HCI)
- {
+ } else if(wth->file_encap == WTAP_ENCAP_BLUETOOTH_HCI) {
phdr->pseudo_header.bthci.sent = (flags & KHciLoggerControllerToHost) ? FALSE : TRUE;
if(flags & KHciLoggerCommandOrEvent)
{
@@ -246,6 +243,9 @@ static gboolean btsnoop_read_record(wtap *wth, FILE_T fh,
{
phdr->pseudo_header.bthci.channel = BTHCI_CHANNEL_ACL;
}
+ } else if (wth->file_encap == WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR) {
+ phdr->pseudo_header.btmon.opcode = flags & 0xFFFF;
+ phdr->pseudo_header.btmon.adapter_id = flags >> 16;
}
@@ -261,8 +261,8 @@ int btsnoop_dump_can_write_encap(int encap)
if (encap == WTAP_ENCAP_PER_PACKET)
return WTAP_ERR_ENCAP_PER_PACKET_UNSUPPORTED;
- /* XXX - for now we only support WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR */
- if (encap != WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR)
+ /* XXX - for now we only support WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR and WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR */
+ if (encap != WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR && encap != WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR)
return WTAP_ERR_UNSUPPORTED_ENCAP;
return 0;
diff --git a/wiretap/wtap.c b/wiretap/wtap.c
index 64fbcf8d69..d5b4c89e6d 100644
--- a/wiretap/wtap.c
+++ b/wiretap/wtap.c
@@ -695,6 +695,10 @@ static struct encap_type_info encap_table_base[] = {
/* WTAP_ENCAP_NETLINK */
{ "Netlink", "Linux netlink" },
+
+ /* WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR */
+ { "Bluetooth Linux Monitor", "bluetooth-linux-monitor" },
+
};
WS_DLL_LOCAL
diff --git a/wiretap/wtap.h b/wiretap/wtap.h
index d9dbae6e03..b70c893df7 100644
--- a/wiretap/wtap.h
+++ b/wiretap/wtap.h
@@ -252,6 +252,7 @@ extern "C" {
#define WTAP_ENCAP_STANAG_4607 157
#define WTAP_ENCAP_STANAG_5066_D_PDU 158
#define WTAP_ENCAP_NETLINK 159
+#define WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR 160
/* After adding new item here, please also add new item to encap_table_base array */
#define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types()
@@ -804,8 +805,8 @@ struct sita_phdr {
/*pseudo header for Bluetooth HCI*/
struct bthci_phdr {
- gboolean sent;
- guint8 channel;
+ gboolean sent;
+ guint32 channel;
};
#define BTHCI_CHANNEL_COMMAND 1
@@ -813,6 +814,12 @@ struct bthci_phdr {
#define BTHCI_CHANNEL_SCO 3
#define BTHCI_CHANNEL_EVENT 4
+/* pseudo header for WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR */
+struct btmon_phdr {
+ guint16 adapter_id;
+ guint16 opcode;
+};
+
/* pseudo header for WTAP_ENCAP_LAYER1_EVENT */
struct l1event_phdr {
gboolean uton;
@@ -865,6 +872,7 @@ union wtap_pseudo_header {
struct erf_mc_phdr erf;
struct sita_phdr sita;
struct bthci_phdr bthci;
+ struct btmon_phdr btmon;
struct l1event_phdr l1event;
struct i2c_phdr i2c;
struct gsm_um_phdr gsm_um;