Configuring OpenWrt on Linksys Velop WHW03 V1

I installed OpenWrt 24.10 on a Linksys Velop WHW03 V1 wireless router. This is the story of how I got all 3 radios it possesses to work.

Freshly installed OpenWrt does not turn on WiFi routers’ radios. You have to do that one way or another. I hand-edited the file /etc/config/wireless so that the radios were enabled, and the SSIDs and passwords matched the Velops still running Linksys/Belkin firmware.

I had some trouble figuring out which Velop was offering what SSID. I wanted all Velops to offer the SSID “wayfarer515” with the same password. A simple iw wlp1s0 scan gave a ton of output to sort through, but it seemed to show only two “wayfarer515” SSIDs from my newly upgraded to OpenWrt WHW03V1.

I handed-edited /etc/config/wireless to give each radio of the WHW03V1 a SSID like “radio0”, “radio1”, “radio2”.

Checking for all radios

I wrote a quick-n-dirty shell script to show me a WiFi scan sorted by BSS (six-byte MAC, or ethernet, address).

#!/bin/bash
set -eou pipefail

sudo iw wlp1s0 scan |
grep -E '^BSS|SSID:|freq:' |
sed -e 's/..*SSID: /SSID    /'  -e '/BSS/s/(..*//' -e '/freq:/s/^       *//' |
awk '
BEGIN {bss="unset"; ssid="unset"; freq="unset"; }
/^BSS/ {bss=$2; ssid="unset"; freq="unset"; }
/^SSID/ {ssid=$2; print ssid, bss, freq; }
/^freq:/ {freq=$2; }
' | sort -k 2.1

The script above shows me all 3 of my Velops like this:

2780 % ./wifi_data
...
radio1 c4:41:1e:4e:37:b6 2412.0
radio2 c4:41:1e:4e:37:b7 5180.0
wayfarer515 c4:41:1e:4e:38:04 2432.0
wayfarer515 c4:41:1e:4e:38:05 5200.0
wayfarer515 c4:41:1e:4e:38:06 5765.0
wayfarer515 c4:41:1e:4e:38:40 2447.0
wayfarer515 c4:41:1e:4e:38:41 5220.0
wayfarer515 c4:41:1e:4e:38:42 5805.0
...

SSID “radio0” is missing. I ssh’ed to the WHW03V1, and ran ip link to find out what the radio devices are called. I ran iw scan phy0-ap0 scan. That gave normal looking, very wordy, output.

I looked at /etc/config/wireless again to see if I had left out some config item. Nothing looked unusual except for:

option path 'soc/40000000.pci/pci0000:00/0000:00:00.0/0000:01:00.0'

The other two radios have that option as something like:

option path 'platform/soc/a000000.wifi'

I googled for things like “openwrt radio0 not working”

I found out that WHW03V1 and some other routers have 2 of one type of radio, and one of another. That’s why the option path looked different for radio0.

The articles suggested that setting option country 'US' might work. It did not.

Another articles suggested that setting txpower is necessary. It did not help.

I looked up what option htmode 'VHT80 means. I decided I shouldn’t futz with it.

I found out there’s some channels the WHW03V1 radios won’t work on, so I changed option channel '112' to be in the range of allowed channels. Didn’t work.

Change ath10K Firmware

Somewhere on the OpenWrt.org web site, I found a note about some other router that used the same WiFi chip sets as WHW03V1 does:

Some users report much improved long-term stability with 5 GHz by using the ath10k firmware instead of the ath10k-ct firmware.

Sorry, I can’t find it again, so no link to the original. Maybe I dreamed it all.

Despite the big banner/MOTD about how apk replaces opkg, I had to use opkg to do this. Further, opkg update earned me a weird error message:

root@OpenWrt:~# opkg update
Downloading https://downloads.openwrt.org/releases/24.10.0/targets/ipq40xx/generic/packages/Packages.gz
SSL verify error: unknown error
*** Failed to download the package list from https://downloads.openwrt.org/releases/24.10.0/targets/ipq40xx/generic/packages/Packages.gz

Luckily opkg has a command line flag to ignore SSL verification.

root@OpenWrt:~#  opkg update --no-check-certificate
root@OpenWrt:~#  opkg remove --no-check-certificate kmod-ath10k-ct ath10k-firmware-qca9888-ct
root@OpenWrt:~#  opkg install --no-check-certificate kmod-ath10k ath10k-firmware-qca9888

I followed this with a reboot. That didn’t make any difference on its own, dagnabbit.

Somewhere along the line, I decided to see what OpenWrt’s LuCi web interface said.

LuCi said “radio0” was working, showed that it was a different brand than the other 2 radios.

OpenWrt LuCi web interface, network menu, wireless item

That’s the result of hovering over the “Network” item in the top, black, bar, then clicking on “Wireless”. Everything looks correct. I clicked on the dark blue “Scan” button of “radio0”, that seemed to work, as did the “Scan” button of “radio2”, the other “5g” radio.

Hovering over the “Status” item in the top, black, bar, then clicking on the “System Log” menu entry gave me something like /var/log/messages contents. Clicking the “Kernel Log” tab gave me dmesg output. I saw nothing unusual.

Somewhere during this process I had hand-edited /etc/config/wireless to remove option encryption and option key from the config wifi-iface section for radio0. That actually worked - a radio0 SSID showed up in my (very above) script’s output.

Something was wrong with my hand-editing. I note that I would hand-edit /etc/config/wireless, then reboot the WHW03V1 to get changes to take effect. This was probably where I went wrong.

Set up radio0 with LuCi

I decided to try the green-text “Add” button on the Network → Wireless → radio0 line. I added a “radio0-2”, configured to have a country code of “US”, and txpower of 20 dBm (100 mW). No encryption, no password.

I had to take a second pass by clicking the red-text “Remove” button on the “radio0” line. This apparently queues up batches of changes, you have to submit them.

Hallelujah, this worked. An SSID of “radio0-2” appeared in WiFi scans.

I repeated the LuCi work, creating a “radio0” and removing “radio0-2”, this time adding encryption but not a password. My bad. Trying to connect my laptop’s WiFi to “radio0” caused it some confusion. Apparently “radio0” SSID was encrypted, but since it had no password, my laptop couldn’t authenticate.

Another round of LuCI, adding encryption and a password. and I got a working “radio0”.

Final Puzzle

I have no idea why hand-editing /etc/config/wireless didn’t work. The LuCi change didn’t make an entry any different than what I did by hand. There’s a file /var/run/hostapd-phy0.conf that has much the same info as /etc/config/wireless but in a different text format. It appears that the applying radio configs might not be consistent between /etc/config/wireless and the files /var/run/hostapd-phy*.conf if you don’t do it with the uci command. Maybe the LuCi web interface keeps everything straighter. It doesn’t seem to reboot the router after config changes.