dbus: Add RemoveAllNetworks to the new D-Bus API
This adds a new command to the interface to remove all configured netblocks. Without this it's necessary to query properties on the interface and explicitly remove each netblock.
This commit is contained in:
parent
bc8397822b
commit
7c49fdd0bd
5 changed files with 73 additions and 0 deletions
|
@ -1730,6 +1730,31 @@ void wpa_config_free(struct wpa_config *config)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wpa_config_foreach_network - Iterate over each configured network
|
||||||
|
* @config: Configuration data from wpa_config_read()
|
||||||
|
* @func: Callback function to process each network
|
||||||
|
* @arg: Opaque argument to pass to callback function
|
||||||
|
*
|
||||||
|
* Iterate over the set of configured networks calling the specified
|
||||||
|
* function for each item. We guard against callbacks removing the
|
||||||
|
* supplied network.
|
||||||
|
*/
|
||||||
|
void wpa_config_foreach_network(struct wpa_config *config,
|
||||||
|
void (*func)(void *, struct wpa_ssid *),
|
||||||
|
void *arg)
|
||||||
|
{
|
||||||
|
struct wpa_ssid *ssid, *next;
|
||||||
|
|
||||||
|
ssid = config->ssid;
|
||||||
|
while (ssid) {
|
||||||
|
next = ssid->next;
|
||||||
|
func(arg, ssid);
|
||||||
|
ssid = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpa_config_get_network - Get configured network based on id
|
* wpa_config_get_network - Get configured network based on id
|
||||||
* @config: Configuration data from wpa_config_read()
|
* @config: Configuration data from wpa_config_read()
|
||||||
|
|
|
@ -410,6 +410,9 @@ struct wpa_config {
|
||||||
|
|
||||||
void wpa_config_free(struct wpa_config *ssid);
|
void wpa_config_free(struct wpa_config *ssid);
|
||||||
void wpa_config_free_ssid(struct wpa_ssid *ssid);
|
void wpa_config_free_ssid(struct wpa_ssid *ssid);
|
||||||
|
void wpa_config_foreach_network(struct wpa_config *config,
|
||||||
|
void (*func)(void *, struct wpa_ssid *),
|
||||||
|
void *arg);
|
||||||
struct wpa_ssid * wpa_config_get_network(struct wpa_config *config, int id);
|
struct wpa_ssid * wpa_config_get_network(struct wpa_config *config, int id);
|
||||||
struct wpa_ssid * wpa_config_add_network(struct wpa_config *config);
|
struct wpa_ssid * wpa_config_add_network(struct wpa_config *config);
|
||||||
int wpa_config_remove_network(struct wpa_config *config, int id);
|
int wpa_config_remove_network(struct wpa_config *config, int id);
|
||||||
|
|
|
@ -1312,6 +1312,12 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = {
|
||||||
END_ARGS
|
END_ARGS
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{ "RemoveAllNetworks", WPAS_DBUS_NEW_IFACE_INTERFACE,
|
||||||
|
(WPADBusMethodHandler) &wpas_dbus_handler_remove_all_networks,
|
||||||
|
{
|
||||||
|
END_ARGS
|
||||||
|
}
|
||||||
|
},
|
||||||
{ "SelectNetwork", WPAS_DBUS_NEW_IFACE_INTERFACE,
|
{ "SelectNetwork", WPAS_DBUS_NEW_IFACE_INTERFACE,
|
||||||
(WPADBusMethodHandler) &wpas_dbus_handler_select_network,
|
(WPADBusMethodHandler) &wpas_dbus_handler_select_network,
|
||||||
{
|
{
|
||||||
|
|
|
@ -1470,6 +1470,42 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void remove_network(void *arg, struct wpa_ssid *ssid)
|
||||||
|
{
|
||||||
|
struct wpa_supplicant *wpa_s = arg;
|
||||||
|
|
||||||
|
wpas_notify_network_removed(wpa_s, ssid);
|
||||||
|
|
||||||
|
if (wpa_config_remove_network(wpa_s->conf, ssid->id) < 0) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"wpas_dbus_handler_remove_all_networks[dbus]: "
|
||||||
|
"error occurred when removing network %d",
|
||||||
|
ssid->id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssid == wpa_s->current_ssid)
|
||||||
|
wpa_supplicant_disassociate(wpa_s, WLAN_REASON_DEAUTH_LEAVING);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wpas_dbus_handler_remove_all_networks - Remove all configured networks
|
||||||
|
* @message: Pointer to incoming dbus message
|
||||||
|
* @wpa_s: wpa_supplicant structure for a network interface
|
||||||
|
* Returns: NULL on success or dbus error on failure
|
||||||
|
*
|
||||||
|
* Handler function for "RemoveAllNetworks" method call of a network interface.
|
||||||
|
*/
|
||||||
|
DBusMessage * wpas_dbus_handler_remove_all_networks(
|
||||||
|
DBusMessage *message, struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
/* NB: could check for failure and return an error */
|
||||||
|
wpa_config_foreach_network(wpa_s->conf, remove_network, wpa_s);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpas_dbus_handler_select_network - Attempt association with a network
|
* wpas_dbus_handler_select_network - Attempt association with a network
|
||||||
* @message: Pointer to incoming dbus message
|
* @message: Pointer to incoming dbus message
|
||||||
|
|
|
@ -83,6 +83,9 @@ DBusMessage * wpas_dbus_handler_add_network(DBusMessage *message,
|
||||||
DBusMessage * wpas_dbus_handler_remove_network(DBusMessage *message,
|
DBusMessage * wpas_dbus_handler_remove_network(DBusMessage *message,
|
||||||
struct wpa_supplicant *wpa_s);
|
struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
|
DBusMessage * wpas_dbus_handler_remove_all_networks(
|
||||||
|
DBusMessage *message, struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
DBusMessage * wpas_dbus_handler_select_network(DBusMessage *message,
|
DBusMessage * wpas_dbus_handler_select_network(DBusMessage *message,
|
||||||
struct wpa_supplicant *wpa_s);
|
struct wpa_supplicant *wpa_s);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue