summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorEmmanuel VAUTRIN <Emmanuel.VAUTRIN@cpexterne.org>2022-02-25 15:47:22 +0100
committerDaniel Wagner <wagi@monom.org>2022-03-04 09:57:27 +0100
commit6cc7fb19a4e278b1d8965d1da8833c49c858aa9e (patch)
treeaa0b2d569b2008f115282ae14d321c6440fccf39 /plugins
parent9ccb7d32f118319f9069c4e6882ae92435d6a270 (diff)
downloadconnman-6cc7fb19a4e278b1d8965d1da8833c49c858aa9e.tar.gz
iwd: Forget network on service removal
When a service is manually removed, the associated network, at driver side, needs to be forgotten, to remove the corresponding known network.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/iwd.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/plugins/iwd.c b/plugins/iwd.c
index 7b59a6eb..ee3ed83e 100644
--- a/plugins/iwd.c
+++ b/plugins/iwd.c
@@ -270,6 +270,46 @@ static int cm_network_connect(struct connman_network *network)
return -EINPROGRESS;
}
+static void cm_network_forget_cb(DBusMessage *message, void *user_data)
+{
+ struct iwd_known_network *iwdkn;
+ const char *path = user_data;
+
+ iwdkn = g_hash_table_lookup(known_networks, path);
+ if (!iwdkn)
+ return;
+
+ if (dbus_message_get_type(message) == DBUS_MESSAGE_TYPE_ERROR) {
+ const char *dbus_error = dbus_message_get_error_name(message);
+
+ DBG("%s failed: %s", path, dbus_error);
+ }
+}
+
+static int cm_network_forget(struct connman_network *network)
+{
+ struct iwd_network *iwdn = connman_network_get_data(network);
+ struct iwd_known_network *iwdkn;
+
+ if (!iwdn)
+ return -EINVAL;
+
+ if (!iwdn->known_network)
+ return 0;
+
+ iwdkn = g_hash_table_lookup(known_networks,
+ iwdn->known_network);
+ if (!iwdkn)
+ return 0;
+
+ if (!g_dbus_proxy_method_call(iwdkn->proxy, "Forget",
+ NULL, cm_network_forget_cb,
+ g_strdup(iwdkn->path), g_free))
+ return -EIO;
+
+ return 0;
+}
+
static void cm_network_disconnect_cb(DBusMessage *message, void *user_data)
{
const char *path = user_data;
@@ -470,6 +510,7 @@ static struct connman_network_driver network_driver = {
.probe = cm_network_probe,
.connect = cm_network_connect,
.disconnect = cm_network_disconnect,
+ .forget = cm_network_forget,
.set_autoconnect = cm_network_set_autoconnect,
};