aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-peekremote.c
diff options
context:
space:
mode:
authorAlexis La Goutte <alexis.lagoutte@gmail.com>2014-03-10 22:28:08 +0100
committerEvan Huus <eapache@gmail.com>2014-03-12 21:25:58 +0000
commitbc3aa5dff25b834977dec850efad4c21c10ea179 (patch)
tree4aa5930680af75b8d5cc34814749ef52fad45407 /epan/dissectors/packet-peekremote.c
parentc4c83502849ec2e0a2544e494647641d6c16dc4f (diff)
Add dissection of flags, status, flagsN for Omnipeek/Peek Remote dissector.
Information about value of flags from Emburey Change-Id: Iba79fba8e95cd2fc80f6fba5fa937d5485fbb381 Closed-bugs: 9586 Reviewed-on: https://code.wireshark.org/review/595 Reviewed-by: Anders Broman <a.broman58@gmail.com> Reviewed-by: Evan Huus <eapache@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-peekremote.c')
-rw-r--r--epan/dissectors/packet-peekremote.c167
1 files changed, 154 insertions, 13 deletions
diff --git a/epan/dissectors/packet-peekremote.c b/epan/dissectors/packet-peekremote.c
index e6d83c236e..670c0fd9f2 100644
--- a/epan/dissectors/packet-peekremote.c
+++ b/epan/dissectors/packet-peekremote.c
@@ -135,10 +135,42 @@ static header_field_info hfi_peekremote_flags THIS_HF_INIT =
{ "Flags", "peekremote.flags", FT_UINT8, BASE_HEX, NULL,
0x0, NULL, HFILL };
+static header_field_info hfi_peekremote_flags_dot11_control_type_frame THIS_HF_INIT =
+ { "Is a Dot11 Control type frame", "peekremote.flags.dot11_control_type_frame", FT_BOOLEAN, 8, TFS(&tfs_yes_no),
+ 0x01, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flags_crc_error THIS_HF_INIT =
+ { "Has CRC error", "peekremote.flags.has_crc_error", FT_BOOLEAN, 8, TFS(&tfs_yes_no),
+ 0x02, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flags_frame_error THIS_HF_INIT =
+ { "Has frame error", "peekremote.flags.has_frame_error", FT_BOOLEAN, 8, TFS(&tfs_yes_no),
+ 0x04, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flags_reserved THIS_HF_INIT =
+ { "Reserved", "peekremote.flags.reserved", FT_UINT8, BASE_HEX, NULL,
+ 0xF8, "Must be zero", HFILL };
+
static header_field_info hfi_peekremote_status THIS_HF_INIT =
{ "Status", "peekremote.status", FT_UINT8, BASE_HEX, NULL,
0x0, NULL, HFILL };
+static header_field_info hfi_peekremote_status_dot11_wep THIS_HF_INIT =
+ { "Dot11 Wep", "peekremote.status.dot11_wep", FT_BOOLEAN, 8, TFS(&tfs_yes_no),
+ 0x04, NULL, HFILL };
+
+static header_field_info hfi_peekremote_status_with_decrypt_error THIS_HF_INIT =
+ { "With decrypt error", "peekremote.status.with_decrypt_error", FT_BOOLEAN, 8, TFS(&tfs_yes_no),
+ 0x08, NULL, HFILL };
+
+static header_field_info hfi_peekremote_status_with_short_preamble THIS_HF_INIT =
+ { "With short preamble", "peekremote.status.with_short_preamble", FT_BOOLEAN, 8, TFS(&tfs_yes_no),
+ 0x40, NULL, HFILL };
+
+static header_field_info hfi_peekremote_status_reserved THIS_HF_INIT =
+ { "Reserved", "peekremote.status.reserved", FT_UINT8, BASE_HEX, NULL,
+ 0xB3, "Must be zero", HFILL };
+
static header_field_info hfi_peekremote_timestamp THIS_HF_INIT =
{ "TSF timestamp", "peekremote.timestamp", FT_UINT64, BASE_DEC, NULL,
0x0, NULL, HFILL };
@@ -189,6 +221,42 @@ static header_field_info hfi_peekremote_flagsn THIS_HF_INIT =
{ "FlagsN", "peekremote.flagsn", FT_UINT32, BASE_HEX, NULL,
0x0, NULL, HFILL };
+static header_field_info hfi_peekremote_flagsn_dot11ac_20mhz_lower THIS_HF_INIT =
+ { "802.11ac 20Mhz Lower", "peekremote.flagsn.dot11ac.20mhz_lower", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000001, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_dot11ac_20mhz_upper THIS_HF_INIT =
+ { "802.11ac 20Mhz Upper", "peekremote.flagsn.dot11ac.20mhz_upper", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000002, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_dot11ac_40mhz THIS_HF_INIT =
+ { "802.11ac 40Mhz", "peekremote.flagsn.dot11ac.40mhz", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000004, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_dot11ac_half_gi THIS_HF_INIT =
+ { "802.11ac Half Guard Interval", "peekremote.flagsn.dot11ac.half_gi", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000008, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_dot11ac_full_gi THIS_HF_INIT =
+ { "802.11ac Full Guard Interval", "peekremote.flagsn.dot11ac.full_gi", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000010, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_dot11ac_ampdu THIS_HF_INIT =
+ { "802.11ac AMPDU", "peekremote.flagsn.dot11ac.ampdu", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000020, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_dot11ac_amsdu THIS_HF_INIT =
+ { "802.11ac AMSDU", "peekremote.flagsn.dot11ac.amsdu", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000040, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_dot11ac_future_use THIS_HF_INIT =
+ { "802.11ac future use", "peekremote.flagsn.dot11ac.future_use", FT_BOOLEAN, 32, TFS(&tfs_yes_no),
+ 0x00000100, NULL, HFILL };
+
+static header_field_info hfi_peekremote_flagsn_reserved THIS_HF_INIT =
+ { "Reserved", "peekremote.flagsn.reserved", FT_UINT32, BASE_HEX, NULL,
+ 0xFFFFFE80, "Must be zero", HFILL };
+
static header_field_info hfi_peekremote_signal_percent THIS_HF_INIT =
{ "Signal [percent]", "peekremote.signal_percent", FT_UINT8, BASE_DEC, NULL,
0x0, NULL, HFILL };
@@ -234,9 +302,65 @@ static expert_field ei_peekremote_unknown_header_version = EI_INIT;
static expert_field ei_peekremote_invalid_header_size = EI_INIT;
static gint ett_peekremote = -1;
+static gint ett_peekremote_flags = -1;
+static gint ett_peekremote_status = -1;
+static gint ett_peekremote_flagsn = -1;
static dissector_handle_t ieee80211_handle;
+static int
+dissect_peekremote_flagsn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+{
+ proto_tree *flagsn_tree;
+ proto_item *ti_flagsn;
+
+ ti_flagsn = proto_tree_add_item(tree, &hfi_peekremote_flagsn, tvb, offset, 4, ENC_BIG_ENDIAN);
+ flagsn_tree = proto_item_add_subtree(ti_flagsn, ett_peekremote_flagsn);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_20mhz_lower, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_20mhz_upper, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_40mhz, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_half_gi, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_full_gi, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_ampdu, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_amsdu, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_dot11ac_future_use, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flagsn_tree, &hfi_peekremote_flagsn_reserved, tvb, offset, 4, ENC_BIG_ENDIAN);
+
+ return 4;
+}
+
+static int
+dissect_peekremote_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+{
+ proto_tree *flags_tree;
+ proto_item *ti_flags;
+
+ ti_flags = proto_tree_add_item(tree, &hfi_peekremote_flags, tvb, offset, 1, ENC_NA);
+ flags_tree = proto_item_add_subtree(ti_flags, ett_peekremote_flags);
+ proto_tree_add_item(flags_tree, &hfi_peekremote_flags_dot11_control_type_frame, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(flags_tree, &hfi_peekremote_flags_crc_error, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(flags_tree, &hfi_peekremote_flags_frame_error, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(flags_tree, &hfi_peekremote_flags_reserved, tvb, offset, 1, ENC_NA);
+
+ return 1;
+}
+
+static int
+dissect_peekremote_status(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
+{
+ proto_tree *status_tree;
+ proto_item *ti_status;
+
+ ti_status = proto_tree_add_item(tree, &hfi_peekremote_status, tvb, offset, 1, ENC_NA);
+ status_tree = proto_item_add_subtree(ti_status, ett_peekremote_status);
+ proto_tree_add_item(status_tree, &hfi_peekremote_status_dot11_wep, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(status_tree, &hfi_peekremote_status_with_decrypt_error, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(status_tree, &hfi_peekremote_status_with_short_preamble, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(status_tree, &hfi_peekremote_status_reserved, tvb, offset, 1, ENC_NA);
+
+ return 1;
+}
+
static gboolean
dissect_peekremote_new(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *u _U_)
{
@@ -288,9 +412,8 @@ dissect_peekremote_new(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
proto_tree_add_item(peekremote_tree, &hfi_peekremote_frequency, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
proto_tree_add_item(peekremote_tree, &hfi_peekremote_band, tvb, offset, 4, ENC_BIG_ENDIAN);
- offset += 4;
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_flagsn, tvb, offset, 4, ENC_BIG_ENDIAN);
- offset += 4;
+ offset +=4;
+ offset += dissect_peekremote_flagsn(tvb, pinfo, peekremote_tree, offset);
proto_tree_add_item(peekremote_tree, &hfi_peekremote_signal_percent, tvb, offset, 1, ENC_NA);
offset += 1;
proto_tree_add_item(peekremote_tree, &hfi_peekremote_noise_percent, tvb, offset, 1, ENC_NA);
@@ -319,10 +442,8 @@ dissect_peekremote_new(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
offset += 2;
proto_tree_add_item(peekremote_tree, &hfi_peekremote_slicelength, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_flags, tvb, offset, 1, ENC_NA);
- offset += 1;
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_status, tvb, offset, 1, ENC_NA);
- offset += 1;
+ offset += dissect_peekremote_flags(tvb, pinfo, peekremote_tree, offset);
+ offset += dissect_peekremote_status(tvb, pinfo, peekremote_tree, offset);
proto_tree_add_item(peekremote_tree, &hfi_peekremote_timestamp, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
}
@@ -364,12 +485,12 @@ dissect_peekremote_legacy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, v
ti = proto_tree_add_item(tree, hfi_peekremote, tvb, 0, -1, ENC_NA);
peekremote_tree = proto_item_add_subtree(ti, ett_peekremote);
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_signal_noise_dbm, tvb, 0, 1, ENC_NA);
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_noise_dbm, tvb, 1, 1, ENC_NA);
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_packetlength, tvb, 2, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_slicelength, tvb, 4, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_flags, tvb, 6, 1, ENC_NA);
- proto_tree_add_item(peekremote_tree, &hfi_peekremote_status, tvb, 7, 1, ENC_NA);
+ proto_tree_add_item(peekremote_tree, &hfi_peekremote_signal_noise_dbm, tvb, 0, 1, ENC_NA);
+ proto_tree_add_item(peekremote_tree, &hfi_peekremote_noise_dbm, tvb, 1, 1, ENC_NA);
+ proto_tree_add_item(peekremote_tree, &hfi_peekremote_packetlength, tvb, 2, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(peekremote_tree, &hfi_peekremote_slicelength, tvb, 4, 2, ENC_BIG_ENDIAN);
+ dissect_peekremote_flags(tvb, pinfo, peekremote_tree, 6);
+ dissect_peekremote_status(tvb, pinfo, peekremote_tree, 7);
proto_tree_add_item(peekremote_tree, &hfi_peekremote_timestamp, tvb, 8, 8, ENC_BIG_ENDIAN);
proto_tree_add_item(peekremote_tree, &hfi_peekremote_speed, tvb, 16, 1, ENC_NA);
proto_tree_add_item(peekremote_tree, &hfi_peekremote_channel, tvb, 17, 1, ENC_BIG_ENDIAN);
@@ -391,7 +512,15 @@ proto_register_peekremote(void)
&hfi_peekremote_packetlength,
&hfi_peekremote_slicelength,
&hfi_peekremote_flags,
+ &hfi_peekremote_flags_dot11_control_type_frame,
+ &hfi_peekremote_flags_crc_error,
+ &hfi_peekremote_flags_frame_error,
+ &hfi_peekremote_flags_reserved,
&hfi_peekremote_status,
+ &hfi_peekremote_status_dot11_wep,
+ &hfi_peekremote_status_with_decrypt_error,
+ &hfi_peekremote_status_with_short_preamble,
+ &hfi_peekremote_status_reserved,
&hfi_peekremote_timestamp,
&hfi_peekremote_speed,
&hfi_peekremote_channel,
@@ -405,6 +534,15 @@ proto_register_peekremote(void)
&hfi_peekremote_frequency,
&hfi_peekremote_band,
&hfi_peekremote_flagsn,
+ &hfi_peekremote_flagsn_dot11ac_20mhz_lower,
+ &hfi_peekremote_flagsn_dot11ac_20mhz_upper,
+ &hfi_peekremote_flagsn_dot11ac_40mhz,
+ &hfi_peekremote_flagsn_dot11ac_half_gi,
+ &hfi_peekremote_flagsn_dot11ac_full_gi,
+ &hfi_peekremote_flagsn_dot11ac_ampdu,
+ &hfi_peekremote_flagsn_dot11ac_amsdu,
+ &hfi_peekremote_flagsn_dot11ac_future_use,
+ &hfi_peekremote_flagsn_reserved,
&hfi_peekremote_signal_percent,
&hfi_peekremote_noise_percent,
&hfi_peekremote_signal_1_dbm,
@@ -419,6 +557,9 @@ proto_register_peekremote(void)
#endif
static gint *ett[] = {
&ett_peekremote,
+ &ett_peekremote_flags,
+ &ett_peekremote_status,
+ &ett_peekremote_flagsn
};
static ei_register_info ei[] = {
{ &ei_peekremote_unknown_header_version, { "peekremote.unknown_header_version", PI_UNDECODED, PI_ERROR, "Unknown header version", EXPFILL }},