From 80c2c42088d8c3a21bb59729e9b8f1497bdc1f7d Mon Sep 17 00:00:00 2001 From: nbd Date: Thu, 5 Jun 2014 15:58:01 +0000 Subject: [PATCH] hostapd: update to 2014-06-03 Signed-off-by: Felix Fietkau git-svn-id: svn://svn.openwrt.org/openwrt/trunk@41022 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/network/services/hostapd/Makefile | 4 +- .../services/hostapd/patches/200-multicall.patch | 26 +-- .../services/hostapd/patches/300-noscan.patch | 6 +- .../hostapd/patches/310-rescan_immediately.patch | 2 +- .../hostapd/patches/320-optional_rfkill.patch | 8 +- .../hostapd/patches/330-nl80211_fix_set_freq.patch | 8 +- .../hostapd/patches/340-reload_freq_change.patch | 4 +- .../patches/350-nl80211_del_beacon_bss.patch | 6 +- .../hostapd/patches/370-ap_sta_support.patch | 10 +- .../patches/380-disable_ctrl_iface_mib.patch | 20 +- .../hostapd/patches/410-bring_down_interface.patch | 4 +- .../hostapd/patches/440-dynamic_20_40_mhz.patch | 202 --------------------- ...ant-add-new-config-params-to-be-used-with.patch | 20 +- ...80211-use-new-parameters-during-ibss-join.patch | 4 +- .../patches/502-wpa_s-support-htmode-param.patch | 14 +- .../hostapd/patches/600-ubus_support.patch | 24 +-- 16 files changed, 80 insertions(+), 282 deletions(-) delete mode 100644 package/network/services/hostapd/patches/440-dynamic_20_40_mhz.patch diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index 9751af6e7f..6872742edc 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -8,9 +8,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=hostapd -PKG_VERSION:=2014-04-24 +PKG_VERSION:=2014-06-03 PKG_RELEASE:=1 -PKG_REV:=3cf48c4f2e2d558130253457fea02ef4047cf8e1 +PKG_REV:=84df167554569af8c87f0a8ac1fb508192417d8e PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=git://w1.fi/srv/git/hostap.git diff --git a/package/network/services/hostapd/patches/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch index b485895879..e8bbe450f9 100644 --- a/package/network/services/hostapd/patches/200-multicall.patch +++ b/package/network/services/hostapd/patches/200-multicall.patch @@ -62,7 +62,7 @@ ifdef CONFIG_TESTING_OPTIONS CFLAGS += -DCONFIG_TESTING_OPTIONS -@@ -746,6 +747,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS +@@ -741,6 +742,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS LIBS += -ldl -rdynamic endif @@ -72,8 +72,8 @@ + endif endif - ifdef CONFIG_AP -@@ -754,9 +759,11 @@ NEED_EAP_COMMON=y + ifdef CONFIG_MACSEC +@@ -762,9 +767,11 @@ NEED_EAP_COMMON=y NEED_RSN_AUTHENTICATOR=y CFLAGS += -DCONFIG_AP OBJS += ap.o @@ -85,7 +85,7 @@ OBJS += ../src/ap/hostapd.o OBJS += ../src/ap/wpa_auth_glue.o OBJS += ../src/ap/utils.o -@@ -818,10 +825,18 @@ endif +@@ -826,10 +833,18 @@ endif ifdef CONFIG_HS20 OBJS += ../src/ap/hs20.o endif @@ -104,7 +104,7 @@ NEED_AES_WRAP=y OBJS += ../src/ap/wpa_auth.o OBJS += ../src/ap/wpa_auth_ie.o -@@ -1584,6 +1599,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv) +@@ -1602,6 +1617,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv) $(OBJS_c) $(OBJS_t) $(OBJS_t2) $(OBJS) $(BCHECK) $(EXTRA_progs): .config @@ -117,7 +117,7 @@ wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs) $(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) @$(E) " LD " $@ -@@ -1664,6 +1685,12 @@ endif +@@ -1682,6 +1703,12 @@ endif %@.service: %.service.arg.in sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@ @@ -132,7 +132,7 @@ wpa_cli.exe: wpa_cli --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -3886,8 +3886,8 @@ union wpa_event_data { +@@ -4117,8 +4117,8 @@ union wpa_event_data { * Driver wrapper code should call this function whenever an event is received * from the driver. */ @@ -145,7 +145,7 @@ /* --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c -@@ -906,8 +906,8 @@ static void hostapd_event_dfs_nop_finish +@@ -926,8 +926,8 @@ static void hostapd_event_dfs_nop_finish #endif /* NEED_AP_MLME */ @@ -179,7 +179,7 @@ for (;;) { --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c -@@ -2929,8 +2929,8 @@ static void wpa_supplicant_notify_avoid_ +@@ -2919,8 +2919,8 @@ static void wpa_supplicant_notify_avoid_ } @@ -192,7 +192,7 @@ --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -3724,6 +3724,9 @@ static void wpa_supplicant_deinit_iface( +@@ -3810,6 +3810,9 @@ static void wpa_supplicant_deinit_iface( os_free(wpa_s); } @@ -202,7 +202,7 @@ /** * wpa_supplicant_add_iface - Add a new network interface -@@ -3915,6 +3918,7 @@ struct wpa_global * wpa_supplicant_init( +@@ -4001,6 +4004,7 @@ struct wpa_global * wpa_supplicant_init( wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb); #endif /* CONFIG_NO_WPA_MSG */ @@ -257,7 +257,7 @@ struct wpa_driver_ops *wpa_drivers[] = { NULL }; -@@ -1140,6 +1144,8 @@ static void usage(void) +@@ -1185,6 +1189,8 @@ static void usage(void) "option several times.\n"); } @@ -266,7 +266,7 @@ int main(int argc, char *argv[]) { -@@ -1158,6 +1164,7 @@ int main(int argc, char *argv[]) +@@ -1203,6 +1209,7 @@ int main(int argc, char *argv[]) if (os_program_init()) return -1; diff --git a/package/network/services/hostapd/patches/300-noscan.patch b/package/network/services/hostapd/patches/300-noscan.patch index 50b70b7e5d..4ea26b6c72 100644 --- a/package/network/services/hostapd/patches/300-noscan.patch +++ b/package/network/services/hostapd/patches/300-noscan.patch @@ -1,6 +1,6 @@ --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -2638,6 +2638,8 @@ static int hostapd_config_fill(struct ho +@@ -2639,6 +2639,8 @@ static int hostapd_config_fill(struct ho } #endif /* CONFIG_IEEE80211W */ #ifdef CONFIG_IEEE80211N @@ -21,9 +21,9 @@ int require_ht; --- a/src/ap/hw_features.c +++ b/src/ap/hw_features.c -@@ -574,7 +574,7 @@ static int ieee80211n_check_40mhz(struct - { +@@ -690,7 +690,7 @@ static int ieee80211n_check_40mhz(struct struct wpa_driver_scan_params params; + int ret; - if (!iface->conf->secondary_channel) + if (!iface->conf->secondary_channel || iface->conf->noscan) diff --git a/package/network/services/hostapd/patches/310-rescan_immediately.patch b/package/network/services/hostapd/patches/310-rescan_immediately.patch index f96c7e616d..3b1f493770 100644 --- a/package/network/services/hostapd/patches/310-rescan_immediately.patch +++ b/package/network/services/hostapd/patches/310-rescan_immediately.patch @@ -1,6 +1,6 @@ --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -2746,7 +2746,7 @@ static struct wpa_supplicant * wpa_suppl +@@ -2751,7 +2751,7 @@ static struct wpa_supplicant * wpa_suppl if (wpa_s == NULL) return NULL; wpa_s->scan_req = INITIAL_SCAN_REQ; diff --git a/package/network/services/hostapd/patches/320-optional_rfkill.patch b/package/network/services/hostapd/patches/320-optional_rfkill.patch index b0ea38f205..3808f9bcb6 100644 --- a/package/network/services/hostapd/patches/320-optional_rfkill.patch +++ b/package/network/services/hostapd/patches/320-optional_rfkill.patch @@ -1,6 +1,6 @@ --- a/src/drivers/drivers.mak +++ b/src/drivers/drivers.mak -@@ -25,7 +25,6 @@ NEED_SME=y +@@ -30,7 +30,6 @@ NEED_SME=y NEED_AP_MLME=y NEED_NETLINK=y NEED_LINUX_IOCTL=y @@ -8,7 +8,7 @@ ifdef CONFIG_LIBNL32 DRV_LIBS += -lnl-3 -@@ -109,7 +108,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT +@@ -114,7 +113,6 @@ DRV_WPA_CFLAGS += -DCONFIG_DRIVER_WEXT CONFIG_WIRELESS_EXTENSION=y NEED_NETLINK=y NEED_LINUX_IOCTL=y @@ -16,7 +16,7 @@ endif ifdef CONFIG_DRIVER_NDIS -@@ -135,7 +133,6 @@ endif +@@ -140,7 +138,6 @@ endif ifdef CONFIG_WIRELESS_EXTENSION DRV_WPA_CFLAGS += -DCONFIG_WIRELESS_EXTENSION DRV_WPA_OBJS += ../src/drivers/driver_wext.o @@ -24,7 +24,7 @@ endif ifdef NEED_NETLINK -@@ -148,6 +145,7 @@ endif +@@ -153,6 +150,7 @@ endif ifdef NEED_RFKILL DRV_OBJS += ../src/drivers/rfkill.o diff --git a/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch b/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch index 864ac5e309..dbc9ef8ef5 100644 --- a/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch +++ b/package/network/services/hostapd/patches/330-nl80211_fix_set_freq.patch @@ -1,15 +1,15 @@ --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -7380,7 +7380,7 @@ static int wpa_driver_nl80211_set_freq(s - - nl80211_cmd(drv, msg, 0, NL80211_CMD_SET_WIPHY); +@@ -7488,7 +7488,7 @@ static int nl80211_set_channel(struct i8 + nl80211_cmd(drv, msg, 0, set_chan ? NL80211_CMD_SET_CHANNEL : + NL80211_CMD_SET_WIPHY); - NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex); + NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, bss->ifindex); if (nl80211_put_freq_params(msg, freq) < 0) goto nla_put_failure; -@@ -11905,7 +11905,7 @@ static int nl80211_switch_channel(void * +@@ -12047,7 +12047,7 @@ static int nl80211_switch_channel(void * return -ENOMEM; nl80211_cmd(drv, msg, 0, NL80211_CMD_CHANNEL_SWITCH); diff --git a/package/network/services/hostapd/patches/340-reload_freq_change.patch b/package/network/services/hostapd/patches/340-reload_freq_change.patch index d76f9de02f..d3e8918d71 100644 --- a/package/network/services/hostapd/patches/340-reload_freq_change.patch +++ b/package/network/services/hostapd/patches/340-reload_freq_change.patch @@ -1,6 +1,6 @@ --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -68,6 +68,16 @@ static void hostapd_reload_bss(struct ho +@@ -70,6 +70,16 @@ static void hostapd_reload_bss(struct ho #endif /* CONFIG_NO_RADIUS */ ssid = &hapd->conf->ssid; @@ -17,7 +17,7 @@ if (!ssid->wpa_psk_set && ssid->wpa_psk && !ssid->wpa_psk->next && ssid->wpa_passphrase_set && ssid->wpa_passphrase) { /* -@@ -168,20 +178,12 @@ int hostapd_reload_config(struct hostapd +@@ -170,20 +180,12 @@ int hostapd_reload_config(struct hostapd oldconf = hapd->iconf; iface->conf = newconf; diff --git a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch index 8da6372b0d..e6f6cf3b5d 100644 --- a/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch +++ b/package/network/services/hostapd/patches/350-nl80211_del_beacon_bss.patch @@ -1,6 +1,6 @@ --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -4748,18 +4748,20 @@ wpa_driver_nl80211_finish_drv_init(struc +@@ -4817,18 +4817,20 @@ wpa_driver_nl80211_finish_drv_init(struc } @@ -24,7 +24,7 @@ return send_and_recv_msgs(drv, msg, NULL, NULL); nla_put_failure: -@@ -4767,6 +4769,15 @@ static int wpa_driver_nl80211_del_beacon +@@ -4836,6 +4838,15 @@ static int wpa_driver_nl80211_del_beacon return -ENOBUFS; } @@ -40,7 +40,7 @@ /** * wpa_driver_nl80211_deinit - Deinitialize nl80211 driver interface -@@ -10475,7 +10486,6 @@ static int wpa_driver_nl80211_stop_ap(vo +@@ -10617,7 +10628,6 @@ static int wpa_driver_nl80211_stop_ap(vo if (!is_ap_interface(drv->nlmode)) return -1; wpa_driver_nl80211_del_beacon(drv); diff --git a/package/network/services/hostapd/patches/370-ap_sta_support.patch b/package/network/services/hostapd/patches/370-ap_sta_support.patch index b982a6b248..3a623c45bf 100644 --- a/package/network/services/hostapd/patches/370-ap_sta_support.patch +++ b/package/network/services/hostapd/patches/370-ap_sta_support.patch @@ -45,7 +45,7 @@ CONFIG_OS=win32 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -104,6 +104,55 @@ const char *wpa_supplicant_full_license5 +@@ -105,6 +105,55 @@ const char *wpa_supplicant_full_license5 "\n"; #endif /* CONFIG_NO_STDOUT_DEBUG */ @@ -101,7 +101,7 @@ /* Configure default/group WEP keys for static WEP */ int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) { -@@ -705,8 +754,12 @@ void wpa_supplicant_set_state(struct wpa +@@ -710,8 +759,12 @@ void wpa_supplicant_set_state(struct wpa #endif /* CONFIG_P2P */ sme_sched_obss_scan(wpa_s, 1); @@ -114,7 +114,7 @@ wpa_s->new_connection = 1; wpa_drv_set_operstate(wpa_s, 0); #ifndef IEEE8021X_EAPOL -@@ -3516,6 +3569,20 @@ static int wpa_supplicant_init_iface(str +@@ -3594,6 +3647,20 @@ static int wpa_supplicant_init_iface(str sizeof(wpa_s->bridge_ifname)); } @@ -135,7 +135,7 @@ /* RSNA Supplicant Key Management - INITIALIZE */ eapol_sm_notify_portEnabled(wpa_s->eapol, FALSE); eapol_sm_notify_portValid(wpa_s->eapol, FALSE); -@@ -3711,6 +3778,11 @@ static void wpa_supplicant_deinit_iface( +@@ -3797,6 +3864,11 @@ static void wpa_supplicant_deinit_iface( if (terminate) wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING); @@ -157,7 +157,7 @@ #include "drivers/driver.h" #include "wpa_supplicant_i.h" #include "config.h" -@@ -247,6 +248,10 @@ static void calculate_update_time(const +@@ -247,6 +248,10 @@ static void calculate_update_time(const static void wpa_bss_copy_res(struct wpa_bss *dst, struct wpa_scan_res *src, struct os_reltime *fetch_time) { diff --git a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch b/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch index d39ba2e33b..dee1ab322c 100644 --- a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch +++ b/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch @@ -30,7 +30,7 @@ reply_len = -1; --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -797,6 +797,9 @@ ifdef CONFIG_WNM +@@ -805,6 +805,9 @@ ifdef CONFIG_WNM OBJS += ../src/ap/wnm_ap.o endif ifdef CONFIG_CTRL_IFACE @@ -42,7 +42,7 @@ --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c -@@ -6075,6 +6075,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -6243,6 +6243,7 @@ char * wpa_supplicant_ctrl_iface_process reply_len = -1; } else if (os_strncmp(buf, "NOTE ", 5) == 0) { wpa_printf(MSG_INFO, "NOTE: %s", buf + 5); @@ -50,7 +50,7 @@ } else if (os_strcmp(buf, "MIB") == 0) { reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size); if (reply_len >= 0) { -@@ -6086,6 +6087,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -6254,6 +6255,7 @@ char * wpa_supplicant_ctrl_iface_process else reply_len += res; } @@ -58,7 +58,7 @@ } else if (os_strncmp(buf, "STATUS", 6) == 0) { reply_len = wpa_supplicant_ctrl_iface_status( wpa_s, buf + 6, reply, reply_size); -@@ -6490,6 +6492,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -6661,6 +6663,7 @@ char * wpa_supplicant_ctrl_iface_process reply_len = wpa_supplicant_ctrl_iface_bss( wpa_s, buf + 4, reply, reply_size); #ifdef CONFIG_AP @@ -66,7 +66,7 @@ } else if (os_strcmp(buf, "STA-FIRST") == 0) { reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size); } else if (os_strncmp(buf, "STA ", 4) == 0) { -@@ -6498,6 +6501,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -6669,6 +6672,7 @@ char * wpa_supplicant_ctrl_iface_process } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply, reply_size); @@ -92,7 +92,7 @@ #ifdef CONFIG_P2P_MANAGER static int p2p_manager_disconnect(struct hostapd_data *hapd, u16 stype, -@@ -524,3 +526,4 @@ int hostapd_parse_csa_settings(const cha +@@ -526,3 +528,4 @@ int hostapd_parse_csa_settings(const cha return 0; } @@ -117,7 +117,7 @@ struct sta_info *sta, int success, --- a/src/ap/wpa_auth.c +++ b/src/ap/wpa_auth.c -@@ -2830,6 +2830,7 @@ static const char * wpa_bool_txt(int boo +@@ -2832,6 +2832,7 @@ static const char * wpa_bool_txt(int boo return bool ? "TRUE" : "FALSE"; } @@ -125,7 +125,7 @@ #define RSN_SUITE "%02x-%02x-%02x-%d" #define RSN_SUITE_ARG(s) \ -@@ -2974,7 +2975,7 @@ int wpa_get_mib_sta(struct wpa_state_mac +@@ -2976,7 +2977,7 @@ int wpa_get_mib_sta(struct wpa_state_mac return len; } @@ -136,7 +136,7 @@ { --- a/src/rsn_supp/wpa.c +++ b/src/rsn_supp/wpa.c -@@ -1912,6 +1912,8 @@ static u32 wpa_key_mgmt_suite(struct wpa +@@ -1911,6 +1911,8 @@ static u32 wpa_key_mgmt_suite(struct wpa } @@ -145,7 +145,7 @@ #define RSN_SUITE "%02x-%02x-%02x-%d" #define RSN_SUITE_ARG(s) \ ((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff -@@ -1995,6 +1997,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch +@@ -1994,6 +1996,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch return (int) len; } diff --git a/package/network/services/hostapd/patches/410-bring_down_interface.patch b/package/network/services/hostapd/patches/410-bring_down_interface.patch index 5a57249c77..165484b553 100644 --- a/package/network/services/hostapd/patches/410-bring_down_interface.patch +++ b/package/network/services/hostapd/patches/410-bring_down_interface.patch @@ -1,6 +1,6 @@ --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -8936,12 +8936,7 @@ static int wpa_driver_nl80211_set_mode(s +@@ -9070,12 +9070,7 @@ static int wpa_driver_nl80211_set_mode(s /* Try to set the mode again while the interface is * down */ ret = nl80211_set_mode(drv, drv->ifindex, nlmode); @@ -14,7 +14,7 @@ break; } else wpa_printf(MSG_DEBUG, "nl80211: Failed to set " -@@ -8954,6 +8949,8 @@ static int wpa_driver_nl80211_set_mode(s +@@ -9088,6 +9083,8 @@ static int wpa_driver_nl80211_set_mode(s "interface is down"); drv->nlmode = nlmode; drv->ignore_if_down_event = 1; diff --git a/package/network/services/hostapd/patches/440-dynamic_20_40_mhz.patch b/package/network/services/hostapd/patches/440-dynamic_20_40_mhz.patch deleted file mode 100644 index af2fb26c81..0000000000 --- a/package/network/services/hostapd/patches/440-dynamic_20_40_mhz.patch +++ /dev/null @@ -1,202 +0,0 @@ ---- a/hostapd/config_file.c -+++ b/hostapd/config_file.c -@@ -2648,6 +2648,10 @@ static int hostapd_config_fill(struct ho - line); - return 1; - } -+ } else if (os_strcmp(buf, "dynamic_ht40") == 0) { -+ conf->dynamic_ht40 = atoi(pos); -+ if (conf->dynamic_ht40 == 1) -+ conf->dynamic_ht40 = 1500; - } else if (os_strcmp(buf, "require_ht") == 0) { - conf->require_ht = atoi(pos); - } else if (os_strcmp(buf, "obss_interval") == 0) { ---- a/src/ap/ap_config.h -+++ b/src/ap/ap_config.h -@@ -580,6 +580,7 @@ struct hostapd_config { - int ieee80211n; - int secondary_channel; - int require_ht; -+ int dynamic_ht40; - int obss_interval; - u32 vht_capab; - int ieee80211ac; ---- a/src/ap/hostapd.c -+++ b/src/ap/hostapd.c -@@ -22,6 +22,7 @@ - #include "beacon.h" - #include "iapp.h" - #include "ieee802_1x.h" -+#include "ieee802_11.h" - #include "ieee802_11_auth.h" - #include "vlan_init.h" - #include "wpa_auth.h" -@@ -328,6 +329,7 @@ static void hostapd_cleanup(struct hosta - static void hostapd_cleanup_iface_partial(struct hostapd_iface *iface) - { - wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); -+ hostapd_deinit_ht(iface); - hostapd_free_hw_features(iface->hw_features, iface->num_hw_features); - iface->hw_features = NULL; - os_free(iface->current_rates); ---- a/src/ap/hostapd.h -+++ b/src/ap/hostapd.h -@@ -330,6 +330,9 @@ struct hostapd_iface { - /* Overlapping BSS information */ - int olbc_ht; - -+ int force_20mhz; -+ struct os_time last_20mhz_trigger; -+ - u16 ht_op_mode; - - /* surveying helpers */ ---- a/src/ap/ieee802_11.c -+++ b/src/ap/ieee802_11.c -@@ -1556,6 +1556,9 @@ static void handle_beacon(struct hostapd - sizeof(mgmt->u.beacon)), &elems, - 0); - -+ if (!elems.ht_capabilities) -+ hostapd_trigger_20mhz(hapd->iface); -+ - ap_list_process_beacon(hapd->iface, mgmt, &elems, fi); - } - ---- a/src/ap/ieee802_11.h -+++ b/src/ap/ieee802_11.h -@@ -83,4 +83,17 @@ int hostapd_update_time_adv(struct hosta - void hostapd_client_poll_ok(struct hostapd_data *hapd, const u8 *addr); - u8 * hostapd_eid_bss_max_idle_period(struct hostapd_data *hapd, u8 *eid); - -+#ifdef CONFIG_IEEE80211N -+void hostapd_trigger_20mhz(struct hostapd_iface *iface); -+void hostapd_deinit_ht(struct hostapd_iface *iface); -+ -+#else -+static inline void hostapd_deinit_ht(struct hostapd_iface *iface) -+{ -+} -+static inline void hostapd_trigger_20mhz(struct hostapd_iface *iface) -+{ -+} -+#endif /* CONFIG_IEEE80211N */ -+ - #endif /* IEEE802_11_H */ ---- a/src/ap/ieee802_11_ht.c -+++ b/src/ap/ieee802_11_ht.c -@@ -13,9 +13,11 @@ - #include "common/ieee802_11_defs.h" - #include "hostapd.h" - #include "ap_config.h" -+#include "ap_drv_ops.h" - #include "sta_info.h" - #include "beacon.h" - #include "ieee802_11.h" -+#include "utils/eloop.h" - - - u8 * hostapd_eid_ht_capabilities(struct hostapd_data *hapd, u8 *eid) -@@ -92,6 +94,9 @@ u8 * hostapd_eid_ht_operation(struct hos - - oper->primary_chan = hapd->iconf->channel; - oper->operation_mode = host_to_le16(hapd->iface->ht_op_mode); -+ if (hapd->iface->force_20mhz) -+ goto skip; -+ - if (hapd->iconf->secondary_channel == 1) - oper->ht_param |= HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE | - HT_INFO_HT_PARAM_STA_CHNL_WIDTH; -@@ -99,6 +104,7 @@ u8 * hostapd_eid_ht_operation(struct hos - oper->ht_param |= HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW | - HT_INFO_HT_PARAM_STA_CHNL_WIDTH; - -+skip: - pos += sizeof(*oper); - - return pos; -@@ -288,3 +294,84 @@ void hostapd_get_ht_capab(struct hostapd - - neg_ht_cap->ht_capabilities_info = host_to_le16(cap); - } -+ -+static void hostapd_set_force_20mhz(struct hostapd_iface *iface); -+ -+static void hostapd_restore_40mhz(void *eloop_data, void *user_ctx) -+{ -+ struct hostapd_iface *iface = eloop_data; -+ struct os_time time; -+ int timeout; -+ -+ if (!iface->last_20mhz_trigger.sec) -+ return; -+ -+ os_get_time(&time); -+ timeout = iface->last_20mhz_trigger.sec + iface->conf->dynamic_ht40 - -+ time.sec; -+ -+ if (timeout > 0) { -+ eloop_register_timeout(timeout, 0, hostapd_restore_40mhz, -+ iface, NULL); -+ return; -+ } -+ -+ iface->last_20mhz_trigger.sec = 0; -+ iface->last_20mhz_trigger.usec = 0; -+ -+ iface->force_20mhz = 0; -+ hostapd_set_force_20mhz(iface); -+} -+ -+static void hostapd_set_force_20mhz(struct hostapd_iface *iface) -+{ -+ int secondary_channel; -+ int i; -+ -+ ieee802_11_set_beacons(iface); -+ -+ for (i = 0; i < iface->num_bss; i++) { -+ struct hostapd_data *hapd = iface->bss[i]; -+ -+ if (iface->force_20mhz) -+ secondary_channel = 0; -+ else -+ secondary_channel = hapd->iconf->secondary_channel; -+ -+ if (hostapd_set_freq(hapd, hapd->iconf->hw_mode, iface->freq, -+ hapd->iconf->channel, -+ hapd->iconf->ieee80211n, -+ hapd->iconf->ieee80211ac, -+ secondary_channel, -+ hapd->iconf->vht_oper_chwidth, -+ hapd->iconf->vht_oper_centr_freq_seg0_idx, -+ hapd->iconf->vht_oper_centr_freq_seg1_idx)) { -+ wpa_printf(MSG_ERROR, "Could not set channel for " -+ "kernel driver"); -+ } -+ } -+} -+ -+void hostapd_deinit_ht(struct hostapd_iface *iface) -+{ -+ eloop_cancel_timeout(hostapd_restore_40mhz, iface, NULL); -+} -+ -+void hostapd_trigger_20mhz(struct hostapd_iface *iface) -+{ -+ if (!iface->conf->dynamic_ht40) -+ return; -+ -+ if (!iface->force_20mhz) { -+ iface->force_20mhz = 1; -+ hostapd_set_force_20mhz(iface); -+ } -+ -+ if (!iface->last_20mhz_trigger.sec) { -+ eloop_cancel_timeout(hostapd_restore_40mhz, iface, NULL); -+ eloop_register_timeout(iface->conf->dynamic_ht40, 0, -+ hostapd_restore_40mhz, iface, NULL); -+ } -+ -+ os_get_time(&iface->last_20mhz_trigger); -+} diff --git a/package/network/services/hostapd/patches/500-wpa_supplicant-add-new-config-params-to-be-used-with.patch b/package/network/services/hostapd/patches/500-wpa_supplicant-add-new-config-params-to-be-used-with.patch index 56569702a9..74793ef3e1 100644 --- a/package/network/services/hostapd/patches/500-wpa_supplicant-add-new-config-params-to-be-used-with.patch +++ b/package/network/services/hostapd/patches/500-wpa_supplicant-add-new-config-params-to-be-used-with.patch @@ -149,9 +149,9 @@ Signed-hostap: Antonio Quartulli + { INT_RANGE(fixed_freq, 0, 1) }, + { FUNC(rates) }, + { FUNC(mcast_rate) }, - }; - - #undef OFFSET + #ifdef CONFIG_MACSEC + { INT_RANGE(macsec_policy, 0, 1) }, + #endif /* CONFIG_MACSEC */ --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h @@ -12,6 +12,7 @@ @@ -162,20 +162,20 @@ Signed-hostap: Antonio Quartulli #define MAX_SSID_LEN 32 -@@ -636,6 +637,10 @@ struct wpa_ssid { - * dereferences since it may not be updated in all cases. +@@ -637,6 +638,10 @@ struct wpa_ssid { */ void *parent_cred; -+ + + int fixed_freq; + unsigned char rates[NL80211_MAX_SUPP_RATES]; + double mcast_rate; - }; - - #endif /* CONFIG_SSID_H */ ++ + #ifdef CONFIG_MACSEC + /** + * macsec_policy - Determines the policy for MACsec secure session --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -1791,6 +1791,13 @@ static void wpas_start_assoc_cb(struct w +@@ -1805,6 +1805,13 @@ static void wpas_start_assoc_cb(struct w params.beacon_int = ssid->beacon_int; else params.beacon_int = wpa_s->conf->beacon_int; diff --git a/package/network/services/hostapd/patches/501-driver_nl80211-use-new-parameters-during-ibss-join.patch b/package/network/services/hostapd/patches/501-driver_nl80211-use-new-parameters-during-ibss-join.patch index c774682323..e7484d927c 100644 --- a/package/network/services/hostapd/patches/501-driver_nl80211-use-new-parameters-during-ibss-join.patch +++ b/package/network/services/hostapd/patches/501-driver_nl80211-use-new-parameters-during-ibss-join.patch @@ -10,7 +10,7 @@ Signed-hostap: Antonio Quartulli --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -8455,7 +8455,7 @@ static int wpa_driver_nl80211_ibss(struc +@@ -8581,7 +8581,7 @@ static int wpa_driver_nl80211_ibss(struc struct wpa_driver_associate_params *params) { struct nl_msg *msg; @@ -19,7 +19,7 @@ Signed-hostap: Antonio Quartulli int count = 0; wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex); -@@ -8494,6 +8494,37 @@ retry: +@@ -8620,6 +8620,37 @@ retry: params->beacon_int); } diff --git a/package/network/services/hostapd/patches/502-wpa_s-support-htmode-param.patch b/package/network/services/hostapd/patches/502-wpa_s-support-htmode-param.patch index fdba6d7884..45088ad171 100644 --- a/package/network/services/hostapd/patches/502-wpa_s-support-htmode-param.patch +++ b/package/network/services/hostapd/patches/502-wpa_s-support-htmode-param.patch @@ -27,7 +27,7 @@ Signed-off-by: Antonio Quartulli * bssid_hint - BSSID of a proposed AP --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -8525,6 +8525,22 @@ retry: +@@ -8651,6 +8651,22 @@ retry: NLA_PUT_U32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate); } @@ -129,9 +129,9 @@ Signed-off-by: Antonio Quartulli { FUNC(rates) }, { FUNC(mcast_rate) }, + { FUNC(htmode) }, - }; - - #undef OFFSET + #ifdef CONFIG_MACSEC + { INT_RANGE(macsec_policy, 0, 1) }, + #endif /* CONFIG_MACSEC */ --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h @@ -641,6 +641,8 @@ struct wpa_ssid { @@ -140,12 +140,12 @@ Signed-off-by: Antonio Quartulli double mcast_rate; + int ht_set; + unsigned int htmode; - }; - #endif /* CONFIG_SSID_H */ + #ifdef CONFIG_MACSEC + /** --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -1798,6 +1798,8 @@ static void wpas_start_assoc_cb(struct w +@@ -1812,6 +1812,8 @@ static void wpas_start_assoc_cb(struct w i++; } params.mcast_rate = ssid->mcast_rate; diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch index b17d8f24ac..96a91db664 100644 --- a/package/network/services/hostapd/patches/600-ubus_support.patch +++ b/package/network/services/hostapd/patches/600-ubus_support.patch @@ -498,7 +498,7 @@ +#endif --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -261,6 +261,7 @@ static void hostapd_free_hapd_data(struc +@@ -262,6 +262,7 @@ static void hostapd_free_hapd_data(struc hapd->started = 0; wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface); @@ -506,7 +506,7 @@ iapp_deinit(hapd->iapp); hapd->iapp = NULL; accounting_deinit(hapd); -@@ -864,6 +865,8 @@ static int hostapd_setup_bss(struct host +@@ -890,6 +891,8 @@ static int hostapd_setup_bss(struct host if (hapd->driver && hapd->driver->set_operstate) hapd->driver->set_operstate(hapd->drv_priv, 1); @@ -515,7 +515,7 @@ return 0; } -@@ -1154,6 +1157,7 @@ int hostapd_setup_interface_complete(str +@@ -1180,6 +1183,7 @@ int hostapd_setup_interface_complete(str if (err) goto fail; @@ -523,7 +523,7 @@ wpa_printf(MSG_DEBUG, "Completing interface initialization"); if (iface->conf->channel) { #ifdef NEED_AP_MLME -@@ -1265,6 +1269,7 @@ int hostapd_setup_interface_complete(str +@@ -1297,6 +1301,7 @@ int hostapd_setup_interface_complete(str fail: wpa_printf(MSG_ERROR, "Interface initialization failed"); @@ -531,7 +531,7 @@ hostapd_set_state(iface, HAPD_IFACE_DISABLED); wpa_msg(hapd->msg_ctx, MSG_INFO, AP_EVENT_DISABLED); if (iface->interfaces && iface->interfaces->terminate_on_error) -@@ -1587,6 +1592,7 @@ void hostapd_interface_deinit_free(struc +@@ -1623,6 +1628,7 @@ void hostapd_interface_deinit_free(struc (unsigned int) iface->conf->num_bss); driver = iface->bss[0]->driver; drv_priv = iface->bss[0]->drv_priv; @@ -541,7 +541,7 @@ __func__, driver, drv_priv); --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c -@@ -542,7 +542,8 @@ failed: +@@ -540,7 +540,8 @@ failed: static void handle_auth(struct hostapd_data *hapd, @@ -551,7 +551,7 @@ { u16 auth_alg, auth_transaction, status_code; u16 resp = WLAN_STATUS_SUCCESS; -@@ -557,6 +558,11 @@ static void handle_auth(struct hostapd_d +@@ -555,6 +556,11 @@ static void handle_auth(struct hostapd_d size_t resp_ies_len = 0; char *identity = NULL; char *radius_cui = NULL; @@ -563,7 +563,7 @@ if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.auth)) { wpa_printf(MSG_INFO, "handle_auth - too short payload (len=%lu)", -@@ -640,6 +646,14 @@ static void handle_auth(struct hostapd_d +@@ -638,6 +644,14 @@ static void handle_auth(struct hostapd_d resp = WLAN_STATUS_UNSPECIFIED_FAILURE; goto fail; } @@ -578,7 +578,7 @@ if (res == HOSTAPD_ACL_PENDING) { wpa_printf(MSG_DEBUG, "Authentication frame from " MACSTR " waiting for an external authentication", -@@ -1274,13 +1288,18 @@ static void send_assoc_resp(struct hosta +@@ -1272,13 +1286,18 @@ static void send_assoc_resp(struct hosta static void handle_assoc(struct hostapd_data *hapd, const struct ieee80211_mgmt *mgmt, size_t len, @@ -598,7 +598,7 @@ if (len < IEEE80211_HDRLEN + (reassoc ? sizeof(mgmt->u.reassoc_req) : sizeof(mgmt->u.assoc_req))) { -@@ -1379,6 +1398,13 @@ static void handle_assoc(struct hostapd_ +@@ -1377,6 +1396,13 @@ static void handle_assoc(struct hostapd_ goto fail; } @@ -612,7 +612,7 @@ sta->capability = capab_info; sta->listen_interval = listen_interval; -@@ -1760,7 +1786,7 @@ int ieee802_11_mgmt(struct hostapd_data +@@ -1765,7 +1791,7 @@ int ieee802_11_mgmt(struct hostapd_data if (stype == WLAN_FC_STYPE_PROBE_REQ) { @@ -621,7 +621,7 @@ return 1; } -@@ -1775,17 +1801,17 @@ int ieee802_11_mgmt(struct hostapd_data +@@ -1780,17 +1806,17 @@ int ieee802_11_mgmt(struct hostapd_data switch (stype) { case WLAN_FC_STYPE_AUTH: wpa_printf(MSG_DEBUG, "mgmt::auth"); -- 2.11.0