Update Framework to support multiple dhpc ranges
Previously we only supported a single range - this was inadequate for multiple interfaces. Adding a second range so we can support both usb and wifi tethering. Also moving out of the zero-conf range as our dhcp client won't accept ip addrs in that range (no nexus to nexus wifi action). bug: 2537963 bug: 2533491 bug: 2538303 Change-Id: I600b421343c28c2f9839ed2076122ae3d0ff5d3d
This commit is contained in:
@@ -78,8 +78,9 @@ interface INetworkManagementService
|
||||
|
||||
/**
|
||||
* Start tethering services with the specified dhcp server range
|
||||
* arg is a set of start end pairs defining the ranges.
|
||||
*/
|
||||
void startTethering(String dhcpRangeStart, String dhcpRangeEnd);
|
||||
void startTethering(in String[] dhcpRanges);
|
||||
|
||||
/**
|
||||
* Stop currently running tethering services
|
||||
|
||||
@@ -312,11 +312,17 @@ class NetworkManagementService extends INetworkManagementService.Stub {
|
||||
mConnector.doCommand(String.format("ipfwd %sable", (enable ? "en" : "dis")));
|
||||
}
|
||||
|
||||
public void startTethering(String dhcpRangeStart, String dhcpRangeEnd)
|
||||
public void startTethering(String[] dhcpRange)
|
||||
throws IllegalStateException {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
|
||||
mConnector.doCommand(String.format("tether start %s %s", dhcpRangeStart, dhcpRangeEnd));
|
||||
// cmd is "tether start first_start first_stop second_start second_stop ..."
|
||||
// an odd number of addrs will fail
|
||||
String cmd = "tether start";
|
||||
for (String d : dhcpRange) {
|
||||
cmd += " " + d;
|
||||
}
|
||||
mConnector.doCommand(cmd);
|
||||
}
|
||||
|
||||
public void stopTethering() throws IllegalStateException {
|
||||
|
||||
@@ -289,8 +289,8 @@ public class WifiService extends IWifiManager.Stub {
|
||||
try {
|
||||
ifcg = service.getInterfaceConfig(intf);
|
||||
if (ifcg != null) {
|
||||
/* IP/netmask: 169.254.2.2/255.255.255.0 */
|
||||
ifcg.ipAddr = (169 << 24) + (254 << 16) + (2 << 8) + 2;
|
||||
/* IP/netmask: 192.168.43.1/255.255.255.0 */
|
||||
ifcg.ipAddr = (192 << 24) + (168 << 16) + (43 << 8) + 1;
|
||||
ifcg.netmask = (255 << 24) + (255 << 16) + (255 << 8) + 0;
|
||||
ifcg.interfaceFlags = "up";
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ import android.net.InterfaceConfiguration;
|
||||
import android.net.IConnectivityManager;
|
||||
import android.net.INetworkManagementEventObserver;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.NetworkUtils;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.Binder;
|
||||
import android.os.Environment;
|
||||
@@ -80,11 +81,16 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
|
||||
|
||||
private BroadcastReceiver mStateReceiver;
|
||||
|
||||
private static final String USB_NEAR_IFACE_ADDR = "169.254.2.1";
|
||||
private static final String USB_NEAR_IFACE_ADDR = "192.168.42.129";
|
||||
private static final String USB_NETMASK = "255.255.255.0";
|
||||
|
||||
// FYI - the default wifi is 192.168.43.1 and 255.255.255.0
|
||||
|
||||
private String[] mDhcpRange;
|
||||
private static final String DHCP_DEFAULT_RANGE_START = "169.254.2.10";
|
||||
private static final String DHCP_DEFAULT_RANGE_STOP = "169.254.2.64";
|
||||
private static final String DHCP_DEFAULT_RANGE1_START = "192.168.42.2";
|
||||
private static final String DHCP_DEFAULT_RANGE1_STOP = "192.168.42.254";
|
||||
private static final String DHCP_DEFAULT_RANGE2_START = "192.168.43.2";
|
||||
private static final String DHCP_DEFAULT_RANGE2_STOP = "192.168.43.254";
|
||||
|
||||
private String[] mDnsServers;
|
||||
private static final String DNS_DEFAULT_SERVER1 = "8.8.8.8";
|
||||
@@ -138,15 +144,12 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
|
||||
|
||||
mDhcpRange = context.getResources().getStringArray(
|
||||
com.android.internal.R.array.config_tether_dhcp_range);
|
||||
if (mDhcpRange.length == 0) {
|
||||
mDhcpRange = new String[2];
|
||||
mDhcpRange[0] = DHCP_DEFAULT_RANGE_START;
|
||||
mDhcpRange[1] = DHCP_DEFAULT_RANGE_STOP;
|
||||
} else if(mDhcpRange.length == 1) {
|
||||
String[] tmp = new String[2];
|
||||
tmp[0] = mDhcpRange[0];
|
||||
tmp[1] = new String("");
|
||||
mDhcpRange = tmp;
|
||||
if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
|
||||
mDhcpRange = new String[4];
|
||||
mDhcpRange[0] = DHCP_DEFAULT_RANGE1_START;
|
||||
mDhcpRange[1] = DHCP_DEFAULT_RANGE1_STOP;
|
||||
mDhcpRange[2] = DHCP_DEFAULT_RANGE2_START;
|
||||
mDhcpRange[3] = DHCP_DEFAULT_RANGE2_STOP;
|
||||
}
|
||||
mDunRequired = context.getResources().getBoolean(
|
||||
com.android.internal.R.bool.config_tether_dun_required);
|
||||
@@ -504,8 +507,16 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
|
||||
try {
|
||||
ifcg = service.getInterfaceConfig(iface);
|
||||
if (ifcg != null) {
|
||||
ifcg.ipAddr = (169 << 24) + (254 << 16) + (2 << 8) + 1;
|
||||
ifcg.netmask = (255 << 24) + (255 << 16) + (255 << 8) + 0;
|
||||
String[] addr = USB_NEAR_IFACE_ADDR.split("\\.");
|
||||
ifcg.ipAddr = (Integer.parseInt(addr[0]) << 24) +
|
||||
(Integer.parseInt(addr[1]) << 16) +
|
||||
(Integer.parseInt(addr[2]) << 8) +
|
||||
(Integer.parseInt(addr[3]));
|
||||
addr = USB_NETMASK.split("\\.");
|
||||
ifcg.netmask = (Integer.parseInt(addr[0]) << 24) +
|
||||
(Integer.parseInt(addr[1]) << 16) +
|
||||
(Integer.parseInt(addr[2]) << 8) +
|
||||
(Integer.parseInt(addr[3]));
|
||||
if (enabled) {
|
||||
ifcg.interfaceFlags = ifcg.interfaceFlags.replace("down", "up");
|
||||
} else {
|
||||
@@ -1101,7 +1112,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
service.startTethering(mDhcpRange[0], mDhcpRange[1]);
|
||||
service.startTethering(mDhcpRange);
|
||||
} catch (Exception e) {
|
||||
transitionTo(mStartTetheringErrorState);
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user