概述

wfb_rx 是 WFB-ng(WiFi Broadcast Next Generation)的接收端二进制程序,负责从 WiFi 无线网卡捕获无线数据包、解密、FEC 前向纠错解码,并将恢复后的 UDP 数据转发给下游应用。

该程序支持三种运行模式:

  • LOCAL 模式(默认):本地接收 + FEC 聚合,直接从 WiFi 监控接口抓包并输出解密后的数据
  • FORWARDER 模式-f):仅将原始无线数据包转发到客户端,不做 FEC 解码
  • AGGREGATOR 模式-a):作为服务器接收来自多个 FORWARDER 的原始数据包并进行 FEC 聚合

使用方式

LOCAL 模式(本地接收 + 聚合)

1
2
3
wfb_rx [-K rx_key] { [-c client_addr] [-u client_port] | [-U unix_socket] } \
[-p radio_port] [-R rcv_buf] [-s snd_buf] [-l log_interval] \
[-e epoch] [-i link_id] interface1 [interface2] ...

FORWARDER 模式(仅转发原始包)

1
2
wfb_rx -f [-c client_addr] [-u client_port] [-p radio_port] \
[-R rcv_buf] [-s snd_buf] [-i link_id] interface1 [interface2] ...

AGGREGATOR 模式(远程聚合服务器)

1
2
wfb_rx -a server_port [-K rx_key] { [-c client_addr] [-u client_port] | [-U unix_socket] } \
[-R rcv_buf] [-s snd_buf] [-l log_interval] [-p radio_port] [-e epoch] [-i link_id]

参数详解

参数 简写 说明 默认值
-K rx_key 接收端密钥文件路径。用于解密从发送端收到的数据包。文件格式由 wfb_keygen 生成。 rx.key
-f FORWARDER 模式标志。启用后仅将原始无线包转发给客户端,不进行 FEC 解码和聚合。适用于分布式部署场景中的远程采集节点。 关闭
-a server_port AGGREGATOR 模式 + 服务器监听端口。启用后作为 UDP 服务器接收来自多个 FORWARDER 节点的原始数据包并进行 FEC 聚合。此模式下不需要 WiFi 接口参数。 关闭
-c client_addr 客户端地址。解密后的数据将发送到该 IP 地址的 UDP 端口(由 -u 指定)。在 AGGREGATOR/FORWARDER 模式中用于指定下游消费者地址。 127.0.0.1
-u client_port 客户端 UDP 端口号。解密后的数据将发送到该端口。 5600
-U unix_socket Unix Domain Socket 路径。使用 Unix socket 代替 UDP 向下游传递数据。与 -c/-u 互斥,二选一。 空(不使用)
-p radio_port 无线电端口号。用于构建 channel_id = (link_id << 8) + radio_port,必须与发送端一致以正确匹配数据包。 0
-R rcv_buf 接收缓冲区大小(字节)。设置 pcap/UDP socket 的接收缓冲区大小。增大此值可减少丢包,但会增加延迟。设为 0 使用系统默认值。 系统默认
-s snd_buf 发送缓冲区大小(字节)。设置输出 socket 的发送缓冲区大小。设为 0 使用系统默认值。 系统默认
-l log_interval 日志输出间隔(毫秒)。控制统计信息输出的频率。 1000
-e epoch 纪元号。用于丢弃来自旧会话的包,防止重放攻击。每次重新启动发送端时会自动递增。设为 0 表示接受任何 epoch。 0
-i link_id 链路 ID(24位)。用于构建 channel_id = (link_id << 8) + radio_port,实现多链路隔离。多个 WFB-ng 实例可以使用不同的 link_id 在同一物理网络上共存而不互相干扰。 0x000000
interface1 [interface2] ... WiFi 无线网卡接口名称列表(如 wlan0、wlan1)。在 LOCAL/FORWARDER 模式下为必需参数,指定用于捕获无线数据包的监控模式接口。AGGREGATOR 模式下不需要此参数。 -

channel_id 计算方式

1
channel_id = (link_id << 8) + radio_port

接收端和发送端的 channel_id 必须完全匹配才能正确通信。数据包中的 MAC 地址后四个字节即为 channel_id,BPF 过滤器在驱动层直接过滤不匹配的包以提高效率。

输出统计信息格式

程序运行时通过 stdout 输出制表符分隔的统计数据:

  • RX - 接收端总体统计(时间戳、总包数、总字节数、解密错误、会话包、数据包、FEC恢复、丢失、损坏等)
  • TX_ANT - 发送天线延迟统计
  • RX_ANT - 接收天线 RSSI/SNR 统计

典型使用场景

1. 地面站本地接收(最常见)

1
2
# 接收来自无人机端的数据,输出到本地 UDP 5600 端口供 GStreamer 消费
wfb_rx -K /etc/gs.key -c 127.0.0.1 -u 5600 wlan0

2. 多网卡接收(自动 TX 分集)

1
2
# 使用多个 WiFi 接口同时接收,程序会自动选择信号最好的接口对应的数据
wfb_rx -K /etc/gs.key -c 127.0.0.1 -u 5600 wlan0 wlan1 wlan2

3. 分布式部署 - FORWARDER 节点

1
2
# 在远程采集节点上运行,仅转发原始包到聚合服务器
wfb_rx -f -c 192.168.1.100 -u 5700 wlan0

4. 分布式部署 - AGGREGATOR 节点

1
2
# 在中心服务器上运行,接收多个 FORWARDER 的原始包并聚合
wfb_rx -a 5700 -K /etc/gs.key -c 127.0.0.1 -u 5600

依赖库

  • libpcap(无线数据包捕获)
  • libsodium(加密/解密)
  • librt(实时时钟)