Search in sources :

Example 31 with InterfaceConfiguration

use of android.net.InterfaceConfiguration in project platform_frameworks_base by android.

the class TetherInterfaceStateMachine method configureIfaceIp.

// configured when we start tethering and unconfig'd on error or conclusion
private boolean configureIfaceIp(boolean enabled) {
    if (VDBG)
        Log.d(TAG, "configureIfaceIp(" + enabled + ")");
    String ipAsString = null;
    int prefixLen = 0;
    if (mInterfaceType == ConnectivityManager.TETHERING_USB) {
        ipAsString = USB_NEAR_IFACE_ADDR;
        prefixLen = USB_PREFIX_LENGTH;
    } else if (mInterfaceType == ConnectivityManager.TETHERING_WIFI) {
        ipAsString = WIFI_HOST_IFACE_ADDR;
        prefixLen = WIFI_HOST_IFACE_PREFIX_LENGTH;
    } else {
        // Nothing to do, BT does this elsewhere.
        return true;
    }
    InterfaceConfiguration ifcg = null;
    try {
        ifcg = mNMService.getInterfaceConfig(mIfaceName);
        if (ifcg != null) {
            InetAddress addr = NetworkUtils.numericToInetAddress(ipAsString);
            ifcg.setLinkAddress(new LinkAddress(addr, prefixLen));
            if (mInterfaceType == ConnectivityManager.TETHERING_WIFI) {
                // The WiFi stack has ownership of the interface up/down state.
                // It is unclear whether the bluetooth or USB stacks will manage their own
                // state.
                ifcg.ignoreInterfaceUpDownStatus();
            } else {
                if (enabled) {
                    ifcg.setInterfaceUp();
                } else {
                    ifcg.setInterfaceDown();
                }
            }
            ifcg.clearFlag("running");
            mNMService.setInterfaceConfig(mIfaceName, ifcg);
        }
    } catch (Exception e) {
        Log.e(TAG, "Error configuring interface " + mIfaceName, e);
        return false;
    }
    return true;
}
Also used : LinkAddress(android.net.LinkAddress) InterfaceConfiguration(android.net.InterfaceConfiguration) InetAddress(java.net.InetAddress)

Example 32 with InterfaceConfiguration

use of android.net.InterfaceConfiguration in project platform_frameworks_base by android.

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 33 with InterfaceConfiguration

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

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 34 with InterfaceConfiguration

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

the class TetherInterfaceStateMachine method configureIfaceIp.

// configured when we start tethering and unconfig'd on error or conclusion
private boolean configureIfaceIp(boolean enabled) {
    if (VDBG)
        Log.d(TAG, "configureIfaceIp(" + enabled + ")");
    String ipAsString = null;
    int prefixLen = 0;
    if (mInterfaceType == ConnectivityManager.TETHERING_USB) {
        ipAsString = USB_NEAR_IFACE_ADDR;
        prefixLen = USB_PREFIX_LENGTH;
    } else if (mInterfaceType == ConnectivityManager.TETHERING_WIFI) {
        ipAsString = WIFI_HOST_IFACE_ADDR;
        prefixLen = WIFI_HOST_IFACE_PREFIX_LENGTH;
    } else {
        // Nothing to do, BT does this elsewhere.
        return true;
    }
    InterfaceConfiguration ifcg = null;
    try {
        ifcg = mNMService.getInterfaceConfig(mIfaceName);
        if (ifcg != null) {
            InetAddress addr = NetworkUtils.numericToInetAddress(ipAsString);
            ifcg.setLinkAddress(new LinkAddress(addr, prefixLen));
            if (enabled) {
                ifcg.setInterfaceUp();
            } else {
                ifcg.setInterfaceDown();
            }
            ifcg.clearFlag("running");
            mNMService.setInterfaceConfig(mIfaceName, ifcg);
        }
    } catch (Exception e) {
        Log.e(TAG, "Error configuring interface " + mIfaceName, e);
        return false;
    }
    return true;
}
Also used : LinkAddress(android.net.LinkAddress) InterfaceConfiguration(android.net.InterfaceConfiguration) InetAddress(java.net.InetAddress)

Example 35 with InterfaceConfiguration

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

the class IpManager method setIPv4Address.

private boolean setIPv4Address(LinkAddress address) {
    final InterfaceConfiguration ifcg = new InterfaceConfiguration();
    ifcg.setLinkAddress(address);
    try {
        mNwService.setInterfaceConfig(mInterfaceName, ifcg);
        if (VDBG)
            Log.d(mTag, "IPv4 configuration succeeded");
    } catch (IllegalStateException | RemoteException e) {
        logError("IPv4 configuration failed: %s", e);
        return false;
    }
    return true;
}
Also used : RemoteException(android.os.RemoteException) InterfaceConfiguration(android.net.InterfaceConfiguration)

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