speedtouch project

Programs Speedtouch Project Snoopy Project eciadsl Project The bread recipe Source Mage BeOS My resume My blog Notes Donation
Programs
Speedtouch Project
Snoopy Project
eciadsl Project
The bread recipe
Source Mage
BeOS
My resume
My blog
Notes
Donation
en fr

Benoît Papillault, Last update: 2001-03-31

Warning

This page is outdated and is kept only for historical reasons, you can find the latest speedtouch driver on sourceforge, at the following address: http://speedtouch.sourceforge.net/.

There are two drivers for Speedtouch USB/330 modem under Linux:

Modem ALCATEL ADSL SpeedTouch USB

Download

The latest version of all my source code is available in speedtouch.tar.gz. Be warned that it's the latest source code, usually updated daily, but it may not be a working version. Make your choice!

Utilities

The following utility allows you to upload the modem's microcode. To compile it, you will need the libusb library installed. Once the microcode has been uploaded, you have to initialize your ADSL line with the following utility modem_diag.

To check your USB support under Linux and the libusb:

  • lsmod should display: usbcore and one of the following modules: usb-uhci, uhci or ohci. If this is not the case, recompile your kernel as needed and do a "modprobe usbcore usb-uhci"
  • mount should display "none on /proc/bus/usb type usbdevfs (rw)" in one of its ouput lines. If this is not the case, add the following line to your /etc/fstab:
    none /proc/bus/usb usbdevfs defaults  0 0
    
    and type "mount -a"
  • "cat /proc/bus/usb/devices" should list all your USB devices in the following form. Check the presence of the Alcatel modem.
    T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  3 Spd=12  MxCh= 2
    B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=0000 ProdID=0000 Rev= 0.00
    S:  Product=USB UHCI Root Hub
    S:  SerialNumber=d800
    C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
    T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
    B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 1.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=0000 ProdID=0000 Rev= 0.00
    S:  Product=USB UHCI Root Hub
    S:  SerialNumber=d400
    C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=255ms
    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=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=06b9 ProdID=4061 Rev= 0.00
    S:  Manufacturer=ALCATEL
    S:  Product=Speed Touch USB 
    S:  SerialNumber=0090D013AAB8
    C:* #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbdevfs
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl= 50ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=00 Prot=00 Driver=Alcatel SpeedTouch USB
    I:  If#= 1 Alt= 1 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=Alcatel SpeedTouch USB
    E:  Ad=06(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
    E:  Ad=07(O) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
    I:  If#= 1 Alt= 2 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=Alcatel SpeedTouch USB
    E:  Ad=06(O) Atr=02(Bulk) MxPS=  32 Ivl=  0ms
    E:  Ad=07(O) Atr=02(Bulk) MxPS=  32 Ivl=  0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
    I:  If#= 1 Alt= 3 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=Alcatel SpeedTouch USB
    E:  Ad=06(O) Atr=02(Bulk) MxPS=  16 Ivl=  0ms
    E:  Ad=07(O) Atr=02(Bulk) MxPS=  16 Ivl=  0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS=  64 Ivl=  0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
    E:  Ad=05(O) Atr=02(Bulk) MxPS=   8 Ivl=  0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS=   8 Ivl=  0ms
    

USB packet format on endpoint 7

After analysis of the USB packets, it appears that they directly contains a list of ATM cells. This explains that the packet size is alway a multiple of 53. In the following example, ATM cells contain AAL5 frames, which in turn contain PPP packets, containing IP packets. USB endpoint 7 is used for sending ATM cells, and endpoint 0x87 is used for receiving.

Packet example:

0000: 00 80 02 30 ec 00 21 45 00 00 42 00 13 00 00 40
0010: 11 08 94 c1 fd db 07 c1 fc 13 03 04 07 00 35 00
0020: 2e 9c 85 00 01 01 00 00 01 00 00 00 00 00 00 07
0030: 64 79 6e 73 69 00 80 02 32 ec 74 65 08 72 6f 6d
0040: 61 6e 77 65 62 03 63 6f 6d 00 00 01 00 01 00 00
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060: 00 00 00 00 00 44 9e 1b 26 04
Total size is 0x6a = 106 = 2*53 = 2 ATM cells

Cell 1:

0000: 00 80 02 30 ec 00 21 45 00 00 42 00 13 00 00 40
0010: 11 08 94 c1 fd db 07 c1 fc 13 03 04 07 00 35 00
0020: 2e 9c 85 00 01 01 00 00 01 00 00 00 00 00 00 07
0030: 64 79 6e 73 69

Cell 1 header:

0000: 00 80 02 30 ec 00 21 45 00 00 42 00 13 00 00 40
0010: 11 08 94 c1 fd db 07 c1 fc 13 03 04 07 00 35 00
0020: 2e 9c 85 00 01 01 00 00 01 00 00 00 00 00 00 07
0030: 64 79 6e 73 69

0 => GFC = 0
0 8 => VPI = 8
0 02 3 => VCI = 35
0 => PT=0, CLP=0
ec => HEC

PPP header:

0000: 00 80 02 30 ec 00 21 45 00 00 42 00 13 00 00 40
0010: 11 08 94 c1 fd db 07 c1 fc 13 03 04 07 00 35 00
0020: 2e 9c 85 00 01 01 00 00 01 00 00 00 00 00 00 07
0030: 64 79 6e 73 69

00 21 : it says that this PPP packet carries an IP packet.

IP header:

0000: 00 80 02 30 ec 00 21 45 00 00 42 00 13 00 00 40
0010: 11 08 94 c1 fd db 07 c1 fc 13 03 04 07 00 35 00
0020: 2e 9c 85 00 01 01 00 00 01 00 00 00 00 00 00 07
0030: 64 79 6e 73 69

45 = IPv4, header length = 5 words of 4 bytes, so 20 bytes
.... 0x11 => 17, this IP packet carries a UDP packet (6 for TCP)
c1 fd db 07 => 193.253.219.7 ( ANice-102-1-2-7.abo.wanadoo.fr)
c1 fc 13 03 => 193.252.19.3 (ns3.wanadoo.fr)

UDP header:

0000: 00 80 02 30 ec 00 21 45 00 00 42 00 13 00 00 40
0010: 11 08 94 c1 fd db 07 c1 fc 13 03 04 07 00 35 00
0020: 2e 9c 85 00 01 01 00 00 01 00 00 00 00 00 00 07
0030: 64 79 6e 73 69

04 07 : source port = 1031
00 35 : destination port = 53 (yeah, that's DNS, everything is matching)
However, this simple scheme hides the SAR/AAL5 layer which scramble/descramble AAL5 frames ranging from 1 to 65535 bytes, to ATM cells which only carry 48 bytes each.
Valid XHTML 1.0! CSS Valide !
Benoît Papillault PGP key