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.

[参考译文] WL1835MOD:wl1835固件在启动大型网状网络(>范围内的10个对等器件)时卡住、无法恢复

Guru**** 2553260 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/957174/wl1835mod-wl1835-firmware-gets-stuck-and-does-not-recover-when-bringing-up-large-mesh-10-peers-within-range

器件型号:WL1835MOD
Thread 中讨论的其他器件:WL1835

提供案例详细信息或注释:我们的器件正在设置无线网状网络、其中 wl1835通过 SDIO 与 i.mx 6处理器进行连接。

我们的平台是基于 Linux 4.9的平台。 driver/net/wireless/ti 目录似乎与 Linux 稳定4.9标签中的版本同步。

用于所有附加日志的固件版本为:
[171.7880] wlcore:PHY 固件版本:版本8.2.0.240
[171.851427] wlcore:固件已启动(版本8.9.0.0.76)

但是、最新固件版本的问题似乎也是重复出现的:
git.ti.com/.../

附件中固件配置文件(wlconf -i /lib/firmware/ti-connectivity/wl18xx-conf.bin -g >./wlconf.txt)的文本转储(作为 wlconf.txt)。 它是使用 TI 提供的 configure_devices.sh 脚本进行配置的。 该器件安装了2根天线。

我们使用 WPA 请求程序来设置网格、该程序是从 git.ti.com/.../的 Upstream _29_rebase 分支构建的 TI R8.8版本

在附件中找到 wpa-supplicant conf 文件,作为 wpa_supplicant_mesh.conf。 该网络是通道6上没有启用 SAE 的网状网络。

我们将一个节点配置为网状网关、其中 DHCP 服务器运行、NAT 规则连接到以太网接口、其余节点运行 DHCP 客户端、没有以太网接口。 DHCP 由 systemd-networkd 配置处理

网状网关设置为启用根模式和栅极抖动。
> iw dev st_wlan0设置 mesh_param mesh_hwmp_rootmode 4.
> iw dev st_wlan0设置 mesh_param mesh_gate_announcements 1

我们还禁用所有设备上的节电功能、并为所有数据包设置 RTS:
> iw phy `ls /sys/class/ieee80211` set RTS 0
> iw dev st_wlan0将 power_save 设置为 off

这种方法可以正常工作、直到我们启动了许多相对接近的节点... 即、足够接近10个峰值链路限值、以便一个或多个节点达到该限值。

在这种情况下、wl1835固件似乎有时会卡住、其中 stuck 被定义为 cat /sys/kernel/debug/ieee80211/phy/wlcore/tx_queue_len 在一分钟左右内连续到达数百条队列消息。

该器件似乎没有进入 ELP 模式、即/sys/kernel/debug/ieee80211/phy/wlcore/sleep_auth 始终指示0x0。

通过使用以下命令触发 wl1835恢复、可以手动恢复此情况:
> cat 0x1 >/sys/kernel/debug/ieee80211/phy/wlcore/sleep_auth

但恢复不会自动启动。

只需重新启动网关或重新启动其请求、这种情况就会变得非常可重现。

在其中一个再现中、我提高了 wlcore 驱动程序的动态调试级别、在此复制过程中、内核日志作为 wlcore_part.XT 附加。 在启动请求程序之前应用了 debug_level 更改、使用了以下设置:
> echo -n 'module wlcore +p'>/sys/kernel/debug/dynamic_debug/control
> echo -n 'module wl18xx +p'>/sys/kernel/debug/dynamic_debug/control
> echo -n 'module mac80211 +p'>/sys/kernel/debug/dynamic_debug/control
> echo -n 'module cfg80211 +p'>/sys/kernel/debug/dynamic_debug/control
> echo 0x1840 >/sys/module/wlcore/parameters/debug_level
> echo 8 >/proc/sys/kernel/printk

在其中一个再现中、我启用了无线电上方的监视器接口、并使用 tcpdump 进行了数据包捕获(仅在启动请求程序之前启动);捕获作为 wireless.ca .p.附加
> iw phy phy 添加接口 mon0类型监控器
> ifconfig mon0 up
>tcpdump -i mon0 -n -w /data/wireless.cape2e.ti.com/.../data.tar.gz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更正了拼写错误:

    通过使用以下命令触发 wl1835恢复、可以手动恢复此情况:
    > cat 0x1 >/sys/kernel/debug/ieee80211/phy/wlcore/start_recovery

    我重申、它本身不会恢复。 已建立的对等链路在 TCP/IP 级别不再可重存、TX_queue_len 上升而永不下降、已建立的对等链路和网状路径最终会超时、消失、永远不会重新建立。

    如果在恢复之前手动启动、网状网络将恢复、一旦所有设备处于网状和网状路径中相对稳定、问题就不会立即再次出现。

    您能为我们提供合适的解决方案吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我补充以下意见:

    固件统计数据似乎仍在变化、当我们处于此"插入"状态时、特定 MCS 索引上的 TX 重试似乎在快速上升(下面转储中的 bin 4)、此时传输路径似乎"断开"。 固件可能会无限重试特定的数据包???

    CAT /sys/kernel/debug/ieee80211/phy2/wlcore/wl18xx/fw_stats/tx_tx_retry_per_rate
    [0]= 0
    [1]= 0
    [2]= 0
    [3]= 1.
    [4]= 9114
    [5]= 0
    [6]= 0
    [7]= 1
    [8]= 8
    [9]= 14
    [10]= 20
    [11]= 28
    [12]= 0
    [13]= 0
    [14]= 0
    [15]=1
    [16]= 14
    [17]= 37
    [18]= 23
    [19]= 48
    [20]= 68
    [21]= 0
    [22]= 5
    [23]= 22
    [24]= 65
    [25]= 150
    [26]= 152

    由于 mac80211层和 wl1835物理层之间的队列似乎持续增加 TX_queue_len、因此 TX 似乎一直被我们所困、即数据排队、但实际上从未传输。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    您能否确认这些修补程序是否应用于内核: https://git.ti.com/cgit/wilink8-wlan/build-utilites/tree/patches/kernel_patches/4.19.38?h=r8.8

    谢谢

    Saurabh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    升级到4.19内核并包括这些补丁确实解决了我们所看到的问题。

    如果没有补丁、问题也可在4.19内核上重现。

    我假设4.9内核没有可用的反向端口吗?

    其他一些问题:

    -如果 ap_scan 设置为1、WPA 请求者在加入网状网络后将继续定期扫描。 通常、至少对于受管模式连接、ap_scan 仅在断开连接时触发扫描。 连接时的后台扫描将由 bg_scan 配置控制。 但是、对于此请求器或网格模式禁用 bg_scan 似乎不会在连接时停止周期性扫描。 这些扫描显示在 f.也就是 使用 iperf 的吞吐量八位位组中、当对讲机用于扫描时、吞吐量会定期下降到0位/秒或更长时间。 这些扫描的用途是什么?控制它们的周期和/或禁用它们的正确配置是什么?

    -除库计算器工具之外,是否有 Linux 版本的无线连接工具(即 RTTT 工具)? 文档表明存在、但下载页面仅具有 Windows 版本