diff options
author | Emmanuel VAUTRIN <Emmanuel.VAUTRIN@cpexterne.org> | 2022-02-25 15:47:22 +0100 |
---|---|---|
committer | Daniel Wagner <wagi@monom.org> | 2022-03-04 09:57:27 +0100 |
commit | 6cc7fb19a4e278b1d8965d1da8833c49c858aa9e (patch) | |
tree | aa0b2d569b2008f115282ae14d321c6440fccf39 /plugins | |
parent | 9ccb7d32f118319f9069c4e6882ae92435d6a270 (diff) | |
download | connman-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.c | 41 |
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, }; |