mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 10:24:01 -04:00
wifi: ath12k: fix A-MSDU indication in monitor mode
In monitor mode, host will reap MSDUs and then the MSDUs with same PPDU ID will be aggregated into an A-MSDU in ath12k_dp_mon_rx_merg_msdus(). However, ath12k_dp_mon_rx_merg_msdus() doesn't calculate the total length of the A-MSDU. This causes Wireshark to display the A-MSDU incorrectly. Therefore, need to add calculation of the A-MSDU length. Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 Signed-off-by: Kang Yang <quic_kangyang@quicinc.com> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> Link: https://patch.msgid.link/20241022110831.974-9-quic_kangyang@quicinc.com Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
This commit is contained in:
@@ -870,11 +870,11 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar, u32 mac_id,
|
||||
struct ieee80211_rx_status *rxs, bool *fcs_err)
|
||||
{
|
||||
struct ath12k_base *ab = ar->ab;
|
||||
struct sk_buff *msdu, *mpdu_buf, *prev_buf;
|
||||
struct sk_buff *msdu, *mpdu_buf, *prev_buf, *head_frag_list;
|
||||
struct hal_rx_desc *rx_desc, *tail_rx_desc;
|
||||
u8 *hdr_desc, *dest, decap_format;
|
||||
struct ieee80211_hdr_3addr *wh;
|
||||
u32 err_bitmap;
|
||||
u32 err_bitmap, frag_list_sum_len = 0;
|
||||
|
||||
mpdu_buf = NULL;
|
||||
|
||||
@@ -897,10 +897,15 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar, u32 mac_id,
|
||||
|
||||
prev_buf = head_msdu;
|
||||
msdu = head_msdu->next;
|
||||
head_frag_list = NULL;
|
||||
|
||||
while (msdu) {
|
||||
ath12k_dp_mon_rx_msdus_set_payload(ar, msdu, tail_msdu);
|
||||
|
||||
if (!head_frag_list)
|
||||
head_frag_list = msdu;
|
||||
|
||||
frag_list_sum_len += msdu->len;
|
||||
prev_buf = msdu;
|
||||
msdu = msdu->next;
|
||||
}
|
||||
@@ -908,6 +913,12 @@ ath12k_dp_mon_rx_merg_msdus(struct ath12k *ar, u32 mac_id,
|
||||
prev_buf->next = NULL;
|
||||
|
||||
skb_trim(prev_buf, prev_buf->len - HAL_RX_FCS_LEN);
|
||||
if (head_frag_list) {
|
||||
skb_shinfo(head_msdu)->frag_list = head_frag_list;
|
||||
head_msdu->data_len = frag_list_sum_len;
|
||||
head_msdu->len += head_msdu->data_len;
|
||||
head_msdu->next = NULL;
|
||||
}
|
||||
} else if (decap_format == DP_RX_DECAP_TYPE_NATIVE_WIFI) {
|
||||
u8 qos_pkt = 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user