This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

wl18xx, wlcore warning: corrupted packet in RX

Hi!

Using a Compal CH7284e access point I'm getting a lot of this in my syslog, even on a low-traffic network:

Wed Feb 11 19:54:56 2015 kern.warn kernel: wlcore: WARNING corrupted packet in RX: status: 0x3 len: 76 (repeated 2 times)
Wed Feb 11 19:54:49 2015 kern.warn kernel: wlcore: WARNING corrupted packet in RX: status: 0x3 len: 76 (repeated 2 times)
Wed Feb 11 19:54:42 2015 kern.warn kernel: wlcore: WARNING corrupted packet in RX: status: 0x3 len: 76 (repeated 2 times)
Wed Feb 11 19:54:39 2015 kern.warn kernel: wlcore: WARNING corrupted packet in RX: status: 0x3 len: 216 (repeated 2 times)
Wed Feb 11 19:54:37 2015 kern.warn kernel: wlcore: WARNING corrupted packet in RX: status: 0x3 len: 104
Wed Feb 11 19:54:35 2015 kern.warn kernel: wlcore: WARNING corrupted packet in RX: status: 0x3 len: 76
Wed Feb 11 19:54:31 2015 kern.warn kernel: wlcore: WARNING corrupted packet in RX: status: 0x3 len: 64 

What may this indicate and how serious is it?

I'm running firmware 8.9.0.0.31.

  • Hi,

    Do you only see these logs with this specific AP?

    Regards,
    Gigi Joseph.
  • Hi!
    So far yes.

    Thanks.
  • Hi!
    I have now seen it with another AP (Ubiquiti UniFi AP-AC) as well. What may it mean and why does it occur? I have several wl18xx devices associated with the very same AP and they do not get this at the same time at least.
  • Hi Jacob,

    Please upgrade the AP SW version (if possible) and test again.

    If the issue still happens, please provide a Sniffer log. If you are using security, please provide the key as well.
    Please also share the exact AP module and SW version.

    Regards,
    Gigi Joseph.
  • Hi Gigi!
    I have provided the data for you in a CSR.

    Thanks.
  • Hi Jacob,

    Thanks! I will close this thread, and we will track this using the CSR system.

    Regards,
    Gigi Joseph.
  • I'm seeing the same thing and am interested in what the outcome of this was.
  • Hi Sean!
    We still see this issue now and then (mostly on Compal routers), and the network becomes basically unusable. What access point do you see it with?

    Haven't found a good way to reproduce this, unfortunately, so we have not progressed very far in solving it.
  • We made a workaround:

    1. Avoid printouts in the critical function - I guess the printouts can have bad effects in general. Instead, count the the number of corrupted packets and expose the counter on debugs. Patch attached below.

    2. Implement a watchdog that checks if this number increases - if so - perform a reauthentication.

    This improves the situation a lot.

    commit d5f93ef1016fcd569fe6b991f74f3befd150888f
    Author: Jacob Siverskog <jacob@teenage.engineering>
    Date:   Wed Sep 23 17:26:56 2015 +0200
    
        wl18xx: Silence corrupted packets, expose count on debugfs.
    
    diff --git a/drivers/net/wireless/ti/wlcore/debugfs.c b/drivers/net/wireless/ti/wlcore/debugfs.c
    index 39e79db..fb20a0a 100644
    --- a/drivers/net/wireless/ti/wlcore/debugfs.c
    +++ b/drivers/net/wireless/ti/wlcore/debugfs.c
    @@ -86,6 +86,7 @@ EXPORT_SYMBOL_GPL(wl1271_debugfs_update_stats);
     
     DEBUGFS_READONLY_FILE(retry_count, "%u", wl->stats.retry_count);
     DEBUGFS_READONLY_FILE(bogus_wakeup, "%u", wl->bogus_wakeup);
    +DEBUGFS_READONLY_FILE(corrupted_packets, "%u", wl->corrupted_packets);
     DEBUGFS_READONLY_FILE(excessive_retries, "%u",
     		      wl->stats.excessive_retries);
     
    @@ -1279,6 +1280,7 @@ static int wl1271_debugfs_add_files(struct wl1271 *wl,
     	DEBUGFS_ADD(tx_queue_len, rootdir);
     	DEBUGFS_ADD(retry_count, rootdir);
     	DEBUGFS_ADD(bogus_wakeup, rootdir);
    +	DEBUGFS_ADD(corrupted_packets, rootdir);
     	DEBUGFS_ADD(excessive_retries, rootdir);
     
     	DEBUGFS_ADD(gpio_power, rootdir);
    diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
    index 3e205e8..f8939e9 100644
    --- a/drivers/net/wireless/ti/wlcore/main.c
    +++ b/drivers/net/wireless/ti/wlcore/main.c
    @@ -6396,6 +6396,7 @@ struct ieee80211_hw *wlcore_alloc_hw(size_t priv_size, u32 aggr_buf_size,
     	wl->active_sta_count = 0;
     	wl->active_link_count = 0;
     	wl->fwlog_size = 0;
    +	wl->corrupted_packets = 0;
     	init_waitqueue_head(&wl->fwlog_waitq);
     
     	/* The system link is always allocated */
    diff --git a/drivers/net/wireless/ti/wlcore/rx.c b/drivers/net/wireless/ti/wlcore/rx.c
    index d399e2e..0677dd5 100644
    --- a/drivers/net/wireless/ti/wlcore/rx.c
    +++ b/drivers/net/wireless/ti/wlcore/rx.c
    @@ -155,13 +155,14 @@ static int wl1271_rx_handle_data(struct wl1271 *wl, u8 *data, u32 length,
     
     	/* discard corrupted packets */
     	if (desc->status & WL1271_RX_DESC_DECRYPT_FAIL) {
    -		hdr = (void *)(data + sizeof(*desc) + offset_to_data);
    +		/*hdr = (void *)(data + sizeof(*desc) + offset_to_data);
     		wl1271_warning("corrupted packet in RX: status: 0x%x len: %d",
     			       desc->status & WL1271_RX_DESC_STATUS_MASK,
     			       pkt_data_len);
     		wl1271_dump((DEBUG_RX|DEBUG_CMD), "PKT: ", data + sizeof(*desc),
     			    min(pkt_data_len,
    -				ieee80211_hdrlen(hdr->frame_control)));
    +				ieee80211_hdrlen(hdr->frame_control)));*/
    +		wl->corrupted_packets++;
     		return -EINVAL;
     	}
     
    diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
    index fc506b0..4424200 100644
    --- a/drivers/net/wireless/ti/wlcore/wlcore.h
    +++ b/drivers/net/wireless/ti/wlcore/wlcore.h
    @@ -526,6 +526,7 @@ struct wl1271 {
     
     	bool first_frame_after_wakeup;
     	bool bogus_wakeup;
    +	unsigned int corrupted_packets;
     };
     
     int wlcore_probe(struct wl1271 *wl, struct platform_device *pdev);

  • I'm actually seeing the same thing with a DIR-600 AP!
    After restarting wpa_supplicant (performing reauth) the issue is again temporarly resolved.
  • I have the same issue with the UDOO NEO board.

    Here is the console output at boot:

    [ 4.356090] wlcore: wl18xx HW: 183x or 180x, PG 2.2 (ROM 0x11)
    [ 4.374144] wlcore: loaded
    [ 4.381585] wlcore: driver version: R8.7_SP2
    Successfully initialized wpa_supplicant
    [ 116.718447] wlcore: PHY firmware version: Rev 8.2.0.0.236
    [ 116.767805] wlcore: firmware booted (Rev 8.9.0.0.69)
    [ 117.000690] NET: Registered protocol family 10
    [ 117.019700] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
    [ 117.617465] wlan0: authenticate with 30:d3:2d:56:dd:13
    [ 117.629774] wlan0: send auth to 30:d3:2d:56:dd:13 (try 1/3)
    [ 117.649465] wlan0: authenticated
    [ 117.654897] wlan0: associate with 30:d3:2d:56:dd:13 (try 1/3)
    [ 117.665744] wlan0: RX AssocResp from 30:d3:2d:56:dd:13 (capab=0x411 status=0 aid=1)
    [ 117.679723] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
    [ 117.686241] wlan0: associated
    [ 117.738836] wlcore: Association completed.

    Driver: R8.7_SP2
    Firmware: Rev 8.9.0.0.69
    Linux kernel: 4.1.15

    And here is the corrupt packet message triggered:

    [ 1125.842927] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 82
    [ 1133.099498] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 112
    [ 1133.106609] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 112
    [ 1139.052810] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 88
    [ 1139.360167] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 88
    [ 1139.505958] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 88
    [ 1139.559219] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 76
    [ 1139.769918] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 76
    [ 1151.238944] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 88
    [ 1161.381309] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 88
    [ 1190.252107] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 64
    [ 1191.790353] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 88
    [ 1196.818543] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 82
    [ 1196.964932] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 82
    [ 1197.951056] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 82
    [ 1198.222878] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 112
    [ 1201.619672] wlcore: WARNING corrupted packet in RX: status: 0x1 len: 88
    ...

    If more than one board is connected to the same AP, they all get disconnected with this WARNING, making this WL18xx chipset completely unusable.

    Is there any REAL workaround or planned update since?

    EDIT:

    Updating the firmware to the v8.9.0.0.75 fixed this issue.