Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b1c9ad3 authored by Yan Yan's avatar Yan Yan
Browse files

Revert "Make VPN more testable and update NC during network change"

Revert submission 2113906-mobike-ut

Reason for revert: b/235853154 Test files build failed on tm-mainline-prod
Reverted Changes:
I739016db1:Add unit tests for IKEv2 VPN setup and MOBIKE
Ic0f0c5496:Make VPN more testable and update NC during networ...

Change-Id: Ia598f1c0feb74ead57e3ce32413cc7da9dab73e5
parent f1b3c75b
Loading
Loading
Loading
Loading
+29 −131
Original line number Diff line number Diff line
@@ -252,7 +252,8 @@ public class Vpn {
    @VisibleForTesting
    protected VpnConfig mConfig;
    private final NetworkProvider mNetworkProvider;
    @VisibleForTesting protected VpnNetworkAgentWrapper mNetworkAgent;
    @VisibleForTesting
    protected NetworkAgent mNetworkAgent;
    private final Looper mLooper;
    @VisibleForTesting
    protected NetworkCapabilities mNetworkCapabilities;
@@ -497,30 +498,6 @@ public class Vpn {
                return IKEV2_VPN_RETRY_DELAYS_SEC[retryCount];
            }
        }

        /** Get single threaded executor for IKEv2 VPN */
        public ScheduledThreadPoolExecutor getScheduledThreadPoolExecutor() {
            return new ScheduledThreadPoolExecutor(1);
        }

        /** Get a VpnNetworkAgentWrapper instance */
        public VpnNetworkAgentWrapper getVpnNetworkAgentWrapper(
                @NonNull Context context,
                @NonNull Looper looper,
                @NonNull String logTag,
                @NonNull NetworkCapabilities nc,
                @NonNull LinkProperties lp,
                @NonNull NetworkScore score,
                @NonNull NetworkAgentConfig config,
                @Nullable NetworkProvider provider) {
            return new VpnNetworkAgentWrapper(
                    new NetworkAgent(context, looper, logTag, nc, lp, score, config, provider) {
                        @Override
                        public void onNetworkUnwanted() {
                            // We are user controlled, not driven by NetworkRequest.
                        }
                    });
        }
    }

    public Vpn(Looper looper, Context context, INetworkManagementService netService, INetd netd,
@@ -1352,7 +1329,7 @@ public class Vpn {
    @VisibleForTesting
    @Nullable
    public synchronized Network getNetwork() {
        final VpnNetworkAgentWrapper agent = mNetworkAgent;
        final NetworkAgent agent = mNetworkAgent;
        if (null == agent) return null;
        final Network network = agent.getNetwork();
        if (null == network) return null;
@@ -1432,8 +1409,7 @@ public class Vpn {
     * registering a new NetworkAgent. This is not always possible if the new VPN configuration
     * has certain changes, in which case this method would just return {@code false}.
     */
    private boolean updateLinkPropertiesInPlaceIfPossible(
            VpnNetworkAgentWrapper agent, VpnConfig oldConfig) {
    private boolean updateLinkPropertiesInPlaceIfPossible(NetworkAgent agent, VpnConfig oldConfig) {
        // NetworkAgentConfig cannot be updated without registering a new NetworkAgent.
        if (oldConfig.allowBypass != mConfig.allowBypass) {
            Log.i(TAG, "Handover not possible due to changes to allowBypass");
@@ -1498,11 +1474,15 @@ public class Vpn {
                ? Arrays.asList(mConfig.underlyingNetworks) : null);

        mNetworkCapabilities = capsBuilder.build();
        mNetworkAgent = mDeps.getVpnNetworkAgentWrapper(
                mContext, mLooper, NETWORKTYPE /* logtag */,
        mNetworkAgent = new NetworkAgent(mContext, mLooper, NETWORKTYPE /* logtag */,
                mNetworkCapabilities, lp,
                new NetworkScore.Builder().setLegacyInt(VPN_DEFAULT_SCORE).build(),
                networkAgentConfig, mNetworkProvider);
                networkAgentConfig, mNetworkProvider) {
            @Override
            public void onNetworkUnwanted() {
                // We are user controlled, not driven by NetworkRequest.
            }
        };
        final long token = Binder.clearCallingIdentity();
        try {
            mNetworkAgent.register();
@@ -1526,7 +1506,7 @@ public class Vpn {
        }
    }

    private void agentDisconnect(VpnNetworkAgentWrapper networkAgent) {
    private void agentDisconnect(NetworkAgent networkAgent) {
        if (networkAgent != null) {
            networkAgent.unregister();
        }
@@ -1582,7 +1562,7 @@ public class Vpn {
        VpnConfig oldConfig = mConfig;
        String oldInterface = mInterface;
        Connection oldConnection = mConnection;
        VpnNetworkAgentWrapper oldNetworkAgent = mNetworkAgent;
        NetworkAgent oldNetworkAgent = mNetworkAgent;
        Set<Range<Integer>> oldUsers = mNetworkCapabilities.getUids();

        // Configure the interface. Abort if any of these steps fails.
@@ -2705,7 +2685,8 @@ public class Vpn {
         * of the mutable Ikev2VpnRunner fields. The Ikev2VpnRunner is built mostly lock-free by
         * virtue of everything being serialized on this executor.
         */
        @NonNull private final ScheduledThreadPoolExecutor mExecutor;
        @NonNull
        private final ScheduledThreadPoolExecutor mExecutor = new ScheduledThreadPoolExecutor(1);

        @Nullable private ScheduledFuture<?> mScheduledHandleNetworkLostTimeout;
        @Nullable private ScheduledFuture<?> mScheduledHandleRetryIkeSessionTimeout;
@@ -2726,7 +2707,7 @@ public class Vpn {
        @Nullable private LinkProperties mUnderlyingLinkProperties;
        private final String mSessionKey;

        @Nullable private IkeSessionWrapper mSession;
        @Nullable private IkeSession mSession;
        @Nullable private IkeSessionConnectionInfo mIkeConnectionInfo;

        // mMobikeEnabled can only be updated after IKE AUTH is finished.
@@ -2740,11 +2721,9 @@ public class Vpn {
         */
        private int mRetryCount = 0;

        IkeV2VpnRunner(
                @NonNull Ikev2VpnProfile profile, @NonNull ScheduledThreadPoolExecutor executor) {
        IkeV2VpnRunner(@NonNull Ikev2VpnProfile profile) {
            super(TAG);
            mProfile = profile;
            mExecutor = executor;
            mIpSecManager = (IpSecManager) mContext.getSystemService(Context.IPSEC_SERVICE);
            mNetworkCallback = new VpnIkev2Utils.Ikev2VpnNetworkCallback(TAG, this, mExecutor);
            mSessionKey = UUID.randomUUID().toString();
@@ -2757,7 +2736,7 @@ public class Vpn {

            // To avoid hitting RejectedExecutionException upon shutdown of the mExecutor */
            mExecutor.setRejectedExecutionHandler(
                    (r, exe) -> {
                    (r, executor) -> {
                        Log.d(TAG, "Runnable " + r + " rejected by the mExecutor");
                    });
        }
@@ -2879,7 +2858,7 @@ public class Vpn {
                // mActiveNetwork might have been updated after the setup was triggered.
                final Network network = mIkeConnectionInfo.getNetwork();

                final VpnNetworkAgentWrapper networkAgent;
                final NetworkAgent networkAgent;
                final LinkProperties lp;

                synchronized (Vpn.this) {
@@ -2898,6 +2877,7 @@ public class Vpn {
                    mConfig.dnsServers.addAll(dnsAddrStrings);

                    mConfig.underlyingNetworks = new Network[] {network};

                    mConfig.disallowedApplications = getAppExclusionList(mPackage);

                    networkAgent = mNetworkAgent;
@@ -2913,10 +2893,6 @@ public class Vpn {
                    } else {
                        // Underlying networks also set in agentConnect()
                        networkAgent.setUnderlyingNetworks(Collections.singletonList(network));
                        mNetworkCapabilities =
                                new NetworkCapabilities.Builder(mNetworkCapabilities)
                                        .setUnderlyingNetworks(Collections.singletonList(network))
                                        .build();
                    }

                    lp = makeLinkProperties(); // Accesses VPN instance fields; must be locked
@@ -4032,9 +4008,7 @@ public class Vpn {
                case VpnProfile.TYPE_IKEV2_IPSEC_RSA:
                case VpnProfile.TYPE_IKEV2_FROM_IKE_TUN_CONN_PARAMS:
                    mVpnRunner =
                            new IkeV2VpnRunner(
                                    Ikev2VpnProfile.fromVpnProfile(profile),
                                    mDeps.getScheduledThreadPoolExecutor());
                            new IkeV2VpnRunner(Ikev2VpnProfile.fromVpnProfile(profile));
                    mVpnRunner.start();
                    break;
                default:
@@ -4204,81 +4178,6 @@ public class Vpn {
        return isCurrentIkev2VpnLocked(packageName) ? makeVpnProfileStateLocked() : null;
    }

    /**
     * Proxy to allow testing
     *
     * @hide
     */
    @VisibleForTesting
    public static class VpnNetworkAgentWrapper {
        private final NetworkAgent mImpl;

        /** Create an VpnNetworkAgentWrapper */
        public VpnNetworkAgentWrapper(@NonNull NetworkAgent networkAgent) {
            mImpl = networkAgent;
        }

        /** Inform ConnectivityService that this agent has now connected */
        public void markConnected() {
            mImpl.markConnected();
        }

        /** Register this network agent with ConnectivityService */
        public void register() {
            mImpl.register();
        }

        /** Unregister this network agent */
        public void unregister() {
            mImpl.unregister();
        }

        /** Update the LinkProperties */
        public void sendLinkProperties(@NonNull LinkProperties lp) {
            mImpl.sendLinkProperties(lp);
        }

        /** Update the NetworkCapabilities */
        public void sendNetworkCapabilities(@NonNull NetworkCapabilities nc) {
            mImpl.sendNetworkCapabilities(nc);
        }

        /** Set the underlying networks */
        public void setUnderlyingNetworks(@NonNull List<Network> networks) {
            mImpl.setUnderlyingNetworks(networks);
        }

        /**  The Network associated with this agent */
        public Network getNetwork() {
            return mImpl.getNetwork();
        }
    }

    /**
     * Proxy to allow testing
     *
     * @hide
     */
    @VisibleForTesting
    public static class IkeSessionWrapper {
        private final IkeSession mImpl;

        /** Create an IkeSessionWrapper */
        public IkeSessionWrapper(IkeSession session) {
            mImpl = session;
        }

        /** Update the underlying network of the IKE Session */
        public void setNetwork(@NonNull Network network) {
            mImpl.setNetwork(network);
        }

        /** Forcibly terminate the IKE Session */
        public void kill() {
            mImpl.kill();
        }
    }

    /**
     * Proxy to allow testing
     *
@@ -4287,21 +4186,20 @@ public class Vpn {
    @VisibleForTesting
    public static class Ikev2SessionCreator {
        /** Creates a IKE session */
        public IkeSessionWrapper createIkeSession(
        public IkeSession createIkeSession(
                @NonNull Context context,
                @NonNull IkeSessionParams ikeSessionParams,
                @NonNull ChildSessionParams firstChildSessionParams,
                @NonNull Executor userCbExecutor,
                @NonNull IkeSessionCallback ikeSessionCallback,
                @NonNull ChildSessionCallback firstChildSessionCallback) {
            return new IkeSessionWrapper(
                    new IkeSession(
            return new IkeSession(
                    context,
                    ikeSessionParams,
                    firstChildSessionParams,
                    userCbExecutor,
                    ikeSessionCallback,
                            firstChildSessionCallback));
                    firstChildSessionCallback);
        }
    }