RFC: Perform active scanning on secondary interface (wpa_supplicant)
Isaacs, Jeff (EXT - US/Murray Hill)
jeff.isaacs.ext at nokia.com
Tue Mar 16 15:00:50 GMT 2021
WiFi clients using wpa_supplicant maintain a table of available BSSs for each interface managed. Entries in this table are populated by performing active scanning on each interface. Entries not seen for a certain number of scans or a certain amount of time expire and are removed from the table. When the RSSI of an active connection drops too low and the quality of the connection is very poor, the interface performs a scan, which further degrades the connection quality.
In environments with high density networks, mobile clients can get caught in this cycle of letting the connection quality get very bad, then scanning, then reconnecting to a better AP. In the wpa_cli, there is the roam command, which allows clients to move to another AP in the same SSID. The roam command requires the BSSID to be in the BSS table of the interface performing the command. This means that the interface still needs to perform disruptive scanning to roam to other APs.
In applications where high throughput and low latency are required, roaming between access points without disruption is not possible. To achieve this, the interface would need to be constantly scanning for a better AP, which decreases throughput and increase latency. If a client has multiple WiFi interfaces, one interface could be designated as the secondary scanning interface and be used to perform periodic scanning in small intervals (every 5 seconds). The results of scans on the secondary interface could be made available to the primary interface. This would allow wpa_cli roam to be used to its full potential and open the door to seamless roaming in enterprise and industrial environments. The mechanism that decides when to execute handoffs is application based and would be up to the user to implement using the CLI.
I have attached a patch that introduces a global config parameter "is_secondary_scan_iface" that can be set for each interface. When an interface performs a scan, if the is_secondary_scan_iface is set to 1, the results from the scan are used to update the BSS tables of all other interfaces whose is_secondary_scan_iface parameter is set to 0.
To test this feature, you'll need two WiFi adapters. Add is_secondary_scan_iface=1 to the config file of the secondary interface. Startup wpa_supplicant using the two interfaces. Flush the BSS table of the primary interface, then verify that it is empty. Next, perform a scan on the secondary interface. You'll see that the results of this scan are populated in the BSS table of the primary interface.
An obvious limitation of this feature as it is implemented right now would be lack of capabilities matching. For instance, if the secondary scan interface can see 5GHz but the primary interface cannot, those results should not be made available to the primary interface.
I am interested in your comments, concerns, and questions.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 7589 bytes
More information about the Hostap