WZR-600DHP

From Leo's Notes
Last edited on 3 December 2023, at 07:48.

The Buffalo WZR-600DHP is a 802.11n router. This router is based on the Atheros AR7161 SoC with 128MB memory and 32MB flash.

The last firmware that Buffalo provided for this unit is DD-WRT v3.0-r30356 std (11/30/17). This version of dd-wrt is based on Linux 3.10.102, built on November 30, 2017. For continued support, use OpenWRT which still continues to build recent revisions for this unit.

I purchased this unit back in February 2014 from NewEgg for $80.

Flashing OpenWRT on the WZR-600DHP

Flashing OpenWRT from DD-WRT was very straight forward. There is an issue with getting USB working however.

Links:

Flashing from stock dd-wrt firmware

# cd /tmp
# scp foo@host:~/openwrt-18.06.1-ar71xx-generic-wzr-600dhp-squashfs-sysupgrade.bin .
# mtd -r write openwrt-18.06.1-ar71xx-generic-wzr-600dhp-squashfs-sysupgrade.bin linux
## This may take about 1-2 minutes, and the -r will automatically reboot the device

Flashing using the TFTP bootloader method

The unit will start a TFTP server for a few seconds as part of the boot sequence. During this short window, it will accept a file via TFTP from 192.168.11.2.

You will need to prepare a Linux system on the network on this IP address. Use the following commands to set up the IP address and ARP entry (the bootloader fakes this MAC address). Use Curl to push the file via tftp.

# ip address add 192.168.11.2/24 dev ens33
# arp -s 192.168.11.1 02:aa:bb:cc:dd:20
# curl -T openwrt-tftp.bin tftp//192.168.11.1

Power cycle the router and then run the curl command. After a few seconds, you should see curl transmitting the file. Once the curl finishes, it will take the unit a few more minutes to finish flashing. The diagnostic red LED should be blinking until this process is done.

Once you're done, you might want to clear the ARP entry using: arp -d 192.168.11.1

Accessing OpenWRT

With OpenWRT loaded, you should be able to access it at 192.168.1.1 (not 192.168.11.1 which was the previous default).

Reverting to the stock firmware

After being unable to get this router working with a USB printer, I decided to revert from OpenWRT back to the stock dd-wrt based firmware. This can be accomplished using the TFTP bootloader method.

# ip address add 192.168.11.2/24 dev ens33
# arp -s 192.168.11.1 02:aa:bb:cc:dd:20

## Use either curl or tftp
# curl -T wzr600dhp-pro-v3.0-r30356.enc tftp//192.168.11.1

## OR use tftp
## Run every command blow except the PUT command. Run the PUT command only when you have power cycled the device and the router's link light beings blinking.
# tftp 192.168.11.1
tftp> binary
tftp> rexmt 1
tftp> timeout 60 
tftp> trace 
Packet tracing on.
tftp> put wzr600dhp-pro-v3.0-r30356.enc

## The transfer took about 33 seconds and the diagnostic light will blink rapidly initially, then followed by a slightly slower blink. It took another 5 or so minutes for it to come online afterwards.

## Clear the ARP table:
arp -d 192.168.11.1

The router will be accessible at 192.168.11.1 with the new stock firmware. Log in as 'admin' using 'password' as the password.

Tasks

Setup a print server using p910nd

OpenWRT p910nd configuration

On the stock dd-wrt firmware, you can enable USB printer support which starts a p910nd service that exposes the USB printer on port 9100.

On OpenWRT, this can also be set up by installing the p910nd, luci-app-p910nd, and kmod-usb-printer packages. Refresh the luci web interface and navigate to Services -> "p910nd - Print Server". Enable the service for /dev/usb/lp0 on port 9100.

Troubleshooting

USB Issues

Update: Testing this again on OpenWRT 21 shows the USB issue described below has been resolved.

The following applied to OpenWRT / LEDE 17.01:

USB support doesn't appear to work for this model. I installed the USB drivers with the following packages opkg install kmod-usb-printer usbutils kmod-usb-ohci kmod-usb2. However, OpenWRT does not seem to detect the USB devices. A printer should exist at /dev/usb/lp, but nothing shows up. LEDE 17.01 was unable to detect any USB devices at all.

root@buffalo:/dev/bus/usb/001# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@buffalo:/dev# lsmod | grep usb
ledtrig_usbport         2160  0
nls_base                4736  1 usbcore
usb_common              1312  1 usbcore
usbcore               118528  4 usblp,ledtrig_usbport,ehci_platform,ehci_hcd
usblp                   8480  0
root@buffalo:/dev# dmesg | grep -i usb
[    6.651469] usbcore: registered new interface driver usbfs
[    6.657039] usbcore: registered new interface driver hub
[    6.662464] usbcore: registered new device driver usb
[    6.671682] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    6.690631] ehci-platform ehci-platform: new USB bus registered, assigned bus number 1
[    6.727198] ehci-platform ehci-platform: USB 2.0 started, EHCI 1.00
[    6.734199] hub 1-0:1.0: USB hub found
[   12.263746] usbcore: registered new interface driver usblp
root@buffalo:~# uname -a
Linux buffalo 4.9.120 #0 Thu Aug 16 07:51:15 2018 mips GNU/Linux

Using the stock dd-wrt firmware, the AR7100 EHCI USB controller is found and devices are also discovered:

root@DD-WRT:~# lsmod | grep usb
usblp                   8996  0
usbcore               118161  4 usblp,ohci_hcd,ehci_hcd
usb_common              1146  1 usbcore
root@DD-WRT:~# lsusb
-sh: lsusb: not found
root@DD-WRT:~# uname -a
Linux DD-WRT 3.10.102 #28624 Thu Nov 30 14:01:34 CET 2017 mips DD-WRT
root@DD-WRT:~# dmesg | grep -i usb
<6>[  552.770000] usbcore: registered new interface driver usbfs
<6>[  552.780000] usbcore: registered new interface driver hub
<6>[  552.790000] usbcore: registered new device driver usb
<6>[  552.880000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
<7>[  552.880000] drivers/usb/host/ehci-ar71xx.c: starting AR7100 EHCI USB Controller...done. reset 0x40 usb config 0x30000
<6>[  554.800000] ar71xx-ehci ar71xx-ehci.0: new USB bus registered, assigned bus number 1
<6>[  554.850000] ar71xx-ehci ar71xx-ehci.0: USB 2.0 started, EHCI 1.00
<6>[  554.850000] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
<6>[  554.860000] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
<6>[  554.870000] usb usb1: Product: Atheros AR71xx built-in EHCI controller
<6>[  554.870000] usb usb1: Manufacturer: Linux 3.10.102 ehci_hcd
<6>[  554.880000] usb usb1: SerialNumber: platform
<6>[  554.880000] hub 1-0:1.0: USB hub found
<6>[  555.100000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
<7>[  555.100000] drivers/usb/host/ohci-ar71xx.c: starting AR7100 OHCI USB Controller...
<6>[  555.110000] ar71xx-ohci ar71xx-ohci.0: new USB bus registered, assigned bus number 2
<6>[  555.180000] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
<6>[  555.190000] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
<6>[  555.190000] usb usb2: Product: Atheros AR71xx built-in OHCI controller
<6>[  555.200000] usb usb2: Manufacturer: Linux 3.10.102 ohci_hcd
<6>[  555.210000] usb usb2: SerialNumber: platform
<6>[  555.210000] hub 2-0:1.0: USB hub found
<6>[  555.500000] usbcore: registered new interface driver usblp

Is the WAN port actually gigabit?

I recently had to use the WZR-600DHP as my gateway between my home network and the Shaw modem (because Shaw's new modem doesn't let you change its IP address or netmask to a /22). After setting everything in place, I noticed the link speed between the WAN port and the modem was only 100mbit.

On OpenWRT using ethtool, I can see that eth0 (the interface to the internal switch) is gigabit while eth1 (the WAN port) is limited to 100mbit:

root@OpenWrt:~# ethtool -I eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   1000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  1000baseT/Full
        Link partner advertised pause frame use: No
        Link partner advertised auto-negotiation: No
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0
        Transceiver: external
        Auto-negotiation: on
        Current message level: 0x000000ff (255)
                               drv probe link timer ifdown ifup rx_err tx_err
        Link detected: yes

root@OpenWrt:~# ethtool -I eth1
Settings for eth1:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  100baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
        Link partner advertised pause frame use: No
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 4
        Transceiver: external
        Auto-negotiation: on
        Current message level: 0x000000ff (255)
                               drv probe link timer ifdown ifup rx_err tx_err
        Link detected: yes

root@OpenWrt:~# cat /proc/cpuinfo
system type             : Atheros AR7161 rev 2
machine                 : Buffalo WZR-HP-AG300H
processor               : 0
cpu model               : MIPS 24Kc V7.4
BogoMIPS                : 451.58
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 16
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16
Options implemented     : tlb 4kex 4k_cache prefetch mcheck ejtag llsc dc_aliases perf_cntr_intr_bit perf
shadow register sets    : 1
kscratch registers      : 0
package                 : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available

root@OpenWrt:~# cat /etc/os-release
NAME="OpenWrt"
VERSION="21.02.0"
ID="openwrt"
ID_LIKE="lede openwrt"
PRETTY_NAME="OpenWrt 21.02.0"
VERSION_ID="21.02.0"
HOME_URL="https://openwrt.org/"
BUG_URL="https://bugs.openwrt.org/"
SUPPORT_URL="https://forum.openwrt.org/"
BUILD_ID="r16279-5cc0535800"
OPENWRT_BOARD="ath79/generic"
OPENWRT_ARCH="mips_24kc"
OPENWRT_TAINTS=""
OPENWRT_DEVICE_MANUFACTURER="OpenWrt"
OPENWRT_DEVICE_MANUFACTURER_URL="https://openwrt.org/"
OPENWRT_DEVICE_PRODUCT="Generic"
OPENWRT_DEVICE_REVISION="v0"
OPENWRT_RELEASE="OpenWrt 21.02.0 r16279-5cc0535800"

All the spec sheets for the device says it is a gigabit capable device on all LAN and WAN ports. 🤔

I then did a sysupgrade from OpenWRT 21.02.0 to the latest OpenWRT release (23.05.0) and.... lo and behold the interface came up with gigabit:

root@OpenWrt:~# ethtool -I eth1
Settings for eth1:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
                                             1000baseT/Half 1000baseT/Full
        Link partner advertised pause frame use: No
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 4
        Transceiver: external
        Auto-negotiation: on
        MDI-X: Unknown
        Current message level: 0x000000ff (255)
                               drv probe link timer ifdown ifup rx_err tx_err
        Link detected: yes

OpenWRT's great 🎉

See also