/** * wpas_dbus_global_remove_interface - Request deregistration of an interface * @message: Pointer to incoming dbus message * @global: wpa_supplicant global data structure * Returns: a dbus message containing a UINT32 indicating success (1) or * failure (0), or returns a dbus error message with more information * * Handler function for "removeInterface" method call. Handles requests * by dbus clients to deregister a network interface that wpa_supplicant * currently manages. */ DBusMessage * wpas_dbus_global_remove_interface(DBusMessage *message, struct wpa_global *global) { struct wpa_supplicant *wpa_s; char *path; DBusMessage *reply = NULL; if (!dbus_message_get_args(message, NULL, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { reply = wpas_dbus_new_invalid_opts_error(message, NULL); goto out; } wpa_s = wpa_supplicant_get_iface_by_dbus_path(global, path); if (wpa_s == NULL) { reply = wpas_dbus_new_invalid_iface_error(message); goto out; } if (!wpa_supplicant_remove_iface(global, wpa_s, 0)) { reply = wpas_dbus_new_success_reply(message); } else { reply = dbus_message_new_error(message, WPAS_ERROR_REMOVE_ERROR, "wpa_supplicant couldn't " "remove this interface."); } out: return reply; }
static int wpa_supplicant_global_iface_remove(struct wpa_global *global, char *cmd) { struct wpa_supplicant *wpa_s; wpa_printf(MSG_DEBUG, "CTRL_IFACE GLOBAL INTERFACE_REMOVE '%s'", cmd); wpa_s = wpa_supplicant_get_iface(global, cmd); if (wpa_s == NULL) return -1; return wpa_supplicant_remove_iface(global, wpa_s); }
status_t WPASupplicantApp::_LeaveNetwork(BMessage *message) { const char *interfaceName = NULL; status_t status = message->FindString("device", &interfaceName); if (status != B_OK) return status; wpa_supplicant *interface = wpa_supplicant_get_iface(fWPAGlobal, interfaceName); if (interface == NULL) return B_ENTRY_NOT_FOUND; if (wpa_supplicant_remove_iface(fWPAGlobal, interface, 0) != 0) return B_ERROR; return B_OK; }
int wpas_mesh_add_interface(struct wpa_supplicant *wpa_s, char *ifname, size_t len) { struct wpa_interface iface; struct wpa_supplicant *mesh_wpa_s; u8 addr[ETH_ALEN]; if (ifname[0] == '\0' && wpas_mesh_get_ifname(wpa_s, ifname, len) < 0) return -1; if (wpa_drv_if_add(wpa_s, WPA_IF_MESH, ifname, NULL, NULL, NULL, addr, NULL) < 0) { wpa_printf(MSG_ERROR, "mesh: Failed to create new mesh interface"); return -1; } wpa_printf(MSG_INFO, "mesh: Created virtual interface %s addr " MACSTR, ifname, MAC2STR(addr)); os_memset(&iface, 0, sizeof(iface)); iface.ifname = ifname; iface.driver = wpa_s->driver->name; iface.driver_param = wpa_s->conf->driver_param; iface.ctrl_interface = wpa_s->conf->ctrl_interface; mesh_wpa_s = wpa_supplicant_add_iface(wpa_s->global, &iface); if (!mesh_wpa_s) { wpa_printf(MSG_ERROR, "mesh: Failed to create new wpa_supplicant interface"); wpa_supplicant_remove_iface(wpa_s->global, wpa_s, 0); return -1; } mesh_wpa_s->mesh_if_created = 1; mesh_wpa_s->parent = wpa_s; return 0; }