FreeBSD The Power to Serve

Wifibox: Use Linux to drive your wireless card on FreeBSD

Contact: PÁLI Gábor János <pali.gabor@gmail.com>

Wifibox is an experimental project for exploring the ways of deploying a virtualized Linux guest to drive wireless networking cards on the FreeBSD host system. There have been guides on the Internet to suggest the use of such techniques to improve the wireless networking experience, of which Wifibox aims to implement as a single easy-to-use software package.

  • bhyve(8) is utilized to run the embedded Linux system. This helps to achieve low resource footprint. It requires an x64 CPU with I/O MMU (AMD-Vi, Intel VT-d), ~150 MB physical memory, and some disk space available for the guest virtual disk image, which can be even ~30 MB only in certain cases. It works with FreeBSD 12 and later, some cards may require a recent 13-STABLE though.

  • The guest is constructed using Alpine Linux, a security-oriented, lightweight distribution based on musl libc and BusyBox.

  • Configuration files are shared with the host system. The guest uses wpa_supplicant(8) so it is possible to import the host’s wpa_supplicant.conf(8) file without any changes.

  • When configured, wpa_supplicant(8) control sockets could be exposed by the guest, which enables use of related utilities directly from the host, such as wpa_cli(8) or wpa_gui(8) from the net/wpa_supplicant_gui port/package.

  • Everything is shipped in a single package that can be easily installed and removed. This comes with an rc(8) system service that automatically launches the guest on boot and stops it on shutdown.

  • A workaround is supplied for laptops to support suspend/resume.

Wifibox has been mainly tested with Intel chipsets so far, and it has shown great performance and stability. Therefore it might serve as an interim solution until the Intel Wireless support becomes mature enough. It was confirmed that Wifibox works with Atheros chipsets too, and feedback is more than welcome about others. Support for Broadcom chipsets is not yet complete, that is currently a work in progress.


Last modified on: June 10, 2022 by Daniel Ebdrup Jensen