diff options
author | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2014-03-10 22:28:08 +0100 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2014-03-12 21:25:58 +0000 |
commit | bc3aa5dff25b834977dec850efad4c21c10ea179 (patch) | |
tree | 4aa5930680af75b8d5cc34814749ef52fad45407 /epan/dissectors/packet-peekremote.c | |
parent | c4c83502849ec2e0a2544e494647641d6c16dc4f (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.c | 167 |
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 }}, |