概述
wfb_tx_cmd 是 WFB-ng 的命令行控制工具,用于在运行时动态调整正在运行的 wfb_tx 进程的 FEC 编码参数和无线调制参数。无需重启 wfb_tx 即可实时改变链路配置,方便根据信道条件优化传输性能。
该工具通过 UDP 数据报向本地 wfb_tx 进程发送控制命令并等待响应。通信使用本地回环地址(127.0.0.1),所有操作均在本地完成。
前提条件
wfb_tx 必须启动时指定了 -C control_port 参数以启用控制端口:
1
| wfb_tx -K /etc/drone.key -u 5602 -C 9000 wlan0
|
上述示例中控制端口为 9000,后续所有 wfb_tx_cmd 命令都需要指定此端口号。
使用方式
1
| wfb_tx_cmd <port> {set_fec | set_radio | get_fec | get_radio} [参数...]
|
其中 <port> 是 wfb_tx 启动时通过 -C 指定的控制端口号。
子命令详解
1. set_fec - 设置 FEC 编码参数
动态调整 Reed-Solomon 前向纠错的 k/n 值,改变链路的容错能力和带宽利用率。
1
| wfb_tx_cmd <port> set_fec [-k RS_K] [-n RS_N]
|
| 参数 |
说明 |
默认值 |
-k RS_K |
FEC 原始数据分片数量。每 K 个原始包编码为 N 个包。增大 k 可提高有效吞吐量但降低容错率。必须 <= n。 |
8 |
-n RS_N |
FEC 总分片数量(含冗余)。可丢失的包数 = n - k。增大 n 可提高容错能力但增加带宽消耗。必须 < 256。 |
12 |
示例:
1 2 3 4 5 6 7 8
| wfb_tx_cmd 9000 set_fec -k 10 -n 14
wfb_tx_cmd 9000 set_fec -k 6 -n 12
wfb_tx_cmd 9000 set_fec
|
2. set_radio - 设置无线调制参数
动态调整 IEEE 802.11 帧的 radiotap header 中的调制和编码参数,改变无线传输速率和可靠性。
1 2
| wfb_tx_cmd <port> set_radio [-B bandwidth] [-G guard_interval] [-S stbc] \ [-L ldpc] [-M mcs_index] [-N VHT_NSS] [-V]
|
| 参数 |
说明 |
默认值 |
-B bandwidth |
信道带宽(MHz)。可选:20、40、80、160。设置为 >= 80 时自动启用 VHT 模式。 |
20 |
-G guard_interval |
保护间隔。s/S = 短 GI,其他值 = 长 GI。短 GI 可提高约 10% 吞吐量。 |
long |
-S stbc |
空时块码数量(0-3)。STBC 提高传输可靠性,适合移动场景。 |
0 |
-L ldpc |
LDPC 编码。1 = 启用,0 = 禁用。LDPC 比 BCC 有更好的纠错性能。 |
0 |
-M mcs_index |
MCS 索引值(调制和编码方案)。HT: 0-76, VHT: 0-9。越高越快但需要更好的信号质量。 |
1 |
-N VHT_NSS |
VHT 空间流数量(1-4)。多流可提高吞吐量,需 MIMO 硬件支持。 |
1 |
-V |
强制启用 VHT(802.11ac)模式标志。即使带宽 < 80 MHz 也使用 VHT header。 |
关闭 |
示例:
1 2 3 4 5 6 7 8
| wfb_tx_cmd 9000 set_radio -B 40 -G s -M 5
wfb_tx_cmd 9000 set_radio -B 80 -M 7 -N 2
wfb_tx_cmd 9000 set_radio
|
3. get_fec - 查询当前 FEC 参数
获取 wfb_tx 当前正在使用的 FEC k/n 值。
1
| wfb_tx_cmd <port> get_fec
|
输出格式:
示例:
1 2 3 4
| wfb_tx_cmd 9000 get_fec
|
4. get_radio - 查询当前无线调制参数
获取 wfb_tx 当前正在使用的无线调制配置。
1
| wfb_tx_cmd <port> get_radio
|
输出格式:
1 2 3 4 5 6 7
| stbc=0 ldpc=0 short_gi=0 bandwidth=20 mcs_index=1 vht_mode=0 vht_nss=1
|
示例:
1 2 3 4 5 6 7 8 9
| wfb_tx_cmd 9000 get_radio
|
通信协议
请求/响应机制
wfb_tx_cmd 创建 UDP socket,连接到 127.0.0.1:<port>
- 发送包含随机
req_id 和命令 ID 的请求包
- 设置 3 秒超时闹钟(SIGALRM)
- 等待响应包,验证
req_id 匹配
- 检查返回码
rc:0 = 成功,非零 = 错误(显示 strerror 信息)
命令 ID
| 命令 |
ID |
| CMD_SET_FEC |
1 |
| CMD_SET_RADIO |
2 |
| CMD_GET_FEC |
3 |
| CMD_GET_RADIO |
4 |
典型使用场景
1. 链路质量优化流程
1 2 3 4 5 6 7 8
| wfb_tx_cmd 9000 get_fec
wfb_tx_cmd 9000 set_fec -k 12 -n 14
wfb_tx_cmd 9000 set_fec -k 5 -n 12
|
2. 动态调整传输速率
1 2 3 4 5
| wfb_tx_cmd 9000 set_radio -B 80 -G s -M 7
wfb_tx_cmd 9000 set_radio -B 20 -M 1
|
3. 自动化脚本中的链路监控和调整
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #!/bin/bash PORT=9000
RSSI=$(wfb-cli gs | grep rssi | awk '{print $2}')
if [ "$RSSI" -gt "-60" ]; then wfb_tx_cmd $PORT set_fec -k 12 -n 14 elif [ "$RSSI" -gt "-75" ]; then wfb_tx_cmd $PORT set_fec -k 8 -n 12 else wfb_tx_cmd $PORT set_fec -k 4 -n 12 fi
|
超时处理
如果 wfb_tx 在 3 秒内没有响应,命令会输出 “Command timed out!” 并退出。常见原因:
wfb_tx 未启动或未指定 -C 参数
- 端口号不正确
wfb_tx 进程卡死或负载过高
依赖库