Handle more commands in StoppingState
Also, expand the logging of states in which messages are received and handled. Bug: 31264287 Change-Id: If633984cb54128716fc9b3fcb27925906d0bd826
This commit is contained in:
@@ -45,6 +45,7 @@ import android.util.SparseArray;
|
|||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.util.IndentingPrintWriter;
|
import com.android.internal.util.IndentingPrintWriter;
|
||||||
|
import com.android.internal.util.IState;
|
||||||
import com.android.internal.util.State;
|
import com.android.internal.util.State;
|
||||||
import com.android.internal.util.StateMachine;
|
import com.android.internal.util.StateMachine;
|
||||||
import com.android.server.net.NetlinkTracker;
|
import com.android.server.net.NetlinkTracker;
|
||||||
@@ -395,6 +396,7 @@ public class IpManager extends StateMachine {
|
|||||||
private final WakeupMessage mProvisioningTimeoutAlarm;
|
private final WakeupMessage mProvisioningTimeoutAlarm;
|
||||||
private final WakeupMessage mDhcpActionTimeoutAlarm;
|
private final WakeupMessage mDhcpActionTimeoutAlarm;
|
||||||
private final LocalLog mLocalLog;
|
private final LocalLog mLocalLog;
|
||||||
|
private final MessageHandlingLogger mMsgStateLogger;
|
||||||
private final IpConnectivityLog mMetricsLog = new IpConnectivityLog();
|
private final IpConnectivityLog mMetricsLog = new IpConnectivityLog();
|
||||||
|
|
||||||
private NetworkInterface mNetworkInterface;
|
private NetworkInterface mNetworkInterface;
|
||||||
@@ -482,6 +484,7 @@ public class IpManager extends StateMachine {
|
|||||||
|
|
||||||
setInitialState(mStoppedState);
|
setInitialState(mStoppedState);
|
||||||
mLocalLog = new LocalLog(MAX_LOG_RECORDS);
|
mLocalLog = new LocalLog(MAX_LOG_RECORDS);
|
||||||
|
mMsgStateLogger = new MessageHandlingLogger();
|
||||||
super.start();
|
super.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -591,9 +594,9 @@ public class IpManager extends StateMachine {
|
|||||||
@Override
|
@Override
|
||||||
protected String getLogRecString(Message msg) {
|
protected String getLogRecString(Message msg) {
|
||||||
final String logLine = String.format(
|
final String logLine = String.format(
|
||||||
"%s/%d %d %d %s",
|
"%s/%d %d %d %s [%s]",
|
||||||
mInterfaceName, mNetworkInterface == null ? -1 : mNetworkInterface.getIndex(),
|
mInterfaceName, mNetworkInterface == null ? -1 : mNetworkInterface.getIndex(),
|
||||||
msg.arg1, msg.arg2, Objects.toString(msg.obj));
|
msg.arg1, msg.arg2, Objects.toString(msg.obj), mMsgStateLogger);
|
||||||
|
|
||||||
final String richerLogLine = getWhatToString(msg.what) + " " + logLine;
|
final String richerLogLine = getWhatToString(msg.what) + " " + logLine;
|
||||||
mLocalLog.log(richerLogLine);
|
mLocalLog.log(richerLogLine);
|
||||||
@@ -601,6 +604,7 @@ public class IpManager extends StateMachine {
|
|||||||
Log.d(mTag, richerLogLine);
|
Log.d(mTag, richerLogLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mMsgStateLogger.reset();
|
||||||
return logLine;
|
return logLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -609,7 +613,11 @@ public class IpManager extends StateMachine {
|
|||||||
// Don't log EVENT_NETLINK_LINKPROPERTIES_CHANGED. They can be noisy,
|
// Don't log EVENT_NETLINK_LINKPROPERTIES_CHANGED. They can be noisy,
|
||||||
// and we already log any LinkProperties change that results in an
|
// and we already log any LinkProperties change that results in an
|
||||||
// invocation of IpManager.Callback#onLinkPropertiesChange().
|
// invocation of IpManager.Callback#onLinkPropertiesChange().
|
||||||
return (msg.what != EVENT_NETLINK_LINKPROPERTIES_CHANGED);
|
final boolean shouldLog = (msg.what != EVENT_NETLINK_LINKPROPERTIES_CHANGED);
|
||||||
|
if (!shouldLog) {
|
||||||
|
mMsgStateLogger.reset();
|
||||||
|
}
|
||||||
|
return shouldLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getNetworkInterface() {
|
private void getNetworkInterface() {
|
||||||
@@ -965,7 +973,6 @@ public class IpManager extends StateMachine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class StoppedState extends State {
|
class StoppedState extends State {
|
||||||
@Override
|
@Override
|
||||||
public void enter() {
|
public void enter() {
|
||||||
@@ -1015,6 +1022,8 @@ public class IpManager extends StateMachine {
|
|||||||
default:
|
default:
|
||||||
return NOT_HANDLED;
|
return NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mMsgStateLogger.handled(this, getCurrentState());
|
||||||
return HANDLED;
|
return HANDLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1031,6 +1040,13 @@ public class IpManager extends StateMachine {
|
|||||||
@Override
|
@Override
|
||||||
public boolean processMessage(Message msg) {
|
public boolean processMessage(Message msg) {
|
||||||
switch (msg.what) {
|
switch (msg.what) {
|
||||||
|
case CMD_STOP:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DhcpClient.CMD_CLEAR_LINKADDRESS:
|
||||||
|
clearIPv4Address();
|
||||||
|
break;
|
||||||
|
|
||||||
case DhcpClient.CMD_ON_QUIT:
|
case DhcpClient.CMD_ON_QUIT:
|
||||||
mDhcpClient = null;
|
mDhcpClient = null;
|
||||||
transitionTo(mStoppedState);
|
transitionTo(mStoppedState);
|
||||||
@@ -1039,6 +1055,8 @@ public class IpManager extends StateMachine {
|
|||||||
default:
|
default:
|
||||||
deferMessage(msg);
|
deferMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mMsgStateLogger.handled(this, getCurrentState());
|
||||||
return HANDLED;
|
return HANDLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1095,6 +1113,8 @@ public class IpManager extends StateMachine {
|
|||||||
// is EVENT_NETLINK_LINKPROPERTIES_CHANGED (handled above).
|
// is EVENT_NETLINK_LINKPROPERTIES_CHANGED (handled above).
|
||||||
deferMessage(msg);
|
deferMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mMsgStateLogger.handled(this, getCurrentState());
|
||||||
return HANDLED;
|
return HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1302,7 +1322,29 @@ public class IpManager extends StateMachine {
|
|||||||
default:
|
default:
|
||||||
return NOT_HANDLED;
|
return NOT_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mMsgStateLogger.handled(this, getCurrentState());
|
||||||
return HANDLED;
|
return HANDLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class MessageHandlingLogger {
|
||||||
|
public String processedInState;
|
||||||
|
public String receivedInState;
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
processedInState = null;
|
||||||
|
receivedInState = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handled(State processedIn, IState receivedIn) {
|
||||||
|
processedInState = processedIn.getClass().getSimpleName();
|
||||||
|
receivedInState = receivedIn.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return String.format("rcvd_in=%s, proc_in=%s",
|
||||||
|
receivedInState, processedInState);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user