diff options
author | Wink Saville <wink@google.com> | 2011-07-07 16:17:06 -0700 |
---|---|---|
committer | Wink Saville <wink@google.com> | 2011-07-07 16:17:06 -0700 |
commit | 8171e6f690cca1bad354e7e352823d79d420daf3 (patch) | |
tree | 856ae1012fb812bcf7182f65f1ecfdd2614f0e5e | |
parent | 848aa3ab8a00835c5af2ead954c7736e507249b5 (diff) | |
download | frameworks_base-8171e6f690cca1bad354e7e352823d79d420daf3.zip frameworks_base-8171e6f690cca1bad354e7e352823d79d420daf3.tar.gz frameworks_base-8171e6f690cca1bad354e7e352823d79d420daf3.tar.bz2 |
Use resetConnections with resetMask.
Bug: 4981919
Change-Id: I5dec2da0756d5083bc81494fd583672704537694
-rw-r--r-- | core/java/android/net/NetworkUtils.java | 18 | ||||
-rw-r--r-- | core/jni/android_net_NetUtils.cpp | 13 | ||||
-rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 6 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiStateMachine.java | 4 |
4 files changed, 31 insertions, 10 deletions
diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java index 8a678d6..76534ef 100644 --- a/core/java/android/net/NetworkUtils.java +++ b/core/java/android/net/NetworkUtils.java @@ -38,8 +38,22 @@ public class NetworkUtils { /** Bring the named network interface down. */ public native static int disableInterface(String interfaceName); - /** Reset any sockets that are connected via the named interface. */ - public native static int resetConnections(String interfaceName); + /** Setting bit 0 indicates reseting of IPv4 addresses required */ + public static final int RESET_IPV4_ADDRESSES = 0x01; + + /** Setting bit 1 indicates reseting of IPv4 addresses required */ + public static final int RESET_IPV6_ADDRESSES = 0x02; + + /** Reset all addresses */ + public static final int RESET_ALL_ADDRESSES = RESET_IPV4_ADDRESSES | RESET_IPV6_ADDRESSES; + + /** + * Reset IPv6 or IPv4 sockets that are connected via the named interface. + * + * @param interfaceName is the interface to reset + * @param mask {@see #RESET_IPV4_ADDRESSES} and {@see #RESET_IPV6_ADDRESSES} + */ + public native static int resetConnections(String interfaceName, int mask); /** * Start the DHCP client daemon, in order to have it request addresses diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp index 68d1b3a..068fe67 100644 --- a/core/jni/android_net_NetUtils.cpp +++ b/core/jni/android_net_NetUtils.cpp @@ -26,7 +26,7 @@ extern "C" { int ifc_enable(const char *ifname); int ifc_disable(const char *ifname); -int ifc_reset_connections(const char *ifname); +int ifc_reset_connections(const char *ifname, int reset_mask); int dhcp_do_request(const char *ifname, const char *ipaddr, @@ -91,12 +91,17 @@ static jint android_net_utils_disableInterface(JNIEnv* env, jobject clazz, jstri return (jint)result; } -static jint android_net_utils_resetConnections(JNIEnv* env, jobject clazz, jstring ifname) +static jint android_net_utils_resetConnections(JNIEnv* env, jobject clazz, + jstring ifname, jint mask) { int result; const char *nameStr = env->GetStringUTFChars(ifname, NULL); - result = ::ifc_reset_connections(nameStr); + + LOGD("android_net_utils_resetConnections in env=%p clazz=%p iface=%s mask=0x%x\n", + env, clazz, nameStr, mask); + + result = ::ifc_reset_connections(nameStr, mask); env->ReleaseStringUTFChars(ifname, nameStr); return (jint)result; } @@ -207,7 +212,7 @@ static JNINativeMethod gNetworkUtilMethods[] = { { "enableInterface", "(Ljava/lang/String;)I", (void *)android_net_utils_enableInterface }, { "disableInterface", "(Ljava/lang/String;)I", (void *)android_net_utils_disableInterface }, - { "resetConnections", "(Ljava/lang/String;)I", (void *)android_net_utils_resetConnections }, + { "resetConnections", "(Ljava/lang/String;I)I", (void *)android_net_utils_resetConnections }, { "runDhcp", "(Ljava/lang/String;Landroid/net/DhcpInfoInternal;)Z", (void *)android_net_utils_runDhcp }, { "runDhcpRenew", "(Ljava/lang/String;Landroid/net/DhcpInfoInternal;)Z", (void *)android_net_utils_runDhcpRenew }, { "stopDhcp", "(Ljava/lang/String;)Z", (void *)android_net_utils_stopDhcp }, diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 0253265..42be756 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -1435,8 +1435,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { if (linkProperties != null) { String iface = linkProperties.getInterfaceName(); if (TextUtils.isEmpty(iface) == false) { - if (DBG) log("resetConnections(" + iface + ")"); - NetworkUtils.resetConnections(iface); + if (DBG) { + log("resetConnections(" + iface + ", NetworkUtils.RESET_ALL_ADDRESSES)"); + } + NetworkUtils.resetConnections(iface, NetworkUtils.RESET_ALL_ADDRESSES); } } } diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index f6b7edb..0769ea0 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -1415,7 +1415,7 @@ public class WifiStateMachine extends StateMachine { /* * stop DHCP */ - NetworkUtils.resetConnections(mInterfaceName); + NetworkUtils.resetConnections(mInterfaceName, NetworkUtils.RESET_ALL_ADDRESSES); if (mDhcpStateMachine != null) { mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_STOP_DHCP); @@ -1509,7 +1509,7 @@ public class WifiStateMachine extends StateMachine { if (!linkProperties.equals(mLinkProperties)) { Log.d(TAG, "Link configuration changed for netId: " + mLastNetworkId + " old: " + mLinkProperties + "new: " + linkProperties); - NetworkUtils.resetConnections(mInterfaceName); + NetworkUtils.resetConnections(mInterfaceName, NetworkUtils.RESET_ALL_ADDRESSES); mLinkProperties = linkProperties; sendLinkConfigurationChangedBroadcast(); } |