hostapd: add ubus bindings for wps
authorFelix Fietkau <nbd@openwrt.org>
Wed, 10 Sep 2014 13:01:53 +0000 (13:01 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 10 Sep 2014 13:01:53 +0000 (13:01 +0000)
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

package/network/services/hostapd/patches/600-ubus_support.patch

index 96a91db664dc4925b7609343cffa0f74574c6b22..e57c01f749f0184c35c0c0b4a6979936a93027ce 100644 (file)
@@ -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"
 +
 +      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 =
        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) {
                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");