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.