Replace BaseNetworkObserver with BaseNetdUnsolicitedEventListener

ConnectivityService will be a part of mainline module, to prevent
using @hide API of NetworkManagementService in TestNetworkService,
use function inside NetdUtils instead.

Bug: 170598012
Test: atest FrameworksNetTests CtsNetTestCasesLatestSdk
Change-Id: Id615f7b900d26d0f5887adcd8221dc8bef239923
This commit is contained in:
lucaslin
2021-02-23 01:12:55 +08:00
parent 9b56fad5b9
commit 66f44213bc

View File

@@ -91,7 +91,6 @@ import android.net.IConnectivityManager;
import android.net.IDnsResolver; import android.net.IDnsResolver;
import android.net.INetd; import android.net.INetd;
import android.net.INetworkActivityListener; import android.net.INetworkActivityListener;
import android.net.INetworkManagementEventObserver;
import android.net.INetworkMonitor; import android.net.INetworkMonitor;
import android.net.INetworkMonitorCallbacks; import android.net.INetworkMonitorCallbacks;
import android.net.INetworkPolicyListener; import android.net.INetworkPolicyListener;
@@ -194,6 +193,7 @@ import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.LocationPermissionChecker; import com.android.internal.util.LocationPermissionChecker;
import com.android.internal.util.MessageUtils; import com.android.internal.util.MessageUtils;
import com.android.modules.utils.BasicShellCommandHandler; import com.android.modules.utils.BasicShellCommandHandler;
import com.android.net.module.util.BaseNetdUnsolicitedEventListener;
import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.CollectionUtils;
import com.android.net.module.util.LinkPropertiesUtils.CompareOrUpdateResult; import com.android.net.module.util.LinkPropertiesUtils.CompareOrUpdateResult;
import com.android.net.module.util.LinkPropertiesUtils.CompareResult; import com.android.net.module.util.LinkPropertiesUtils.CompareResult;
@@ -213,7 +213,6 @@ import com.android.server.connectivity.NetworkRanker;
import com.android.server.connectivity.PermissionMonitor; import com.android.server.connectivity.PermissionMonitor;
import com.android.server.connectivity.ProxyTracker; import com.android.server.connectivity.ProxyTracker;
import com.android.server.connectivity.QosCallbackTracker; import com.android.server.connectivity.QosCallbackTracker;
import com.android.server.net.BaseNetworkObserver;
import com.android.server.net.NetworkPolicyManagerInternal; import com.android.server.net.NetworkPolicyManagerInternal;
import com.android.server.utils.PriorityDump; import com.android.server.utils.PriorityDump;
@@ -331,6 +330,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
private INetworkStatsService mStatsService; private INetworkStatsService mStatsService;
private NetworkPolicyManager mPolicyManager; private NetworkPolicyManager mPolicyManager;
private NetworkPolicyManagerInternal mPolicyManagerInternal; private NetworkPolicyManagerInternal mPolicyManagerInternal;
private final NetdCallback mNetdCallback;
/** /**
* TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple * TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple
@@ -1203,6 +1203,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mHandler, mNMS, mNetd); mNetworkActivityTracker = new LegacyNetworkActivityTracker(mContext, mHandler, mNMS, mNetd);
mNetdCallback = new NetdCallback();
try {
mNetd.registerUnsolicitedEventListener(mNetdCallback);
} catch (RemoteException | ServiceSpecificException e) {
loge("Error registering event listener :" + e);
}
mSettingsObserver = new SettingsObserver(mContext, mHandler); mSettingsObserver = new SettingsObserver(mContext, mHandler);
registerSettingsCallbacks(); registerSettingsCallbacks();
@@ -8648,6 +8655,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
notifyDataStallSuspected(p, network.getNetId()); notifyDataStallSuspected(p, network.getNetId());
} }
private class NetdCallback extends BaseNetdUnsolicitedEventListener {
@Override
public void onInterfaceClassActivityChanged(boolean isActive, int timerLabel,
long timestampNs, int uid) {
mNetworkActivityTracker.setAndReportNetworkActive(isActive, timerLabel, timestampNs);
}
}
private final LegacyNetworkActivityTracker mNetworkActivityTracker; private final LegacyNetworkActivityTracker mNetworkActivityTracker;
/** /**
@@ -8658,7 +8673,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
private static final int NO_UID = -1; private static final int NO_UID = -1;
private final Context mContext; private final Context mContext;
private final INetd mNetd; private final INetd mNetd;
private final INetworkManagementService mNMS;
private final RemoteCallbackList<INetworkActivityListener> mNetworkActivityListeners = private final RemoteCallbackList<INetworkActivityListener> mNetworkActivityListeners =
new RemoteCallbackList<>(); new RemoteCallbackList<>();
// Indicate the current system default network activity is active or not. // Indicate the current system default network activity is active or not.
@@ -8681,41 +8695,27 @@ public class ConnectivityService extends IConnectivityManager.Stub
LegacyNetworkActivityTracker(@NonNull Context context, @NonNull Handler handler, LegacyNetworkActivityTracker(@NonNull Context context, @NonNull Handler handler,
@NonNull INetworkManagementService nms, @NonNull INetd netd) { @NonNull INetworkManagementService nms, @NonNull INetd netd) {
mContext = context; mContext = context;
mNMS = nms;
mNetd = netd; mNetd = netd;
mHandler = handler; mHandler = handler;
try {
mNMS.registerObserver(mDataActivityObserver);
} catch (RemoteException e) {
loge("Error registering observer :" + e);
}
} }
// TODO: Migrate away the dependency with INetworkManagementEventObserver. public void setAndReportNetworkActive(boolean active, int transportType, long tsNanos) {
private final INetworkManagementEventObserver mDataActivityObserver = sendDataActivityBroadcast(transportTypeToLegacyType(transportType), active, tsNanos);
new BaseNetworkObserver() { synchronized (mActiveIdleTimers) {
@Override mNetworkActive = active;
public void interfaceClassDataActivityChanged(int transportType, boolean active, // If there are no idle timers, it means that system is not monitoring
long tsNanos, int uid) { // activity, so the system default network for those default network
sendDataActivityBroadcast(transportTypeToLegacyType(transportType), active, // unspecified apps is always considered active.
tsNanos); //
synchronized (mActiveIdleTimers) { // TODO: If the mActiveIdleTimers is empty, netd will actually not send
mNetworkActive = active; // any network activity change event. Whenever this event is received,
// If there are no idle timers, it means that system is not monitoring // the mActiveIdleTimers should be always not empty. The legacy behavior
// activity, so the system default network for those default network // is no-op. Remove to refer to mNetworkActive only.
// unspecified apps is always considered active. if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
// mHandler.sendMessage(mHandler.obtainMessage(EVENT_REPORT_NETWORK_ACTIVITY));
// TODO: If the mActiveIdleTimers is empty, netd will actually not send }
// any network activity change event. Whenever this event is received, }
// the mActiveIdleTimers should be always not empty. The legacy behavior }
// is no-op. Remove to refer to mNetworkActive only.
if (mNetworkActive || mActiveIdleTimers.isEmpty()) {
mHandler.sendMessage(
mHandler.obtainMessage(EVENT_REPORT_NETWORK_ACTIVITY));
}
}
}
};
// The network activity should only be updated from ConnectivityService handler thread // The network activity should only be updated from ConnectivityService handler thread
// when mActiveIdleTimers lock is held. // when mActiveIdleTimers lock is held.