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

Commit f3dd8d71 authored by Xiao Ma's avatar Xiao Ma Committed by Gerrit Code Review
Browse files

Merge "Get RDNSS option information from kernel instead of Netd."

parents a946a61c d31608e9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -715,7 +715,7 @@ public class IpClient extends StateMachine {
                (ifaceUp) -> sendMessage(EVENT_NETLINK_LINKPROPERTIES_CHANGED, ifaceUp
                        ? ARG_LINKPROP_CHANGED_LINKSTATE_UP
                        : ARG_LINKPROP_CHANGED_LINKSTATE_DOWN),
                config, mLog) {
                config, mLog, mDependencies) {
            @Override
            public void onInterfaceAdded(String iface) {
                super.onInterfaceAdded(iface);
+40 −12
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.net.ip;

import static android.net.util.NetworkStackUtils.IPCLIENT_PARSE_NETLINK_EVENTS_VERSION;
import static android.system.OsConstants.AF_INET6;

import static com.android.net.module.util.NetworkStackConstants.ICMPV6_ROUTER_ADVERTISEMENT;
@@ -37,6 +38,7 @@ import com.android.net.module.util.netlink.NduseroptMessage;
import com.android.net.module.util.netlink.NetlinkConstants;
import com.android.net.module.util.netlink.NetlinkMessage;
import com.android.net.module.util.netlink.StructNdOptPref64;
import com.android.net.module.util.netlink.StructNdOptRdnss;
import com.android.networkstack.apishim.NetworkInformationShimImpl;
import com.android.networkstack.apishim.common.NetworkInformationShim;
import com.android.server.NetworkObserver;
@@ -107,6 +109,7 @@ public class IpClientLinkObserver implements NetworkObserver {
        }
    }

    private final Context mContext;
    private final String mInterfaceName;
    private final Callback mCallback;
    private final LinkProperties mLinkProperties;
@@ -115,13 +118,15 @@ public class IpClientLinkObserver implements NetworkObserver {
    private final AlarmManager mAlarmManager;
    private final Configuration mConfig;
    private final Handler mHandler;
    private final IpClient.Dependencies mDependencies;

    private final MyNetlinkMonitor mNetlinkMonitor;

    private static final boolean DBG = false;

    public IpClientLinkObserver(Context context, Handler h, String iface, Callback callback,
            Configuration config, SharedLog log) {
            Configuration config, SharedLog log, IpClient.Dependencies deps) {
        mContext = context;
        mInterfaceName = iface;
        mTag = "NetlinkTracker/" + mInterfaceName;
        mCallback = callback;
@@ -134,6 +139,7 @@ public class IpClientLinkObserver implements NetworkObserver {
        mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        mNetlinkMonitor = new MyNetlinkMonitor(h, log, mTag);
        mHandler.post(mNetlinkMonitor::start);
        mDependencies = deps;
    }

    public void shutdown() {
@@ -153,6 +159,11 @@ public class IpClientLinkObserver implements NetworkObserver {
        }
    }

    private boolean isNetlinkEventParsingEnabled() {
        return mDependencies.isFeatureEnabled(mContext, IPCLIENT_PARSE_NETLINK_EVENTS_VERSION,
                false /* default value */);
    }

    @Override
    public void onInterfaceRemoved(String iface) {
        maybeLog("interfaceRemoved", iface);
@@ -246,8 +257,13 @@ public class IpClientLinkObserver implements NetworkObserver {

    @Override
    public void onInterfaceDnsServerInfo(String iface, long lifetime, String[] addresses) {
        if (mInterfaceName.equals(iface)) {
        if (isNetlinkEventParsingEnabled()) return;
        if (!mInterfaceName.equals(iface)) return;
        maybeLog("interfaceDnsServerInfo", Arrays.toString(addresses));
        updateInterfaceDnsServerInfo(lifetime, addresses);
    }

    private void updateInterfaceDnsServerInfo(long lifetime, final String[] addresses) {
        final boolean changed = mDnsServerRepository.addServers(lifetime, addresses);
        final boolean linkState;
        if (changed) {
@@ -258,7 +274,6 @@ public class IpClientLinkObserver implements NetworkObserver {
            mCallback.update(linkState);
        }
    }
    }

    /**
     * Returns a copy of this object's LinkProperties.
@@ -408,6 +423,15 @@ public class IpClientLinkObserver implements NetworkObserver {
            updatePref64(opt.prefix, now, expiry);
        }

        private void processRdnssOption(StructNdOptRdnss opt) {
            if (!isNetlinkEventParsingEnabled()) return;
            final String[] addresses = new String[opt.servers.length];
            for (int i = 0; i < opt.servers.length; i++) {
                addresses[i] = opt.servers[i].getHostAddress();
            }
            updateInterfaceDnsServerInfo(opt.header.lifetime, addresses);
        }

        private void processNduseroptMessage(NduseroptMessage msg, final long whenMs) {
            if (msg.family != AF_INET6 || msg.option == null || msg.ifindex != mIfindex) return;
            if (msg.icmp_type != (byte) ICMPV6_ROUTER_ADVERTISEMENT) return;
@@ -417,8 +441,12 @@ public class IpClientLinkObserver implements NetworkObserver {
                    processPref64Option((StructNdOptPref64) msg.option, whenMs);
                    break;

                case StructNdOptRdnss.TYPE:
                    processRdnssOption((StructNdOptRdnss) msg.option);
                    break;

                default:
                    // TODO: implement RDNSS and DNSSL.
                    // TODO: implement DNSSL.
                    break;
            }
        }
+7 −0
Original line number Diff line number Diff line
@@ -249,6 +249,13 @@ public class NetworkStackUtils {
    public static final String IPCLIENT_GARP_NA_ROAMING_VERSION =
            "ipclient_garp_na_roaming_version";

    /**
     * Experiment flag to enable parsing netlink events from kernel directly instead from netd aidl
     * interface.
     */
    public static final String IPCLIENT_PARSE_NETLINK_EVENTS_VERSION =
            "ipclient_parse_netlink_events_version";

    /**
     * Experiment flag to disable accept_ra parameter when IPv6 provisioning loss happens due to
     * the default route has gone.