summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJianzheng Zhou <jianzheng.zhou@freescale.com>2014-02-08 12:43:07 +0800
committerRobert Greenwalt <rgreenwalt@google.com>2014-06-23 21:02:45 +0000
commit78c8e7c8bfd816a2466f858ff26ab12ea7a2e510 (patch)
tree19451469855533ecbb9fa866a72e7646090d8ec3
parenta06f5fa6563f7fc08b7bb2305f61bf649add0b5a (diff)
downloadframeworks_base-78c8e7c8bfd816a2466f858ff26ab12ea7a2e510.tar.gz
frameworks_base-78c8e7c8bfd816a2466f858ff26ab12ea7a2e510.tar.bz2
frameworks_base-78c8e7c8bfd816a2466f858ff26ab12ea7a2e510.zip
DO NOT MERGE refactor wifi p2p's startDhcpServer function
Add getTetheredDhcpRanges() interface and call it before calling mNwService.startTethering() to update dhcp ranges. This will allow p2p app to run well concurrently with other tethering app(e.g. usb tethering). Change-Id: I5e8ffeb5d2d396f48b897cd9396f133e25ecca57 Signed-off-by: Jianzheng Zhou <jianzheng.zhou@freescale.com>
-rw-r--r--core/java/android/net/ConnectivityManager.java17
-rw-r--r--core/java/android/net/IConnectivityManager.aidl2
-rw-r--r--services/java/com/android/server/ConnectivityService.java5
-rw-r--r--services/java/com/android/server/connectivity/Tethering.java7
-rw-r--r--wifi/java/android/net/wifi/p2p/WifiP2pService.java28
5 files changed, 53 insertions, 6 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 70c8750623f..2aff5f2d69a 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -929,6 +929,23 @@ public class ConnectivityManager {
}
/**
+ * Get the set of tethered dhcp ranges.
+ *
+ * @return an array of 0 or more Strings of tethered dhcp ranges.
+ *
+ * <p>This method requires the call to hold the permission
+ * {@link android.Manifest.permission#ACCESS_NETWORK_STATE}.
+ * {@hide}
+ */
+ public String[] getTetheredDhcpRanges() {
+ try {
+ return mService.getTetheredDhcpRanges();
+ } catch (RemoteException e) {
+ return new String[0];
+ }
+ }
+
+ /**
* Get the set of tethered interfaces.
*
* @return an array of 0 or more String of currently tethered interface names.
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 4bca7fefbc4..3bfd88ec6c0 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -91,6 +91,8 @@ interface IConnectivityManager
String[] getTetherableIfaces();
+ String[] getTetheredDhcpRanges();
+
String[] getTetheredIfaces();
String[] getTetheringErroredIfaces();
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index b7a1a55e14f..2d1921e7947 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -3297,6 +3297,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
return mTethering.getTetherableIfaces();
}
+ public String[] getTetheredDhcpRanges() {
+ enforceConnectivityInternalPermission();
+ return mTethering.getTetheredDhcpRanges();
+ }
+
public String[] getTetheredIfaces() {
enforceTetherAccessPermission();
return mTethering.getTetheredIfaces();
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index adf1dfc10ef..91b9b072de3 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -109,6 +109,7 @@ public class Tethering extends BaseNetworkObserver {
// USB is 192.168.42.1 and 255.255.255.0
// Wifi is 192.168.43.1 and 255.255.255.0
+ // P2P is 192.168.49.1 and 255.255.255.0
// BT is limited to max default of 5 connections. 192.168.44.1 to 192.168.48.1
// with 255.255.255.0
@@ -117,7 +118,7 @@ public class Tethering extends BaseNetworkObserver {
"192.168.42.2", "192.168.42.254", "192.168.43.2", "192.168.43.254",
"192.168.44.2", "192.168.44.254", "192.168.45.2", "192.168.45.254",
"192.168.46.2", "192.168.46.254", "192.168.47.2", "192.168.47.254",
- "192.168.48.2", "192.168.48.254",
+ "192.168.48.2", "192.168.48.254", "192.168.49.2", "192.168.49.254",
};
private String[] mDefaultDnsServers;
@@ -699,6 +700,10 @@ public class Tethering extends BaseNetworkObserver {
return retVal;
}
+ public String[] getTetheredDhcpRanges() {
+ return mDhcpRange;
+ }
+
public String[] getErroredIfaces() {
ArrayList<String> list = new ArrayList<String>();
synchronized (mPublicSync) {
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
index 8b072089255..a38f2341313 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
@@ -109,6 +109,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
INetworkManagementService mNwService;
private DhcpStateMachine mDhcpStateMachine;
+ private ConnectivityManager mCm;
private P2pStateMachine mP2pStateMachine;
private AsyncChannel mReplyChannel = new AsyncChannel();
@@ -226,9 +227,6 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
/* clients(application) information list. */
private HashMap<Messenger, ClientInfo> mClientInfoList = new HashMap<Messenger, ClientInfo>();
- /* Is chosen as a unique range to avoid conflict with
- the range defined in Tethering.java */
- private static final String[] DHCP_RANGE = {"192.168.49.2", "192.168.49.254"};
private static final String SERVER_ADDRESS = "192.168.49.1";
/**
@@ -2058,8 +2056,15 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
}
+ private void checkAndSetConnectivityInstance() {
+ if (mCm == null) {
+ mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ }
+ }
+
private void startDhcpServer(String intf) {
InterfaceConfiguration ifcg = null;
+ checkAndSetConnectivityInstance();
try {
ifcg = mNwService.getInterfaceConfig(intf);
ifcg.setLinkAddress(new LinkAddress(NetworkUtils.numericToInetAddress(
@@ -2067,17 +2072,30 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
ifcg.setInterfaceUp();
mNwService.setInterfaceConfig(intf, ifcg);
/* This starts the dnsmasq server */
- mNwService.startTethering(DHCP_RANGE);
+ String[] tetheringDhcpRanges = mCm.getTetheredDhcpRanges();
+ if (mNwService.isTetheringStarted()) {
+ if (DBG) logd("Stop exist tethering and will restart it");
+ mNwService.stopTethering();
+ mNwService.tetherInterface(intf);
+ }
+ mNwService.startTethering(tetheringDhcpRanges);
} catch (Exception e) {
loge("Error configuring interface " + intf + ", :" + e);
return;
}
-
logd("Started Dhcp server on " + intf);
}
private void stopDhcpServer(String intf) {
try {
+ for (String temp : mNwService.listTetheredInterfaces()) {
+ logd("List all interfaces " + temp);
+ if (temp.compareTo(intf) != 0 ) {
+ logd("Found other tethering interface so keep tethering alive");
+ mNwService.untetherInterface(intf);
+ return;
+ }
+ }
mNwService.stopTethering();
} catch (Exception e) {
loge("Error stopping Dhcp server" + e);