Search in sources :

Example 76 with Network

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

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 77 with Network

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

the class ConnectivityService method getDefaultNetworkCapabilitiesForUser.

@Override
public NetworkCapabilities[] getDefaultNetworkCapabilitiesForUser(int userId) {
    // The basic principle is: if an app's traffic could possibly go over a
    // network, without the app doing anything multinetwork-specific,
    // (hence, by "default"), then include that network's capabilities in
    // the array.
    //
    // In the normal case, app traffic only goes over the system's default
    // network connection, so that's the only network returned.
    //
    // With a VPN in force, some app traffic may go into the VPN, and thus
    // over whatever underlying networks the VPN specifies, while other app
    // traffic may go over the system default network (e.g.: a split-tunnel
    // VPN, or an app disallowed by the VPN), so the set of networks
    // returned includes the VPN's underlying networks and the system
    // default.
    enforceAccessPermission();
    HashMap<Network, NetworkCapabilities> result = new HashMap<Network, NetworkCapabilities>();
    NetworkAgentInfo nai = getDefaultNetwork();
    NetworkCapabilities nc = getNetworkCapabilitiesInternal(nai);
    if (nc != null) {
        result.put(nai.network, nc);
    }
    if (!mLockdownEnabled) {
        synchronized (mVpns) {
            Vpn vpn = mVpns.get(userId);
            if (vpn != null) {
                Network[] networks = vpn.getUnderlyingNetworks();
                if (networks != null) {
                    for (Network network : networks) {
                        nai = getNetworkAgentInfoForNetwork(network);
                        nc = getNetworkCapabilitiesInternal(nai);
                        if (nc != null) {
                            result.put(network, nc);
                        }
                    }
                }
            }
        }
    }
    NetworkCapabilities[] out = new NetworkCapabilities[result.size()];
    out = result.values().toArray(out);
    return out;
}
Also used : HashMap(java.util.HashMap) Vpn(com.android.server.connectivity.Vpn) NetworkAgentInfo(com.android.server.connectivity.NetworkAgentInfo) Network(android.net.Network) NetworkCapabilities(android.net.NetworkCapabilities)

Example 78 with Network

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

the class LingerMonitorTest method nai.

NetworkAgentInfo nai(int netId, int transport, int networkType, String networkTypeName) {
    NetworkInfo info = new NetworkInfo(networkType, 0, networkTypeName, "");
    NetworkCapabilities caps = new NetworkCapabilities();
    caps.addCapability(0);
    caps.addTransportType(transport);
    NetworkAgentInfo nai = new NetworkAgentInfo(null, null, new Network(netId), info, null, caps, 50, mCtx, null, mMisc, null, mConnService);
    nai.everValidated = true;
    return nai;
}
Also used : NetworkInfo(android.net.NetworkInfo) Network(android.net.Network) NetworkCapabilities(android.net.NetworkCapabilities)

Example 79 with Network

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

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 80 with Network

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

the class ConnectivityService method createVpnInfo.

/**
     * @return VPN information for accounting, or null if we can't retrieve all required
     *         information, e.g primary underlying iface.
     */
@Nullable
private VpnInfo createVpnInfo(Vpn vpn) {
    VpnInfo info = vpn.getVpnInfo();
    if (info == null) {
        return null;
    }
    Network[] underlyingNetworks = vpn.getUnderlyingNetworks();
    // the underlyingNetworks list.
    if (underlyingNetworks == null) {
        NetworkAgentInfo defaultNetwork = getDefaultNetwork();
        if (defaultNetwork != null && defaultNetwork.linkProperties != null) {
            info.primaryUnderlyingIface = getDefaultNetwork().linkProperties.getInterfaceName();
        }
    } else if (underlyingNetworks.length > 0) {
        LinkProperties linkProperties = getLinkProperties(underlyingNetworks[0]);
        if (linkProperties != null) {
            info.primaryUnderlyingIface = linkProperties.getInterfaceName();
        }
    }
    return info.primaryUnderlyingIface == null ? null : info;
}
Also used : LegacyVpnInfo(com.android.internal.net.LegacyVpnInfo) VpnInfo(com.android.internal.net.VpnInfo) NetworkAgentInfo(com.android.server.connectivity.NetworkAgentInfo) Network(android.net.Network) LinkProperties(android.net.LinkProperties) Nullable(android.annotation.Nullable)

Aggregations

Network (android.net.Network)92 SmallTest (android.test.suitebuilder.annotation.SmallTest)28 NetworkAgentInfo (com.android.server.connectivity.NetworkAgentInfo)25 NetworkCapabilities (android.net.NetworkCapabilities)22 NetworkRequest (android.net.NetworkRequest)18 NetworkInfo (android.net.NetworkInfo)17 LinkProperties (android.net.LinkProperties)16 ConnectivityManager (android.net.ConnectivityManager)11 NetworkCallback (android.net.ConnectivityManager.NetworkCallback)11 Test (org.junit.Test)7 InetAddress (java.net.InetAddress)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