Essas duas últimas frases são fundamentais. Parece haver uma condição de corrida no OpenWRT, que é acionada pela minha configuração específica, conforme descrito acima .
Ter ativado miniupnpd
parece ser parte disso também. Depois de desativá-lo (devido ao confuso logspam), descobri que /etc/init.d/network restart
fez obter 5Ghz funcionando. Essa foi a próxima chave.
Desativar sqm
resolveu o problema de 5Ghz permanentemente. É claro que gostaria de encontrar uma maneira de fazer o sqm funcionar :). Eu sei que sqm
tem um script razoavelmente lento (pode demorar alguns segundos) que é executado quando sua interface de rede é ativada.
Como o sqm não está configurado para tocar nas interfaces sem fio, estou inclinado a culpar uma condição de corrida no homegrown netifd
do OpenWRT. Na verdade, consegui reproduzir a falha mesmo depois de substituir a implementação do sqm por um loop ocupado . (Não é um atraso - sleep 3
não reproduziu a falha). Em /usr/lib/sqm/run.sh
:
run_sqm_scripts() {
local section="$1"
export IFACE=$(config_get "$section" interface)
[ -z "$RUN_IFACE" -o "$RUN_IFACE" = "$IFACE" ] || return
# XXX test hack
if [ "$RUN_IFACE" = "$IFACE" ]; then
let i=0
while [[ $i -le 20000 ]]; do
let i++
done
fi
return
# XXX end test hack
[ $(config_get "$section" enabled) -ne 1 ] && ACTION=stop