Search in sources :

Example 86 with Network

use of android.net.Network in project android_frameworks_base by crdroidandroid.

the class ConnectivityService method getUnfilteredActiveNetworkState.

private NetworkState getUnfilteredActiveNetworkState(int uid) {
    NetworkAgentInfo nai = getDefaultNetwork();
    final Network[] networks = getVpnUnderlyingNetworks(uid);
    if (networks != null) {
        //                    first one.
        if (networks.length > 0) {
            nai = getNetworkAgentInfoForNetwork(networks[0]);
        } else {
            nai = null;
        }
    }
    if (nai != null) {
        return nai.getNetworkState();
    } else {
        return NetworkState.EMPTY;
    }
}
Also used : NetworkAgentInfo(com.android.server.connectivity.NetworkAgentInfo) Network(android.net.Network)

Example 87 with Network

use of android.net.Network in project android_frameworks_base by crdroidandroid.

the class ConnectivityServiceTest method testRequestBenchmark.

@SmallTest
public void testRequestBenchmark() throws Exception {
    // Benchmarks connecting and switching performance in the presence of a large number of
    // NetworkRequests.
    // 1. File NUM_REQUESTS requests.
    // 2. Have a network connect. Wait for NUM_REQUESTS onAvailable callbacks to fire.
    // 3. Have a new network connect and outscore the previous. Wait for NUM_REQUESTS onLosing
    //    and NUM_REQUESTS onAvailable callbacks to fire.
    // See how long it took.
    final int NUM_REQUESTS = 90;
    final NetworkRequest request = new NetworkRequest.Builder().clearCapabilities().build();
    final NetworkCallback[] callbacks = new NetworkCallback[NUM_REQUESTS];
    final CountDownLatch availableLatch = new CountDownLatch(NUM_REQUESTS);
    final CountDownLatch losingLatch = new CountDownLatch(NUM_REQUESTS);
    final int REGISTER_TIME_LIMIT_MS = 100;
    long startTime = System.currentTimeMillis();
    for (int i = 0; i < NUM_REQUESTS; i++) {
        callbacks[i] = new NetworkCallback() {

            @Override
            public void onAvailable(Network n) {
                availableLatch.countDown();
            }

            @Override
            public void onLosing(Network n, int t) {
                losingLatch.countDown();
            }
        };
        mCm.registerNetworkCallback(request, callbacks[i]);
    }
    long timeTaken = System.currentTimeMillis() - startTime;
    String msg = String.format("Register %d callbacks: %dms, acceptable %dms", NUM_REQUESTS, timeTaken, REGISTER_TIME_LIMIT_MS);
    Log.d(TAG, msg);
    assertTrue(msg, timeTaken < REGISTER_TIME_LIMIT_MS);
    final int CONNECT_TIME_LIMIT_MS = 30;
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    // Don't request that the network validate, because otherwise connect() will block until
    // the network gets NET_CAPABILITY_VALIDATED, after all the callbacks below have fired,
    // and we won't actually measure anything.
    mCellNetworkAgent.connect(false);
    startTime = System.currentTimeMillis();
    if (!availableLatch.await(CONNECT_TIME_LIMIT_MS, TimeUnit.MILLISECONDS)) {
        fail(String.format("Only dispatched %d/%d onAvailable callbacks in %dms", NUM_REQUESTS - availableLatch.getCount(), NUM_REQUESTS, CONNECT_TIME_LIMIT_MS));
    }
    timeTaken = System.currentTimeMillis() - startTime;
    Log.d(TAG, String.format("Connect, %d callbacks: %dms, acceptable %dms", NUM_REQUESTS, timeTaken, CONNECT_TIME_LIMIT_MS));
    final int SWITCH_TIME_LIMIT_MS = 30;
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    // Give wifi a high enough score that we'll linger cell when wifi comes up.
    mWiFiNetworkAgent.adjustScore(40);
    mWiFiNetworkAgent.connect(false);
    startTime = System.currentTimeMillis();
    if (!losingLatch.await(SWITCH_TIME_LIMIT_MS, TimeUnit.MILLISECONDS)) {
        fail(String.format("Only dispatched %d/%d onLosing callbacks in %dms", NUM_REQUESTS - losingLatch.getCount(), NUM_REQUESTS, SWITCH_TIME_LIMIT_MS));
    }
    timeTaken = System.currentTimeMillis() - startTime;
    Log.d(TAG, String.format("Linger, %d callbacks: %dms, acceptable %dms", NUM_REQUESTS, timeTaken, SWITCH_TIME_LIMIT_MS));
    final int UNREGISTER_TIME_LIMIT_MS = 10;
    startTime = System.currentTimeMillis();
    for (int i = 0; i < NUM_REQUESTS; i++) {
        mCm.unregisterNetworkCallback(callbacks[i]);
    }
    timeTaken = System.currentTimeMillis() - startTime;
    msg = String.format("Unregister %d callbacks: %dms, acceptable %dms", NUM_REQUESTS, timeTaken, UNREGISTER_TIME_LIMIT_MS);
    Log.d(TAG, msg);
    assertTrue(msg, timeTaken < UNREGISTER_TIME_LIMIT_MS);
}
Also used : Network(android.net.Network) NetworkRequest(android.net.NetworkRequest) CountDownLatch(java.util.concurrent.CountDownLatch) NetworkCallback(android.net.ConnectivityManager.NetworkCallback) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 88 with Network

use of android.net.Network in project android_frameworks_base by crdroidandroid.

the class ConnectivityServiceTest method testPacketKeepalives.

public void testPacketKeepalives() throws Exception {
    InetAddress myIPv4 = InetAddress.getByName("192.0.2.129");
    InetAddress notMyIPv4 = InetAddress.getByName("192.0.2.35");
    InetAddress myIPv6 = InetAddress.getByName("2001:db8::1");
    InetAddress dstIPv4 = InetAddress.getByName("8.8.8.8");
    InetAddress dstIPv6 = InetAddress.getByName("2001:4860:4860::8888");
    LinkProperties lp = new LinkProperties();
    lp.setInterfaceName("wlan12");
    lp.addLinkAddress(new LinkAddress(myIPv6, 64));
    lp.addLinkAddress(new LinkAddress(myIPv4, 25));
    lp.addRoute(new RouteInfo(InetAddress.getByName("fe80::1234")));
    lp.addRoute(new RouteInfo(InetAddress.getByName("192.0.2.254")));
    Network notMyNet = new Network(61234);
    Network myNet = connectKeepaliveNetwork(lp);
    TestKeepaliveCallback callback = new TestKeepaliveCallback();
    PacketKeepalive ka;
    // Attempt to start keepalives with invalid parameters and check for errors.
    ka = mCm.startNattKeepalive(notMyNet, 25, callback, myIPv4, 1234, dstIPv4);
    callback.expectError(PacketKeepalive.ERROR_INVALID_NETWORK);
    ka = mCm.startNattKeepalive(myNet, 19, callback, notMyIPv4, 1234, dstIPv4);
    callback.expectError(PacketKeepalive.ERROR_INVALID_INTERVAL);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 1234, dstIPv6);
    callback.expectError(PacketKeepalive.ERROR_INVALID_IP_ADDRESS);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv6, 1234, dstIPv4);
    callback.expectError(PacketKeepalive.ERROR_INVALID_IP_ADDRESS);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv6, 1234, dstIPv6);
    // NAT-T is IPv4-only.
    callback.expectError(PacketKeepalive.ERROR_INVALID_IP_ADDRESS);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 123456, dstIPv4);
    callback.expectError(PacketKeepalive.ERROR_INVALID_PORT);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 123456, dstIPv4);
    callback.expectError(PacketKeepalive.ERROR_INVALID_PORT);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 12345, dstIPv4);
    callback.expectError(PacketKeepalive.ERROR_HARDWARE_UNSUPPORTED);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 12345, dstIPv4);
    callback.expectError(PacketKeepalive.ERROR_HARDWARE_UNSUPPORTED);
    // Check that a started keepalive can be stopped.
    mWiFiNetworkAgent.setStartKeepaliveError(PacketKeepalive.SUCCESS);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 12345, dstIPv4);
    callback.expectStarted();
    mWiFiNetworkAgent.setStopKeepaliveError(PacketKeepalive.SUCCESS);
    ka.stop();
    callback.expectStopped();
    // Check that deleting the IP address stops the keepalive.
    LinkProperties bogusLp = new LinkProperties(lp);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 12345, dstIPv4);
    callback.expectStarted();
    bogusLp.removeLinkAddress(new LinkAddress(myIPv4, 25));
    bogusLp.addLinkAddress(new LinkAddress(notMyIPv4, 25));
    mWiFiNetworkAgent.sendLinkProperties(bogusLp);
    callback.expectError(PacketKeepalive.ERROR_INVALID_IP_ADDRESS);
    mWiFiNetworkAgent.sendLinkProperties(lp);
    // Check that a started keepalive is stopped correctly when the network disconnects.
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 12345, dstIPv4);
    callback.expectStarted();
    mWiFiNetworkAgent.disconnect();
    callback.expectError(PacketKeepalive.ERROR_INVALID_NETWORK);
    // ... and that stopping it after that has no adverse effects.
    assertNull(mCm.getNetworkCapabilities(myNet));
    ka.stop();
    // Reconnect.
    myNet = connectKeepaliveNetwork(lp);
    mWiFiNetworkAgent.setStartKeepaliveError(PacketKeepalive.SUCCESS);
    // Check things work as expected when the keepalive is stopped and the network disconnects.
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 12345, dstIPv4);
    callback.expectStarted();
    ka.stop();
    mWiFiNetworkAgent.disconnect();
    mService.waitForIdle();
    callback.expectStopped();
    // Reconnect.
    myNet = connectKeepaliveNetwork(lp);
    mWiFiNetworkAgent.setStartKeepaliveError(PacketKeepalive.SUCCESS);
    // Check that keepalive slots start from 1 and increment. The first one gets slot 1.
    mWiFiNetworkAgent.setExpectedKeepaliveSlot(1);
    ka = mCm.startNattKeepalive(myNet, 25, callback, myIPv4, 12345, dstIPv4);
    callback.expectStarted();
    // The second one gets slot 2.
    mWiFiNetworkAgent.setExpectedKeepaliveSlot(2);
    TestKeepaliveCallback callback2 = new TestKeepaliveCallback();
    PacketKeepalive ka2 = mCm.startNattKeepalive(myNet, 25, callback2, myIPv4, 6789, dstIPv4);
    callback2.expectStarted();
    // Now stop the first one and create a third. This also gets slot 1.
    ka.stop();
    callback.expectStopped();
    mWiFiNetworkAgent.setExpectedKeepaliveSlot(1);
    TestKeepaliveCallback callback3 = new TestKeepaliveCallback();
    PacketKeepalive ka3 = mCm.startNattKeepalive(myNet, 25, callback3, myIPv4, 9876, dstIPv4);
    callback3.expectStarted();
    ka2.stop();
    callback2.expectStopped();
    ka3.stop();
    callback3.expectStopped();
}
Also used : LinkAddress(android.net.LinkAddress) Network(android.net.Network) PacketKeepalive(android.net.ConnectivityManager.PacketKeepalive) RouteInfo(android.net.RouteInfo) InetAddress(java.net.InetAddress) LinkProperties(android.net.LinkProperties)

Example 89 with Network

use of android.net.Network in project android_frameworks_base by crdroidandroid.

the class ConnectivityServiceTest method testAvoidBadWifi.

@SmallTest
public void testAvoidBadWifi() throws Exception {
    final ContentResolver cr = mServiceContext.getContentResolver();
    final WrappedAvoidBadWifiTracker tracker = mService.getAvoidBadWifiTracker();
    // Pretend we're on a carrier that restricts switching away from bad wifi.
    tracker.configRestrictsAvoidBadWifi = true;
    // File a request for cell to ensure it doesn't go down.
    final TestNetworkCallback cellNetworkCallback = new TestNetworkCallback();
    final NetworkRequest cellRequest = new NetworkRequest.Builder().addTransportType(TRANSPORT_CELLULAR).build();
    mCm.requestNetwork(cellRequest, cellNetworkCallback);
    TestNetworkCallback defaultCallback = new TestNetworkCallback();
    mCm.registerDefaultNetworkCallback(defaultCallback);
    NetworkRequest validatedWifiRequest = new NetworkRequest.Builder().addTransportType(TRANSPORT_WIFI).addCapability(NET_CAPABILITY_VALIDATED).build();
    TestNetworkCallback validatedWifiCallback = new TestNetworkCallback();
    mCm.registerNetworkCallback(validatedWifiRequest, validatedWifiCallback);
    Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 0);
    tracker.reevaluate();
    // Bring up validated cell.
    mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
    mCellNetworkAgent.connect(true);
    cellNetworkCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
    Network cellNetwork = mCellNetworkAgent.getNetwork();
    // Bring up validated wifi.
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mWiFiNetworkAgent.connect(true);
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
    validatedWifiCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
    Network wifiNetwork = mWiFiNetworkAgent.getNetwork();
    // Fail validation on wifi.
    mWiFiNetworkAgent.getWrappedNetworkMonitor().gen204ProbeResult = 599;
    mCm.reportNetworkConnectivity(wifiNetwork, false);
    validatedWifiCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
    // Because avoid bad wifi is off, we don't switch to cellular.
    defaultCallback.assertNoCallback();
    assertFalse(mCm.getNetworkCapabilities(wifiNetwork).hasCapability(NET_CAPABILITY_VALIDATED));
    assertTrue(mCm.getNetworkCapabilities(cellNetwork).hasCapability(NET_CAPABILITY_VALIDATED));
    assertEquals(mCm.getActiveNetwork(), wifiNetwork);
    // Simulate switching to a carrier that does not restrict avoiding bad wifi, and expect
    // that we switch back to cell.
    tracker.configRestrictsAvoidBadWifi = false;
    tracker.reevaluate();
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
    assertEquals(mCm.getActiveNetwork(), cellNetwork);
    // Switch back to a restrictive carrier.
    tracker.configRestrictsAvoidBadWifi = true;
    tracker.reevaluate();
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
    assertEquals(mCm.getActiveNetwork(), wifiNetwork);
    // Simulate the user selecting "switch" on the dialog, and check that we switch to cell.
    mCm.setAvoidUnvalidated(wifiNetwork);
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
    assertFalse(mCm.getNetworkCapabilities(wifiNetwork).hasCapability(NET_CAPABILITY_VALIDATED));
    assertTrue(mCm.getNetworkCapabilities(cellNetwork).hasCapability(NET_CAPABILITY_VALIDATED));
    assertEquals(mCm.getActiveNetwork(), cellNetwork);
    // Disconnect and reconnect wifi to clear the one-time switch above.
    mWiFiNetworkAgent.disconnect();
    mWiFiNetworkAgent = new MockNetworkAgent(TRANSPORT_WIFI);
    mWiFiNetworkAgent.connect(true);
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
    validatedWifiCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
    wifiNetwork = mWiFiNetworkAgent.getNetwork();
    // Fail validation on wifi and expect the dialog to appear.
    mWiFiNetworkAgent.getWrappedNetworkMonitor().gen204ProbeResult = 599;
    mCm.reportNetworkConnectivity(wifiNetwork, false);
    validatedWifiCallback.expectCallback(CallbackState.LOST, mWiFiNetworkAgent);
    // Simulate the user selecting "switch" and checking the don't ask again checkbox.
    Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 1);
    tracker.reevaluate();
    // We now switch to cell.
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
    assertFalse(mCm.getNetworkCapabilities(wifiNetwork).hasCapability(NET_CAPABILITY_VALIDATED));
    assertTrue(mCm.getNetworkCapabilities(cellNetwork).hasCapability(NET_CAPABILITY_VALIDATED));
    assertEquals(mCm.getActiveNetwork(), cellNetwork);
    // Simulate the user turning the cellular fallback setting off and then on.
    // We switch to wifi and then to cell.
    Settings.Global.putString(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, null);
    tracker.reevaluate();
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
    assertEquals(mCm.getActiveNetwork(), wifiNetwork);
    Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 1);
    tracker.reevaluate();
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
    assertEquals(mCm.getActiveNetwork(), cellNetwork);
    // If cell goes down, we switch to wifi.
    mCellNetworkAgent.disconnect();
    defaultCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent);
    defaultCallback.expectCallback(CallbackState.AVAILABLE, mWiFiNetworkAgent);
    validatedWifiCallback.assertNoCallback();
    mCm.unregisterNetworkCallback(cellNetworkCallback);
    mCm.unregisterNetworkCallback(validatedWifiCallback);
    mCm.unregisterNetworkCallback(defaultCallback);
}
Also used : Network(android.net.Network) NetworkRequest(android.net.NetworkRequest) ContentResolver(android.content.ContentResolver) MockContentResolver(android.test.mock.MockContentResolver) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Example 90 with Network

use of android.net.Network in project android_frameworks_base by crdroidandroid.

the class NetdEventListenerServiceTest method testConcurrentDnsBatchesAndNetworkLoss.

@SmallTest
public void testConcurrentDnsBatchesAndNetworkLoss() throws Exception {
    logDnsAsync(105, LATENCIES);
    Thread.sleep(10L);
    // call onLost() asynchronously to logDnsAsync's onDnsEvent() calls.
    mCallbackCaptor.getValue().onLost(new Network(105));
    // do not verify unpredictable batch
    verify(mLog, timeout(500).times(1)).log(any());
}
Also used : Network(android.net.Network) SmallTest(android.test.suitebuilder.annotation.SmallTest)

Aggregations

Network (android.net.Network)90 SmallTest (android.test.suitebuilder.annotation.SmallTest)28 NetworkAgentInfo (com.android.server.connectivity.NetworkAgentInfo)25 NetworkCapabilities (android.net.NetworkCapabilities)22 NetworkInfo (android.net.NetworkInfo)17 LinkProperties (android.net.LinkProperties)16 NetworkRequest (android.net.NetworkRequest)16 NetworkCallback (android.net.ConnectivityManager.NetworkCallback)11 ConnectivityManager (android.net.ConnectivityManager)9 InetAddress (java.net.InetAddress)6 Test (org.junit.Test)6 Nullable (android.annotation.Nullable)5 NetworkMisc (android.net.NetworkMisc)5 NetworkState (android.net.NetworkState)5 WifiConfiguration (android.net.wifi.WifiConfiguration)5 WifiInfo (android.net.wifi.WifiInfo)5 ConditionVariable (android.os.ConditionVariable)5 WebSettings (android.webkit.WebSettings)5 HomeSP (com.android.hotspot2.pps.HomeSP)5 LegacyVpnInfo (com.android.internal.net.LegacyVpnInfo)5