summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-03-26 02:38:55 -0700
committerMarcel Holtmann <marcel@holtmann.org>2009-03-26 02:38:55 -0700
commit3e3cba11f4644348cbcf87dc66d8bffbffc07d5a (patch)
treeddeb76700a626634829632f9fe2be5eebd4d5525
parent6807913ff2db5e688eb27f8c7bb7ee5534f959de (diff)
downloadconnman-3e3cba11f4644348cbcf87dc66d8bffbffc07d5a.tar.gz
connman-3e3cba11f4644348cbcf87dc66d8bffbffc07d5a.tar.bz2
connman-3e3cba11f4644348cbcf87dc66d8bffbffc07d5a.zip
Use BSSID for network connection if possible
-rw-r--r--plugins/supplicant.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/plugins/supplicant.c b/plugins/supplicant.c
index 66398673..bc75f6cf 100644
--- a/plugins/supplicant.c
+++ b/plugins/supplicant.c
@@ -656,12 +656,12 @@ static int disable_network(struct supplicant_task *task)
static int set_network(struct supplicant_task *task,
const unsigned char *network, int len,
- const char *security, const char *passphrase)
+ const char *address, const char *security,
+ const char *passphrase)
{
DBusMessage *message, *reply;
DBusMessageIter array, dict;
DBusError error;
- const char *scan = "1";
DBG("task %p", task);
@@ -680,11 +680,19 @@ static int set_network(struct supplicant_task *task,
DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING
DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
- connman_dbus_dict_append_variant(&dict, "scan_ssid",
+ if (len > 0 && address == NULL) {
+ const char *scan = "1";
+
+ connman_dbus_dict_append_variant(&dict, "scan_ssid",
DBUS_TYPE_STRING, &scan);
- connman_dbus_dict_append_array(&dict, "ssid",
+ connman_dbus_dict_append_array(&dict, "ssid",
DBUS_TYPE_BYTE, &network, len);
+ }
+
+ if (address != NULL)
+ connman_dbus_dict_append_variant(&dict, "bssid",
+ DBUS_TYPE_STRING, &address);
if (g_ascii_strcasecmp(security, "wpa") == 0 ||
g_ascii_strcasecmp(security, "wpa2") == 0) {
@@ -1385,19 +1393,21 @@ int supplicant_scan(struct connman_device *device)
int supplicant_connect(struct connman_network *network)
{
struct supplicant_task *task;
- const char *security, *passphrase;
+ const char *address, *security, *passphrase;
const void *ssid;
unsigned int ssid_len;
int index;
DBG("network %p", network);
+ address = connman_network_get_string(network, "Address");
security = connman_network_get_string(network, "WiFi.Security");
passphrase = connman_network_get_string(network, "WiFi.Passphrase");
ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len);
- DBG("security %s passphrase %s", security, passphrase);
+ DBG("address %s security %s passphrase %s",
+ address, security, passphrase);
if (security == NULL && passphrase == NULL)
return -EINVAL;
@@ -1418,7 +1428,7 @@ int supplicant_connect(struct connman_network *network)
select_network(task);
disable_network(task);
- set_network(task, ssid, ssid_len, security, passphrase);
+ set_network(task, ssid, ssid_len, address, security, passphrase);
enable_network(task);