Search in sources :

Example 1 with InterfaceConfiguration

use of android.net.InterfaceConfiguration in project android_frameworks_base by ParanoidAndroid.

the class CommonTimeManagementService method reevaluateServiceState.

private void reevaluateServiceState() {
    String bindIface = null;
    byte bestScore = -1;
    try {
        // Check to see if this interface is suitable to use for time synchronization.
        //
        // TODO : This selection algorithm needs to be enhanced for use with mobile devices.  In
        // particular, the choice of whether to a wireless interface or not should not be an all
        // or nothing thing controlled by properties.  It would probably be better if the
        // platform had some concept of public wireless networks vs. home or friendly wireless
        // networks (something a user would configure in settings or when a new interface is
        // added).  Then this algorithm could pick only wireless interfaces which were flagged
        // as friendly, and be dormant when on public wireless networks.
        //
        // Another issue which needs to be dealt with is the use of driver supplied interface
        // name to determine the network type.  The fact that the wireless interface on a device
        // is named "wlan0" is just a matter of convention; its not a 100% rule.  For example,
        // there are devices out there where the wireless is name "tiwlan0", not "wlan0".  The
        // internal network management interfaces in Android have all of the information needed
        // to make a proper classification, there is just no way (currently) to fetch an
        // interface's type (available from the ConnectionManager) as well as its address
        // (available from either the java.net interfaces or from the NetworkManagment service).
        // Both can enumerate interfaces, but that is no way to correlate their results (no
        // common shared key; although using the interface name in the connection manager would
        // be a good start).  Until this gets resolved, we resort to substring searching for
        // tags like wlan and eth.
        //
        String[] ifaceList = mNetMgr.listInterfaces();
        if (null != ifaceList) {
            for (String iface : ifaceList) {
                byte thisScore = -1;
                for (InterfaceScoreRule r : IFACE_SCORE_RULES) {
                    if (iface.contains(r.mPrefix)) {
                        thisScore = r.mScore;
                        break;
                    }
                }
                if (thisScore <= bestScore)
                    continue;
                InterfaceConfiguration config = mNetMgr.getInterfaceConfig(iface);
                if (null == config)
                    continue;
                if (config.isActive()) {
                    bindIface = iface;
                    bestScore = thisScore;
                }
            }
        }
    } catch (RemoteException e) {
        // Bad news; we should not be getting remote exceptions from the connectivity manager
        // since it is running in SystemServer along side of us.  It probably does not matter
        // what we do here, but go ahead and unbind the common time service in this case, just
        // so we have some defined behavior.
        bindIface = null;
    }
    boolean doRebind = true;
    synchronized (mLock) {
        if ((null != bindIface) && (null == mCurIface)) {
            Log.e(TAG, String.format("Binding common time service to %s.", bindIface));
            mCurIface = bindIface;
        } else if ((null == bindIface) && (null != mCurIface)) {
            Log.e(TAG, "Unbinding common time service.");
            mCurIface = null;
        } else if ((null != bindIface) && (null != mCurIface) && !bindIface.equals(mCurIface)) {
            Log.e(TAG, String.format("Switching common time service binding from %s to %s.", mCurIface, bindIface));
            mCurIface = bindIface;
        } else {
            doRebind = false;
        }
    }
    if (doRebind && (null != mCTConfig)) {
        byte newPrio = (bestScore > 0) ? (byte) (bestScore * BASE_SERVER_PRIO) : BASE_SERVER_PRIO;
        if (newPrio != mEffectivePrio) {
            mEffectivePrio = newPrio;
            mCTConfig.setMasterElectionPriority(mEffectivePrio);
        }
        int res = mCTConfig.setNetworkBinding(mCurIface);
        if (res != CommonTimeConfig.SUCCESS)
            scheduleTimeConfigReconnect();
        else if (NO_INTERFACE_TIMEOUT >= 0) {
            mNoInterfaceHandler.removeCallbacks(mNoInterfaceRunnable);
            if (null == mCurIface)
                mNoInterfaceHandler.postDelayed(mNoInterfaceRunnable, NO_INTERFACE_TIMEOUT);
        }
    }
}
Also used : RemoteException(android.os.RemoteException) InterfaceConfiguration(android.net.InterfaceConfiguration)

Example 2 with InterfaceConfiguration

use of android.net.InterfaceConfiguration in project android_frameworks_base by ParanoidAndroid.

the class NetworkManagementService method getInterfaceConfig.

@Override
public InterfaceConfiguration getInterfaceConfig(String iface) {
    mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
    final NativeDaemonEvent event;
    try {
        event = mConnector.execute("interface", "getcfg", iface);
    } catch (NativeDaemonConnectorException e) {
        throw e.rethrowAsParcelableException();
    }
    event.checkCode(InterfaceGetCfgResult);
    // Rsp: 213 xx:xx:xx:xx:xx:xx yyy.yyy.yyy.yyy zzz flag1 flag2 flag3
    final StringTokenizer st = new StringTokenizer(event.getMessage());
    InterfaceConfiguration cfg;
    try {
        cfg = new InterfaceConfiguration();
        cfg.setHardwareAddress(st.nextToken(" "));
        InetAddress addr = null;
        int prefixLength = 0;
        try {
            addr = NetworkUtils.numericToInetAddress(st.nextToken());
        } catch (IllegalArgumentException iae) {
            Slog.e(TAG, "Failed to parse ipaddr", iae);
        }
        try {
            prefixLength = Integer.parseInt(st.nextToken());
        } catch (NumberFormatException nfe) {
            Slog.e(TAG, "Failed to parse prefixLength", nfe);
        }
        cfg.setLinkAddress(new LinkAddress(addr, prefixLength));
        while (st.hasMoreTokens()) {
            cfg.setFlag(st.nextToken());
        }
    } catch (NoSuchElementException nsee) {
        throw new IllegalStateException("Invalid response from daemon: " + event);
    }
    return cfg;
}
Also used : LinkAddress(android.net.LinkAddress) StringTokenizer(java.util.StringTokenizer) InterfaceConfiguration(android.net.InterfaceConfiguration) InetAddress(java.net.InetAddress) NoSuchElementException(java.util.NoSuchElementException)

Example 3 with InterfaceConfiguration

use of android.net.InterfaceConfiguration in project android_frameworks_base by ParanoidAndroid.

the class NetworkManagementService method setInterfaceDown.

@Override
public void setInterfaceDown(String iface) {
    mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
    final InterfaceConfiguration ifcg = getInterfaceConfig(iface);
    ifcg.setInterfaceDown();
    setInterfaceConfig(iface, ifcg);
}
Also used : InterfaceConfiguration(android.net.InterfaceConfiguration)

Example 4 with InterfaceConfiguration

use of android.net.InterfaceConfiguration in project android_frameworks_base by ParanoidAndroid.

the class NetworkManagementService method setInterfaceUp.

@Override
public void setInterfaceUp(String iface) {
    mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
    final InterfaceConfiguration ifcg = getInterfaceConfig(iface);
    ifcg.setInterfaceUp();
    setInterfaceConfig(iface, ifcg);
}
Also used : InterfaceConfiguration(android.net.InterfaceConfiguration)

Example 5 with InterfaceConfiguration

use of android.net.InterfaceConfiguration in project android_frameworks_base by ParanoidAndroid.

the class Tethering method configureUsbIface.

// configured when we start tethering and unconfig'd on error or conclusion
private boolean configureUsbIface(boolean enabled) {
    if (VDBG)
        Log.d(TAG, "configureUsbIface(" + enabled + ")");
    // toggle the USB interfaces
    String[] ifaces = new String[0];
    try {
        ifaces = mNMService.listInterfaces();
    } catch (Exception e) {
        Log.e(TAG, "Error listing Interfaces", e);
        return false;
    }
    for (String iface : ifaces) {
        if (isUsb(iface)) {
            InterfaceConfiguration ifcg = null;
            try {
                ifcg = mNMService.getInterfaceConfig(iface);
                if (ifcg != null) {
                    InetAddress addr = NetworkUtils.numericToInetAddress(USB_NEAR_IFACE_ADDR);
                    ifcg.setLinkAddress(new LinkAddress(addr, USB_PREFIX_LENGTH));
                    if (enabled) {
                        ifcg.setInterfaceUp();
                    } else {
                        ifcg.setInterfaceDown();
                    }
                    ifcg.clearFlag("running");
                    mNMService.setInterfaceConfig(iface, ifcg);
                }
            } catch (Exception e) {
                Log.e(TAG, "Error configuring interface " + iface, e);
                return false;
            }
        }
    }
    return true;
}
Also used : LinkAddress(android.net.LinkAddress) InterfaceConfiguration(android.net.InterfaceConfiguration) InetAddress(java.net.InetAddress) RemoteException(android.os.RemoteException)

Aggregations

InterfaceConfiguration (android.net.InterfaceConfiguration)44 LinkAddress (android.net.LinkAddress)22 RemoteException (android.os.RemoteException)20 InetAddress (java.net.InetAddress)13 NoSuchElementException (java.util.NoSuchElementException)6 StringTokenizer (java.util.StringTokenizer)6 NotFoundException (android.content.res.Resources.NotFoundException)1 ConnectivityManager (android.net.ConnectivityManager)1 RouteInfo (android.net.RouteInfo)1 IBinder (android.os.IBinder)1 INetworkManagementService (android.os.INetworkManagementService)1 Message (android.os.Message)1