Sagem Fast 1000 USB en GNU/Linux






Introducción

El modem USB Sagem Fast 1000 es uno de los modems que proveía la empresa Wanadoo en España y an Francia con el pack SpeedPack ADSL.  Como ocurre con otras operadoras, no disponen de drivers para linux. Si ya es triste que el proveedor no disponga de drivers para uno de los sistemas operativos más importantes, lo es más aún que el propio fabricante además de no disponer de ellos, no quiera hacerlos. Aquí es donde entramos nosotros, los usuarios que se niegan a pasar por caja para comprar un router u otro modem  que sí funcione en linux.
Tanto en internet como aquí mismo en Sourceforge, existen varios proyectos para conseguir hacer funcionar modems USB en linux. Estos proyectos son los que me animaron a intentar reunir a un batallón de usuarios y programadores que ayuden a sacar adelante este proyecto. Desde aquí mi más enhorabuena por el trabajo realizado en este campo, y muchas gracias a todos.

El modem en cuestión

Vamos al tajo. Lo primero de todo es identificar el modem en cuestión.
El dichoso modem
El modem está formado por un conjunto de chips que realizan todo el trabajo por hardware, complementándolo con una imagen de software. Vamos a analizarlo más a fondo.
Está basado en un solución Centaur, un diseño de hardware que integra la empresa  STMicroelectronics. El módulo consiste en un chipset ASCOT para ADSL y un controlador de comunicaciones ATM Virata (Helium). El ASCOT está formado por dos chips, un frontend analógico ST70134, con convertidor de datos, filtros programables y control de ganacia, y un procesador DMT (Discrete MultiTone) ST70235A que incluye un interfaz de programación UTOPÍA.Como software utiliza ATMOS7.1 junto con el módulo Centaur.

Funcionamiento en  NO-GNU/Linux

La primera consideración a tener en cuenta se cumple en ambos sistemas operativos, y es el correcto funcionamiento de los puertos USB. Muchos usuarios tuvieron grandes problemas con este modem hasta que sacaron la versión 2.1.7 y actualizaron sus drivers USB.
Contando con que todo funcione bien, en el momento en que el sistema operativo descubre un dispositivo conectado en el puerto USB, lo intenta identificar, y para ello, busca una cadena en el registro del sistema. Esta cadena, identifica a cada dispositivo, si vais al registro, podeis observar una cadena similar a esta:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\Vid_079b&Pid_0013
que identifica de forma única a vuestro producto (Vid= Vendor Id, Pid= Product id). El sistema operativo, intenta identificar el hardware y si encuentra la cadena en el registro, procede a cargar las variables, en caso contrario creará una clave nueva. De aquí que  insistan tanto en que primero se instalen los drivers y después se enchufe el producto.
En nuestro caso (y en muchos otros) esta cadena es una cadena de inicialización, que procede a cargar el binario del sistema operativo del modem como bien indica su nombre SAGEM USB ADSL modem loader. Podeis observar una subcadena que indica la ruta y el nombre del fichero binario que contiene el software del modem. Esta cadena es bastante clara, ya que se llama DeviceFirmware y como valor contiene C:\WINDOWS\System32\fast1000.bin
Una vez cargado el binario, se pasa a otra cadena que carga contra ese software los parámetros de inicialización, se inicia la conexión del modem, y a continuación, se procede a cargar el protocolo por encima. En el caso de nuestro modem, se crea un interfaz ethernet virtual que se llama SAGEM VVB Ethernet Port v2.1.7.. si observais la clave que carga el driver, es algo así: SAGEM USB VvBus for Helium. Básicamente este el el interfaz de programación entre el chipset y el USB.  Y como podeis observar, se carga la pila TCP/IP sobre este interfaz. A partir de ahora ya podemos navegar y usar la mula ; ).



Primeros pasos para que funcione en Linux

Como nuestra idea es que la mula funcione en linux, vamos a ver que es lo que necesitamos.
Hay que tener en cuenta que la gran mayoría de los usuarios que tenemos el SpeedPack ADSL tenemos IP fija, con lo cual no se necesita un método de autenticación, como ocurre en otros casos, por lo que no necesitamos un PPPoe o PPPoA. En nuestro caso el método utilizado es una conexión Routed RFC1483 (http://www.faqs.org/rfcs/rfc1483.html). ¿Cómo lo puedes saber?. Bueno, sencillamente porque no tienes que utilizar ni usuario ni contraseña para configurar o conectar el modem a internet.sólo necesitas un VPI, un VCI, tu dirección IP, máscara, y la dirección IP del gateway. El desarrollo del driver es igual en un principio, ya que lo primero que nos interesa está bastante lejos de esta parte. Bueno, lo veremos más adelante.

Soporte en el Kernel.

Primero, deberemos recompilar el Kernel para habilitar el soporte para USB y ATM, para ello, necesitamos tener instaladas las fuentes del Kernel, nos vamos a /usr/src/linux y ejecutamos make menuconfig (o make xconfig para ejecutarlo en modo gráfico). Necesitamos habilitar las siguientes opciones:

Drivers USB y ATM.

Ahora que el Kernel ya tiene soporte para estas tecnologías, necesitaremos instalar los drivers USB y ATM..
http://www.linux-usb.org/
http://sourceforge.net/projects/linux-usb/

  • ATM: La ADSL al fin y al cabo, consiste en un circuito ATM, con lo cual necesitamos compatibilidad con ATM. Para ello necesitamos instalar los correspondientes drivers. Los podemos descargar de:
http://linux-atm.sourceforge.net/dist.php

Desarrollo del driver.

Los pasos a seguir para el desarrollo del driver, son a grandes rasgos los siguientes:

Realizar un sniffer del puerto USB para conseguir descifrar los parámetros para pasarle el firmware al modem.Para esto hay bastantes herramientas en internet, cómo el SnoopyPro (http://sourceforge.net/projects/usbsnoop/).
Una vez averiguemos cómo pasarle el firmware, hay que hacer un módulo que instale el firmware y comprobar que recibe órdenes. Para ello se necesita realizar un módulo que sea capaz de enviar los datos de configuración Post firmware al modem, lo que son los comandos de conexión en sí. La comprobación de esta comunicación, és en parte sencilla, ya que de la misma forma que le enviamos los datos de configuración, podemos consultar parámetros de estado para comprobar que és correcta.
Una vez cargado el firmware, viene la parte más complicada, que és el desarrollo del driver en sí, que será capaz de intercambiar intrucciones de control para enviar y recibir los datos.


En sourceforge, así como en otros sitios de internet, existen varios proyectos que nos ayudarán en nuestro cometido. Son por ejemplo los siguientes:

Conexant USB ADSL Modem Linux Driver  (http://sourceforge.net/projects/accessrunner/)
Zyxel 630-11 ADSL USB Modem Linux driver (http://sourceforge.net/projects/zyxel630-11/)
Speedtouch USB for *nix (http://sourceforge.net/projects/speedtouch/)

Y el que pienso que nos ayudará más que ninguno:
Allied Data Copperjet 800 Linux Drivers (http://co800.sourceforge.net/)
sobre todo gracias a que están desarrollando un driver para modems con ip estática y muy secillo.
El driver funciona y es fácil de instalar. Todo un logro por parte de estos programadores.
Os lo podeis desacargar desde aquí: http://prdownloads.sourceforge.net/co800/co800_static_IP_v1.0.0_beta.tar.gz?download


Agradecimientos.

Desde aquí se quiere dar las gracias a todos los programadores que participan en todos estos (y muchos otros proyectos que se me quedan en el tintero) que están contribuyendo a que en España se instalen más líneas ADSL y se tenga más y mejor conocimiento de los sistemas operativos "alternativos" y de la informática en general. Y sobre todo a todas las personas que se animen a participar en este proyecto, que espero que sean muchos. Un saludo.

SourceForge.net Logo