Add boilerplate to represent interface states in state machine
Adds empty boilerplate states to represent ethernet interface states
(currently tracked in NetworkInterfaceState) in a StateMachine.
Test: TH
Change-Id: I1041dc577a9c41b44272dfd534abe705220ff3e0
diff --git a/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java b/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
new file mode 100644
index 0000000..cf7d9bc
--- /dev/null
+++ b/service-t/src/com/android/server/ethernet/EthernetInterfaceStateMachine.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.ethernet;
+
+import android.os.Handler;
+
+import com.android.internal.util.State;
+import com.android.net.module.util.SyncStateMachine;
+import com.android.net.module.util.SyncStateMachine.StateInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class EthernetInterfaceStateMachine extends SyncStateMachine {
+ /** Interface is in tethering mode. */
+ private class TetheringState extends State {
+
+ }
+
+ /** Link is down */
+ private class DisconnectedState extends State {
+
+ }
+
+ /** Parent states of all states that do not cause a NetworkOffer to be extended. */
+ private class NetworkOfferExtendedState extends State {
+
+ }
+
+ /** Link is up, network offer is extended */
+ private class StoppedState extends State {
+ }
+
+ /** Network is needed, start provisioning */
+ private class ProvisioningState extends State {
+
+ }
+
+ /** Network is needed */
+ private class RunningState extends State {
+
+ }
+
+ private final TetheringState mTetheringState = new TetheringState();
+ private final DisconnectedState mDisconnectedState = new DisconnectedState();
+ private final NetworkOfferExtendedState mOfferExtendedState = new NetworkOfferExtendedState();
+ private final StoppedState mStoppedState = new StoppedState();
+ private final ProvisioningState mProvisioningState = new ProvisioningState();
+ private final RunningState mRunningState = new RunningState();
+
+ public EthernetInterfaceStateMachine(String iface, Handler handler) {
+ super(EthernetInterfaceStateMachine.class.getSimpleName() + "." + iface,
+ handler.getLooper().getThread());
+
+ // Tethering mode is special as the interface is configured by Tethering, rather than the
+ // ethernet module.
+ final List<StateInfo> states = new ArrayList<>();
+ states.add(new StateInfo(mTetheringState, null));
+
+ // CHECKSTYLE:OFF IndentationCheck
+ // Initial state
+ states.add(new StateInfo(mDisconnectedState, null));
+ states.add(new StateInfo(mOfferExtendedState, null));
+ states.add(new StateInfo(mStoppedState, mOfferExtendedState));
+ states.add(new StateInfo(mProvisioningState, mOfferExtendedState));
+ states.add(new StateInfo(mRunningState, mOfferExtendedState));
+ // CHECKSTYLE:ON IndentationCheck
+
+ // TODO: set initial state to TetheringState if a tethering interface has been requested and
+ // this is the first interface to be added.
+ start(mDisconnectedState);
+ }
+}