From 198bc11d099008531b7e445d9715698421d6e644 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Mon, 7 May 2012 12:34:26 -0700 Subject: [PATCH] Bring up the ethernet interface when detected We don't get link status info if it's down. If the device has been configured for ethernet and we see the interface appear, we should make it active. bug:6444395 Change-Id: Ibc233ab12942b069d7db9c0671936798c5161659 --- .../java/android/net/EthernetDataTracker.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java index fb09ba5402e21..28bd289632fbe 100644 --- a/core/java/android/net/EthernetDataTracker.java +++ b/core/java/android/net/EthernetDataTracker.java @@ -59,6 +59,8 @@ public class EthernetDataTracker implements NetworkStateTracker { private static String sIfaceMatch = ""; private static String mIface = ""; + private INetworkManagementService mNMService; + private static class InterfaceObserver extends INetworkManagementEventObserver.Stub { private EthernetDataTracker mTracker; @@ -117,6 +119,13 @@ public class EthernetDataTracker implements NetworkStateTracker { mIface = iface; } + // we don't get link status indications unless the iface is up - bring it up + try { + mNMService.setInterfaceUp(iface); + } catch (Exception e) { + Log.e(TAG, "Error upping interface " + iface + ": " + e); + } + mNetworkInfo.setIsAvailable(true); Message msg = mCsHandler.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo); msg.sendToTarget(); @@ -199,7 +208,7 @@ public class EthernetDataTracker implements NetworkStateTracker { // register for notifications from NetworkManagement Service IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE); - INetworkManagementService service = INetworkManagementService.Stub.asInterface(b); + mNMService = INetworkManagementService.Stub.asInterface(b); mInterfaceObserver = new InterfaceObserver(this); @@ -208,12 +217,12 @@ public class EthernetDataTracker implements NetworkStateTracker { sIfaceMatch = context.getResources().getString( com.android.internal.R.string.config_ethernet_iface_regex); try { - final String[] ifaces = service.listInterfaces(); + final String[] ifaces = mNMService.listInterfaces(); for (String iface : ifaces) { if (iface.matches(sIfaceMatch)) { mIface = iface; - service.setInterfaceUp(iface); - InterfaceConfiguration config = service.getInterfaceConfig(iface); + mNMService.setInterfaceUp(iface); + InterfaceConfiguration config = mNMService.getInterfaceConfig(iface); mLinkUp = config.isActive(); if (config != null && mHwAddr == null) { mHwAddr = config.getHardwareAddress(); @@ -230,7 +239,7 @@ public class EthernetDataTracker implements NetworkStateTracker { } try { - service.registerObserver(mInterfaceObserver); + mNMService.registerObserver(mInterfaceObserver); } catch (RemoteException e) { Log.e(TAG, "Could not register InterfaceObserver " + e); }