# Soft WPS with OpenWRT

## Purpose

When I use WPS, I find it easy to set up but not safe enough! If someone is able to touch the router, he/she may connect to the network without permission.
So why not disable the WPS button? I did some research to find a way to initiate WPS with command. It means If I agree someone or some device to connect to my network, I should just do some types on my computer…

I happen to have an old ZTE H618B which already installed Tomato DualWAN, and I happen to find a openwrt firmware for this device. So, my experiment bengins…

## Install OpenWRT

Device: ZTE H618B
Firmware: openwrt-brcm47xx-squashfs.trx

As the default package wpad-mini is not enough to make WPS function well, it is necessary to remove it and install wpad which was called wpad-full.

opkg remove wpad-mini
opkg update


The offical document suggest to install hostapd-utils, but I find it is already the latest version in my firmware, so I skip it.

## Set up WPS function

After the package installed, it is time to configure the wireless configuration file located at /etc/config/wireless:

config wifi-device 'radio0'
option type 'mac80211'
option channel '11'
option hwmode '11g'
option txpower '20'
option country '00'

config wifi-iface
option network 'lan'
option mode 'ap'
option ssid 'OpenWrt'
option encryption 'psk2+ccmp'
option 'wps_pushbutton' '1'


Just add option 'wps_pushbutton' '1' under config wifi-iface section, then type wifi to apply wireless configuration changes.

## Command

If you have only one radio device, the initial command should be like this: (which is my case)

hostapd_cli -p /var/run/hostapd-phy0 wps_pbc


If your device has more than one radio device, you should write some codes as below:

for dir in /var/run/hostapd-*; do
[ -d "dir" ] || continue
hostapd_cli -p "dir" wps_pbc
done


The option wps_pbc indicates you pushed the WPS button, it is short for “push-button configuration”
-p points to the path includes wlan0 device.

## Test

It works for me finally! My device connected to my router when I runs the command:

hostapd_cli -p /var/run/hostapd-phy0 wps_pbc
Selected interface 'wlan0'
OK