Loading core/java/android/os/INetworkManagementService.aidl +19 −0 Original line number Diff line number Diff line Loading @@ -207,4 +207,23 @@ interface INetworkManagementService */ 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); } services/java/com/android/server/NetworkManagementService.java +61 −0 Original line number Diff line number Diff line Loading @@ -784,4 +784,65 @@ class NetworkManagementService extends INetworkManagementService.Stub { public int getInterfaceTxThrottle(String iface) { 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); } } } Loading
core/java/android/os/INetworkManagementService.aidl +19 −0 Original line number Diff line number Diff line Loading @@ -207,4 +207,23 @@ interface INetworkManagementService */ 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); }
services/java/com/android/server/NetworkManagementService.java +61 −0 Original line number Diff line number Diff line Loading @@ -784,4 +784,65 @@ class NetworkManagementService extends INetworkManagementService.Stub { public int getInterfaceTxThrottle(String iface) { 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); } } }