summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-hci_mon.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-19 04:14:53 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-19 04:14:53 +0000
commita86c5f7cae7ec9a3398300555a0b644689d946a1 (patch)
tree39fe4b107c71174fd1e8a8ceb9a4d2aa14116248 /epan/dissectors/packet-hci_mon.c
parentReleasing progress-linux version 4.2.6-1~progress7.99u1. (diff)
downloadwireshark-a86c5f7cae7ec9a3398300555a0b644689d946a1.tar.xz
wireshark-a86c5f7cae7ec9a3398300555a0b644689d946a1.zip
Merging upstream version 4.4.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-hci_mon.c')
-rw-r--r--epan/dissectors/packet-hci_mon.c105
1 files changed, 59 insertions, 46 deletions
diff --git a/epan/dissectors/packet-hci_mon.c b/epan/dissectors/packet-hci_mon.c
index 1f5d2394..969c8b99 100644
--- a/epan/dissectors/packet-hci_mon.c
+++ b/epan/dissectors/packet-hci_mon.c
@@ -19,42 +19,43 @@
#include "packet-bluetooth.h"
-static int proto_hci_mon = -1;
-
-static int hf_adapter_id = -1;
-static int hf_opcode = -1;
-static int hf_type = -1;
-static int hf_bus = -1;
-static int hf_bd_addr = -1;
-static int hf_name = -1;
-static int hf_manufacturer = -1;
-static int hf_system_note = -1;
-static int hf_priority = -1;
-static int hf_ident_length = -1;
-static int hf_ident = -1;
-static int hf_message = -1;
-static int hf_cookie = -1;
-static int hf_format = -1;
-static int hf_version = -1;
-static int hf_revision = -1;
-static int hf_flags = -1;
-static int hf_flags_trusted_socket = -1;
-static int hf_command_length = -1;
-static int hf_command = -1;
-static int hf_event = -1;
-
-static gint ett_hci_mon = -1;
-static gint ett_flags = -1;
-
-static expert_field ei_unknown_data = EI_INIT;
-
-static wmem_tree_t *adapter_to_disconnect_in_frame = NULL;
+static int proto_hci_mon;
+
+static int hf_adapter_id;
+static int hf_opcode;
+static int hf_type;
+static int hf_bus;
+static int hf_bd_addr;
+static int hf_name;
+static int hf_manufacturer;
+static int hf_system_note;
+static int hf_priority;
+static int hf_ident_length;
+static int hf_ident;
+static int hf_message;
+static int hf_cookie;
+static int hf_format;
+static int hf_version;
+static int hf_revision;
+static int hf_flags;
+static int hf_flags_trusted_socket;
+static int hf_command_length;
+static int hf_command;
+static int hf_event;
+
+static int ett_hci_mon;
+static int ett_flags;
+
+static expert_field ei_unknown_data;
+
+static wmem_tree_t *adapter_to_disconnect_in_frame;
static dissector_handle_t hci_mon_handle;
static dissector_handle_t bthci_cmd_handle;
static dissector_handle_t bthci_evt_handle;
static dissector_handle_t bthci_acl_handle;
static dissector_handle_t bthci_sco_handle;
+static dissector_handle_t bthci_iso_handle;
#define OPCODE_NEW_INDEX 0
#define OPCODE_DELETE_INDEX 1
@@ -74,6 +75,8 @@ static dissector_handle_t bthci_sco_handle;
#define OPCODE_CONTROL_CLOSE 15
#define OPCODE_CONTROL_COMMAND 16
#define OPCODE_CONTROL_EVENT 17
+#define OPCODE_ISO_TX_PACKET 18
+#define OPCODE_ISO_RX_PACKET 19
static const value_string opcode_vals[] = {
{ OPCODE_NEW_INDEX, "New Index" },
@@ -94,6 +97,8 @@ static const value_string opcode_vals[] = {
{ OPCODE_CONTROL_CLOSE, "Control Close" },
{ OPCODE_CONTROL_COMMAND, "Control Command" },
{ OPCODE_CONTROL_EVENT, "Control Event" },
+ { OPCODE_ISO_TX_PACKET, "ISO Tx Packet" },
+ { OPCODE_ISO_RX_PACKET, "ISO Rx Packet" },
{ 0, NULL }
};
value_string_ext(hci_mon_opcode_vals_ext) = VALUE_STRING_EXT_INIT(opcode_vals);
@@ -227,25 +232,25 @@ static value_string_ext(event_vals_ext) = VALUE_STRING_EXT_INIT(event_vals);
void proto_register_hci_mon(void);
void proto_reg_handoff_hci_mon(void);
-static gint
+static int
dissect_hci_mon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
proto_tree *hci_mon_item;
proto_item *hci_mon_tree;
proto_item *sub_item;
- gint offset = 0;
- guint16 opcode;
- guint16 adapter_id;
+ int offset = 0;
+ uint16_t opcode;
+ uint16_t adapter_id;
bluetooth_data_t *bluetooth_data;
tvbuff_t *next_tvb;
- guint32 *adapter_disconnect_in_frame;
+ uint32_t *adapter_disconnect_in_frame;
wmem_tree_t *subtree;
wmem_tree_key_t key[4];
- guint32 k_interface_id;
- guint32 k_adapter_id;
- guint32 k_frame_number;
- guint32 ident_length;
- guint32 command_length;
+ uint32_t k_interface_id;
+ uint32_t k_adapter_id;
+ uint32_t k_frame_number;
+ uint32_t ident_length;
+ uint32_t command_length;
static int * const flags_fields[] = {
&hf_flags_trusted_socket,
NULL
@@ -314,14 +319,14 @@ dissect_hci_mon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
key[1].key = &k_adapter_id;
if (!pinfo->fd->visited && opcode == 0x01) { /* Delete Index */
- guint32 *disconnect_in_frame;
+ uint32_t *disconnect_in_frame;
key[2].length = 1;
key[2].key = &k_frame_number;
key[3].length = 0;
key[3].key = NULL;
- disconnect_in_frame = wmem_new(wmem_file_scope(), guint32);
+ disconnect_in_frame = wmem_new(wmem_file_scope(), uint32_t);
if (disconnect_in_frame) {
*disconnect_in_frame = pinfo->num;
@@ -334,7 +339,7 @@ dissect_hci_mon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
key[2].key = NULL;
subtree = (wmem_tree_t *) wmem_tree_lookup32_array(adapter_to_disconnect_in_frame, key);
- adapter_disconnect_in_frame = (subtree) ? (guint32 *) wmem_tree_lookup32_le(subtree, k_frame_number) : NULL;
+ adapter_disconnect_in_frame = (subtree) ? (uint32_t *) wmem_tree_lookup32_le(subtree, k_frame_number) : NULL;
if (adapter_disconnect_in_frame) {
bluetooth_data->adapter_disconnect_in_frame = adapter_disconnect_in_frame;
} else {
@@ -353,7 +358,7 @@ dissect_hci_mon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
proto_tree_add_item(hci_mon_tree, hf_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- offset = dissect_bd_addr(hf_bd_addr, pinfo, hci_mon_tree, tvb, offset, TRUE, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
+ offset = dissect_bd_addr(hf_bd_addr, pinfo, hci_mon_tree, tvb, offset, true, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
proto_tree_add_item(hci_mon_tree, hf_name, tvb, offset, 8, ENC_NA | ENC_ASCII);
offset += 8;
@@ -397,7 +402,7 @@ dissect_hci_mon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
break;
case OPCODE_INDEX_INFO:
- offset = dissect_bd_addr(hf_bd_addr, pinfo, hci_mon_tree, tvb, offset, TRUE, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
+ offset = dissect_bd_addr(hf_bd_addr, pinfo, hci_mon_tree, tvb, offset, true, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
proto_tree_add_item(hci_mon_tree, hf_manufacturer, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -493,6 +498,13 @@ dissect_hci_mon(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
/* XXX - dissect the payload of the event */
break;
+
+ case OPCODE_ISO_TX_PACKET:
+ case OPCODE_ISO_RX_PACKET:
+ call_dissector_with_data(bthci_iso_handle, next_tvb, pinfo, tree, bluetooth_data);
+ offset = tvb_reported_length(tvb);
+
+ break;
}
if (tvb_reported_length_remaining(tvb, offset) > 0) {
@@ -626,7 +638,7 @@ proto_register_hci_mon(void)
{ &ei_unknown_data, { "hci_mon.unknown_data", PI_PROTOCOL, PI_WARN, "Unknown data", EXPFILL }},
};
- static gint *ett[] = {
+ static int *ett[] = {
&ett_hci_mon,
&ett_flags
};
@@ -654,6 +666,7 @@ proto_reg_handoff_hci_mon(void)
bthci_evt_handle = find_dissector_add_dependency("bthci_evt", proto_hci_mon);
bthci_acl_handle = find_dissector_add_dependency("bthci_acl", proto_hci_mon);
bthci_sco_handle = find_dissector_add_dependency("bthci_sco", proto_hci_mon);
+ bthci_iso_handle = find_dissector_add_dependency("bthci_iso_data", proto_hci_mon);
dissector_add_uint("bluetooth.encap", WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR, hci_mon_handle);
}