Send connman mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
https://lists.01.org/mailman/listinfo/connman
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."
Today's Topics:
1. Re: [PATCH] Force simple wifi scan over dbus Scan
(????????? ?????)
----------------------------------------------------------------------
Message: 1
Date: Fri, 16 Nov 2018 23:58:42 -0800
From: ????????? ????? <[email protected]>
To: Vasyl Vavrychuk <[email protected]>
Cc: [email protected], [email protected]
Subject: Re: [PATCH] Force simple wifi scan over dbus Scan
Message-ID:
<CALMby5aETW1DHdEga=aun5ni0vh6jbzr01qvysso14rsn0x...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"
Here is modified patch, changes:
- added enum to device scan function
- changed wifi_scan to fall into ACTIVE scan. Thank you very much Daniel,
it helped me with my other bug.
- renamed functions
PS. There is another patch coming which fixes
gsupplicant/supplicant.c interface_scan_params() not to fail
wpa_supplicant's scan.
=======================================
diff --git a/include/device.h b/include/device.h
index 5a3ddc22..a9ffc7a8 100644
--- a/include/device.h
+++ b/include/device.h
@@ -50,6 +50,17 @@ enum connman_device_type {
#define CONNMAN_DEVICE_PRIORITY_DEFAULT 0
#define CONNMAN_DEVICE_PRIORITY_HIGH 100
+struct scan_parameters {
+ enum connman_service_type type;
+ const char *ssid;
+ unsigned int ssid_len;
+ const char *identity;
+ const char* passphrase;
+ const char *security;
+ bool force_full_scan;
+ void *user_data;
+};
+
struct connman_device;
struct connman_device *connman_device_create(const char *node,
@@ -120,11 +131,8 @@ struct connman_device_driver {
void (*remove) (struct connman_device *device);
int (*enable) (struct connman_device *device);
int (*disable) (struct connman_device *device);
- int (*scan)(enum connman_service_type type,
- struct connman_device *device,
- const char *ssid, unsigned int ssid_len,
- const char *identity, const char* passphrase,
- const char *security, void *user_data);
+ int (*scan)(struct connman_device *device,
+ struct scan_parameters *parameters);
void (*stop_scan) (enum connman_service_type type,
struct connman_device *device);
int (*set_regdom) (struct connman_device *device,
diff --git a/plugins/wifi.c b/plugins/wifi.c
index e437daeb..b702de16 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -1852,11 +1852,8 @@ static int p2p_find(struct connman_device *device)
* Note that the hidden scan is only used when connecting to this specific
* hidden AP first time. It is not used when system autoconnects to hidden
AP.
*/
-static int wifi_scan(enum connman_service_type type,
- struct connman_device *device,
- const char *ssid, unsigned int ssid_len,
- const char *identity, const char* passphrase,
- const char *security, void *user_data)
+static int wifi_scan(struct connman_device *device,
+ struct scan_parameters *parameters)
{
struct wifi_data *wifi = connman_device_get_data(device);
GSupplicantScanParams *scan_params = NULL;
@@ -1876,14 +1873,17 @@ static int wifi_scan(enum connman_service_type type,
if (wifi->tethering)
return -EBUSY;
- if (type == CONNMAN_SERVICE_TYPE_P2P)
+ if (parameters->type == CONNMAN_SERVICE_TYPE_P2P)
return p2p_find(device);
- DBG("device %p wifi %p hidden ssid %s", device, wifi->interface, ssid);
+ DBG("device %p wifi %p hidden ssid %s forced full scan %s", device,
+ wifi->interface, parameters->ssid, parameters->force_full_scan ?
+ "forced" : "normal");
scanning = connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI);
- if (!ssid || ssid_len == 0 || ssid_len > 32) {
+ if (!parameters->ssid || parameters->ssid_len == 0 ||
+ parameters->ssid_len > 32) {
if (scanning)
return -EALREADY;
@@ -1912,8 +1912,8 @@ static int wifi_scan(enum connman_service_type type,
return -ENOMEM;
}
- memcpy(scan_ssid->ssid, ssid, ssid_len);
- scan_ssid->ssid_len = ssid_len;
+ memcpy(scan_ssid->ssid, parameters->ssid, parameters->ssid_len);
+ scan_ssid->ssid_len = parameters->ssid_len;
scan_params->ssids = g_slist_prepend(scan_params->ssids,
scan_ssid);
scan_params->num_ssids = 1;
@@ -1929,12 +1929,12 @@ static int wifi_scan(enum connman_service_type type,
wifi->hidden = NULL;
}
- memcpy(hidden->ssid, ssid, ssid_len);
- hidden->ssid_len = ssid_len;
- hidden->identity = g_strdup(identity);
- hidden->passphrase = g_strdup(passphrase);
- hidden->security = g_strdup(security);
- hidden->user_data = user_data;
+ memcpy(hidden->ssid, parameters->ssid, parameters->ssid_len);
+ hidden->ssid_len = parameters->ssid_len;
+ hidden->identity = g_strdup(parameters->identity);
+ hidden->passphrase = g_strdup(parameters->passphrase);
+ hidden->security = g_strdup(parameters->security);
+ hidden->user_data = parameters->user_data;
wifi->hidden = hidden;
if (scanning) {
@@ -1947,8 +1947,8 @@ static int wifi_scan(enum connman_service_type type,
}
} else if (wifi->connected) {
g_supplicant_free_scan_params(scan_params);
- return wifi_scan_simple(device);
- } else {
+ return wifi_scan_simple(device);
+ } else if (!parameters->force_full_scan) {
ret = get_latest_connections(driver_max_ssids, scan_params);
if (ret <= 0) {
g_supplicant_free_scan_params(scan_params);
diff --git a/src/connman.h b/src/connman.h
index c4190fd0..c29de4b2 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -566,6 +566,7 @@ void __connman_device_list(DBusMessageIter *iter, void
*user_data);
enum connman_service_type __connman_device_get_service_type(struct
connman_device *device);
struct connman_device *__connman_device_find_device(enum
connman_service_type type);
int __connman_device_request_scan(enum connman_service_type type);
+int __connman_device_request_scan_full(enum connman_service_type type);
int __connman_device_request_hidden_scan(struct connman_device *device,
const char *ssid, unsigned int ssid_len,
const char *identity, const char *passphrase,
diff --git a/src/device.c b/src/device.c
index 5d343ae8..6d9a8374 100644
--- a/src/device.c
+++ b/src/device.c
@@ -613,10 +613,14 @@ int connman_device_set_powered(struct connman_device
*device,
for (i = 0; i < MAX_CONNMAN_SERVICE_TYPES; i++)
device->scanning[i] = false;
- if (device->driver && device->driver->scan)
- device->driver->scan(CONNMAN_SERVICE_TYPE_UNKNOWN, device,
- NULL, 0, NULL, NULL, NULL, NULL);
-
+ if (device->driver && device->driver->scan) {
+ struct scan_parameters parameters;
+ memset(¶meters, 0, sizeof(parameters));
+ parameters.type = CONNMAN_SERVICE_TYPE_UNKNOWN;
+ parameters.force_full_scan = false;
+
+ device->driver->scan(device, ¶meters);
+ }
return 0;
}
@@ -626,7 +630,8 @@ bool connman_device_get_powered(struct connman_device
*device)
}
static int device_scan(enum connman_service_type type,
- struct connman_device *device)
+ struct connman_device *device,
+ bool force_full_scan)
{
if (!device->driver || !device->driver->scan)
return -EOPNOTSUPP;
@@ -634,8 +639,12 @@ static int device_scan(enum connman_service_type type,
if (!device->powered)
return -ENOLINK;
- return device->driver->scan(type, device, NULL, 0,
- NULL, NULL, NULL, NULL);
+ struct scan_parameters parameters;
+ memset(¶meters, 0, sizeof(parameters));
+ parameters.type = type;
+ parameters.force_full_scan = force_full_scan;
+
+ return device->driver->scan(device, ¶meters);
}
int __connman_device_disconnect(struct connman_device *device)
@@ -1080,7 +1089,8 @@ void connman_device_regdom_notify(struct
connman_device *device,
__connman_technology_notify_regdom_by_device(device, result, alpha2);
}
-int __connman_device_request_scan(enum connman_service_type type)
+static int connman_device_request_scan(enum connman_service_type type,
+ bool force_full_scan)
{
bool success = false;
int last_err = -ENOSYS;
@@ -1108,7 +1118,7 @@ int __connman_device_request_scan(enum
connman_service_type type)
if (!device_has_service_type(device, type))
continue;
- err = device_scan(type, device);
+ err = device_scan(type, device, force_full_scan);
if (err == 0 || err == -EALREADY || err == -EINPROGRESS) {
success = true;
} else {
@@ -1123,6 +1133,16 @@ int __connman_device_request_scan(enum
connman_service_type type)
return last_err;
}
+int __connman_device_request_scan(enum connman_service_type type)
+{
+ return connman_device_request_scan(type, false);
+}
+
+int __connman_device_request_scan_full(enum connman_service_type type)
+{
+ return connman_device_request_scan(type, true);
+}
+
int __connman_device_request_hidden_scan(struct connman_device *device,
const char *ssid, unsigned int ssid_len,
const char *identity, const char *passphrase,
@@ -1134,9 +1154,17 @@ int __connman_device_request_hidden_scan(struct
connman_device *device,
!device->driver->scan)
return -EINVAL;
- return device->driver->scan(CONNMAN_SERVICE_TYPE_UNKNOWN,
- device, ssid, ssid_len, identity,
- passphrase, security, user_data);
+ struct scan_parameters parameters;
+ parameters.type = CONNMAN_SERVICE_TYPE_UNKNOWN;
+ parameters.ssid = ssid;
+ parameters.ssid_len = ssid_len;
+ parameters.identity = identity;
+ parameters.passphrase = passphrase;
+ parameters.security = security;
+ parameters.user_data = user_data;
+ parameters.force_full_scan = false;
+
+ return device->driver->scan(device, ¶meters);
}
void __connman_device_stop_scan(enum connman_service_type type)
diff --git a/src/technology.c b/src/technology.c
index 78550f48..4e053fc9 100644
--- a/src/technology.c
+++ b/src/technology.c
@@ -1087,7 +1087,7 @@ static DBusMessage *scan(DBusConnection *conn,
DBusMessage *msg, void *data)
technology->scan_pending =
g_slist_prepend(technology->scan_pending, msg);
- err = __connman_device_request_scan(technology->type);
+ err = __connman_device_request_scan_full(technology->type);
if (err < 0)
reply_scan_pending(technology, err);
On Fri, Nov 16, 2018 at 12:19 AM Vasyl Vavrychuk <
[email protected]> wrote:
> > > diff --git a/plugins/wifi.c b/plugins/wifi.c
> > > index dc08c6af..ef73e843 100644
> > > --- a/plugins/wifi.c
> > > +++ b/plugins/wifi.c
> > > @@ -1861,7 +1861,8 @@ static int wifi_scan(enum connman_service_type
> type,
> > > struct connman_device *device,
> > > const char *ssid, unsigned int ssid_len,
> > > const char *identity, const char* passphrase,
> > > - const char *security, void *user_data)
> > > + const char *security, bool force_full_scan,
> > > + void *user_data)
> >
> > I am not partucilar fan of adding a bool for this, because it is already
> > hard to figure out which parameters is what. Adding a bool makes it even
> > harder. Why not defining a enum for the forced scan?
>
> How about putting ssid, ssid_len, identity, passphrase, security and
> force_full_scan into scan_params structure?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.01.org/pipermail/connman/attachments/20181116/90a40b6f/attachment.html>
------------------------------
Subject: Digest Footer
_______________________________________________
connman mailing list
[email protected]
https://lists.01.org/mailman/listinfo/connman
------------------------------
End of connman Digest, Vol 37, Issue 8
**************************************