D-Link DIR-860L rev. B1

The DIR-860L rev. B1 is a Mediatek-based first generation 802.11ac router. Unlike other 802.11ac hardware from more established players, Mediatek's MT7612EN radio does not require a large firmware to operate. This makes it a great candidate if good FOSS support is a requirement for you (the mt76 driver is actually written and maintained by one of the leading LEDE developers). The other obvious choice - Qualcomm/Atheros (QCA) - choose to capitalise on the reputation of the open 802.11an ath9k driver, which was largely developed by the same developer, by naming their 802.11ac driver ath10k; however, at the same time QCA happily closed things up and moved a lot of driver functionality into the binary firmware with its 802.11ac driver. Much like Broadcom and Marvell, they offer a Linux 'driver' which is mostly just a wrapper around those binary firmware blobs. This way, they can claim Linux or FOSS support, while you're still buying a black box. If you want more info on the state of wireless drivers on Linux, this video might interest you.

By now, it's probably clear I picked this router because it has the most open 802.11ac driver available. If you're interested, keep in mind Mediatek so far does not offer anything more than two-stream solutions - if you need more than two spatial streams, you'll need to look elsewhere. I just have two AC capable devices (laptop and smartphone), so two-stream is fine for me. Another thing is the 2,4 GHz radio seems to perform badly in noisy environments (ie with lots of other 2,4 GHz radios). Mediatek has put a newer radio on the market that should perform better (MT7603), but this won't make its way into the DIR-860L anymore. I rely on 5 GHz only myself, so this does not affect me.

The DIR-860L B1 is very cheap at the moment (prices around 75 EUR or less), which makes it a very affordable upgrade from 802.11an. LEDE (and OpenWrt) fully support it - so it was a no-brainer to upgrade from my trusty Netgear WNDR3700.

At this time, the router is running a LEDE 17.01+ build. I have enabled a Cake SQM instance to fight the dreaded bufferbloat - the SoC has no issues handling my 50 Mbit down (25% load maximum on a single core). However, shortly after the network started going down, and the LEDE logs revealed kernel oopses, and sudden reboots. After talking to one of the bufferbloat guys, I disabled some of the offloading; this seems to cause problems frequently. For this, you need ethtool, but it's a bit quirky as querying the actual settings prints the full names, and disabling the specific setting requires you use the abbreviation:

Querying the offloads:

# ethtool -k eth0|grep offload
tcp-segmentation-offload: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: off [fixed]
tx-vlan-offload: on
l2-fwd-offload: off [fixed]

You want to disable tcp-segmentation-offload, generic-segmentation-offload and generic-receive-offload:

# ethtool -K eth0 tso off gso off gro off

After that, SQM shouldn't cause any more system instability.

Hardware specifications

  • MediaTek MT7621AT SoC dual-core MIPS 1004Kc V2.15 880 MHz (with SMT)
  • 16 MiB flash
  • 128 MiB RAM
  • MediaTek MT7621AT 5 port Gigabit Ethernet switch
  • MediaTek MT7602E 802.11bgn 2x2:2
  • MediaTek MT7612E 802.11an+ac 2x2:2
  • USB 3.0 port
  • Serial port

/proc/cpuinfo output

system type             : MediaTek MT7621 ver:1 eco:3
machine                 : D-Link DIR-860L B1
processor               : 0
cpu model               : MIPS 1004Kc V2.15
BogoMIPS                : 586.13
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16 dsp mt
shadow register sets    : 1
kscratch registers      : 0
package                 : 0
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available
VPE                     : 0

(This is the first of four cores the kernel sees.)

LEDE prompt

Always nice to see...

BusyBox v1.25.1 () built-in shell (ash)

    /        /\      _    ___ ___  ___
   /  LE    /  \    | |  | __|   \| __|
  /    DE  /    \   | |__| _|| |) | _|
 /________/  LE  \  |____|___|___/|___|                      lede-project.org
 \        \   DE /
  \    LE  \    /  -----------------------------------------------------------
   \  DE    \  /    Reboot (17.01-SNAPSHOT, r3107+7-f81eec11fa)
    \________\/    -----------------------------------------------------------