Projet speedtouch

Programmes Projet Speedtouch Projet Snoopy Projet eciadsl La recette du pain Source Mage BeOS Mon CV Mon blog Notes On nous prend pour des cons! Don
Programmes
Projet Speedtouch
Projet Snoopy
Projet eciadsl
La recette du pain
Source Mage
BeOS
Mon CV
Mon blog
Notes
On nous prend pour des cons!
Don
en fr

Benoît Papillault, Derniére mise à jour : 31/03/2001

Avertissement

Cette page est obsoléte et n'est conservée que pour des raisons historiques, vous trouverez la dernière version du driver speedtouch sur sourceforge, à l'adresse : http://speedtouch.sourceforge.net/.

Il existe deux pilotes pour le modem Speedtouch USB/330 sous Linux :

Modem ALCATEL ADSL SpeedTouch USB

Download

La dernière version de mon code source est disponible dans speedtouch.tar.gz. C'est la dernière version du code source, habituellement mise à jour quotidiennement, mais cela peut-être une version qui ne fonctionne pas. Choisissez!

Utilitaire

L'utilitaire suivant permet de downloader le microcode du modem. Pour le compiler, il faut installer la librairie libusb auparavant. Une fois le microcode uploadé , il faut initialiser la ligne ADSL avec l'utilitaire suivant modem_diag.

Pour vérifier votre installation du support USB et de la libusb :

  • lsmod doit faire apparaître : usbcore et l'un des modules suivants : usb-uhci, uhci ou ohci. Si ce n'est pas le cas, recompilez votre noyau et faites un "modprobe usbcore usb-uhci"
  • mount doit afficher "none on /proc/bus/usb type usbdevfs (rw)" dans l'une des ses lignes. Si ce n'est pas le cas, ajouter la ligne suivante a votre fichier /etc/fstab :
    none /proc/bus/usb usbdevfs defaults 0 0
    
    et activer la avec "mount -a"
  • "cat /proc/bus/usb/devices" doit lister vos périphériques USB sous la forme suivante, vérifier la présence du modem Alcatel.
    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
    

Format des paquets USB

Après analyse des paquets USB, il apparait qu'ils contiennent directement une liste de cellules ATM. Cela explique que la taille des paquets soit toujours un multiple de 53 octets. Dans l'exemple utilisé, ces cellules ATM contiennent des paquets AAL5, qui contiennent des paquets PPP, qui contiennent des paquets IP. Le endpoint USB 0x07 est utilisé pour lire les cellules et le endpoint 0x87 pour les écrire, ou l'inverse.

Exemple de paquet :

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
La taille totale est de 0x6a = 106 = 2*53 = 2 cellules ATM

Cellule 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

Entete cellule 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

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

Remarque : VPI/VCI=8/35 est bien la valeur définie sur le CDROM
d'installation du modem (cf phonebook.ini)

Entete PPP :

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 : indique que ce paquet PPP contient de l'IP

Entete IP :

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, longueur entete = 5 mots de 4 octets donc 20 octets
.... 0x11 => 17, le protocole contenu est UDP (6 pour 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)

Entete UDP :

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 : port source = 1031
00 35 : port destination = 53 (et hop, c'est du DNS, tout correspond!)
Cependant, ce schéma simple masque la couche SAR/AAL5 qui effectue le découpage des paquets AAL5 variable de 1 a 65535 octets en cellules de 53 octets.
Valid XHTML 1.0! CSS Valide !
Benoît Papillault