AOSP: Android Pie (android-9.0.0_r16)
Сборка: PQ1A.181105.017.A1
Устройство: пиксель 2
Я пытаюсь подключить сотовый модемиспользование dhcptool (переименованного в dhcpdbg) с Android 9 Pie в режиме RNDIS.Та же самая настройка работала нормально для предыдущих версий Android, но для Pie она не работает на ioctl (3, SIOCADDRT, 0x7ffb9b8030).Там написано "Сеть недоступна".
Я проверил порт ie usb0 в ifconfig, он перечисляет правильно, но вызов dhcpdbg не выполняется, и сеть не может быть проверена.
Sepolicy на устройстве находится в разрешающем режиме.Более того, нет никаких разрешений или других ошибок в журнале dmesg.Примечание. По умолчанию драйверы RNDIS не настроены в ядре Android Pie, поэтому мы включили режим RNDIS в ядре и интегрировали измененное ядро в исходный код AOSP.
Вот некоторые журналы из "strace dhcpdbg usb0"
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, 0x7ffb9b8030) = -1 ENETUNREACH (Network is unreachable)
close(3) = 0
getuid() = 0
writev(5, [{iov_base="\0\355\25o\6X\\=\267\254%", iov_len=11}, {iov_base="\3", iov_len=1}, {iov_base="DHCP\0", iov_len=5}, {iov_base="failed to set default route 192."..., iov_len=65}], 4) = 82
getuid() = 0
writev(6, [{iov_base="lY\0\0\0\355\25", iov_len=7}, {iov_base="\0\355\25o\6X\\=\267\254%", iov_len=11}, {iov_base="\3", iov_len=1}, {iov_base="DHCP\0", iov_len=5}, {iov_base="failed to set default route 192ioctl(3, SIOCADDRT, 0x7ffb9b8030)."..., iov_len=65}], 5) = 89
write(2, "dhcpdbg: ", 9dhcpdbg: ) = 9
write(2, "dhcptool usb0: do_dhcp failed", 29dhcptool usb0: do_dhcp failed) = 29
write(2, ": ", 2: ) = 2
write(2, "Network is unreachable\n", 23Network is unreachable
) = 23
mprotect(0x6ffbc65000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x6ffbc65000, 4096, PROT_READ) = 0
mprotect(0x6ffbc65000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x6ffbc65000, 4096, PROT_READ) = 0
mprotect(0x6ffbc65000, 4096, PROT_READ|PROT_WRITE) = 0
mprotect(0x6ffbc65000, 4096, PROT_READ) = 0
munmap(0x6ffbc65000, 4096) = 0
exit_group(101) = ?
+++ exited with 101 +++
Ниже приведены некоторые выходные данные сетевых команд:
ifconfig:
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
ip add show:
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
ip route show:
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
Таблица маршрутизации IP ядра:
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
ping 8.8.8.8:
connect: Network is unreachable
Этот инструмент dhcptool отлично работает на всех более ранних версиях Android до Android 8. Ниже приведенрабочий страйс-лог из Android 8 dhcptool, работающий на том же порту usb0.
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:/ #