Wireshark-dev: [Wireshark-dev] Some more proposed changes for the ieee802.11 family of dissecto
From: Richard Sharpe <[email protected]>
Date: Sun, 23 Aug 2015 08:41:55 -0700
Hi folks,

Here are some possible changes. They seemingly raise more questions
than they answer at this stage, so they are for comments.

diff --git a/epan/dissectors/packet-ieee80211-radio.c
b/epan/dissectors/packet-ieee80211-radio.c
index 7239f8b..2bbb05b 100644
--- a/epan/dissectors/packet-ieee80211-radio.c
+++ b/epan/dissectors/packet-ieee80211-radio.c
@@ -87,6 +87,7 @@ static const value_string phy_vals[] = {
     { PHDR_802_11_PHY_11G,           "802.11g" },
     { PHDR_802_11_PHY_11N,           "802.11n" },
     { PHDR_802_11_PHY_11AC,          "802.11ac" },
+    { PHDR_802_11_PHY_11AD,          "802.11ad" },
     { 0, NULL }
 };

diff --git a/epan/dissectors/packet-ieee80211-radiotap.c
b/epan/dissectors/packet-ieee80211-radiotap.c
index d4956ed..36b64b9 100644
--- a/epan/dissectors/packet-ieee80211-radiotap.c
+++ b/epan/dissectors/packet-ieee80211-radiotap.c
@@ -1345,6 +1345,10 @@ dissect_radiotap(tvbuff_t * tvb, packet_info *
pinfo, proto_tree * tree)
                        /*
                         * If there's actually any data here, not an
                         * empty field, this is 802.11n.
+                        *
+                        * However, some 802.11ad captures also use this
+                        * field, so we also check the Channel frequency
+                        * later to see if we should override the PHY setting.
                         */
                        if (mcs_known != 0) {
                                phdr.phy = PHDR_802_11_PHY_11N;
@@ -1746,6 +1750,15 @@ dissect_radiotap(tvbuff_t * tvb, packet_info *
pinfo, proto_tree * tree)
                proto_item_append_text(ti, " (malformed)");
        }

+       /*
+        * All the 802.11ad captures I have seen set the Frequency to a DMG
+        * frequency and then insert an MCS. For the moment, change the PHY
+        * to the 802.11ad PHY symbol we have.
+        */
+       if IS_80211AD(phdr.frequency) {
+               phdr.phy = PHDR_802_11_PHY_11AD;
+        }
+
  hand_off_to_80211:
        /* Grab the rest of the frame. */
        next_tvb = tvb_new_subset_remaining(tvb, length);


-- 
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)