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: When BackgroundScanning = false, connman's Scan() dbus
method is broken (Jose Blanquicet)
2. Re: When BackgroundScanning = false, connman's Scan() dbus
method is broken (Jose Blanquicet)
3. [PATCH 1/2] wifi: Fix behaviour when Background scanning is
disabled ([email protected])
4. [PATCH 2/2] doc: Update BackgroundScanning description
([email protected])
5. [PATCH 1/1] client: Add session contextIdentifier config
support ([email protected])
----------------------------------------------------------------------
Message: 1
Date: Mon, 9 Oct 2017 00:27:20 +0200
From: Jose Blanquicet <[email protected]>
To: Jonah Petri <[email protected]>
Cc: Daniel Wagner <[email protected]>, [email protected]
Subject: Re: When BackgroundScanning = false, connman's Scan() dbus
method is broken
Message-ID:
<cafc8ij+pxw3nqchzs++bcooyof2e2x_fkmyostwjho5gqb0...@mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"
Hi Jonah,
On Tue, Oct 3, 2017 at 2:07 AM, Jonah Petri <[email protected]> wrote:
>> On Sep 25, 2017, at 2:58 PM, Jose Blanquicet <[email protected]> wrote:
> I applied the patch, and ran it for some days on a fleet of testing devices.
> As a part of the testing, I rebooted the devices regularly, under various
> wifi conditions, and noted that some of them did not re-associate with the
> wifi network successfully upon reboot.
That's bad! Let's see if that happens again with the second patch I
will send. Just for confirmation, could you please perform the same
tests without the patch and check you successfully re-associate with
the WiFi network at each reboot? We need to be sure whether the patch
is who introduces this issue or not. Thanks!
>> Follow an active scan with only one passive scan in case
>> BackgroundScanning='false' is indeed the best solution. I thought I
>> would be able to find time to work on that solution but it haven't
>> yet, it has not been an ease time. This is the idea I have in mind:
>>
>> Current behaviour with BackgroundScanning='True' is:
>> D-Bus scan request or at start-up of system
>> Launch an active scan
>> 3 seconds -> Launch passive scan
>> 9 seconds -> Launch passive scan
>> 27 seconds -> Launch passive scan
>> 81 seconds -> Launch passive scan
>> 243 seconds -> Launch passive scan
>> 300 seconds -> Launch passive scan
>> 300 seconds -> Launch passive scan
>> ...
>> Continue each 300 seconds unless you perform a new D-Bus scan call
>> which will cause the procedure to restart from 3 seconds.
>>
>> With BackgroundScanning='False' the idea would be:
>> D-Bus scan request or at start-up of system
>> Launch an active scan
>> 3 seconds -> Launch passive scan
>> Stop. No more scanning: 3 seconds would be enough for ConnMan to
>> reconnect to a known service in case there is one of them in range.
>> New D-Bus scan request from user
>> Launch an active scan
>> 3 seconds -> Launch passive scan
>> Stop.
>
> Ah, maybe I have misinterpreted the meaning of BackgroundScanning!
>
> I thought it meant that connman would not issue scans when it was already
> connected to a WiFi network. I had assumed that it would continue to scan
> for the requested WiFi network when not connected. From your description
> above, it seems I was wrong! If that?s the case, I think I really do want
> BackgroundScanning, as networks can be down from time to time, and I would
> want my devices to recover by detecting the configured network when it
> becomes available again, and reconnecting to it.
Yes, I thing you misinterpreted the meaning but don't worry, it is
indeed complex.
Well, if you want ConnMan performs auto-scanning following the
procedure I described above when you are not connected but does not
perform background scanning when you are connected, then keep
BackgroundScanning = true in ConnMan and comment
#CONFIG_BGSCAN_SIMPLE=y in .config of wpa_supplicant SHOULD be enough.
However, take into account that remove CONFIG_BGSCAN_SIMPLE from
wpa_supplicant configuration you are also disabling the WiFi roaming
within a ESS.
Best regards,
Jose Blanquicet
------------------------------
Message: 2
Date: Mon, 9 Oct 2017 00:28:21 +0200
From: Jose Blanquicet <[email protected]>
To: Daniel Wagner <[email protected]>
Cc: Jonah Petri <[email protected]>, [email protected]
Subject: Re: When BackgroundScanning = false, connman's Scan() dbus
method is broken
Message-ID:
<cafc8ijjgz-417_vyjydu+gztvdu0w7ks3+bx_hjjgmm-m8v...@mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"
Hi Daniel,
On Tue, Oct 3, 2017 at 1:28 PM, Daniel Wagner <[email protected]> wrote:
> Hi Jose,
>
> On 10/01/2017 08:13 PM, Jose Blanquicet wrote:
>>
>> I tested the four cases and ConnMan is doing what I described above. I
>> will keep the patch applied in my systems and I would like to ask
>> Daniel to do it too in order to check everything continue working as
>> it should :)
>
>
> Can you resend the patch. I got it white space damaged and with my hand
> editing it didn't get any better :)
Yes, sure!
> Maybe you could also pick up Jonah's doc update too and send it as proper
> patch series.
I agree.
Thanks,
Jose Blanquicet
------------------------------
Message: 3
Date: Mon, 9 Oct 2017 02:33:55 +0200
From: [email protected]
To: [email protected]
Cc: [email protected], [email protected], Jose Blanquicet
<[email protected]>
Subject: [PATCH 1/2] wifi: Fix behaviour when Background scanning is
disabled
Message-ID: <[email protected]>
From: Jose Blanquicet <[email protected]>
Conditions when ConnMan will perform active instead of passive scanning:
1. WiFi Driver support active scanning, it means "MaxScanSSID" is
greater than 1.
2. User has successfully connected to at least one WiFi network in the
past so the service information is present in
{STOREDIR}/connman/wifi_* but none of those networks are currently in
range. They will be called "known-services" from now.
Current behaviour when BackgroundScanning is enabled:
- D-Bus scan request or at start-up of system -> Launch an
active/passive scan (Based on above conditions)
- 3 seconds -> Launch passive scan
- 9 seconds -> Launch passive scan
- ...
- 243 seconds -> Launch passive scan
- 300 seconds -> Launch passive scan
- Continue each 300 seconds unless user performs a new D-Bus scan call
which will cause the procedure to restart from 3 seconds.
This patch does not change the ConnMan's behaviour when
BackgroundScanning is enabled. However, when it is disabled and
conditions for active scanning are true, ConnMan could fall in the
following situation:
- D-Bus scan request or at start-up of system -> Launch an active scan
- Stop scanning
One single scan is done and it is an active one. It means that ConnMan
will perform an active scan looking for those known-services in their
specific frequencies, this kind of scanning is generally faster than a
passive one which allows to speed up auto-connection procedure.
However, we have seen that in case of none of these knwon-services is in
range some drivers reply only with all the networks in the specified
frequencies and some other does not reply any network. This could result
in an always empty services list.
Therefore, this patch looks for avoid such situation by adding a passive
scan in such cases. The new behaviour is also based on the conditions
mentioned at the beginning:
1. Active scanning:
- D-Bus scan request or at start-up of system -> Launch an active scan
- 3 seconds -> Launch passive scan
- Stop scanning
- New D-Bus scan request from user -> Launch an active scan
- 3 seconds -> Launch passive scan
- Stop scanning
2. Passive scanning:
- D-Bus scan request or at start-up of system -> Launch one passive scan
- Stop scanning
- New D-Bus scan request from user -> Launch one passive scan
- Stop scanning
Take into account that all the behaviours described above are followed
when wifi has not get connected. Once it is connected, ConnMan stops its
background scanning procedure and if BackgroundScanning is enabled, it
asks wpa_supplicant to perform the background scanning while connected
only for wifi roaming purposes. See "wpa_supplicant configuration"
section in README file for further details.
---
Hi Jonah,
Could you please test this patch and give us your feedback?
Thanks,
Jose Blanquicet
plugins/wifi.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 93 insertions(+), 16 deletions(-)
diff --git a/plugins/wifi.c b/plugins/wifi.c
index 34c16df..206c05e 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -64,7 +64,8 @@
#define FAVORITE_MAXIMUM_RETRIES 2
#define BGSCAN_DEFAULT "simple:30:-45:300"
-#define AUTOSCAN_DEFAULT "exponential:3:300"
+#define AUTOSCAN_EXPONENTIAL "exponential:3:300"
+#define AUTOSCAN_SINGLE "single:3"
#define P2P_FIND_TIMEOUT 30
#define P2P_CONNECTION_TIMEOUT 100
@@ -83,6 +84,12 @@ enum wifi_ap_capability{
WIFI_AP_NOT_SUPPORTED = 2,
};
+enum wifi_scanning_type {
+ WIFI_SCANNING_UNKNOWN = 0,
+ WIFI_SCANNING_PASSIVE = 1,
+ WIFI_SCANNING_ACTIVE = 2,
+};
+
struct hidden_params {
char ssid[32];
unsigned int ssid_len;
@@ -143,7 +150,7 @@ struct wifi_data {
* autoscan "emulation".
*/
struct autoscan_params *autoscan;
-
+ enum wifi_scanning_type scanning_type;
GSupplicantScanParams *scan_params;
unsigned int p2p_find_timeout;
unsigned int p2p_connection_timeout;
@@ -831,13 +838,13 @@ static void reset_autoscan(struct connman_device *device)
autoscan = wifi->autoscan;
- if (autoscan->timeout == 0 && autoscan->interval == 0)
+ autoscan->interval = 0;
+
+ if (autoscan->timeout == 0)
return;
g_source_remove(autoscan->timeout);
-
autoscan->timeout = 0;
- autoscan->interval = 0;
connman_device_unref(device);
}
@@ -1363,6 +1370,21 @@ static gboolean autoscan_timeout(gpointer data)
throw_wifi_scan(wifi->device, scan_callback_hidden);
+ /*
+ * In case BackgroundScanning is disabled, interval will reach the
+ * limit exactly after the very first passive scanning. It allows
+ * to ensure at most one passive scan is performed in such cases.
+ */
+ if (!connman_setting_get_bool("BackgroundScanning") &&
+ interval == autoscan->limit) {
+ g_source_remove(autoscan->timeout);
+ autoscan->timeout = 0;
+
+ connman_device_unref(device);
+
+ return FALSE;
+ }
+
set_interval:
DBG("interval %d", interval);
@@ -1409,19 +1431,25 @@ static struct autoscan_params
*parse_autoscan_params(const char *params)
int limit;
int base;
- DBG("Emulating autoscan");
+ DBG("");
list_params = g_strsplit(params, ":", 0);
if (list_params == 0)
return NULL;
- if (g_strv_length(list_params) < 3) {
+ if (!g_strcmp0(list_params[0], "exponential") &&
+ g_strv_length(list_params) == 3) {
+ base = atoi(list_params[1]);
+ limit = atoi(list_params[2]);
+ } else if (!g_strcmp0(list_params[0], "single") &&
+ g_strv_length(list_params) == 2)
+ base = limit = atoi(list_params[1]);
+ else {
g_strfreev(list_params);
return NULL;
}
- base = atoi(list_params[1]);
- limit = atoi(list_params[2]);
+ DBG("Setup %s autoscanning", list_params[0]);
g_strfreev(list_params);
@@ -1440,10 +1468,37 @@ static struct autoscan_params
*parse_autoscan_params(const char *params)
static void setup_autoscan(struct wifi_data *wifi)
{
- if (!wifi->autoscan)
- wifi->autoscan = parse_autoscan_params(AUTOSCAN_DEFAULT);
+ /*
+ * If BackgroundScanning is enabled, setup exponential
+ * autoscanning if it has not been previously done.
+ */
+ if (connman_setting_get_bool("BackgroundScanning")) {
+ wifi->autoscan = parse_autoscan_params(AUTOSCAN_EXPONENTIAL);
+ return;
+ }
- start_autoscan(wifi->device);
+ /*
+ * On the contrary, if BackgroundScanning is disabled, update autoscan
+ * parameters based on the type of scanning that is being performed.
+ */
+ if (wifi->autoscan) {
+ g_free(wifi->autoscan);
+ wifi->autoscan = NULL;
+ }
+
+ switch (wifi->scanning_type) {
+ case WIFI_SCANNING_PASSIVE:
+ /* Do not setup autoscan. */
+ break;
+ case WIFI_SCANNING_ACTIVE:
+ /* Setup one single passive scan after active. */
+ wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE);
+ break;
+ case WIFI_SCANNING_UNKNOWN:
+ /* Setup autoscan in this case but we should never fall here. */
+ wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE);
+ break;
+ }
}
static void finalize_interface_creation(struct wifi_data *wifi)
@@ -1457,13 +1512,13 @@ static void finalize_interface_creation(struct
wifi_data *wifi)
connman_device_set_powered(wifi->device, true);
- if (!connman_setting_get_bool("BackgroundScanning"))
- return;
-
if (wifi->p2p_device)
return;
- setup_autoscan(wifi);
+ if (!wifi->autoscan)
+ setup_autoscan(wifi);
+
+ start_autoscan(wifi->device);
}
static void interface_create_callback(int result,
@@ -1691,10 +1746,29 @@ static int get_latest_connections(int max_ssids,
return num_ssids;
}
+static void wifi_update_scanner_type(struct wifi_data *wifi,
+ enum wifi_scanning_type new_type)
+{
+ DBG("");
+
+ if (!wifi || wifi->scanning_type == new_type)
+ return;
+
+ wifi->scanning_type = new_type;
+
+ setup_autoscan(wifi);
+}
+
static int wifi_scan_simple(struct connman_device *device)
{
+ struct wifi_data *wifi = connman_device_get_data(device);
+
reset_autoscan(device);
+ /* Distinguish between devices performing passive and active scanning */
+ if (wifi)
+ wifi_update_scanner_type(wifi, WIFI_SCANNING_PASSIVE);
+
return throw_wifi_scan(device, scan_callback_hidden);
}
@@ -1887,6 +1961,9 @@ static int wifi_scan(enum connman_service_type type,
}
}
+ /* Distinguish between devices performing passive and active scanning */
+ wifi_update_scanner_type(wifi, WIFI_SCANNING_ACTIVE);
+
connman_device_ref(device);
reset_autoscan(device);
--
1.9.1
------------------------------
Message: 4
Date: Mon, 9 Oct 2017 02:33:56 +0200
From: [email protected]
To: [email protected]
Cc: [email protected], [email protected], Jose Blanquicet
<[email protected]>
Subject: [PATCH 2/2] doc: Update BackgroundScanning description
Message-ID: <[email protected]>
From: Jose Blanquicet <[email protected]>
---
doc/connman.conf.5.in | 12 +++++++++---
src/main.conf | 13 +++++++++----
2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/doc/connman.conf.5.in b/doc/connman.conf.5.in
index 95b177f..eee51ef 100644
--- a/doc/connman.conf.5.in
+++ b/doc/connman.conf.5.in
@@ -43,9 +43,15 @@ user interface designs.
.TP
.BI BackgroundScanning=true\ \fR|\fB\ false
Enable background scanning. Default is true.
-Background scanning will start every 5 minutes unless
-the scan list is empty. In that case, a simple backoff
-mechanism starting from 10s up to 5 minutes will run.
+If wifi is disconnected, the background scanning will follow a simple
+backoff mechanism from 3s up to 5 minutes. Then, it will stay in 5
+minutes unless user specifically asks for scanning through a D-Bus
+call. If so, the mechanism will start again from 3s. This feature
+activates also the background scanning while being connected, which
+is required for roaming on wifi.
+When BackgroundScanning is false, ConnMan will not perform any scan
+regardless of wifi is connected or not, unless it is requested by
+the user through a D-Bus call.
.TP
.BI FallbackTimeservers= server\fR[,...]
List of Fallback timeservers separated by ",".
diff --git a/src/main.conf b/src/main.conf
index 68870b2..882e327 100644
--- a/src/main.conf
+++ b/src/main.conf
@@ -14,10 +14,15 @@
# user interface designs.
# BrowserLaunchTimeout = 300
-# Enable background scanning. Default is true.
-# Background scanning will start every 5 minutes unless
-# the scan list is empty. In that case, a simple backoff
-# mechanism starting from 10s up to 5 minutes will run.
+# If wifi is disconnected, the background scanning will follow a simple
+# backoff mechanism from 3s up to 5 minutes. Then, it will stay in 5
+# minutes unless user specifically asks for scanning through a D-Bus
+# call. If so, the mechanism will start again from 3s. This feature
+# activates also the background scanning while being connected, which
+# is required for roaming on wifi.
+# When BackgroundScanning is false, ConnMan will not perform any scan
+# regardless of wifi is connected or not, unless it is requested by
+# the user through a D-Bus call.
# BackgroundScanning = true
# List of Fallback timeservers separated by ",".
--
1.9.1
------------------------------
Message: 5
Date: Mon, 9 Oct 2017 11:08:35 +0530
From: [email protected]
To: [email protected]
Cc: [email protected], Bjoern Thorwirth
<[email protected]>, Mounesh Sutar
<[email protected]>
Subject: [PATCH 1/1] client: Add session contextIdentifier config
support
Message-ID: <[email protected]>
From: Bjoern Thorwirth <[email protected]>
Added contextIdentifier field in session config.
This allows processes to select a service context dependent
behaviour for which the routing decision is made.
Signed-off-by: Mounesh Sutar <[email protected]>
diff --git a/client/commands.c b/client/commands.c
index 583095b..56e098b 100644
--- a/client/commands.c
+++ b/client/commands.c
@@ -901,6 +901,13 @@ struct config_append {
int values;
};
+struct session_options {
+ char **args;
+ int num;
+ char *notify_path;
+ struct connman_option *options;
+};
+
static void config_append_ipv4(DBusMessageIter *iter,
void *user_data)
{
@@ -1796,28 +1803,141 @@ static int session_create_cb(DBusMessageIter *iter,
const char *error,
return -EINPROGRESS;
}
+static void session_config_append_array(DBusMessageIter *iter,
+ void *user_data)
+{
+ struct config_append *append = user_data;
+ char **opts = append->opts;
+ int i = 1;
+
+ if (!opts)
+ return;
+
+ while (opts[i] && strncmp(opts[i], "--", 2) != 0) {
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING,
+ &opts[i]);
+ i++;
+ }
+
+ append->values = i;
+}
+
+static void session_create_append_dict(DBusMessageIter *iter, void *user_data)
+{
+ struct session_options *args_struct = user_data;
+ int index = 0, res = 0;
+ struct config_append append;
+ char c;
+ char *ifname;
+ dbus_bool_t source_ip_rule;
+
+ while (index < args_struct->num && args_struct->args[index]) {
+ append.opts = &args_struct->args[index];
+ append.values = 0;
+
+ c = parse_args(args_struct->args[index], args_struct->options);
+
+ switch (c) {
+ case 'b':
+ __connmanctl_dbus_append_dict_string_array(iter,
"AllowedBearers",
+
session_config_append_array,
+ &append);
+ break;
+ case 't':
+ if (! args_struct->args[index + 1]) {
+ res = -EINVAL;
+ break;
+ }
+ __connmanctl_dbus_append_dict_entry(iter,
"ConnectionType",
+ DBUS_TYPE_STRING,
+
&args_struct->args[index + 1]);
+ append.values = 2;
+ break;
+ case 'i':
+ if (index + 1 < args_struct->num)
+ ifname = args_struct->args[index + 1];
+ else
+ ifname = "";
+ __connmanctl_dbus_append_dict_entry(iter,
"AllowedInterface",
+ DBUS_TYPE_STRING,
+ &ifname);
+ append.values = 2;
+ break;
+ case 's':
+ if (! args_struct->args[index + 1]) {
+ res = -EINVAL;
+ break;
+ }
+ switch (parse_boolean( args_struct->args[index + 1])) {
+ case 1:
+ source_ip_rule = TRUE;
+ break;
+ case 0:
+ source_ip_rule = FALSE;
+ break;
+ default:
+ res = -EINVAL;
+ break;
+ }
+ __connmanctl_dbus_append_dict_entry(iter,
"SourceIPRule",
+ DBUS_TYPE_BOOLEAN,
+ &source_ip_rule);
+ append.values = 2;
+ break;
+ case 'c':
+ if (!args_struct->args[index + 1]) {
+ res = -EINVAL;
+ break;
+ }
+ __connmanctl_dbus_append_dict_entry(iter,
"ContextIdentifier",
+
DBUS_TYPE_STRING,
+
&args_struct->args[index + 1]);
+ append.values = 2;
+ break;
+ default:
+ res = -EINVAL;
+ }
+
+ if (res < 0 && res != -EINPROGRESS) {
+ printf("Error '%s': %s\n", args_struct->args[index],
+ strerror(-res));
+ return;
+ }
+
+ index += append.values;
+ }
+
+ return;
+}
static void session_create_append(DBusMessageIter *iter, void *user_data)
{
- const char *notify_path = user_data;
+ struct session_options *args_struct = user_data;
- __connmanctl_dbus_append_dict(iter, NULL, NULL);
+ __connmanctl_dbus_append_dict(iter, session_create_append_dict,
+ args_struct);
dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH,
- ¬ify_path);
+ &args_struct->notify_path);
}
-static int session_create(gboolean connect)
+static int session_create(gboolean connect, char *args[], int num,
+ struct connman_option *options)
{
int res;
char *notify_path;
+ struct session_options args_struct;
+ args_struct.args = args;
+ args_struct.num = num;
+ args_struct.options = options;
notify_path = g_strdup_printf("/net/connman/connmanctl%d", getpid());
session_notify_add(notify_path);
+ args_struct.notify_path = notify_path;
res = __connmanctl_dbus_method_call(connection, "net.connman", "/",
"net.connman.Manager", "CreateSession",
session_create_cb, GINT_TO_POINTER(connect),
- session_create_append, notify_path);
+ session_create_append, &args_struct);
g_free(notify_path);
@@ -1871,25 +1991,6 @@ static int session_config_return(DBusMessageIter *iter,
const char *error,
return 0;
}
-static void session_config_append_array(DBusMessageIter *iter,
- void *user_data)
-{
- struct config_append *append = user_data;
- char **opts = append->opts;
- int i = 1;
-
- if (!opts)
- return;
-
- while (opts[i] && strncmp(opts[i], "--", 2) != 0) {
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING,
- &opts[i]);
- i++;
- }
-
- append->values = i;
-}
-
static int session_config(char *args[], int num,
struct connman_option *options)
{
@@ -1959,7 +2060,18 @@ static int session_config(char *args[], int num,
DBUS_TYPE_BOOLEAN, &source_ip_rule);
append.values = 2;
break;
+ case 'c':
+ if (!args[index + 1]) {
+ res = -EINVAL;
+ break;
+ }
+ res =
__connmanctl_dbus_session_change(connection,
+ session_path,
session_config_return,
+ "ContextIdentifier",
"ContextIdentifier",
+ DBUS_TYPE_STRING, &args[index +
1]);
+ append.values = 2;
+ break;
default:
res = -EINVAL;
}
@@ -1994,12 +2106,13 @@ static int cmd_session(char *args[], int num, struct
connman_option *options)
case 1:
if (session_path)
return -EALREADY;
- return session_create(FALSE);
+ return session_create(FALSE, &args[2], num - 2, options);
default:
if (!strcmp(command, "connect")) {
if (!session_path)
- return session_create(TRUE);
+ return session_create(TRUE, &args[2], num - 2,
+ options);
return session_connect();
@@ -2248,6 +2361,7 @@ static struct connman_option session_options[] = {
{"type", 't', "local|internet|any"},
{"ifname", 'i', "[<interface_name>]"},
{"srciprule", 's', "yes|no"},
+ {"contextIdentifier", 'c', "Context identifier"},
{ NULL, }
};
--
2.7.4
------------------------------
Subject: Digest Footer
_______________________________________________
connman mailing list
[email protected]
https://lists.01.org/mailman/listinfo/connman
------------------------------
End of connman Digest, Vol 24, Issue 12
***************************************