Loading src/android/net/ip/IpClient.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading src/android/net/ip/IpClientLinkObserver.java +40 −12 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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() { Loading @@ -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); Loading Loading @@ -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) { Loading @@ -258,7 +274,6 @@ public class IpClientLinkObserver implements NetworkObserver { mCallback.update(linkState); } } } /** * Returns a copy of this object's LinkProperties. Loading Loading @@ -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; Loading @@ -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; } } Loading src/android/net/util/NetworkStackUtils.java +7 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading
src/android/net/ip/IpClient.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
src/android/net/ip/IpClientLinkObserver.java +40 −12 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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() { Loading @@ -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); Loading Loading @@ -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) { Loading @@ -258,7 +274,6 @@ public class IpClientLinkObserver implements NetworkObserver { mCallback.update(linkState); } } } /** * Returns a copy of this object's LinkProperties. Loading Loading @@ -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; Loading @@ -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; } } Loading
src/android/net/util/NetworkStackUtils.java +7 −0 Original line number Diff line number Diff line Loading @@ -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. Loading