blob: 0038e83110e1a233324e3b5cc70838dd244bd841 [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,
Peter Qiuc9ce1f12014-12-05 11:14:29 -080040 const scoped_refptr<dbus::Bus>& bus,
Peter Qiu376e4042014-11-13 09:40:28 -080041 chromeos::dbus_utils::AsyncEventSequencer* sequencer);
42
Peter Qiuf0731732014-11-11 09:46:41 -080043 // Generate a config file string for a hostapd instance. Raise appropriate
44 // error when encounter invalid configuration. Return true if success,
45 // false otherwise.
46 virtual bool GenerateConfigFile(chromeos::ErrorPtr* error,
47 std::string* config_str);
48
Peter Qiufb39ba42014-11-21 09:09:59 -080049 // Claim and release the device needed for this configuration.
50 virtual bool ClaimDevice();
51 virtual bool ReleaseDevice();
52
Peter Qiuf0731732014-11-11 09:46:41 -080053 const std::string& control_interface() const { return control_interface_; }
54 void set_control_interface(const std::string& control_interface) {
55 control_interface_ = control_interface;
56 }
57
Peter Qiubf8e36c2014-12-03 22:59:45 -080058 const std::string& selected_interface() const { return selected_interface_; }
59
Peter Qiuf0731732014-11-11 09:46:41 -080060 const dbus::ObjectPath& dbus_path() const { return dbus_path_; }
61
62 private:
63 // Keys used in hostapd config file.
64 static const char kHostapdConfigKeyBridgeInterface[];
65 static const char kHostapdConfigKeyChannel[];
66 static const char kHostapdConfigKeyControlInterface[];
67 static const char kHostapdConfigKeyDriver[];
68 static const char kHostapdConfigKeyFragmThreshold[];
Peter Qiu8e785b92014-11-24 10:01:08 -080069 static const char kHostapdConfigKeyHTCapability[];
Peter Qiuf0731732014-11-11 09:46:41 -080070 static const char kHostapdConfigKeyHwMode[];
71 static const char kHostapdConfigKeyIeee80211ac[];
72 static const char kHostapdConfigKeyIeee80211n[];
73 static const char kHostapdConfigKeyIgnoreBroadcastSsid[];
74 static const char kHostapdConfigKeyInterface[];
75 static const char kHostapdConfigKeyRsnPairwise[];
76 static const char kHostapdConfigKeyRtsThreshold[];
77 static const char kHostapdConfigKeySsid[];
78 static const char kHostapdConfigKeyWepDefaultKey[];
79 static const char kHostapdConfigKeyWepKey0[];
80 static const char kHostapdConfigKeyWpa[];
81 static const char kHostapdConfigKeyWpaKeyMgmt[];
82 static const char kHostapdConfigKeyWpaPassphrase[];
83
84 // Hardware mode value for hostapd config file.
85 static const char kHostapdHwMode80211a[];
86 static const char kHostapdHwMode80211b[];
87 static const char kHostapdHwMode80211g[];
88
89 // Default hostapd configuration values. User will not be able to configure
90 // these.
91 static const char kHostapdDefaultDriver[];
92 static const char kHostapdDefaultRsnPairwise[];
93 static const char kHostapdDefaultWpaKeyMgmt[];
94 static const int kHostapdDefaultFragmThreshold;
95 static const int kHostapdDefaultRtsThreshold;
96
97 // Default config property values.
98 static const uint16_t kPropertyDefaultChannel;;
99 static const bool kPropertyDefaultHiddenNetwork;
100 static const uint16_t kPropertyDefaultServerAddressIndex;
101
Peter Qiu8e785b92014-11-24 10:01:08 -0800102 // Constants use for converting channel to frequency.
103 static const uint16_t kBand24GHzChannelLow;
104 static const uint16_t kBand24GHzChannelHigh;
105 static const uint32_t kBand24GHzBaseFrequency;
106 static const uint16_t kBand5GHzChannelLow;
107 static const uint16_t kBand5GHzChannelHigh;
108 static const uint16_t kBand5GHzBaseFrequency;
109
Peter Qiuf0731732014-11-11 09:46:41 -0800110 // Append default hostapd configurations to the config file.
111 bool AppendHostapdDefaults(chromeos::ErrorPtr* error,
112 std::string* config_str);
113
114 // Append hardware mode related configurations to the config file.
115 bool AppendHwMode(chromeos::ErrorPtr* error, std::string* config_str);
116
117 // Determine/append interface configuration to the config file.
118 bool AppendInterface(chromeos::ErrorPtr* error, std::string* config_str);
119
120 // Append security related configurations to the config file.
121 bool AppendSecurityMode(chromeos::ErrorPtr* error, std::string* config_str);
122
Peter Qiufb39ba42014-11-21 09:09:59 -0800123 Manager* manager_;
Peter Qiuf0731732014-11-11 09:46:41 -0800124 dbus::ObjectPath dbus_path_;
125 std::string control_interface_;
Peter Qiubf8e36c2014-12-03 22:59:45 -0800126 // Interface selected for hostapd.
127 std::string selected_interface_;
Peter Qiu376e4042014-11-13 09:40:28 -0800128 std::unique_ptr<chromeos::dbus_utils::DBusObject> dbus_object_;
Peter Qiufb39ba42014-11-21 09:09:59 -0800129 scoped_refptr<Device> device_;
Peter Qiuf0731732014-11-11 09:46:41 -0800130
131 DISALLOW_COPY_AND_ASSIGN(Config);
132};
133
134} // namespace apmanager
135
136#endif // APMANAGER_CONFIG_H_