Use TAG instead
Test: mm
Change-Id: Ic0fa5d6c99e804b32f4b47fc2142b6f51c460953
diff --git a/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java b/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
index 3039da1..8f42edc 100644
--- a/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
+++ b/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
@@ -18,11 +18,16 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.content.Context;
import android.net.NetworkCapabilities;
import android.net.NetworkProvider;
import android.net.NetworkProvider.NetworkOfferCallback;
import android.net.NetworkRequest;
import android.net.NetworkScore;
+import android.net.ip.IIpClient;
+import android.net.ip.IpClientCallbacks;
+import android.net.ip.IpClientManager;
+import android.net.ip.IpClientUtil;
import android.os.Handler;
import android.os.Message;
import android.util.ArraySet;
@@ -41,6 +46,7 @@
private static final int CMD_ON_NETWORK_NEEDED = 1;
private static final int CMD_ON_NETWORK_UNNEEDED = 2;
+ private static final int CMD_ON_IPCLIENT_CREATED = 3;
private class EthernetNetworkOfferCallback implements NetworkOfferCallback {
private final Set<Integer> mRequestIds = new ArraySet<>();
@@ -74,8 +80,31 @@
}
}
+ private class EthernetIpClientCallback extends IpClientCallbacks {
+ private void safelyPostOnHandler(Runnable r) {
+ mHandler.post(() -> {
+ if (this != mIpClientCallback) {
+ return;
+ }
+ r.run();
+ });
+ }
+
+ @Override
+ public void onIpClientCreated(IIpClient ipClient) {
+ safelyPostOnHandler(() -> {
+ // TODO: add a SyncStateMachine#processMessage(cmd, obj) overload.
+ processMessage(CMD_ON_IPCLIENT_CREATED, 0, 0, new IpClientManager(ipClient, TAG));
+ });
+ }
+ }
+
private @Nullable EthernetNetworkOfferCallback mNetworkOfferCallback;
+ private @Nullable EthernetIpClientCallback mIpClientCallback;
+ private @Nullable IpClientManager mIpClient;
+ private final String mIface;
private final Handler mHandler;
+ private final Context mContext;
private final NetworkCapabilities mCapabilities;
private final NetworkProvider mNetworkProvider;
@@ -136,14 +165,33 @@
/** Network is needed, starts IpClient and manages its lifecycle */
private class StartedState extends State {
@Override
+ public void enter() {
+ mIpClientCallback = new EthernetIpClientCallback();
+ IpClientUtil.makeIpClient(mContext, mIface, mIpClientCallback);
+ }
+
+ @Override
public boolean processMessage(Message msg) {
switch (msg.what) {
case CMD_ON_NETWORK_UNNEEDED:
transitionTo(mStoppedState);
return HANDLED;
+ case CMD_ON_IPCLIENT_CREATED:
+ mIpClient = (IpClientManager) msg.obj;
+ transitionTo(mRunningState);
+ return HANDLED;
}
return NOT_HANDLED;
}
+
+ @Override
+ public void exit() {
+ mIpClientCallback = null;
+ if (mIpClient != null) {
+ mIpClient.shutdown();
+ // TODO: either wait for shutdown or add an additional StoppingState.
+ }
+ }
}
/** IpClient is running, starts provisioning and registers NetworkAgent */
@@ -158,11 +206,13 @@
private final StartedState mStartedState = new StartedState();
private final RunningState mRunningState = new RunningState();
- public EthernetInterfaceStateMachine(String iface, Handler handler, NetworkCapabilities capabilities, NetworkProvider provider) {
- super(EthernetInterfaceStateMachine.class.getSimpleName() + "." + iface,
- handler.getLooper().getThread());
+ public EthernetInterfaceStateMachine(String iface, Handler handler, Context context,
+ NetworkCapabilities capabilities, NetworkProvider provider) {
+ super(TAG + "." + iface, handler.getLooper().getThread());
+ mIface = iface;
mHandler = handler;
+ mContext = context;
mCapabilities = capabilities;
mNetworkProvider = provider;