aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2014-03-03 08:51:04 +0100
committerAnders Broman <a.broman58@gmail.com>2014-03-06 05:53:52 +0000
commit248c284622bd330ab91b08ffda9d5497b60bb68a (patch)
tree8c25e343ac513bc3b9221174643f7963bce19590 /epan/dissectors
parente2ed48a8d38e7a885d47ba213e7deb72e18ca3d9 (diff)
Bluetooth: Fix interface_id
Interface ID should correspond to the Wireshark Interface Id to avoid mixing data from various interfaces in dissectors. Change-Id: Ibaa3ddab7f0ebd0985efea74439b94a5881145a7 Reviewed-on: https://code.wireshark.org/review/472 Reviewed-by: Evan Huus <eapache@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-bluetooth-hci.h18
-rw-r--r--epan/dissectors/packet-btl2cap.c36
-rw-r--r--epan/dissectors/packet-btle.c8
-rw-r--r--epan/dissectors/packet-hci_h1.c6
-rw-r--r--epan/dissectors/packet-hci_h4.c6
-rw-r--r--epan/dissectors/packet-hci_mon.c5
-rw-r--r--epan/dissectors/packet-hci_usb.c9
7 files changed, 64 insertions, 24 deletions
diff --git a/epan/dissectors/packet-bluetooth-hci.h b/epan/dissectors/packet-bluetooth-hci.h
index d5a8e81dac..20b388274c 100644
--- a/epan/dissectors/packet-bluetooth-hci.h
+++ b/epan/dissectors/packet-bluetooth-hci.h
@@ -84,14 +84,16 @@ extern const value_string bthci_cmd_notification_types[];
AVDTP, BNEP etc. RFCOMM channel has end-protocol like OBEX, HFP, etc.
Important note: correct payload decoding should store needed data using
key contain interface_id, adapter_id, ..., last_channel_type (for example
- RFCOMM channel, transaction_id, frame number etc. ) */
-#define HCI_INTERFACE_H1 0
-#define HCI_INTERFACE_H4 1
-#define HCI_INTERFACE_USB 2
-#define HCI_INTERFACE_AMP 3
-#define HCI_INTERFACE_MON 4
-
-#define HCI_ADAPTER_DEFAULT 0
+ RFCOMM channel, transaction_id, frame number etc. )
+
+ interface_id - interface id provided by Wireshark, see "frame.interface_id",
+ in case where is only one interface id HCI_INTERFACE_DEFAULT
+ is used (for example open BTSNOOP file with HCI H4 protocol)
+ adapter_id - identified Bluetooth device (interface, for example Linux
+ hci0, hci1, etc.)
+*/
+#define HCI_INTERFACE_DEFAULT 0
+#define HCI_ADAPTER_DEFAULT 0
/* chandle_to_bdaddr_table: interface_id + adapter_id + connection_handle + frame_number -> bd_addr[6] */
/* bdaddr_to_name_table: bd_addr[6] + frame_number -> name */
diff --git a/epan/dissectors/packet-btl2cap.c b/epan/dissectors/packet-btl2cap.c
index 6fcfe789fd..a421032e09 100644
--- a/epan/dissectors/packet-btl2cap.c
+++ b/epan/dissectors/packet-btl2cap.c
@@ -32,6 +32,7 @@
#include <epan/expert.h>
#include <epan/wmem/wmem.h>
#include <epan/decode_as.h>
+#include <wiretap/wtap.h>
#include "packet-bluetooth-hci.h"
#include "packet-bthci_acl.h"
@@ -577,7 +578,10 @@ dissect_connrequest(tvbuff_t *tvb, int offset, packet_info *pinfo,
guint32 chandle;
psm_data_t *psm_data;
- interface_id = (acl_data) ? acl_data->interface_id : HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ interface_id = pinfo->phdr->interface_id;
+ else
+ interface_id = HCI_INTERFACE_DEFAULT;
adapter_id = (acl_data) ? acl_data->adapter_id : HCI_ADAPTER_DEFAULT;
chandle = (acl_data) ? acl_data->chandle : 0;
@@ -810,7 +814,10 @@ dissect_configrequest(tvbuff_t *tvb, int offset, packet_info *pinfo,
guint32 chandle;
guint32 cid;
- interface_id = (acl_data) ? acl_data->interface_id : HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ interface_id = pinfo->phdr->interface_id;
+ else
+ interface_id = HCI_INTERFACE_DEFAULT;
adapter_id = (acl_data) ? acl_data->adapter_id : HCI_ADAPTER_DEFAULT;
chandle = (acl_data) ? acl_data->chandle : 0;
cid = dcid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x00000000 : 0x80000000);
@@ -1000,7 +1007,10 @@ dissect_configresponse(tvbuff_t *tvb, int offset, packet_info *pinfo,
guint32 chandle;
guint32 cid;
- interface_id = (acl_data) ? acl_data->interface_id : HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ interface_id = pinfo->phdr->interface_id;
+ else
+ interface_id = HCI_INTERFACE_DEFAULT;
adapter_id = (acl_data) ? acl_data->adapter_id : HCI_ADAPTER_DEFAULT;
chandle = (acl_data) ? acl_data->chandle : 0;
cid = scid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x00000000 : 0x80000000);
@@ -1085,7 +1095,10 @@ dissect_connresponse(tvbuff_t *tvb, int offset, packet_info *pinfo,
guint32 chandle;
guint32 cid;
- interface_id = (acl_data) ? acl_data->interface_id : HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ interface_id = pinfo->phdr->interface_id;
+ else
+ interface_id = HCI_INTERFACE_DEFAULT;
adapter_id = (acl_data) ? acl_data->adapter_id : HCI_ADAPTER_DEFAULT;
chandle = (acl_data) ? acl_data->chandle : 0;
cid = scid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x00000000 : 0x80000000);
@@ -1276,7 +1289,10 @@ dissect_disconnrequestresponse(tvbuff_t *tvb, int offset, packet_info *pinfo,
guint32 key_scid;
guint32 key_dcid;
- interface_id = (acl_data) ? acl_data->interface_id : HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ interface_id = pinfo->phdr->interface_id;
+ else
+ interface_id = HCI_INTERFACE_DEFAULT;
adapter_id = (acl_data) ? acl_data->adapter_id : HCI_ADAPTER_DEFAULT;
chandle = (acl_data) ? acl_data->chandle : 0;
key_dcid = dcid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x00000000 : 0x80000000);
@@ -1651,7 +1667,10 @@ dissect_btl2cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
l2cap_data = wmem_new(wmem_packet_scope(), btl2cap_data_t);
- l2cap_data->interface_id = (acl_data) ? acl_data->interface_id : HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ l2cap_data->interface_id = pinfo->phdr->interface_id;
+ else
+ l2cap_data->interface_id = HCI_INTERFACE_DEFAULT;
l2cap_data->adapter_id = (acl_data) ? acl_data->adapter_id : HCI_ADAPTER_DEFAULT;
l2cap_data->chandle = (acl_data) ? acl_data->chandle : 0;
l2cap_data->cid = cid;
@@ -1857,7 +1876,10 @@ dissect_btl2cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
guint32 chandle;
guint32 key_cid;
- interface_id = (acl_data) ? acl_data->interface_id : HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ interface_id = pinfo->phdr->interface_id;
+ else
+ interface_id = HCI_INTERFACE_DEFAULT;
adapter_id = (acl_data) ? acl_data->adapter_id : HCI_ADAPTER_DEFAULT;
chandle = (acl_data) ? acl_data->chandle : 0;
key_cid = cid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x00000000 : 0x80000000);
diff --git a/epan/dissectors/packet-btle.c b/epan/dissectors/packet-btle.c
index b27db682eb..76612b982f 100644
--- a/epan/dissectors/packet-btle.c
+++ b/epan/dissectors/packet-btle.c
@@ -221,6 +221,7 @@ dissect_btle(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
gint offset = 0;
guint32 access_address;
guint8 length;
+ guint32 interface_id;
tvbuff_t *next_tvb;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "LE LL");
@@ -245,6 +246,11 @@ dissect_btle(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
access_address = tvb_get_letohl(tvb, offset);
offset += 4;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ interface_id = pinfo->phdr->interface_id;
+ else
+ interface_id = HCI_INTERFACE_DEFAULT;
+
if (access_address == ACCESS_ADDRESS_ADVERTISING) {
proto_item *advertising_header_item;
proto_tree *advertising_header_tree;
@@ -411,7 +417,7 @@ dissect_btle(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_
col_append_str(pinfo->cinfo, COL_INFO, "L2CAP Data");
/* TODO: Temporary solution while chandle source/bd_addrs is unknown */
acl_data = wmem_new(wmem_packet_scope(), bthci_acl_data_t);
- acl_data->interface_id = HCI_INTERFACE_USB;
+ acl_data->interface_id = interface_id;
acl_data->adapter_id = 0;
acl_data->chandle = 0;
acl_data->remote_bd_addr_oui = 0;
diff --git a/epan/dissectors/packet-hci_h1.c b/epan/dissectors/packet-hci_h1.c
index 1d695f904f..e55e6d41f4 100644
--- a/epan/dissectors/packet-hci_h1.c
+++ b/epan/dissectors/packet-hci_h1.c
@@ -25,6 +25,7 @@
#include <epan/packet.h>
#include <wiretap/wtap.h>
#include <epan/wmem/wmem.h>
+#include <wiretap/wtap.h>
#include "packet-bluetooth-hci.h"
@@ -106,7 +107,10 @@ dissect_hci_h1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
"Unknown 0x%02x"));
hci_data = wmem_new(wmem_packet_scope(), hci_data_t);
- hci_data->interface_id = HCI_INTERFACE_H4;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ hci_data->interface_id = pinfo->phdr->interface_id;
+ else
+ hci_data->interface_id = HCI_INTERFACE_DEFAULT;
hci_data->adapter_id = HCI_ADAPTER_DEFAULT;
hci_data->chandle_to_bdaddr_table = chandle_to_bdaddr_table;
hci_data->bdaddr_to_name_table = bdaddr_to_name_table;
diff --git a/epan/dissectors/packet-hci_h4.c b/epan/dissectors/packet-hci_h4.c
index 30dc188e4f..723d741e3e 100644
--- a/epan/dissectors/packet-hci_h4.c
+++ b/epan/dissectors/packet-hci_h4.c
@@ -31,6 +31,7 @@
#include <epan/packet.h>
#include <wiretap/wtap.h>
#include <epan/wmem/wmem.h>
+#include <wiretap/wtap.h>
#include "packet-bluetooth-hci.h"
@@ -102,7 +103,10 @@ dissect_hci_h4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _
}
hci_data = (hci_data_t *) wmem_new(wmem_packet_scope(), hci_data_t);
- hci_data->interface_id = HCI_INTERFACE_H4;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ hci_data->interface_id = pinfo->phdr->interface_id;
+ else
+ hci_data->interface_id = HCI_INTERFACE_DEFAULT;
hci_data->adapter_id = HCI_ADAPTER_DEFAULT;
hci_data->chandle_to_bdaddr_table = chandle_to_bdaddr_table;
hci_data->bdaddr_to_name_table = bdaddr_to_name_table;
diff --git a/epan/dissectors/packet-hci_mon.c b/epan/dissectors/packet-hci_mon.c
index c07606a8cf..210733568e 100644
--- a/epan/dissectors/packet-hci_mon.c
+++ b/epan/dissectors/packet-hci_mon.c
@@ -146,7 +146,10 @@ dissect_hci_mon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
adapter_id, val_to_str_ext_const(opcode, &opcode_vals_ext, "Unknown"));
hci_data = (hci_data_t *) wmem_new(wmem_packet_scope(), hci_data_t);
- hci_data->interface_id = HCI_INTERFACE_MON;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ hci_data->interface_id = pinfo->phdr->interface_id;
+ else
+ hci_data->interface_id = HCI_INTERFACE_DEFAULT;
hci_data->adapter_id = adapter_id;
hci_data->chandle_to_bdaddr_table = chandle_to_bdaddr_table;
hci_data->bdaddr_to_name_table = bdaddr_to_name_table;
diff --git a/epan/dissectors/packet-hci_usb.c b/epan/dissectors/packet-hci_usb.c
index d2bdf14563..f8527cd4aa 100644
--- a/epan/dissectors/packet-hci_usb.c
+++ b/epan/dissectors/packet-hci_usb.c
@@ -28,6 +28,7 @@
#include <epan/prefs.h>
#include <epan/reassemble.h>
#include <epan/wmem/wmem.h>
+#include <wiretap/wtap.h>
#include "packet-usb.h"
#include "packet-bluetooth-hci.h"
@@ -170,12 +171,10 @@ dissect_hci_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
session_id = usb_conv_info->bus_id << 16 | usb_conv_info->device_address << 8 | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 1 : 0 ) << 7 | usb_conv_info->endpoint;
hci_data = (hci_data_t *) wmem_new(wmem_packet_scope(), hci_data_t);
-
- if (usb_conv_info->device_protocol == 0xE00104)
- hci_data->interface_id = HCI_INTERFACE_AMP;
+ if (pinfo->phdr->presence_flags & WTAP_HAS_INTERFACE_ID)
+ hci_data->interface_id = pinfo->phdr->interface_id;
else
- hci_data->interface_id = HCI_INTERFACE_USB;
-
+ hci_data->interface_id = HCI_INTERFACE_DEFAULT;
hci_data->adapter_id = usb_conv_info->bus_id << 8 | usb_conv_info->device_address;
hci_data->chandle_to_bdaddr_table = chandle_to_bdaddr_table;
hci_data->bdaddr_to_name_table = bdaddr_to_name_table;