Openwrt em wndr3800 - 5Ghz wifi mostra como desativado

2

Minha GUI openwrt mostra todas as redes de 5 Ghz como desativadas. (Círculo vermelho com barra e "Sem fio está desabilitado ou não associado"). Nem a rede sem fio de 5 Ghz aparece nos meus computadores.

Eu tive 5Ghz trabalhando no passado recente, mas isso não parece estar se comportando no momento. Atualmente tenho

  • Netgear WNDR3800
  • OpenWRT estável - 15.05 Chaos Mais calmo. (Não 15.05.1 ainda. Eu corri alguns opkg update alguns meses atrás, porém, por isso pode ser um pouco no meio).

Minha configuração basicamente apenas imita o CeroWRT (um projeto de fork desenvolvido na plataforma wndr3800). Especificamente:

  • sqm-scripts para corrigir a latência sob carga ("kill bufferbloat").
  • Redes separadas para "convidado" e eu, que são encaminhadas em vez de vinculadas à LAN.
  • Redes separadas para 2,4 Ghz e 5 Ghz. (Na verdade, eu preferiria um roaming contínuo, como sugerido pela recente apresentação Googly (TM) ; ele nem sempre foi 100% confiável para mim e eu acabo querendo forçar 2.4Ghz).

Eu notei o seguinte no log do sistema do roteador:

Sun Apr  3 15:02:19 2016 user.notice SQM: Starting simple.qos
Sun Apr  3 15:02:19 2016 user.notice SQM: ifb associated with interface pppoe-wan: 
Sun Apr  3 15:02:19 2016 user.notice SQM: Currently no ifb is associated with pppoe-wan, this is normal during starting of the sqm system.
Sun Apr  3 15:02:19 2016 daemon.notice netifd: radio1 (9031): wlan1: ACS-COMPLETED freq=5320 channel=64
Sun Apr  3 15:02:19 2016 daemon.notice netifd: radio1 (9031): Using interface wlan1 with hwaddr 74:44:01:86:42:d6 and ssid "VOYAGER2091-90-jenkins"
Sun Apr  3 15:02:20 2016 user.notice SQM: Squashing differentiated services code points (DSCP) from ingress.
Sun Apr  3 15:02:21 2016 kern.info kernel: [  199.510000] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): Could not set interface wlan1-1 flags (UP): Device or resource busy
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): Failed to add BSS (BSSID=76:44:01:86:42:d6)
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): Interface initialization failed
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): wlan1: interface state ACS->DISABLED
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): wlan1: AP-DISABLED 
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): ACS: Possibly channel configuration is invalid, please report this along with your config file.
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): ACS: Failed to start
Sun Apr  3 15:02:21 2016 daemon.notice netifd: radio1 (9031): wlan1: AP-DISABLED

A execução de /etc/init.d/network restart no roteador não ajuda.

A execução de ifdown wifi_a_guest e, em seguida, ifup wifi_a_guest parece corrigir tudo até a próxima reinicialização.

    
por sourcejedi 03.04.2016 / 18:12

1 resposta

1

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
    
por 03.04.2016 / 18:12