172 lines
6.3 KiB
C++
172 lines
6.3 KiB
C++
//
|
|
// 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 <memory>
|
|
#include <string>
|
|
|
|
#include <base/macros.h>
|
|
#include <base/memory/ref_counted.h>
|
|
#include <brillo/errors/error.h>
|
|
|
|
#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> device_;
|
|
|
|
std::unique_ptr<ConfigAdaptorInterface> adaptor_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(Config);
|
|
};
|
|
|
|
} // namespace apmanager
|
|
|
|
#endif // APMANAGER_CONFIG_H_
|