martes, 20 de mayo de 2014

SCRIPT para Modem BANDLUXE LTE en Linux

Semanas atrás recibí unos de estos modems. El objetivo es utilizarlo para una conexión de emergencia, en caso de caída de la conexión principal cableada; tengo que levantar la conexión mediante un script. ANTEL entrega estos módems como oferta de conexión inalámbrica. Probado en mi notebook la velocidad de conexión es buena, la conexión estable.
Modem BnadLuxe (foto del sitio del fabricante)
 ANTEL informa que el módem esta soportado en Ubuntu. Fuera de esa mención, no hay más datos para hacerlo funcionar en Linux. Buscando información llegue al blog de Fernando da Rosa, donde cuenta en una entrada su experiencia y da instrucciones para utilizar el modem. La información del blog de Fernando es muy clara, pero en mi caso necesito establecer la conexión desde un script sin intervención de un usuario/operador, seguí buscando información.  Otra entrada en el blog Marvin Rebooted me dio una idea. El soporte técnico del fabricante me envió un PDF, con indicaciones similares a lo publicado en los blogs antemencionados. Con un script armado, que no funcionaba bien, hice una pregunta en la lista UYLUG-Linux.

Por correo, Fernando da Rosa me sugirió ver otra pagina, cuyo autor seria también Uruguayo.  Esta menciona a USB-Modeswitch, a lo que podría dedicarle un entrada entera del blog. Uno de los primeros escollos que enfrenté era no tener instalado este paquete, que resolví conversando con Enrique Verdes. Sin él, el módem es reconocido como un disco USB o pendrive. Esta ultima pagina hace un estudio bastante exhaustivo del módem, presentando varias alternativas para utilizarlo. Después de varias pruebas, y una tarde de dedicación casi exclusiva al problema, tengo un script que establece la conexión.

 Configuración Inicial

Para trabajar con más comodidad, decidí sacarle el PIN a la SIM del MÓDEM. Hecho esto, con las instrucciones de Fernando da Rosa seleccioné la conexion de ANTEL. Hecho esto, el modem se puede utilizar con el script que publico a continuación.

El Script

#!/bin/sh
# Start Internet connection with BandLuxe C505 LTE modem

# (c) 2014 Andres Tarallo (atarallo@gmail.com)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
 
# Path might be customized to your particular installation

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

if [ "$( dmesg|grep 'Manufacturer: BandRich, Inc.' |wc -l)" = "0" ]; then
        echo "No modem availiable"
        exit 1
else
        # Modem detected, lets get it's parameters and info
        for i in $(dmesg |grep 'GSM modem (1-port) converter now attached'|tail -1); do SERIAL_PORT=${i}; done
        ETHERNET_PORT=$(dmesg |grep 'cdc_ether'|grep ': register '|awk '{print $5}'|cut -f1 -d':'|tail -1)
        echo "Modem detected"
        if [ -c "/dev/${SERIAL_PORT}" ]; then
                TTY="/dev/${SERIAL_PORT}"
        else
                echo "No terminal found, modem might be misconfigured"
                echo "make sure you have usb-modeswitch installed"
                exit 1
        fi
        if [ ! -n ${ETHERNET_PORT} ]; then
                echo "Ethernet port not present or missconfigured"
                exit 1
        fi
fi
echo "\nConfiguring Modem (${TTY}) "
echo  "at\$wancall=1" > ${TTY}
echo "\nConfiguring Network Card (${ETHERNET_PORT})"
dhclient -4 ${ETHERNET_PORT}
echo "Done !!!!!"

Pendientes (To do list)

El script publicado funciona correctamente, admite mejoras. Lo probé en mi notebook con OpenSuSE; basado en el mismo tengo en producción, en un PC con Ubuntu 12.04, una versión que agrega algunas rutas estáticas necesarias donde se utiliza el módem. 

Algunos pendientes:
  • Documentación: Un README y quizás manpage.
  • Programación defensiva: Chequear que la conexión no esté activa, verificar que la conexión luego de establecida. Esto ultimo podría  hacerse con pings a los DNS de Google  o alguna otra IP publica que admita pings. En la misma linea, seria interesante chequear la configuración de DNS. Otros chequeos útiles (necesarios) es verificar que los comandos utilizados sean ejecutables por el script.
  • Parametrización: El script tiene algunos valores cableados. Seria util tener un archivo de configuración. 
  • Empaquetarlo: Para facilitarle la vida a usuarios finales y administradores de sistemas. Seria útil contar con paquetes DEB y RPM, para las distribuciones más populares. 
  • Gestion de proyecto: Subir el script a algún repositorio  que permita hacer versionado y llevar listas de bugs. Algo tipo Sourceforge o Savannah

Esta lista de pendientes no es exhaustiva ni está cerrada. Seguramente lo primero que encare sea subir el script a un sitio que me facilite la gestión del desarrollo.

7 comentarios:

  1. yo estoy con problemas tambien , puedes pasarme el pdf que te enviaron? este escript se tranca en configurando eth1

    ResponderEliminar
    Respuestas
    1. Envíame un correo privado, o escribí a la dirección de soporte de bandluxe, para mandarte el archivo.

      Antes de utilizar el script, deberías conectarte manualmente, como esta explicado en el blog de Fernando da Rosa. Otro tema, este script funciona en ANTEL, no necesariamente en otras operadoras. He visto que estos modems pueden trabajar con conexiones PPPoE.

      Eliminar
  2. Hola, tengo la version de Ubuntu 14.04 y me pasa lo mismo q Erlin Pons en el blog de Fernando Darosa, no puedo dar el comando de at+cgdcont?.
    Desde ya gracias.

    ResponderEliminar
    Respuestas
    1. No conozco el caso que mencionas. Lo primero que deberias hacer es fijarte con el comando dmesg si el modem es detectado por tu equipo.

      Un problema que me encontré en ubuntu es que esta distribución no instala por defecto USB-modeswitch. En su momento me costó darme cuenta del problema. El script me corría bien en OpenSuSE, no lo podia hacer andar en Ubuntu.

      Si queres mandame un correo por privado he intento ayudarte.

      Eliminar
  3. Llegué a esta pagina por google, ya que estoy tratando de configurar un modem Bandrich en un router tp-link 3220. Alguien como hacer para que reconozca el router al modem?

    desde ya muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola. No tengo experiencia con el Router tp-link. Solo he utilizado el modem bandrich en PCs, con el script que viste aquí o manualmente.

      Eliminar
  4. Hola: Alguien ha probado en Ubuntu 16.04 LTS?

    ResponderEliminar