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

Commit 8ec1dc81 authored by Erik Kline's avatar Erik Kline
Browse files

Handle more commands in StoppingState

Also, expand the logging of states in which messages are
received and handled.

Bug: 31264287
Change-Id: If633984cb54128716fc9b3fcb27925906d0bd826
parent dad9b673
Loading
Loading
Loading
Loading
+46 −4
Original line number Original line Diff line number Diff line
@@ -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);
        }
    }
}
}