Wifi 概率性自動斷線(IpReachabilityMonitor)


關閉IpReachabilityMonitor功能的辦法:

1)使用cmd (需要root權限)
adb root
adb shell cmd wifi set-ipreach-disconnect disabled
 
2)改代碼
frameworks/opt/net/wifi/service/java/com/android/server/wifi/ ClientModeImpl.java
mIpReachabilityDisconnectEnabled 設置成false
 
3)修改config文件,開關置為false  ---有些廠商沒有這個開關
    <!-- IpReachability monitor enable/Disable -->
    <bool translatable="false" name="config_wifi_ipreachability_monitor">false</bool>
https://github.com/ngoquang2708/android_device_samsung_vivalto3gvn/commit/773986dabc49a8cb550be657f9f78f61994109f8

https://blog.csdn.net/peter_520_gh/article/details/103244034 

描述:該文主要介紹基於Android 7.0 的IpReachabilityMonitor機制,有時候會遇到用戶反饋wifi 會概率性自動斷線,最后發現是系統有開啟IpReachabilityMonitor 機制,可能是在干擾嚴重環境下或相對弱信號下讓系統誤判導致下斷線。

如下只要針對IpReachabilityMonitor機制描述說明

IpReachabilityMonitor功能描述及作用
a. IpReachabilityMonitor的代碼實現邏輯不關心為什么一個neighbour網絡變為不可達。相反,他主要反映在內核層面中每一個neighbour網絡的IP可達性概念或狀態。我們知道這個IP可達性狀態對於正常網絡連接來說是關鍵重要的。因此IpReachabilityMonitor通常僅是“信使”:它警告neighbours網絡已經被內核kernel視為不可達。

b.IpReachabilityMonitor 機制是在Android 7.0中新增,主要是要確認gateway or DNS server是否可以為unreachable,此機制會 定期(大約18s~22s timer到就會做一次)trigger 上層發送arp req,若發送三筆arp req未收到對應arp rsp IpReachabilityMonitor 會fail,trigger上層下斷線

 

c. 下斷線條件:arp req三筆都發出去后,第三筆隔一秒后還是沒有收到arp rsp就trigger斷線, driver log可以看到明確的1s發送 一個arp req, 但送到air時間未必會是一秒就tx 1筆(可以看sniffer log)

d.Android是透過 Linux netlink socket機制去獲得 kernel neighbor 信息,(NETLINK_ROUTE 的 neighbor , 利用 kernel ARP cache) :https://blog.csdn.net/qy532846454/article/details/6806197, 所以當ARP table 沒有該信息時, 應該會用 broadcast 方式.在干擾較大的環境下, 可以調整參數來增加發 ARP 的次數:http://man7.org/linux/man-pages/man7/arp.7.html

如何規避因IpReachabilityMonitor導致系統下斷線
1.在系統frameworks\base\core\res\res\values\config.xml中關閉“IpReachabilityMonitor”,


 補充:

NUD (Neighbour Unreachability Detection) state ---鄰居不可達檢測狀態:

網關/DNS服務器 ARP/RARP

NUD 主要有以下幾種狀態:
NUD_INCOMPLETE、
NUD_REACHABLE、
NUD_DELAY、
NUD_PROBE、
NUD_STALE、
NUD_NOARP、
NUD_PERMANENT、
NUD_PROBE、
NUD_FAILED

NUD機制說明:
https://blog.csdn.net/lickylin/article/details/22228047

https://chromium.googlesource.com/chromiumos/platform2/+/master/patchpanel/network_monitor_service.h
http://www.embeddedlinux.org.cn/linux_net/0596002556/understandlni-CHP-27-SECT-6.html


參考如下:

也可參考鏈接:https://github.com/ngoquang2708/android_device_samsung_vivalto3gvn/commit/773986dabc49a8cb550be657f9f78f61994109f8

2. 可以通過下指令調整參數來增加 ARP req發送次數, cmd如下(關於mcast_solicit和ucast_solicit)

#echo 10 > /proc/sys/net/ipv4/neigh/wlan0/mcast_solicit

#echo 10 > /proc/sys/net/ipv4/neigh/wlan0/ucast_solicit

可參考:http://man7.org/linux/man-pages/man7/arp.7.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM