Releases: svpcom/wfb-ng
Release 25.01-rc1
Release notes:
- Added distributed mode. Now you can use any amount of hosts with any amount of wifi adapters as single GS or Drone instance.
- Added support for OpenWrt. Now you can use OpenWrt 24.10-based router as RX-only (most of routers) or RX/TX (only ath9k SoC based) node in distributed mode.
- Added JSON API for link state telemetry integration with side projects.
- Radxa Zero 3W/3E and are Orange PI5 supported now in wfb-ng-osd (via libdrm hw overlay on top of gstreamer window)
Release 24.08.2
This is a bugfix release.
Changes:
- Fixed msgpack compatibility issues
wfb-ng-24.09.23
This is a pre-release for openwrt evaluation
Release 24.08.1
This is a bugfix release on top of 24.08
Changes:
- Fixed incorrect array indexing inside of wfb_tx in mirror mode
Release 24.08
Changes:
- [core] Using raw sockets for injection instead of pcap
- [core] Added TX injection measurements
- [core] Added SNR, frequency and MCS reporting for RX.
- [core] Added initial support for using wfb_rx as shared library (used by external projects like android client with userspace wifi driver)
- [core] Added support for VHT modes
- [core] Added support for 8812eu card. Comparing to 8812au it supports 10MHz channels and thermal state reporting
- [core] Added experimental support for large packets. Now max MTU is 3993 instead of 1445, but for mavlink and tunnel it use old value by default for compatibility with old clients.
- [cli] Large UI refactoring:
- Show MCS, bandwidth and used FEC scheme
- Show Radio and UDP flow rates
- Show TX injection measurements
- Support live terminal resize
- [core] Added optional logging for radio channel stats and mavlink messages. Now you have full telemetry and link state log for offline debug
- [core] Added optional delay between sending each FEC packet. This is needed if you don't want to loose all FEC packets due to radio interference
- [core] Added experimental traffic shaper support. You can use standard linux
tc
infrastructure for wfb-ng traffic management. For example add different priority to different streams. See example inscripts/tc.sh
- [core] Added ability to add optional attributes to session packet without breaking protocol format. This is reserved for future use.
- [core] Added dynamic FEC and MCS change in wfb_tx. You can use wfb_tx_cmd or write your own client to switch FEC and/or MCS settings without stream interruption.
- [core] Changed TX card selection algorithm. Now only cards with near-maximum RX packet counter will be used in RSSI filtering. This will allow to ignore cards which reports high RSSI, but loose a lot of packets.
- [core] Encode frequency field in wrxfwd_t in the network byte order
- [core] Use only ip address of forwarder in antenna_id inside of aggregator.
Bug fixes:
- Fixed compatibility with python-3.12
- Fixed option name collision in config file.
mirror
url (used for OSD) renamed toosd
to prevent conflict with boolmirror
option ( mirror packets via all cards for redundancy)
Compatibility:
Radio protocol should be compatible with 23.08 if now tags added to session packets (default behavior for 24.08 but can change in future releases) and using MTU <= 1445
Supported WiFi harware:
- RTL8812au. (stable) 802.11ac capable. Requires external patched driver! System was tested with ALPHA AWUS036ACH on both sides in 5GHz mode.
- RTL8812eu. (stable) 802.11ac capable. Requires external patched driver! System was tested with LB-LINK's BL-M8812EU2 module
Supported platforms:
WFB-ng should work on any linux based (little or big-endian) machines with usb port.
All builds are automatically tested on debian-11,12 and ubuntu-20.04, 22.04, 24.04 on following hardware platforms:
arm32v7
- debian and ubuntuarm64v8
- debian and ubuntuamd64
- debian and ubuntumips64le
- debians390x
- debianppc64le
- debian
See .github/workflows
for reference
Large packets note:
#define WIFI_MTU 4045
// Max injected packet size including all wfb-headers.
// Please note, that resulting data packet size depends from input UDP packet size
// and FEC packet size is max of all UDP packet sizes in this block.
// I.e. you can have WIFI_MTU=4045 but if you will not feed large UDP packets
// then resulting radio packets will be small.
// I've set it to 4045 to allow wfb_rx compatibility with custom wfb_tx builds that can
// have maximum allowed mtu value, but I don't recommend to feed UDP packets
// larger that 1448 bytes in production.
// You can increase it if your card allow larger packets,
// but this can lead to interoperability issues and/or kernel crashes.
// Use values > 1500 with caution!
// If you use non-default MTU then you need to configure proper MTU on WiFi cards manually
// (but 8812au and 8812eu drivers set max mtu by default)
// Also you may update radio_mtu in master.cfg - set it to not more than MAX_PAYLOAD_SIZE
// or see in output of wfb_tx (Radio MTU)
// Experemental max allowed WIFI_MTU for: rtl8812au -- 4049, rtl8812eu -- 4045
Raspberry PI 3B ready to use image:
Changes:
- Added support of 8812eu cards
- Added support of cameras used libcamera protocol
Image notes:
- This image was tested on RPI3b + Alfa AWUS036ACH + PI Camera. Use native ("thick") USB3 cable from this card. If you have issues with different HW setup then try to test this setup first before issuing bug report.
- OSD will not work on RPI4 due to dropped OpenVG support.
- If you use high-power cards like "taobao card" then you must use external high-current power supply and low-esr capacitor on the card. Don't power them from USB!
Gallery
Telegram group: (wfb-ng support) https://t.me/wfb_ng
Please note, that it is only one official group.
Release 24.08-rc2
Changes vs 24.08-rc1
- Encode frequency field in wrxfwd_t in the network byte order
- Use only ip address of forwarder in antenna_id inside of aggregator.
- Docker builder cleanup
- master.cfg cleanups
- Build from tgz now works
Release 24.08-rc1
This is the first release candidate for 24.08
Changes:
- [core] Using raw sockets for injection instead of pcap
- [core] Added TX injection measurements
- [core] Added SNR, frequency and MCS reporting for RX.
- [core] Added initial support for using wfb_rx as shared library (used by external projects like android client with userspace wifi driver)
- [core] Added support for VHT modes
- [core] Added support for 8812eu card. Comparing to 8812au it supports 10MHz channels and thermal state reporting
- [core] Added experimental support for large packets. Now max MTU is 3993 instead of 1445, but for mavlink and tunnel it use old value by default for compatibility with old clients.
- [cli] Large UI refactoring:
- Show MCS, bandwidth and used FEC scheme
- Show Radio and UDP flow rates
- Show TX injection measurements
- Support live terminal resize
- [core] Added optional logging for radio channel stats and mavlink messages. Now you have full telemetry and link state log for offline debug
- [core] Added optional delay between sending each FEC packet. This is needed if you don't want to loose all FEC packets due to radio interference
- [core] Added experimental traffic shaper support. You can use standard linux
tc
infrastructure for wfb-ng traffic management. For example add different priority to different streams. See example inscripts/tc.sh
- [core] Added ability to add optional attributes to session packet without breaking protocol format. This is reserved for future use.
- [core] Added dynamic FEC and MCS change in wfb_tx. You can use wfb_tx_cmd or write your own client to switch FEC and/or MCS settings without stream interruption.
- [core] Changed TX card selection algorithm. Now only cards with near-maximum RX packet counter will be used in RSSI filtering. This will allow to ignore cards which reports high RSSI, but loose a lot of packets.
Bug fixes:
- Fixed compatibility with python-3.12
- Fixed option name collision in config file.
mirror
url (used for OSD) renamed toosd
to prevent conflict with boolmirror
option ( mirror packets via all cards for redundancy)
Compatibility:
Radio protocol should be compatible with 23.08 if now tags added to session packets (default behavior for 24.08 but can change in future releases) and using MTU <= 1445
Supported WiFi harware:
- RTL8812au. (stable) 802.11ac capable. Requires external patched driver! System was tested with ALPHA AWUS036ACH on both sides in 5GHz mode.
- RTL8812eu. (stable) 802.11ac capable. Requires external patched driver! System was tested with LB-LINK's BL-M8812EU2 module
Supported platforms:
WFB-ng should work on any linux based (little or big-endian) machines with usb port.
All builds are automatically tested on debian-11,12 and ubuntu-20.04, 22.04, 24.04 on following hardware platforms:
arm32v7
- debian and ubuntuarm64v8
- debian and ubuntuamd64
- debian and ubuntumips64le
- debians390x
- debianppc64le
- debian
See .github/workflows
for reference
Large packets note:
#define WIFI_MTU 4045
// Max injected packet size including all wfb-headers.
// Please note, that resulting data packet size depends from input UDP packet size
// and FEC packet size is max of all UDP packet sizes in this block.
// I.e. you can have WIFI_MTU=4045 but if you will not feed large UDP packets
// then resulting radio packets will be small.
// I've set it to 4045 to allow wfb_rx compatibility with custom wfb_tx builds that can
// have maximum allowed mtu value, but I don't recommend to feed UDP packets
// larger that 1448 bytes in production.
// You can increase it if your card allow larger packets,
// but this can lead to interoperability issues and/or kernel crashes.
// Use values > 1500 with caution!
// If you use non-default MTU then you need to configure proper MTU on WiFi cards manually
// (but 8812au and 8812eu drivers set max mtu by default)
// Also you may update radio_mtu in master.cfg - set it to not more than MAX_PAYLOAD_SIZE
// or see in output of wfb_tx (Radio MTU)
// Experemental max allowed WIFI_MTU for: rtl8812au -- 4049, rtl8812eu -- 4045
Release 23.08.1
Fix option name collision in config file. Now for mirroring mavlink stream to OSD use osd
option name instead of mirror
Release 23.08
Compatibility:
This release maintain both radio and config compatibility with previous version. So you can use previous version of wfb-ng on the other link side and import most of your customizations from /etc/wifibroadcast.cfg
But there are two incompatibilities in the config:
common.link_id
was moved to profile section and renamed tolink_domain
.- In previous releases (23.01 and earlier) there were a bug with tunnel streams numbers:
drone->gs (down) 0xa0
andgs->drone (up) 0x20
- i.e. they were swapped. Now it is fixed according to standard document. Now tunnels streams aredrone->gs (down) 0x20
andgs->drone(up) 0xa0
. If you need to maintain compatibility with old versions you can swap these number on any side of link.
Changes:
-
Mavlink parser speedup. Instead of using standard full-featured (and slow mavlink parser) now use fast packet splitter.
-
Added callbacks for vehicle arm/disarm. You can use it for camera recording activation.
-
Added mavlink tcp proxy. Now it is possible to use backup link via LTE modem or connect onboard computer without external mavlink-router. To connect as backup link in QGC use tcp connection to port 5760 and check "high latency link" checkbox.
-
Self-injected frames are ignored now in case when TX and RX use the same radio port.
-
Added cross-build support via qemu + docker.
-
Improved udp socket buffer overflow handling:
- Added option for socket buffer size for incoming messages on the tx side.
- Check for socket buffer overflow and show warnings.
You can set socket buffer size system-wide via
net.core.rmem_default
or via-R
option inwfb_tx
. -
Warn if incoming packet >
MAX_PAYLOAD_SIZE
and will be truncated. -
Added support for RTS frames. Now you can choose between data and rts frames when transmit packages.
-
Added default route option for IP tunnel.
-
Large refactoring of WFB-ng control-plane:
- Added support for multiple profiles and profile inheritance (no need to have multiple copies of wifibroadcast.cfg).
- No hadcoded streams (video/mavlink/tunnel) anymore. You can define own profiles and any number of data streams can be added/removed to profiles without any code change.
- Multiple profiles can be active simultaneously (no need to run multiple instances of wfb-server when using the same wifi adapters for different links). For example:
systemctl enable wifbroadcast@gs1:gs2:gs3:gs4
- Added support for raw udp data streams. They don't use any frame aggregation or mavlink injection.
- TX antenna selection is now
link_domain
wide - for example one-wayudp_proxy
TX will use active antenna selected by other RX streams.
-
Added support for multiple directed antennas on both ends and different frequency channels on different cards:
common.wifi_channel
can now be not onlyint
, but alsodict
. In this case, you can specify different frequency channels for different cards. For example:{'wlan0': 161, 'wlan1': 165}
- Tunnel keepalive package is now transmitted through all cards, not just through the active
- Added mirror mode. Use it only if you use different frequency channels for multiple cards. In this mode each packet will be send via all cards (by default only active cards send packets). This allow to add redundancy for multi-frequency link
These allow you to use multiple frequency channels at the same time if you have multiple cards on each end. For example, you can use 2.4 + 5.8 GHz.
Or you can use multiple directional antennas on both sides of the link, as point (2) solves the chicken and egg problem of allowing directional antennas
(and/or different frequency channels) to agree on the direction (and/or frequency) of transmissionIn the case of different frequency channels, the solution is not quite ideal, because only RSSI is used to select the active channel, and the number of errors is ignored. Use mirror mode in this case.
Raspberry PI 3B ready to use image:
Changes:
- Large refactoring of OSD widgets. See wfb-ng-osd release notes.
Image notes:
- This image was tested on RPI3b + Alfa AWUS036ACH + PI Camera. Use native ("thick") USB3 cable from this card. If you have issues with different HW setup then try to test this setup first before issuing bug report.
- OSD will not work on RPI4 due to dropped OpenVG support.
- If you use high-power cards like "taobao card" then you must use external high-current power supply and low-esr capacitor on the card. Don't power them from USB!
Telegram group: (wfb-ng support) https://t.me/wfb_ng
Please note, that it is only one official group.
Release 23.01
This release include major protocol changes and incompatible with previous releases.
Changes:
- FEC settings now embedded into session packet. This means that RX get FEC type, K and N from TX. This allows to add dynamic FEC in future without protocol change and allows different FEC settings for uplink and downlink (this settings now in TX sections only)
- Small tunneled IP packets now aggregated the same way as mavlink packets. This raise performance for interactive TCP sessions via tunnel.
- WFB-ng-OSD now supports RTSP video sources.
Raspberry PI 3B ready to use image:
Changes:
- RTSP server now enabled by default. So you can see video simultaneously on RPI (via HDMI) and on laptop via QGC
In rtl8812au driver was added a patch that drop tx packets while medium is busy and internal hardware queue overflows. This allows to reduce latency by avoid sending stale data and increase FEC efficiency.This fix was reverted in 23.01.001 image. In case of bitrate spikes in video bitstream it can overload channel capacity and lead to key frame loss.
- This image was tested on RPI3b + Alfa AWUS036ACH + PI Camera. Use native ("thick") USB3 cable from this card. If you have issues with different HW setup then try to test this setup first before issuing bug report.
- OSD will not work on RPI4 due to dropped OpenVG support.
- If you use high-power cards like "taobao card" then you must use external high-current power supply and low-esr capacitor on the card. Don't power them from USB!
Telegram group: (wfb-ng support) https://t.me/wfb_ng
Please note, that it is only one official group.