• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (C) 2014 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #ifndef APMANAGER_CONFIG_H_
18 #define APMANAGER_CONFIG_H_
19 
20 #include <memory>
21 #include <string>
22 
23 #include <base/macros.h>
24 #include <base/memory/ref_counted.h>
25 #include <brillo/errors/error.h>
26 
27 #include "apmanager/config_adaptor_interface.h"
28 
29 namespace apmanager {
30 
31 class Error;
32 class Device;
33 class Manager;
34 
35 class Config {
36  public:
37   Config(Manager* manager, int service_identifier);
38   virtual ~Config();
39 
40   bool ValidateSsid(Error* error, const std::string& value);
41   bool ValidateSecurityMode(Error* error, const std::string& value);
42   bool ValidatePassphrase(Error* error, const std::string& value);
43   bool ValidateHwMode(Error* error, const std::string& value);
44   bool ValidateOperationMode(Error* error, const std::string& value);
45   bool ValidateChannel(Error* error, const uint16_t& value);
46 
47   // Calculate the frequency based on the given |channel|. Return true and set
48   // the output |frequency| if is valid channel, false otherwise.
49   static bool GetFrequencyFromChannel(uint16_t channel, uint32_t* freq);
50 
51   // Generate a config file string for a hostapd instance. Populate
52   // |error| when encounter invalid configuration. Return true if success,
53   // false otherwise.
54   virtual bool GenerateConfigFile(Error* error, std::string* config_str);
55 
56   // Claim and release the device needed for this configuration.
57   virtual bool ClaimDevice();
58   virtual bool ReleaseDevice();
59 
60   // Getter and setter for configuration properties.
61   void SetSsid(const std::string& ssid);
62   std::string GetSsid() const;
63   void SetInterfaceName(const std::string& interface_name);
64   std::string GetInterfaceName() const;
65   void SetSecurityMode(const std::string& security_mode);
66   std::string GetSecurityMode() const;
67   void SetPassphrase(const std::string& passphrase);
68   std::string GetPassphrase() const;
69   void SetHwMode(const std::string& hw_mode);
70   std::string GetHwMode() const;
71   void SetOperationMode(const std::string& op_mode);
72   std::string GetOperationMode() const;
73   void SetChannel(uint16_t channel);
74   uint16_t GetChannel() const;
75   void SetHiddenNetwork(bool hidden);
76   bool GetHiddenNetwork() const;
77   void SetBridgeInterface(const std::string& interface_name);
78   std::string GetBridgeInterface() const;
79   void SetServerAddressIndex(uint16_t);
80   uint16_t GetServerAddressIndex() const;
81   void SetFullDeviceControl(bool full_control);
82   bool GetFullDeviceControl() const;
83 
control_interface()84   const std::string& control_interface() const { return control_interface_; }
set_control_interface(const std::string & control_interface)85   void set_control_interface(const std::string& control_interface) {
86     control_interface_ = control_interface;
87   }
88 
selected_interface()89   const std::string& selected_interface() const { return selected_interface_; }
90 
adaptor()91   ConfigAdaptorInterface* adaptor() const { return adaptor_.get(); }
92 
93  private:
94   // Keys used in hostapd config file.
95   static const char kHostapdConfigKeyBridgeInterface[];
96   static const char kHostapdConfigKeyChannel[];
97   static const char kHostapdConfigKeyControlInterface[];
98   static const char kHostapdConfigKeyControlInterfaceGroup[];
99   static const char kHostapdConfigKeyDriver[];
100   static const char kHostapdConfigKeyFragmThreshold[];
101   static const char kHostapdConfigKeyHTCapability[];
102   static const char kHostapdConfigKeyHwMode[];
103   static const char kHostapdConfigKeyIeee80211ac[];
104   static const char kHostapdConfigKeyIeee80211n[];
105   static const char kHostapdConfigKeyIgnoreBroadcastSsid[];
106   static const char kHostapdConfigKeyInterface[];
107   static const char kHostapdConfigKeyRsnPairwise[];
108   static const char kHostapdConfigKeyRtsThreshold[];
109   static const char kHostapdConfigKeySsid[];
110   static const char kHostapdConfigKeyWepDefaultKey[];
111   static const char kHostapdConfigKeyWepKey0[];
112   static const char kHostapdConfigKeyWpa[];
113   static const char kHostapdConfigKeyWpaKeyMgmt[];
114   static const char kHostapdConfigKeyWpaPassphrase[];
115 
116   // Hardware mode value for hostapd config file.
117   static const char kHostapdHwMode80211a[];
118   static const char kHostapdHwMode80211b[];
119   static const char kHostapdHwMode80211g[];
120 
121   // Default hostapd configuration values. User will not be able to configure
122   // these.
123   static const char kHostapdDefaultDriver[];
124   static const char kHostapdDefaultRsnPairwise[];
125   static const char kHostapdDefaultWpaKeyMgmt[];
126   static const int kHostapdDefaultFragmThreshold;
127   static const int kHostapdDefaultRtsThreshold;
128 
129   // Default config property values.
130   static const uint16_t kPropertyDefaultChannel;;
131   static const bool kPropertyDefaultHiddenNetwork;
132   static const uint16_t kPropertyDefaultServerAddressIndex;
133 
134   // Constants use for converting channel to frequency.
135   static const uint16_t kBand24GHzChannelLow;
136   static const uint16_t kBand24GHzChannelHigh;
137   static const uint32_t kBand24GHzBaseFrequency;
138   static const uint16_t kBand5GHzChannelLow;
139   static const uint16_t kBand5GHzChannelHigh;
140   static const uint16_t kBand5GHzBaseFrequency;
141 
142   static const int kSsidMinLength;
143   static const int kSsidMaxLength;
144   static const int kPassphraseMinLength;
145   static const int kPassphraseMaxLength;
146 
147   // Append default hostapd configurations to the config file.
148   bool AppendHostapdDefaults(Error* error, std::string* config_str);
149 
150   // Append hardware mode related configurations to the config file.
151   bool AppendHwMode(Error* error, std::string* config_str);
152 
153   // Determine/append interface configuration to the config file.
154   bool AppendInterface(Error* error, std::string* config_str);
155 
156   // Append security related configurations to the config file.
157   bool AppendSecurityMode(Error* error, std::string* config_str);
158 
159   Manager* manager_;
160   std::string control_interface_;
161   // Interface selected for hostapd.
162   std::string selected_interface_;
163   scoped_refptr<Device> device_;
164 
165   std::unique_ptr<ConfigAdaptorInterface> adaptor_;
166 
167   DISALLOW_COPY_AND_ASSIGN(Config);
168 };
169 
170 }  // namespace apmanager
171 
172 #endif  // APMANAGER_CONFIG_H_
173