en de fr es ja it pt

22 сентября 2011 г.

Патч для работы WiFi DHCP в Android 2.3.3

Детальное описание проблемы есть в этом посте не xda-developers

Все тестировалось на официальной прошивке RUU_Vivo_Gingerbread_S_HTC_WWE_2.30.405.1 для HTC Incredible S, с полученным рутом.

Если кратко: по WiFi подключается, адрес получает, в ip route все выглядит нормально, но дальше шлюза ничего не идет. Если же использовать статический IP - все работает.

Для диагностики причины использовал adb logcat, мне не понравились следующие строки:
D/WifiStateTracker( 1421): change state to connected for wifi supplicant state=COMPLETED
D/WifiStateTracker( 1421): gateway from dhcp option 3 is wrong, use gateway2 dhcpcd set: 89.249.173.32
D/WifiStateTracker( 1421): adding routing rule table=>wifi fromIp=all, toIp=all priority=3001
I/ipd ( 1315): IP CMD: /system/bin/ip ro flush table wifi
V/WifiStateTracker( 1421): IP configuration: ipaddr 89.249.173.32 gateway 89.249.173.32 netmask 255.255.255.128 dns1 93.180.4.5 dns2 0 .0.0.0 DHCP server 93.180.4.5 lease 67612 seconds
Т.е. мне выдается IP 89.249.173.32, пишут, что не смогли получить gateway от dhcp и используют мой же IP как шлюз. При этом в ip route все выглядит замечательно - для default прописан верный шлюз, который DHCP получил как статический маршрут:
D/Dhcpcd ( 2901): adding route to 0.0.0.0/0 via 89.249.173.1

Поигравшись с получаемыми значениями в /system/etc/dhcpcd/dhcpcd-hooks/95-configured я понял, что использумая в
setprop dhcp.${interface}.gateway "${new_routers%% *}"
переменная new_routers пуста. Немного дописав скрипт, я сделал так, чтобы в gateway прописывался маршрут до 0.0.0.0/0 из статических маршрутов:
#setprop dhcp.${interface}.gateway "${new_routers%% *}"
gateway=`echo ${new_classless_static_routes}|egrep -o "0.0.0.0/0 [0-9\.]*"|cut -c 11-`
if [ -n "${gateway}" ]; then
  setprop dhcp.${interface}.gateway "${gateway}"
fi;
и все заработало!

Итого: скачиваем оригинальный /system/etc/dhcpcd/dhcpcd-hooks/95-configured , дописываем его, как описанно выше, загружаем обратно в /system/etc/dhcpcd/dhcpcd-hooks/95-configured (например, Root Explorer'ом: очень удобная вещь, одним кликом перемонтирует разделы в RO/RW)

2 комментария:

  1. Желательно прикрепить уже отредактированный файл, потому как перестает получать IP вообще, хотя может что то не так забил...

    ОтветитьУдалить
  2. Пришлите оригинальный файл, отредактирую и выложу.
    У меня уже 2.3.5, где все работает и без патча.

    ОтветитьУдалить