Skip to content

Releases: svpcom/wfb-ng

Release 25.01-rc1

23 Dec 18:03
wfb-ng-25.01-rc1
Compare
Choose a tag to compare
Release 25.01-rc1 Pre-release
Pre-release

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

01 Oct 13:53
wfb-ng-24.08.2
Compare
Choose a tag to compare

This is a bugfix release.

Changes:

  • Fixed msgpack compatibility issues

wfb-ng-24.09.23

23 Sep 10:47
wfb-ng-24.09.23
Compare
Choose a tag to compare
wfb-ng-24.09.23 Pre-release
Pre-release

This is a pre-release for openwrt evaluation

Release 24.08.1

11 Sep 21:49
wfb-ng-24.08.1
Compare
Choose a tag to compare

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

19 Aug 18:02
wfb-ng-24.08
Compare
Choose a tag to compare

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 in scripts/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 to osd to prevent conflict with bool mirror 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:

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 ubuntu
  • arm64v8 - debian and ubuntu
  • amd64 - debian and ubuntu
  • mips64le - debian
  • s390x - debian
  • ppc64le - 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

18 Aug 08:59
wfb-ng-24.08-rc2
Compare
Choose a tag to compare
Release 24.08-rc2 Pre-release
Pre-release

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

10 Aug 16:47
wfb-ng-24.08-rc1
Compare
Choose a tag to compare
Release 24.08-rc1 Pre-release
Pre-release

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 in scripts/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 to osd to prevent conflict with bool mirror 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:

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 ubuntu
  • arm64v8 - debian and ubuntu
  • amd64 - debian and ubuntu
  • mips64le - debian
  • s390x - debian
  • ppc64le - 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

19 Dec 15:04
wfb-ng-23.08.1
Compare
Choose a tag to compare

Fix option name collision in config file. Now for mirroring mavlink stream to OSD use osd option name instead of mirror

Release 23.08

14 Aug 16:44
wfb-ng-23.08
Compare
Choose a tag to compare

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:

  1. common.link_id was moved to profile section and renamed to link_domain.
  2. In previous releases (23.01 and earlier) there were a bug with tunnel streams numbers: drone->gs (down) 0xa0 and gs->drone (up) 0x20 - i.e. they were swapped. Now it is fixed according to standard document. Now tunnels streams are drone->gs (down) 0x20 and gs->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:

    1. Added option for socket buffer size for incoming messages on the tx side.
    2. 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 in wfb_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:

    1. Added support for multiple profiles and profile inheritance (no need to have multiple copies of wifibroadcast.cfg).
    2. 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.
    3. 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
    4. Added support for raw udp data streams. They don't use any frame aggregation or mavlink injection.
    5. TX antenna selection is now link_domain wide - for example one-way udp_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:

    1. common.wifi_channel can now be not only int, but also dict. In this case, you can specify different frequency channels for different cards. For example: {'wlan0': 161, 'wlan1': 165}
    2. Tunnel keepalive package is now transmitted through all cards, not just through the active
    3. 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 transmission

    In 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

17 Jan 09:30
wfb-ng-23.01
Compare
Choose a tag to compare

This release include major protocol changes and incompatible with previous releases.

Changes:

  1. 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)
  2. Small tunneled IP packets now aggregated the same way as mavlink packets. This raise performance for interactive TCP sessions via tunnel.
  3. WFB-ng-OSD now supports RTSP video sources.

Raspberry PI 3B ready to use image:

Changes:

  1. RTSP server now enabled by default. So you can see video simultaneously on RPI (via HDMI) and on laptop via QGC
  2. 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.