hostapd: add ubus bindings for wps
With this patch WPS discovery can be started or canceled over ubus if WPS is enabled in wireless configuration. This is equivalent of 'hostapd_cli wps_pbc' and 'hostapd_cli wps_cancel' commands. Signed-off-by: Petar Koretic <petar.koretic@sartura.hr> SVN-Revision: 42459
This commit is contained in:
		@@ -41,7 +41,7 @@
 | 
			
		||||
 		HAPD_IFACE_DISABLED,
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ b/src/ap/ubus.c
 | 
			
		||||
@@ -0,0 +1,373 @@
 | 
			
		||||
@@ -0,0 +1,408 @@
 | 
			
		||||
+/*
 | 
			
		||||
+ * hostapd / ubus support
 | 
			
		||||
+ * Copyright (c) 2013, Felix Fietkau <nbd@openwrt.org>
 | 
			
		||||
@@ -55,6 +55,7 @@
 | 
			
		||||
+#include "utils/eloop.h"
 | 
			
		||||
+#include "common/ieee802_11_defs.h"
 | 
			
		||||
+#include "hostapd.h"
 | 
			
		||||
+#include "wps_hostapd.h"
 | 
			
		||||
+#include "sta_info.h"
 | 
			
		||||
+#include "ubus.h"
 | 
			
		||||
+
 | 
			
		||||
@@ -304,10 +305,44 @@
 | 
			
		||||
+	return 0;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static int
 | 
			
		||||
+hostapd_bss_wps_start(struct ubus_context *ctx, struct ubus_object *obj,
 | 
			
		||||
+			struct ubus_request_data *req, const char *method,
 | 
			
		||||
+			struct blob_attr *msg)
 | 
			
		||||
+{
 | 
			
		||||
+	int rc;
 | 
			
		||||
+	struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
 | 
			
		||||
+
 | 
			
		||||
+	rc = hostapd_wps_button_pushed(hapd, NULL);
 | 
			
		||||
+
 | 
			
		||||
+	if (rc != 0)
 | 
			
		||||
+		return UBUS_STATUS_NOT_SUPPORTED;
 | 
			
		||||
+
 | 
			
		||||
+	return 0;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static int
 | 
			
		||||
+hostapd_bss_wps_cancel(struct ubus_context *ctx, struct ubus_object *obj,
 | 
			
		||||
+			struct ubus_request_data *req, const char *method,
 | 
			
		||||
+			struct blob_attr *msg)
 | 
			
		||||
+{
 | 
			
		||||
+	int rc;
 | 
			
		||||
+	struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
 | 
			
		||||
+
 | 
			
		||||
+	rc = hostapd_wps_cancel(hapd);
 | 
			
		||||
+
 | 
			
		||||
+	if (rc != 0)
 | 
			
		||||
+		return UBUS_STATUS_NOT_SUPPORTED;
 | 
			
		||||
+
 | 
			
		||||
+	return 0;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static const struct ubus_method bss_methods[] = {
 | 
			
		||||
+	UBUS_METHOD_NOARG("get_clients", hostapd_bss_get_clients),
 | 
			
		||||
+	UBUS_METHOD("del_client", hostapd_bss_del_client, del_policy),
 | 
			
		||||
+	UBUS_METHOD_NOARG("list_bans", hostapd_bss_list_bans),
 | 
			
		||||
+	UBUS_METHOD_NOARG("wps_start", hostapd_bss_wps_start),
 | 
			
		||||
+	UBUS_METHOD_NOARG("wps_cancel", hostapd_bss_wps_cancel),
 | 
			
		||||
+};
 | 
			
		||||
+
 | 
			
		||||
+static struct ubus_object_type bss_object_type =
 | 
			
		||||
@@ -612,7 +647,7 @@
 | 
			
		||||
 	sta->capability = capab_info;
 | 
			
		||||
 	sta->listen_interval = listen_interval;
 | 
			
		||||
 
 | 
			
		||||
@@ -1765,7 +1791,7 @@ int ieee802_11_mgmt(struct hostapd_data 
 | 
			
		||||
@@ -1765,7 +1791,7 @@ int ieee802_11_mgmt(struct hostapd_data
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 	if (stype == WLAN_FC_STYPE_PROBE_REQ) {
 | 
			
		||||
@@ -621,7 +656,7 @@
 | 
			
		||||
 		return 1;
 | 
			
		||||
 	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1780,17 +1806,17 @@ int ieee802_11_mgmt(struct hostapd_data 
 | 
			
		||||
@@ -1780,17 +1806,17 @@ int ieee802_11_mgmt(struct hostapd_data
 | 
			
		||||
 	switch (stype) {
 | 
			
		||||
 	case WLAN_FC_STYPE_AUTH:
 | 
			
		||||
 		wpa_printf(MSG_DEBUG, "mgmt::auth");
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user