shill: add support for connecting to WPA-PSK networks
BUG=chromium-os:20897
TEST=unittests, some autotests (see below)
the following autotests now pass, at least in the wifi_vm_config:
- network_WiFiManager.000_SSID_Length_Limit
- network_WiFiSecMat.010CheckWPA_TKIP
- network_WiFiSecMat.011CheckWPA_AES
- network_WiFiSecMat.012CheckWPA_Multi
- network_WiFiSecMat.018CheckWPA_CounterMeasures
Change-Id: Ie7499fd87f661ceef3ef0aae348a08bd43c305f4
Reviewed-on: http://gerrit.chromium.org/gerrit/8586
Tested-by: mukesh agrawal <quiche@google.com>
Reviewed-by: Paul Stewart <pstew@chromium.org>
diff --git a/wifi_endpoint.h b/wifi_endpoint.h
index 17bf60b..c7b161c 100644
--- a/wifi_endpoint.h
+++ b/wifi_endpoint.h
@@ -6,11 +6,13 @@
#define SHILL_WIFI_ENDPOINT_
#include <map>
+#include <set>
#include <string>
#include <vector>
#include <base/memory/ref_counted.h>
#include <dbus-c++/dbus.h>
+#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "shill/endpoint.h"
#include "shill/shill_event.h"
@@ -33,24 +35,34 @@
const std::string &bssid_hex() const;
int16_t signal_strength() const;
const std::string &network_mode() const;
+ const std::string &security_mode() const;
private:
- static const uint32_t kSupplicantNetworkModeInfrastructureInt;
- static const uint32_t kSupplicantNetworkModeAdHocInt;
- static const uint32_t kSupplicantNetworkModeAccessPointInt;
+ friend class WiFiEndpointTest;
+ // these test cases need access to the KeyManagement enum
+ FRIEND_TEST(WiFiEndpointTest, ParseKeyManagementMethodsEAP);
+ FRIEND_TEST(WiFiEndpointTest, ParseKeyManagementMethodsPSK);
+ FRIEND_TEST(WiFiEndpointTest, ParseKeyManagementMethodsEAPAndPSK);
- static const char kSupplicantPropertySSID[];
- static const char kSupplicantPropertyBSSID[];
- static const char kSupplicantPropertySignal[];
- static const char kSupplicantPropertyMode[];
- static const char kSupplicantNetworkModeInfrastructure[];
- static const char kSupplicantNetworkModeAdHoc[];
- static const char kSupplicantNetworkModeAccessPoint[];
+ enum KeyManagement {
+ kKeyManagement802_1x,
+ kKeyManagementPSK
+ };
// Maps mode strings from supplicant into flimflam's nomenclature, as defined
// in chromeos/dbus/service_constants.h
static const char *ParseMode(const std::string &mode_string);
+ // Parses an Endpoint's properties to identify approprirate flimflam
+ // security property value, as defined in chromeos/dbus/service_constants.h
+ static const char *ParseSecurity(
+ const std::map<std::string, ::DBus::Variant> &properties);
+ // Parses and Endpoint's properties' "RSN" or "WPA" sub-dictionary, to
+ // identify supported key management methods (802.1x or PSK).
+ static void ParseKeyManagementMethods(
+ const std::map<std::string, ::DBus::Variant> &security_method_properties,
+ std::set<KeyManagement> *key_management_methods);
+ // TODO(quiche): make const?
std::vector<uint8_t> ssid_;
std::vector<uint8_t> bssid_;
std::string ssid_string_;
@@ -58,7 +70,10 @@
std::string bssid_string_;
std::string bssid_hex_;
int16_t signal_strength_;
+ // network_mode_ and security_mode_ are represented as flimflam names
+ // (not necessarily the same as wpa_supplicant names)
std::string network_mode_;
+ std::string security_mode_;
DISALLOW_COPY_AND_ASSIGN(WiFiEndpoint);
};