Merge "Added methods to support dns cache per interface"
This commit is contained in:
@@ -207,4 +207,23 @@ interface INetworkManagementService
|
|||||||
*/
|
*/
|
||||||
int getInterfaceTxThrottle(String iface);
|
int getInterfaceTxThrottle(String iface);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the name of the default interface in the DNS resolver.
|
||||||
|
*/
|
||||||
|
void setDefaultInterfaceForDns(String iface);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bind name servers to an interface in the DNS resolver.
|
||||||
|
*/
|
||||||
|
void setDnsServersForInterface(String iface, in String[] servers);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flush the DNS cache associated with the default interface
|
||||||
|
*/
|
||||||
|
void flushDefaultDnsCache();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flush the DNS cache associated with the specified interface
|
||||||
|
*/
|
||||||
|
void flushInterfaceDnsCache(String iface);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -784,4 +784,65 @@ class NetworkManagementService extends INetworkManagementService.Stub {
|
|||||||
public int getInterfaceTxThrottle(String iface) {
|
public int getInterfaceTxThrottle(String iface) {
|
||||||
return getInterfaceThrottle(iface, false);
|
return getInterfaceThrottle(iface, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDefaultInterfaceForDns(String iface) throws IllegalStateException {
|
||||||
|
mContext.enforceCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
|
||||||
|
try {
|
||||||
|
String cmd = "resolver setdefaultif " + iface;
|
||||||
|
|
||||||
|
mConnector.doCommand(cmd);
|
||||||
|
} catch (NativeDaemonConnectorException e) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Error communicating with native daemon to set default interface", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDnsServersForInterface(String iface, String[] servers)
|
||||||
|
throws IllegalStateException {
|
||||||
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CHANGE_NETWORK_STATE,
|
||||||
|
"NetworkManagementService");
|
||||||
|
try {
|
||||||
|
String cmd = "resolver setifdns " + iface;
|
||||||
|
for (String s : servers) {
|
||||||
|
if (s != null && !"0.0.0.0".equals(s) &&
|
||||||
|
!"::".equals(s) && !"0:0:0:0:0:0:0:0".equals(s)) {
|
||||||
|
cmd += " " + InetAddress.getByName(s).getHostAddress();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mConnector.doCommand(cmd);
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
throw new IllegalStateException("failed to resolve dns address.", e);
|
||||||
|
} catch (NativeDaemonConnectorException e) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Error communicating with native deamon to set dns for interface", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void flushDefaultDnsCache() throws IllegalStateException {
|
||||||
|
mContext.enforceCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
|
||||||
|
try {
|
||||||
|
String cmd = "resolver flushdefaultif";
|
||||||
|
|
||||||
|
mConnector.doCommand(cmd);
|
||||||
|
} catch (NativeDaemonConnectorException e) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Error communicating with native deamon to flush default interface", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void flushInterfaceDnsCache(String iface) throws IllegalStateException {
|
||||||
|
mContext.enforceCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
|
||||||
|
try {
|
||||||
|
String cmd = "resolver flushif " + iface;
|
||||||
|
|
||||||
|
mConnector.doCommand(cmd);
|
||||||
|
} catch (NativeDaemonConnectorException e) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Error communicating with native deamon to flush interface " + iface, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user