hostapd: update packaging and patches
authorDaniel Golle <daniel@makrotopia.org>
Wed, 30 May 2018 22:10:49 +0000 (00:10 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 18 Dec 2018 08:05:58 +0000 (09:05 +0100)
Clean up conflicts/provides/depends hell and add PROVIDES for
eapol-test variants while at it.
Update mesh-DFS patchset from Peter Oh to v5 (with local fixes) which
allows to drop two revert-patches for upstream commits which previously
were necessary to un-break mesh-DFS support.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(backported from 78f1974bc565d7544589a49ad8efd92c4ddec5b3)
(rebased patches)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
35 files changed:
package/network/services/hostapd/Config.in
package/network/services/hostapd/Makefile
package/network/services/hostapd/patches/0001-Revert-wpa_supplicant-Increase-authentication-timeou.patch [deleted file]
package/network/services/hostapd/patches/0002-Revert-wpa_supplicant-Rename-wpas_event_-to-wpas_ap_.patch [deleted file]
package/network/services/hostapd/patches/001-mesh-factor-out-mesh-join-function.patch
package/network/services/hostapd/patches/002-mesh-factor-out-rsn-initialization.patch
package/network/services/hostapd/patches/003-mesh-relocate-RSN-init-function.patch
package/network/services/hostapd/patches/004-mesh-use-setup-completion-callback-to-complete-mesh-.patch
package/network/services/hostapd/patches/005-mesh-reflect-country-setting-to-mesh-configuration.patch
package/network/services/hostapd/patches/006-mesh-inform-kernel-driver-DFS-handler-in-userspace.patch
package/network/services/hostapd/patches/007-mesh-apply-channel-attributes-before-running-Mesh.patch
package/network/services/hostapd/patches/008-mesh-set-interface-type-to-mesh-before-setting-inter.patch
package/network/services/hostapd/patches/009-mesh-set-mesh-center-frequency.patch
package/network/services/hostapd/patches/010-mesh-consider-mesh-interface-on-dfs-event-handler.patch
package/network/services/hostapd/patches/011-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch
package/network/services/hostapd/patches/012-mesh-allow-mesh-to-send-channel-switch-request.patch
package/network/services/hostapd/patches/013-mesh-do-not-allow-pri-sec-channel-switch.patch
package/network/services/hostapd/patches/014-mesh-do-not-allow-scan-result-to-swap-pri-sec.patch
package/network/services/hostapd/patches/015-mesh-do-not-use-offchan-mgmt-tx-on-DFS.patch
package/network/services/hostapd/patches/016-mesh-fix-channel-switch-error-during-CAC.patch [new file with mode: 0644]
package/network/services/hostapd/patches/016-mesh-make-forwarding-configurable.patch [deleted file]
package/network/services/hostapd/patches/017-mesh-use-right-interface-context-to-send-DFS-event-m.patch [new file with mode: 0644]
package/network/services/hostapd/patches/018-mesh-make-forwarding-configurable.patch [new file with mode: 0644]
package/network/services/hostapd/patches/022-mesh-fix-crash-with-CONFIG_TAXONOMY-enabled.patch
package/network/services/hostapd/patches/031-mesh-add-VHT_CHANWIDTH_USE_HT-to-max_oper_chwidth.patch
package/network/services/hostapd/patches/032-mesh-implement-use-of-VHT20-config-in-mesh-mode.patch
package/network/services/hostapd/patches/110-no_eapol_fix.patch
package/network/services/hostapd/patches/200-multicall.patch
package/network/services/hostapd/patches/301-mesh-noscan.patch
package/network/services/hostapd/patches/310-rescan_immediately.patch
package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch
package/network/services/hostapd/patches/370-ap_sta_support.patch
package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch
package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch

index 3568d9add3cdf711454c1ed645396c864d746678..222cfb7f131ba996eb3ae9536d54f13005ffc1ba 100644 (file)
@@ -4,8 +4,10 @@ config WPA_SUPPLICANT_NO_TIMESTAMP_CHECK
        depends on PACKAGE_wpa-supplicant || \
                   PACKAGE_wpa-supplicant-openssl || \
                   PACKAGE_wpa-supplicant-wolfssl || \
        depends on PACKAGE_wpa-supplicant || \
                   PACKAGE_wpa-supplicant-openssl || \
                   PACKAGE_wpa-supplicant-wolfssl || \
-                  PACKAGE_wpa-supplicant-mesh || \
+                  PACKAGE_wpa-supplicant-mesh-openssl || \
+                  PACKAGE_wpa-supplicant-mesh-wolfssl || \
                   PACKAGE_wpa-supplicant-mini || \
                   PACKAGE_wpa-supplicant-mini || \
+                  PACKAGE_wpa-supplicant-p2p || \
                   PACKAGE_wpad || \
                   PACKAGE_wpad-openssl || \
                   PACKAGE_wpad-wolfssl || \
                   PACKAGE_wpad || \
                   PACKAGE_wpad-openssl || \
                   PACKAGE_wpad-wolfssl || \
@@ -22,8 +24,10 @@ config WPA_RFKILL_SUPPORT
        depends on PACKAGE_wpa-supplicant || \
                   PACKAGE_wpa-supplicant-openssl || \
                   PACKAGE_wpa-supplicant-wolfssl || \
        depends on PACKAGE_wpa-supplicant || \
                   PACKAGE_wpa-supplicant-openssl || \
                   PACKAGE_wpa-supplicant-wolfssl || \
-                  PACKAGE_wpa-supplicant-mesh || \
+                  PACKAGE_wpa-supplicant-mesh-openssl || \
+                  PACKAGE_wpa-supplicant-mesh-wolfssl || \
                   PACKAGE_wpa-supplicant-mini || \
                   PACKAGE_wpa-supplicant-mini || \
+                  PACKAGE_wpa-supplicant-p2p || \
                   PACKAGE_wpad || \
                   PACKAGE_wpad-openssl || \
                   PACKAGE_wpad-wolfssl || \
                   PACKAGE_wpad || \
                   PACKAGE_wpad-openssl || \
                   PACKAGE_wpad-wolfssl || \
@@ -37,8 +41,10 @@ config WPA_MSG_MIN_PRIORITY
        depends on PACKAGE_wpa-supplicant || \
                   PACKAGE_wpa-supplicant-openssl || \
                   PACKAGE_wpa-supplicant-wolfssl || \
        depends on PACKAGE_wpa-supplicant || \
                   PACKAGE_wpa-supplicant-openssl || \
                   PACKAGE_wpa-supplicant-wolfssl || \
-                  PACKAGE_wpa-supplicant-mesh || \
+                  PACKAGE_wpa-supplicant-mesh-openssl || \
+                  PACKAGE_wpa-supplicant-mesh-wolfssl || \
                   PACKAGE_wpa-supplicant-mini || \
                   PACKAGE_wpa-supplicant-mini || \
+                  PACKAGE_wpa-supplicant-p2p || \
                   PACKAGE_wpad || \
                   PACKAGE_wpad-openssl || \
                   PACKAGE_wpad-wolfssl || \
                   PACKAGE_wpad || \
                   PACKAGE_wpad-openssl || \
                   PACKAGE_wpad-wolfssl || \
index 45d1883e95b33602c85b43275d79f296cfd9a975..56d064c73b5036b951d52e04393912831be7e02a 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hostapd
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=hostapd
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE_URL:=http://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
 
 PKG_SOURCE_URL:=http://w1.fi/hostap.git
 PKG_SOURCE_PROTO:=git
@@ -32,6 +32,23 @@ PKG_CONFIG_DEPENDS:= \
        CONFIG_DRIVER_11N_SUPPORT \
        CONFIG_DRIVER_11AC_SUPPORT \
 
        CONFIG_DRIVER_11N_SUPPORT \
        CONFIG_DRIVER_11AC_SUPPORT \
 
+WPAD_PROVIDERS:=wpad-mini wpad wpad-openssl wpad-wolfssl \
+               wpad-mesh-openssl wpad-mesh-wolfssl
+
+SUPPLICANT_ONLY_PROVIDERS:=wpa-supplicant-mini wpa-supplicant-p2p \
+                          wpa-supplicant wpa-supplicant-openssl wpa-supplicant-wolfssl \
+                          wpa-supplicant-mesh-openssl wpa-supplicant-mesh-wolfssl
+
+HOSTAPD_ONLY_PROVIDERS:=hostapd-mini hostapd hostapd-openssl hostapd-wolfssl
+
+EAPOL_TEST_PROVIDERS:=eapol-test eapol-test-openssl eapol-test-wolfssl
+
+SUPPLICANT_PROVIDERS:=$(WPAD_PROVIDERS) $(SUPPLICANT_ONLY_PROVIDERS)
+HOSTAPD_PROVIDERS:=$(WPAD_PROVIDERS) $(HOSTAPD_ONLY_PROVIDERS)
+ANY_SUPPLICANT_PROVIDERS:=$(WPAD_PROVIDERS) $(SUPPLICANT_ONLY_PROVIDERS)
+ANY_HOSTAPD_PROVIDERS:=$(WPAD_PROVIDERS) $(HOSTAPD_ONLY_PROVIDERS)
+ANY_PROVIDERS:=$(WPAD_PROVIDERS) $(SUPPLICANT_ONLY_PROVIDERS) $(HOSTAPD_ONLY_PROVIDERS)
+
 LOCAL_TYPE=$(strip \
                $(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \
                $(if $(findstring supplicant,$(BUILD_VARIANT)),supplicant, \
 LOCAL_TYPE=$(strip \
                $(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \
                $(if $(findstring supplicant,$(BUILD_VARIANT)),supplicant, \
@@ -67,20 +84,6 @@ include $(INCLUDE_DIR)/package.mk
 
 STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
 
 
 STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
 
-WPAD_PROVIDERS:=wpad-mini wpad wpad-openssl wpad-wolfssl \
-               wpad-mesh-openssl wpad-mesh-wolfssl
-
-SUPPLICANT_ONLY_PROVIDERS:=wpa_supplicant-mini wpa_supplicant-p2p \
-                          wpa_supplicant wpa_supplicant-openssl wpa_supplicant-wolfssl \
-                          wpa_supplicant-mesh-openssl wpa_supplicant-mesh-wolfssl
-
-HOSTAPD_ONLY_PROVIDERS:=hostapd-mini hostapd hostapd-openssl hostapd-wolfssl
-
-EAPOL_TEST_PROVIDERS:=eapol-test eapol-test-openssl eapol-test-wolfssl
-
-SUPPLICANT_PROVIDERS:=$(WPAD_PROVIDERS) $(SUPPLICANT_ONLY_PROVIDERS)
-HOSTAPD_PROVIDERS:=$(WPAD_PROVIDERS) $(HOSTAPD_ONLY_PROVIDERS)
-ANY_PROVIDERS:=$(WPAD_PROVIDERS) $(HOSTAPD_ONLY_PROVIDERS) $(SUPPLICANT_ONLY_PROVIDERS)
 
 ifneq ($(CONFIG_DRIVER_11N_SUPPORT),)
   HOSTAPD_IEEE80211N:=y
 
 ifneq ($(CONFIG_DRIVER_11N_SUPPORT),)
   HOSTAPD_IEEE80211N:=y
@@ -200,7 +203,7 @@ endef
 define Package/hostapd-utils
   $(call Package/hostapd/Default)
   TITLE+= (utils)
 define Package/hostapd-utils
   $(call Package/hostapd/Default)
   TITLE+= (utils)
-  DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(HOSTAPD_PROVIDERS),PACKAGE_$(pkg)))
+  DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(ANY_HOSTAPD_PROVIDERS),PACKAGE_$(pkg)))
 endef
 
 define Package/hostapd-utils/description
 endef
 
 define Package/hostapd-utils/description
@@ -221,6 +224,14 @@ define Package/wpad
 $(call Package/wpad/Default)
   TITLE+= (full)
   VARIANT:=wpad-full-internal
 $(call Package/wpad/Default)
   TITLE+= (full)
   VARIANT:=wpad-full-internal
+  CONFLICTS:=$(filter-out wpad-mesh-wolfssl,\
+             $(filter-out wpad-mesh-openssl ,\
+             $(filter-out wpad-openssl ,\
+             $(filter-out wpad-wolfssl ,\
+             $(filter-out wpad-wolfssl ,\
+             $(filter-out wpad ,\
+             $(ANY_PROVIDERS)\
+             ))))))
 endef
 
 define Package/wpad-openssl
 endef
 
 define Package/wpad-openssl
@@ -258,6 +269,7 @@ define Package/wpad-mini
 $(call Package/wpad/Default)
   TITLE+= (WPA-PSK only)
   VARIANT:=wpad-mini
 $(call Package/wpad/Default)
   TITLE+= (WPA-PSK only)
   VARIANT:=wpad-mini
+  CONFLICTS:=$(SUPPLICANT_ONLY_PROVIDERS)
 endef
 
 define Package/wpad-mini/description
 endef
 
 define Package/wpad-mini/description
@@ -299,13 +311,18 @@ endef
 
 define Package/wpa-supplicant
   $(Package/wpa-supplicant/Default)
 
 define Package/wpa-supplicant
   $(Package/wpa-supplicant/Default)
-  CONFLICTS:=$(filter-out wpa-supplicant ,$(SUPPLICANT_ONLY_PROVIDERS))
   VARIANT:=supplicant-full-internal
   VARIANT:=supplicant-full-internal
+  CONFLICTS:=wpa-supplicant-mini
 endef
 
 define Package/wpa-supplicant-openssl
   $(Package/wpa-supplicant/Default)
 endef
 
 define Package/wpa-supplicant-openssl
   $(Package/wpa-supplicant/Default)
-  CONFLICTS:=$(filter-out wpa-supplicant-openssl ,$(SUPPLICANT_ONLY_PROVIDERS))
+  CONFLICTS:=$(filter-out wpa-supplicant-wolfssl ,\
+            $(filter-out wpa-supplicant-openssl ,\
+            $(filter-out wpa-supplicant-mesh-openssl ,\
+            $(filter-out wpa-supplicant-mesh-wolfssl ,\
+            $(SUPPLICANT_ONLY_PROVIDERS)\
+            ))))
   VARIANT:=supplicant-full-openssl
   DEPENDS+=+libopenssl
   PROVIDES:=wpa-supplicant
   VARIANT:=supplicant-full-openssl
   DEPENDS+=+libopenssl
   PROVIDES:=wpa-supplicant
@@ -313,7 +330,12 @@ endef
 
 define Package/wpa-supplicant-wolfssl
   $(Package/wpa-supplicant/Default)
 
 define Package/wpa-supplicant-wolfssl
   $(Package/wpa-supplicant/Default)
-  CONFLICTS:=$(filter-out wpa-supplicant-wolfssl ,$(SUPPLICANT_ONLY_PROVIDERS))
+  CONFLICTS:=$(filter-out wpa-supplicant-wolfssl ,\
+            $(filter-out wpa-supplicant-openssl ,\
+            $(filter-out wpa-supplicant-mesh-openssl ,\
+            $(filter-out wpa-supplicant-mesh-wolfssl ,\
+            $(SUPPLICANT_ONLY_PROVIDERS)\
+            ))))
   VARIANT:=supplicant-full-wolfssl
   DEPENDS+=+libwolfssl
   PROVIDES:=wpa-supplicant
   VARIANT:=supplicant-full-wolfssl
   DEPENDS+=+libwolfssl
   PROVIDES:=wpa-supplicant
@@ -327,13 +349,19 @@ define Package/wpa-supplicant-p2p
   $(Package/wpa-supplicant)
   TITLE:=WPA Supplicant (with Wi-Fi P2P support)
   DEPENDS:=$(DRV_DEPENDS) @PACKAGE_kmod-cfg80211
   $(Package/wpa-supplicant)
   TITLE:=WPA Supplicant (with Wi-Fi P2P support)
   DEPENDS:=$(DRV_DEPENDS) @PACKAGE_kmod-cfg80211
-  CONFLICTS:=$(filter-out wpa-supplicant-p2p ,$(SUPPLICANT_ONLY_PROVIDERS))
+  CONFLICTS:=$(filter-out wpa-supplicant-openssl ,\
+            $(filter-out wpa-supplicant-wolfssl ,\
+            $(filter-out wpa-supplicant-p2p ,\
+            $(filter-out wpa-supplicant-mesh-openssl ,\
+            $(filter-out wpa-supplicant-mesh-wolfssl ,\
+            $(SUPPLICANT_ONLY_PROVIDERS)\
+            )))))
   VARIANT:=supplicant-p2p-internal
   PROVIDES:=wpa-supplicant
 endef
 
 define Package/wpa-supplicant-mesh/Default
   VARIANT:=supplicant-p2p-internal
   PROVIDES:=wpa-supplicant
 endef
 
 define Package/wpa-supplicant-mesh/Default
-  $(Package/wpa-supplicant)
+  $(Package/wpa-supplicant/Default)
   TITLE:=WPA Supplicant (with 802.11s and SAE)
   DEPENDS:=$(DRV_DEPENDS) @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
   PROVIDES:=wpa-supplicant wpa-supplicant-mesh
   TITLE:=WPA Supplicant (with 802.11s and SAE)
   DEPENDS:=$(DRV_DEPENDS) @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
   PROVIDES:=wpa-supplicant wpa-supplicant-mesh
@@ -354,10 +382,9 @@ define Package/wpa-supplicant-mesh-wolfssl
 endef
 
 define Package/wpa-supplicant-mini
 endef
 
 define Package/wpa-supplicant-mini
-  $(Package/wpa-supplicant)
+  $(Package/wpa-supplicant/Default)
   TITLE:=WPA Supplicant (minimal version)
   DEPENDS:=$(DRV_DEPENDS)
   TITLE:=WPA Supplicant (minimal version)
   DEPENDS:=$(DRV_DEPENDS)
-  CONFLICTS:=$(filter-out wpa-supplicant-mini ,$(SUPPLICANT_ONLY_PROVIDERS))
   VARIANT:=supplicant-mini
   PROVIDES:=wpa-supplicant
 endef
   VARIANT:=supplicant-mini
   PROVIDES:=wpa-supplicant
 endef
@@ -365,7 +392,7 @@ endef
 define Package/wpa-cli
   SECTION:=net
   CATEGORY:=Network
 define Package/wpa-cli
   SECTION:=net
   CATEGORY:=Network
-  DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(SUPPLICANT_PROVIDERS),PACKAGE_$(pkg)))
+  DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(ANY_SUPPLICANT_PROVIDERS),PACKAGE_$(pkg)))
   TITLE:=WPA Supplicant command line control utility
 endef
 
   TITLE:=WPA Supplicant command line control utility
 endef
 
@@ -390,6 +417,7 @@ define Package/eapol-test-openssl
   VARIANT:=supplicant-full-openssl
   CONFLICTS:=$(filter-out eapol-test-openssl ,$(EAPOL_TEST_PROVIDERS))
   DEPENDS:=$(DRV_DEPENDS) +libopenssl
   VARIANT:=supplicant-full-openssl
   CONFLICTS:=$(filter-out eapol-test-openssl ,$(EAPOL_TEST_PROVIDERS))
   DEPENDS:=$(DRV_DEPENDS) +libopenssl
+  PROVIDES:=eapol-test
 endef
 
 define Package/eapol-test-wolfssl
 endef
 
 define Package/eapol-test-wolfssl
@@ -399,6 +427,7 @@ define Package/eapol-test-wolfssl
   VARIANT:=supplicant-full-wolfssl
   CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-wolfssl ,$(EAPOL_TEST_PROVIDERS)))
   DEPENDS:=$(DRV_DEPENDS) +libwolfssl
   VARIANT:=supplicant-full-wolfssl
   CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-wolfssl ,$(EAPOL_TEST_PROVIDERS)))
   DEPENDS:=$(DRV_DEPENDS) +libwolfssl
+  PROVIDES:=eapol-test
 endef
 
 
 endef
 
 
diff --git a/package/network/services/hostapd/patches/0001-Revert-wpa_supplicant-Increase-authentication-timeou.patch b/package/network/services/hostapd/patches/0001-Revert-wpa_supplicant-Increase-authentication-timeou.patch
deleted file mode 100644 (file)
index 8d9cd45..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-From 8a6a7112e5b1391018531f6b6c317f8870e0fcb6 Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Thu, 3 May 2018 13:12:28 +0200
-Subject: [PATCH 1/2] Revert "wpa_supplicant: Increase authentication timeout
- if CAC is started"
-
-This reverts commit 37547ad63c9df61ce6899675028594da2527efef.
----
- wpa_supplicant/events.c           | 95 ++++---------------------------
- wpa_supplicant/wpa_supplicant.c   | 20 -------
- wpa_supplicant/wpa_supplicant_i.h |  3 -
- 3 files changed, 10 insertions(+), 108 deletions(-)
-
---- a/wpa_supplicant/events.c
-+++ b/wpa_supplicant/events.c
-@@ -3776,81 +3776,6 @@ static void wpa_supplicant_event_port_au
- }
--static unsigned int wpas_event_cac_ms(const struct wpa_supplicant *wpa_s,
--                                    int freq)
--{
--      size_t i;
--      int j;
--
--      for (i = 0; i < wpa_s->hw.num_modes; i++) {
--              const struct hostapd_hw_modes *mode = &wpa_s->hw.modes[i];
--
--              for (j = 0; j < mode->num_channels; j++) {
--                      const struct hostapd_channel_data *chan;
--
--                      chan = &mode->channels[j];
--                      if (chan->freq == freq)
--                              return chan->dfs_cac_ms;
--              }
--      }
--
--      return 0;
--}
--
--
--static void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
--                                     struct dfs_event *radar)
--{
--#if defined(NEED_AP_MLME) && defined(CONFIG_AP)
--      if (wpa_s->ap_iface) {
--              wpas_ap_event_dfs_cac_started(wpa_s, radar);
--      } else
--#endif /* NEED_AP_MLME && CONFIG_AP */
--      {
--              unsigned int cac_time = wpas_event_cac_ms(wpa_s, radar->freq);
--
--              cac_time /= 1000; /* convert from ms to sec */
--              if (!cac_time)
--                      cac_time = 10 * 60; /* max timeout: 10 minutes */
--
--              /* Restart auth timeout: CAC time added to initial timeout */
--              wpas_auth_timeout_restart(wpa_s, cac_time);
--      }
--}
--
--
--static void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
--                                      struct dfs_event *radar)
--{
--#if defined(NEED_AP_MLME) && defined(CONFIG_AP)
--      if (wpa_s->ap_iface) {
--              wpas_ap_event_dfs_cac_finished(wpa_s, radar);
--      } else
--#endif /* NEED_AP_MLME && CONFIG_AP */
--      {
--              /* Restart auth timeout with original value after CAC is
--               * finished */
--              wpas_auth_timeout_restart(wpa_s, 0);
--      }
--}
--
--
--static void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
--                                     struct dfs_event *radar)
--{
--#if defined(NEED_AP_MLME) && defined(CONFIG_AP)
--      if (wpa_s->ap_iface) {
--              wpas_ap_event_dfs_cac_aborted(wpa_s, radar);
--      } else
--#endif /* NEED_AP_MLME && CONFIG_AP */
--      {
--              /* Restart auth timeout with original value after CAC is
--               * aborted */
--              wpas_auth_timeout_restart(wpa_s, 0);
--      }
--}
--
--
- static void wpa_supplicant_event_assoc_auth(struct wpa_supplicant *wpa_s,
-                                           union wpa_event_data *data)
- {
-@@ -4298,25 +4223,25 @@ void wpa_supplicant_event(void *ctx, enu
-                       wpas_ap_event_dfs_radar_detected(wpa_s,
-                                                        &data->dfs_event);
-               break;
--      case EVENT_DFS_NOP_FINISHED:
--              if (data)
--                      wpas_ap_event_dfs_cac_nop_finished(wpa_s,
--                                                         &data->dfs_event);
--              break;
--#endif /* NEED_AP_MLME */
--#endif /* CONFIG_AP */
-       case EVENT_DFS_CAC_STARTED:
-               if (data)
--                      wpas_event_dfs_cac_started(wpa_s, &data->dfs_event);
-+                      wpas_ap_event_dfs_cac_started(wpa_s, &data->dfs_event);
-               break;
-       case EVENT_DFS_CAC_FINISHED:
-               if (data)
--                      wpas_event_dfs_cac_finished(wpa_s, &data->dfs_event);
-+                      wpas_ap_event_dfs_cac_finished(wpa_s, &data->dfs_event);
-               break;
-       case EVENT_DFS_CAC_ABORTED:
-               if (data)
--                      wpas_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
-+                      wpas_ap_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
-+              break;
-+      case EVENT_DFS_NOP_FINISHED:
-+              if (data)
-+                      wpas_ap_event_dfs_cac_nop_finished(wpa_s,
-+                                                         &data->dfs_event);
-               break;
-+#endif /* NEED_AP_MLME */
-+#endif /* CONFIG_AP */
-       case EVENT_RX_MGMT: {
-               u16 fc, stype;
-               const struct ieee80211_mgmt *mgmt;
---- a/wpa_supplicant/wpa_supplicant.c
-+++ b/wpa_supplicant/wpa_supplicant.c
-@@ -243,30 +243,10 @@ void wpa_supplicant_req_auth_timeout(str
-       wpa_dbg(wpa_s, MSG_DEBUG, "Setting authentication timeout: %d sec "
-               "%d usec", sec, usec);
-       eloop_cancel_timeout(wpa_supplicant_timeout, wpa_s, NULL);
--      wpa_s->last_auth_timeout_sec = sec;
-       eloop_register_timeout(sec, usec, wpa_supplicant_timeout, wpa_s, NULL);
- }
--/*
-- * wpas_auth_timeout_restart - Restart and change timeout for authentication
-- * @wpa_s: Pointer to wpa_supplicant data
-- * @sec_diff: difference in seconds applied to original timeout value
-- */
--void wpas_auth_timeout_restart(struct wpa_supplicant *wpa_s, int sec_diff)
--{
--      int new_sec = wpa_s->last_auth_timeout_sec + sec_diff;
--
--      if (eloop_is_timeout_registered(wpa_supplicant_timeout, wpa_s, NULL)) {
--              wpa_dbg(wpa_s, MSG_DEBUG,
--                      "Authentication timeout restart: %d sec", new_sec);
--              eloop_cancel_timeout(wpa_supplicant_timeout, wpa_s, NULL);
--              eloop_register_timeout(new_sec, 0, wpa_supplicant_timeout,
--                                     wpa_s, NULL);
--      }
--}
--
--
- /**
-  * wpa_supplicant_cancel_auth_timeout - Cancel authentication timeout
-  * @wpa_s: Pointer to wpa_supplicant data
---- a/wpa_supplicant/wpa_supplicant_i.h
-+++ b/wpa_supplicant/wpa_supplicant_i.h
-@@ -1182,8 +1182,6 @@ struct wpa_supplicant {
-       /* RIC elements for FT protocol */
-       struct wpabuf *ric_ies;
--      int last_auth_timeout_sec;
--
- #ifdef CONFIG_DPP
-       struct dl_list dpp_bootstrap; /* struct dpp_bootstrap_info */
-       struct dl_list dpp_configurator; /* struct dpp_configurator */
-@@ -1258,7 +1256,6 @@ void wpa_supplicant_initiate_eapol(struc
- void wpa_clear_keys(struct wpa_supplicant *wpa_s, const u8 *addr);
- void wpa_supplicant_req_auth_timeout(struct wpa_supplicant *wpa_s,
-                                    int sec, int usec);
--void wpas_auth_timeout_restart(struct wpa_supplicant *wpa_s, int sec_diff);
- void wpa_supplicant_reinit_autoscan(struct wpa_supplicant *wpa_s);
- void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
-                             enum wpa_states state);
diff --git a/package/network/services/hostapd/patches/0002-Revert-wpa_supplicant-Rename-wpas_event_-to-wpas_ap_.patch b/package/network/services/hostapd/patches/0002-Revert-wpa_supplicant-Rename-wpas_event_-to-wpas_ap_.patch
deleted file mode 100644 (file)
index 281bb5b..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-From 0d4900ccd1c7ec5c5ffecf5040f9c07a6a32deef Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Thu, 3 May 2018 13:12:35 +0200
-Subject: [PATCH 2/2] Revert "wpa_supplicant: Rename wpas_event_*() to
- wpas_ap_event_*()"
-
-This reverts commit 2dd5fbbff884af488870a37e339b4817c83954de.
----
- wpa_supplicant/ap.c     | 20 ++++++++++----------
- wpa_supplicant/ap.h     | 18 +++++++++---------
- wpa_supplicant/events.c | 13 ++++++-------
- 3 files changed, 25 insertions(+), 26 deletions(-)
-
---- a/wpa_supplicant/ap.c
-+++ b/wpa_supplicant/ap.c
-@@ -1537,8 +1537,8 @@ int wpas_ap_pmksa_cache_add_external(str
- #ifdef NEED_AP_MLME
--void wpas_ap_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
--                                    struct dfs_event *radar)
-+void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
-+                                 struct dfs_event *radar)
- {
-       if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-               return;
-@@ -1550,8 +1550,8 @@ void wpas_ap_event_dfs_radar_detected(st
- }
--void wpas_ap_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
--                                 struct dfs_event *radar)
-+void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
-+                              struct dfs_event *radar)
- {
-       if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-               return;
-@@ -1562,8 +1562,8 @@ void wpas_ap_event_dfs_cac_started(struc
- }
--void wpas_ap_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
--                                  struct dfs_event *radar)
-+void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
-+                               struct dfs_event *radar)
- {
-       if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-               return;
-@@ -1574,8 +1574,8 @@ void wpas_ap_event_dfs_cac_finished(stru
- }
--void wpas_ap_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
--                                 struct dfs_event *radar)
-+void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
-+                              struct dfs_event *radar)
- {
-       if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-               return;
-@@ -1586,8 +1586,8 @@ void wpas_ap_event_dfs_cac_aborted(struc
- }
--void wpas_ap_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
--                                      struct dfs_event *radar)
-+void wpas_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
-+                                   struct dfs_event *radar)
- {
-       if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
-               return;
---- a/wpa_supplicant/ap.h
-+++ b/wpa_supplicant/ap.h
-@@ -89,16 +89,16 @@ int wpas_ap_pmksa_cache_list_mesh(struct
-                                 char *buf, size_t len);
- int wpas_ap_pmksa_cache_add_external(struct wpa_supplicant *wpa_s, char *cmd);
--void wpas_ap_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
--                                    struct dfs_event *radar);
--void wpas_ap_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
-+void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
-                                  struct dfs_event *radar);
--void wpas_ap_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
--                                  struct dfs_event *radar);
--void wpas_ap_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
--                                 struct dfs_event *radar);
--void wpas_ap_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
--                                      struct dfs_event *radar);
-+void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
-+                              struct dfs_event *radar);
-+void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
-+                               struct dfs_event *radar);
-+void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
-+                              struct dfs_event *radar);
-+void wpas_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
-+                                   struct dfs_event *radar);
- void ap_periodic(struct wpa_supplicant *wpa_s);
---- a/wpa_supplicant/events.c
-+++ b/wpa_supplicant/events.c
-@@ -4220,25 +4220,24 @@ void wpa_supplicant_event(void *ctx, enu
- #ifdef NEED_AP_MLME
-       case EVENT_DFS_RADAR_DETECTED:
-               if (data)
--                      wpas_ap_event_dfs_radar_detected(wpa_s,
--                                                       &data->dfs_event);
-+                      wpas_event_dfs_radar_detected(wpa_s, &data->dfs_event);
-               break;
-       case EVENT_DFS_CAC_STARTED:
-               if (data)
--                      wpas_ap_event_dfs_cac_started(wpa_s, &data->dfs_event);
-+                      wpas_event_dfs_cac_started(wpa_s, &data->dfs_event);
-               break;
-       case EVENT_DFS_CAC_FINISHED:
-               if (data)
--                      wpas_ap_event_dfs_cac_finished(wpa_s, &data->dfs_event);
-+                      wpas_event_dfs_cac_finished(wpa_s, &data->dfs_event);
-               break;
-       case EVENT_DFS_CAC_ABORTED:
-               if (data)
--                      wpas_ap_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
-+                      wpas_event_dfs_cac_aborted(wpa_s, &data->dfs_event);
-               break;
-       case EVENT_DFS_NOP_FINISHED:
-               if (data)
--                      wpas_ap_event_dfs_cac_nop_finished(wpa_s,
--                                                         &data->dfs_event);
-+                      wpas_event_dfs_cac_nop_finished(wpa_s,
-+                                                      &data->dfs_event);
-               break;
- #endif /* NEED_AP_MLME */
- #endif /* CONFIG_AP */
index 72c3c75ae96e01e7a7bfccfc049f7a228478843b..a1d668b283d46576462f5a5275a632506d65ea2a 100644 (file)
@@ -1,7 +1,7 @@
-From 032e70833de4b251fc4a159b2cc4ef28d0f1df0d Mon Sep 17 00:00:00 2001
+From 02ae4382f45f772e3630460459eb4e5af64e71b4 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:54:58 -0700
-Subject: [PATCH 01/16] mesh: factor out mesh join function
+Date: Tue, 29 May 2018 14:39:05 -0700
+Subject: [PATCH 01/18] mesh: factor out mesh join function
 
 mesh join function consitss of 2 parts which are preparing
 configurations and sending join event to driver.
 
 mesh join function consitss of 2 parts which are preparing
 configurations and sending join event to driver.
index ad2ab91fe33e83b762daffff44cfd0d02ce133fa..26e872d76508354ca3d7f8571a3717ec2360ac8c 100644 (file)
@@ -1,7 +1,7 @@
-From 6da64b1e056e0b1be18b6ab37c820acb4a0f3cf4 Mon Sep 17 00:00:00 2001
+From 89db76eeff6502dfa39b011962ec9d560ed4c2ee Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:54:59 -0700
-Subject: [PATCH 02/16] mesh: factor out rsn initialization
+Date: Tue, 29 May 2018 14:39:06 -0700
+Subject: [PATCH 02/18] mesh: factor out rsn initialization
 
 RSN initialization can be used in different phases
 if mesh initialization and mesh join don't happen
 
 RSN initialization can be used in different phases
 if mesh initialization and mesh join don't happen
index fa0605cfaf94410b357be2733addd68a776dbaa0..c96e8107698d7fbed8c89c5f55b7ae4301470c7e 100644 (file)
@@ -1,7 +1,7 @@
-From 95425b5becaeda8a515c942f417696e5df34bbc8 Mon Sep 17 00:00:00 2001
+From 07bad5f256cbe8a4b45d32c5b43b870ee815fb42 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:00 -0700
-Subject: [PATCH 03/16] mesh: relocate RSN init function
+Date: Tue, 29 May 2018 14:39:07 -0700
+Subject: [PATCH 03/18] mesh: relocate RSN init function
 
 RSN init function should work together with mesh join
 when it's used. Since mesh join could be called at different stage
 
 RSN init function should work together with mesh join
 when it's used. Since mesh join could be called at different stage
index 73ab99e072c453cb7fb1a0b682d5856eff1ca6fa..3ce2848d02ca33e094978272d52f19701a9dd32d 100644 (file)
@@ -1,7 +1,7 @@
-From 32044a7bb26858bedaf147c77f49f5cef1133de3 Mon Sep 17 00:00:00 2001
+From bd05de484bfa61def530d717c7234381f6b33cf7 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:01 -0700
-Subject: [PATCH 04/16] mesh: use setup completion callback to complete mesh
+Date: Tue, 29 May 2018 14:39:08 -0700
+Subject: [PATCH 04/18] mesh: use setup completion callback to complete mesh
  join
 
 mesh join function is the last function to be called during
  join
 
 mesh join function is the last function to be called during
index 6f7a968259c05b523811b2f1bcf7375816ff94ca..a372230d0735b8d873893fc3205f16da17591057 100644 (file)
@@ -1,7 +1,7 @@
-From e2f13b1fac9799db83a37fc57df9471d9bb5b711 Mon Sep 17 00:00:00 2001
+From dbe9afab3b2dceb35d478ac43dfcf8fdc5e23a22 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:02 -0700
-Subject: [PATCH 05/16] mesh: reflect country setting to mesh configuration
+Date: Tue, 29 May 2018 14:39:09 -0700
+Subject: [PATCH 05/18] mesh: reflect country setting to mesh configuration
 
 wpa_supplicant configuration has country parameter that is
 supposed to be used in AP mode to indicate supporting 802.11h
 
 wpa_supplicant configuration has country parameter that is
 supposed to be used in AP mode to indicate supporting 802.11h
@@ -9,9 +9,11 @@ and 802.11d. Reflect this configuration to Mesh also since Mesh
 is required to support 802.11h and 802.11d to use DFS channels.
 
 Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 is required to support 802.11h and 802.11d to use DFS channels.
 
 Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+[daniel@makrotopia.org: adapted to changed ieee80211_is_dfs prototype]
 ---
 ---
- wpa_supplicant/mesh.c | ++++++++
- 1 file changed, 8 insertions(+)
+ wpa_supplicant/mesh.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
 
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
 
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
index 0d956be2b372c332a0a1c19e65f65c20431dcd8a..fe2353cd8158f81a6f285d7191e695b258b72c29 100644 (file)
@@ -1,7 +1,7 @@
-From 37bf08621eee53f30b464be71876c02e235077ba Mon Sep 17 00:00:00 2001
+From 51e759da5026b3e64f801135b5d53f2198bbd2f0 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:03 -0700
-Subject: [PATCH 06/16] mesh: inform kernel driver DFS handler in userspace
+Date: Tue, 29 May 2018 14:39:10 -0700
+Subject: [PATCH 06/18] mesh: inform kernel driver DFS handler in userspace
 
 NL80211_ATTR_HANDLE_DFS is required by kerenel space
 to enable DFS channels that indicates DFS handler
 
 NL80211_ATTR_HANDLE_DFS is required by kerenel space
 to enable DFS channels that indicates DFS handler
index d8722c7cf91d864452afd93b097c6b3f59097cab..de114953884d6f8829e7b892597fdc815949ef75 100644 (file)
@@ -1,7 +1,7 @@
-From 8190aab3344ae9746c897093f88f3679239d135d Mon Sep 17 00:00:00 2001
+From bdc77efe681d5b88f3256e2bb6e706d4eaf09518 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:04 -0700
-Subject: [PATCH 07/16] mesh: apply channel attributes before running Mesh
+Date: Tue, 29 May 2018 14:39:11 -0700
+Subject: [PATCH 07/18] mesh: apply channel attributes before running Mesh
 
 This helps mesh interface initializes with correct
 channel parameters.
 
 This helps mesh interface initializes with correct
 channel parameters.
index ec6cadb223aec92a8dcb426e862a2c722ebfbe7c..5b97691eb97243b43cad53bd3c98fd15835119b7 100644 (file)
@@ -1,7 +1,7 @@
-From e001251cb5708c406d477eca6aa912e5692b17fe Mon Sep 17 00:00:00 2001
+From eb9888ba41faaeb8fd07392ad46808b7d894cc14 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:05 -0700
-Subject: [PATCH 08/16] mesh: set interface type to mesh before setting
+Date: Tue, 29 May 2018 14:39:12 -0700
+Subject: [PATCH 08/18] mesh: set interface type to mesh before setting
  interface
 
 Correct interface type is required to start DFS CAC that can be
  interface
 
 Correct interface type is required to start DFS CAC that can be
index 2fbbc950ceb459f5fcfac86cd4fd1e2f55352b4f..1fca7452b0cdee468d0797bc32fb1bd924410d42 100644 (file)
@@ -1,7 +1,7 @@
-From 3cefd0bf495ad51a860b56281a8cae32bc4bd086 Mon Sep 17 00:00:00 2001
+From fa3af966032267e618b19bbf06a536ddb81ddbdf Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:06 -0700
-Subject: [PATCH 09/16] mesh: set mesh center frequency
+Date: Tue, 29 May 2018 14:39:13 -0700
+Subject: [PATCH 09/18] mesh: set mesh center frequency
 
 vht center frequency value is required to compose the correct channel info.
 
 
 vht center frequency value is required to compose the correct channel info.
 
index e4711a8bdd1cf9c7e8065d30c7aa40b1eae352f6..3f5178a74ba800fd088e3f8145bc58489719f3c8 100644 (file)
@@ -1,16 +1,17 @@
-From 90aa570a894a907d11f85ced43a248198e24acc1 Mon Sep 17 00:00:00 2001
+From 9a8ca54a264a2820af614043e7af853166b320b0 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:07 -0700
-Subject: [PATCH 10/16] mesh: consider mesh interface on dfs event handler
+Date: Tue, 29 May 2018 14:39:14 -0700
+Subject: [PATCH 10/18] mesh: consider mesh interface on dfs event handler
 
 Once mesh starts supporting DFS channels, it has to handle DFS related events
 from drivers, hence add mesh interface to the check list.
 
 Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 
 Once mesh starts supporting DFS channels, it has to handle DFS related events
 from drivers, hence add mesh interface to the check list.
 
 Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
 ---
  wpa_supplicant/ap.c     | 71 ++++++++++++++++++++++++++++++-----------
 ---
  wpa_supplicant/ap.c     | 71 ++++++++++++++++++++++++++++++-----------
- wpa_supplicant/events.c |  1 +
- 2 files changed, 54 insertions(+), 18 deletions(-)
+ wpa_supplicant/events.c |  7 ++--
+ 2 files changed, 57 insertions(+), 21 deletions(-)
 
 --- a/wpa_supplicant/ap.c
 +++ b/wpa_supplicant/ap.c
 
 --- a/wpa_supplicant/ap.c
 +++ b/wpa_supplicant/ap.c
@@ -37,8 +38,8 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  }
  
 @@ -1540,10 +1545,16 @@ int wpas_ap_pmksa_cache_add_external(str
  }
  
 @@ -1540,10 +1545,16 @@ int wpas_ap_pmksa_cache_add_external(str
- void wpas_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
-                                  struct dfs_event *radar)
+ void wpas_ap_event_dfs_radar_detected(struct wpa_supplicant *wpa_s,
+                                     struct dfs_event *radar)
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
@@ -56,9 +57,9 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                                   radar->ht_enabled, radar->chan_offset,
                                   radar->chan_width,
                                   radar->cf1, radar->cf2);
                                   radar->ht_enabled, radar->chan_offset,
                                   radar->chan_width,
                                   radar->cf1, radar->cf2);
-@@ -1553,10 +1564,16 @@ void wpas_event_dfs_radar_detected(struc
- void wpas_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
-                               struct dfs_event *radar)
+@@ -1553,10 +1564,16 @@ void wpas_ap_event_dfs_radar_detected(st
+ void wpas_ap_event_dfs_cac_started(struct wpa_supplicant *wpa_s,
+                                  struct dfs_event *radar)
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
@@ -76,9 +77,9 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                              radar->ht_enabled, radar->chan_offset,
                              radar->chan_width, radar->cf1, radar->cf2);
  }
                              radar->ht_enabled, radar->chan_offset,
                              radar->chan_width, radar->cf1, radar->cf2);
  }
-@@ -1565,10 +1582,16 @@ void wpas_event_dfs_cac_started(struct w
- void wpas_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
-                                struct dfs_event *radar)
+@@ -1565,10 +1582,16 @@ void wpas_ap_event_dfs_cac_started(struc
+ void wpas_ap_event_dfs_cac_finished(struct wpa_supplicant *wpa_s,
+                                   struct dfs_event *radar)
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
@@ -96,9 +97,9 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                                 radar->ht_enabled, radar->chan_offset,
                                 radar->chan_width, radar->cf1, radar->cf2);
  }
                                 radar->ht_enabled, radar->chan_offset,
                                 radar->chan_width, radar->cf1, radar->cf2);
  }
-@@ -1577,10 +1600,16 @@ void wpas_event_dfs_cac_finished(struct
- void wpas_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
-                               struct dfs_event *radar)
+@@ -1577,10 +1600,16 @@ void wpas_ap_event_dfs_cac_finished(stru
+ void wpas_ap_event_dfs_cac_aborted(struct wpa_supplicant *wpa_s,
+                                  struct dfs_event *radar)
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
@@ -116,9 +117,9 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
                                 radar->ht_enabled, radar->chan_offset,
                                 radar->chan_width, radar->cf1, radar->cf2);
  }
                                 radar->ht_enabled, radar->chan_offset,
                                 radar->chan_width, radar->cf1, radar->cf2);
  }
-@@ -1589,10 +1618,16 @@ void wpas_event_dfs_cac_aborted(struct w
- void wpas_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
-                                    struct dfs_event *radar)
+@@ -1589,10 +1618,16 @@ void wpas_ap_event_dfs_cac_aborted(struc
+ void wpas_ap_event_dfs_cac_nop_finished(struct wpa_supplicant *wpa_s,
+                                       struct dfs_event *radar)
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
  {
 -      if (!wpa_s->ap_iface || !wpa_s->ap_iface->bss[0])
 -              return;
@@ -138,7 +139,34 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  }
 --- a/wpa_supplicant/events.c
 +++ b/wpa_supplicant/events.c
  }
 --- a/wpa_supplicant/events.c
 +++ b/wpa_supplicant/events.c
-@@ -4203,6 +4203,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -3802,7 +3802,7 @@ static void wpas_event_dfs_cac_started(s
+                                      struct dfs_event *radar)
+ {
+ #if defined(NEED_AP_MLME) && defined(CONFIG_AP)
+-      if (wpa_s->ap_iface) {
++      if (wpa_s->ap_iface || wpa_s->ifmsh) {
+               wpas_ap_event_dfs_cac_started(wpa_s, radar);
+       } else
+ #endif /* NEED_AP_MLME && CONFIG_AP */
+@@ -3823,7 +3823,7 @@ static void wpas_event_dfs_cac_finished(
+                                       struct dfs_event *radar)
+ {
+ #if defined(NEED_AP_MLME) && defined(CONFIG_AP)
+-      if (wpa_s->ap_iface) {
++      if (wpa_s->ap_iface || wpa_s->ifmsh) {
+               wpas_ap_event_dfs_cac_finished(wpa_s, radar);
+       } else
+ #endif /* NEED_AP_MLME && CONFIG_AP */
+@@ -3839,7 +3839,7 @@ static void wpas_event_dfs_cac_aborted(s
+                                      struct dfs_event *radar)
+ {
+ #if defined(NEED_AP_MLME) && defined(CONFIG_AP)
+-      if (wpa_s->ap_iface) {
++      if (wpa_s->ap_iface || wpa_s->ifmsh) {
+               wpas_ap_event_dfs_cac_aborted(wpa_s, radar);
+       } else
+ #endif /* NEED_AP_MLME && CONFIG_AP */
+@@ -4278,6 +4278,7 @@ void wpa_supplicant_event(void *ctx, enu
  #ifdef CONFIG_AP
                if (wpa_s->current_ssid->mode == WPAS_MODE_AP ||
                    wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO ||
  #ifdef CONFIG_AP
                if (wpa_s->current_ssid->mode == WPAS_MODE_AP ||
                    wpa_s->current_ssid->mode == WPAS_MODE_P2P_GO ||
index 73ae00ce8de649a13b6e09e29a33dac86c4ba7d8..2022bbbdd20941a00dcbed9e5465c7e15fe19923 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2040,6 +2040,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2060,6 +2060,8 @@ void ibss_mesh_setup_freq(struct wpa_sup
        struct hostapd_freq_params vht_freq;
        int chwidth, seg0, seg1;
        u32 vht_caps = 0;
        struct hostapd_freq_params vht_freq;
        int chwidth, seg0, seg1;
        u32 vht_caps = 0;
@@ -23,7 +23,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  
        freq->freq = ssid->frequency;
  
  
        freq->freq = ssid->frequency;
  
-@@ -2116,8 +2118,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2136,8 +2138,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
                return;
  
        /* Check primary channel flags */
                return;
  
        /* Check primary channel flags */
@@ -36,7 +36,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  
  #ifdef CONFIG_HT_OVERRIDES
        if (ssid->disable_ht40)
  
  #ifdef CONFIG_HT_OVERRIDES
        if (ssid->disable_ht40)
-@@ -2143,8 +2148,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2163,8 +2168,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
                return;
  
        /* Check secondary channel flags */
                return;
  
        /* Check secondary channel flags */
@@ -49,7 +49,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  
        freq->channel = pri_chan->chan;
  
  
        freq->channel = pri_chan->chan;
  
-@@ -2234,8 +2242,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2254,8 +2262,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
                        return;
  
                /* Back to HT configuration if channel not usable */
                        return;
  
                /* Back to HT configuration if channel not usable */
@@ -62,7 +62,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
        }
  
        chwidth = VHT_CHANWIDTH_80MHZ;
        }
  
        chwidth = VHT_CHANWIDTH_80MHZ;
-@@ -2255,10 +2266,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2275,10 +2286,11 @@ void ibss_mesh_setup_freq(struct wpa_sup
                                if (!chan)
                                        continue;
  
                                if (!chan)
                                        continue;
  
index 39df49870c5f73fd2462619de79f8e9556ecf153..793f4f5db10b41273205182970444afa6169ba0b 100644 (file)
@@ -1,7 +1,7 @@
-From 912b5c89328f1f9585e64fd13460928c71f28352 Mon Sep 17 00:00:00 2001
+From 4a8245ec2e9d48e464488477a3e7ed234009c216 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:09 -0700
-Subject: [PATCH 12/16] mesh: allow mesh to send channel switch request
+Date: Tue, 29 May 2018 14:39:16 -0700
+Subject: [PATCH 12/18] mesh: allow mesh to send channel switch request
 
 add mesh type to nl80211 channel switch request,
 so mesh is able to send the request to kernel drivers.
 
 add mesh type to nl80211 channel switch request,
 so mesh is able to send the request to kernel drivers.
index 8a9818b187d132c27d907c82b1c50e3707d287b0..2d818b08357133634890dba15c3194c18eca8407 100644 (file)
@@ -1,7 +1,7 @@
-From d7ae7271dce4203bfcd79a230acb24f03f38633d Mon Sep 17 00:00:00 2001
+From 267395271c1a36b54ef21070acff2cadce241035 Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:10 -0700
-Subject: [PATCH 13/16] mesh: do not allow pri/sec channel switch
+Date: Tue, 29 May 2018 14:39:17 -0700
+Subject: [PATCH 13/18] mesh: do not allow pri/sec channel switch
 
 We don't want mesh to switch the channel from primary to secondary,
 since mesh points are not able to join each other in that case.
 
 We don't want mesh to switch the channel from primary to secondary,
 since mesh points are not able to join each other in that case.
index 3c692a581f3093aaf8246aa8a42315106ce25e86..a6cb1b469c98686a81ba16e53e627838cfb09463 100644 (file)
@@ -13,7 +13,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2165,7 +2165,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2185,7 +2185,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
        }
        freq->sec_channel_offset = ht40;
  
        }
        freq->sec_channel_offset = ht40;
  
index 9d6ac82bf63fb27d9f63d10953f52cb79a60bb69..148e90d85922357d47893d03b12ecb35fe43ae50 100644 (file)
@@ -1,14 +1,16 @@
-From 48f31256ffebfc43d6b14b93597aa2c7e2975dc4 Mon Sep 17 00:00:00 2001
+From 9423e8be0393e82c8622806a0529e47fd5583c0b Mon Sep 17 00:00:00 2001
 From: Peter Oh <peter.oh@bowerswilkins.com>
 From: Peter Oh <peter.oh@bowerswilkins.com>
-Date: Tue, 17 Apr 2018 21:55:12 -0700
-Subject: [PATCH 15/16] mesh: do not use offchan mgmt tx on DFS
+Date: Tue, 29 May 2018 14:39:19 -0700
+Subject: [PATCH 15/18] mesh: do not use offchan mgmt tx on DFS
 
 Drivers don't allow mesh to use offchannel on management Tx.
 
 Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 
 Drivers don't allow mesh to use offchannel on management Tx.
 
 Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+[daniel@makrotopia.org: adapted to changed ieee80211_is_dfs prototype]
 ---
 ---
- src/drivers/driver_nl80211.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
+ src/drivers/driver_nl80211.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
 
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
 
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
@@ -23,20 +25,20 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
        struct ieee80211_hdr *hdr;
  
        wpa_printf(MSG_DEBUG, "nl80211: Send Action frame (ifindex=%d, "
        struct ieee80211_hdr *hdr;
  
        wpa_printf(MSG_DEBUG, "nl80211: Send Action frame (ifindex=%d, "
-@@ -7190,6 +7194,12 @@ static int wpa_driver_nl80211_send_actio
+@@ -7189,7 +7193,11 @@ static int wpa_driver_nl80211_send_actio
+       } else {
                os_memset(bss->rand_addr, 0, ETH_ALEN);
        }
                os_memset(bss->rand_addr, 0, ETH_ALEN);
        }
+-
 +      if (is_mesh_interface(drv->nlmode) &&
 +          (modes = nl80211_get_hw_feature_data(bss, &num_modes, &flags,
 +                                               &dfs_domain)) &&
 +          ieee80211_is_dfs(freq, modes, num_modes))
 +              offchanok = 0;
 +      if (is_mesh_interface(drv->nlmode) &&
 +          (modes = nl80211_get_hw_feature_data(bss, &num_modes, &flags,
 +                                               &dfs_domain)) &&
 +          ieee80211_is_dfs(freq, modes, num_modes))
 +              offchanok = 0;
-+
        if (is_ap_interface(drv->nlmode) &&
            (!(drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) ||
             (int) freq == bss->freq || drv->device_ap_sme ||
        if (is_ap_interface(drv->nlmode) &&
            (!(drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) ||
             (int) freq == bss->freq || drv->device_ap_sme ||
-@@ -7201,7 +7211,7 @@ static int wpa_driver_nl80211_send_actio
+@@ -7201,7 +7209,7 @@ static int wpa_driver_nl80211_send_actio
                ret = nl80211_send_frame_cmd(bss, freq, wait_time, buf,
                                             24 + data_len,
                                             &drv->send_action_cookie,
                ret = nl80211_send_frame_cmd(bss, freq, wait_time, buf,
                                             24 + data_len,
                                             &drv->send_action_cookie,
diff --git a/package/network/services/hostapd/patches/016-mesh-fix-channel-switch-error-during-CAC.patch b/package/network/services/hostapd/patches/016-mesh-fix-channel-switch-error-during-CAC.patch
new file mode 100644 (file)
index 0000000..5071ae5
--- /dev/null
@@ -0,0 +1,64 @@
+From fa9d565fe8841b288f29137c23a7ab2584dd9510 Mon Sep 17 00:00:00 2001
+From: Peter Oh <peter.oh@bowerswilkins.com>
+Date: Tue, 29 May 2018 14:39:20 -0700
+Subject: [PATCH 16/18] mesh: fix channel switch error during CAC
+
+Mesh interface has used its channel parameters that configured
+during its initialization even after channel switched due to
+DFS radar detection during CAC which caused channel switch error.
+This change fixes the error by updating its channel parameters
+when channel's been changed from initial one.
+
+Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+[daniel@makrotopia.org: added hw_features_common.h include]
+---
+ wpa_supplicant/mesh.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+--- a/wpa_supplicant/mesh.c
++++ b/wpa_supplicant/mesh.c
+@@ -11,6 +11,7 @@
+ #include "utils/common.h"
+ #include "utils/eloop.h"
+ #include "utils/uuid.h"
++#include "common/hw_features_common.h"
+ #include "common/ieee802_11_defs.h"
+ #include "common/wpa_ctrl.h"
+ #include "ap/sta_info.h"
+@@ -394,10 +395,35 @@ void wpa_supplicant_mesh_add_scan_ie(str
+ void wpas_mesh_complete_cb(void *ctx)
+ {
+       struct wpa_supplicant *wpa_s = (struct wpa_supplicant *)ctx;
++      struct hostapd_iface *ifmsh = wpa_s->ifmsh;
+       struct wpa_driver_mesh_join_params *params = wpa_s->mesh_params;
+       struct wpa_ssid *ssid = wpa_s->current_ssid;
+       int ret = 0;
++      /*
++       * inspect if channel's been changed since initialized.
++       * i.e. DFS radar detection
++       */
++      if (ifmsh->freq != params->freq.freq) {
++              wpa_s->assoc_freq = ifmsh->freq;
++              ssid->frequency = ifmsh->freq;
++              if (hostapd_set_freq_params(&params->freq,
++                              ifmsh->conf->hw_mode,
++                              ifmsh->freq,
++                              ifmsh->conf->channel,
++                              ifmsh->conf->ieee80211n,
++                              ifmsh->conf->ieee80211ac,
++                              ifmsh->conf->secondary_channel,
++                              ifmsh->conf->vht_oper_chwidth,
++                              ifmsh->conf->vht_oper_centr_freq_seg0_idx,
++                              ifmsh->conf->vht_oper_centr_freq_seg1_idx,
++                              ifmsh->conf->vht_capab)) {
++                      wpa_printf(MSG_ERROR, "Error updating mesh frequency params.");
++                      wpa_supplicant_mesh_deinit(wpa_s);
++                      return;
++              }
++      }
++
+       if (wpas_mesh_init_rsn(wpa_s)) {
+               wpa_printf(MSG_ERROR, "Init RSN failed. Deinit mesh...");
+               wpa_supplicant_mesh_deinit(wpa_s);
diff --git a/package/network/services/hostapd/patches/016-mesh-make-forwarding-configurable.patch b/package/network/services/hostapd/patches/016-mesh-make-forwarding-configurable.patch
deleted file mode 100644 (file)
index 9f916c5..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-From 9a01d7f21bd33725dc33325a437c3cc4185ee8bd Mon Sep 17 00:00:00 2001
-From: Daniel Golle <daniel@makrotopia.org>
-Date: Wed, 18 Apr 2018 19:24:31 +0200
-Subject: [PATCH 16/16] mesh: make forwarding configurable
-
-Allow mesh_fwding to be specified in a mesh bss config, pass that
-to the driver (only nl80211 implemented for now) and announce
-forwarding capability accordingly.
-
-Signed-off-by: Daniel Golle <daniel@makrotopia.org>
----
- src/ap/ap_config.h                 | 2 ++
- src/drivers/driver.h               | 2 ++
- src/drivers/driver_nl80211.c       | 3 +++
- wpa_supplicant/config.c            | 4 ++++
- wpa_supplicant/config.h            | 9 +++++++++
- wpa_supplicant/config_file.c       | 4 ++++
- wpa_supplicant/config_ssid.h       | 5 +++++
- wpa_supplicant/mesh.c              | 6 ++++++
- wpa_supplicant/mesh_mpm.c          | 4 ++--
- wpa_supplicant/wpa_supplicant.conf | 3 +++
- 10 files changed, 40 insertions(+), 2 deletions(-)
-
---- a/src/ap/ap_config.h
-+++ b/src/ap/ap_config.h
-@@ -49,6 +49,7 @@ struct mesh_conf {
-       int dot11MeshRetryTimeout; /* msec */
-       int dot11MeshConfirmTimeout; /* msec */
-       int dot11MeshHoldingTimeout; /* msec */
-+      int mesh_fwding;
- };
- #define MAX_STA_COUNT 2007
-@@ -624,6 +625,7 @@ struct hostapd_bss_config {
- #define MESH_ENABLED BIT(0)
-       int mesh;
-+      int mesh_fwding;
-       u8 radio_measurements[RRM_CAPABILITIES_IE_LEN];
---- a/src/drivers/driver.h
-+++ b/src/drivers/driver.h
-@@ -1363,6 +1363,7 @@ struct wpa_driver_mesh_bss_params {
- #define WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS      0x00000004
- #define WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE          0x00000008
- #define WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD      0x00000010
-+#define WPA_DRIVER_MESH_CONF_FLAG_FORWARDING          0x00000020
-       /*
-        * TODO: Other mesh configuration parameters would go here.
-        * See NL80211_MESHCONF_* for all the mesh config parameters.
-@@ -1372,6 +1373,7 @@ struct wpa_driver_mesh_bss_params {
-       int peer_link_timeout;
-       int max_peer_links;
-       int rssi_threshold;
-+      int forwarding;
-       u16 ht_opmode;
- };
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -9230,6 +9230,9 @@ static int nl80211_put_mesh_config(struc
-       if (((params->flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
-            nla_put_u8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
-                       params->auto_plinks)) ||
-+          ((params->flags & WPA_DRIVER_MESH_CONF_FLAG_FORWARDING) &&
-+           nla_put_u8(msg, NL80211_MESHCONF_FORWARDING,
-+                      params->forwarding)) ||
-           ((params->flags & WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS) &&
-            nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
-                        params->max_peer_links)) ||
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
-@@ -2212,6 +2212,7 @@ static const struct parse_data ssid_fiel
- #ifdef CONFIG_MESH
-       { INT_RANGE(mode, 0, 5) },
-       { INT_RANGE(no_auto_peer, 0, 1) },
-+      { INT_RANGE(mesh_fwding, 0, 1) },
-       { INT_RANGE(mesh_rssi_threshold, -255, 1) },
- #else /* CONFIG_MESH */
-       { INT_RANGE(mode, 0, 4) },
-@@ -2763,6 +2764,7 @@ void wpa_config_set_network_defaults(str
-       ssid->dot11MeshRetryTimeout = DEFAULT_MESH_RETRY_TIMEOUT;
-       ssid->dot11MeshConfirmTimeout = DEFAULT_MESH_CONFIRM_TIMEOUT;
-       ssid->dot11MeshHoldingTimeout = DEFAULT_MESH_HOLDING_TIMEOUT;
-+      ssid->mesh_fwding = DEFAULT_MESH_FWDING;
-       ssid->mesh_rssi_threshold = DEFAULT_MESH_RSSI_THRESHOLD;
- #endif /* CONFIG_MESH */
- #ifdef CONFIG_HT_OVERRIDES
-@@ -3978,6 +3980,7 @@ struct wpa_config * wpa_config_alloc_emp
-       config->user_mpm = DEFAULT_USER_MPM;
-       config->max_peer_links = DEFAULT_MAX_PEER_LINKS;
-       config->mesh_max_inactivity = DEFAULT_MESH_MAX_INACTIVITY;
-+      config->mesh_fwding = DEFAULT_MESH_FWDING;
-       config->dot11RSNASAERetransPeriod =
-               DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD;
-       config->fast_reauth = DEFAULT_FAST_REAUTH;
-@@ -4600,6 +4603,7 @@ static const struct global_parse_data gl
-       { INT(user_mpm), 0 },
-       { INT_RANGE(max_peer_links, 0, 255), 0 },
-       { INT(mesh_max_inactivity), 0 },
-+      { INT_RANGE(mesh_fwding, 0, 1), 0 },
-       { INT(dot11RSNASAERetransPeriod), 0 },
- #endif /* CONFIG_MESH */
-       { INT(disable_scan_offload), 0 },
---- a/wpa_supplicant/config.h
-+++ b/wpa_supplicant/config.h
-@@ -18,6 +18,7 @@
- #define DEFAULT_USER_MPM 1
- #define DEFAULT_MAX_PEER_LINKS 99
- #define DEFAULT_MESH_MAX_INACTIVITY 300
-+#define DEFAULT_MESH_FWDING 1
- /*
-  * The default dot11RSNASAERetransPeriod is defined as 40 ms in the standard,
-  * but use 1000 ms in practice to avoid issues on low power CPUs.
-@@ -1306,6 +1307,14 @@ struct wpa_config {
-       int mesh_max_inactivity;
-       /**
-+       * mesh_fwding - Mesh network layer-2 forwarding
-+       *
-+       * This controls whether to enable layer-2 forwarding.
-+       * By default: 1: enabled
-+       */
-+      int mesh_fwding;
-+
-+      /**
-        * dot11RSNASAERetransPeriod - Timeout to retransmit SAE Auth frame
-        *
-        * This timeout value is used in mesh STA to retransmit
---- a/wpa_supplicant/config_file.c
-+++ b/wpa_supplicant/config_file.c
-@@ -818,6 +818,7 @@ static void wpa_config_write_network(FIL
- #endif /* IEEE8021X_EAPOL */
-       INT(mode);
-       INT(no_auto_peer);
-+      INT(mesh_fwding);
-       INT(frequency);
-       INT(fixed_freq);
- #ifdef CONFIG_ACS
-@@ -1450,6 +1451,9 @@ static void wpa_config_write_global(FILE
-               fprintf(f, "mesh_max_inactivity=%d\n",
-                       config->mesh_max_inactivity);
-+      if (config->mesh_fwding != DEFAULT_MESH_FWDING)
-+              fprintf(f, "mesh_fwding=%d\n", config->mesh_fwding);
-+
-       if (config->dot11RSNASAERetransPeriod !=
-           DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD)
-               fprintf(f, "dot11RSNASAERetransPeriod=%d\n",
---- a/wpa_supplicant/config_ssid.h
-+++ b/wpa_supplicant/config_ssid.h
-@@ -500,6 +500,11 @@ struct wpa_ssid {
-       int dot11MeshConfirmTimeout; /* msec */
-       int dot11MeshHoldingTimeout; /* msec */
-+      /**
-+       * Mesh network layer-2 forwarding
-+       */
-+      int mesh_fwding;
-+
-       int ht;
-       int ht40;
---- a/wpa_supplicant/mesh.c
-+++ b/wpa_supplicant/mesh.c
-@@ -120,6 +120,7 @@ static struct mesh_conf * mesh_config_cr
-       conf->mesh_cc_id = 0;
-       conf->mesh_sp_id = MESH_SYNC_METHOD_NEIGHBOR_OFFSET;
-       conf->mesh_auth_id = (conf->security & MESH_CONF_SEC_AUTH) ? 1 : 0;
-+      conf->mesh_fwding = ssid->mesh_fwding;
-       conf->dot11MeshMaxRetries = ssid->dot11MeshMaxRetries;
-       conf->dot11MeshRetryTimeout = ssid->dot11MeshRetryTimeout;
-       conf->dot11MeshConfirmTimeout = ssid->dot11MeshConfirmTimeout;
-@@ -255,6 +256,7 @@ static int wpa_supplicant_mesh_init(stru
-       bss->conf->start_disabled = 1;
-       bss->conf->mesh = MESH_ENABLED;
-       bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
-+      bss->conf->mesh_fwding = wpa_s->conf->mesh_fwding;
-       if (ieee80211_is_dfs(ssid->frequency, wpa_s->hw.modes,
-                            wpa_s->hw.num_modes) && wpa_s->conf->country[0]) {
-@@ -508,6 +510,10 @@ int wpa_supplicant_join_mesh(struct wpa_
-       }
-       params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
-+      /* always explicitely set forwarding to on or off for now */
-+      params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_FORWARDING;
-+      params->conf.forwarding = ssid->mesh_fwding;
-+
-       wpa_s->mesh_params = params;
-       if (wpa_supplicant_mesh_init(wpa_s, ssid, &params->freq)) {
-               wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh");
---- a/wpa_supplicant/mesh_mpm.c
-+++ b/wpa_supplicant/mesh_mpm.c
-@@ -288,9 +288,9 @@ static void mesh_mpm_send_plink_action(s
-               info = (bss->num_plinks > 63 ? 63 : bss->num_plinks) << 1;
-               /* TODO: Add Connected to Mesh Gate/AS subfields */
-               wpabuf_put_u8(buf, info);
--              /* always forwarding & accepting plinks for now */
-+              /* set forwarding & always accepting plinks for now */
-               wpabuf_put_u8(buf, MESH_CAP_ACCEPT_ADDITIONAL_PEER |
--                            MESH_CAP_FORWARDING);
-+                            (conf->mesh_fwding ? MESH_CAP_FORWARDING : 0));
-       } else {        /* Peer closing frame */
-               /* IE: Mesh ID */
-               wpabuf_put_u8(buf, WLAN_EID_MESH_ID);
---- a/wpa_supplicant/wpa_supplicant.conf
-+++ b/wpa_supplicant/wpa_supplicant.conf
-@@ -153,6 +153,9 @@ ap_scan=1
- # This timeout value is used in mesh STA to clean up inactive stations.
- #mesh_max_inactivity=300
-+# Enable 802.11s layer-2 routing and forwarding
-+#mesh_fwding=1
-+
- # cert_in_cb - Whether to include a peer certificate dump in events
- # This controls whether peer certificates for authentication server and
- # its certificate chain are included in EAP peer certificate events. This is
diff --git a/package/network/services/hostapd/patches/017-mesh-use-right-interface-context-to-send-DFS-event-m.patch b/package/network/services/hostapd/patches/017-mesh-use-right-interface-context-to-send-DFS-event-m.patch
new file mode 100644 (file)
index 0000000..a4073bb
--- /dev/null
@@ -0,0 +1,107 @@
+From d3201adfe7d2219217a07ef16ef365ad59c1a89b Mon Sep 17 00:00:00 2001
+From: Peter Oh <peter.oh@bowerswilkins.com>
+Date: Tue, 29 May 2018 14:39:21 -0700
+Subject: [PATCH 17/18] mesh: use right interface context to send DFS event
+ messages
+
+use mesh interface context to send DFS event messages when
+DFS events are on mesh interface.
+
+Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
+Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
+---
+ src/ap/dfs.c | 27 +++++++++++++++++++--------
+ 1 file changed, 19 insertions(+), 8 deletions(-)
+
+--- a/src/ap/dfs.c
++++ b/src/ap/dfs.c
+@@ -637,6 +637,17 @@ static unsigned int dfs_get_cac_time(str
+ }
++static void *get_message_ctx(struct hostapd_iface *iface)
++{
++#ifdef CONFIG_MESH
++       if (iface->mconf)
++               return iface->owner;
++#endif /* CONFIG_MESH */
++
++       return iface->bss[0]->msg_ctx;
++}
++
++
+ /*
+  * Main DFS handler
+  * 1 - continue channel/ap setup
+@@ -719,7 +730,7 @@ int hostapd_handle_dfs(struct hostapd_if
+       /* Finally start CAC */
+       hostapd_set_state(iface, HAPD_IFACE_DFS);
+       wpa_printf(MSG_DEBUG, "DFS start CAC on %d MHz", iface->freq);
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_CAC_START
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_CAC_START
+               "freq=%d chan=%d sec_chan=%d, width=%d, seg0=%d, seg1=%d, cac_time=%ds",
+               iface->freq,
+               iface->conf->channel, iface->conf->secondary_channel,
+@@ -768,7 +779,7 @@ int hostapd_dfs_complete_cac(struct host
+                            int ht_enabled, int chan_offset, int chan_width,
+                            int cf1, int cf2)
+ {
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_CAC_COMPLETED
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_CAC_COMPLETED
+               "success=%d freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
+               success, freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
+@@ -810,7 +821,7 @@ int hostapd_dfs_pre_cac_expired(struct h
+                               int ht_enabled, int chan_offset, int chan_width,
+                               int cf1, int cf2)
+ {
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_PRE_CAC_EXPIRED
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_PRE_CAC_EXPIRED
+               "freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
+               freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
+@@ -848,7 +859,7 @@ static int hostapd_dfs_start_channel_swi
+       wpa_printf(MSG_DEBUG, "DFS will switch to a new channel %d",
+                  channel->chan);
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_NEW_CHANNEL
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_NEW_CHANNEL
+               "freq=%d chan=%d sec_chan=%d", channel->freq,
+               channel->chan, secondary_channel);
+@@ -935,7 +946,7 @@ static int hostapd_dfs_start_channel_swi
+       wpa_printf(MSG_DEBUG, "DFS will switch to a new channel %d",
+                  channel->chan);
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_NEW_CHANNEL
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_NEW_CHANNEL
+               "freq=%d chan=%d sec_chan=%d", channel->freq,
+               channel->chan, secondary_channel);
+@@ -997,7 +1008,7 @@ int hostapd_dfs_radar_detected(struct ho
+ {
+       int res;
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_RADAR_DETECTED
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_RADAR_DETECTED
+               "freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
+               freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
+@@ -1028,7 +1039,7 @@ int hostapd_dfs_nop_finished(struct host
+                            int ht_enabled, int chan_offset, int chan_width,
+                            int cf1, int cf2)
+ {
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_NOP_FINISHED
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_NOP_FINISHED
+               "freq=%d ht_enabled=%d chan_offset=%d chan_width=%d cf1=%d cf2=%d",
+               freq, ht_enabled, chan_offset, chan_width, cf1, cf2);
+@@ -1078,7 +1089,7 @@ int hostapd_dfs_start_cac(struct hostapd
+                         int ht_enabled, int chan_offset, int chan_width,
+                         int cf1, int cf2)
+ {
+-      wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, DFS_EVENT_CAC_START
++      wpa_msg(get_message_ctx(iface), MSG_INFO, DFS_EVENT_CAC_START
+               "freq=%d chan=%d chan_offset=%d width=%d seg0=%d "
+               "seg1=%d cac_time=%ds",
+               freq, (freq - 5000) / 5, chan_offset, chan_width, cf1, cf2, 60);
diff --git a/package/network/services/hostapd/patches/018-mesh-make-forwarding-configurable.patch b/package/network/services/hostapd/patches/018-mesh-make-forwarding-configurable.patch
new file mode 100644 (file)
index 0000000..682eb46
--- /dev/null
@@ -0,0 +1,219 @@
+From 9a01d7f21bd33725dc33325a437c3cc4185ee8bd Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel@makrotopia.org>
+Date: Wed, 18 Apr 2018 19:24:31 +0200
+Subject: [PATCH 16/16] mesh: make forwarding configurable
+
+Allow mesh_fwding to be specified in a mesh bss config, pass that
+to the driver (only nl80211 implemented for now) and announce
+forwarding capability accordingly.
+
+Signed-off-by: Daniel Golle <daniel@makrotopia.org>
+---
+ src/ap/ap_config.h                 | 2 ++
+ src/drivers/driver.h               | 2 ++
+ src/drivers/driver_nl80211.c       | 3 +++
+ wpa_supplicant/config.c            | 4 ++++
+ wpa_supplicant/config.h            | 9 +++++++++
+ wpa_supplicant/config_file.c       | 4 ++++
+ wpa_supplicant/config_ssid.h       | 5 +++++
+ wpa_supplicant/mesh.c              | 6 ++++++
+ wpa_supplicant/mesh_mpm.c          | 4 ++--
+ wpa_supplicant/wpa_supplicant.conf | 3 +++
+ 10 files changed, 40 insertions(+), 2 deletions(-)
+
+--- a/src/ap/ap_config.h
++++ b/src/ap/ap_config.h
+@@ -49,6 +49,7 @@ struct mesh_conf {
+       int dot11MeshRetryTimeout; /* msec */
+       int dot11MeshConfirmTimeout; /* msec */
+       int dot11MeshHoldingTimeout; /* msec */
++      int mesh_fwding;
+ };
+ #define MAX_STA_COUNT 2007
+@@ -624,6 +625,7 @@ struct hostapd_bss_config {
+ #define MESH_ENABLED BIT(0)
+       int mesh;
++      int mesh_fwding;
+       u8 radio_measurements[RRM_CAPABILITIES_IE_LEN];
+--- a/src/drivers/driver.h
++++ b/src/drivers/driver.h
+@@ -1363,6 +1363,7 @@ struct wpa_driver_mesh_bss_params {
+ #define WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS      0x00000004
+ #define WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE          0x00000008
+ #define WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD      0x00000010
++#define WPA_DRIVER_MESH_CONF_FLAG_FORWARDING          0x00000020
+       /*
+        * TODO: Other mesh configuration parameters would go here.
+        * See NL80211_MESHCONF_* for all the mesh config parameters.
+@@ -1372,6 +1373,7 @@ struct wpa_driver_mesh_bss_params {
+       int peer_link_timeout;
+       int max_peer_links;
+       int rssi_threshold;
++      int forwarding;
+       u16 ht_opmode;
+ };
+--- a/src/drivers/driver_nl80211.c
++++ b/src/drivers/driver_nl80211.c
+@@ -9228,6 +9228,9 @@ static int nl80211_put_mesh_config(struc
+       if (((params->flags & WPA_DRIVER_MESH_CONF_FLAG_AUTO_PLINKS) &&
+            nla_put_u8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS,
+                       params->auto_plinks)) ||
++          ((params->flags & WPA_DRIVER_MESH_CONF_FLAG_FORWARDING) &&
++           nla_put_u8(msg, NL80211_MESHCONF_FORWARDING,
++                      params->forwarding)) ||
+           ((params->flags & WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS) &&
+            nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
+                        params->max_peer_links)) ||
+--- a/wpa_supplicant/config.c
++++ b/wpa_supplicant/config.c
+@@ -2212,6 +2212,7 @@ static const struct parse_data ssid_fiel
+ #ifdef CONFIG_MESH
+       { INT_RANGE(mode, 0, 5) },
+       { INT_RANGE(no_auto_peer, 0, 1) },
++      { INT_RANGE(mesh_fwding, 0, 1) },
+       { INT_RANGE(mesh_rssi_threshold, -255, 1) },
+ #else /* CONFIG_MESH */
+       { INT_RANGE(mode, 0, 4) },
+@@ -2763,6 +2764,7 @@ void wpa_config_set_network_defaults(str
+       ssid->dot11MeshRetryTimeout = DEFAULT_MESH_RETRY_TIMEOUT;
+       ssid->dot11MeshConfirmTimeout = DEFAULT_MESH_CONFIRM_TIMEOUT;
+       ssid->dot11MeshHoldingTimeout = DEFAULT_MESH_HOLDING_TIMEOUT;
++      ssid->mesh_fwding = DEFAULT_MESH_FWDING;
+       ssid->mesh_rssi_threshold = DEFAULT_MESH_RSSI_THRESHOLD;
+ #endif /* CONFIG_MESH */
+ #ifdef CONFIG_HT_OVERRIDES
+@@ -3978,6 +3980,7 @@ struct wpa_config * wpa_config_alloc_emp
+       config->user_mpm = DEFAULT_USER_MPM;
+       config->max_peer_links = DEFAULT_MAX_PEER_LINKS;
+       config->mesh_max_inactivity = DEFAULT_MESH_MAX_INACTIVITY;
++      config->mesh_fwding = DEFAULT_MESH_FWDING;
+       config->dot11RSNASAERetransPeriod =
+               DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD;
+       config->fast_reauth = DEFAULT_FAST_REAUTH;
+@@ -4600,6 +4603,7 @@ static const struct global_parse_data gl
+       { INT(user_mpm), 0 },
+       { INT_RANGE(max_peer_links, 0, 255), 0 },
+       { INT(mesh_max_inactivity), 0 },
++      { INT_RANGE(mesh_fwding, 0, 1), 0 },
+       { INT(dot11RSNASAERetransPeriod), 0 },
+ #endif /* CONFIG_MESH */
+       { INT(disable_scan_offload), 0 },
+--- a/wpa_supplicant/config.h
++++ b/wpa_supplicant/config.h
+@@ -18,6 +18,7 @@
+ #define DEFAULT_USER_MPM 1
+ #define DEFAULT_MAX_PEER_LINKS 99
+ #define DEFAULT_MESH_MAX_INACTIVITY 300
++#define DEFAULT_MESH_FWDING 1
+ /*
+  * The default dot11RSNASAERetransPeriod is defined as 40 ms in the standard,
+  * but use 1000 ms in practice to avoid issues on low power CPUs.
+@@ -1306,6 +1307,14 @@ struct wpa_config {
+       int mesh_max_inactivity;
+       /**
++       * mesh_fwding - Mesh network layer-2 forwarding
++       *
++       * This controls whether to enable layer-2 forwarding.
++       * By default: 1: enabled
++       */
++      int mesh_fwding;
++
++      /**
+        * dot11RSNASAERetransPeriod - Timeout to retransmit SAE Auth frame
+        *
+        * This timeout value is used in mesh STA to retransmit
+--- a/wpa_supplicant/config_file.c
++++ b/wpa_supplicant/config_file.c
+@@ -818,6 +818,7 @@ static void wpa_config_write_network(FIL
+ #endif /* IEEE8021X_EAPOL */
+       INT(mode);
+       INT(no_auto_peer);
++      INT(mesh_fwding);
+       INT(frequency);
+       INT(fixed_freq);
+ #ifdef CONFIG_ACS
+@@ -1450,6 +1451,9 @@ static void wpa_config_write_global(FILE
+               fprintf(f, "mesh_max_inactivity=%d\n",
+                       config->mesh_max_inactivity);
++      if (config->mesh_fwding != DEFAULT_MESH_FWDING)
++              fprintf(f, "mesh_fwding=%d\n", config->mesh_fwding);
++
+       if (config->dot11RSNASAERetransPeriod !=
+           DEFAULT_DOT11_RSNA_SAE_RETRANS_PERIOD)
+               fprintf(f, "dot11RSNASAERetransPeriod=%d\n",
+--- a/wpa_supplicant/config_ssid.h
++++ b/wpa_supplicant/config_ssid.h
+@@ -500,6 +500,11 @@ struct wpa_ssid {
+       int dot11MeshConfirmTimeout; /* msec */
+       int dot11MeshHoldingTimeout; /* msec */
++      /**
++       * Mesh network layer-2 forwarding
++       */
++      int mesh_fwding;
++
+       int ht;
+       int ht40;
+--- a/wpa_supplicant/mesh.c
++++ b/wpa_supplicant/mesh.c
+@@ -121,6 +121,7 @@ static struct mesh_conf * mesh_config_cr
+       conf->mesh_cc_id = 0;
+       conf->mesh_sp_id = MESH_SYNC_METHOD_NEIGHBOR_OFFSET;
+       conf->mesh_auth_id = (conf->security & MESH_CONF_SEC_AUTH) ? 1 : 0;
++      conf->mesh_fwding = ssid->mesh_fwding;
+       conf->dot11MeshMaxRetries = ssid->dot11MeshMaxRetries;
+       conf->dot11MeshRetryTimeout = ssid->dot11MeshRetryTimeout;
+       conf->dot11MeshConfirmTimeout = ssid->dot11MeshConfirmTimeout;
+@@ -256,6 +257,7 @@ static int wpa_supplicant_mesh_init(stru
+       bss->conf->start_disabled = 1;
+       bss->conf->mesh = MESH_ENABLED;
+       bss->conf->ap_max_inactivity = wpa_s->conf->mesh_max_inactivity;
++      bss->conf->mesh_fwding = wpa_s->conf->mesh_fwding;
+       if (ieee80211_is_dfs(ssid->frequency, wpa_s->hw.modes,
+                            wpa_s->hw.num_modes) && wpa_s->conf->country[0]) {
+@@ -534,6 +536,10 @@ int wpa_supplicant_join_mesh(struct wpa_
+       }
+       params->conf.peer_link_timeout = wpa_s->conf->mesh_max_inactivity;
++      /* always explicitely set forwarding to on or off for now */
++      params->conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_FORWARDING;
++      params->conf.forwarding = ssid->mesh_fwding;
++
+       wpa_s->mesh_params = params;
+       if (wpa_supplicant_mesh_init(wpa_s, ssid, &params->freq)) {
+               wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh");
+--- a/wpa_supplicant/mesh_mpm.c
++++ b/wpa_supplicant/mesh_mpm.c
+@@ -288,9 +288,9 @@ static void mesh_mpm_send_plink_action(s
+               info = (bss->num_plinks > 63 ? 63 : bss->num_plinks) << 1;
+               /* TODO: Add Connected to Mesh Gate/AS subfields */
+               wpabuf_put_u8(buf, info);
+-              /* always forwarding & accepting plinks for now */
++              /* set forwarding & always accepting plinks for now */
+               wpabuf_put_u8(buf, MESH_CAP_ACCEPT_ADDITIONAL_PEER |
+-                            MESH_CAP_FORWARDING);
++                            (conf->mesh_fwding ? MESH_CAP_FORWARDING : 0));
+       } else {        /* Peer closing frame */
+               /* IE: Mesh ID */
+               wpabuf_put_u8(buf, WLAN_EID_MESH_ID);
+--- a/wpa_supplicant/wpa_supplicant.conf
++++ b/wpa_supplicant/wpa_supplicant.conf
+@@ -153,6 +153,9 @@ ap_scan=1
+ # This timeout value is used in mesh STA to clean up inactive stations.
+ #mesh_max_inactivity=300
++# Enable 802.11s layer-2 routing and forwarding
++#mesh_fwding=1
++
+ # cert_in_cb - Whether to include a peer certificate dump in events
+ # This controls whether peer certificates for authentication server and
+ # its certificate chain are included in EAP peer certificate events. This is
index af0148bc4e0f6a986f168f34caebeb205869ad51..56554ef02f82c900e9f1b8415c30e7e6b61949cd 100644 (file)
@@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
 
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
-@@ -214,7 +214,7 @@ static int wpa_supplicant_mesh_init(stru
+@@ -215,7 +215,7 @@ static int wpa_supplicant_mesh_init(stru
                return 0;
        }
  
                return 0;
        }
  
index 4b802d2a497d515b7512e031a38a22e3f5a58ada..925a53818d260ee3cea19286ad3a68f17bc1f39f 100644 (file)
@@ -37,7 +37,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
        struct dl_list list;
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
        struct dl_list list;
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2292,6 +2292,9 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2312,6 +2312,9 @@ void ibss_mesh_setup_freq(struct wpa_sup
                        vht_caps |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
                        seg0 = 114;
                }
                        vht_caps |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
                        seg0 = 114;
                }
index f913b1282a1ba4053ba68db67eed7771bfed5038..083bdfe1d18cc953df6b0bab8262150aa9d2bfb7 100644 (file)
@@ -33,7 +33,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
 
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2124,9 +2124,15 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2144,9 +2144,15 @@ void ibss_mesh_setup_freq(struct wpa_sup
                if (!dfs_enabled)
                        return;
  
                if (!dfs_enabled)
                        return;
  
@@ -51,7 +51,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
  #endif /* CONFIG_HT_OVERRIDES */
  
        /* Check/setup HT40+/HT40- */
  #endif /* CONFIG_HT_OVERRIDES */
  
        /* Check/setup HT40+/HT40- */
-@@ -2154,8 +2160,6 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2174,8 +2180,6 @@ void ibss_mesh_setup_freq(struct wpa_sup
                if (!dfs_enabled)
                        return;
  
                if (!dfs_enabled)
                        return;
  
@@ -60,7 +60,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
        if (ht40 == -1) {
                if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
                        return;
        if (ht40 == -1) {
                if (!(pri_chan->flag & HOSTAPD_CHAN_HT40MINUS))
                        return;
-@@ -2199,6 +2203,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2219,6 +2223,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
                wpa_scan_results_free(scan_res);
        }
  
                wpa_scan_results_free(scan_res);
        }
  
@@ -68,7 +68,7 @@ Signed-off-by: Peter Oh <peter.oh@bowerswilkins.com>
        wpa_printf(MSG_DEBUG,
                   "IBSS/mesh: setup freq channel %d, sec_channel_offset %d",
                   freq->channel, freq->sec_channel_offset);
        wpa_printf(MSG_DEBUG,
                   "IBSS/mesh: setup freq channel %d, sec_channel_offset %d",
                   freq->channel, freq->sec_channel_offset);
-@@ -2294,7 +2299,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2314,7 +2319,10 @@ void ibss_mesh_setup_freq(struct wpa_sup
                }
        } else if (ssid->max_oper_chwidth == VHT_CHANWIDTH_USE_HT) {
                chwidth = VHT_CHANWIDTH_USE_HT;
                }
        } else if (ssid->max_oper_chwidth == VHT_CHANWIDTH_USE_HT) {
                chwidth = VHT_CHANWIDTH_USE_HT;
index b8e057e2faf8d16896ecbc50607a299e112a6050..ac53cbc92dcede06650e2d18a1b1ae5b990fea45 100644 (file)
@@ -1,6 +1,6 @@
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -272,9 +272,10 @@ void wpa_supplicant_cancel_auth_timeout(
+@@ -292,9 +292,10 @@ void wpa_supplicant_cancel_auth_timeout(
   */
  void wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s)
  {
   */
  void wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s)
  {
index 5d9a2397de46a6b28d8f40e4572f99e1599274cc..273af644c61e2b0f3c368d01e837fa71655b273e 100644 (file)
        os_memset(&global, 0, sizeof(global));
 --- a/wpa_supplicant/events.c
 +++ b/wpa_supplicant/events.c
        os_memset(&global, 0, sizeof(global));
 --- a/wpa_supplicant/events.c
 +++ b/wpa_supplicant/events.c
-@@ -3901,8 +3901,8 @@ static void wpas_event_assoc_reject(stru
+@@ -3976,8 +3976,8 @@ static void wpas_event_assoc_reject(stru
  }
  
  
  }
  
  
  {
        struct wpa_supplicant *wpa_s = ctx;
        int resched;
  {
        struct wpa_supplicant *wpa_s = ctx;
        int resched;
-@@ -4669,7 +4669,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -4745,7 +4745,7 @@ void wpa_supplicant_event(void *ctx, enu
  }
  
  
  }
  
  
        struct wpa_supplicant *wpa_s;
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
        struct wpa_supplicant *wpa_s;
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -5777,7 +5777,6 @@ struct wpa_interface * wpa_supplicant_ma
+@@ -5797,7 +5797,6 @@ struct wpa_interface * wpa_supplicant_ma
        return NULL;
  }
  
        return NULL;
  }
  
  /**
   * wpa_supplicant_match_existing - Match existing interfaces
   * @global: Pointer to global data from wpa_supplicant_init()
  /**
   * wpa_supplicant_match_existing - Match existing interfaces
   * @global: Pointer to global data from wpa_supplicant_init()
-@@ -5814,6 +5813,11 @@ static int wpa_supplicant_match_existing
+@@ -5834,6 +5833,11 @@ static int wpa_supplicant_match_existing
  
  #endif /* CONFIG_MATCH_IFACE */
  
  
  #endif /* CONFIG_MATCH_IFACE */
  
  
  /**
   * wpa_supplicant_add_iface - Add a new network interface
  
  /**
   * wpa_supplicant_add_iface - Add a new network interface
-@@ -6070,6 +6074,8 @@ struct wpa_global * wpa_supplicant_init(
+@@ -6090,6 +6094,8 @@ struct wpa_global * wpa_supplicant_init(
  #ifndef CONFIG_NO_WPA_MSG
        wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
  #endif /* CONFIG_NO_WPA_MSG */
  #ifndef CONFIG_NO_WPA_MSG
        wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb);
  #endif /* CONFIG_NO_WPA_MSG */
index c72d5e115c23c04a85acb525ee4fb48128bf4034..0c42d2b110384a253f17b123c6eabf9e454ce8f6 100644 (file)
@@ -20,7 +20,7 @@
        INT(fixed_freq);
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
        INT(fixed_freq);
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
-@@ -287,6 +287,8 @@ static int wpa_supplicant_mesh_init(stru
+@@ -288,6 +288,8 @@ static int wpa_supplicant_mesh_init(stru
                           frequency);
                goto out_free;
        }
                           frequency);
                goto out_free;
        }
@@ -31,7 +31,7 @@
        if (conf->hw_mode == HOSTAPD_MODE_IEEE80211A && ssid->vht) {
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
        if (conf->hw_mode == HOSTAPD_MODE_IEEE80211A && ssid->vht) {
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2031,12 +2031,12 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2051,12 +2051,12 @@ void ibss_mesh_setup_freq(struct wpa_sup
  {
        enum hostapd_hw_mode hw_mode;
        struct hostapd_hw_modes *mode = NULL;
  {
        enum hostapd_hw_mode hw_mode;
        struct hostapd_hw_modes *mode = NULL;
@@ -46,7 +46,7 @@
        unsigned int j, k;
        struct hostapd_freq_params vht_freq;
        int chwidth, seg0, seg1;
        unsigned int j, k;
        struct hostapd_freq_params vht_freq;
        int chwidth, seg0, seg1;
-@@ -2106,7 +2106,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2126,7 +2126,7 @@ void ibss_mesh_setup_freq(struct wpa_sup
                return;
  
        /* Setup higher BW only for 5 GHz */
                return;
  
        /* Setup higher BW only for 5 GHz */
index e72a5c816b3896535c93489a04a679d6fdd0f2d1..1fb05401f8e93c5e4f98b84c4b45734d21c6a8eb 100644 (file)
@@ -1,6 +1,6 @@
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -4228,7 +4228,7 @@ wpa_supplicant_alloc(struct wpa_supplica
+@@ -4248,7 +4248,7 @@ wpa_supplicant_alloc(struct wpa_supplica
        if (wpa_s == NULL)
                return NULL;
        wpa_s->scan_req = INITIAL_SCAN_REQ;
        if (wpa_s == NULL)
                return NULL;
        wpa_s->scan_req = INITIAL_SCAN_REQ;
index 10c18674c4566ca9445c64823fe8322da280aad4..9d7a2a4431a849bb39044227260c9b984e85f44f 100644 (file)
@@ -36,7 +36,7 @@
                nl80211_destroy_bss(bss);
                if (!bss->added_if)
                        i802_set_iface_flags(bss, 0);
                nl80211_destroy_bss(bss);
                if (!bss->added_if)
                        i802_set_iface_flags(bss, 0);
-@@ -7439,7 +7442,6 @@ static int wpa_driver_nl80211_deinit_ap(
+@@ -7437,7 +7440,6 @@ static int wpa_driver_nl80211_deinit_ap(
        if (!is_ap_interface(drv->nlmode))
                return -1;
        wpa_driver_nl80211_del_beacon(bss);
        if (!is_ap_interface(drv->nlmode))
                return -1;
        wpa_driver_nl80211_del_beacon(bss);
@@ -44,7 +44,7 @@
  
        /*
         * If the P2P GO interface was dynamically added, then it is
  
        /*
         * If the P2P GO interface was dynamically added, then it is
-@@ -7459,7 +7461,6 @@ static int wpa_driver_nl80211_stop_ap(vo
+@@ -7457,7 +7459,6 @@ static int wpa_driver_nl80211_stop_ap(vo
        if (!is_ap_interface(drv->nlmode))
                return -1;
        wpa_driver_nl80211_del_beacon(bss);
        if (!is_ap_interface(drv->nlmode))
                return -1;
        wpa_driver_nl80211_del_beacon(bss);
index 67cfc5a5c8e467eeb2380b30791ad009e3d73366..58a004484957044c4389c53f6ffe22e8edc66d8d 100644 (file)
  /* Configure default/group WEP keys for static WEP */
  int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
  {
  /* Configure default/group WEP keys for static WEP */
  int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
  {
-@@ -893,12 +942,16 @@ void wpa_supplicant_set_state(struct wpa
+@@ -913,12 +962,16 @@ void wpa_supplicant_set_state(struct wpa
  
                sme_sched_obss_scan(wpa_s, 1);
  
  
                sme_sched_obss_scan(wpa_s, 1);
  
                wpa_s->new_connection = 1;
                wpa_drv_set_operstate(wpa_s, 0);
  #ifndef IEEE8021X_EAPOL
                wpa_s->new_connection = 1;
                wpa_drv_set_operstate(wpa_s, 0);
  #ifndef IEEE8021X_EAPOL
-@@ -1927,6 +1980,8 @@ void wpa_supplicant_associate(struct wpa
+@@ -1947,6 +2000,8 @@ void wpa_supplicant_associate(struct wpa
                        wpa_ssid_txt(ssid->ssid, ssid->ssid_len),
                        ssid->id);
                wpas_notify_mesh_group_started(wpa_s, ssid);
                        wpa_ssid_txt(ssid->ssid, ssid->ssid_len),
                        ssid->id);
                wpas_notify_mesh_group_started(wpa_s, ssid);
  #else /* CONFIG_MESH */
                wpa_msg(wpa_s, MSG_ERROR,
                        "mesh mode support not included in the build");
  #else /* CONFIG_MESH */
                wpa_msg(wpa_s, MSG_ERROR,
                        "mesh mode support not included in the build");
-@@ -5403,6 +5458,16 @@ static int wpa_supplicant_init_iface(str
+@@ -5423,6 +5478,16 @@ static int wpa_supplicant_init_iface(str
                           sizeof(wpa_s->bridge_ifname));
        }
  
                           sizeof(wpa_s->bridge_ifname));
        }
  
        /* RSNA Supplicant Key Management - INITIALIZE */
        eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE);
        eapol_sm_notify_portValid(wpa_s->eapol, FALSE);
        /* RSNA Supplicant Key Management - INITIALIZE */
        eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE);
        eapol_sm_notify_portValid(wpa_s->eapol, FALSE);
-@@ -5724,6 +5789,11 @@ static void wpa_supplicant_deinit_iface(
+@@ -5744,6 +5809,11 @@ static void wpa_supplicant_deinit_iface(
        if (terminate)
                wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
  
        if (terminate)
                wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
  
index d52684e93b3c9d9dd0985933909788ae8741e388..81ad81c39a62ca0c6bcfd1e2c69101f76867511b 100644 (file)
@@ -174,7 +174,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
         * macsec_policy - Determines the policy for MACsec secure session
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
         * macsec_policy - Determines the policy for MACsec secure session
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -3041,6 +3041,12 @@ static void wpas_start_assoc_cb(struct w
+@@ -3061,6 +3061,12 @@ static void wpas_start_assoc_cb(struct w
                        params.beacon_int = ssid->beacon_int;
                else
                        params.beacon_int = wpa_s->conf->beacon_int;
                        params.beacon_int = ssid->beacon_int;
                else
                        params.beacon_int = wpa_s->conf->beacon_int;
index aff00fe556c943ff9e23a7946cb94e3774baf37b..12cbd993a5d4494d2629a4c3204fc43b073e0fdc 100644 (file)
@@ -29,7 +29,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
  /**
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
  /**
 --- a/src/drivers/driver_nl80211.c
 +++ b/src/drivers/driver_nl80211.c
-@@ -9250,6 +9250,18 @@ static int nl80211_put_mesh_id(struct nl
+@@ -9248,6 +9248,18 @@ static int nl80211_put_mesh_id(struct nl
  }
  
  
  }
  
  
@@ -48,7 +48,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
  static int nl80211_put_mesh_config(struct nl_msg *msg,
                                   struct wpa_driver_mesh_bss_params *params)
  {
  static int nl80211_put_mesh_config(struct nl_msg *msg,
                                   struct wpa_driver_mesh_bss_params *params)
  {
-@@ -9311,6 +9323,7 @@ static int nl80211_join_mesh(struct i802
+@@ -9309,6 +9321,7 @@ static int nl80211_join_mesh(struct i802
            nl80211_put_basic_rates(msg, params->basic_rates) ||
            nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
            nl80211_put_beacon_int(msg, params->beacon_int) ||
            nl80211_put_basic_rates(msg, params->basic_rates) ||
            nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
            nl80211_put_beacon_int(msg, params->beacon_int) ||
@@ -58,7 +58,7 @@ Tested-by: Simon Wunderlich <simon.wunderlich@openmesh.com>
  
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
  
 --- a/wpa_supplicant/mesh.c
 +++ b/wpa_supplicant/mesh.c
-@@ -456,6 +456,7 @@ int wpa_supplicant_join_mesh(struct wpa_
+@@ -482,6 +482,7 @@ int wpa_supplicant_join_mesh(struct wpa_
  
        params->meshid = ssid->ssid;
        params->meshid_len = ssid->ssid_len;
  
        params->meshid = ssid->ssid;
        params->meshid_len = ssid->ssid_len;
index 6fe9d115850e991cd0862908a0a936a959afa773..f630894c92b3665e1db4f6b6a593261cb1d3826a 100644 (file)
@@ -1,6 +1,6 @@
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
 --- a/wpa_supplicant/wpa_supplicant.c
 +++ b/wpa_supplicant/wpa_supplicant.c
-@@ -2104,11 +2104,13 @@ void ibss_mesh_setup_freq(struct wpa_sup
+@@ -2124,11 +2124,13 @@ void ibss_mesh_setup_freq(struct wpa_sup
        for (j = 0; j < wpa_s->last_scan_res_used; j++) {
                struct wpa_bss *bss = wpa_s->last_scan_res[j];
  
        for (j = 0; j < wpa_s->last_scan_res_used; j++) {
                struct wpa_bss *bss = wpa_s->last_scan_res[j];