blob: ecc95f2198d9912f2c0185131f19d396ab3b7ad0 [file] [log] [blame]
Peter Qiuf0731732014-11-11 09:46:41 -08001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef APMANAGER_CONFIG_H_
6#define APMANAGER_CONFIG_H_
7
8#include <memory>
9#include <string>
10
11#include <base/macros.h>
12#include <chromeos/errors/error.h>
13
14#include "apmanager/dbus_adaptors/org.chromium.apmanager.Config.h"
15
16namespace apmanager {
17
Peter Qiufb39ba42014-11-21 09:09:59 -080018class Device;
19class Manager;
20
Peter Qiuf0731732014-11-11 09:46:41 -080021class Config
22 : public org::chromium::apmanager::ConfigAdaptor,
23 public org::chromium::apmanager::ConfigInterface {
24 public:
Peter Qiufb39ba42014-11-21 09:09:59 -080025 Config(Manager* manager, const std::string& service_path);
Peter Qiuf0731732014-11-11 09:46:41 -080026 virtual ~Config();
27
Peter Qiubf8e36c2014-12-03 22:59:45 -080028 // Implementation of ConfigInterface.
29 // Handles calls to org.chromium.apmanager.Config.SsidSet().
30 virtual bool SsidSet(chromeos::ErrorPtr* error,
31 const std::string& ssid);
32
Peter Qiu8e785b92014-11-24 10:01:08 -080033 // Calculate the frequency based on the given |channel|. Return true and set
34 // the output |frequency| if is valid channel, false otherwise.
35 static bool GetFrequencyFromChannel(uint16_t channel, uint32_t* freq);
36
Peter Qiu376e4042014-11-13 09:40:28 -080037 // Register Config DBus object.
38 void RegisterAsync(
39 chromeos::dbus_utils::ExportedObjectManager* object_manager,
40 chromeos::dbus_utils::AsyncEventSequencer* sequencer);
41
Peter Qiuf0731732014-11-11 09:46:41 -080042 // Generate a config file string for a hostapd instance. Raise appropriate
43 // error when encounter invalid configuration. Return true if success,
44 // false otherwise.
45 virtual bool GenerateConfigFile(chromeos::ErrorPtr* error,
46 std::string* config_str);
47
Peter Qiufb39ba42014-11-21 09:09:59 -080048 // Claim and release the device needed for this configuration.
49 virtual bool ClaimDevice();
50 virtual bool ReleaseDevice();
51
Peter Qiuf0731732014-11-11 09:46:41 -080052 const std::string& control_interface() const { return control_interface_; }
53 void set_control_interface(const std::string& control_interface) {
54 control_interface_ = control_interface;
55 }
56
Peter Qiubf8e36c2014-12-03 22:59:45 -080057 const std::string& selected_interface() const { return selected_interface_; }
58
Peter Qiuf0731732014-11-11 09:46:41 -080059 const dbus::ObjectPath& dbus_path() const { return dbus_path_; }
60
61 private:
62 // Keys used in hostapd config file.
63 static const char kHostapdConfigKeyBridgeInterface[];
64 static const char kHostapdConfigKeyChannel[];
65 static const char kHostapdConfigKeyControlInterface[];
66 static const char kHostapdConfigKeyDriver[];
67 static const char kHostapdConfigKeyFragmThreshold[];
Peter Qiu8e785b92014-11-24 10:01:08 -080068 static const char kHostapdConfigKeyHTCapability[];
Peter Qiuf0731732014-11-11 09:46:41 -080069 static const char kHostapdConfigKeyHwMode[];
70 static const char kHostapdConfigKeyIeee80211ac[];
71 static const char kHostapdConfigKeyIeee80211n[];
72 static const char kHostapdConfigKeyIgnoreBroadcastSsid[];
73 static const char kHostapdConfigKeyInterface[];
74 static const char kHostapdConfigKeyRsnPairwise[];
75 static const char kHostapdConfigKeyRtsThreshold[];
76 static const char kHostapdConfigKeySsid[];
77 static const char kHostapdConfigKeyWepDefaultKey[];
78 static const char kHostapdConfigKeyWepKey0[];
79 static const char kHostapdConfigKeyWpa[];
80 static const char kHostapdConfigKeyWpaKeyMgmt[];
81 static const char kHostapdConfigKeyWpaPassphrase[];
82
83 // Hardware mode value for hostapd config file.
84 static const char kHostapdHwMode80211a[];
85 static const char kHostapdHwMode80211b[];
86 static const char kHostapdHwMode80211g[];
87
88 // Default hostapd configuration values. User will not be able to configure
89 // these.
90 static const char kHostapdDefaultDriver[];
91 static const char kHostapdDefaultRsnPairwise[];
92 static const char kHostapdDefaultWpaKeyMgmt[];
93 static const int kHostapdDefaultFragmThreshold;
94 static const int kHostapdDefaultRtsThreshold;
95
96 // Default config property values.
97 static const uint16_t kPropertyDefaultChannel;;
98 static const bool kPropertyDefaultHiddenNetwork;
99 static const uint16_t kPropertyDefaultServerAddressIndex;
100
Peter Qiu8e785b92014-11-24 10:01:08 -0800101 // Constants use for converting channel to frequency.
102 static const uint16_t kBand24GHzChannelLow;
103 static const uint16_t kBand24GHzChannelHigh;
104 static const uint32_t kBand24GHzBaseFrequency;
105 static const uint16_t kBand5GHzChannelLow;
106 static const uint16_t kBand5GHzChannelHigh;
107 static const uint16_t kBand5GHzBaseFrequency;
108
Peter Qiuf0731732014-11-11 09:46:41 -0800109 // Append default hostapd configurations to the config file.
110 bool AppendHostapdDefaults(chromeos::ErrorPtr* error,
111 std::string* config_str);
112
113 // Append hardware mode related configurations to the config file.
114 bool AppendHwMode(chromeos::ErrorPtr* error, std::string* config_str);
115
116 // Determine/append interface configuration to the config file.
117 bool AppendInterface(chromeos::ErrorPtr* error, std::string* config_str);
118
119 // Append security related configurations to the config file.
120 bool AppendSecurityMode(chromeos::ErrorPtr* error, std::string* config_str);
121
Peter Qiufb39ba42014-11-21 09:09:59 -0800122 Manager* manager_;
Peter Qiuf0731732014-11-11 09:46:41 -0800123 dbus::ObjectPath dbus_path_;
124 std::string control_interface_;
Peter Qiubf8e36c2014-12-03 22:59:45 -0800125 // Interface selected for hostapd.
126 std::string selected_interface_;
Peter Qiu376e4042014-11-13 09:40:28 -0800127 std::unique_ptr<chromeos::dbus_utils::DBusObject> dbus_object_;
Peter Qiufb39ba42014-11-21 09:09:59 -0800128 scoped_refptr<Device> device_;
Peter Qiuf0731732014-11-11 09:46:41 -0800129
130 DISALLOW_COPY_AND_ASSIGN(Config);
131};
132
133} // namespace apmanager
134
135#endif // APMANAGER_CONFIG_H_