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

Commit f2c90942 authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Android Git Automerger
Browse files

am bbb2c5b2: Merge "Add support for running 464xlat on wifi as well." into lmp-mr1-dev

* commit 'bbb2c5b2':
  Add support for running 464xlat on wifi as well.
parents ad93adfb bbb2c5b2
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -91,6 +91,11 @@ interface INetworkManagementService
     */
    void enableIpv6(String iface);

    /**
     * Enables or enables IPv6 ND offload.
     */
    void setInterfaceIpv6NdOffload(String iface, boolean enable);

    /**
     * Retrieves the network routes currently configured on the specified
     * interface
+11 −0
Original line number Diff line number Diff line
@@ -939,6 +939,17 @@ public class NetworkManagementService extends INetworkManagementService.Stub
        }
    }

    @Override
    public void setInterfaceIpv6NdOffload(String iface, boolean enable) {
        mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
        try {
            mConnector.execute(
                    "interface", "ipv6ndoffload", iface, (enable ? "enable" : "disable"));
        } catch (NativeDaemonConnectorException e) {
            throw e.rethrowAsParcelableException();
        }
    }

    @Override
    public void addRoute(int netId, RouteInfo route) {
        modifyRoute("add", "" + netId, route);
+30 −10
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.connectivity;

import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.ConnectivityManager.TYPE_WIFI;

import java.net.Inet4Address;

@@ -53,7 +54,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
    // ConnectivityService Handler for LinkProperties updates.
    private final Handler mHandler;

    // The network we're running on.
    // The network we're running on, and its type.
    private final NetworkAgentInfo mNetwork;

    // Internal state variables.
@@ -211,23 +212,41 @@ public class Nat464Xlat extends BaseNetworkObserver {
        return stacked;
    }

    private LinkAddress getLinkAddress(String iface) {
        try {
            InterfaceConfiguration config = mNMService.getInterfaceConfig(iface);
            return config.getLinkAddress();
        } catch(RemoteException|IllegalStateException e) {
            Slog.e(TAG, "Error getting link properties: " + e);
            return null;
        }
    }

    private void maybeSetIpv6NdOffload(String iface, boolean on) {
        if (mNetwork.networkInfo.getType() != TYPE_WIFI) {
            return;
        }
        try {
            Slog.d(TAG, (on ? "En" : "Dis") + "abling ND offload on " + iface);
            mNMService.setInterfaceIpv6NdOffload(iface, on);
        } catch(RemoteException|IllegalStateException e) {
            Slog.w(TAG, "Changing IPv6 ND offload on " + iface + "failed: " + e);
        }
    }

    @Override
    public void interfaceAdded(String iface) {
        // Called by the InterfaceObserver on its own thread, so can race with stop().
        if (isStarted() && mIface.equals(iface)) {
            Slog.i(TAG, "interface " + iface + " added, mIsRunning " + mIsRunning + "->true");

            LinkAddress clatAddress;
            try {
                InterfaceConfiguration config = mNMService.getInterfaceConfig(iface);
                clatAddress = config.getLinkAddress();
            } catch(RemoteException e) {
                Slog.e(TAG, "Error getting link properties: " + e);
            if (!mIsRunning) {
                LinkAddress clatAddress = getLinkAddress(iface);
                if (clatAddress == null) {
                    return;
                }

            if (!mIsRunning) {
                mIsRunning = true;
                maybeSetIpv6NdOffload(mBaseIface, false);
                LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
                lp.addStackedLink(makeLinkProperties(clatAddress));
                Slog.i(TAG, "Adding stacked link " + mIface + " on top of " + mBaseIface);
@@ -255,6 +274,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
                } catch (RemoteException|IllegalStateException e) {
                    // Well, we tried.
                }
                maybeSetIpv6NdOffload(mBaseIface, true);
                LinkProperties lp = new LinkProperties(mNetwork.linkProperties);
                lp.removeStackedLink(mIface);
                clear();