From 7c8ab886209f581003a240c65a5892d0b47acce8 Mon Sep 17 00:00:00 2001 From: Himanshu Agarwal Date: Mon, 24 Apr 2017 13:47:20 +0530 Subject: [PATCH] qcacld-3.0: Fill rate and bw info for HT/VHT frames in monitor mode In monitor mode, while filling the radiotap header, rate and bw info for HT and VHT frames was not filled correctly due to which packets in tcpdump are showing incorrect rates and bw for HT/VHT frames. Fill rate and bw info for HT/VHT frames correctly in monitor mode. Change-Id: If15708101ac123fbdba141b04aad881d988e6b43 CRs-Fixed: 2034455 --- core/dp/htt/htt_rx.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/core/dp/htt/htt_rx.c b/core/dp/htt/htt_rx.c index c6f6a45de3a4..67a3096cb879 100644 --- a/core/dp/htt/htt_rx.c +++ b/core/dp/htt/htt_rx.c @@ -1685,7 +1685,7 @@ static void htt_mon_rx_get_phy_info(struct htt_host_rx_desc_base *rx_desc, uint8_t preamble = SHORT_PREAMBLE; uint8_t preamble_type = rx_desc->ppdu_start.preamble_type; uint8_t mcs = 0, nss = 0, sgi = 0, bw = 0, beamformed = 0; - uint16_t vht_flags = 0; + uint16_t vht_flags = 0, ht_flags = 0; uint32_t l_sig_rate_select = rx_desc->ppdu_start.l_sig_rate_select; uint32_t l_sig_rate = rx_desc->ppdu_start.l_sig_rate; bool is_stbc = 0, ldpc = 0; @@ -1758,7 +1758,7 @@ static void htt_mon_rx_get_phy_info(struct htt_host_rx_desc_base *rx_desc, is_stbc = ((VHT_SIG_A_2(rx_desc) >> 4) & 3); /* fallthrough */ case 9: - vht_flags = 1; + ht_flags = 1; sgi = (VHT_SIG_A_2(rx_desc) >> 7) & 0x01; bw = (VHT_SIG_A_1(rx_desc) >> 7) & 0x01; mcs = (VHT_SIG_A_1(rx_desc) & 0x7f); @@ -1767,7 +1767,6 @@ static void htt_mon_rx_get_phy_info(struct htt_host_rx_desc_base *rx_desc, (VHT_SIG_A_2(rx_desc) >> 8) & 0x1; break; case 0x0c: - vht_flags = 1; is_stbc = (VHT_SIG_A_2(rx_desc) >> 3) & 1; ldpc = (VHT_SIG_A_2(rx_desc) >> 2) & 1; /* fallthrough */ @@ -1785,7 +1784,7 @@ static void htt_mon_rx_get_phy_info(struct htt_host_rx_desc_base *rx_desc, nss = (VHT_SIG_A_1(rx_desc) >> 10) & 0x7; } else { - /* SU case */ + /* MU case */ uint8_t sta_user_pos = (uint8_t)((rx_desc->ppdu_start.reserved_4a >> 8) & 0x3); @@ -1806,16 +1805,23 @@ static void htt_mon_rx_get_phy_info(struct htt_host_rx_desc_base *rx_desc, } rx_status->mcs = mcs; + rx_status->bw = bw; rx_status->nr_ant = nss; rx_status->is_stbc = is_stbc; rx_status->sgi = sgi; rx_status->ldpc = ldpc; rx_status->beamformed = beamformed; - rx_status->vht_flag_values3[0] = mcs << 0x4; + rx_status->vht_flag_values3[0] = mcs << 0x4 | (nss + 1); rx_status->rate = rate; + rx_status->ht_flags = ht_flags; rx_status->vht_flags = vht_flags; rx_status->rtap_flags |= ((preamble == SHORT_PREAMBLE) ? BIT(1) : 0); - rx_status->vht_flag_values2 = 0x01 < bw; + if (bw == 0) + rx_status->vht_flag_values2 = 0; + else if (bw == 1) + rx_status->vht_flag_values2 = 1; + else if (bw == 2) + rx_status->vht_flag_values2 = 4; } /**