aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2016-10-24 12:18:46 +0200
committerMichal Labedzki <michal.labedzki@tieto.com>2016-11-04 09:21:18 +0000
commitcbd4a461ddba7ce202d6326668b30866863e3513 (patch)
tree1554077dcb056c0de0bdf5c872419a485864b0c3
parentc9262ac6701e8b7541b792593e49b2a62d39eda5 (diff)
Bluetooth: HCI: LE: Implement missing Meta Events
1. LE Remote Connection Parameter Request 2. LE Data Length Change 3. LE Read Local P-256 Public Key Complete 4. LE Generate DHKey Complete 5. LE Enhanced Connection Complete (implies more meta-info present) Change-Id: I4aac5b66808cd15cc5b6825429b2bff848aa88b4 Reviewed-on: https://code.wireshark.org/review/18665 Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
-rw-r--r--epan/dissectors/packet-bthci_cmd.c2
-rw-r--r--epan/dissectors/packet-bthci_evt.c105
2 files changed, 106 insertions, 1 deletions
diff --git a/epan/dissectors/packet-bthci_cmd.c b/epan/dissectors/packet-bthci_cmd.c
index 3c1b4f853d..666e4380b2 100644
--- a/epan/dissectors/packet-bthci_cmd.c
+++ b/epan/dissectors/packet-bthci_cmd.c
@@ -1294,6 +1294,8 @@ value_string_ext bthci_cmd_auth_req_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_a
const value_string bthci_cmd_address_types_vals[] = {
{ 0x00, "Public Device Address" },
{ 0x01, "Random Device Address" },
+ { 0x02, "Public Identity Address (Corresponds to Resolved Private Address)" },
+ { 0x03, "Random (Static) Identity Address (Corresponds to Resolved Private Address)" },
{ 0, NULL }
};
diff --git a/epan/dissectors/packet-bthci_evt.c b/epan/dissectors/packet-bthci_evt.c
index 9306bfbc7f..cc5931e082 100644
--- a/epan/dissectors/packet-bthci_evt.c
+++ b/epan/dissectors/packet-bthci_evt.c
@@ -318,8 +318,16 @@ static int hf_bthci_evt_le_peer_address_type = -1;
static int hf_bthci_evt_le_local_rpa = -1;
static int hf_bthci_evt_le_peer_rpa = -1;
static int hf_bthci_evt_le_con_interval = -1;
+static int hf_bthci_evt_le_min_interval = -1;
+static int hf_bthci_evt_le_max_interval = -1;
static int hf_bthci_evt_le_con_latency = -1;
static int hf_bthci_evt_le_supervision_timeout = -1;
+static int hf_bthci_evt_le_max_tx_octets = -1;
+static int hf_bthci_evt_le_max_tx_time = -1;
+static int hf_bthci_evt_le_max_rx_octets = -1;
+static int hf_bthci_evt_le_max_rx_time = -1;
+static int hf_bthci_evt_le_local_p_256_public_key = -1;
+static int hf_bthci_evt_le_dhkey = -1;
static int hf_bthci_evt_encrypted_diversifier = -1;
static int hf_bthci_evt_le_master_clock_accuracy = -1;
static int hf_bthci_evt_num_reports = -1;
@@ -2097,11 +2105,65 @@ dissect_bthci_evt_le_meta(tvbuff_t *tvb, int offset, packet_info *pinfo,
offset += 2;
break;
case 0x06: /* LE Remote Connection Parameter Request */
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_le_min_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_item_append_text(item, " (%g msec)", tvb_get_letohs(tvb, offset) * 1.25);
+ offset += 2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_le_max_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_item_append_text(item, " (%g msec)", tvb_get_letohs(tvb, offset) * 1.25);
+ offset += 2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_item_append_text(item, " (number events)");
+ offset += 2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_item_append_text(item, " (%g sec)", tvb_get_letohs(tvb, offset) * 0.01);
+ offset += 2;
+
+ break;
case 0x07: /* LE Data Length Change */
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_le_max_tx_octets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_le_max_tx_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_le_max_rx_octets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_le_max_rx_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ break;
case 0x08: /* LE Read Local P-256 Public Key Complete */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
+ offset += 1;
+
+ proto_tree_add_item(tree, hf_bthci_evt_le_local_p_256_public_key, tvb, offset, 64, ENC_NA);
+ offset += 64;
+
+ add_opcode(opcode_list, 0x2025, COMMAND_STATUS_NORMAL); /* LE Read Local P-256 Public Key */
+
+ break;
case 0x09: /* LE Generate DHKey Complete */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
+ offset += 1;
+
+ proto_tree_add_item(tree, hf_bthci_evt_le_dhkey, tvb, offset, 32, ENC_NA);
+ offset += 32;
+
+ add_opcode(opcode_list, 0x2026, COMMAND_STATUS_NORMAL); /* LE Generate DHKey */
+
break;
-/* TODO */
case 0x0A: /* LE Enhanced Connection Complete */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
@@ -2177,6 +2239,7 @@ dissect_bthci_evt_le_meta(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
add_opcode(opcode_list, 0x200D, COMMAND_STATUS_NORMAL); /* LE Create Connection */
+
break;
case 0x0B: /* LE Direct Advertising Report */
/* TODO */
@@ -5974,6 +6037,16 @@ proto_register_bthci_evt(void)
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL}
},
+ { &hf_bthci_evt_le_local_p_256_public_key,
+ { "Local-256_Public_Key", "bthci_evt.le_local_p_256_public_key",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bthci_evt_le_dhkey,
+ { "DHKey", "bthci_evt.dhkey",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
{ &hf_bthci_evt_sync_rtx_window,
{"Retransmit Window", "bthci_evt.sync_rtx_window",
FT_UINT8, BASE_DEC, NULL, 0x0,
@@ -6379,6 +6452,16 @@ proto_register_bthci_evt(void)
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
+ { &hf_bthci_evt_le_min_interval,
+ { "Min Connection Interval", "bthci_evt.le_min_interval",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bthci_evt_le_max_interval,
+ { "Min Connection Interval", "bthci_evt.le_max_interval",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
{ &hf_bthci_evt_le_con_latency,
{ "Connection Latency", "bthci_evt.le_con_latency",
FT_UINT16, BASE_DEC, NULL, 0x0,
@@ -6389,6 +6472,26 @@ proto_register_bthci_evt(void)
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
+ { &hf_bthci_evt_le_max_tx_octets,
+ { "Max TX Octets", "bthci_evt.max_tx_octets",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bthci_evt_le_max_tx_time,
+ { "Max TX Time", "bthci_evt.max_tx_time",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bthci_evt_le_max_rx_octets,
+ { "Max RX Octets", "bthci_evt.max_rx_octets",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_bthci_evt_le_max_rx_time,
+ { "Max RX Time", "bthci_evt.max_rx_time",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
{ &hf_bthci_evt_encrypted_diversifier,
{ "Encrypted Diversifier", "bthci_evt.le_encrypted_diversifier",
FT_UINT16, BASE_HEX, NULL, 0x0,