Send connman mailing list submissions to
[email protected]
To subscribe or unsubscribe 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. [PATCH v3 5/6] network: Add __connman_network_native_autoconnect()
(Daniel Wagner)
2. [PATCH v3 6/6] service: Teach autoconnect algorithm native mode
(Daniel Wagner)
3. Re: [PATCH v3 0/6] Teach autoconnect algorithm native mode
(Denis Kenzior)
----------------------------------------------------------------------
Date: Mon, 12 Apr 2021 21:58:44 +0200
From: Daniel Wagner <[email protected]>
Subject: [PATCH v3 5/6] network: Add
__connman_network_native_autoconnect()
To: [email protected]
Cc: KeithG <[email protected]>, Daniel Wagner <[email protected]>
Message-ID: <[email protected]>
This function allows to query if the network/transport supports native
autoconnect such as iwd.
---
src/connman.h | 1 +
src/network.c | 7 +++++++
2 files changed, 8 insertions(+)
diff --git a/src/connman.h b/src/connman.h
index 35dae6223a50..c70999c5fbd2 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -616,6 +616,7 @@ const char *__connman_network_get_type(struct
connman_network *network);
const char *__connman_network_get_group(struct connman_network *network);
const char *__connman_network_get_ident(struct connman_network *network);
bool __connman_network_get_weakness(struct connman_network *network);
+bool __connman_network_native_autoconnect(struct connman_network *network);
int __connman_config_init();
void __connman_config_cleanup(void);
diff --git a/src/network.c b/src/network.c
index 256e3b5f1c12..b12bbc091b0c 100644
--- a/src/network.c
+++ b/src/network.c
@@ -2120,6 +2120,13 @@ int connman_network_set_autoconnect(struct
connman_network *network,
return network->driver->set_autoconnect(network, autoconnect);
}
+bool __connman_network_native_autoconnect(struct connman_network *network)
+{
+ if (!network->driver || !network->driver->set_autoconnect)
+ return false;
+ return true;
+}
+
uint16_t connman_network_get_wifi_channel(struct connman_network *network)
{
return network->wifi.channel;
--
2.31.1
------------------------------
Date: Mon, 12 Apr 2021 21:58:45 +0200
From: Daniel Wagner <[email protected]>
Subject: [PATCH v3 6/6] service: Teach autoconnect algorithm native
mode
To: [email protected]
Cc: KeithG <[email protected]>, Daniel Wagner <[email protected]>
Message-ID: <[email protected]>
When network supports native autoconnnect skip the internal
autoconnect algorithm for this network. Introduce for this a new
CONNMAN_SERVICE_CONNECT_REASON_NATIVE and track the service connection
reason.
---
include/service.h | 1 +
src/service.c | 84 +++++++++++++++++++++++++++++++----------------
2 files changed, 56 insertions(+), 29 deletions(-)
diff --git a/include/service.h b/include/service.h
index 4a129b49315e..8f6b36b486c0 100644
--- a/include/service.h
+++ b/include/service.h
@@ -94,6 +94,7 @@ enum connman_service_connect_reason {
CONNMAN_SERVICE_CONNECT_REASON_AUTO = 1,
CONNMAN_SERVICE_CONNECT_REASON_USER = 2,
CONNMAN_SERVICE_CONNECT_REASON_SESSION = 3,
+ CONNMAN_SERVICE_CONNECT_REASON_NATIVE = 4,
};
struct connman_service;
diff --git a/src/service.c b/src/service.c
index 5bb7f12594ce..a16350c65ddc 100644
--- a/src/service.c
+++ b/src/service.c
@@ -195,6 +195,8 @@ static const char *reason2string(enum
connman_service_connect_reason reason)
return "auto";
case CONNMAN_SERVICE_CONNECT_REASON_SESSION:
return "session";
+ case CONNMAN_SERVICE_CONNECT_REASON_NATIVE:
+ return "native";
}
return "unknown";
@@ -3490,6 +3492,13 @@ static void do_auto_connect(struct connman_service
*service,
service->type == CONNMAN_SERVICE_TYPE_WIFI))
return;
+ /*
+ * Do not use the builtin auto connect, instead rely on the
+ * native auto connect feature of the service.
+ */
+ if (service->connect_reason == CONNMAN_SERVICE_CONNECT_REASON_NATIVE)
+ return;
+
/*
* Run service auto connect for other than VPN services. Afterwards
* start also VPN auto connect process.
@@ -4215,6 +4224,12 @@ static bool auto_connect_service(GList *services,
continue;
}
+ if (service->connect_reason ==
+ CONNMAN_SERVICE_CONNECT_REASON_NATIVE) {
+ DBG("service %p uses native autonnect, skip", service);
+ continue;
+ }
+
if (service->pending ||
is_connecting(service->state) ||
is_connected(service->state)) {
@@ -6712,6 +6727,12 @@ int __connman_service_connect(struct connman_service
*service,
__connman_service_clear_error(service);
+ if (__connman_network_native_autoconnect(service->network) &&
+ service->autoconnect) {
+ DBG("service %p switch connecting reason to native", service);
+ reason = CONNMAN_SERVICE_CONNECT_REASON_NATIVE;
+ }
+
err = service_connect(service);
DBG("service %p err %d", service, err);
@@ -7340,39 +7361,44 @@ static void update_from_network(struct connman_service
*service,
static void trigger_autoconnect(struct connman_service *service)
{
struct connman_device *device;
+ bool native;
- connman_network_set_autoconnect(service->network,
- service->favorite && service->autoconnect);
- if (service->favorite) {
- device = connman_network_get_device(service->network);
- if (device && !connman_device_get_scanning(device,
- CONNMAN_SERVICE_TYPE_UNKNOWN)) {
-
- switch (service->type) {
- case CONNMAN_SERVICE_TYPE_UNKNOWN:
- case CONNMAN_SERVICE_TYPE_SYSTEM:
- case CONNMAN_SERVICE_TYPE_P2P:
- break;
+ if (!service->favorite)
+ return;
- case CONNMAN_SERVICE_TYPE_GADGET:
- case CONNMAN_SERVICE_TYPE_ETHERNET:
- if (service->autoconnect) {
- __connman_service_connect(service,
-
CONNMAN_SERVICE_CONNECT_REASON_AUTO);
- break;
- }
+ native = __connman_network_native_autoconnect(service->network);
+ if (native && service->autoconnect) {
+ DBG("trigger native autoconnect");
+ connman_network_set_autoconnect(service->network, true);
+ return;
+ }
- /* fall through */
- case CONNMAN_SERVICE_TYPE_BLUETOOTH:
- case CONNMAN_SERVICE_TYPE_GPS:
- case CONNMAN_SERVICE_TYPE_VPN:
- case CONNMAN_SERVICE_TYPE_WIFI:
- case CONNMAN_SERVICE_TYPE_CELLULAR:
- do_auto_connect(service,
- CONNMAN_SERVICE_CONNECT_REASON_AUTO);
- break;
- }
+ device = connman_network_get_device(service->network);
+ if (device && connman_device_get_scanning(device,
CONNMAN_SERVICE_TYPE_UNKNOWN))
+ return;
+
+ switch (service->type) {
+ case CONNMAN_SERVICE_TYPE_UNKNOWN:
+ case CONNMAN_SERVICE_TYPE_SYSTEM:
+ case CONNMAN_SERVICE_TYPE_P2P:
+ break;
+
+ case CONNMAN_SERVICE_TYPE_GADGET:
+ case CONNMAN_SERVICE_TYPE_ETHERNET:
+ if (service->autoconnect) {
+ __connman_service_connect(service,
+
CONNMAN_SERVICE_CONNECT_REASON_AUTO);
+ break;
}
+
+ /* fall through */
+ case CONNMAN_SERVICE_TYPE_BLUETOOTH:
+ case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_WIFI:
+ case CONNMAN_SERVICE_TYPE_CELLULAR:
+ do_auto_connect(service, CONNMAN_SERVICE_CONNECT_REASON_AUTO);
+ break;
}
}
--
2.31.1
------------------------------
Date: Mon, 12 Apr 2021 15:18:33 -0500
From: Denis Kenzior <[email protected]>
Subject: Re: [PATCH v3 0/6] Teach autoconnect algorithm native mode
To: Daniel Wagner <[email protected]>, [email protected]
Cc: KeithG <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8; format=flowed
Hi Daniel,
On 4/12/21 2:58 PM, Daniel Wagner wrote:
> I saw some corner case with iwd's autoconnect algorithm. For example
> there are two network net0 and net1. Both have autoconnect set. iwd
> connects to net0. Then net0 dissapears and iwd chooses to connect
> net1. Now user decides to disconnect from net1. After that net0
> appears again, iwd doesn't auto connect to it anymore.
What do you mean by disconnect here btw?
Regards,
-Denis
------------------------------
Subject: Digest Footer
_______________________________________________
connman mailing list -- [email protected]
To unsubscribe send an email to [email protected]
------------------------------
End of connman Digest, Vol 66, Issue 24
***************************************