diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2011-01-28 15:34:55 -0800 |
---|---|---|
committer | Robert Greenwalt <rgreenwalt@google.com> | 2011-01-28 15:34:55 -0800 |
commit | ed1264093234b1f1354cd5f669eb82a50bb56869 (patch) | |
tree | 56fe5fb7921241f5098709ddd785fcf8cd3aa2db | |
parent | ecede3914f9532acaa89210f432812836ccc84d5 (diff) | |
download | frameworks_base-ed1264093234b1f1354cd5f669eb82a50bb56869.zip frameworks_base-ed1264093234b1f1354cd5f669eb82a50bb56869.tar.gz frameworks_base-ed1264093234b1f1354cd5f669eb82a50bb56869.tar.bz2 |
Bind addr and prefixLength together in LinkAddress
bug:2542681
Change-Id: I90200446216d78c676498144946832afe75efdb8
5 files changed, 39 insertions, 36 deletions
diff --git a/core/java/android/net/InterfaceConfiguration.java b/core/java/android/net/InterfaceConfiguration.java index d1bbaa4..89b5915 100644 --- a/core/java/android/net/InterfaceConfiguration.java +++ b/core/java/android/net/InterfaceConfiguration.java @@ -28,8 +28,7 @@ import java.net.UnknownHostException; */ public class InterfaceConfiguration implements Parcelable { public String hwAddr; - public InetAddress addr; - public InetAddress mask; + public LinkAddress addr; public String interfaceFlags; public InterfaceConfiguration() { @@ -41,8 +40,6 @@ public class InterfaceConfiguration implements Parcelable { str.append("ipddress "); str.append((addr != null) ? addr.toString() : "NULL"); - str.append(" netmask "); - str.append((mask != null) ? mask.toString() : "NULL"); str.append(" flags ").append(interfaceFlags); str.append(" hwaddr ").append(hwAddr); @@ -59,7 +56,7 @@ public class InterfaceConfiguration implements Parcelable { public boolean isActive() { try { if(interfaceFlags.contains("up")) { - for (byte b : addr.getAddress()) { + for (byte b : addr.getAddress().getAddress()) { if (b != 0) return true; } } @@ -79,13 +76,7 @@ public class InterfaceConfiguration implements Parcelable { dest.writeString(hwAddr); if (addr != null) { dest.writeByte((byte)1); - dest.writeByteArray(addr.getAddress()); - } else { - dest.writeByte((byte)0); - } - if (mask != null) { - dest.writeByte((byte)1); - dest.writeByteArray(mask.getAddress()); + dest.writeParcelable(addr, flags); } else { dest.writeByte((byte)0); } @@ -99,14 +90,7 @@ public class InterfaceConfiguration implements Parcelable { InterfaceConfiguration info = new InterfaceConfiguration(); info.hwAddr = in.readString(); if (in.readByte() == 1) { - try { - info.addr = InetAddress.getByAddress(in.createByteArray()); - } catch (UnknownHostException e) {} - } - if (in.readByte() == 1) { - try { - info.mask = InetAddress.getByAddress(in.createByteArray()); - } catch (UnknownHostException e) {} + info.addr = in.readParcelable(null); } info.interfaceFlags = in.readString(); return info; diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java index 943a3ff..6eb6b56 100644 --- a/core/java/android/server/BluetoothService.java +++ b/core/java/android/server/BluetoothService.java @@ -47,6 +47,7 @@ import android.content.SharedPreferences; import android.content.res.Resources.NotFoundException; import android.net.ConnectivityManager; import android.net.InterfaceConfiguration; +import android.net.LinkAddress; import android.os.Binder; import android.os.Handler; import android.os.IBinder; @@ -1697,12 +1698,15 @@ public class BluetoothService extends IBluetooth.Stub { try { ifcg = service.getInterfaceConfig(iface); if (ifcg != null) { - ifcg.mask = InetAddress.getByName(BLUETOOTH_NETMASK); - - if (ifcg.addr == null || ifcg.addr.equals(InetAddress.getByName("0.0.0.0"))) { - ifcg.addr = InetAddress.getByName(address); - ifcg.interfaceFlags = ifcg.interfaceFlags.replace("down", "up"); + InetAddress mask = InetAddress.getByName(BLUETOOTH_NETMASK); + InetAddress addr = null; + if (ifcg.addr == null || (addr = ifcg.addr.getAddress()) == null || + addr.equals(InetAddress.getByName("0.0.0.0")) || + addr.equals(InetAddress.getByName("::0"))) { + addr = InetAddress.getByName(address); } + ifcg.interfaceFlags = ifcg.interfaceFlags.replace("down", "up"); + ifcg.addr = new LinkAddress(addr, mask); ifcg.interfaceFlags = ifcg.interfaceFlags.replace("running", ""); ifcg.interfaceFlags = ifcg.interfaceFlags.replace(" "," "); service.setInterfaceConfig(iface, ifcg); diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 152605f..91a0302 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -26,6 +26,8 @@ import android.content.pm.PackageManager; import android.net.Uri; import android.net.InterfaceConfiguration; import android.net.INetworkManagementEventObserver; +import android.net.LinkAddress; +import android.net.NetworkUtils; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiConfiguration.KeyMgmt; import android.os.INetworkManagementService; @@ -265,18 +267,21 @@ class NetworkManagementService extends INetworkManagementService.Stub { cfg = new InterfaceConfiguration(); cfg.hwAddr = st.nextToken(" "); + InetAddress addr = null; + InetAddress mask = null; try { - cfg.addr = InetAddress.getByName(st.nextToken(" ")); + addr = InetAddress.getByName(st.nextToken(" ")); } catch (UnknownHostException uhe) { Slog.e(TAG, "Failed to parse ipaddr", uhe); } try { - cfg.mask = InetAddress.getByName(st.nextToken(" ")); + mask = InetAddress.getByName(st.nextToken(" ")); } catch (UnknownHostException uhe) { Slog.e(TAG, "Failed to parse netmask", uhe); } + cfg.addr = new LinkAddress(addr, mask); cfg.interfaceFlags = st.nextToken("]").trim() +"]"; } catch (NoSuchElementException nsee) { throw new IllegalStateException( @@ -288,9 +293,20 @@ class NetworkManagementService extends INetworkManagementService.Stub { public void setInterfaceConfig( String iface, InterfaceConfiguration cfg) throws IllegalStateException { + LinkAddress linkAddr = cfg.addr; + if (linkAddr == null) throw new IllegalStateException("Null LinkAddress given"); + InetAddress addr = linkAddr.getAddress(); + // TODO - fix this to pass prefixlength and be v6 capapble + InetAddress mask = null; + try { + mask = NetworkUtils.intToInetAddress(NetworkUtils.prefixLengthToNetmaskInt( + linkAddr.getNetworkPrefixLength())); + } catch (IllegalArgumentException e) { + throw new IllegalStateException(e); + } + if (addr == null || mask == null) throw new IllegalStateException("Null Address given"); String cmd = String.format("interface setcfg %s %s %s %s", iface, - cfg.addr.getHostAddress(), cfg.mask.getHostAddress(), - cfg.interfaceFlags); + addr.getHostAddress(), mask.getHostAddress(), cfg.interfaceFlags); try { mConnector.doCommand(cmd); } catch (NativeDaemonConnectorException e) { diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java index 4bc3b06..ff5f989 100644 --- a/services/java/com/android/server/connectivity/Tethering.java +++ b/services/java/com/android/server/connectivity/Tethering.java @@ -31,6 +31,7 @@ import android.net.ConnectivityManager; import android.net.InterfaceConfiguration; import android.net.IConnectivityManager; import android.net.INetworkManagementEventObserver; +import android.net.LinkAddress; import android.net.LinkProperties; import android.net.NetworkInfo; import android.os.Binder; @@ -566,8 +567,9 @@ public class Tethering extends INetworkManagementEventObserver.Stub { try { ifcg = service.getInterfaceConfig(iface); if (ifcg != null) { - ifcg.addr = InetAddress.getByName(USB_NEAR_IFACE_ADDR); - ifcg.mask = InetAddress.getByName(USB_NETMASK); + InetAddress addr = InetAddress.getByName(USB_NEAR_IFACE_ADDR); + InetAddress mask = InetAddress.getByName(USB_NETMASK); + ifcg.addr = new LinkAddress(addr, mask); if (enabled) { ifcg.interfaceFlags = ifcg.interfaceFlags.replace("down", "up"); } else { diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index f0d26d1..b4dcf41 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -1013,8 +1013,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { ifcg = service.getInterfaceConfig(intf); if (ifcg != null) { /* IP/netmask: 192.168.43.1/255.255.255.0 */ - ifcg.addr = InetAddress.getByName("192.168.43.1"); - ifcg.mask = InetAddress.getByName("255.255.255.0"); + ifcg.addr = new LinkAddress(InetAddress.getByName("192.168.43.1"), 24); ifcg.interfaceFlags = "[up]"; service.setInterfaceConfig(intf, ifcg); @@ -2529,9 +2528,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); INetworkManagementService netd = INetworkManagementService.Stub.asInterface(b); InterfaceConfiguration ifcg = new InterfaceConfiguration(); - ifcg.addr = NetworkUtils.numericToInetAddress(dhcpInfoInternal.ipAddress); - ifcg.mask = NetworkUtils.intToInetAddress( - NetworkUtils.prefixLengthToNetmaskInt(dhcpInfoInternal.prefixLength)); + ifcg.addr = dhcpInfoInternal.makeLinkAddress(); ifcg.interfaceFlags = "[up]"; try { netd.setInterfaceConfig(mInterfaceName, ifcg); |