WPS stands for Wi-Fi Protected Setup. It is a wireless network security standard that tries to make connections between a router and wireless devices faster and easier. WPS works only for wireless networks that use a password that is encrypted with the WPA Personal or WPA2 Personal security protocols. WPS doesn't work on wireless networks that are using the deprecated WEP security, which can be cracked easily by any hacker with a basic set of tools and skills. Wi-Fi Users don't want to know the broadcasting ssid and password.
Push Button Configuration (PBC): In this method, a WPS physical button on the BPI and WPS option on the wireless client are pressed within a specific timeframe, initiating the connection without the need for entering a password.


When a WPS PBC request is initiated in your system:
In your specific setup with RDK-WiFi-HAL and hostapd 2.10:
wifi_pushButtonPBC()NL80211_CMD_START_WPS with attributes:NL80211_ATTR_IFINDEX: Specifies the wireless interfaceNL80211_ATTR_WPS_MODE: Set to NL80211_WPS_PBC for push button methodroot@Docsis-Gateway:~# dmcli eRT getv Device.WiFi.AccessPoint.1.WPS.Enable CR component name is: eRT.com.cisco.spvtg.ccsp.CR subsystem_prefix eRT. getv from/to component(eRT.com.cisco.spvtg.ccsp.wifi): Device.WiFi.AccessPoint.1.WPS.Enable Execution succeed. Parameter 1 name: Device.WiFi.AccessPoint.1.WPS.Enable type: bool, value: true root@Docsis-Gateway:~# dmcli eRT getv Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton CR component name is: eRT.com.cisco.spvtg.ccsp.CR subsystem_prefix eRT. getv from/to component(eRT.com.cisco.spvtg.ccsp.wifi): Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton Execution succeed. Parameter 1 name: Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton type: int, value: 0 root@Docsis-Gateway:~# dmcli eRT setv Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton int 1 CR component name is: eRT.com.cisco.spvtg.ccsp.CR subsystem_prefix eRT. setv from/to component(eRT.com.cisco.spvtg.ccsp.wifi): Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton Execution succeed. root@Docsis-Gateway:~# dmcli eRT setv Device.WiFi.ApplyAccessPointSettings bool true CR component name is: eRT.com.cisco.spvtg.ccsp.CR subsystem_prefix eRT. setv from/to component(eRT.com.cisco.spvtg.ccsp.wifi): Device.WiFi.ApplyAccessPointSettings Execution succeed. root@Docsis-Gateway:~# dmcli eRT getv Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton CR component name is: eRT.com.cisco.spvtg.ccsp.CR subsystem_prefix eRT. getv from/to component(eRT.com.cisco.spvtg.ccsp.wifi): Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton Execution succeed. Parameter 1 name: Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_WpsPushButton type: int, value: 0 In BPI Target Board: root@Filogic-GW:/lib/systemd/system# dmcli eRT setv Device.WiFi.AccessPoint.1.WPS.X_CISCO_COM_ActivatePushButton bool true CR component name is: eRT.com.cisco.spvtg.ccsp.CR subsystem_prefix eRT. Execution succeed. root@Filogic-GW:/lib/systemd/system# dmcli eRT setv Device.WiFi.AccessPoint.2.WPS.X_CISCO_COM_ActivatePushButton bool true CR component name is: eRT.com.cisco.spvtg.ccsp.CR subsystem_prefix eRT. Execution succeed. |
WPS Hardware Key Press in BPI
The Hardware key press is handled as a separate utility under broadband-utils repo:
https://github.com/rdkcentral/broadband-utils
In this implementation, Netlink sockets are handling the WPS Key press event (netlink-button-monitor.service) and further functionality is carried out by rbus API's which intimates OneWifi to carry out the WPS operation.
The recipe is present under:
meta-cmf-bananapi/meta-rdk-mtk-bpir4/recipes-common/rdk-wps-monitor/rdk-wps-monitor.bb
Test Results in BPI:

WPS Initiation:
1.Change the SSID of 2G and 5G from Web UI, to test WPS feature functionality.
2. Press the WPS PBC from BananaPi hardware. Try connecting 2G and 5G clients with new SSID without entering the password.
2G Client Connected (via Mobile):
5G Client connected (via Laptop):
3. Check the internet connectivity for both the clients.
NOTE:
6GHz is WPA3 personal-only. Does not support WPS!