| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromeos/network/onc/onc_translation_tables.h" |
| |
| #include <cstddef> |
| |
| #include "base/logging.h" |
| #include "chromeos/network/onc/onc_constants.h" |
| #include "third_party/cros_system_api/dbus/service_constants.h" |
| |
| namespace chromeos { |
| namespace onc { |
| |
| // CertificatePattern is converted with function CreateUIData(...) to UIData |
| // stored in Shill. |
| // |
| // Proxy settings are converted to Shill by function |
| // ConvertOncProxySettingsToProxyConfig(...). |
| // |
| // Translation of IPConfig objects is not supported, yet. |
| |
| namespace { |
| |
| const FieldTranslationEntry eap_fields[] = { |
| { eap::kAnonymousIdentity, flimflam::kEapAnonymousIdentityProperty }, |
| { eap::kIdentity, flimflam::kEapIdentityProperty }, |
| // This field is converted during translation, see onc_translator_*. |
| // { eap::kInner, flimflam::kEapPhase2AuthProperty }, |
| |
| // This field is converted during translation, see onc_translator_*. |
| // { eap::kOuter, flimflam::kEapMethodProperty }, |
| { eap::kPassword, flimflam::kEapPasswordProperty }, |
| { eap::kSaveCredentials, flimflam::kSaveCredentialsProperty }, |
| { eap::kServerCAPEMs, shill::kEapCaCertPemProperty }, |
| { eap::kUseSystemCAs, flimflam::kEapUseSystemCasProperty }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry ipsec_fields[] = { |
| // Ignored by Shill, not necessary to synchronize. |
| // { ipsec::kAuthenticationType, flimflam::kL2tpIpsecAuthenticationType }, |
| { ipsec::kGroup, shill::kL2tpIpsecTunnelGroupProperty }, |
| // Ignored by Shill, not necessary to synchronize. |
| // { ipsec::kIKEVersion, flimflam::kL2tpIpsecIkeVersion }, |
| { ipsec::kPSK, flimflam::kL2tpIpsecPskProperty }, |
| { vpn::kSaveCredentials, flimflam::kSaveCredentialsProperty }, |
| { ipsec::kServerCAPEMs, shill::kL2tpIpsecCaCertPemProperty }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry l2tp_fields[] = { |
| { vpn::kPassword, flimflam::kL2tpIpsecPasswordProperty }, |
| // We don't synchronize l2tp's SaveCredentials field for now, as Shill doesn't |
| // support separate settings for ipsec and l2tp. |
| // { vpn::kSaveCredentials, &kBoolSignature }, |
| { vpn::kUsername, flimflam::kL2tpIpsecUserProperty }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry openvpn_fields[] = { |
| { openvpn::kAuth, flimflam::kOpenVPNAuthProperty }, |
| { openvpn::kAuthNoCache, flimflam::kOpenVPNAuthNoCacheProperty }, |
| { openvpn::kAuthRetry, flimflam::kOpenVPNAuthRetryProperty }, |
| { openvpn::kCipher, flimflam::kOpenVPNCipherProperty }, |
| { openvpn::kCompLZO, flimflam::kOpenVPNCompLZOProperty }, |
| { openvpn::kCompNoAdapt, flimflam::kOpenVPNCompNoAdaptProperty }, |
| { openvpn::kKeyDirection, flimflam::kOpenVPNKeyDirectionProperty }, |
| { openvpn::kNsCertType, flimflam::kOpenVPNNsCertTypeProperty }, |
| { vpn::kPassword, flimflam::kOpenVPNPasswordProperty }, |
| { openvpn::kPort, flimflam::kOpenVPNPortProperty }, |
| { openvpn::kProto, flimflam::kOpenVPNProtoProperty }, |
| { openvpn::kPushPeerInfo, flimflam::kOpenVPNPushPeerInfoProperty }, |
| { openvpn::kRemoteCertEKU, flimflam::kOpenVPNRemoteCertEKUProperty }, |
| // This field is converted during translation, see onc_translator_*. |
| // { openvpn::kRemoteCertKU, flimflam::kOpenVPNRemoteCertKUProperty }, |
| { openvpn::kRemoteCertTLS, flimflam::kOpenVPNRemoteCertTLSProperty }, |
| { openvpn::kRenegSec, flimflam::kOpenVPNRenegSecProperty }, |
| { vpn::kSaveCredentials, flimflam::kSaveCredentialsProperty }, |
| { openvpn::kServerCAPEMs, shill::kOpenVPNCaCertPemProperty }, |
| { openvpn::kServerPollTimeout, flimflam::kOpenVPNServerPollTimeoutProperty }, |
| { openvpn::kShaper, flimflam::kOpenVPNShaperProperty }, |
| { openvpn::kStaticChallenge, flimflam::kOpenVPNStaticChallengeProperty }, |
| { openvpn::kTLSAuthContents, flimflam::kOpenVPNTLSAuthContentsProperty }, |
| { openvpn::kTLSRemote, flimflam::kOpenVPNTLSRemoteProperty }, |
| { vpn::kUsername, flimflam::kOpenVPNUserProperty }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry vpn_fields[] = { |
| { vpn::kAutoConnect, flimflam::kAutoConnectProperty }, |
| { vpn::kHost, flimflam::kProviderHostProperty }, |
| // This field is converted during translation, see onc_translator_*. |
| // { vpn::kType, flimflam::kProviderTypeProperty }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry wifi_fields[] = { |
| { wifi::kAutoConnect, flimflam::kAutoConnectProperty }, |
| { wifi::kBSSID, flimflam::kWifiBSsid }, |
| { wifi::kFrequency, flimflam::kWifiFrequency }, |
| { wifi::kFrequencyList, shill::kWifiFrequencyListProperty }, |
| { wifi::kHiddenSSID, flimflam::kWifiHiddenSsid }, |
| { wifi::kPassphrase, flimflam::kPassphraseProperty }, |
| { wifi::kSSID, flimflam::kSSIDProperty }, |
| // This field is converted during translation, see onc_translator_*. |
| // { wifi::kSecurity, flimflam::kSecurityProperty }, |
| { wifi::kSignalStrength, flimflam::kSignalStrengthProperty }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry cellular_provider_fields[] = { |
| { cellular_provider::kCode, flimflam::kOperatorCodeKey }, |
| { cellular_provider::kCountry, flimflam::kOperatorCountryKey }, |
| { cellular_provider::kName, flimflam::kOperatorNameKey }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry cellular_with_state_fields[] = { |
| { cellular::kActivateOverNonCellularNetwork, |
| shill::kActivateOverNonCellularNetworkProperty }, |
| { cellular::kActivationState, flimflam::kActivationStateProperty }, |
| { cellular::kAllowRoaming, flimflam::kCellularAllowRoamingProperty }, |
| { cellular::kAPN, flimflam::kApnProperty }, |
| { cellular::kCarrier, flimflam::kCarrierProperty }, |
| { cellular::kESN, flimflam::kEsnProperty }, |
| { cellular::kFamily, flimflam::kTechnologyFamilyProperty }, |
| { cellular::kFirmwareRevision, flimflam::kFirmwareRevisionProperty }, |
| { cellular::kFoundNetworks, flimflam::kFoundNetworksProperty }, |
| { cellular::kHardwareRevision, flimflam::kHardwareRevisionProperty }, |
| { cellular::kHomeProvider, flimflam::kHomeProviderProperty }, |
| { cellular::kICCID, flimflam::kIccidProperty }, |
| { cellular::kIMEI, flimflam::kImeiProperty }, |
| { cellular::kIMSI, flimflam::kImsiProperty }, |
| { cellular::kManufacturer, flimflam::kManufacturerProperty }, |
| { cellular::kMDN, flimflam::kMdnProperty }, |
| { cellular::kMEID, flimflam::kMeidProperty }, |
| { cellular::kMIN, flimflam::kMinProperty }, |
| { cellular::kModelID, flimflam::kModelIDProperty }, |
| { cellular::kNetworkTechnology, flimflam::kNetworkTechnologyProperty }, |
| { cellular::kPRLVersion, flimflam::kPRLVersionProperty }, |
| { cellular::kProviderRequiresRoaming, |
| shill::kProviderRequiresRoamingProperty }, |
| { cellular::kRoamingState, flimflam::kRoamingStateProperty }, |
| { cellular::kSelectedNetwork, flimflam::kSelectedNetworkProperty }, |
| { cellular::kServingOperator, flimflam::kServingOperatorProperty }, |
| { cellular::kSIMLockStatus, flimflam::kSIMLockStatusProperty }, |
| { cellular::kSIMPresent, shill::kSIMPresentProperty }, |
| { cellular::kSupportedCarriers, shill::kSupportedCarriersProperty }, |
| { cellular::kSupportNetworkScan, flimflam::kSupportNetworkScanProperty }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry network_fields[] = { |
| // Shill doesn't allow setting the name for non-VPN networks. |
| // This field is conditionally translated, see onc_translator_*. |
| // { network_config::kName, flimflam::kNameProperty }, |
| { network_config::kGUID, flimflam::kGuidProperty }, |
| // This field is converted during translation, see onc_translator_*. |
| // { network_config::kType, flimflam::kTypeProperty }, |
| |
| // This field is converted during translation, see |
| // onc_translator_shill_to_onc.cc. It is only converted when going from |
| // Shill->ONC, and ignored otherwise. |
| // { network_config::kConnectionState, flimflam::kStateProperty }, |
| { NULL } |
| }; |
| |
| const OncValueTranslationEntry onc_value_translation_table[] = { |
| { &kEAPSignature, eap_fields }, |
| { &kIPsecSignature, ipsec_fields }, |
| { &kL2TPSignature, l2tp_fields }, |
| { &kOpenVPNSignature, openvpn_fields }, |
| { &kVPNSignature, vpn_fields }, |
| { &kWiFiSignature, wifi_fields }, |
| { &kWiFiWithStateSignature, wifi_fields }, |
| { &kCellularProviderSignature, cellular_provider_fields }, |
| { &kCellularWithStateSignature, cellular_with_state_fields }, |
| { &kNetworkWithStateSignature, network_fields }, |
| { &kNetworkConfigurationSignature, network_fields }, |
| { NULL } |
| }; |
| |
| } // namespace |
| |
| const StringTranslationEntry kNetworkTypeTable[] = { |
| { network_type::kEthernet, flimflam::kTypeEthernet }, |
| { network_type::kWiFi, flimflam::kTypeWifi }, |
| { network_type::kCellular, flimflam::kTypeCellular }, |
| { network_type::kVPN, flimflam::kTypeVPN }, |
| { NULL } |
| }; |
| |
| const StringTranslationEntry kVPNTypeTable[] = { |
| { vpn::kTypeL2TP_IPsec, flimflam::kProviderL2tpIpsec }, |
| { vpn::kOpenVPN, flimflam::kProviderOpenVpn }, |
| { NULL } |
| }; |
| |
| // The first matching line is chosen. |
| const StringTranslationEntry kWiFiSecurityTable[] = { |
| { wifi::kNone, flimflam::kSecurityNone }, |
| { wifi::kWEP_PSK, flimflam::kSecurityWep }, |
| { wifi::kWPA_PSK, flimflam::kSecurityPsk }, |
| { wifi::kWPA_EAP, flimflam::kSecurity8021x }, |
| { wifi::kWPA_PSK, flimflam::kSecurityRsn }, |
| { wifi::kWPA_PSK, flimflam::kSecurityWpa }, |
| { NULL } |
| }; |
| |
| const StringTranslationEntry kEAPOuterTable[] = { |
| { eap::kPEAP, flimflam::kEapMethodPEAP }, |
| { eap::kEAP_TLS, flimflam::kEapMethodTLS }, |
| { eap::kEAP_TTLS, flimflam::kEapMethodTTLS }, |
| { eap::kLEAP, flimflam::kEapMethodLEAP }, |
| { NULL } |
| }; |
| |
| // Translation of the EAP.Inner field in case of EAP.Outer == PEAP |
| const StringTranslationEntry kEAP_PEAP_InnerTable[] = { |
| { eap::kMD5, flimflam::kEapPhase2AuthPEAPMD5 }, |
| { eap::kMSCHAPv2, flimflam::kEapPhase2AuthPEAPMSCHAPV2 }, |
| { NULL } |
| }; |
| |
| // Translation of the EAP.Inner field in case of EAP.Outer == TTLS |
| const StringTranslationEntry kEAP_TTLS_InnerTable[] = { |
| { eap::kMD5, flimflam::kEapPhase2AuthTTLSMD5 }, |
| { eap::kMSCHAPv2, flimflam::kEapPhase2AuthTTLSMSCHAPV2 }, |
| { eap::kPAP, flimflam::kEapPhase2AuthTTLSPAP }, |
| { NULL } |
| }; |
| |
| const FieldTranslationEntry* GetFieldTranslationTable( |
| const OncValueSignature& onc_signature) { |
| for (const OncValueTranslationEntry* it = onc_value_translation_table; |
| it->onc_signature != NULL; ++it) { |
| if (it->onc_signature != &onc_signature) |
| continue; |
| return it->field_translation_table; |
| } |
| return NULL; |
| } |
| |
| bool GetShillPropertyName(const std::string& onc_field_name, |
| const FieldTranslationEntry table[], |
| std::string* shill_property_name) { |
| for (const FieldTranslationEntry* it = table; |
| it->onc_field_name != NULL; ++it) { |
| if (it->onc_field_name != onc_field_name) |
| continue; |
| *shill_property_name = it->shill_property_name; |
| return true; |
| } |
| return false; |
| } |
| |
| bool TranslateStringToShill(const StringTranslationEntry table[], |
| const std::string& onc_value, |
| std::string* shill_value) { |
| for (int i = 0; table[i].onc_value != NULL; ++i) { |
| if (onc_value != table[i].onc_value) |
| continue; |
| *shill_value = table[i].shill_value; |
| return true; |
| } |
| LOG(ERROR) << "Value '" << onc_value << "' cannot be translated to Shill"; |
| return false; |
| } |
| |
| bool TranslateStringToONC(const StringTranslationEntry table[], |
| const std::string& shill_value, |
| std::string* onc_value) { |
| for (int i = 0; table[i].shill_value != NULL; ++i) { |
| if (shill_value != table[i].shill_value) |
| continue; |
| *onc_value = table[i].onc_value; |
| return true; |
| } |
| LOG(ERROR) << "Value '" << shill_value << "' cannot be translated to ONC"; |
| return false; |
| } |
| |
| } // namespace onc |
| } // namespace chromeos |