Obteniendo aleatoriamente "NO CARRIER" del módem Huawei 3G en Linux

Obteniendo aleatoriamente "NO CARRIER" del módem Huawei 3G en Linux

Estoy usando un módem Huawei 3G en Linux. Después de usar NetworkManager por algún tiempo, ahora uso wvdial para hablar con el módem e iniciar pppd: agregué una regla udev para que wvdial se inicie automáticamente cuando se conecta el dispositivo USB.

  1. El buen caso: conecto el módem, wvdial falla un par de veces mientras el módem se está registrando y luego tiene éxito.
  2. El mal caso: lo mismo pero wvdial sigue fallando con "NO CARRIER", para siempre.

Lo único que podemos hacer cuando sucede 2): desconectar el dispositivo, volver a enchufarlo y esperar que esta vez nos salga bien...

Intenté muchas cosas, como cambiar entre gprs/umts, cambiar manualmente de operador para forzarlo a volver a registrarse... sin suerte. Una vez que no funciona, sigue así.

Hace unos días incluso me encontré con un caso en el que umts falla todo el tiempo, pero gprs tiene un éxito razonable. Ahora, lo interesante es que en Windows umts funcionó de inmediato, por lo que definitivamente es un problema de Linux.

El módem es un huawei E1762.
NetworkManager/modem-manager sufre un poco el mismo problema.
Ejecutando ubuntu lúcido

Respuesta1

Ok, creo que lo que sucede es que el módem se confunde cuando wvdial comienza a hablar con él antes de que termine de registrarse.

-> Se agregó un retraso de 2 segundos después de conectar el dispositivo y hacer que el script espere hasta que el dispositivo esté registrado antes de ejecutar wvdial. Entonces siempre funciona!!

#!/bin/bash
while [ -e /dev/ttyUSB0 ] ; do
  # wait to be registered
  if ./operator | grep -q ','; then
    wvdial provider >> wvdial.log 2>&1
  fi
  sleep 1
done

guión del operador:

#!/bin/bash
# boy, is this ugly ...
chat -t 1 -e "" '\pAT' OK AT+COPS? +COPS '\pAT' OK >> /dev/ttyUSB1 < /dev/ttyUSB1 2>/tmp/foo
grep -m 1 '^+COPS' /tmp/foo

información relacionada