// // Copyright (C) 2014 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. // #ifndef APMANAGER_CONFIG_H_ #define APMANAGER_CONFIG_H_ #include #include #include #include #include #include "apmanager/config_adaptor_interface.h" namespace apmanager { class Error; class Device; class Manager; class Config { public: Config(Manager* manager, int service_identifier); virtual ~Config(); bool ValidateSsid(Error* error, const std::string& value); bool ValidateSecurityMode(Error* error, const std::string& value); bool ValidatePassphrase(Error* error, const std::string& value); bool ValidateHwMode(Error* error, const std::string& value); bool ValidateOperationMode(Error* error, const std::string& value); bool ValidateChannel(Error* error, const uint16_t& value); // Calculate the frequency based on the given |channel|. Return true and set // the output |frequency| if is valid channel, false otherwise. static bool GetFrequencyFromChannel(uint16_t channel, uint32_t* freq); // Generate a config file string for a hostapd instance. Populate // |error| when encounter invalid configuration. Return true if success, // false otherwise. virtual bool GenerateConfigFile(Error* error, std::string* config_str); // Claim and release the device needed for this configuration. virtual bool ClaimDevice(); virtual bool ReleaseDevice(); // Getter and setter for configuration properties. void SetSsid(const std::string& ssid); std::string GetSsid() const; void SetInterfaceName(const std::string& interface_name); std::string GetInterfaceName() const; void SetSecurityMode(const std::string& security_mode); std::string GetSecurityMode() const; void SetPassphrase(const std::string& passphrase); std::string GetPassphrase() const; void SetHwMode(const std::string& hw_mode); std::string GetHwMode() const; void SetOperationMode(const std::string& op_mode); std::string GetOperationMode() const; void SetChannel(uint16_t channel); uint16_t GetChannel() const; void SetHiddenNetwork(bool hidden); bool GetHiddenNetwork() const; void SetBridgeInterface(const std::string& interface_name); std::string GetBridgeInterface() const; void SetServerAddressIndex(uint16_t); uint16_t GetServerAddressIndex() const; void SetFullDeviceControl(bool full_control); bool GetFullDeviceControl() const; const std::string& control_interface() const { return control_interface_; } void set_control_interface(const std::string& control_interface) { control_interface_ = control_interface; } const std::string& selected_interface() const { return selected_interface_; } ConfigAdaptorInterface* adaptor() const { return adaptor_.get(); } private: // Keys used in hostapd config file. static const char kHostapdConfigKeyBridgeInterface[]; static const char kHostapdConfigKeyChannel[]; static const char kHostapdConfigKeyControlInterface[]; static const char kHostapdConfigKeyControlInterfaceGroup[]; static const char kHostapdConfigKeyDriver[]; static const char kHostapdConfigKeyFragmThreshold[]; static const char kHostapdConfigKeyHTCapability[]; static const char kHostapdConfigKeyHwMode[]; static const char kHostapdConfigKeyIeee80211ac[]; static const char kHostapdConfigKeyIeee80211n[]; static const char kHostapdConfigKeyIgnoreBroadcastSsid[]; static const char kHostapdConfigKeyInterface[]; static const char kHostapdConfigKeyRsnPairwise[]; static const char kHostapdConfigKeyRtsThreshold[]; static const char kHostapdConfigKeySsid[]; static const char kHostapdConfigKeyWepDefaultKey[]; static const char kHostapdConfigKeyWepKey0[]; static const char kHostapdConfigKeyWpa[]; static const char kHostapdConfigKeyWpaKeyMgmt[]; static const char kHostapdConfigKeyWpaPassphrase[]; // Hardware mode value for hostapd config file. static const char kHostapdHwMode80211a[]; static const char kHostapdHwMode80211b[]; static const char kHostapdHwMode80211g[]; // Default hostapd configuration values. User will not be able to configure // these. static const char kHostapdDefaultDriver[]; static const char kHostapdDefaultRsnPairwise[]; static const char kHostapdDefaultWpaKeyMgmt[]; static const int kHostapdDefaultFragmThreshold; static const int kHostapdDefaultRtsThreshold; // Default config property values. static const uint16_t kPropertyDefaultChannel;; static const bool kPropertyDefaultHiddenNetwork; static const uint16_t kPropertyDefaultServerAddressIndex; // Constants use for converting channel to frequency. static const uint16_t kBand24GHzChannelLow; static const uint16_t kBand24GHzChannelHigh; static const uint32_t kBand24GHzBaseFrequency; static const uint16_t kBand5GHzChannelLow; static const uint16_t kBand5GHzChannelHigh; static const uint16_t kBand5GHzBaseFrequency; static const int kSsidMinLength; static const int kSsidMaxLength; static const int kPassphraseMinLength; static const int kPassphraseMaxLength; // Append default hostapd configurations to the config file. bool AppendHostapdDefaults(Error* error, std::string* config_str); // Append hardware mode related configurations to the config file. bool AppendHwMode(Error* error, std::string* config_str); // Determine/append interface configuration to the config file. bool AppendInterface(Error* error, std::string* config_str); // Append security related configurations to the config file. bool AppendSecurityMode(Error* error, std::string* config_str); Manager* manager_; std::string control_interface_; // Interface selected for hostapd. std::string selected_interface_; scoped_refptr device_; std::unique_ptr adaptor_; DISALLOW_COPY_AND_ASSIGN(Config); }; } // namespace apmanager #endif // APMANAGER_CONFIG_H_