Software para el 3Com ADSL Modem USB (3CP4218)




4 de julio de 2003. Copyright (C) Josep Comas (jcomas@gna.es)



Contenido:

  1. Acerca del 3Com ADSL Modem USB

  2. El software, consideraciones previas

  3. Novedades, historial de versiones

  4. Críticas recibidas, opiniones

  5. La historia, como empezó todo

  6. Envío/recepción de información

  7. El módem por dentro

  8. Inicialización del módem

  9. Interfaces y endpoints de la especificación USB

  10. Requisitos de software

  11. Instalación del software

    1. Contenido del software para el 3Com ADSL Modem USB

    2. Compilación e instalación

    3. Configuración del entorno

    4. Panel de información

    5. Actualización del driver

  12. Información para desarrolladores

  13. Bibliografía


1. Acerca del 3Com ADSL Modem USB

El 3Com ADSL Modem USB es un módem ADSL que se conecta al puerto USB de un ordenador. Fue diseñado por la empresa 3Com y etiquetado con el código de producto 3cp4218. A pesar del auge actual de la tecnología ADSL en Europa este módem ha sido lamentablemente descatalogado por el fabricante (ver http://www.3com.com/products/en_US/end_of_life.jsp?sku=3CP4218). Para el soporte técnico debes dirigirte a la empresa que te ha proporcionado el módem. En caso de avería puedes llamar al teléfono 900 983 125. Si no encuentras los últimos drivers de 3Com para el sistema operativo Windows en su web (http://www.3com.es/support/downloads/adsl_usb_install.exe) puedes acudir a http://sourceforge.net/projects/cp4218 (bajo la sección de descarga encontrarás el archivo adsl_usb_install.exe con los últimos drivers que estuvieron disponibles para el sistema operativo Windows).

El driver del fabricante para el sistema operativo Windows presenta errores que provocan en bastantes configuraciones una bajada considerable de rendimiento del sistema. Utilizando un antivirus y otro software en el mismo sistema provoca que el problema se acentúe aún más. En varios casos se ha solucionado adquiriendo una tarjeta con puertos USB para bus PCI o bien modificando algunos parámetros de la BIOS (ver http://adsl.exhome.de). En 3Com Iberia modificaron el driver para arreglar el problema de rendimiento pero aún presenta otros problemas (en http://sourceforge.net/projects/cp4218 puedes bajarte una versión beta del driver para el protocolo RFC1483/2684 proporcionado por 3Com Iberia, el driver se encuentra en el archivo 3cp4218-xp-2000.zip). Sasker y yo decimos hace tiempo solucionar el problema del driver de Windows creando uno totalmente nuevo, de momento se ha conseguido para el protocolo RFC1483/2684 enrutado (lo puedes obtener visitando la página http://usuarios.lycos.es/cp4218). Para más información consulta la página http://cp4218.sourceforge.net.

El fabricante ha respondido tarde y mal, no es lo que se esperaba de una marca con prestigio como 3Com, distribuyendo un producto que se encontraba descatalogado y dejando a muchos usuarios en el camino. Les conviene mejorar mucho si quieren tener un soporte verdadero que si se encuentra en otras grandes marcas. Solamente hace falta mirar en algunos foros ADSL españoles para ver lo decepcionados que han quedado muchos usuarios de este módem (algunos usuarios han apodado el módem como vampiro o pisapapeles).


2. El software, consideraciones previas

En estas páginas encontrarás software que he desarrollado para poder utilizar este módem en el sistema operativo Linux. Aunque pongo todo el esmero posible en el código, no me hago responsable de lo que pueda ocurrir al ejecutar este código. Puedes encontrar un FAQ y otros documentos no incluidos en este paquete en http://cp4218.sourceforge.net. En esta otra dirección http://sourceforge.net/projects/cp4218 podrás bajarte el software y consultar en el foro los problemas que hayan tenido otros usuarios (puedes utilizar la opción de búsqueda dentro del foro). Si después de leer este documento tienes alguna duda o problema sobre este software acude al foro, por favor, no contactes directamente conmigo.

Te aconsejo que leas despacio todo el documento para comprender mejor como utilizar este software. Es muy importante que revises que tienes todos los programas necesarios instalados y que el PATH de tu distribución apunte a donde se encuentran estos (ver archivo /etc/profile). En el mismo apartado de descarga encontrarás otros programas necesarios para hacer funcionar el driver y que puedes descargarlos si no los tienes en tu distribución Linux.


3. Novedades, historial de versiones

4 de julio de 2003

Actualizado para kernels 2.4.x recientes y librería libusb 0.1.7. Añadido soporte para crear paquetes rpm y deb. Script del servicio actualizado. Documentación actualizada.

12 de febrero de 2003 (versión interna)

Cambios en scripts para que cargue mejor el controlador usb correspondiente (gracias a Sol Negro del proyecto Vitelcom). Se han añadido scripts nuevos para soporte de RFC1483/2684 bridged y de PPP sobre Ethernet (PPPoE). Cambio de la definición urb_t por struct urb para que compile en kernel 2.4.20. Se ha actualizado la documentación.

14 de septiembre de 2002 (versión de testeo, prerelease)

Mayor robustez en las transferencias bulk y control. Se ha cambiado el nombre de MAX_INPUT por MAX_INPUT_BUF en el fichero 3cload.c para evitar duplicidad con algunos include limits.h. Se ha modificado Makefile del directorio init para que busque correctamente la librería libusb.a en la fase de compilación. Se han corregido los makefiles de compilación para que escoja el tipo de CPU de la máquina con que se compila. Se ha incorporado un archivo de configuración (/etc/3cp4218) para no tener que volver a teclear la configuración al instalar nuevas versiones del driver. Los scripts y demás programas obtienen la información de este archivo de configuración. Se han añadido dos scripts 3cstart.sh y 3cstop.sh para cargar y parar el driver, ahora no hace falta ejecutar 3cload.sh y 3cnetup.sh o 3cnet2up.sh (según la configuración ya cargará el archivo adecuado). Se ha cambiado el panel de información de Kylix a C (utilizando GTK+ y libglade, el programa pasa a llamarse 3cpanel) y se ha añadido mucha más información que ahora proporciona el driver. Se ha creado un nuevo programa que permite introducir de manera más sencilla la configuración (3cconfig). Se ha incorporado soporte multiidioma en los programas (los programas vienen en inglés pero con archivos de traducción al español (estos se cargan al ejecutar el programa dependiendo de la configuración local), se pueden incorporar otras traducciones sin tener que modificar el código fuente). Ahora hay opción para desinstalar los programas. Se ha modificado el script de instalación del servicio para cargar/parar el driver para que soporte a la mayoría de distribuciones de Linux (Debian, RedHat/Mandrake, Suse, Slackware/otras), el archivo con el código pasa a llamarse cp4218 en vez de 3cp4218. Se ha incorporado soporte OAM loopback al driver (gracias a David Lázaro por encontrar un error de buffer y por proporcionar un parche previo a esta versión para los usuarios que utilizan el protocolo PPP sobre ATM). Se ha corregido el problema de la luz DATA encendida constantemente. Ahora la luz ADSL se apaga y se cierra la conexión ADSL cuando se descarga el driver. El driver muestra en intermitente la luz ADSL cuando no hay conexión. Se ha añadido al módulo del driver el tipo de licencia. También quiero dar las gracias a 3Com Iberia por permitirme proporcionar el firmware conjuntamente con el driver.

1 de mayo de 2002

Se ha corregido la inestabilidad que presentaba el driver (gracias a Alberto Jiménez por descubrir el problema y aportar la solución). A partir de ahora el software pasa a considerarse una versión beta (aún pueden presentarse pequeños problemas). También se ha modificado el script 3cnetup.sh para que busque en varios directorios donde pueden encontrarse las herramientas ATM.

6 de abril de 2002

El software incluye scripts para inicializar y parar el módem y para que se configure según los protocolos RFC1483/2684 routed y PPP sobre ATM. Estos scripts pueden utilizarse para que el módem se inicialice automáticamente cuando arranque el sistema operativo. El código de las transferencias bulk del USB se ha revisado para que permita reintentos en el caso que falle una transferencia. El módulo del kernel ahora incorpora dos modos de funcionamiento: uno que activa la luz DATA cuando se envían/reciben datos y la reconexión automática de la linea ADSL cuando esta se pierda y otro en que no monitorizará la linea y por tanto, irá más rápido. También puede proporcionar información acerca del módem (versión de firmware, dirección MAC, celdas ATM enviadas, estado de la linea ADSL, ...) a otros programas a través de llamadas ioctl. Podéis ver un ejemplo en el nuevo panel de información que incorpora esta versión y que se ha desarrollado en Kylix. Se ha revisado y ampliado la documentación.

3 de marzo de 2002

Se elimina la necesidad de tener ejecutando el programa 3cioctl. Primera versión que se consigue una velocidad buena, incluso superior a la versión de Windows del propio fabricante. El módulo del kernel utiliza la versión más nueva del driver de Alcatel SpeedTouch que soluciona algunos problemas más. También se utiliza la librería libusb más reciente.

8 de febrero de 2002

Primera versión en que se consigue navegar con el módem aunque a velocidades bajas (yo no pude probarlo por la incompetencia del proveedor Yacom Internet Factory). Esta versión se revisó posteriormente para incluir un programa de inicialización mejor del módem.


4. Críticas recibidas, opiniones

Quiero hacer constar que el diseño de un driver (programa que se encarga de la comunicación entre el sistema operativo y un dispositivo) no es una tarea sencilla. Un ejemplo claro lo tenemos en las diferentes revisiones que sacan los fabricantes de un mismo driver. Esta nota va dedicada a las críticas que recibí por parte de un empleado de la empresa Airtel que apareció en un foro ADSL diciendo que me dedicara a crear juguetes en vez de drivers. Mi intención ha sido dar a los usuarios la posibilidad de utilizar este módem en otro sistema operativo diferente a Windows ya que el fabricante decidió no crear ningún driver más para otros sistemas operativos (con algunas modificaciones hasta se podría utilizar en un Mac OS-X).

Por otra parte, pienso que en España las empresas que ponen a disposición el servicio ADSL solamente les interesa el negocio sin pensar en el beneficio colectivo, el acceso a un servicio de banda ancha como es el ADSL permite un mejor aprovechamiento del tiempo. Poniendo trabas a los usuarios los desanima e impide que la gente se pueda acercar a la información de una manera provechosa. Preguntaos ¿porqué la mayoría de diseños de productos informáticos se realizan en Estados Unidos, es que no hay personal cualificado en España? La formación constante es el eje principal de desarrollo de un país, no obstaculicemos el acceso a la información.

Si los fabricantes compartieran el código fuente de los drivers posibilitaría un mejor desarrollo posterior de otros productos así como favorecer la implementación de un estándar conjunto para acceder a dispositivos de una misma clase (por suerte hay empresas que comparten esta filosofía, como ejemplos tenemos a Sun con el producto Openoffice y a IBM con código abierto de desarrollos para Linux). Con esto se conseguirían drivers más estables y se podría dedicar más tiempo en la investigación de nuevos desarrollos.

Moraleja, no compres/aceptes módems ADSL USB que el fabricante no haya diseñado drivers de código abierto para Linux.


5. La historia, como empezó todo

Por desgracia mía las cosas no empezaron bien y continuaron mal durante mucho tiempo. Todo empezó cuando a finales de septiembre de 2001 me apunté a la atractiva oferta del proveedor de servicios de Internet Yacom Internet Factory (en adelante Yacom). Para saber más sobre este proveedor puedes mirar en http://www.ya.com. Pues bien, al mes siguiente un técnico de Telefónica me instaló el splitter (filtro necesario para poder separar la voz de los datos del módem ADSL en una linea telefónica de voz). El probó la linea y dijo que funcionaba perfectamente, yo aquel día no estaba en casa y le atendió mi madre (me dejaron unos datos de configuración IP, máscara, gateway que no coincidieron con los que más tarde me enviaron los de Yacom). Aunque hubiese estado tampoco podría haber probado la linea porqué el módem no me llegó hasta principios de noviembre. Desde noviembre que no he podido disfrutar de su servicio. Después de muchas llamadas (esperas de 30, 40 y 50 minutos en noviembre sin que nadie me atendiera llamando a su servicio técnico en un número 902), varios emails, me contestaron al cabo de varias semanas, alguna vez que pude contactar con ellos telefónicamente no me supieron resolver el problema, a finales de noviembre me llamaron para decirme que seguramente con la reestructuración que hacía Telefónica tendría que funcionar. Nada de nada, no me funcionó y además me cobraron todo el mes de diciembre, les devolví el recibo y pedí la baja a mediados de enero. En el mes de abril me dieron la baja y ahora estoy con Telefónica. Bastante gente se ha visto afectada por la incompetencia de Yacom con su servicio técnico, no sabiendo presionar a Telefónica para que solucione los problemas, en el caso que se deban a ellos (deseo que haya gente que luche para que en España se ofrezca un buen servicio técnico ADSL, que se cumplan los mismos tiempos de respuesta que hay con el servicio de voz).

Mientras estaba esperando que me solucionaran los problemas empecé a desarrollar un driver en Linux para poder utilizar el módem en el proyecto de final de carrera de Ingeniería en Informática en la Universidad de Girona. Me hacía falta saber que información se enviaba por el puerto USB para programar el driver. Recurrí a un monitor de puerto USB, utilicé el programa Bus Hound de http://www.perisoft.net ya que con el sniffer Snoopy de http://benoit.papillault.free.fr no conseguí que me funcionara (también puedes probar el Snoopy Pro de http://sourceforge.net/projects/usbsnoop/). Por eso, encontrareis que en el código fuente hay códigos que se envían que no se muy bien como funcionan. Partiendo de la información que me proporcionaba el monitor USB y mirando el código fuente de otros drivers similares en Linux conseguí inicializar el módem y enviar y recibir información.


6. Envío/recepción de información

Este módem ADSL utiliza la tecnología ATM para enviar y recibir información. En ATM la información se envía en celdas. Cada celda consta de un secuencia de 53 bytes. De estos 53 bytes los 5 primeros son para la cabecera (control) y los 48 restantes para datos (donde va la información que queremos enviar y que se denomina en inglés el payload). Cuando queremos enviar información, por ejemplo, del protocolo IP tendremos que la información no nos cabe toda en una sola celda, por tanto, tendremos que dividir la información para que quepa en diferentes celdas. Normalmente los primeros bytes de la primera celda de las que hemos dividido la información que queremos transportar nos indicaran el tipo de protocolo utilizado para enviar la información. Para el protocolo RFC2684 routed estos bytes en notación hexadecimal son: 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00. Con estos bytes indicamos que podemos llevar varios protocolos IP, ICMP, PPP, ... Si llevamos el protocolo IP entonces el byte que les seguirá será el 0x45.

A los procesos de separar y unir la información se les llama SAR (Segmentation And Reassembly). La AAL5 (ATM Adaptation Layer type 5) es la capa que se encarga de adaptar la información que tenemos en la capa superior (por ejemplo, protocolo IP) a la capa inferior ATM y viceversa. La AAL5 contiene el SAR.

Consulta el apartado de bibliografía para conocer más en detalle la estructura de una celda ATM así como se encapsula la información en celdas ATM.


7. El módem por dentro

En el módem podemos destacar 2 partes: una parte que se encarga de la comunicación por el puerto USB y otra parte que se encarga de la comunicación por el puerto ADSL. De la comunicación USB se ocupa un chip de la familia EZ-USB fx, concretamente el Cypress CY7C64163-128NC y de la comunicación ADSL se encargan dos chips de Alcatel, concretamente el MTC-20154TQ-C y el MTC-20156TQ-C. El chip EZ-USB se basa en un microprocesador 8051 modificado y el chip MTC-20156 en un procesador ARM. El chip MTC-20154 efectúa el proceso de convertir la información de la señal analógica que le llega por la linea telefónica a información digital para el chip MTC-20156 y el proceso inverso. Es decir, solamente envía y recibe los bits de los bytes de las celdas ATM. El chip MTC-20156 se encarga de la gestión de las celdas ATM y de la comunicación con el EZ-USB a través del protocolo CTRLE de Alcatel. El chip EZ-USB se conecta al chip MTC-20156 mediante su interfaz GPIF programable. Por otra parte, la información del número de serie, dirección MAC y otra información se guarda en una eeprom que se encuentra conectada al EZ-USB a través de un bus I2C.


8. Inicialización del módem

Cuando se conecta el módem al puerto USB se carga una información contenida en una memoria eeprom al chip EZ-USB, luego el módem queda identificado por el vendedor con el código hexadecimal 0x0506, es decir, 3Com y por el producto con el código hexadecimal 0xF002 (el módem ADSL). Este chip tiene la particularidad que permite actualizar el código que contiene (firmware). En Windows, después que el módem se identifique por el puerto USB con estos códigos, se carga el driver 3cf002ld.sys, el cuál envía el firmware para el chip EZ-USB. Una vez enviado el firmware el módem se desconecta y se vuelve a conectar pasando a identificarse con el producto con el código hexadecimal 0xF003. A este proceso se le llama renumeración. Ahora el módem ya está listo para que le enviemos el firmware para el chip MTC-20156 de Alcatel. El driver 3cusblr.sys se encarga de enviar este firmware, de enviar/recibir celdas ATM al/desde el módem y de obtener el estado del módem.

Resumiendo tenemos que el proceso de inicialización es el siguiente:

  1. Enchufamos el módem al puerto USB (consideramos que el sistema operativo está listo antes de enchufar el módem).

  2. Una vez enchufado el procesador 8051 del chip EZ-USB del módem lee la información de la eeprom que tiene conectada y pasa a identificarse como 0xF002. Aún ofrece los interfaces con sus endpoints (ver explicación del siguiente apartado) por defecto que lleva el chip EZ-USB, no se encuentra todavía configurado para su uso.

  3. Paramos el procesador 8051 del chip EZ-USB.

  4. Enviamos el firmware para el chip EZ-USB con la configuración del módem que queremos (interfaces con sus endpoints).

  5. Activamos el procesador 8051 del chip EZ-USB. Ahora el dispositivo pasa a identificarse como 0xF003, es decir, se ha hecho una renumeración del dispositivo.

  6. Enviamos el firmware de inicialización para el chip MTC-20156 de Alcatel (este firmware inicializará los elementos que tiene conectado el chip).

  7. Enviamos el firmware que se encargará de la comunicación para el chip MTC-20156.

En el archivo 3cload.c del driver para Linux podrás comprobar más detalladamente como se realiza el proceso de inicialización del módem. El primer paso indicado como parámetro al ejecutar el fichero 3cload se refiere al envío del firmware para el chip EZ-USB y el segundo paso al envío del firmware para el chip MTC-20156.


9. Interfaces y endpoints de la especificación USB

El driver que controla el módem se comunica con él a través de tuberías (pipes) a las que denominaré canales. Tenemos dos tipos de canales: los de datos (data pipe) y los de control (control pipe). Los de control va a parar a los endpoint de control mientras que los de datos van a parar a los interfaces y el interface a endpoints. Un interface es una colección de endpoints. El interface describe una clase (impresoras, audio, ...). La ventaja de agrupar dispositivos similares en una misma clase permite aprovechar un driver genérico para controlarlo. No obstante, este módem ADSL utiliza una clase y un protocolo USB propietarios (0xff), por eso, no se puede utilizar un driver genérico y se tiene que desarrollar uno específico.

Cada endpoint realiza una tarea (podemos verlo como una función), por ejemplo, en el caso de este módem (una vez inicializado) tenemos:

0x01: endpoint de salida, pedir información (estado de la linea, estado del módem, ...).

0x81: endpoint de entrada, recibir información (estado de la linea, estado del módem, ...).

0x02: endpoint de salida, envío de celdas ATM.

0x82: endpoint de entrada, recepción de celdas ATM.

0x03: endpoint de salida, función que desconozco.

0x83: endpoint de entrada, función que desconozco.

A parte de estos endpoints tenemos un endpoint de control (a la vez de entrada y de salida) el cual es utilizado por el sistema operativo para conocer la identidad del dispositivo, las capacidades del dispositivo y su control. En el caso de este módem también se utiliza para enviar el firmware para el chip EZ-USB. El firmware para el chip de Alcatel se envía por el endpoint 0x01.

Cuando se quiere enviar una celda ATM al módem se tienen que enviar los 53 bytes de la celda seguidos por 11 bytes a 0x00 (a diferencia del Alcatel SpeedTouch que solamente hace falta enviar 53 bytes) por el endpoint 0x02 mientras que cuando se recibe una celda ATM se reciben los 53 bytes exactos de la celda por el endpoint 0x82. A continuación podéis ver una celda ATM que recibió el módem:

000: 00 f0 01 00 2c 30 52 02 01 00 04 06 70 75 62 6c ....,0R.....publ
016: 69 63 a0 45 02 02 04 2c 02 01 00 02 01 00 30 39 ic.E...,......09
032: 30 11 06 0d 2b 06 01 04 01 84 7d 3d 02 01 02 01 0...+.....}=....
048: 00 05 00 30 11

En el siguiente ejemplo podéis apreciar como se ha transformado una petición (envío) del comando ping en celdas ATM:

000: 00 80 02 00 ec aa aa 03 00 00 00 08 00 45 00 00 .............E..
016: 54 00 00 40 00 40 01 83 a0 d9 7e 02 0a d9 7e 02 T..@.@....~...~.
032: 02 08 00 55 20 f4 05 01 00 fb 1f a2 3c 1d 7a 08 ...U .......<.z.
048: 00 08 09 0a 0b 00 00 00 00 00 00 00 00 00 00 00 ................
064: 00 80 02 00 ec 0c 0d 0e 0f 10 11 12 13 14 15 16 ................
080: 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 ......... !"#$%&
096: 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 '()*+,-./0123456
112: 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7...............
128: 00 80 02 02 ec 00 00 00 00 00 00 00 00 00 00 00 ................
144: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
176: 5c 6d 1d 4c a0 00 00 00 00 00 00 00 00 00 00 00 \m.L............

Fijaos como en los primeros bytes de la primera celda aparecen los bytes 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x45 indicando que podemos llevar varios protocolos y que el protocolo que llevamos es el IP. También podéis observar como después de los 53 bytes de cada celda le siguen 11 bytes a 0.

La especificación USB es mucho más extensa e incluye otros conceptos, consulta el apartado de bibliografía en este mismo documento.


10. Requisitos de software

En la página http://sourceforge.net/projects/cp4218 tienes disponible el driver (programa que te permitirá utilizar el módem en Linux). Para utilizar el driver debes tener una distribución de Linux reciente con kernel (el corazón de Linux) versión 2.4. La partición donde se encuentra instalado Linux debe de soportar links (enlaces), por ejemplo, una partición nativa ext2 o ext3, no puede ser una partición FAT. Hay algunas distribuciones como Debian que no proporcionan por defecto el soporte ATM en el kernel ya compilado, deberás de compilar y ejecutar un kernel con el soporte ATM. El driver se puede utilizar en uno de los siguientes protocolos de comunicación:

Si tienes una versión de las primeras del kernel 2.4 consulta en http://www.linux-usb.org/SpeedTouch/howto.html para saber que parches debes de aplicar. También en este lugar encontrarás información sobre las diferentes configuraciones de conexión (PPPoA, PPPoE, RFC1483/2684 bridged).

El driver se encuentra en dos tipos de empaquetados: uno con el codigo fuente y otro ya directamente utilizable (ya está compilado) en unas determinadas distribuciones de Linux. El nombre del paquete que contiene el código fuente del software viene con el formato 3cp4218-aaaa-mm-dd-src.tgz (aaaa se refiere al año con 4 dígitos, mm al mes con 2 dígitos, dd al día del mes con 2 dígitos, src que se trata del código fuente y tgz que está comprimido con el programa gzip y empaquetado con el programa tar). El driver compilado lo encontrarás en formato rpm para una distribución (RedHat, Mandrake, ...), kernel y procesador en concreto. Por ejemplo, 3cp4218-2003-06-07.k2.4.20-8rh.i686.rpm (k2.4.20-8 indica que solo sirve para el kernel 2.4.20-8, teclea uname -r para conocer la versión, rh que es para la distribución RedHat y i686 que es para un procesador compatible con el juego de instrucciones i686, teclea uname -m para conocer tu procesador), 3cp4218-2003-06-07.k2.4.21-0.13mdk.i686.rpm (k2.4.21-0.13 indica que solo sirve para el kernel 2.4.21-0.13, mdk que es para la distribución Mandrake y i686 que es para un procesador compatible con el juego de instrucciones i686). Si tienes el rpm que concuerda exactamente con tu versión de kernel, distribución y procesador entonces solo necesitarás los siguientes paquetes adicionales (te recomiendo que hagas una instalación completa de tu distribución para ahorrarte instalar posteriormente estos, antes de bajarlos de los lugares indicados comprueba que no se encuentren ya en los cds de tu distribución):

Si tienes el código fuente del driver además deberás de instalar estos otros paquetes:

No te olvides de facilitarme la información siguiente después de probar el software para el 3Com ADSL Modem USB:

Distribución utilizada (nombre y versión):
Versión del kernel (tecleando "uname -r" te saldrá):
Procesador (marca, modelo y frecuencia):
Memoria RAM:
Controladora USB utilizada (tecleando "lspci" te aparecerá):
Protocolo de conexión utilizado (RFC1483/2684 routed, PPPoA, PPPoE, RFC1483/2684 bridged):
Nombre del proveedor de la conexión:
Modo de apertura del módem ADSL (5 = ANSI T1.413, 7 = ITU-T G.992.2 (G.LITE), 6 = ITU-T G.992.1 (G.DMT), 8 = multimodo, 3 = otro):
VPI:
VCI:
DNS principal:
DNS secundario:
¿Te funciona bien?
¿Qué problemas tienes?

Ejemplo:

Distribución utilizada (nombre y versión): Redhat 9.0
Versión del kernel (tecleando "uname -r" te saldrá): 2.4.20-18.9
Procesador (marca, modelo y frecuencia): Intel Pentium III 1 Ghz
Memoria RAM: 512 MB
Controladora USB utilizada (teclea "lsmod" para saber si es uhci, ohci, ...): uhci
Protocolo de conexión utilizado (RFC1483/2684 routed, PPPoA, PPPoE, RFC1483/2684 bridged): RFC1483/2684 routed
Nombre del proveedor de la conexión: Telefónica
Modo de apertura del módem ADSL: 5
VPI: 8
VCI: 32
DNS principal: 80.58.0.33
DNS secundario: 80.58.32.97
¿Te funciona bien? Si


11. Instalación del software

11.1 Contenido del software para el 3Com ADSL Modem USB

Antes de proceder a la instalación del software debes de tener en cuenta que las acciones que se detallan deben de realizarse con los privilegios del usuario root (modo superusuario) y que Linux distingue los nombres de archivo/directorio entre minúsculas y mayúsculas. En algunas distribuciones no entras directamente con el usuario root, sino con otro usuario con menos privilegios pero una vez dentro puedes acceder al modo superusuario en uno de los menús del modo gráfico. En el caso de tener el código fuente del driver copia el paquete 3cp4218-aaaa-mm-dd-src.tgz en el directorio /usr, colócate en ese mismo directorio (desde el terminal teclea cd /usr) y ejecuta el comando tar -zxvf 3cp4218-aaaa-mm-dd-src.tgz (si el fichero tiene el tamaño correcto, el que se indica en la web) o tar -xvf 3cp4218-aaaa-mm-dd-src.tgz (si el fichero .tgz ha aumentado de tamaño al bajarlo, se ha descomprimido). En el caso del paquete con el código fuente del driver verás que se ha creado una carpeta llamada 3cp4218 con la siguiente estructura:

bridged -> directorio que contiene programas para RFC1483/2684 bridged

config -> directorio que contiene el programa de configuración

doc -> directorio que contiene la documentación

firmware -> directorio que contiene los archivos correspondientes al firmware

include -> directorio con ficheros de cabecera (.h)

init -> directorio que contiene los programas que permiten iniciar el módem

module -> directorio que contiene el módulo del kernel (driver)

panel -> directorio que contiene el panel de información

sarlib -> directorio que contiene la librería sarlib requerida para el módulo

scripts -> directorio que contiene los scripts que permiten activar y desactivar el módem según la configuración

COPIANDO -> traducción al español de la licencia GPL

COPYING -> archivo de la licencia GPL del código fuente (inglés)

LEEME -> archivo en español indicando donde se encuentra la documentación

Makefile -> archivo Makefile para compilar e instalar todos los programas

README -> archivo en inglés indicando donde se encuentra la documentación


Dentro del directorio config se encuentran los archivos siguientes:

3cconfig.c -> código fuente del programa de configuración (protocolo utilizado, VCI, VPI, ...)

3cconfig.glade -> interface utilizado por el programa de configuración

Makefile -> Makefile para compilar los programas e instalarlos


Dentro del directorio init se encuentran los archivos siguientes:

3cextract.c -> código fuente del programa que extrae el firmware del driver Windows para el chip EZ-USB (no hace falta ya que ahora los archivos del firmware se incluyen con el driver con el permiso por escrito de 3Com Iberia)

3cioctl.c -> código fuente del programa que permite activar/desactivar la recepción de celdas ATM por parte del driver, también permite obtener información diversa sobre el módem y su estado

3cload.c -> código fuente del programa que envía el firmware para el chip EZ-USB y para el chip de Alcatel

Makefile -> Makefile para compilar los programas e instalarlos


Dentro del directorio module se encuentran los siguientes archivos:

3cp4218.c -> código fuente del módulo del kernel del Alcatel SpeedTouch modificado para utilizarlo con el 3Com ADSL Modem USB

Makefile -> Makefile para compilar el módulo del kernel e instalarlo


Dentro del directorio panel se encuentran los archivos siguientes:

3cp4218-tux-small-left-35.xpm -> imagen utilizada en el panel de información

3cpanel.c -> código fuente del panel que muestra información acerca del módem

3cpanel.glade -> interface utilizado por el panel de información

Makefile -> Makefile para compilar los programas e instalarlos


Dentro del directorio scripts se encuentran los archivos siguientes:

3cextract.sh -> script que ejecuta el programa que extrae el firmware del driver Windows para el chip EZ-USB (no hace falta ya que ahora los archivos del firmware se incluyen con el driver con el permiso por escrito de 3Com Iberia)

3cload.sh -> script que inicializa el módem y carga el módulo del kernel

3cnet2down.sh -> script que desactiva la configuración de red para el protocolo PPP sobre ATM

3cnet2up.sh -> script que configura la red para el protocolo PPP sobre ATM

3cnet3down.sh -> script que desactiva la configuración de red para el protocolo RFC1483/2684 bridged

3cnet3up.sh -> script que configura la red para el protocolo RFC1483/2684 bridged

3cnet4down.sh -> script que desactiva la configuración de red para el protocolo PPP sobre Ethernet

3cnet4up.sh -> script que configura la red para el protocolo PPP sobre Ethernet

3cnetdown.sh -> script que desactiva la configuración de red para el protocolo RFC1483/2684 routed

3cnetup.sh -> script que configura la red para el protocolo RFC1483/2684 routed

3cstart.sh -> script que inicializa el módem, carga el módulo del kernel y activa la configuración de red según protocolo

3cstop.sh -> script que desactiva la configuración de red según protocolo y descarga el módulo del kernel

3cunload.sh -> script que descarga el módulo del kernel

Makefile -> Makefile para instalar los scripts


Los directorios config, init, panel y scripts incluyen los directorio po y locale para el soporte multiidioma. El directorio po contiene la plantilla de mensajes y su traducción al español. El directorio locale contiene los mensajes traducidos y ya compilados para ser utilizados con los programas.

Para los programadores comentar que se ha cambiado el include "malloc.h" por el "slab.h" dentro del archivo sarlib.h de la librería sarlib original por encontrase el "malloc.h" obsoleto. También se ha adaptado el archivo Makefile a la nueva recomendación sobre directorio de los ficheros de cabecera (includes). El fichero sarlib.c se ha adaptado a kernels recientes que suprimen la estructura tx_inuse.

Si tienes el driver ya compilado en un paquete rpm para tu distribución-versión de kernel-procesador entonces puedes ver la información y el contenido de este tecleando rpm -qilp nombre_paquete_con_driver_compilado.rpm


11.2 Compilación e instalación

Antes de proceder a la compilación/instalación del software necesitamos tener instalados todos los paquetes requeridos. En http://sourceforge.net/projects/cp4218 encontrarás la mayoría de estas herramientas si no las tuvieras en los cdroms de tu distribución.

Buena parte de distribuciones tienen las herramientas y librerías dentro de paquetes rpm (para facilitar la instalación y desinstalación de ellas). Ejemplo de ello son RedHat, Mandrake y Suse. No obstante, puede que te sea más fácil utilizar los asistentes/programas de tu distribución para instalar estas herramientas y librerías, en el caso de Suse puedes utilizar la herramienta Yast2. Puedes instalar los paquetes rpm de la siguiente manera:

rpm -Uvh nombre_paquete.rpm (instalará o actualizará un paquete rpm, debes encontrarte en el mismo directo donde se encuentra el paquete rpm, este se instalará en el directorio correcto)

Si quieres instalar una versión vieja del mismo paquete porqué funciona mejor que la nueva entonces deberás forzar la instalación:

rpm -Uvh –force nombre_paquete.rpm

(force va con dos guiones delante)

Si te sucede que no puedes instalar el paquete aún forzándolo entonces puede que tengas que borrar algún paquete anterior. Utiliza el siguiente comando:

rpm -e nombre_paquete

(sin la extensión rpm y sin el tipo de procesador i586, i386, ejemplo: rpm -e ppp-2.4.1-10, puedes utilizar rpm -q ppp para conocer la versión del paquete a desinstalar)

Si quieres ver la información de un paquete rpm no instalado teclea lo siguiente:

rpm -qip nombre_paquete.rpm

Lo mismo para una paquete rpm ya instalado:

rpm -qi nombre_paquete_sin_procesador_ni_extensión

Si quieres ver el contenido de un paquete rpm no instalado teclea lo siguiente:

rpm -qlp nombre_paquete.rpm

Lo mismo para una paquete rpm ya instalado:

rpm -ql nombre_paquete_sin_procesador_ni_extensión

Si por algún motivo te interesa un archivo del paquete rpm lo puedes obtener con la siguiente instrucción:

rpm2cpio nombre_paquete.rpm | cpio -idv nombre_archivo_que_quieres

Si quieres todos los archivos teclea:

rpm2cpio nombre_paquete.rpm | cpio -idv

(se descomprimirán en el directorio actual)

Si quieres conocer la versión de un paquete instalado teclea:

rpm -q nombre_paquete_sin_versión_ni_procesador_ni_extensión

Ejemplos:

rpm -Uvh libusb-0.1.6-3.i386.rpm (instalación de la librería libusb para ejecutar el driver)

rpm -Uvh libusb-devel-0.1.6-3.i386.rpm (instalación de la librería libusb para compilar el driver)

rpm -Uvh linux-atm-2.4.1-1.i386.rpm (instalación de las herramientas atm para ejecutar y compilar el driver)

rpm -e ppp-2.4.1 (desinstalación del paquete ppp)

rpm -Uvh ppp-2.4.1-6plf.i586.rpm (instalación nuevo ppp, obligatorio si vas a utilizar el protocolo ppp)

rpm -Uvh kernel-source-2.4.20-8.i386.rpm (instalación del código fuente del kernel necesario para compilar el driver)

rpm -Uvh libglade-0.17-11.i386.rpm (instalación de la librería libglade para ejecutar el panel de información)

rpm -Uvh libglade-devel-0.17-11.i386.rpm (instalación de la librería libglade-devel para compilar el panel de información)

rpm -Uvh libxml-1.8.17-8.i386.rpm (instalación de la librería libxml para ejecutar el panel de información)

rpm -Uvh libxml-devel-1.8.17-8.i386.rpm (instalación de la librería libxml-devel para compilar el panel de información)

rpm -q libusb (para ver la versión de la librería libusb que tenemos instalada)

rpm -q libusb-devel (para ver la versión de la librería libusb-devel que tenemos instalada)

Si en tu distribución te falta algún rpm este lo puedes encontrar en:

http://rpm.pbone.net/

http://rpmfind.net/


Para la distribución Debian puedes optar por instalar los paquetes que puedes encontrar en:

http://www.debian.org/distrib/packages

Para instalar un paquete en concreto utiliza: dpkg -i nombre_paquete.deb

Para instalar un paquete y sus dependencias: apt-get install nombre_paquete_sin_procesador_ni_extensión

Para ver los paquetes instalados: dpkg -l "*"

Ejemplos:

dpkg -i libusb-0.1-4_0.1.5-4_i386.deb (instalación de la librería libusb para ejecutar el driver)

dpkg -i libusb-dev_0.1.5-4_i386.deb (instalación de la librería libusb para compilar el driver)

dpkg -l "libusb*" (lista los paquetes instalados que empiezan por libusb)

dpkg -i kernel-source-2.4.18_2.4.18-9_all.deb (instalación del código fuente del kernel necesario para compilar el driver, probablemente tendrás (después de la instalación de este paquete) un archivo kernel*.bz2 en /usr/src para descomprimir con bunzip2 y después desempaquetar con tar)

apt-get install libusb-0.1-4 (instalación de la librería libusb para ejecutar el driver)

apt-get install libusb-devel (instalación de la librería libusb para compilar el driver)

apt-get install atm-dev (instalación de las herramientas atm para compilar el driver)

apt-get install atm-tools (instalación de las herramientas atm para ejecutar el driver)

apt-get install kernel-source-2.4.18 (instalación del código fuente del kernel 2.4.18)

o bien instalar los rpm con la herramienta alien:

apt-get install alien (esto instalará el programa alien)

alien nombre_paquete.rpm (esto instalará el paquete rpm indicado mediante el programa alien)


Una vez tengas todas las herramientas y librerías instaladas procederemos a compilar e instalar el driver si tienes el código fuente de este o a instalar directamente el driver si tienes el rpm que contiene el driver ya compilado. En este último caso te basta teclear rpm -Uvh nombre_paquete_con_driver_compilado.rpm para instalar el driver (debes encontrarte en el directorio donde se encuentra el paquete). Una vez instalado el rpm ya puedes ir directamente al apartado de configuración 11.3 de este manual. Si tienes el código fuente del driver antes de compilarlo se deben seguir los siguientes pasos para adaptar la configuración del código fuente del kernel al kernel que estás ejecutando:

  1. Normalmente el código fuente del kernel lo habrás instalado en un directorio dentro de /usr/src. Este directorio seguramente tendrá un nombre del estilo linux-2.4.x o linux-2.4.x-y donde x corresponde a la versión de un kernel 2.4 e y a la revisión (por ejemplo, linux-2.4.20-8). Fíjate que este nombre debe coincidir exactamente con la versión del kernel que ejecutas (teclea uname -r para conocer la versión que estás ejecutando actualmente). Si no coincidiera es muy probable que la ejecución del driver compilado con esta versión te produzca un cuelgue del sistema. Una vez hayas comprobado que tienes el código fuente del kernel correcto crearemos un enlace de la siguiente manera:

cd /usr/src (nos colocamos en el directorio /usr/src)

ln -sf linux-2.4.x-y linux (creamos un enlace al directorio correspondiente a tu versión, ahora se puede acceder al directorio /usr/src/linux como si accedieras a /usr/src/linux-2.4.x-y, si existiera un enlace anterior puedes borrarlo con rm linux y después creas el enlace con ln -sf linux-2.4.x-y linux)

  1. Colócate dentro del directorio linux:

cd linux

  1. Ejecuta la siguiente orden (no es necesario para RedHat, Mandrake y Suse):

make mrproper

  1. Ejecuta el comando siguiente y después de marcar las opciones guarda la configuración (no es necesario para RedHat, Mandrake y Suse):

make menuconfig (para configurar en modo texto o bien "make xconfig" para configurar en modo gráfico)

Debes de escoger las opciones siguientes:

Code maturity level options

[*] Prompt for development and/or incomplete code/drivers

Loadable module support

[*] Enable loadable module support

[*] Set version information on all module symbols

[*] Kernel module loader

Networking options

<*> Packet socket

<*> Unix domain sockets

[*] TCP/IP networking

[*] Asynchronous Transfer Mode (ATM)

USB support

<*> Support for USB

[*] Preliminary USB device filesystem

<M> UHCI

<M> OHCI

En el caso de utilizar RFC1483/2684 routed debes de escoger también estas opciones:

Networking options

[*] Asynchronous Transfer Mode (ATM)

[*] Classical IP over ATM

En el caso de utilizar PPP sobre Ethernet debes de escoger también estas opciones:

Networking options

[M] RFC1483/2684 Bridged protocols

Network Device Support

<M > PPP (point-to-point protocol) support

<M> PPP Deflate compression

<M> PPP over Ethernet (EXPERIMENTAL)

En el caso de utilizar PPP sobre ATM debes de escoger también estas opciones:

Network Device Support

<M > PPP (point-to-point protocol) support

<M> PPP Deflate compression

<M> PPP over ATM

Y debes de desactivar la siguiente opción (para todos los casos):

Processor type and features

[ ] Symmetric multi-processing support

  1. Después de guardar la configuración tecleamos lo siguiente (no es necesario para RedHat, Mandrake y Suse):

make dep

  1. Este paso solo es aplicable a la distribución RedHat:

cp ./configs/kernel-2.4.20-i686.config .config

(en el caso de utilizar otra compilación de kernel cambia el fichero kernel-2.4.20-i686.config por el que corresponda, mira dentro del directorio configs)

  1. Este paso solo es aplicable a la distribución Suse:

cp /boot/vmlinuz.config .config


Ahora ya podemos proceder a compilar el software del módem. Para ello haz lo siguiente:

  1. Nos vamos al directorio del driver:

cd /usr/3cp4218

  1. Desde ese directorio compilamos e instalamos el software con el siguiente comando:

make


Si todo ha ido bien los programas y scripts se habrán copiado en /usr/sbin y el módulo del kernel se habrá instalado bajo un directorio de /lib/modules correspondiente a la versión del kernel que estés ejecutando. Ahora solo queda poner la configuración del driver.


11.3 Configuración del entorno

Para aquellos usuarios que tuvieran una versión anterior del driver deben de desinstalar el servicio 3cp4218 antes de proceder a la instalación del nuevo driver (en esta nueva versión el servicio pasa a llamarse cp4218), la desinstalación debe de realizarse con los scripts viejos.

Es preferible que tengas el sistema de archivos USB montado antes de iniciar el módem (aunque en el script de arranque del módem lo montará en el caso que no se encuentre montado). Si utilizas una distribución que no carga automáticamente el controlador USB y monte el sistema de archivos tendrás que añadir al fichero /etc/fstab la linea siguiente y ejecutar el comando mount -a (normalmente no tendrás que añadir esta linea ni ejecutar el comando mount, antes de hacer estos cambios prueba a instalar los paquetes kudzu y hotplug):

none /proc/bus/usb usbdevfs defaults 0 0

Si tienes un kernel reciente entonces utiliza usbfs en vez de usbdevfs.

Ahora ya puedes conectar el módem si no lo tuvieras conectado. Comprueba que tecleando cat /proc/bus/usb/devices te aparezca en una parte del texto mostrado algo similar a lo siguiente:

T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1
P: Vendor=0506 ProdID=f002 Rev= 0.01
C:*#Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I: If#= 0 Alt= 1 #EPs=13 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl= 10ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=06(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=88(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=08(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=89(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=09(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=8a(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=0a(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
I: If#= 0 Alt= 2 #EPs=13 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl= 10ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=86(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=06(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=88(I) Atr=01(Isoc) MxPS= 256 Ivl= 1ms
E: Ad=08(O) Atr=01(Isoc) MxPS= 256 Ivl= 1ms
E: Ad=89(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=09(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=8a(I) Atr=01(Isoc) MxPS= 16 Ivl= 1ms
E: Ad=0a(O) Atr=01(Isoc) MxPS= 16 Ivl= 1ms

El siguiente paso es proceder a la configuración. Se puede realizar editando directamente el archivo /etc/3cp4218 y el archivo /etc/resolv.conf o bien ejecutando el programa 3cconfig. Si ejecutamos 3cconfig nos aparecerá una pantalla como la siguiente:



Primero debemos escoger el tipo de protocolo utilizado (el que utiliza tu proveedor). El apartado de caminos lo podemos dejar tal cual y pasar al modo de apertura. Si estás familiarizado con el programa en Windows de 3Com, la configuración de su modo de apertura (openmode en la pestaña de propiedades del módem) corresponde a la siguiente equivalencia:

0 -> 3 - Otro

1 -> 5 - ANSI T1.413

2 -> 7 - ITU-T G.992.2 (G.LITE)

También puedes optar por seguir el procedimiento que indico a continuación. Si sabes que tu conexión utiliza splitter debes seleccionar 5 - ANSI T1.413 o bien 6 - ITU-T G.992.1 (G.DMT) y si utiliza microfiltros (pequeña caja que hemos añadido en el teléfono, FAX, ... para que no interfieran sus señales con el ADSL) debes seleccionar 7 - ITU-T G.992.2 (G.LITE). Si desconoces el tipo entonces selecciona 8 - Multimodo. Si aún así el módem no consigue conectar entonces selecciona 3 - Otro.

A continuación indicaremos los datos de VPI y VCI. Si tienes una conexión con Telefónica o Yacom deja los valores 8 y 32 que ya aparecen por defecto. Después y en el caso de RFC1483/2684 enrutado introduciremos nuestra dirección IP pública asignada por el proveedor (una vez introducida la IP y si está rellena la máscara y el gateway vacío entonces el gateway se calculará automáticamente), la máscara utilizada y el gateway.

Finalmente solo nos queda introducir los servidores DNS que utilizamos (aquellos que nos permiten conocer la IP de un ordenador a partir de un nombre), normalmente indicaremos el servidor primario y el secundario (en formato numérico, por ejemplo, 194.224.52.36 para el servidor primario de DNS y 194.224.52.37 para el servidor secundario de DNS).

Te dejo unas cuantos servidores DNS que podrás utilizar dependiendo de tu proveedor:

Para Telefónica, Yacom, Infonegocio, Terra:

194.224.52.36 (ns1.telefonica-data.com) y 194.224.52.37 (ns2.telefonica-data.com).
194.179.1.100 (minerva.ttd.net) y 194.179.1.101 (artemis.ttd.net).
213.4.132.1 (dns1.terra.es) y 213.4.141.1 (dns2.terra.es).

Para Wanadoo:

62.37.237.140 (dns1.wanadoo.es) y 62.37.236.200 (dns2.wanadoo.es).

Para Eresmas:

62.81.16.197 (ramblas.red.retevision.es) y 62.81.0.1 (mayor.red.retevision.es).

Para Arrakis:

195.5.64.2 (ns1.landsraad.net) y 195.5.64.6 (ns2.landsraad.net).


En el caso de utilizar una conexión PPP sobre Ethernet (Telefónica con IP dinámica) deberás de configurar los siguientes archivos (debes desinstalar el paquete ppp de tu distribución si este no tiene el plugin pppoe.so e instalar uno que lo tenga, si utilizas el paquete rp-pppoe entonces no hace falta teclear los archivos siguientes y debes configurar la conexión ejecutando adsl-setup e indicando que utilizarás el interface nas0):

Archivo /etc/ppp/options :

lock
defaultroute
noipdefault
noauth
holdoff 4
maxfail 25
persist
asyncmap 0
name adslppp@telefonicanetpa
user adslppp@telefonicanetpa
lcp-echo-interval 2
lcp-echo-failure 7
plugin /usr/lib/pppd/2.4.1/pppoe.so
nas0

El directorio /usr/lib/pppd/2.4.1/ indicado para el archivo pppoe.so puede diferir según tu instalación, busca donde se encuentra, por ejemplo tecleando "find /usr/lib/pppd/ -name pppoe.so".


Archivo /etc/ppp/chap-secrets:

adslppp@telefonicanetpa * adslppp

(entre adslppp@telefonicanetpa y * hay un tabulador y entre * y adslppp también)


Archivo /etc/ppp/pap-secrets:

adslppp@telefonicanetpa * adslppp

(entre adslppp@telefonicanetpa y * hay un tabulador y entre * y adslppp también)


Si tu proveedor utiliza PPP sobre Ethernet y no es Telefónica entonces cambia adslppp@telefonicanetpa por el usuario asignado y adslppp por el password asignado.


En el caso de utilizar una conexión PPP sobre ATM (Eresmas, Arrakis) deberás además de seguir la explicación siguiente:

Debes de utilizar una versión de ppp con el plugin pppoatm (si tienes una versión más reciente que no soporte el plugin pppoatm desinstala e instala el paquete rpm que encontrarás en http://prdownloads.sourceforge.net/accessrunner/ppp-2.4.1-6plf.i586.rpm?download).

Tienes que modificar el fichero options que se encuentra en el directorio /etc/ppp con los siguientes datos:

lock
defaultroute
noipdefault
noauth
sync
noaccomp
nopcomp
noccp
novj
holdoff 4
persist
maxfail 25
passive
asyncmap 0
lcp-echo-interval 2
lcp-echo-failure 7
name any
user any
plugin /usr/lib/pppd/2.4.1/pppoatm.so
VPI.VCI

Tienes que sustituir VPI y VCI por el valor que tenga tu proveedor, para Arrakis la linea quedará como 0.35 y para Eresmas 8.35. Además en el caso de Eresmas debes de sustituir any en name y user por el usuario y contraseña proporcionada (name erexxxx, user erexxxx o name rtxxxx, user rtxxxx).

El directorio /usr/lib/pppd/2.4.1/ indicado para el archivo pppoatm.so puede diferir según tu instalación, busca donde se encuentra, por ejemplo tecleando "find /usr/lib/pppd/ -name pppoatm.so".

Puede que también tengas que modificar el user@domain y el password de los archivos chap-secrets y pap-secrets por el valor que te haya asignado tu proveedor (para Eresmas/Retevisión se necesitan estos archivos):

# client server secret IP addresses
user@domain * password

(entre user@domain y * hay un tabulador y entre * y password también)


Para PPP puedes utilizar que coja los servidores de DNS automáticamente si creas un enlace como el siguiente en vez de ponerlos a mano dentro del fichero /etc/resolv.conf (siempre y cuando tengas usepeerdns en el fichero /etc/ppp/options):

ln -sf /etc/ppp/resolv.conf /etc/resolv.conf

Una vez realizada la configuración ya podemos activar el módem iniciando por ejemplo el equipo si has realizado la instalación con el paquete rpm o bien ejecutando el comando 3cstart.sh si has compilado el driver. En este último caso verás si la inicialización se ha realizado con éxito porqué te aparecerá la linea /usr/sbin/3cload.sh con éxito (successful) y la linea /usr/sbin/3cnetXup.sh con éxito (successful) donde X canviará o no aparecerá según el protocolo utilizado. Para el rpm verás que al iniciar el ordenador aparecerá en un momento "Starting cp4218" y ok o done si se ha inicializado todo correctamente.
Si al ejecutar 3cstart.sh obtienes un error indicando que no encuentra el programa atmarpd entonces localízalo con find / -name "atmarpd" y añade el camino en la variable ATM_PATH del fichero de configuración /etc/3cp4218 o bien utiliza el programa 3cconfig.
Para comprobar que el driver se ha cargado correctamente, si tecleas lsmod tendría que aparecer 3cp4218 (driver normal) o 3cp4218dbg (driver que muestra información de debug). Si tienes algún problema puedes ejecutar dmesg y verás que mensajes da o bien comprobar el archivo /var/log/messages o /var/log/syslog según distribución de Linux (podrás comprobarlo siempre y cuando utilices el driver en modo debug). También en /proc/net/atm/ tendría que haber un fichero con el nombre 3Com ADSL Modem USB:0, dentro de él hay las estadísticas de transmisión de información (por ahora a cero).

Al inicializar el módem puede aparecerte en el archivo de log de tu sistema el mensaje "atmsvc: no signaling demon". Este mensaje aparece porqué se utiliza un circuito permanente (PVC) en vez de uno dinámico (SVC), puedes ignorar el mensaje.

Si no ha habido ningún error tiene que aparecerte en el fichero /proc/net/atm/pvc un texto parecido a este:

Itf VPI VCI AAL RX(PCR,Class) TX(PCR,Class)
0 8 32 5 0 UBR 0 UBR CLIP, Itf:atm0, Encap:LLC/SNAP

y en el fichero /proc/net/atm/arp:

IPitf TypeEncp Idle IP address ATM address
atm0 PVC LLC 45 217.126.2.2 0.8.32

Cuando quieras apagar el ordenador o desconectar el módem antes debes de ejecutar el comando 3cstop.sh si es que lo has arrancado manualmente, es decir, tecleando 3cstart.sh. En el caso del rpm al apagar el equipo este ya lo hará automáticamente porqué se ha instalado como un servicio. En el caso de la compilación del driver si quieres que se ejecute automáticamente los scripts 3cstart.sh y 3cstop.sh al encender y apagar la máquina debes de instalar el servicio cp4218 (hazlo una vez hayas comprobado que el driver te funciona correctamente). Para ello vete al directorio scripts del driver y desde allí ejecuta make add_service. Si algún día debes de eliminar el servicio ves al mismo directorio y ejecuta make remove_service. Si por algún motivo al arrancar Linux no tuvieras conectado el módem, entonces el servicio de inicialización del módem no se cargaría. Aún así puedes ejecutar el servicio más tarde, conectando el módem y arrancando el servicio mediante una aplicación de arranque SysV o bien ejecutando /etc/init.d/cp4218 start. Si quieres parar el servicio puedes hacerlo tecleando /etc/init.d/cp4218 stop (el directorio /etc/init.d puede variar según la distribución que utilices, ver fichero Makefile del directorio scripts). Si al arrancar Linux tuvieras problemas debidos a la utilización de un kernel nuevo o bien por la carga automática del driver puedes arrancar sin cargar el driver tecleando "linux single" en la linea de boot (cuando se carga el gestor de arranque, justo antes de arrancar Linux) o bien utilizando la opción failsafe del menú del arranque (esto dependerá del gestor de arranque utilizado).

El driver tiene dos modos de velocidad (normal y máxima) además de poder estar en modo debug o sin él, por tanto, tenemos 4 posibilidades de ejecución. En el modo de velocidad normal (modo por defecto) el módem intentará reconectarse si se pierde la conexión de la linea ADSL además de indicar si se envían o reciben datos encendiendo la luz DATA mientras que en el modo de velocidad máxima no ofrecerá estas características, no obstante, hay la posibilidad de hacer que se reconecte ejecutando el comando 3cioctl 4 (el modo de velocidad máxima ofrece mejores tiempos de respuesta y carga menos la CPU pero no reconectará automáticamente en caso de pérdida de conexión). La modalidad de ejecución del driver se puede cambiar editando el fichero /etc/3cp4218.


11.4 Panel de información

En el directorio panel del directorio 3cp4218 hay el software que muestra un panel de información del módem, parecido al que hay en Windows del propio fabricante del módem. Para poderlo utilizar previamente debe estar cargado el módulo del kernel (3cp4218 o 3cp4218dbg). Para la ejecución de este programa se requiere tener instalada la librería libglade y libxml. Una vez compilado, instalado y cargado el driver del módem puedes teclear 3cpanel para que te aparezca.

El panel de información consta inicialmente de 3 pestañas: versión, transmisión/configuración y estado ADSL. Pulsando el botón avanzado aparece una cuarta pestaña con información para usuarios avanzados (permite conocer la calidad de la linea y los errores que se han producido en el medio).

La pestaña versión muestra la versión del módulo del kernel que se está utilizando, la versión del propio panel de información, la versión del hardware que se encuentra en el módem, la versión del firmware de Alcatel que se está utilizando, la dirección MAC y el número de serie del módem. Ver imagen siguiente:


La pestaña transmisión/configuración da información acerca del número de celdas ATM enviadas/recibidas, el número de celdas OAM loopback recibidas correctamente y destinadas a nosotros, la dirección VCI y VPI que se utilizan actualmente. El módulo del kernel permite enviar celdas ATM aunque no esté encendida la conexión ADSL, por tanto, podemos saber si hay algún proceso que intenta enviar información al driver viendo como se va incrementando el número de celdas ATM enviadas. En el caso de no tener bien configurada la conexión de red esta pestaña nos mostrará el valor 0 para la dirección VCI y VPI.. Ver imagen siguiente:


La pestaña estado ADSL nos informa si nuestro módem se encuentra conectado con otro módem, el modo de apertura que el módem utiliza para conectar, el modo en que opera actualmente, el camino de datos utilizado, el número de desconexiones que se han producido y la velocidad máxima de bajada y subida por la linea ADSL. En el caso de no haber conexión solo se mostrará el estado de la conexión, el modo de apertura y el número de conexiones perdidas. Si el módem se encuentra conectado muestra un indicador led en verde, si no está conectado un indicador led en rojo y si está probando de conectar un indicador led en amarillo. Ver imagen siguiente:


El botón borrar nos sirve para poner a cero las estadísticas (celdas ATM enviadas/recibidas, celdas OAM loopback recibidas, conexiones perdidas). El mismo botón avanzado nos sirve para mostrar y ocultar la pestaña avanzado. Ver imagen siguiente:



11.5 Actualización del driver

Para instalar una versión nueva del driver te basta con desinstalar el driver anterior e instalar el nuevo. En el caso del paquete rpm elimina el driver anterior con rpm -e 3cp4218 (la configuración del fichero /etc/3cp4218 queda guardada en /etc/3cp4218.rpmsave) e instala el nuevo con rpm -Uvh nombre_driver_compilado.rpm En el de tener el código fuente del driver colócate en el directorio /usr/3cp4218 y teclea make uninstall, a continuación borra el directorio completo del driver (cólocate en /usr con cd /usr y borra el directorio completo del directorio 3cp4218 con rm -rf 3cp4218), después descomprime el paquete tgz desde el directorio /usr tal como se indica en el apartado 11.1 de este manual.


12. Información para desarrolladores

Esta información se refiere a las personas que quieran modificar alguna parte del código fuente.

El software se ha divido en varias partes para proporcionar un mejor rendimiento. Por una parte tenemos el software que inicializa el módem (3cload) que una vez inicializado no interviene más y por otra parte el módulo del kernel (3cp4218) que solamente se encarga de la gestión del envío/recepción de celdas ATM así como la reconexión ADSL si se pierde la linea y otras estadísticas. La parte que se ejecuta constantemente se ha desarrollado como un módulo del kernel para conseguir mayor rendimiento en vez de una aplicación en espacio de usuario. Aunque el módem sea plug&play se ha constituido unos scripts de inicialización para no tener que poner demasiado código en el driver del kernel (la inicialización una vez realizada ya no la vamos a utilizar más, consume espacio innecesario).

El módulo del kernel, tal como está diseñado actualmente, consume entre un 5 y un 11% de CPU en un Pentium III a 800Mhz con 512MB de RAM. Esto se puede mejorar cambiando el sistema de polling actual de la rutina recepción de celdas ATM (actualmente se utiliza la misma que la del Alcatel Speedtouch USB de Alcatel). No obstante, tal como está ahora, proporciona el mayor rendimiento para conexiones de juego o que requieran un tiempo de respuesta lo más rápido posible.

El comando make del directorio init tiene varias posibilidades:

make -> compila los programas sin mensajes de debug

make debug -> compila los programas con mensajes de debug (los nombres de los ejecutables acaban en dbg)

make debugt -> compila los programas con mensajes de debug y muestra la información que se envía por el puerto USB (los nombres de los ejecutables acaban en dbgt)

make clean -> elimina los programas ejecutables que se han generado tras la compilación

make install -> instala los ejecutables que no tienen información de debug

make uninstall -> desinstala los programas instalados con make install

El comando make del directorio module tiene varias posibilidades:

make -> compila el módulo con y sin información de debug (3cp4218dbg y 3cp4218 respectivamente)

make clean -> elimina archivos que se han generado después de la compilación (ejecutables y temporales)

make install -> instala el driver con y sin información de debug (3cp4218dbg y 3cp4218 respectivamente)

make uninstall -> desinstala los programas instalados con make install

Dentro del directorio scripts se encuentra el directorio hotplug con la configuración y scripts para utilizar el módem con el paquete hotplug, estos no acaban de funcionar. Tiene el problema que pueden activarse antes que la red esté disponible, por eso, me decidí por arrancar/parar el módem como un servicio en vez de utilizar el paquete hotplug.

El programa 3cioctl tiene la posibilidad de proporcionar información del módem si tenemos cargado el driver (3cp4218 o 3cp4218dbg). Para ello, teclea "3cioctl 3". No obstante, es preferible utilizar el panel de información para obtener la información ya que produce menos problemas de timeout en las transferencias bulk del driver pero aún así este comando puede proporcionarte alguna información adicional de códigos que el panel de información no proporciona.

El programa 3cload permite también monitorizar la linea ADSL si no tenemos el driver (3cp4218 o 3cp4218dbg) cargado. Nos puede servir para comprobar si en nuestra linea se producen cortes. Se ejecuta tecleando "3cload 3".

Algunas posibles mejoras que quedan pendientes:

Información que haría falta:

Hace falta gente que se encargue de:


13. Bibliografía

En este apartado comento las direcciones más interesantes que he encontrado acerca del bus USB, la tecnología ATM, el servicio ADSL y el diseño y desarrollo de drivers. Hay muchas otras direcciones, pero creo que estas os pueden ser útiles:


USB:


ATM:


ADSL:

En http://www.protocols.com puedes encontrar información concisa y breve sobre diferentes protocolos (consulta la explicación sobre ATM).


Diseño y desarrollo:

Driver de Alcatel para el Alcatel SpeedTouch USB en Linux:


Driver de Benoit Papillault para el Alcatel SpeedTouch USB en Linux:


Driver para el modem ECI Hi-Focus ADSL USB en Linux:


Driver para el modem Sagem F@ast 800/840 en Linux:


Driver para el módem Olitec Modem USB ADSL Versión 3 en Linux:


Driver para el módem Conexant AccessRunner USB en Linux:

El módem Alcatel SpeedTouch USB se parece al 3Com ADSL Modem USB aunque tiene diferencias importantes que hacen que no se puedan utilizar los mismos drivers y hace falta unas modificaciones. La inicialización del módem es totalmente diferente pero para el envío/recepción de celdas ATM he aprovechado el módulo del driver de Alcatel con unas cuantas modificaciones.


Otros:


Documentos:


Lista de módems ADSL: http://www.iol.unh.edu/consortiums/adsl/adsl_company.html

Lista de chips ADSL: http://www.infotech.tu-chemnitz.de/chipweb/dsl/


En abril de 2002 la división de microelectrónica de Alcatel pasó a manos de STMicroelectronics (http://www.st.com)