/*
 * Copyright (C) 2019 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 android.net;

/**
 * Status details for tethering downstream interfaces.
 * {@hide}
 */
parcelable TetherStatesParcel {
    String[] availableList;
    String[] tetheredList;
    String[] localOnlyList;
    String[] erroredIfaceList;
    // List of Last error code corresponding to each errored iface in erroredIfaceList. */
    // TODO: Improve this as b/143122247.
    int[] lastErrorList;
}
