diff options
author | Michael Mann <mmann78@netscape.net> | 2014-01-12 00:50:41 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2014-01-12 00:50:41 +0000 |
commit | c071a1c7286eb9789dc5c96bb45ab75c75c3ecb4 (patch) | |
tree | 39717e01eed5f1ad45d3276c820938e3c0ee7d4d /wiretap | |
parent | 4210311b6985f957ad4073b410678685f0494865 (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.c | 22 | ||||
-rw-r--r-- | wiretap/wtap.c | 4 | ||||
-rw-r--r-- | wiretap/wtap.h | 12 |
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; |