Connecter le Palm Pre a Internet via le port USB sur Mandriva Linux

De Wiki de la communauté Mandriva.

ATTENTION CET ARTICLE N'EST PAS TERMINE


Pour les personnes qui n'ont pas d'abonnement de téléphonie mobile en 3G parce que c'est trop cher ou qui ne veulent pas utiliser le wifi parce qu'elles sont sensibles au champs électromagnétiques, nous allons décrire comment accéder à Internet sur un Palm via une connexion USB à PC relié à internet par ADSL ou modem RTC.

Cette solution devrait fonctionner sur tout appareil sur Palm webOS dont le Palm Pixi.

Article inspiré de : Connecter le Zaurus à Internet via l'USB

Sommaire

Prérequis

Le logiciel novacom et le Palm Mojo (webos) SDK doivent être installé sur le PC Linux.
Le process/démon novacom doit être lancé sur le PC.
Pour ces 2 points , voir : Installer le Palm webOS SDK sur Mandriva Linux

De plus la fonctionnalité USB Networking doit être activée sur la Palm Pre via Meta Doctor par exemple.

Vérification de la connexion entre le PC et le Palm Pre

1) Le Palm Pre étant allumé, branchez le cable USB entre le Palm Pre et le PC.
Ensuite dans une console terminal sur le PC, vérifiez que la commande dmesg affiche celà :

[user@localhost ~]$ dmesg
...
usb 5-2: new high speed USB device using ehci_hcd and address 2
usb 5-2: New USB device found, idVendor=0830, idProduct=0101
usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 5-2: Product: Pre
usb 5-2: Manufacturer: Palm Inc.
usb 5-2: SerialNumber: 010101010101010101010101010101010100101010
usb 5-2: configuration #5 chosen from 1 choice
rndis_host 5-2:5.0: RNDIS init failed, -32
rndis_host: probe of 5-2:5.0 failed with error -32
Initializing USB Mass Storage driver...
scsi4 : SCSI emulation for USB Mass Storage devices
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
scsi 4:0:0:0: Direct-Access     Palm     Pre              0000 PQ: 0 ANSI: 2
sd 4:0:0:0: Attached scsi generic sg3 type 0
sd 4:0:0:0: [sdc] Attached SCSI removable disk
usb-storage: device scan complete

Et vérifiez que la commande lusb affiche ceci :

[root@localhost ~]# lsusb
...
Bus 005 Device 004: ID 0830:0101 Palm, Inc.
...

Configuration du sous-réseau

Nous allons maintenant configurer un autre réseau local entre le PC et le Palm Pre. Palm webOS semble paramétré pour affecter automatiquement l'adresse IP 192.168.0.202 au Palm Pre lors d'une connection USB, nous allons donc placer la deuxième IP du PC à 192.168.0.1 toujours avec un masque réseau 255.255.255.0 (comme cela vous pouvez connecter 253 périphériques sous Palm webOS).

D'abord vérifions que le Palm Pre a bien une interface usb0 existante et avec la bonne IP :

root@palm-webos-device:/# /sbin/ifconfig -a
bsl0      Link encap:Ethernet  HWaddr 00:1D:FE:57:81:85
         BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:500
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
. 
lo        Link encap:Local Loopback
         inet addr:127.0.0.1  Mask:255.0.0.0
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:1387 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1387 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:270356 (264.0 KiB)  TX bytes:270356 (264.0 KiB)
.
usb0      Link encap:Ethernet  HWaddr DE:88:BC:19:6D:BA
         inet addr:192.168.0.202  Bcast:0.0.0.0  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:51 errors:0 dropped:0 overruns:0 frame:0
         TX packets:765 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:8808 (8.6 KiB)  TX bytes:65790 (64.2 KiB)
.
usb0:1    Link encap:Ethernet  HWaddr DE:66:BC:21:6D:BA
         inet addr:192.168.2.101  Bcast:0.0.0.0  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

A cette étape, l'interface usb0 du Palm Pre est active avec une IP mais pas l'interface usb0 du PC. Attention cependant, ce n'est pas vrai sur toutes les distributions Linux. Certaines font comme le Palm Pre et montent automatiquement usb0 dès la détection du câble. Nous allons donc prendre nos précautions et commencer par éteindre l'interface usb0 du PC avant de la rallumer avec la bonne IP :

[root@localhost ~]# /sbin/ifconfig usb0 down
[root@localhost ~]# /sbin/ifconfig usb0 192.168.0.1 netmask 255.255.255.0 up

Maintenant pres les 2 commandes ci-dessous, vous devriez avoir celà sur le PC:

[user@localhost ~]$ /sbin/ifconfig -a
...
usb0 Link encap:Ethernet  HWaddr A2:3B:49:13:3A:52
         inet adr:192.168.0.1  Bcast:192.168.0.255  Masque:255.255.255.0
         adr inet6: fe80::28c3:49ff:fe13:3b52/64 Scope:Lien
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:1000
         RX bytes:0 (0.0 b)  TX bytes:8785 (8.5 KiB)
...

Si tout est correct comme les variables en gras ci-dessus, nous allons rendre cela plus propre, nous allons ajouter une route pour indiquer que les paquets passant par usb0 du PC sont à destination du Palm Pre :

[root@localhost ~]# route add -host 192.168.0.202 usb0

Et du côté du Palm Pre, indiquez la bonne route vers le PC (passerelle par défaut):

root@palm-webos-device:/# route add default gw 192.168.0.1

Maintenant que nous avons paramétré une IP des deux côtés, il devrait être possible que les deux machines se "ping" mutuellement. Du PC vers le Palm Pre :

[user@localhost ~]$ ping 192.168.0.202
PING 192.168.0.202 (192.168.0.202) 56(84) bytes of data.
64 bytes from 192.168.0.202: icmp_seq=1 ttl=64 time=0.988 ms
64 bytes from 192.168.0.202: icmp_seq=2 ttl=64 time=0.800 ms
64 bytes from 192.168.0.202: icmp_seq=3 ttl=64 time=0.809 ms
64 bytes from 192.168.0.202: icmp_seq=4 ttl=64 time=0.968 ms
64 bytes from 192.168.0.202: icmp_seq=5 ttl=64 time=0.908 ms
...

Puis du Palm Pre vers le PC :

root@palm-webos-device:/# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: seq=0 ttl=64 time=0.854 ms
64 bytes from 192.168.0.1: seq=1 ttl=64 time=0.641 ms
64 bytes from 192.168.0.1: seq=2 ttl=64 time=0.641 ms
64 bytes from 192.168.0.1: seq=3 ttl=64 time=0.824 ms
64 bytes from 192.168.0.1: seq=4 ttl=64 time=0.793 ms

Voilà, la deuxième étape est réussie, les deux ordinateurs se parlent.

Connexion du Palm Pre à Internet

Avant de commencer un peu d'architecture réseau. Je pars ici du principe que votre PC est normalement déjà connecté à Internet, relié à un routeur/modem adsl avec une liaison ethernet. La carte réseau dédié à cette liaison est appelé par la suite eth0. Le Modem/routeur et votre PC forment un réseau local sur la plage d'IP 192.168.0.1 / 255.255.255.0. L'adresse du PC est 192.168.1.2 et celle du routeur 192.168.1.1. Avant de poursuivre, vous devez connaitre ces deux IP dans votre cas, de même que le numéro de la carte réseau (ici eth0).

Tout d'abord il nous faut le paquet "iptables". Taper "iptables" en tant que root pour vérifier et l'installer le cas échéant (sous mandriva "urpmi iptables").

Maintenant, nous allons utiliser iptables pour permettre au sous réseau de communiquer avec notre routeur. Pour commencer, nous allons nétoyer la table NAT du Palm Pre:

root@palm-webos-device:/# iptables -t nat -F

Puis nous allons substituer l'addresse de notre PC aux adresses sources des paquets sortants du réseau local Palm Pre-PC :

root@palm-webos-device:/# iptables -t nat -A POSTROUTING -j SNAT -o eth0 --to 192.168.1.2

Ceci fait, toutes les paquets du Palm Pre sont routées vers le PC. Il faut maintenant indiquer au PC de router ces paquets vers sa passerelle, et donc, vers internet.

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

Si l'appel à iptable ne passe pas, vous pouvez faire à peu prés la même chose par :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -s 192.168.0.210/32

Normalement, à ce stade, il est possible de "pinger" votre routeur à partir du Palm Pre :

root@palm-webos-device:/# ping 192.168.1.1
PING 88.165.230.244 (88.165.230.244): 56 data bytes
64 bytes from 88.165.230.244: seq=0 ttl=64 time=3.082 ms
64 bytes from 88.165.230.244: seq=1 ttl=64 time=0.671 ms
64 bytes from 88.165.230.244: seq=2 ttl=64 time=0.732 ms
64 bytes from 88.165.230.244: seq=3 ttl=64 time=0.702 ms
64 bytes from 88.165.230.244: seq=4 ttl=64 time=0.641 ms

C'est presque gagné, il ne reste plus qu'à fournir au Palm Pre le serveur de noms (DNS). La solution la plus simple, dans la mesure où votre PC et le Palm Pre accèdent au Net de la même manière est de recopier le fichier /etc/resolv.conf dans le fichier équivalent sur le Palm Pre.
Note: le fichier /etc/resolv.conf est sur un FS (systeme de fichier ) en LECTURE SEULE sur le Palm Pre et donc n'est pas modifiable.

Maintenant pour vérifier que le Palm Pre a bien accès au net :

   ping www.free.fr
PING www.free.fr 
(212.27.48.10): 56 octets data 64 octets from 212.27.48.10: icmp_seq=0 ttl=117 time=21.2 ms (...) 
Et voilà, c'est gagné :)