diff options
Diffstat (limited to 'package/network/services/hostapd/patches/554-multi_ap-don-t-reject-backhaul-STA-on-fronhaul-BSS.patch')
-rw-r--r-- | package/network/services/hostapd/patches/554-multi_ap-don-t-reject-backhaul-STA-on-fronhaul-BSS.patch | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/package/network/services/hostapd/patches/554-multi_ap-don-t-reject-backhaul-STA-on-fronhaul-BSS.patch b/package/network/services/hostapd/patches/554-multi_ap-don-t-reject-backhaul-STA-on-fronhaul-BSS.patch new file mode 100644 index 0000000000..6c30a1793e --- /dev/null +++ b/package/network/services/hostapd/patches/554-multi_ap-don-t-reject-backhaul-STA-on-fronhaul-BSS.patch @@ -0,0 +1,106 @@ +From 71b061b8a13791a1ed858d924e401541c8584030 Mon Sep 17 00:00:00 2001 +From: "Arnout Vandecappelle (Essensium/Mind)" <arnout@mind.be> +Date: Wed, 9 Jan 2019 19:08:00 +0100 +Subject: [PATCH] multi_ap: don't reject backhaul STA on fronhaul BSS + +The Multi-AP specification only specifies that information elements have +to be added to the association requests and responses; it doesn't +specify anything about what should be done in case they are missing. +Currently, we reject non-backhaul associations on a backhaul-only BSS, +and non-fronthaul associations on a fronthaul-only BSS. + +However, this makes WPS fail when fronthaul and backhaul are separate +SSIDs. Indeed, WPS for the backhaul link is performed on the *fronthaul* +SSID. Thus, the association request used for WPS *will* contain the +Multi-AP IE indicating a backhaul STA. Rejecting that association makes +WPS fail. + +Therefore, accept a multi-AP backhaul STA association request on a +fronthaul-only BSS. Still issue a warning about it, but only at level +DEBUG intead of INFO. Also change the condition checking to make it +clearer. + +While we're at it, also fix the handling of unexpected bits in the +Multi-AP IE. 4 bits are reserved in the specification, so these +certainly have to be ignored. The specification also doesn't say that +setting one of the other bits is not allowed. Therefore, only report +unexpected values in the Multi-AP IE, don't reject because of it. +Note that a malformed IE (containing more than one byte) still triggers +a rejection. + +Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> +--- +v4: new patch + +Cfr. discussion on http://lists.infradead.org/pipermail/hostap/2019-January/039232.html +and follow-ups. +--- + src/ap/ieee802_11.c | 38 +++++++++++++++++++----------------- + tests/hwsim/test_multi_ap.py | 6 ++---- + 2 files changed, 22 insertions(+), 22 deletions(-) + +--- a/src/ap/ieee802_11.c ++++ b/src/ap/ieee802_11.c +@@ -2253,28 +2253,30 @@ static u16 check_multi_ap(struct hostapd + } + } + +- if (multi_ap_value == MULTI_AP_BACKHAUL_STA) +- sta->flags |= WLAN_STA_MULTI_AP; +- +- if ((hapd->conf->multi_ap & BACKHAUL_BSS) && +- multi_ap_value == MULTI_AP_BACKHAUL_STA) +- return WLAN_STATUS_SUCCESS; +- +- if (hapd->conf->multi_ap & FRONTHAUL_BSS) { +- if (multi_ap_value == MULTI_AP_BACKHAUL_STA) { +- hostapd_logger(hapd, sta->addr, +- HOSTAPD_MODULE_IEEE80211, +- HOSTAPD_LEVEL_INFO, +- "Backhaul STA tries to associate with fronthaul-only BSS"); +- return WLAN_STATUS_ASSOC_DENIED_UNSPEC; +- } +- return WLAN_STATUS_SUCCESS; ++ if (multi_ap_value && multi_ap_value != MULTI_AP_BACKHAUL_STA) ++ hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, ++ HOSTAPD_LEVEL_INFO, ++ "Multi-AP IE with unexpected value 0x%02x", ++ multi_ap_value); ++ ++ if (!(multi_ap_value & MULTI_AP_BACKHAUL_STA)) { ++ if (hapd->conf->multi_ap & FRONTHAUL_BSS) ++ return WLAN_STATUS_SUCCESS; ++ ++ hostapd_logger(hapd, sta->addr, ++ HOSTAPD_MODULE_IEEE80211, ++ HOSTAPD_LEVEL_INFO, ++ "Non-Multi-AP STA tries to associate with backhaul-only BSS"); ++ return WLAN_STATUS_ASSOC_DENIED_UNSPEC; + } + +- hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, +- HOSTAPD_LEVEL_INFO, +- "Non-Multi-AP STA tries to associate with backhaul-only BSS"); +- return WLAN_STATUS_ASSOC_DENIED_UNSPEC; ++ if (!(hapd->conf->multi_ap & BACKHAUL_BSS)) ++ hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211, ++ HOSTAPD_LEVEL_DEBUG, ++ "Backhaul STA tries to associate with fronthaul-only BSS"); ++ ++ sta->flags |= WLAN_STA_MULTI_AP; ++ return WLAN_STATUS_SUCCESS; + } + + +--- a/tests/hwsim/test_multi_ap.py ++++ b/tests/hwsim/test_multi_ap.py +@@ -59,7 +59,5 @@ def test_multi_ap_fronthaul_on_ap(dev, a + dev[0].request("DISCONNECT") + if ev is None: + raise Exception("Connection result not reported") +- if "CTRL-EVENT-ASSOC-REJECT" not in ev: +- raise Exception("Association rejection not reported") +- if "status_code=12" not in ev: +- raise Exception("Unexpected association status code: " + ev) ++ if "CTRL-EVENT-DISCONNECTED" not in ev: ++ raise Exception("Unexpected connection result") |