Handle the VHT flavor of the HT Control field.
The low-order bit of the field indicates whether it's the HT or VHT version. Show subfields as part of a 32-bit bitfield; few subfields begin and end on a byte boundary (the Link Adaptation Control field no longer does so; its low-order reserved bit became the VHT flag). Update references to the 11n spec. Update a comment. Change-Id: I9fcb99a5517afb319b67d4deb2355c7cb0be73b6 Reviewed-on: https://code.wireshark.org/review/9191 Reviewed-by: Guy Harris <guy@alum.mit.edu>
This commit is contained in:
parent
f196061889
commit
26a1ccbc05
|
@ -432,10 +432,17 @@ static gboolean is_80211ad(proto_node * pnode, gpointer data) {
|
|||
#define QOS_PS_QAP_BUF_LOAD(x) (((x) & 0xF0) >> 4)
|
||||
|
||||
/*
|
||||
* Extract subfields from the HT Control field.
|
||||
* .11n D-1.10 & D-2.0, 7.1.3.5a, 32 bits.
|
||||
* Bits from the HT Control field.
|
||||
* 802.11-2012 and 802.11ac-2013 8.2.4.6, 32 bits.
|
||||
*/
|
||||
#define HTC_LAC(htc) ((htc) & 0xFF)
|
||||
#define HTC_VHT 0x00000001
|
||||
#define HTC_MRQ 0x00000004
|
||||
#define HTC_UNSOLICITED_MFB 0x20000000
|
||||
|
||||
/*
|
||||
* Extract subfields from the HT Control field.
|
||||
*/
|
||||
#define HTC_LAC(htc) ((htc) & 0xFE)
|
||||
#define HTC_LAC_MAI(htc) (((htc) >> 2) & 0xF)
|
||||
#define HTC_IS_ASELI(htc) (HTC_LAC_MAI(htc) == 0xE)
|
||||
#define HTC_LAC_MAI_MRQ(htc) ((HTC_LAC_MAI(htc)) & 0x1)
|
||||
|
@ -451,6 +458,11 @@ static gboolean is_80211ad(proto_node * pnode, gpointer data) {
|
|||
#define HTC_AC_CONSTRAINT(htc) (((htc) >> 30) & 0x1)
|
||||
#define HTC_RDG_MORE_PPDU(htc) (((htc) >> 31) & 0x1)
|
||||
|
||||
#define HTC_MFB(htc) (((htc) >> 9) & 0x7FFF)
|
||||
|
||||
/* VHT-MCS = 15, NUM_STS = 7 */
|
||||
#define HTC_NO_FEEDBACK_PRESENT(mfb) (((mfb) & 0x7F) == 0x7F)
|
||||
|
||||
/*
|
||||
* Extract subfields from the key octet in WEP-encrypted frames.
|
||||
*/
|
||||
|
@ -2999,11 +3011,6 @@ static const value_string ieee80211_htc_cal_pos_flags[] = {
|
|||
{0x00, NULL}
|
||||
};
|
||||
|
||||
static const true_false_string ieee80211_htc_ndp_announcement_flag = {
|
||||
"NDP will follow",
|
||||
"No NDP will follow"
|
||||
};
|
||||
|
||||
static const value_string ieee80211_htc_csi_steering_flags[] = {
|
||||
{0x00, "No feedback required"},
|
||||
{0x01, "CSI"},
|
||||
|
@ -3012,6 +3019,31 @@ static const value_string ieee80211_htc_csi_steering_flags[] = {
|
|||
{0x00, NULL}
|
||||
};
|
||||
|
||||
static const true_false_string ieee80211_htc_ndp_announcement_flag = {
|
||||
"NDP will follow",
|
||||
"No NDP will follow"
|
||||
};
|
||||
|
||||
static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
|
||||
{0, "20 MHz"},
|
||||
{1, "40 MHz"},
|
||||
{2, "80 MHz"},
|
||||
{3, "160 MHz and 80+80 MHz"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const value_string ieee80211_htc_coding_type_vals[] = {
|
||||
{0, "BCC"},
|
||||
{1, "LDPC"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const value_string ieee80211_htc_fb_tx_type_vals[] = {
|
||||
{0, "Not beamformed"},
|
||||
{1, "Beamformed"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
|
||||
{0x00, "No Secondary Channel"},
|
||||
{0x01, "Above Primary Channel"},
|
||||
|
@ -3262,10 +3294,10 @@ static int hf_ieee80211_qos_queue_size = -1;
|
|||
/* ************************************************************************* */
|
||||
/* Header values for HT control field (+HTC) */
|
||||
/* ************************************************************************* */
|
||||
/* 802.11nD-1.10 & 802.11nD-2.0 7.1.3.5a */
|
||||
/* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
|
||||
static int hf_ieee80211_htc = -1;
|
||||
static int hf_ieee80211_htc_vht = -1;
|
||||
static int hf_ieee80211_htc_lac = -1;
|
||||
static int hf_ieee80211_htc_lac_reserved = -1;
|
||||
static int hf_ieee80211_htc_lac_trq = -1;
|
||||
static int hf_ieee80211_htc_lac_mai_aseli = -1;
|
||||
static int hf_ieee80211_htc_lac_mai_mrq = -1;
|
||||
|
@ -3281,6 +3313,23 @@ static int hf_ieee80211_htc_reserved1 = -1;
|
|||
static int hf_ieee80211_htc_csi_steering = -1;
|
||||
static int hf_ieee80211_htc_ndp_announcement = -1;
|
||||
static int hf_ieee80211_htc_reserved2 = -1;
|
||||
static int hf_ieee80211_htc_mrq = -1;
|
||||
static int hf_ieee80211_htc_msi = -1;
|
||||
static int hf_ieee80211_htc_msi_stbc_reserved = -1;
|
||||
static int hf_ieee80211_htc_compressed_msi = -1;
|
||||
static int hf_ieee80211_htc_ppdu_stbc_encoded = -1;
|
||||
static int hf_ieee80211_htc_mfsi = -1;
|
||||
static int hf_ieee80211_htc_gid_l = -1;
|
||||
static int hf_ieee80211_htc_mfb = -1;
|
||||
static int hf_ieee80211_htc_num_sts = -1;
|
||||
static int hf_ieee80211_htc_vht_mcs = -1;
|
||||
static int hf_ieee80211_htc_bw = -1;
|
||||
static int hf_ieee80211_htc_snr = -1;
|
||||
static int hf_ieee80211_htc_reserved3 = -1;
|
||||
static int hf_ieee80211_htc_gid_h = -1;
|
||||
static int hf_ieee80211_htc_coding_type = -1;
|
||||
static int hf_ieee80211_htc_fb_tx_type = -1;
|
||||
static int hf_ieee80211_htc_unsolicited_mfb = -1;
|
||||
static int hf_ieee80211_htc_ac_constraint = -1;
|
||||
static int hf_ieee80211_htc_rdg_more_ppdu = -1;
|
||||
|
||||
|
@ -5144,7 +5193,10 @@ static gint ett_antsel_tree = -1;
|
|||
static gint ett_hta_cap_tree = -1;
|
||||
static gint ett_hta_cap1_tree = -1;
|
||||
static gint ett_hta_cap2_tree = -1;
|
||||
|
||||
static gint ett_htc_tree = -1;
|
||||
static gint ett_mfb_subtree = -1;
|
||||
static gint ett_lac_subtree = -1;
|
||||
|
||||
static gint ett_vht_cap_tree = -1;
|
||||
static gint ett_vht_mcsset_tree = -1;
|
||||
|
@ -13039,57 +13091,126 @@ dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
|
|||
*
|
||||
* At any rate, it doesn't look like any equipment we have produces
|
||||
* +HTC frames, so the code is completely untested.
|
||||
*
|
||||
* 2015-06-26 G. Harris:
|
||||
*
|
||||
* At least as I read the 802.11 spec, yes, you *do* need the PHY:
|
||||
*
|
||||
* 8.2.4.1.10 Order field
|
||||
*
|
||||
* The Order field is 1 bit in length. It is used for two purposes:
|
||||
*
|
||||
* -- It is set to 1 in a non-QoS data frame transmitted by a non-QoS
|
||||
* STA to indicate that the frame contains an MSDU, or fragment
|
||||
* thereof, that is being transferred using the StrictlyOrdered
|
||||
* service class.
|
||||
*
|
||||
* -- It is set to 1 in a QoS data or management frame transmitted
|
||||
* with a value of HT_GF or HT_MF for the FORMAT parameter of the
|
||||
* TXVECTOR to indicate that the frame contains an HT Control field.
|
||||
*
|
||||
* so it sounds as if you need to know whether the frame was "transmitted
|
||||
* with a value of HT_GF or HT_MF for the FORMAT parameter of the TXVECTOR",
|
||||
* i.e., the frame was transmitted as a Greenfield or Mixed HT frame.
|
||||
*
|
||||
* Fortunately, we *do* know that if the frame was saved with a radiotap
|
||||
* header with MCS or with XChannel with the appropriate flags set, or
|
||||
* in with a PPI header with MCS information, or in some other capture
|
||||
* file format with a "this is HT" flag, or in a captured access point
|
||||
* snooping protocol with a "this is HT" flag, and we use it.
|
||||
*
|
||||
* 802.11ac changes the second of those clauses to say "HT_GF, HT_MF,
|
||||
* or VHT", indicates that bit B0 of the field is 0 for HT and 1 for
|
||||
* VHT (stealing a reserved bit from the Link Adaptation Control field),
|
||||
* and that everything except for "AC Constraint" and "RDG/More Cowbell^W
|
||||
* PPDU" is different for the VHT version.
|
||||
*/
|
||||
|
||||
static void
|
||||
dissect_ht_control(proto_tree *tree, tvbuff_t *tvb, int offset)
|
||||
{
|
||||
proto_item *ti;
|
||||
proto_tree *htc_tree, *lac_subtree;
|
||||
guint16 htc;
|
||||
proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
|
||||
guint32 htc;
|
||||
|
||||
htc = tvb_get_letohs(tvb, offset);
|
||||
htc = tvb_get_letohl(tvb, offset);
|
||||
|
||||
ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
|
||||
|
||||
/* Start: Link Adaptation Control */
|
||||
ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
lac_subtree = proto_item_add_subtree(ti, ett_htc_tree);
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
||||
|
||||
if (HTC_IS_ASELI(htc)) {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
||||
if (HTC_LAC_MAI_MRQ(htc)) {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
||||
/* Check the HT vs. VHT bit. */
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
if (htc & HTC_VHT) {
|
||||
/* VHT */
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
if (!(htc & HTC_UNSOLICITED_MFB)) {
|
||||
if (htc & HTC_MRQ) {
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))) {
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
}
|
||||
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
|
||||
if (HTC_IS_ASELI(htc)) {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
|
||||
proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
/* This should be converted to dB by adding 22 */
|
||||
proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))) {
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
/* Start: Link Adaptation Control */
|
||||
ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
|
||||
if (HTC_IS_ASELI(htc)) {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
if (HTC_LAC_MAI_MRQ(htc)) {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
}
|
||||
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
|
||||
if (HTC_IS_ASELI(htc)) {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
} else {
|
||||
proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
/* End: Link Adaptation Control */
|
||||
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
}
|
||||
offset += 2;
|
||||
/* End: Link Adaptation Control */
|
||||
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
||||
|
||||
/* offset += 2; */
|
||||
}
|
||||
|
@ -16652,7 +16773,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
|
|||
break;
|
||||
|
||||
case PHDR_802_11_PHY_11AC:
|
||||
is_ht = TRUE; /* VHT XXX */
|
||||
is_ht = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -26003,16 +26124,16 @@ proto_register_ieee80211 (void)
|
|||
FT_UINT32, BASE_HEX, NULL, 0,
|
||||
"High Throughput Control (+HTC)", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_vht,
|
||||
{"VHT", "wlan_mgt.htc.lac.vht",
|
||||
FT_BOOLEAN, 32, NULL, HTC_VHT,
|
||||
"High Throughput Control HT/VHT flag", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_lac,
|
||||
{"Link Adaptation Control (LAC)", "wlan_mgt.htc.lac",
|
||||
FT_UINT16, BASE_HEX, NULL, 0,
|
||||
FT_UINT32, BASE_HEX, NULL, 0x0000FFFE,
|
||||
"High Throughput Control Link Adaptation Control (LAC)", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_lac_reserved,
|
||||
{"Reserved", "wlan_mgt.htc.lac.reserved",
|
||||
FT_BOOLEAN, 16, NULL, 0x0001,
|
||||
"High Throughput Control Link Adaptation Control Reserved", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_lac_trq,
|
||||
{"Training Request (TRQ)", "wlan_mgt.htc.lac.trq",
|
||||
FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag), 0x0002,
|
||||
|
@ -26060,42 +26181,127 @@ proto_register_ieee80211 (void)
|
|||
|
||||
{&hf_ieee80211_htc_cal_pos,
|
||||
{"Calibration Position", "wlan_mgt.htc.cal.pos",
|
||||
FT_UINT16, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags), 0x0003,
|
||||
FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags), 0x00030000,
|
||||
"High Throughput Control Calibration Position", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_cal_seq,
|
||||
{"Calibration Sequence Identifier", "wlan_mgt.htc.cal.seq",
|
||||
FT_UINT16, BASE_DEC, NULL, 0x000C,
|
||||
FT_UINT32, BASE_DEC, NULL, 0x000C0000,
|
||||
"High Throughput Control Calibration Sequence Identifier", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_reserved1,
|
||||
{"Reserved", "wlan_mgt.htc.reserved1",
|
||||
FT_UINT16, BASE_DEC, NULL, 0x0030,
|
||||
FT_UINT32, BASE_HEX, NULL, 0x00300000,
|
||||
"High Throughput Control Reserved", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_csi_steering,
|
||||
{"CSI/Steering", "wlan_mgt.htc.csi_steering",
|
||||
FT_UINT16, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags), 0x00C0,
|
||||
FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags), 0x00C00000,
|
||||
"High Throughput Control CSI/Steering", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_ndp_announcement,
|
||||
{"NDP Announcement", "wlan_mgt.htc.ndp_announcement",
|
||||
FT_BOOLEAN, 16, TFS(&ieee80211_htc_ndp_announcement_flag), 0x0100,
|
||||
FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag), 0x01000000,
|
||||
"High Throughput Control NDP Announcement", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_reserved2,
|
||||
{"Reserved", "wlan_mgt.htc.reserved2",
|
||||
FT_UINT16, BASE_HEX, NULL, 0x3E00,
|
||||
FT_UINT32, BASE_HEX, NULL, 0x3E000000,
|
||||
"High Throughput Control Reserved", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_mrq,
|
||||
{"MRQ", "wlan_mgt.htc.mrq",
|
||||
FT_BOOLEAN, 32, NULL, HTC_MRQ,
|
||||
"VHT-MCS feedback request", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_msi,
|
||||
{"MSI", "wlan_mgt.htc.msi",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x00000038,
|
||||
"MRQ sequence number", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_msi_stbc_reserved,
|
||||
{"Reserved", "wlan_mgt.htc.msi_stbc_reserved",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x00000038,
|
||||
NULL, HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_compressed_msi,
|
||||
{"Compressed MSI", "wlan_mgt.htc.compressed_msi",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x00000018,
|
||||
NULL, HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_ppdu_stbc_encoded,
|
||||
{"PPDU was STBC encoded", "wlan_mgt.htc.ppdu_stbc_encoded",
|
||||
FT_BOOLEAN, 32, NULL, 0x00000020,
|
||||
NULL, HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_mfsi,
|
||||
{"MFSI", "wlan_mgt.htc.mfsi",
|
||||
FT_BOOLEAN, 32, NULL, 0x000001C0,
|
||||
"MFB sequence identifier", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_gid_l,
|
||||
{"GID-L", "wlan_mgt.htc.gid_l",
|
||||
FT_BOOLEAN, 32, NULL, 0x000001C0,
|
||||
"LSBs of group ID", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_mfb,
|
||||
{"MFB", "wlan_mgt.htc.mfb",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x00FFFE00,
|
||||
"Recommended MFB", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_num_sts,
|
||||
{"NUM_STS", "wlan_mgt.htc.num_sts",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x00000E00,
|
||||
"Recommended NUM_STS", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_vht_mcs,
|
||||
{"VHT-MCS", "wlan_mgt.htc.vht_mcs",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x0000F000,
|
||||
"Recommended VHT-MCS", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_bw,
|
||||
{"BW", "wlan_mgt.htc.bw",
|
||||
FT_UINT32, BASE_DEC, VALS(ieee80211_htc_bw_recommended_vht_mcs_vals), 0x00030000,
|
||||
"Bandwidth for recommended VHT-MCS", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_snr,
|
||||
{"SNR", "wlan_mgt.htc.snr",
|
||||
FT_INT32, BASE_DEC, NULL, 0x00FC0000,
|
||||
"Average SNR + 22", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_reserved3,
|
||||
{"Reserved", "wlan_mgt.htc.reserved3",
|
||||
FT_UINT32, BASE_HEX, NULL, 0x1F000000,
|
||||
NULL, HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_gid_h,
|
||||
{"GID-H", "wlan_mgt.htc.gid_h",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x07000000,
|
||||
NULL, HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_coding_type,
|
||||
{"Coding type", "wlan_mgt.htc.coding_type",
|
||||
FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals), 0x08000000,
|
||||
NULL, HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_fb_tx_type,
|
||||
{"FB Tx type", "wlan_mgt.htc.fb_tx_type",
|
||||
FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals), 0x10000000,
|
||||
NULL, HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_unsolicited_mfb,
|
||||
{"Unsolicited MFB", "wlan_mgt.htc.unsolicited_mfb",
|
||||
FT_BOOLEAN, 32, NULL, HTC_UNSOLICITED_MFB,
|
||||
"High Throughput Control Unsolicited MFB", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_ac_constraint,
|
||||
{"AC Constraint", "wlan_mgt.htc.ac_constraint",
|
||||
FT_BOOLEAN, 16, NULL, 0x4000,
|
||||
FT_BOOLEAN, 32, NULL, 0x40000000,
|
||||
"High Throughput Control AC Constraint", HFILL }},
|
||||
|
||||
{&hf_ieee80211_htc_rdg_more_ppdu,
|
||||
{"RDG/More PPDU", "wlan_mgt.htc.rdg_more_ppdu",
|
||||
FT_BOOLEAN, 16, NULL, 0x8000,
|
||||
FT_BOOLEAN, 32, NULL, 0x80000000,
|
||||
"High Throughput Control RDG/More PPDU", HFILL }},
|
||||
/* End: HT Control (+HTC) */
|
||||
|
||||
|
@ -26767,7 +26973,10 @@ proto_register_ieee80211 (void)
|
|||
&ett_hta_cap_tree,
|
||||
&ett_hta_cap1_tree,
|
||||
&ett_hta_cap2_tree,
|
||||
|
||||
&ett_htc_tree,
|
||||
&ett_mfb_subtree,
|
||||
&ett_lac_subtree,
|
||||
|
||||
&ett_vht_cap_tree,
|
||||
&ett_vht_mcsset_tree,
|
||||
|
|
Loading…
Reference in New Issue