J'essaie de faire fonctionner Ethernet sur USB pour mon Nexus S. J'utilise Ice Cream Sandwich v4.0.3 et j'ai reconstruit le noyau avec le support des gadgets USB activé. Lorsque je connecte le téléphone à ma machine Linux et que j'exécute ifconfig -a, usb0 apparaît à la fois sur le téléphone et sur la machine Linux. J'exécute ifconfig pour configurer les deux côtés et tout semble correct mais je ne peux pas faire de ping d'un côté ou de l'autre :
PING 192.168.22.2 (192.168.22.2) 56(84) bytes of data.
From 192.168.22.1 icmp_seq=1 Destination Host Unreachable
From 192.168.22.1 icmp_seq=2 Destination Host Unreachable
J'ai aussi un N900 qui fonctionne avec Maemo Linux et qui autorise l'Ethernet sur USB. J'ai comparé les sorties de ethtool, ifconfig, route, et arp entre le N900 et le Nexus S et toutes sont très similaires sauf la sortie de arp. Il montre (incomplètement) l'adresse HWaddress pour la connexion Android :
Address HWtype HWaddress Flags Mask Iface
10.1.3.1 ether 00:1B:17:05:30:13 C eth0
192.168.22.2 (incomplete) usb0
Le seul autre indice que j'ai est que ifconfig s'affiche du côté Linux :
usb0 Link encap:Ethernet HWaddr 66:E4:64:10:D1:A9
inet addr:192.168.22.1 Bcast:192.168.22.255 Mask:255.255.255.0
inet6 addr: fe80::64e4:64ff:fe10:d1a9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:9039 (8.8 KiB)
et du côté d'Android :
usb0 Link encap:Ethernet HWaddr 7A:78:28:52:9C:A0
inet addr:192.168.22.2 Bcast:192.168.22.255 Mask:255.255.255.0
inet6 addr: fe80::7878:28ff:fe52:9ca0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:202 errors:0 dropped:202 overruns:0 frame:0
TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:47294 (46.1 KiB) TX bytes:1728 (1.6 KiB)
Remarquez les paquets abandonnés du côté d'Android.
J'ai l'impression d'y être presque Des suggestions ?
EDIT :
J'ai reconstruit le noyau avec un module de noyau gadget (j'ai essayé à la fois g_cdc et g_ether) au lieu du support intégré. Je ne suis pas sûr que ce qui suit soit dû à cela ou simplement au fait que je n'étais pas synchrone dans mon message précédent. Si j'exécute un ping d'un côté ou de l'autre, les numéros TX et RX correspondent des deux côtés, mais le côté Android les laisse tomber pour une raison quelconque.
ifconfig côté hôte :
usb0 Link encap:Ethernet HWaddr 12:23:34:45:56:67
inet addr:192.168.22.1 Bcast:192.168.22.255 Mask:255.255.255.0
inet6 addr: fe80::1023:34ff:fe45:5667/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:734 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1140 (1.1 KiB) TX bytes:37684 (36.8 KiB)
ifconfig côté Android :
usb0 Link encap:Ethernet HWaddr 5E:89:C6:D8:BC:08
inet addr:192.168.22.2 Bcast:192.168.22.255 Mask:255.255.255.0
inet6 addr: fe80::5c89:c6ff:fed8:bc08/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:734 errors:0 dropped:734 overruns:0 frame:0
TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:27408 (26.7 KiB) TX bytes:1602 (1.5 KiB)
UNE AUTRE EDIT ! !
Après avoir utilisé arp du côté hôte et ip du côté Android pour ajouter manuellement des entrées, les erreurs Destination Host Unreachable ont disparu, mais toujours pas de réponse ping. J'ai lancé Wireshark sur l'hôte et les messages provenant de l'appareil ne sont pas corrects. Les adresses mac affichées ne semblent pas correctes et le protocole est inconnu, il est donc affiché comme 0x7aab. Après avoir regardé les données réelles dans le message, il apparaît qu'il y a deux octets zéro ajoutés au message. Si ces octets étaient supprimés, tout semblerait s'aligner et fonctionner. Quelqu'un a-t-il déjà vu cela ou sait-il où dans le code cela peut être corrigé ?
ENCORE UN AUTRE MONTAGE !!!
Après avoir tout redémarré ce matin, je n'ai pas créé les fausses entrées ARP et j'ai relancé les pings. Selon Wireshark, il y avait un message ARP provenant de l'hôte et un message inconnu provenant du Droid, mais ils étaient de longueurs identiques. Après avoir examiné le contenu des messages, le Droid envoyait ce qui semblait être un message ARP valide également, mais il était décalé de 2 octets - deux octets supplémentaires au début et les deux derniers coupés.