本代码来源于Reddit的回答:DFS雷达导致5GHz频段断联且不会恢复。感谢 u/_daphreak_
和 u/try_harder_later
的初步贡献。
代码经过交互性优化,使用了 DeepSeek-V3 和 DeepSeek-R1-Lite,并记录了修改历史。DeepSeek-V3 和 DeepSeek-R1-Lite 的表现令人满意,极大地提升了开发效率和脚本功能。
dfscheck.sh
用于在OpenWrt路由器上监控无线接口状态,特别是DFS通道的雷达检测事件。当雷达信号禁用无线接口时,脚本会自动切换至备用通道,并尝试在指定时间后恢复主通道。
- 通道切换:在主通道因DFS检测被禁用时自动切换至备用通道,保持网络连接。
- 自动恢复:切换到备用通道后,脚本会在默认30分钟后尝试恢复主通道。
- 监控与日志:实时监控无线状态并记录日志,便于调试。
- 5G无线设备与接口自动识别:自动识别5G无线设备及其接口,无需手动配置。
- 可配置的重试策略:支持
fixed
(固定)、linear
(线性)和exp
(指数)退避策略,用于在连接失败后重试。默认策略为fixed
。
- 上传脚本:将
dfscheck.sh
上传至/root/
目录。 - 赋予权限:运行
chmod +x /root/dfscheck.sh
。 - 运行脚本:以root权限运行并指定参数。
假设配置如下:
- 主通道:108
- 备用通道:149
- 退避策略:fixed(默认)
运行命令:
/root/dfscheck.sh 108 149 fixed
channel
:主DFS通道(如108)。fallback_channel
:备用通道(如149)。backoff_type
:(可选)退避策略类型(fixed
、linear
或exp
),默认为fixed
。
- 权限:需以root权限运行。
- 网络中断:切换通道可能导致设备短暂断开连接。
- 日志:日志记录可通过
logread
查看。注意,"连接正常" 的消息会直接输出到控制台,不会记录到日志中,以避免日志拥塞。 - 法律合规:请确保通道配置符合当地无线频段管理法规。因违规导致的后果由用户自行承担。
为了确保脚本在路由器启动时自动运行,可以通过创建服务的方式来实现。
最初尝试了使用Cron来设置脚本开机自启,但由于未知原因,Cron无法正确解析 @reboot
指令,导致脚本无法自动运行。使用服务的方式可以避免Cron的解析问题,提供更可靠的解决方案。
-
使用仓库中的服务脚本
仓库中已包含服务脚本
dfscheck
。将该文件复制到/etc/init.d/
目录:
cp ./dfscheck /etc/init.d/dfscheck
-
赋予脚本可执行权限
运行以下命令,确保服务脚本可执行:
chmod +x /etc/init.d/dfscheck
-
启用服务
运行以下命令,确保服务在开机时自动启动:
/etc/init.d/dfscheck enable
-
启动服务(无需重启设备)
如果需要立即启动服务,可以运行以下命令:
/etc/init.d/dfscheck start
-
检查服务状态
运行以下命令,检查服务是否正常运行:
/etc/init.d/dfscheck status
-
重启设备(可选)
如果需要通过重启验证服务是否生效,可以运行以下命令:
reboot
通过上述配置,脚本将在路由器重启后自动运行,并记录日志以供管理。
服务文件现在包含主通道( 108
)、备用通道( 149
)和退避策略( fixed
)的默认值。可以通过修改服务文件或手动启动脚本时传递参数来自定义这些值。
- 默认退避策略:默认退避策略改为
fixed
,使用固定的15秒重试间隔。 - 控制台输出 "连接正常":当无线接口正常工作时,"连接正常" 的消息会直接输出到控制台,而不是记录到日志中。
- DeepSeek工具:脚本经过 DeepSeek-V3 和 DeepSeek-R1-Lite 的交互式优化,显著提升了开发效率和脚本功能。
- 简化CLI:脚本现在只需三个参数(
channel
、fallback_channel
和backoff_type
),并自动识别5G无线设备及其接口。 - 默认值:服务文件包含主通道、备用通道和退避策略的默认值。
- 文档改进:README 现在反映了最新更改,包括新的CLI接口、服务文件更新以及 DeepSeek-V3 和 DeepSeek-R1-Lite 的使用。
此次更新确保文档与最新的脚本和服务文件更改保持一致,使用户更容易理解和使用该工具。