/*
 * Copyright (C) 2018 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.
 */

syntax = "proto2";
package android.net.wifi;

option java_outer_classname = "WifiProtoEnums";
option java_multiple_files = true;

/**
 * Wifi Lock modes, primarily used in
 * frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiLockManager.java.
 */
enum WifiModeEnum {
    /**
     * Deprecated.
     * Wi-Fi will be kept active, and will behave normally.
     */
    WIFI_MODE_FULL = 1 [deprecated=true];

    /**
     * Deprecated.
     * Wi-Fi will be kept active, but the only operation that will be supported is initiation of
     * scans, and the subsequent reporting of scan results.
     */
    WIFI_MODE_SCAN_ONLY = 2 [deprecated=true];

    /**
     * Deprecated. Refer {@link com.android.server.wifi.WifiManager#WIFI_MODE_FULL_HIGH_PERF}.
     * Wi-Fi will not go to power save.
     */
    WIFI_MODE_FULL_HIGH_PERF = 3 [deprecated=true];

    /**
     * Wi-Fi will operate with a priority to achieve low latency.
     */
    WIFI_MODE_FULL_LOW_LATENCY = 4;

    /**
     * Wi-Fi will not filter packets addressed to multicast addresses. This allows the device
     * to receive multicast packets, but can lead to noticeable battery drain.
     */
    WIFI_MODE_MULTICAST_FILTERING_DISABLED = 5;
}

/**
 * What permission model the caller has.
 * Calculated with WifiPermissionsUtil#getWifiCallerType
 */
enum WifiCallerType {
    UNKNOWN = 0;
    SETTINGS = 1; // caller is SETTINGS or SETUP_WIZARD
    ADMIN = 2; // caller is a device admin(DO/PO/DA)
    AUTOMOTIVE = 3; // caller has automotive related permissions
    SIGNATURE = 4;  // Caller uid must be signed with platform key
    SYSTEM = 5; // caller is a system app
    OTHERS = 6;  // caller is none of the above
}

/**
 * Wifi authentication type.
 */
enum WifiAuthType {
    AUTH_TYPE_NONE = 0;

    // WPA pre-shared key.
    AUTH_TYPE_WPA_PSK = 1;
    // WPA using EAP authentication. Generally used with an external authentication server.
    AUTH_TYPE_WPA_EAP = 2;
    // IEEE 802.1X using EAP authentication and (optionally) dynamically generated WEP keys.
    AUTH_TYPE_IEEE8021X = 3;
    // WPA2 pre-shared key for use with soft access point.
    AUTH_TYPE_WPA2_PSK = 4;
    // Hotspot 2.0 r2 OSEN.
    AUTH_TYPE_OSEN = 5;
    // IEEE 802.11r Fast BSS Transition with PSK authentication.
    AUTH_TYPE_FT_PSK = 6;
    // IEEE 802.11r Fast BSS Transition with EAP authentication.
    AUTH_TYPE_FT_EAP = 7;
    // Simultaneous Authentication of Equals.
    AUTH_TYPE_SAE = 8;
    // Opportunistic Wireless Encryption.
    AUTH_TYPE_OWE = 9;
    // SUITE_B_192 192 bit level
    AUTH_TYPE_SUITE_B_192 = 10;
    // WPA pre-shared key with stronger SHA256-based algorithms.
    AUTH_TYPE_WPA_PSK_SHA256 = 11;
    // WPA using EAP authentication with stronger SHA256-based algorithms.
    AUTH_TYPE_WPA_EAP_SHA256 = 12;
    // WAPI pre-shared key.
    AUTH_TYPE_WAPI_PSK = 13;
    // WAPI certificate to be specified.
    AUTH_TYPE_WAPI_CERT = 14;
    // IEEE 802.11ai FILS SK with SHA256.
    AUTH_TYPE_FILS_SHA256 = 15;
    // IEEE 802.11ai FILS SK with SHA384.
    AUTH_TYPE_FILS_SHA384 = 16;
    // Simultaneous Authentication of Equals transition mode.
    AUTH_TYPE_SAE_TRANSITION = 17;
    // Opportunistic Wireless Encryption transition mode.
    AUTH_TYPE_OWE_TRANSITION = 18;
}

/**
 * Bucketed wifi band.
 */
enum WifiBandBucket {
    BAND_UNKNOWN = 0;

    // All of 2.4GHz band
    BAND_2G = 1;
    // Frequencies in the range of [5150, 5250) GHz
    BAND_5G_LOW = 2;
    // Frequencies in the range of [5250, 5725) GHz
    BAND_5G_MIDDLE = 3;
    // Frequencies in the range of [5725, 5850) GHz
    BAND_5G_HIGH = 4;
    // Frequencies in the range of [5925, 6425) GHz
    BAND_6G_LOW = 5;
    // Frequencies in the range of [6425, 6875) GHz
    BAND_6G_MIDDLE = 6;
    // Frequencies in the range of [6875, 7125) GHz
    BAND_6G_HIGH = 7;
}

// Status of various Aware operations
enum AwareStatus {
    // unknown status
    ST_UNKNOWN = 0;
    // NAN operation succeeded
    ST_SUCCESS = 1;
    // NAN Discovery Engine/Host driver failures
    ST_INTERNAL_FAILURE = 2;
    // NAN OTA failures
    ST_PROTOCOL_FAILURE = 3;
    // The publish/subscribe discovery session id is invalid
    ST_INVALID_SESSION_ID = 4;
    // Out of resources to fufill request
    ST_NO_RESOURCES_AVAILABLE = 5;
    // Invalid arguments passed
    ST_INVALID_ARGS = 6;
    // Invalid peer id
    ST_INVALID_PEER_ID = 7;
    // Invalid NAN data-path (ndp) id
    ST_INVALID_NDP_ID = 8;
    // Attempting to enable NAN when not available, e.g. wifi is disabled
    ST_NAN_NOT_ALLOWED = 9;
    // Over the air ACK not received
    ST_NO_OTA_ACK = 10;
    // Attempting to enable NAN when already enabled
    ST_ALREADY_ENABLED = 11;
    // Can't queue tx followup message foor transmission
    ST_FOLLOWUP_TX_QUEUE_FULL = 12;
    // Unsupported concurrency of NAN and another feature - NAN disabled
    ST_UNSUPPORTED_CONCURRENCY = 13;
    // Other failures
    ST_GENERIC_FAILURE = 14;
}

/**
 * Soft AP Role
 */
enum SoftApRole {
    // Unknown
    ROLE_UNKNOWN = 0;
    // Tethering AP
    ROLE_TETHERING = 1;
    // Local-only AP
    ROLE_LOCAL_ONLY = 2;
}

/**
 * Device support for STA + AP concurrency
 */
enum StaApConcurrency {
    // Unknown
    STA_AP_CONCURRENCY_UNKNOWN = 0;
    // STA + AP concurrency unsupported
    STA_AP_CONCURRENCY_UNSUPPORTED = 1;
    // STA + Single AP concurrency supported
    STA_AP_CONCURRENCY_SINGLE = 2;
    // STA + Bridged AP concurrency supported
    STA_AP_CONCURRENCY_DBS = 3;
}

/**
 * Connection status of the existing primary STA
 */
enum StaStatus {
    // Unknown
    STA_STATUS_UNKNOWN = 0;
    // STA is disconnected
    STA_STATUS_DISCONNECTED = 1;
    // STA is connected via 2.4GHz band
    STA_STATUS_CONNECTED_2_GHZ = 2;
    // STA is connected via 5GHz band
    STA_STATUS_CONNECTED_5_GHZ = 3;
    // STA is connected via 6GHz band
    STA_STATUS_CONNECTED_6_GHZ = 4;
}

enum EapType {
    // Unknown Type
    TYPE_UNKNOWN = 0;
    // EAP_TLS (13)
    TYPE_EAP_TLS = 1;
    // EAP_TTLS (21)
    TYPE_EAP_TTLS = 2;
    // EAP_SIM (18)
    TYPE_EAP_SIM = 3;
    // EAP_AKA (23)
    TYPE_EAP_AKA = 4;
    // EAP_AKA_PRIME (50)
    TYPE_EAP_AKA_PRIME = 5;
    TYPE_EAP_WAPI_CERT = 6;
    TYPE_EAP_UNAUTH_TLS = 7;
    TYPE_EAP_PEAP = 8;
    TYPE_EAP_PWD = 9;
    TYPE_EAP_OTHERS = 10;
}

enum EapInnerMethod {
    METHOD_UNKNOWN = 0;
    METHOD_PAP = 1;
    METHOD_MSCHAP = 2;
    METHOD_MSCHAP_V2 = 3;
    METHOD_OTHERS = 4;
    // Generic Token Card
    METHOD_GTC = 5;
    // EAP-Subscriber Identity Module [RFC-4186]
    METHOD_SIM = 6;
    // EAP-Authentication and Key Agreement [RFC-4187]
    METHOD_AKA = 7;
    // EAP-Authentication and Key Agreement Prime [RFC-5448]
    METHOD_AKA_PRIME = 8;
}

enum RoamingType {
    ROAMING_UNKNOWN = 0;
    // Not a Passpoint network
    ROAMING_NOT_PASSPOINT = 1;
    // Non-Roaming
    ROAMING_NONE = 2;
    // Other RCOI Roaming
    ROAMING_RCOI_OTHERS = 3;
    // Free OpenRoaming
    ROAMING_RCOI_OPENROAMING_FREE = 4;
    // Settled OpenRoaming
    ROAMING_RCOI_OPENROAMING_SETTLED = 5;
    // Not RCOI roaming
    ROAMING_NOT_RCOI = 6;
}

/**
 * Wi-Fi Standards
 */
enum WifiStandard {
    // Unknown
    WIFI_STANDARD_UNKNOWN = 0;
    // Wi-Fi 802.11a/b/g
    WIFI_STANDARD_LEGACY = 1;
    // Wi-Fi 802.11n
    WIFI_STANDARD_11N = 2;
    // Wi-Fi 802.11ac
    WIFI_STANDARD_11AC = 3;
    // Wi-Fi 802.11ax
    WIFI_STANDARD_11AX = 4;
    // Wi-Fi 802.11ad
    WIFI_STANDARD_11AD = 5;
    // Wi-Fi 802.11be
    WIFI_STANDARD_11BE = 6;
}

/**
 * Role of the client mode manager
 */
enum ClientModeRole {
    ROLE_UNSPECIFIED = 0;
    ROLE_CLIENT_PRIMARY = 1;
    ROLE_CLIENT_SECONDARY_LONG_LIVED = 2;
    ROLE_CLIENT_SECONDARY_TRANSIENT = 3;
    ROLE_CLIENT_SECONDARY_INTERNET = 4;
    ROLE_CLIENT_LOCAL_ONLY = 5;
    ROLE_CLIENT_OTHERS = 6;
}

/**
 * Aware HAL API
 */
enum AwareHalApi {
    AWARE_API_UNKNOWN = 0;
    AWARE_CONFIG_REQUEST = 1;
    AWARE_CREATE_DATA_INTERFACE_REQUEST = 2;
    AWARE_DELETE_DATA_INTERFACE_REQUEST = 3;
    AWARE_DISABLE_REQUEST = 4;
    AWARE_ENABLE_REQUEST = 5;
    AWARE_GET_CAPABILITIES_REQUEST = 6;
    AWARE_INITIATE_DATA_PATH_REQUEST = 7;
    AWARE_REGISTER_EVENT_CALLBACK = 8;
    AWARE_RESPOND_TO_DATA_PATH_INDICATION_REQUEST = 9;
    AWARE_START_PUBLISH_REQUEST = 10;
    AWARE_START_SUBSCRIBE_REQUEST = 11;
    AWARE_STOP_PUBLISH_REQUEST = 12;
    AWARE_STOP_SUBSCRIBE_REQUEST = 13;
    AWARE_TERMINATE_DATA_PATH_REQUEST = 14;
    AWARE_SUSPEND_REQUEST = 15;
    AWARE_RESUME_REQUEST = 16;
    AWARE_TRANSMIT_FOLLOW_UP_REQUEST = 17;
    AWARE_INITIATE_PAIRING_REQUEST = 18;
    AWARE_RESPOND_TO_PAIRING_INDICATION_REQUEST = 19;
    AWARE_INITIATE_BOOTSTRAPPING_REQUEST = 20;
    AWARE_RESPOND_TO_BOOTSTRAPPING_INDICATION_REQUEST = 21;
    AWARE_TERMINATE_PAIRING_REQUEST = 22;
}

/**
 * Wi-Fi Security modes defined by the combinations of cipher suite, AKM and PMF
 */
enum SecurityMode {
    SECURITY_MODE_UNKNOWN = 0;
    SECURITY_MODE_INVALID = 1;
    SECURITY_MODE_WPA3_ENTERPRISE_192_BIT = 2;
    SECURITY_MODE_WPA3_ENTERPRISE = 3;
    SECURITY_MODE_WPA3_PERSONAL = 4;
    SECURITY_MODE_WPA3_WPA2_PERSONAL_TRANSITION = 5;
    SECURITY_MODE_DPP = 6;
    SECURITY_MODE_WPA2_PERSONAL = 7;
    SECURITY_MODE_WPA2_WPA_PERSONAL_TRANSITION = 8;
    SECURITY_MODE_WAPI_CERT = 9;
    SECURITY_MODE_WAPI_PSK = 10;
    SECURITY_MODE_WPA_ENTERPRISE_LEGACY = 11;
    SECURITY_MODE_WPA_PERSONAL_LEGACY = 12;
    SECURITY_MODE_OWE = 13;
    SECURITY_MODE_OWE_TRANSITION = 14;
    SECURITY_MODE_WEP = 15;
    SECURITY_MODE_NONE = 16;
}

enum TofuConfiguration {
    // Default value.
    TOFU_CONFIGURATION_UNSPECIFIED = 0;
    // TOFU is not enabled on the enterprise config.
    TOFU_CONFIGURATION_NOT_ENABLED = 1;
    // TOFU is enabled pre-connection.
    TOFU_CONFIGURATION_ENABLED_PRE_CONNECTION = 2;
    // Root CA was configured post-TOFU connection.
    TOFU_CONFIGURATION_CONFIGURE_ROOT_CA = 3;
    // Certificate pinning was used post-TOFU connection.
    TOFU_CONFIGURATION_CERT_PINNING = 4;
}

/**
 * Passpoint release versions
 */
enum PasspointRelease {
  PASSPOINT_RELEASE_UNKNOWN = 0;
  PASSPOINT_RELEASE_1 = 1;
  PASSPOINT_RELEASE_2 = 2;
  PASSPOINT_RELEASE_3 = 3;
}

/**
 * Wi-Fi usability state as predicted by the network scorer
 */
enum WifiPredictedUsabilityState {
   WIFI_USABILITY_PREDICTED_UNKNOWN = 0;
   WIFI_USABILITY_PREDICTED_USABLE = 1;
   WIFI_USABILITY_PREDICTED_UNUSABLE = 2;
   // Scorer doesn't predict or the prediction isn't for the current session.
   WIFI_USABILITY_PREDICTED_NONE = 3;
 }

/**
 * Wi-Fi channel width
 */
enum WifiChannelWidth {
  CHANNEL_WIDTH_UNKNOWN = 0;
  CHANNEL_WIDTH_20MHZ = 1;
  CHANNEL_WIDTH_40MHZ = 2;
  CHANNEL_WIDTH_80MHZ = 3;
  CHANNEL_WIDTH_160MHZ = 4;
  CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 5;
  CHANNEL_WIDTH_320MHZ = 6;
}

enum TriState {
  TRI_STATE_UNKNOWN = 0;
  TRI_STATE_TRUE = 1;
  TRI_STATE_FALSE = 2;
}
