From 9cd07d6b076214eb4f84b78788f38bc48f46292d Mon Sep 17 00:00:00 2001 From: Paul B Date: Tue, 14 Jan 2020 08:31:07 +0200 Subject: [PATCH] Fix FCS on 8811 Issue also exist on 8811cu as described and fixed for 8812au at https://github.com/aircrack-ng/rtl8812au/issues/28 --- core/rtw_recv.c | 11 ++++++++++- hal/rtl8821c/usb/rtl8821cu_recv.c | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/rtw_recv.c b/core/rtw_recv.c index ec548bd..8f08212 100755 --- a/core/rtw_recv.c +++ b/core/rtw_recv.c @@ -3993,8 +3993,17 @@ static sint fill_radiotap_hdr(_adapter *padapter, union recv_frame *precvframe, hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FRAG; /* always append FCS */ - hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FCS; + //hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FCS; +#ifdef CONFIG_RX_PACKET_APPEND_FCS + // Start by always indicating FCS is there: + hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_FCS; + + // Next, test for prior conditions that will remove FCS, and update flag accordingly: + if(check_fwstate(&padapter->mlmepriv,WIFI_MONITOR_STATE) == _FALSE) + if((pattrib->pkt_rpt_type == NORMAL_RX) && (pHalData->ReceiveConfig & RCR_APPFCS)) + hdr_buf[rt_len] &= ~IEEE80211_RADIOTAP_F_FCS; +#endif if (0) hdr_buf[rt_len] |= IEEE80211_RADIOTAP_F_DATAPAD; diff --git a/hal/rtl8821c/usb/rtl8821cu_recv.c b/hal/rtl8821c/usb/rtl8821cu_recv.c index 22bc58f..d65219d 100755 --- a/hal/rtl8821c/usb/rtl8821cu_recv.c +++ b/hal/rtl8821c/usb/rtl8821cu_recv.c @@ -38,7 +38,8 @@ static u8 recvbuf2recvframe_proccess_normal_rx #ifdef CONFIG_RX_PACKET_APPEND_FCS if (check_fwstate(&padapter->mlmepriv, WIFI_MONITOR_STATE) == _FALSE) { - if (rtl8821c_rx_fcs_appended(padapter)) + //if (rtl8821c_rx_fcs_appended(padapter)) + if ((pattrib->pkt_rpt_type == NORMAL_RX) && (pHalData->ReceiveConfig & RCR_APPFCS)) pattrib->pkt_len -= IEEE80211_FCS_LEN; } #endif