blob: 591c83f8c059b1eb679c1cfc58d160d860b9bebd [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2016 - Google
#
# 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.
import enum
######################################################
# ConnectivityManager.NetworkCallback events
######################################################
EVENT_NETWORK_CALLBACK = "NetworkCallback"
# event types
NETWORK_CB_PRE_CHECK = "PreCheck"
NETWORK_CB_AVAILABLE = "Available"
NETWORK_CB_LOSING = "Losing"
NETWORK_CB_LOST = "Lost"
NETWORK_CB_UNAVAILABLE = "Unavailable"
NETWORK_CB_CAPABILITIES_CHANGED = "CapabilitiesChanged"
NETWORK_CB_SUSPENDED = "Suspended"
NETWORK_CB_RESUMED = "Resumed"
NETWORK_CB_LINK_PROPERTIES_CHANGED = "LinkPropertiesChanged"
NETWORK_CB_INVALID = "Invalid"
# event data keys
NETWORK_CB_KEY_ID = "id"
NETWORK_CB_KEY_EVENT = "networkCallbackEvent"
NETWORK_CB_KEY_MAX_MS_TO_LIVE = "maxMsToLive"
NETWORK_CB_KEY_RSSI = "rssi"
NETWORK_CB_KEY_INTERFACE_NAME = "interfaceName"
NETWORK_CB_KEY_CREATE_TS = "creation_timestamp"
NETWORK_CB_KEY_CURRENT_TS = "current_timestamp"
NETWORK_CB_KEY_NETWORK_SPECIFIER = "network_specifier"
NETWORK_CB_KEY_TRANSPORT_INFO = "transport_info"
# Constants for VPN connection status
VPN_STATE_DISCONNECTED = 0
VPN_STATE_INITIALIZING = 1
VPN_STATE_CONNECTING = 2
VPN_STATE_CONNECTED = 3
VPN_STATE_TIMEOUT = 4
VPN_STATE_FAILED = 5
# TODO gmoturu: determine the exact timeout value
# This is a random value as of now
VPN_TIMEOUT = 30
# Connectiivty Manager constants
TYPE_MOBILE = 0
TYPE_WIFI = 1
# Network request related constants.
NETWORK_CAP_TRANSPORT_WIFI = TYPE_WIFI
NETWORK_CAP_CAPABILITY_INTERNET = 12
# Network request related keys.
NETWORK_CAP_TRANSPORT_TYPE_KEY = "TransportType"
NETWORK_CAP_CAPABILITY_KEY = "Capability"
# Multipath preference constants
MULTIPATH_PREFERENCE_NONE = 0
MULTIPATH_PREFERENCE_HANDOVER = 1 << 0
MULTIPATH_PREFERENCE_RELIABILITY = 1 << 1
MULTIPATH_PREFERENCE_PERFORMANCE = 1 << 2
# Private DNS constants
DNS_GOOGLE_HOSTNAME = "dns.google"
DNS_QUAD9_HOSTNAME = "dns.quad9.net"
DNS_CLOUDFLARE_HOSTNAME = "1dot1dot1dot1.cloudflare-dns.com"
DOH_CLOUDFLARE_HOSTNAME = "cloudflare-dns.com"
PRIVATE_DNS_MODE_OFF = "off"
PRIVATE_DNS_MODE_OPPORTUNISTIC = "opportunistic"
PRIVATE_DNS_MODE_STRICT = "hostname"
DNS_SUPPORT_TYPE = {
DNS_GOOGLE_HOSTNAME: ["Do53", "DoT", "DoH"],
DNS_CLOUDFLARE_HOSTNAME: ["Do53","DoT"],
DOH_CLOUDFLARE_HOSTNAME: ["DoH"]
}
DNS_GOOGLE_ADDR_V4 = ["8.8.4.4", "8.8.8.8"]
DNS_GOOGLE_ADDR_V6 = ["2001:4860:4860::8888",
"2001:4860:4860::8844"]
DNS_CLOUDFLARE_ADDR_V4 = ["1.1.1.1", "1.0.0.1"]
DOH_CLOUDFLARE_ADDR_V4 = ["104.16.248.249", "104.16.249.249"]
DOH_CLOUDFLARE_ADDR_V6 = ["2606:4700::6810:f8f9",
"2606:4700::6810:f9f9"]
# IpSec constants
SOCK_STREAM = 1
SOCK_DGRAM = 2
AF_INET = 2
AF_INET6 = 10
DIRECTION_IN = 0
DIRECTION_OUT = 1
MODE_TRANSPORT = 0
MODE_TUNNEL = 1
CRYPT_NULL = "ecb(cipher_null)"
CRYPT_AES_CBC = "cbc(aes)"
AUTH_HMAC_MD5 = "hmac(md5)"
AUTH_HMAC_SHA1 = "hmac(sha1)"
AUTH_HMAC_SHA256 = "hmac(sha256)"
AUTH_HMAC_SHA384 = "hmac(sha384)"
AUTH_HMAC_SHA512 = "hmac(sha512)"
AUTH_CRYPT_AES_GCM = "rfc4106(gcm(aes))"
# Constants for VpnProfile
class VpnProfile(object):
""" This class contains all the possible
parameters required for VPN connection
"""
NAME = "name"
TYPE = "type"
SERVER = "server"
USER = "username"
PWD = "password"
DNS = "dnsServers"
SEARCH_DOMAINS = "searchDomains"
ROUTES = "routes"
MPPE = "mppe"
L2TP_SECRET = "l2tpSecret"
IPSEC_ID = "ipsecIdentifier"
IPSEC_SECRET = "ipsecSecret"
IPSEC_USER_CERT = "ipsecUserCert"
IPSEC_CA_CERT = "ipsecCaCert"
IPSEC_SERVER_CERT = "ipsecServerCert"
# Enums for VPN profile types
class VpnProfileType(enum.Enum):
""" Integer constant for each type of VPN
"""
PPTP = 0
L2TP_IPSEC_PSK = 1
L2TP_IPSEC_RSA = 2
IPSEC_XAUTH_PSK = 3
IPSEC_XAUTH_RSA = 4
IPSEC_HYBRID_RSA = 5
IKEV2_IPSEC_USER_PASS = 6
IKEV2_IPSEC_PSK = 7
IKEV2_IPSEC_RSA = 8
# Constants for config file
class VpnReqParams(object):
""" Config file parameters required for
VPN connection
"""
vpn_server_addresses = "vpn_server_addresses"
vpn_verify_addresses = "vpn_verify_addresses"
vpn_username = "vpn_username"
vpn_password = "vpn_password"
psk_secret = "psk_secret"
client_pkcs_file_name = "client_pkcs_file_name"
cert_path_vpnserver = "cert_path_vpnserver"
cert_password = "cert_password"
pptp_mppe = "pptp_mppe"
ipsec_server_type = "ipsec_server_type"
wifi_network = "wifi_network"
vpn_identity = "vpn_identity"
vpn_server_hostname = "vpn_server_hostname"