android P onProvisioningFailure 与onReachabilityLost

onProvisioningFailure

通常发生在获取ipv4, ipv6,获取网关失败的情况下发生; 包括dhcp动态或静态分配,renew时都可以发生

代码在  frameworks/base/services/net/java/android/net/ip/IpClient.java

一种是在LOST_PROVISIONING被调用
compareProvisioning() 
  wasProvisioned && !isProvisioned   delta = ProvisioningChange.LOST_PROVISIONING
  lostIPv4Address || (lostIPv6 !ignoreIPv6ProvisioningLoss) 
  oldLp.hasGlobalIPv6Address() && (lostIPv6Router && !ignoreIPv6ProvisioningLoss
  
processMessage(DhcpClient.CMD_CONFIGURE_LINKADDRESS)
  setIPv4Address failure 
  dispatchCallback(ProvisioningChange.LOST_PROVISIONING)


dispatchCallback(LOST_PROVISIONING) 
  mCallback.onProvisioningFailure()
  
  

一种被doImmediateProvisioningFailure()调用
startProvisioning
   if (!req.isValid()) {
       doImmediateProvisioningFailure(IpManagerEvent.ERROR_INVALID_PROVISIONING);  
  f (mInterfaceParams == null) {
    doImmediateProvisioningFailure(IpManagerEvent.ERROR_INTERFACE_NOT_FOUND);
    
 class RunningState extends State
   enter() ->doImmediateProvisioningFailure
     !startIPv6()
     !startIPv4()
     !applyInitialConfig
     !startIpReachabilityMonitor()
            
  
doImmediateProvisioningFailure  
  mCallback.onProvisioningFailure()

 

mCallback.onProvisioningFailure()主要调用在:(别的地方也可以)

 frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
        public void onProvisioningFailure(LinkProperties newLp) {
            sendMessage(CMD_IP_CONFIGURATION_LOST);

 

在连接的状态下 L2ConnectedState处理后,状态会变成disconnecting ->disconnected

processMessage(CMD_IP_CONFIGURATION_LOST)

       handleIpConfigurationLost();
       reportConnectionAttemptEnd()
       transitionTo(mDisconnectingState);

 

这个与IpReachabilityMonitor里的onReachabilityLost / CMD_IP_REACHABILITY_LOST有所不同。

这个是与arp(ipv4) Neighbor网络,如果没有arp response三次则认为NUD_FAILED,可以断开也可以忽略,由mIpReachabilityDisconnectEnabled决定

/frameworks/base/services/net/java/android/net/ip/IpReachabilityMonitor.java
  if (event.nudState == StructNdMsg.NUD_FAILED) {
     handleNeighborLost(event);
         mCallback.notifyLost(ip, logMsg)

/frameworks/base/services/net/java/android/net/ip/IpClient.java         
public void notifyLost(InetAddress ip, String logMsg) {
      mCallback.onReachabilityLost(logMsg);
  }         
  
/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java  
public void onReachabilityLost(String logMsg) {
  sendMessage(CMD_IP_REACHABILITY_LOST, logMsg);


case CMD_IP_REACHABILITY_LOST:
    if (mVerboseLoggingEnabled && message.obj != null) log((String) message.obj);
    if (mIpReachabilityDisconnectEnabled) {
        handleIpReachabilityLost();
        transitionTo(mDisconnectingState);
    } else {
        logd("CMD_IP_REACHABILITY_LOST but disconnect disabled -- ignore");
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值