Better error handling when NetworkManagementService#untetherInterface() fails.

Additionally, catch ServiceSpecificException when making netd binder calls.

Test:
  Flipped back and forth between USB and wifi tethering and no longer
  some of the unrecoverable errors.

Bug: 30882741
Change-Id: I470b7cfdaaa82013db35b500a5df10dcfaad2d8c
This commit is contained in:
Erik Kline
2016-08-16 16:46:33 +09:00
parent 69115b8e29
commit 1f4278a67a
2 changed files with 6 additions and 4 deletions

View File

@@ -1310,8 +1310,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub
mConnector.execute("tether", "interface", "remove", iface);
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
} finally {
removeInterfaceFromLocalNetwork(iface);
}
removeInterfaceFromLocalNetwork(iface);
}
@Override

View File

@@ -26,6 +26,7 @@ import android.net.RouteInfo;
import android.net.ip.RouterAdvertisementDaemon;
import android.net.ip.RouterAdvertisementDaemon.RaParams;
import android.os.INetworkManagementService;
import android.os.ServiceSpecificException;
import android.os.RemoteException;
import android.util.Log;
import android.util.Slog;
@@ -205,7 +206,7 @@ class IPv6TetheringInterfaceServices {
final String dnsString = dns.getHostAddress();
try {
netd.interfaceDelAddress(mIfName, dnsString, RFC7421_IP_PREFIX_LENGTH);
} catch (RemoteException e) {
} catch (ServiceSpecificException | RemoteException e) {
Log.e(TAG, "Failed to remove local dns IP: " + dnsString, e);
}
}
@@ -222,7 +223,7 @@ class IPv6TetheringInterfaceServices {
final String dnsString = dns.getHostAddress();
try {
netd.interfaceAddAddress(mIfName, dnsString, RFC7421_IP_PREFIX_LENGTH);
} catch (RemoteException e) {
} catch (ServiceSpecificException | RemoteException e) {
Log.e(TAG, "Failed to add local dns IP: " + dnsString, e);
newDnses.remove(dns);
}
@@ -231,7 +232,7 @@ class IPv6TetheringInterfaceServices {
try {
netd.tetherApplyDnsInterfaces();
} catch (RemoteException e) {
} catch (ServiceSpecificException | RemoteException e) {
Log.e(TAG, "Failed to update local DNS caching server");
if (newDnses != null) newDnses.clear();
}