summaryrefslogtreecommitdiffstats
path: root/package/network/services/hostapd/patches/710-wds-wep-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/services/hostapd/patches/710-wds-wep-fix.patch')
-rw-r--r--package/network/services/hostapd/patches/710-wds-wep-fix.patch156
1 files changed, 0 insertions, 156 deletions
diff --git a/package/network/services/hostapd/patches/710-wds-wep-fix.patch b/package/network/services/hostapd/patches/710-wds-wep-fix.patch
deleted file mode 100644
index 1411d1fc65..0000000000
--- a/package/network/services/hostapd/patches/710-wds-wep-fix.patch
+++ /dev/null
@@ -1,156 +0,0 @@
---- a/src/ap/ap_drv_ops.c
-+++ b/src/ap/ap_drv_ops.c
-@@ -296,19 +296,19 @@ int hostapd_vlan_if_remove(struct hostap
- }
-
-
--int hostapd_set_wds_sta(struct hostapd_data *hapd, const u8 *addr, int aid,
-- int val)
-+int hostapd_set_wds_sta(struct hostapd_data *hapd, char *ifname_wds,
-+ const u8 *addr, int aid, int val)
- {
- const char *bridge = NULL;
-
- if (hapd->driver == NULL || hapd->driver->set_wds_sta == NULL)
-- return 0;
-+ return -1;
- if (hapd->conf->wds_bridge[0])
- bridge = hapd->conf->wds_bridge;
- else if (hapd->conf->bridge[0])
- bridge = hapd->conf->bridge;
- return hapd->driver->set_wds_sta(hapd->drv_priv, addr, aid, val,
-- bridge);
-+ bridge, ifname_wds);
- }
-
-
---- a/src/ap/ap_drv_ops.h
-+++ b/src/ap/ap_drv_ops.h
-@@ -31,8 +31,8 @@ int hostapd_set_drv_ieee8021x(struct hos
- int enabled);
- int hostapd_vlan_if_add(struct hostapd_data *hapd, const char *ifname);
- int hostapd_vlan_if_remove(struct hostapd_data *hapd, const char *ifname);
--int hostapd_set_wds_sta(struct hostapd_data *hapd, const u8 *addr, int aid,
-- int val);
-+int hostapd_set_wds_sta(struct hostapd_data *hapd, char *ifname_wds,
-+ const u8 *addr, int aid, int val);
- int hostapd_sta_add(struct hostapd_data *hapd,
- const u8 *addr, u16 aid, u16 capability,
- const u8 *supp_rates, size_t supp_rates_len,
---- a/src/ap/ieee802_11.c
-+++ b/src/ap/ieee802_11.c
-@@ -1846,6 +1846,29 @@ static void handle_auth_cb(struct hostap
- }
- }
-
-+static void hostapd_set_wds_encryption(struct hostapd_data *hapd,
-+ struct sta_info *sta,
-+ char *ifname_wds)
-+{
-+ int i, idx;
-+ struct hostapd_ssid *ssid = sta->ssid;
-+
-+ if (hapd->conf->ieee802_1x || hapd->conf->wpa)
-+ return;
-+
-+ for (i = 0; i < 4; i++) {
-+ if (ssid->wep.key[i] &&
-+ hostapd_drv_set_key(ifname_wds, hapd, WPA_ALG_WEP, NULL, i,
-+ i == ssid->wep.idx, NULL, 0,
-+ ssid->wep.key[i],
-+ ssid->wep.len[i])) {
-+ wpa_printf(MSG_WARNING,
-+ "Could not set WEP keys for WDS interface; %s",
-+ ifname_wds);
-+ break;
-+ }
-+ }
-+}
-
- static void handle_assoc_cb(struct hostapd_data *hapd,
- const struct ieee80211_mgmt *mgmt,
-@@ -1949,8 +1972,15 @@ static void handle_assoc_cb(struct hosta
- goto fail;
- }
-
-- if (sta->flags & WLAN_STA_WDS)
-- hostapd_set_wds_sta(hapd, sta->addr, sta->aid, 1);
-+ if (sta->flags & WLAN_STA_WDS) {
-+ int ret;
-+ char ifname_wds[IFNAMSIZ + 1];
-+
-+ ret = hostapd_set_wds_sta(hapd, ifname_wds, sta->addr,
-+ sta->aid, 1);
-+ if (!ret)
-+ hostapd_set_wds_encryption(hapd, sta, ifname_wds);
-+ }
-
- if (sta->eapol_sm == NULL) {
- /*
-@@ -2191,11 +2221,18 @@ void ieee802_11_rx_from_unknown(struct h
- return;
-
- if (wds && !(sta->flags & WLAN_STA_WDS)) {
-+ int ret;
-+ char ifname_wds[IFNAMSIZ + 1];
-+
- wpa_printf(MSG_DEBUG, "Enable 4-address WDS mode for "
- "STA " MACSTR " (aid %u)",
- MAC2STR(sta->addr), sta->aid);
- sta->flags |= WLAN_STA_WDS;
-- hostapd_set_wds_sta(hapd, sta->addr, sta->aid, 1);
-+ ret = hostapd_set_wds_sta(hapd, ifname_wds,
-+ sta->addr, sta->aid, 1);
-+ if (!ret)
-+ hostapd_set_wds_encryption(hapd, sta,
-+ ifname_wds);
- }
- return;
- }
---- a/src/ap/sta_info.c
-+++ b/src/ap/sta_info.c
-@@ -129,7 +129,7 @@ void ap_free_sta(struct hostapd_data *ha
- ap_sta_set_authorized(hapd, sta, 0);
-
- if (sta->flags & WLAN_STA_WDS)
-- hostapd_set_wds_sta(hapd, sta->addr, sta->aid, 0);
-+ hostapd_set_wds_sta(hapd, NULL, sta->addr, sta->aid, 0);
-
- if (!(sta->flags & WLAN_STA_PREAUTH))
- hostapd_drv_sta_remove(hapd, sta->addr);
---- a/src/drivers/driver.h
-+++ b/src/drivers/driver.h
-@@ -2057,10 +2057,12 @@ struct wpa_driver_ops {
- * @val: 1 = bind to 4-address WDS; 0 = unbind
- * @bridge_ifname: Bridge interface to use for the WDS station or %NULL
- * to indicate that bridge is not to be used
-+ * @ifname_wds: Buffer to return the interface name for the new WDS
-+ * station.
- * Returns: 0 on success, -1 on failure
- */
- int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val,
-- const char *bridge_ifname);
-+ const char *bridge_ifname, char *ifname_wds);
-
- /**
- * send_action - Transmit an Action frame
---- a/src/drivers/driver_nl80211.c
-+++ b/src/drivers/driver_nl80211.c
-@@ -8744,13 +8744,16 @@ static int have_ifidx(struct wpa_driver_
-
-
- static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val,
-- const char *bridge_ifname)
-+ const char *bridge_ifname, char *ifname_wds)
- {
- struct i802_bss *bss = priv;
- struct wpa_driver_nl80211_data *drv = bss->drv;
- char name[IFNAMSIZ + 1];
-
- os_snprintf(name, sizeof(name), "%s.sta%d", bss->ifname, aid);
-+ if (ifname_wds)
-+ os_strlcpy(ifname_wds, name, IFNAMSIZ + 1);
-+
- wpa_printf(MSG_DEBUG, "nl80211: Set WDS STA addr=" MACSTR
- " aid=%d val=%d name=%s", MAC2STR(addr), aid, val, name);
- if (val) {