Overview

libwifi provides two distinct libraries -

  • libwifiutils.so
  • libwifi-7.so

libwifiutils.so provides Wi-Fi utility functions and common definitions, which are not dependent on any Wi-Fi hardware or driver. Since the library is not agnostic to Wi-Fi implementation, it can be used in any platform, even the ones having no Wi-Fi.

libwifi-7.so provides Wi-Fi HAL (Hardware Abstraction Layer) APIs for different Wi-Fi chipsets and drivers. Depending on the built-time config options that identify a Wi-Fi hardware and/or driver architecture, appropriate Wi-Fi modules are built into the library.

Architecture

libwifi module layers

Supported Wi-Fi hardware

The modules directory contains sub-directories, each containing HAL APIs' implementation for a specific Wi-Fi hardware and/or driver.

See 'Directory organization' section for the list of supported Wi-Fi modules.

API list

	"libwifi_get_apis",
	"wifi_driver_info",

	"wifi_radio_list",
	"wifi_radio_is_multiband",
	"wifi_radio_info",
	"wifi_radio_info_band",
	"wifi_get_supp_band",
	"wifi_get_oper_band",
	"wifi_radio_get_ifstatus",
	"wifi_radio_get_band_ifstatus",
	"wifi_radio_get_caps",
	"wifi_radio_get_band_caps",
	"wifi_get_supp_stds",
	"wifi_get_band_supp_stds",
	"wifi_get_oper_stds",
	"wifi_band_get_oper_stds",
	"wifi_get_country",
	"wifi_get_countrylist",
	"wifi_get_channel",
	"wifi_get_band_channel",
	"wifi_set_channel",  /* deprecated */
	"wifi_get_supp_channels",
	"wifi_get_band_supp_channels",
	"wifi_get_oper_channels",
	"wifi_get_supp_opclass",
	"wifi_get_band_supp_opclass",
	"wifi_get_curr_opclass",
	"wifi_get_band_curr_opclass",
	"wifi_get_bandwidth",
	"wifi_get_supp_bandwidths",
	"wifi_get_band_supp_bandwidths",
	"wifi_get_maxrate",
	"wifi_get_band_maxrate",
	"wifi_get_basic_rates",
	"wifi_get_oper_rates",
	"wifi_get_supp_rates",
	"wifi_radio_get_stats",
	"wifi_radio_get_band_stats",
	"wifi_scan",
	"wifi_scan_ex",
	"wifi_scan_band_ex",
	"wifi_get_scan_results",
	"wifi_get_band_scan_results",
	"wifi_get_bss_scan_result",
	"wifi_get_noise",
	"wifi_acs",
	"wifi_radio_get_param",
	"wifi_radio_set_param",
	"wifi_radio_get_hwaddr",
	"wifi_add_iface",
	"wifi_del_iface",
	"wifi_list_iface",
	"wifi_channels_info",
	"wifi_band_channels_info",
	"wifi_start_cac",
	"wifi_stop_cac",
	"wifi_get_opclass_preferences",
	"wifi_get_band_opclass_preferences",
	"wifi_simulate_radar",

	"wifi_start_wps",
	"wifi_stop_wps",
	"wifi_get_wps_status",
	"wifi_get_wps_pin",
	"wifi_set_wps_pin",
	"wifi_get_wps_device_info",
	"wifi_get_caps",
	"wifi_get_mode",
	"wifi_get_security",
	"wifi_interface_get_channel",
	"wifi_add_vendor_ie",
	"wifi_del_vendor_ie",
	"wifi_get_vendor_ies",
	"wifi_get_param",
	"wifi_set_param",
	"wifi_vendor_cmd",
	"wifi_subscribe_frame",
	"wifi_unsubscribe_frame",
	"wifi_send_action_frame",
	"wifi_dpp_listen",
	"wifi_dpp_stop_listen",
	"wifi_set_4addr",
	"wifi_get_4addr",
	"wifi_get_4addr_parent",
	"wifi_set_vlan",
	"wifi_link_measure",
	"wifi_get_mlo_links",
	"wifi_get_ctrl_interface",
	"wifi_get_ctrl_interface_band",

	"wifi_ap_info",
	"wifi_ap_info_band",
	"wifi_get_bssid",
	"wifi_get_ssid",
	"wifi_ap_get_stats",
	"wifi_get_beacon_ies",
	"wifi_get_beacon_ies_band",
	"wifi_get_assoclist",
	"wifi_get_assoclist_band",
	"wifi_get_sta_info",
	"wifi_get_sta_info_band",
	"wifi_get_sta_stats",
	"wifi_disconnect_sta",
	"wifi_restrict_sta",
	"wifi_block_sta",
	"wifi_get_blocked_stas",
	"wifi_monitor_sta",
	"wifi_get_monitor_sta",
	"wifi_get_monitor_stas",
	"wifi_probe_sta",
	"wifi_add_neighbor",
	"wifi_del_neighbor",
	"wifi_get_neighbor_list",
	"wifi_req_beacon_report",
	"wifi_get_beacon_report",
	"wifi_req_bss_transition",
	"wifi_req_btm",
	"wifi_get_11rkeys",
	"wifi_set_11rkeys",
	"wifi_chan_switch",
	"wifi_mbo_disallow_assoc",
	"wifi_ap_set_state",
	"wifi_ap_set_qos_map",
	"wifi_ap_send_qos_map_conf",
	"wifi_get_mlsta_info",

	"wifi_sta_info",
	"wifi_mlsta_interface_info",
	"wifi_sta_get_stats",
	"wifi_sta_get_ap_info",
	"wifi_sta_disconnect_ap",
	"wifi_sta_get_stats_ex",

	"wifi_register_event",
	"wifi_recv_event",
	"libwifi_get_version",

Directory organization

  • wifiutils.h - library header file for libwifiutils.so.

  • wifi.h - library header file for libwifi-7.so.

  • wifiops.h - defines wifi_radio and wifi_\interface operations.

  • wifidefs.h - header file defining Wi-Fi structs.

  • wifiops.c - libwifi APIs implementation file.

  • modules - directory containing module implementations for different Wi-Fi chipsets and drivers.

  • modules/default/* - has "default" wifi_driver implemenatation, which is based on nl80211, hostapd_cli and wpa_supplicant_cli.

  • modules/nl80211/* - contains implemenatation for wifi_driver suppoorting NL80211_CMD interfaces.

  • modules/hostapd-cli/* - contains the APIs' implemenatation that use the hostapd's ctrl-interface.

  • modules/wpa_supplicant-cli/* - has API implemenatations that use the wpa_supplicant's ctrl-interface.

  • modules/broadcom/* - contains wifi_driver implemenatation for Broadcom Wi-Fi chipsets.

  • modules/qualcomm/* - contains wifi_driver implemenatation for Qualcomm Wi-Fi chipsets.

  • modules/mediatek/* - contains wifi_driver implemenatation for Mediatek Wi-Fi chipsets.

  • modules/intel/* - contains wifi_driver implemenatation for Intel/Maxlinear Wi-Fi chipsets.

  • modules/wext/* - contains wifi_driver implemenatation supporting Wireless Extension (WE). Now deprecated. DO NOT USE.

  • modules/test/* - contains wifi_driver for unit-testing purpose.

Build instructions

  • To build and install only libwifiutils.so -
$ make
$ [sudo] make install
  • To build libwifi-7.so for CFG80211 or MAC80211 based Wi-Fi drivers -
$ CFLAGS="-DHAS_WIFI=1" make
$ [sudo] CFLAGS="-DHAS_WIFI=1" make install
  • To build libwifi-7.so for unit-testing -
$ WIFI_TYPE=TEST CFLAGS="-DHAS_WIFI=1" make
$ [sudo] WIFI_TYPE=TEST CFLAGS="-DHAS_WIFI=1" make install
  • To clean the library, simply run -
$ make clean

Dependencies

The build and runtime dependencies are -

Additionally, based on the specific Wi-Fi module type, extra dependencies may be needed.

Versioning

The library libwifiutils.so is not versioned.

The library libwifi-7.so is versioned in semantic notation. The version string "libwifi_version" is defined in 'wifi.h'.

The file 'VERSION.txt' holds the library's major number, which must be incremented for every non-backward compatible change introduced in the library.

The library soname is "libwifi-7.so.$(maj)", where $(maj) is the major number from VERSION.txt.

Tests

Debugging

Description
No description provided
Readme LGPL-2.1 8 MiB
Languages
C 99.4%
CMake 0.4%
Shell 0.2%