2
votes

Échec de l'appel ioctl Android AOSP SIOCADDRT: le réseau est inaccessible

AOSP: Android Pie (android-9.0.0_r16)

Build: PQ1A.181105.017.A1

Appareil: Pixel 2

J'essaie de connecter un modem cellulaire en utilisant dhcptool (renommé dhcpdbg) avec Android 9 Pie en mode RNDIS. La même configuration fonctionnait bien pour les versions précédentes d'Android, mais pour Pie, elle échouait sur ioctl (3, SIOCADDRT, 0x7ffb9b8030). Il dit "Le réseau est inaccessible".

J'ai vérifié le port c'est-à-dire usb0 dans ifconfig, il énumère correctement mais l'appel dhcpdbg échoue et le réseau n'est pas pingable.

Sepolicy sur l'appareil est en mode permissif. De plus, il n'y a pas d'autorisation ou d'autres erreurs dans le journal dmesg. Remarque: Par défaut, les pilotes RNDIS ne sont pas configurés dans le noyau Android Pie, nous avons donc activé le mode RNDIS dans le noyau et intégré le noyau modifié dans la source AOSP.

Voici quelques journaux de "strace dhcpdbg usb0"

XXX

Voici quelques résultats des commandes de mise en réseau:

ifconfig:

ioctl(3, SIOCGIFFLAGS, {ifr_name="usb0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(3, SIOCSIFFLAGS, {ifr_name="usb0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(3, SIOCSIFADDR, {ifr_name="usb0", ifr_addr={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.168.1.100")}}) = 0
ioctl(3, SIOCSIFNETMASK, {ifr_name="usb0", ifr_netmask={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("255.255.255.0")}}) = 0
ioctl(3, SIOCADDRT, 0x7fd2bb6cd0)       = 0
close(3)                                = 0
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/socket/property_service"}, 31) = 0
writev(3, [{iov_base="\1\0\2\0", iov_len=4}, {iov_base="\r\0\0\0", iov_len=4}, {iov_base="net.usb0.dns1", iov_len=13}, {iov_base="\v\0\0\0", iov_len=4}, {iov_base="192.168.1.1", iov_len=11}], 5) = 36
recvfrom(3, "\0\0\0\0", 4, MSG_WAITALL, NULL, NULL) = 4
close(3)                                = 0
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/socket/property_service"}, 31) = 0
writev(3, [{iov_base="\1\0\2\0", iov_len=4}, {iov_base="\r\0\0\0", iov_len=4}, {iov_base="net.usb0.dns2", iov_len=13}, {iov_base="\0\0\0\0", iov_len=4}], 4) = 25
recvfrom(3, "\0\0\0\0", 4, MSG_WAITALL, NULL, NULL) = 4
close(3)                                = 0
write(2, "dhcptool: ", 10dhcptool: )              = 10
write(2, "IP assignment is for debug purpo"..., 40IP assignment is for debug purposes ONLY) = 40
write(2, ": ", 2: )                       = 2
write(2, "Success\n", 8Success
)                = 8
mprotect(0x7729153000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x7729153000, 4096, PROT_READ) = 0
mprotect(0x7729153000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x7729153000, 4096, PROT_READ) = 0
munmap(0x7729153000, 4096)              = 0
exit_group(0)                           = ?
+++ exited with 0 +++
bullhead:/ # ping 8.8.8.8                                                                                                                                                                                   
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=131 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=58.4 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 58.496/95.044/131.592/36.548 ms
bullhead:/ # 

ip add show: p >

connect: Network is unreachable

ip route show:

Destination Gateway     Genmask     Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 usb0
192.168.43.0    0.0.0.0         255.255.255.0   U         0 0          0 wlan0

Table de routage IP du noyau:

192.168.1.0/24 dev usb0 proto kernel scope link src 192.168.1.100 
192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.222 

ping 8.8.8.8:

28: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 02:06:06:15:00:0b brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global usb0
    valid_lft forever preferred_lft forever

Cet outil dhcptool fonctionne correctement sur toutes les versions antérieures d'Android jusqu'à Android 8. Vous trouverez ci-dessous le journal de démarrage d'Android 8 dhcptool fonctionnant sur le même port usb0.

usb0      Link encap:Ethernet  HWaddr 02:06:06:15:00:0b  Driver rndis_host
      inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0 
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:4 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:80 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:1312 TX bytes:25155 


1 commentaires

Salut, je suis confronté à la même situation, avez-vous réussi à trouver une solution à cela? si oui, cela vous dérangerait-il de partager?


3 Réponses :


1
votes

Il semble qu'il vous manque une route vers la 8.8.8.8 (probablement la route par défaut). Comparez les itinéraires entre une configuration fonctionnelle et non fonctionnelle.


0 commentaires

0
votes

D'après les informations partagées ci-dessus, il apparaît que l'itinéraire par défaut est manquant. Vous pouvez ajouter la route par défaut en utilisant la commande ci-dessous:

ip route add default dev usb0

Après avoir ajouté la route ci-dessus, je vous recommande d'utiliser l'outil traceroute ou ping (avec TTL modifié si traceroute n'est pas disponible) pour tracer les paquets plus loin à partir de là.


0 commentaires

0
votes

Voir https://elinux.org/Android_Networking#Setting_up_networking_on_bootup . Les commandes

netcfg eth0 dhcp
setprop net.dns1 8.8.8.8

devraient suffire.


0 commentaires